Name: series-workflowfh2mx Phase: Succeeded StartedAt: 2026-08-10 09:41:08 +0000 UTC FinishedAt: 2026-08-10 11:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[0] Phase: Succeeded StartedAt: 2026-08-10 09:41:08 +0000 UTC FinishedAt: 2026-08-10 09:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 09:41:08 +0000 UTC FinishedAt: 2026-08-10 09:49:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB4_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB4_NET" ], "series_id": "a6b3b063-29db-42a8-bd26-e858657f04c7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tbnet_connected_work", "tbnet_connect_failed" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQjRfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGJuZXRfY29ubmVjdGVkX3dvcmsmIzM0OywKICAgICYjMzQ7dGJuZXRfY29ubmVjdF9mYWlsZWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlYCB3aGVuIGNvbm5lY3Rpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGh1bmRlcmJvbHQgbmV0d29yayBkcml2ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBVU0I0X05FVCBpcyBlbmFibGVkIGFuZCB0aHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIHVzZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgYW5kIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MjYwNzQ0OWRkMjUyOTBjNDFmMTUzMmQyNTU3YWY2Njc4YTZkNTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDI6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jIGIvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG5pbmRleCA5ODg5MzczMmJjNmU0Li5iNmFlYzIxNWE4ZTkzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNcbkBAIC02MjYsNiAmIzQzOzYyNiwyMCBAQCBzdGF0aWMgaW50IHRibmV0X2FsbG9jX3R4X2J1ZmZlcnMoc3RydWN0IHRibmV0ICpuZXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXJrIHRoZSBjb25uZWN0aW9uIGFzIG5vIGxvbmdlciBlc3RhYmxpc2hlZCBzbyB0aGF0XG4mIzQzO1x0ICogdGJuZXRfdGVhcl9kb3duKCkgZG9lcyBub3QgcnVuIG92ZXIgdGhlIHVud2luZCB3ZSBqdXN0IGRpZC5cbiYjNDM7XHQgKiBPbmx5IGxvZ2luX3NlbnQgaXMgY2xlYXJlZDogbG9naW5fcmVjZWl2ZWQgcmVjb3JkcyB0aGF0IHRoZSBwZWVyXG4mIzQzO1x0ICogaGFzIGxvZ2dlZCBpbiB3aXRoIHVzIGFuZCBjYXJyaWVzIHRoZSB0cmFuc21pdCBwYXRoIGl0IGdhdmUgdXMsXG4mIzQzO1x0ICogYW5kIG5vdGhpbmcgb24gdGhpcyBzaWRlIGNhbiBtYWtlIHRoZSBwZWVyIHNlbmQgdGhhdCBhZ2Fpbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2Vjb25uZWN0aW9uX2xvY2spO1xuJiM0MztcdG5ldC1cdTAwM2Vsb2dpbl9zZW50ID0gZmFsc2U7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2Vjb25uZWN0aW9uX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTtcbkBAIC02NDcsNiAmIzQzOzY2MSw5IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJldCA9IHRiX3hkb21haW5fYWxsb2NfaW5faG9waWQobmV0LVx1MDAzZXhkLCBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xuIFx0aWYgKHJldCAhPSBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpIHtcbiBcdFx0bmV0ZGV2X2VycihuZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgUnggSG9wSURcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZChuZXQtXHUwMDNleGQsIHJldCk7XG4mIzQzO1x0XHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNjkxLDYgJiM0Mzs3MDgsNyBAQCBzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0Yl9yaW5nX3N0b3AobmV0LVx1MDAzZXJ4X3JpbmcucmluZyk7XG4gXHR0Yl9yaW5nX3N0b3AobmV0LVx1MDAzZXR4X3JpbmcucmluZyk7XG4gXHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVx1MDAzZXhkLCBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xuJiM0MztcdHRibmV0X2Nvbm5lY3RfZmFpbGVkKG5ldCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRibmV0X2xvZ2luX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0I0X05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RibmV0X2Nvbm5lY3RlZF93b3JrJiMzNDssCiAgICAmIzM0O3RibmV0X2Nvbm5lY3RfZmFpbGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlYCB3aGVuIGNvbm5lY3Rpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGh1bmRlcmJvbHQgbmV0d29yayBkcml2ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBVU0I0X05FVCBpcyBlbmFibGVkIGFuZCB0aHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIHVzZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgYW5kIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjYwNzQ0OWRkMjUyOTBjNDFmMTUzMmQyNTU3YWY2Njc4YTZkNTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDI6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMKaW5kZXggOTg4OTM3MzJiYzZlNC4uYjZhZWMyMTVhOGU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYwpAQCAtNjI2LDYgJiM0Mzs2MjYsMjAgQEAgc3RhdGljIGludCB0Ym5ldF9hbGxvY190eF9idWZmZXJzKHN0cnVjdCB0Ym5ldCAqbmV0KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNYXJrIHRoZSBjb25uZWN0aW9uIGFzIG5vIGxvbmdlciBlc3RhYmxpc2hlZCBzbyB0aGF0CiYjNDM7CSAqIHRibmV0X3RlYXJfZG93bigpIGRvZXMgbm90IHJ1biBvdmVyIHRoZSB1bndpbmQgd2UganVzdCBkaWQuCiYjNDM7CSAqIE9ubHkgbG9naW5fc2VudCBpcyBjbGVhcmVkOiBsb2dpbl9yZWNlaXZlZCByZWNvcmRzIHRoYXQgdGhlIHBlZXIKJiM0MzsJICogaGFzIGxvZ2dlZCBpbiB3aXRoIHVzIGFuZCBjYXJyaWVzIHRoZSB0cmFuc21pdCBwYXRoIGl0IGdhdmUgdXMsCiYjNDM7CSAqIGFuZCBub3RoaW5nIG9uIHRoaXMgc2lkZSBjYW4gbWFrZSB0aGUgcGVlciBzZW5kIHRoYXQgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmV0LSZndDtjb25uZWN0aW9uX2xvY2spOwomIzQzOwluZXQtJmd0O2xvZ2luX3NlbnQgPSBmYWxzZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmV0LSZndDtjb25uZWN0aW9uX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTsKQEAgLTY0Nyw2ICYjNDM7NjYxLDkgQEAgc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXJldCA9IHRiX3hkb21haW5fYWxsb2NfaW5faG9waWQobmV0LSZndDt4ZCwgbmV0LSZndDtyZW1vdGVfdHJhbnNtaXRfcGF0aCk7CiAJaWYgKHJldCAhPSBuZXQtJmd0O3JlbW90ZV90cmFuc21pdF9wYXRoKSB7CiAJCW5ldGRldl9lcnIobmV0LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIFJ4IEhvcElEXG4mIzM0Oyk7CiYjNDM7CQlpZiAocmV0ICZndDs9IDApCiYjNDM7CQkJdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC0mZ3Q7eGQsIHJldCk7CiYjNDM7CQl0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpOwogCQlyZXR1cm47CiAJfQogCkBAIC02OTEsNiAmIzQzOzcwOCw3IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAl0Yl9yaW5nX3N0b3AobmV0LSZndDtyeF9yaW5nLnJpbmcpOwogCXRiX3Jpbmdfc3RvcChuZXQtJmd0O3R4X3JpbmcucmluZyk7CiAJdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC0mZ3Q7eGQsIG5ldC0mZ3Q7cmVtb3RlX3RyYW5zbWl0X3BhdGgpOwomIzQzOwl0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpOwogfQogCiBzdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUaHVuZGVyYm9sdCBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIG5ldyBmdW5jdGlvbiBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIGFuZCBhcmUgY2FsbGluZyBpdCBmcm9tIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgdGhpcyBjb25kaXRpb25hbCBgaWYgKHJldCAmZ3Q7PSAwKSB0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LSZndDt4ZCwgcmV0KTtgIGJlZm9yZSBjYWxsaW5nIHRoYXQgZmFpbHVyZSBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHRibmV0X2Nvbm5lY3RlZF93b3JrYCBpcyBhbGwgYWJvdXQgYW5kIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eSB3aXRoaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmtpbmcgY29udGV4dC4KClRodW5kZXJib2x0IG5ldHdvcmtpbmcsIHJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgaGFyZHdhcmUtc3BlY2lmaWMuIEkmIzM5O20gdGhpbmtpbmcsIGNvdWxkIHdlIHBvdGVudGlhbGx5IGVtdWxhdGUgdGhpcywgb3IgZXZlbiBmdXp6IGl0PyBIYW5nIG9uLCB0aG91Z2guIFRodW5kZXJib2x0IG5ldHdvcmtpbmcgKnJlcXVpcmVzKiBUaHVuZGVyYm9sdCBoYXJkd2FyZS4gVGhhdCYjMzk7cyBhIHN0aWNraW5nIHBvaW50LiBTdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIFRodW5kZXJib2x0IGNvbnRyb2xsZXIsIGRvZXMgaXQ/IE5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBRRU1VIGhhcyAqYW55KiBUaHVuZGVyYm9sdCBlbXVsYXRpb24gYXQgYWxsLCBvciBpZiB0aGlzIGlzIHB1cmVseSBoYXJkd2FyZS1kZXBlbmRlbnQuCgpSaWdodCwgYmFjayB0byB0aGUgZHJpdmVyIC0gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AuIE9rYXksIHNvLCBpcyB0aGlzIGV2ZW4gd29ydGggZ29pbmcgYWZ0ZXIgd2l0aCBmdXp6aW5nPyBCZWNhdXNlIGlmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgZW11bGF0ZWQsIGl0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuIEFscmlnaHQsIFFFTVUgY29uZmlybWVkLCBpdCBkb2VzbiYjMzk7dCBlbXVsYXRlIFRodW5kZXJib2x0IGNvbnRyb2xsZXJzLiBTbyB0aGF0JiMzOTtzIG91dC4KCldhaXQgYSBzZWNvbmQsIG9rYXksIFRodW5kZXJib2x0ICppcyogUENJZS1iYXNlZCwgYnV0IFRodW5kZXJib2x0IG5ldHdvcmtpbmcgaXMgYSAqc29mdHdhcmUqIHByb3RvY29sIGxheWVyZWQgb24gdG9wIG9mIFRodW5kZXJib2x0IFhEb21haW4gY29ubmVjdGlvbnMuIEhtbSwgdGhhdCYjMzk7cyBhIGRpZmZlcmVudCBhbmdsZS4gQ2FuIHN5emthbGxlciBmdXp6IFRodW5kZXJib2x0IFhEb21haW4/IFRoYXQmIzM5O3MgYSBwb3NzaWJpbGl0eS4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBzeXprYWxsZXIgc3VwcG9ydCBmb3IgVGh1bmRlcmJvbHQsIHNwZWNpZmljYWxseSB0aGUgWERvbWFpbiBpbnRlcmZhY2UuIE5lZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBncm91bmR3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RodW5kZXJib2x0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWc9Mj1jb25maWcgVVNCNF9ORVRcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnLTExLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmVcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWc6MTI6XHQgIGNhbGxlZCB0aHVuZGVyYm9sdF9uZXQuXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19VU0I0X05FVCkgOj0gdGh1bmRlcmJvbHRfbmV0Lm9cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L01ha2VmaWxlOjM6dGh1bmRlcmJvbHRfbmV0LW9ianMgOj0gbWFpbi5vIHRyYWNlLm9cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L01ha2VmaWxlLTQtXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyMTojaW5jbHVkZSBcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXHUwMDNlXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvdXVpZC5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQzLSNkZWZpbmUgVEJORVRfTUFYX1BBWUxPQURfU0laRVx0XFxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0NDpcdChUQk5FVF9GUkFNRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIpKVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQ1LS8qIFJ4IHBhY2tldHMgbmVlZCB0byBob2xkIHNwYWNlIGZvciBza2Jfc2hhcmVkX2luZm8gKi9cbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNTMtLyoqXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NTQ6ICogc3RydWN0IHRodW5kZXJib2x0X2lwX2ZyYW1lX2hlYWRlciAtIEhlYWRlciBmb3IgZWFjaCBUaHVuZGVyYm9sdCBmcmFtZVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTU1LSAqIEBmcmFtZV9zaXplOiBzaXplIG9mIHRoZSBkYXRhIHdpdGggdGhlIGZyYW1lXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTYzLSAqL1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY0OnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIge1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY1LVx0X19sZTMyIGZyYW1lX3NpemU7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTcwLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjcxOmVudW0gdGh1bmRlcmJvbHRfaXBfZnJhbWVfcGRmIHtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03Mi1cdFRCSVBfUERGX0ZSQU1FX1NUQVJUID0gMSxcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzUtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NzY6ZW51bSB0aHVuZGVyYm9sdF9pcF90eXBlIHtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03Ny1cdFRCSVBfTE9HSU4sXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTgyLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjgzOnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIge1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTg0LVx0dTMyIHJvdXRlX2hpO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy05Ny1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo5ODpzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfbG9naW4ge1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjk5Olx0c3RydWN0IHRodW5kZXJib2x0X2lwX2hlYWRlciBoZHI7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTAwLVx0dTMyIHByb3RvX3ZlcnNpb247XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEwNi1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMDc6c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luX3Jlc3BvbnNlIHtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMDg6XHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfaGVhZGVyIGhkcjtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMDktXHR1MzIgc3RhdHVzO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTQtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTE1OnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9sb2dvdXQge1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjExNjpcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgaGRyO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTExNy19O1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTExOC1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMTk6c3RydWN0IHRodW5kZXJib2x0X2lwX3N0YXR1cyB7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTIwOlx0c3RydWN0IHRodW5kZXJib2x0X2lwX2hlYWRlciBoZHI7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTIxLVx0dTMyIHN0YXR1cztcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTgyPXN0cnVjdCB0Ym5ldCB7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE5OS1cdHN0cnVjdCB3b3JrX3N0cnVjdCBkaXNjb25uZWN0X3dvcms7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjAwOlx0c3RydWN0IHRodW5kZXJib2x0X2lwX2ZyYW1lX2hlYWRlciByeF9oZHI7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjAxLVx0c3RydWN0IHRibmV0X3JpbmcgcnhfcmluZztcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MjIwPU1PRFVMRV9QQVJNX0RFU0MoZTJlLCBcJiMzNDtVU0I0TkVUIGZ1bGwgZW5kLXRvLWVuZCBmbG93IGNvbnRyb2wgKGRlZmF1bHQ6IHRydWUpXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yMjEtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjIyOnN0YXRpYyB2b2lkIHRibmV0X2ZpbGxfaGVhZGVyKHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgKmhkciwgdTY0IHJvdXRlLFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTIyMy1cdHU4IHNlcXVlbmNlLCBjb25zdCB1dWlkX3QgKmluaXRpYXRvcl91dWlkLCBjb25zdCB1dWlkX3QgKnRhcmdldF91dWlkLFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjIyNDpcdGVudW0gdGh1bmRlcmJvbHRfaXBfdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSwgdTMyIGNvbW1hbmRfaWQpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjI1LXtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MjQyPXN0YXRpYyBpbnQgdGJuZXRfbG9naW5fcmVzcG9uc2Uoc3RydWN0IHRibmV0ICpuZXQsIHU2NCByb3V0ZSwgdTggc2VxdWVuY2UsXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI0NC17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjQ1Olx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luX3Jlc3BvbnNlIHJlcGx5O1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI0Ni1cdHN0cnVjdCB0Yl94ZG9tYWluICp4ZCA9IG5ldC1cdTAwM2V4ZDtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MjU5PXN0YXRpYyBpbnQgdGJuZXRfbG9naW5fcmVxdWVzdChzdHJ1Y3QgdGJuZXQgKm5ldCwgdTggc2VxdWVuY2UpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjYwLXtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyNjE6XHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfbG9naW5fcmVzcG9uc2UgcmVwbHk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjYyOlx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luIHJlcXVlc3Q7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjYzLVx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gbmV0LVx1MDAzZXhkO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0yNzk9c3RhdGljIGludCB0Ym5ldF9sb2dvdXRfcmVzcG9uc2Uoc3RydWN0IHRibmV0ICpuZXQsIHU2NCByb3V0ZSwgdTggc2VxdWVuY2UsXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI4MS17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjgyOlx0c3RydWN0IHRodW5kZXJib2x0X2lwX3N0YXR1cyByZXBseTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yODMtXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQgPSBuZXQtXHUwMDNleGQ7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTI5Mz1zdGF0aWMgaW50IHRibmV0X2xvZ291dF9yZXF1ZXN0KHN0cnVjdCB0Ym5ldCAqbmV0KVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI5NC17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6Mjk1Olx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ291dCByZXF1ZXN0O1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjI5NjpcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9zdGF0dXMgcmVwbHk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjk3LVx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gbmV0LVx1MDAzZXhkO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz00MjU9c3RhdGljIGludCB0Ym5ldF9oYW5kbGVfcGFja2V0KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDI2LXtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0Mjc6XHRjb25zdCBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfbG9naW4gKnBrZyA9IGJ1ZjtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy00MjgtXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGRhdGE7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQzNC1cdC8qIE1ha2Ugc3VyZSB0aGUgcGFja2V0IGlzIGZvciB1cyAqL1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjQzNTpcdGlmIChzaXplIFx1MDAzYyBzaXplb2Yoc3RydWN0IHRodW5kZXJib2x0X2lwX2hlYWRlcikpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDM2LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NzU2PXN0YXRpYyBib29sIHRibmV0X2NoZWNrX2ZyYW1lKHN0cnVjdCB0Ym5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgdGJuZXRfZnJhbWUgKnRmLFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc1NzpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyICpoZHIpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzU4LXtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9ODMxPXN0YXRpYyBpbnQgdGJuZXRfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTgzOC1cdHdoaWxlIChyeF9wYWNrZXRzIFx1MDAzYyBidWRnZXQpIHtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo4Mzk6XHRcdGNvbnN0IHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIgKmhkcjtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy04NDAtXHRcdHVuc2lnbmVkIGludCBoZHJfc2l6ZSA9IHNpemVvZigqaGRyKTtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTAyMT1zdGF0aWMgYm9vbCB0Ym5ldF94bWl0X2NzdW1fYW5kX21hcChzdHJ1Y3QgdGJuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTAyMy17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTAyNDpcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIgKmhkciA9IHBhZ2VfYWRkcmVzcyhmcmFtZXNbMF0tXHUwMDNlcGFnZSk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTAyNS1cdHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSB0Yl9yaW5nX2RtYV9kZXZpY2UobmV0LVx1MDAzZXR4X3JpbmcucmluZyk7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTExMzY9c3RhdGljIG5ldGRldl90eF90IHRibmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTE0MS1cdHUxNiBmcmFtZV9pZCA9IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VmcmFtZV9pZCk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTE0MjpcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIgKmhkcjtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTQzLVx0dW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzOTYtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM5NzpcdHN0cmNweShkZXYtXHUwMDNlbmFtZSwgXCYjMzQ7dGh1bmRlcmJvbHQlZFwmIzM0Oyk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM5OC1cdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dGJuZXRfbmV0ZGV2X29wcztcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTQxNi1cdGRldi1cdTAwM2VmZWF0dXJlcyA9IGRldi1cdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfSElHSERNQTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxNDE3Olx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIpO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE0MTgtXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTE0OTU9c3RhdGljIHN0cnVjdCB0Yl9zZXJ2aWNlX2RyaXZlciB0Ym5ldF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE0OTctXHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjE0OTg6XHRcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHQtbmV0XCYjMzQ7LFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE0OTktXHRcdC5wbSA9IHBtX3NsZWVwX3B0cihcdTAwMjZ0Ym5ldF9wbV9vcHMpLFxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L3RyYWNlLmgtOS0jdW5kZWYgVFJBQ0VfU1lTVEVNXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC90cmFjZS5oOjEwOiNkZWZpbmUgVFJBQ0VfU1lTVEVNIHRodW5kZXJib2x0X25ldFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvdHJhY2UuaC0xMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRodW5kZXJib2x0IE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbiBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYC4gSXQmIzM5O3MgYWRkaW5nIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgYW5kIGNhbGxpbmcgaXQgZnJvbSBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLiBUaGUgaWRlYSBpcyB0byByZXNldCBgbmV0LSZndDtsb2dpbl9zZW50YCBvbiBjb25uZWN0aW9uIGZhaWx1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIHRvIGF2b2lkIGlzc3VlcyB3aXRoIGB0Ym5ldF90ZWFyX2Rvd24oKWAuIEJ1dCBob2xkIG9uLCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgKlRodW5kZXJib2x0KiBuZXR3b3JraW5nIGhhcyBtZSB0aGlua2luZy4gSXMgdGhpcyBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBUaHVuZGVyYm9sdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSwgcmlnaHQ/IFBDSWUvVVNCNCwgaXNuJiMzOTt0IGl0PwoKUUVNVSBkb2VzbiYjMzk7dCBuYXRpdmVseSBlbXVsYXRlIFRodW5kZXJib2x0L1VTQjQuIEJ1dCB3YWl0LCBkb2VzIGl0IGhhdmUgc29tZSBzb2Z0d2FyZSBlbXVsYXRpb24gSSYjMzk7bSBub3QgcmVtZW1iZXJpbmc/IE5vLCB0aGVyZSBpc24mIzM5O3QgYSBgbWFjODAyMTFfaHdzaW1gIGVxdWl2YWxlbnQgZm9yIFRodW5kZXJib2x0LiBPa2F5LCB3aGF0IGFib3V0IHN5emthbGxlcj8gRG9lcyBpdCBldmVuICpyZWFjaCogVGh1bmRlcmJvbHQgY29kZT8gSSB2YWd1ZWx5IHJlbWVtYmVyIHNvbWV0aGluZy4uLiBjb3VsZCBzeXprYWxsZXIgZnV6eiBUaHVuZGVyYm9sdCB2aWEgVVNCIG9yIFBDST8gSXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgIGJ1dCB0aGF0JiMzOTtzIGZvciBVU0IgaW4gZ2VuZXJhbC4gSXMgdGhlcmUgYSBgc3l6X2AgcHNldWRvLXN5c2NhbGwgc3BlY2lmaWNhbGx5IGZvciBUaHVuZGVyYm9sdD8KClRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoYXQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBsaWtlIFFFTVUgYXJlIG91dCBvZiBzY29wZS4gQnV0IFRodW5kZXJib2x0Li4uaXQmIzM5O3MgUENJZS9VU0I0LiBTbywgaXMgaXQgKmFjdHVhbGx5KiBmdXp6ZWQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHJlYWNoYWJsZS4gTGV0JiMzOTtzIGxvb2sgZm9yIGB0aHVuZGVyYm9sdGAgaW4gc3l6a2FsbGVyJiMzOTtzIGRlc2NyaXB0aW9ucy4gT3IgZXZlbiBiZXR0ZXIsIGxldCYjMzk7cyBqdXN0IHNlZSBpZiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGlzIHJlYWNoYWJsZS4gSXQmIzM5O3MgYSB3b3JrcXVldWUgZnVuY3Rpb24sIHNvIGl0IG11c3QgYmUgdHJpZ2dlcmVkIGJ5ICpzb21ldGhpbmcqLiBNYXliZSBgVVNCNF9ORVRgIGlzIGZ1enplZCBzb21laG93PwoKSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBUaHVuZGVyYm9sdCBjb2RlIGluIFFFTVUuIEFwcGxlIGhhcyBUaHVuZGVyYm9sdCBjb250cm9sbGVycyBidXQgdGhhdCBzdGlsbCB1c3VhbGx5IHJlcXVpcmVzIHNwZWNpZmljIFBDSWUgaGFyZHdhcmUuIFdhaXQsIHN5emthbGxlciYjMzk7cyBjb21taXQgbWVzc2FnZSBtZW50aW9ucyAmIzM0O3N5ei1jbHVzdGVyJiMzNDsuIFNvLCBzeXprYWxsZXIgaXMgKmFjdHVhbGx5KiBmdXp6aW5nIGl0IG9yICpoYXMqIGZvdW5kIGEgYnVnIGhlcmUgYW5kIGlzIHRlc3RpbmcgaXQhIE1heWJlIHN5emthbGxlciBjYW4gcmVhY2ggaXQgaWYgdGhlcmUmIzM5O3MgYSBzb2Z0d2FyZSBkcml2ZXIsIG9yIG1heWJlIGl0JiMzOTtzIGV4cG9zZWQgdmlhIFVTQjQgYW5kIGZ1enplZCB0aHJvdWdoIGEgVVNCIGR1bW15IEhDRCBvciBzaW1pbGFyLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gSXMgdGhlcmUgYSBUaHVuZGVyYm9sdCBLVW5pdCB0ZXN0IG9yIHNvbWUga2luZCBvZiBzb2Z0d2FyZSByb3V0ZXIgZm9yIHRoaXMgc3R1ZmY/IExldCYjMzk7cyBjaGVjayB0aGUgYGRyaXZlcnMvdGh1bmRlcmJvbHQvYCBkaXJlY3Rvcnkgc3BlY2lmaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RodW5kZXJib2x0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90aHVuZGVyYm9sdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnPTI9bWVudWNvbmZpZyBVU0I0XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTE2LVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmVcbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZzoxNzpcdCAgY2FsbGVkIHRodW5kZXJib2x0LlxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTE4LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZz01ND1jb25maWcgVVNCNF9ETUFfVEVTVFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZy02NC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWc6NjU6XHQgIGNhbGxlZCB0aHVuZGVyYm9sdF9kbWFfdGVzdC5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZy02Ni1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZz02Nz1jb25maWcgVVNCNF9TVFJFQU1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWctNzUtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZVxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnOjc2Olx0ICBjYWxsZWQgdGh1bmRlcmJvbHRfc3RyZWFtLlxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTc3LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU9Mj1jY2ZsYWdzLXkgOj0gLUkkKHNyYylcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MzpvYmotJHtDT05GSUdfVVNCNH0gOj0gdGh1bmRlcmJvbHQub1xuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo0OnRodW5kZXJib2x0LW9ianMgOj0gbmhpLm8gY3RsLm8gdGIubyBzd2l0Y2gubyBjYXAubyBwY2kubyBwYXRoLm8gdHVubmVsLm8gZWVwcm9tLm9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6NTp0aHVuZGVyYm9sdC1vYmpzICYjNDM7PSBkb21haW4ubyBkbWFfcG9ydC5vIGljbS5vIHByb3BlcnR5Lm8geGRvbWFpbi5vIGxjLm8gdG11Lm8gdXNiNC5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjY6dGh1bmRlcmJvbHQtb2JqcyAmIzQzOz0gdXNiNF9wb3J0Lm8gbnZtLm8gcmV0aW1lci5vIHF1aXJrcy5vIGNseC5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTctXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjg6dGh1bmRlcmJvbHQtJHtDT05GSUdfQUNQSX0gJiM0Mzs9IGFjcGkub1xuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo5OnRodW5kZXJib2x0LSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gZGVidWdmcy5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjEwOnRodW5kZXJib2x0LSQoQ09ORklHX1VTQjRfQ09ORklHRlMpICYjNDM7PSBjb25maWdmcy5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjExOnRodW5kZXJib2x0LSR7Q09ORklHX1VTQjRfS1VOSVRfVEVTVH0gJiM0Mzs9IHRlc3Qub1xuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZS0xMi1DRkxBR1NfdGVzdC5vICYjNDM7PSAkKERJU0FCTEVfU1RSVUNUTEVBS19QTFVHSU4pXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTEzLVxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZToxNDp0aHVuZGVyYm9sdF9kbWFfdGVzdC0ke0NPTkZJR19VU0I0X0RNQV9URVNUfSAmIzQzOz0gZG1hX3Rlc3Qub1xuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfVVNCNF9ETUFfVEVTVCkgJiM0Mzs9IHRodW5kZXJib2x0X2RtYV90ZXN0Lm9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGUtMTYtXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjE3OnRodW5kZXJib2x0X3N0cmVhbS0ke0NPTkZJR19VU0I0X1NUUkVBTX0gJiM0Mzs9IHN0cmVhbS5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19VU0I0X1NUUkVBTSkgJiM0Mzs9IHRodW5kZXJib2x0X3N0cmVhbS5vXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9hY3BpLmM9MzUzPXN0YXRpYyBzdHJ1Y3QgYWNwaV9idXNfdHlwZSB0Yl9hY3BpX2J1cyA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jOjM1NDpcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRcJiMzNDssXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYy0zNTUtXHQubWF0Y2ggPSB0Yl9hY3BpX2J1c19tYXRjaCxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM9MTg9c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gdGJfY29uZmlnZnMgPSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTIwLVx0XHQuY2dfaXRlbSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYzoyMTpcdFx0XHQuY2lfbmFtZWJ1ZiA9IFwmIzM0O3RodW5kZXJib2x0XCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTIyLVx0XHRcdC5jaV90eXBlID0gXHUwMDI2dGJfcm9vdF9ncm91cF90eXBlLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM9NjUzPXN0cnVjdCB0Yl9jdGwgKnRiX2N0bF9hbGxvYyhzdHJ1Y3QgdGJfbmhpICpuaGksIGludCBpbmRleCwgaW50IHRpbWVvdXRfbXNlYyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jLTY2OC1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0bC1cdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM6NjY5Olx0Y3RsLVx1MDAzZWZyYW1lX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoXCYjMzQ7dGh1bmRlcmJvbHRfY3RsXCYjMzQ7LCBuaGktXHUwMDNlZGV2LFxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuYy02NzAtXHRcdFx0XHRcdCAgVEJfRlJBTUVfU0laRSwgNCwgMCk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuaC0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmg6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFx1MDAzZVxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuaC0xNC1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYz0yNTU1PXZvaWQgdGJfZGVidWdmc19pbml0KHZvaWQpXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNTU2LXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjI1NTc6XHR0Yl9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCYjMzQ7dGh1bmRlcmJvbHRcJiMzNDssIE5VTEwpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjU1OC19XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfcG9ydC5jPTM3Mz1pbnQgZG1hX3BvcnRfZmxhc2hfd3JpdGUoc3RydWN0IHRiX2RtYV9wb3J0ICpkbWEsIHVuc2lnbmVkIGludCBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3BvcnQuYy0zOTEtICogVGhpcyBpcyBiZWNhdXNlIGlmIHRoZSBzd2l0Y2ggaW4gcXVlc3Rpb24gaXMgcm9vdCBzd2l0Y2ggdGhlXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV9wb3J0LmM6MzkyOiAqIHRodW5kZXJib2x0IGhvc3QgY29udHJvbGxlciBnZXRzIHJlc2V0IGFzIHdlbGwuXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV9wb3J0LmMtMzkzLSAqXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzoxNDojaW5jbHVkZSBcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXHUwMDNlXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTUtXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jPTY5Nj1zdGF0aWMgc3RydWN0IHRiX3NlcnZpY2VfZHJpdmVyIGRtYV90ZXN0X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNjk4LVx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo2OTk6XHRcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRfZG1hX3Rlc3RcJiMzNDssXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNzAwLVx0XHQucG0gPSBcdTAwMjZkbWFfdGVzdF9wbV9vcHMsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz0zMTE9Y29uc3Qgc3RydWN0IGJ1c190eXBlIHRiX2J1c190eXBlID0ge1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozMTI6XHQubmFtZSA9IFwmIzM0O3RodW5kZXJib2x0XCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy0zMTMtXHQubWF0Y2ggPSB0Yl9zZXJ2aWNlX21hdGNoLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM9MzMzPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl9kb21haW5fdHlwZSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6MzM0Olx0Lm5hbWUgPSBcJiMzNDt0aHVuZGVyYm9sdF9kb21haW5cJiMzNDssXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTMzNS1cdC5yZWxlYXNlID0gdGJfZG9tYWluX3JlbGVhc2UsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz0zNzc9c3RydWN0IHRiICp0Yl9kb21haW5fYWxsb2Moc3RydWN0IHRiX25oaSAqbmhpLCBpbnQgdGltZW91dF9tc2VjLCBzaXplX3QgcHJpdnNpemUpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy0zOTktXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjQwMDpcdHRiLVx1MDAzZXdxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7dGh1bmRlcmJvbHQlZFwmIzM0OywgMCwgdGItXHUwMDNlaW5kZXgpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy00MDEtXHRpZiAoIXRiLVx1MDAzZXdxKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjAwNT1zdGF0aWMgaW50IGljbV9kcml2ZXJfcmVhZHkoc3RydWN0IHRiICp0Yilcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIwMTYtXHRcdHRiX2luZm8odGIsIFwmIzM0O1lvdSBuZWVkIHRvIHVwZGF0ZSBOVk0gZmlybXdhcmUgb2YgdGhlIGNvbnRyb2xsZXIgYmVmb3JlIGl0IGNhbiBiZSB1c2VkLlxcblwmIzM0Oyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjIwMTc6XHRcdHRiX2luZm8odGIsIFwmIzM0O1VzZSBmd3VwZCB0b29sIHRvIGFwcGx5IHVwZGF0ZS4gQ2hlY2sgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS90aHVuZGVyYm9sdC5yc3QgZm9yIGRldGFpbHMuXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjAxOC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYy01LSAqIFRoZSBOSEkgKG5hdGl2ZSBob3N0IGludGVyZmFjZSkgaXMgdGhlIGRldmljZSB0aGF0IGFsbG93cyB1cyB0byBzZW5kIGFuZFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYzo2OiAqIHJlY2VpdmUgZnJhbWVzIGZyb20gdGhlIHRodW5kZXJib2x0IGJ1cy5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmMtNy0gKlxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmM9MTE4Nj1pbnQgbmhpX3Byb2JlKHN0cnVjdCB0Yl9uaGkgKm5oaSlcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jLTEyMzUtXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jOjEyMzY6XHRkZXZfZGJnKGRldiwgXCYjMzQ7TkhJIGluaXRpYWxpemVkLCBzdGFydGluZyB0aHVuZGVyYm9sdFxcblwmIzM0Oyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jLTEyMzctXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuaC0xMS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmg6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFx1MDAzZVxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuaC0xMy1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYz0xMDE9c3RydWN0IHRiX3BhdGggKnRiX3BhdGhfZGlzY292ZXIoc3RydWN0IHRiX3BvcnQgKnNyYywgaW50IHNyY19ob3BpZCxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYy0yMTUtLyoqXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYzoyMTY6ICogdGJfcGF0aF9hbGxvYygpIC0gYWxsb2NhdGUgYSB0aHVuZGVyYm9sdCBwYXRoIGJldHdlZW4gdHdvIHBvcnRzXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYy0yMTctICogQHRiOiBEb21haW4gcG9pbnRlclxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmM9MTExPXN0YXRpYyBpbnQgbmhpX3BjaV9pbml0X21zaShzdHJ1Y3QgdGJfbmhpICpuaGkpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYy0xMzktXHRcdHJlcyA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGlycSwgbmhpX21zaSxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmM6MTQwOlx0XHRcdFx0ICAgICAgIElSUUZfTk9fU1VTUEVORCwgXCYjMzQ7dGh1bmRlcmJvbHRcJiMzNDssIG5oaSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTE0MS1cdFx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jPTE4ND1zdGF0aWMgaW50IG5oaV9wY2lfcmluZ19yZXF1ZXN0X21zaXgoc3RydWN0IHRiX3JpbmcgKnJpbmcsIGJvb2wgbm9fc3VzcGVuZClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTIwNy1cdGlycWZsYWdzID0gbm9fc3VzcGVuZCA/IElSUUZfTk9fU1VTUEVORCA6IDA7XG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjIwODpcdHJldCA9IHJlcXVlc3RfaXJxKHJpbmctXHUwMDNlaXJxLCByaW5nX21zaXgsIGlycWZsYWdzLCBcJiMzNDt0aHVuZGVyYm9sdFwmIzM0OywgcmluZyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTIwOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYz00NDc9c3RhdGljIGludCBuaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYy00NjgtXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjQ2OTpcdG5oaS1cdTAwM2Vpb2Jhc2UgPSBwY2ltX2lvbWFwX3JlZ2lvbihwZGV2LCAwLCBcJiMzNDt0aHVuZGVyYm9sdFwmIzM0Oyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTQ3MC1cdHJlcyA9IFBUUl9FUlJfT1JfWkVSTyhuaGktXHUwMDNlaW9iYXNlKTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jPTU5MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmhpX2RyaXZlciA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmM6NTkyOlx0Lm5hbWUgPSBcJiMzNDt0aHVuZGVyYm9sdFwmIzM0OyxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmMtNTkzLVx0LmlkX3RhYmxlID0gbmhpX2lkcyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvdXVpZC5oXHUwMDNlXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFx1MDAzZVxuZHJpdmVycy90aHVuZGVyYm9sdC9wcm9wZXJ0eS5jLTE2LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYz0zNzM9c3RhdGljIHNzaXplX3QgX190Yl9wcm9wZXJ0eV9mb3JtYXRfZGlyKGNvbnN0IHN0cnVjdCB0Yl9wcm9wZXJ0eV9kaXIgKmRpcixcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtNTA4LSAqIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyB0aGUgZGlyZWN0b3J5IHRvIHRoZSBwYWNrZWQgZm9ybWF0IHRoYXQgY2FuIGJlXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmM6NTA5OiAqIHRoZW4gc2VudCBvdmVyIHRoZSB0aHVuZGVyYm9sdCBmYWJyaWMgdG8gcmVjZWl2aW5nIGhvc3QuXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtNTEwLSAqXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9yZXRpbWVyLmM9MzgzPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl9yZXRpbWVyX3R5cGUgPSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L3JldGltZXIuYzozODQ6XHQubmFtZSA9IFwmIzM0O3RodW5kZXJib2x0X3JldGltZXJcJiMzNDssXG5kcml2ZXJzL3RodW5kZXJib2x0L3JldGltZXIuYy0zODUtXHQuZ3JvdXBzID0gcmV0aW1lcl9ncm91cHMsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjIxOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3RodW5kZXJib2x0LmhcdTAwM2VcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYz0xNjM3PXN0YXRpYyBzdHJ1Y3QgdGJfc2VydmljZV9kcml2ZXIgdGJzdHJlYW1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMTYzOS1cdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjE2NDA6XHRcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRfc3RyZWFtXCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYy0xNjQxLVx0XHQucG0gPSBcdTAwMjZ0YnN0cmVhbV9wbV9vcHMsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYz00NDI9c3RhdGljIHZvaWQgdGJfZHVtcF9wb3J0KHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCB0Yl9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtNDQ4LVx0ICAgICAgIHJlZ3MtXHUwMDNlcG9ydF9udW1iZXIsIHJlZ3MtXHUwMDNldmVuZG9yX2lkLCByZWdzLVx1MDAzZWRldmljZV9pZCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM6NDQ5Olx0ICAgICAgIHJlZ3MtXHUwMDNlcmV2aXNpb24sIHJlZ3MtXHUwMDNldGh1bmRlcmJvbHRfdmVyc2lvbiwgdGJfcG9ydF90eXBlKHJlZ3MpLFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy00NTAtXHQgICAgICAgcmVncy1cdTAwM2V0eXBlKTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3N3aXRjaC5jPTE1NjM9c3RhdGljIHZvaWQgdGJfZHVtcF9zd2l0Y2goY29uc3Qgc3RydWN0IHRiICp0YiwgY29uc3Qgc3RydWN0IHRiX3N3aXRjaCAqc3cpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0xNTY4LVx0ICAgICAgIHRiX3N3aXRjaF9nZW5lcmF0aW9uX25hbWUoc3cpLCByZWdzLVx1MDAzZXZlbmRvcl9pZCwgcmVncy1cdTAwM2VkZXZpY2VfaWQsXG5kcml2ZXJzL3RodW5kZXJib2x0L3N3aXRjaC5jOjE1Njk6XHQgICAgICAgcmVncy1cdTAwM2VyZXZpc2lvbiwgcmVncy1cdTAwM2V0aHVuZGVyYm9sdF92ZXJzaW9uKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTU3MC1cdHRiX2RiZyh0YiwgXCYjMzQ7ICBNYXggUG9ydCBOdW1iZXI6ICVkXFxuXCYjMzQ7LCByZWdzLVx1MDAzZW1heF9wb3J0X251bWJlcik7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYz0xODE5PXN0YXRpYyBpbnQgdGJfc3dpdGNoX3NldF9hdXRob3JpemVkKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3LCB1bnNpZ25lZCBpbnQgdmFsKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTg2MS1cdFx0ICogTm90aWZ5IHN0YXR1cyBjaGFuZ2UgdG8gdGhlIHVzZXJzcGFjZSwgaW5mb3JtaW5nIHRoZSBuZXdcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM6MTg2MjpcdFx0ICogdmFsdWUgb2YgL3N5cy9idXMvdGh1bmRlcmJvbHQvZGV2aWNlcy8uLi4vYXV0aG9yaXplZC5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTg2My1cdFx0ICovXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYz0yMzczPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl9zd2l0Y2hfdHlwZSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM6MjM3NDpcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRfZGV2aWNlXCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0yMzc1LVx0LnJlbGVhc2UgPSB0Yl9zd2l0Y2hfcmVsZWFzZSxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDoxNTojaW5jbHVkZSBcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXHUwMDNlXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvdXVpZC5oXHUwMDNlXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oPTEwNT1zdHJ1Y3QgdGJfc3dpdGNoX3RtdSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTExMi0vKipcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDoxMTM6ICogc3RydWN0IHRiX3N3aXRjaCAtIGEgdGh1bmRlcmJvbHQgc3dpdGNoXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTE0LSAqIEBkZXY6IERldmljZSBmb3IgdGhlIHN3aXRjaFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaD0yMzg9c3RydWN0IHRiX2JhbmR3aWR0aF9ncm91cCB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTI0Ni0vKipcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDoyNDc6ICogc3RydWN0IHRiX3BvcnQgLSBhIHRodW5kZXJib2x0IHBvcnQsIHBhcnQgb2YgYSB0Yl9zd2l0Y2hcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaC0yNDgtICogQGNvbmZpZzogQ2FjaGVkIHBvcnQgY29uZmlndXJhdGlvbiByZWFkIGZyb20gcmVnaXN0ZXJzXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oPTQzMD1zdHJ1Y3QgdGJfcGF0aCB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTQ4Ny0gKiBAcnVudGltZV9yZXN1bWVfc3dpdGNoOiBSdW50aW1lIHJlc3VtZSBhIHN3aXRjaFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oOjQ4ODogKiBAaGFuZGxlX2V2ZW50OiBIYW5kbGUgdGh1bmRlcmJvbHQgZXZlbnRcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaC00ODktICogQGdldF9ib290X2FjbDogR2V0IGJvb3QgQUNMIGxpc3Rcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmg9MTMxMT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1c2I0X3N3aXRjaF92ZXJzaW9uKGNvbnN0IHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTEzMTIte1xuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oOjEzMTM6XHRyZXR1cm4gRklFTERfR0VUKFVTQjRfVkVSU0lPTl9NQUpPUl9NQVNLLCBzdy1cdTAwM2Vjb25maWcudGh1bmRlcmJvbHRfdmVyc2lvbik7XG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTMxNC19XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtNC0gKlxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6NTogKiBFdmVyeSB0aHVuZGVyYm9sdCBkZXZpY2UgY29uc2lzdHMgKGxvZ2ljYWxseSkgb2YgYSBzd2l0Y2ggd2l0aCBtdWx0aXBsZVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtNi0gKiBwb3J0cy4gRXZlcnkgcG9ydCBjb250YWlucyB1cCB0byBmb3VyIGNvbmZpZyByZWdpb25zIChIT1BTLCBQT1JULCBTV0lUQ0gsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg9MTY2PXN0cnVjdCB0Yl9yZWdzX3N3aXRjaF9oZWFkZXIge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGJfcmVncy5oLTE4OC1cdHUzMiBfX3Vua25vd240Ojg7XG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaDoxODk6XHR1MzIgdGh1bmRlcmJvbHRfdmVyc2lvbjo4O1xuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkwLX0gX19wYWNrZWQ7XG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaC0xOTEtXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaDoxOTI6LyogVXNlZCB3aXRoIHRoZSByb3V0ZXIgdGh1bmRlcmJvbHRfdmVyc2lvbiAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkzLSNkZWZpbmUgVVNCNF9WRVJTSU9OX01BSk9SX01BU0tcdFx0XHRHRU5NQVNLKDcsIDUpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg9MjgzPXN0cnVjdCB0Yl9yZWdzX3BvcnRfaGVhZGVyIHtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaC0yOTQtXHRlbnVtIHRiX3BvcnRfdHlwZSB0eXBlOjI0O1xuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6Mjk1Olx0dTMyIHRodW5kZXJib2x0X3ZlcnNpb246ODtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGJfcmVncy5oLTI5Ni1cdC8qIERXT1JEIDMgKi9cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuYz0yODI0PXN0YXRpYyB2b2lkIHRiX3Rlc3RfcHJvcGVydHlfY29weShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmMtMjg1Ny0gKiBSZXByb2R1Y2VycyBmb3IgdGhyZWUgbWVtb3J5LXNhZmV0eSBkZWZlY3RzIGluXG5kcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuYzoyODU4OiAqIGRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYyByZWFjaGVkIGZyb20gYSBjcmFmdGVkIFhEb21haW5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jLTI4NTktICogUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLiAgV2l0aG91dCB0aGUgZml4IHRoZXNlIHRyaXAgS0FTQU4gb3Jcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuYz0zMTQ3PXN0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgdGJfdGVzdF9zdWl0ZSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jOjMxNDg6XHQubmFtZSA9IFwmIzM0O3RodW5kZXJib2x0XCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmMtMzE0OS1cdC50ZXN0X2Nhc2VzID0gdGJfdGVzdF9jYXNlcyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3RyYWNlLmgtMTAtI3VuZGVmIFRSQUNFX1NZU1RFTVxuZHJpdmVycy90aHVuZGVyYm9sdC90cmFjZS5oOjExOiNkZWZpbmUgVFJBQ0VfU1lTVEVNIHRodW5kZXJib2x0XG5kcml2ZXJzL3RodW5kZXJib2x0L3RyYWNlLmgtMTItXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmM9MTEzMj1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfc2VydmljZV90eXBlID0ge1xuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmM6MTEzMzpcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRfc2VydmljZVwmIzM0OyxcbmRyaXZlcnMvdGh1bmRlcmJvbHQveGRvbWFpbi5jLTExMzQtXHQuZ3JvdXBzID0gdGJfc2VydmljZV9hdHRyX2dyb3Vwcyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3hkb21haW4uYz0yMDUwPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl94ZG9tYWluX3R5cGUgPSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L3hkb21haW4uYzoyMDUxOlx0Lm5hbWUgPSBcJiMzNDt0aHVuZGVyYm9sdF94ZG9tYWluXCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmMtMjA1Mi1cdC5yZWxlYXNlID0gdGJfeGRvbWFpbl9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmF2ZWxpbmcgVGh1bmRlcmJvbHQgRnV6emluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBzeXprYWxsZXIgaXMgZnV6emluZyB0aGUgVGh1bmRlcmJvbHQgZHJpdmVyLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgIGJlY2F1c2UgaXQgaGFzIEtVbml0IHRlc3RzLCB3aGljaCwgSSBpbml0aWFsbHkgdGhvdWdodCwgbWlnaHQgYmUgYSBzdGFydGluZyBwb2ludC4gVGhlbiwgSSBub3RpY2VkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgY29tbWVudHM6ICYjMzQ7UmVwcm9kdWNlcnMgZm9yIHRocmVlIG1lbW9yeS1zYWZldHkgZGVmZWN0cy4uLiByZWFjaGVkIGZyb20gYSBjcmFmdGVkIFhEb21haW4gUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLiYjMzQ7IFRoaXMgY29uZmlybXMgc3l6a2FsbGVyIGlzIGluZGVlZCBmdXp6aW5nIFRodW5kZXJib2x0IQoKTXkgbmV4dCBxdWVzdGlvbiBpcyAqaG93Kj8gSXMgc3l6a2FsbGVyIHVzaW5nIGEgcHNldWRvLXN5c2NhbGwsIGEgc29mdHdhcmUgZHJpdmVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBxdWlja2x5IHJ1bGVkIG91dCBgVVNCNF9LVU5JVF9URVNUYCBhbmQgdGhlIEtVbml0IHRlc3RzLCBrbm93aW5nIHRob3NlIGFyZW4mIzM5O3QgZGlyZWN0bHkgZnV6emFibGUgYnkgc3l6a2FsbGVyLiBTaW5jZSBJIGNhbiYjMzk7dCBlYXNpbHkgc2VhcmNoIHN5emthbGxlciYjMzk7cyBkZXNjcmlwdGlvbnMgd2l0aCB0aGUgdG9vbHMgYXZhaWxhYmxlLCBsaWtlIGBncmVwcGVyYCwgYnV0IEkmIzM5O20gcmVtaW5kZWQgdGhhdCBJIGNvdWxkIHVzZSBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAgaWYgdGhleSB3ZXJlIGFjY2Vzc2libGUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCwgaG93ZXZlci4KCkkgdGhlbiBjb25zaWRlcmVkIHRoZSBwb3NzaWJpbGl0eSBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gYW5kIGxvb2tlZCBmb3IgYSAmIzM0O2R1bW15JiMzNDsgVGh1bmRlcmJvbHQgZHJpdmVyLCBidXQgZm91bmQgbm90aGluZyBvYnZpb3VzLiBUaGVuLCBJIHR1cm5lZCBteSBhdHRlbnRpb24gdG8gYGRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlYCwgd2hlcmUgSSBzcG90dGVkIGBVU0I0X0tVTklUX1RFU1RgIGFnYWluLCBzdGlsbCBub3QgdGhlIGFuc3dlciB0byBteSBxdWVzdGlvbi4KClN1ZGRlbmx5LCBhIGNvbm5lY3Rpb24gY2xpY2tlZDogQ291bGQgc3l6a2FsbGVyIGJlIGZ1enppbmcgVGh1bmRlcmJvbHQgdmlhIGBjb25maWdmc2A/IEkgcmVjYWxsZWQgc2VlaW5nIGB0aHVuZGVyYm9sdC0kKENPTkZJR19VU0I0X0NPTkZJR0ZTKSAmIzQzOz0gY29uZmlnZnMub2AgaW4gdGhlIG1ha2VmaWxlLiBUaGlzIHNlZW1lZCBwcm9taXNpbmcuCgpUaGVuLCBJIHNoaWZ0ZWQgbXkgZm9jdXMgdG8gdGhlIG5ldHdvcmtpbmcgYXNwZWN0cywgY2hlY2tpbmcgYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AsIHJlbWVtYmVyaW5nIGl0IHJlZ2lzdGVycyBhIG5ldHdvcmsgZGV2aWNlLiBJIGxvb2tlZCBhdCB0aGF0IGZpbGUgYWdhaW4sIGFuZCBub3RpY2VkIGEgcGF0Y2ggYWRkaW5nIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgdG8gYHRibmV0X2Nvbm5lY3RlZF93b3JrYCwgYW5kIHRoZSBjb21taXQgbWVzc2FnZSByZWZlcmVuY2luZyAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldy4mIzM0OyBUaGlzIGNvbmZpcm1zIGEgYnVnIHdhcyBmb3VuZCBieSBzeXprYWxsZXIgdGhlcmUuIEkgbm93IG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBzeXprYWxsZXIgdHJpZ2dlcmVkIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AuIEkmIzM5O2xsIGRlbHZlIGludG8gdGhlIGZ1bmN0aW9uIGl0c2VsZiB3aXRoaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Ym5ldF9jb25uZWN0ZWRfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MzY5PXN0YXRpYyB2b2lkIHRibmV0X3RlYXJfZG93bihzdHJ1Y3QgdGJuZXQgKm5ldCwgYm9vbCBzZW5kX2xvZ291dClcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzg5LVx0XHQvKiBUZWFyIHRoZSBwYXRocyBkb3duIGJlZm9yZSBzdG9wcGluZyB0aGUgcmluZ3MuICBUaGlzIG1pcnJvcnNcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzozOTA6XHRcdCAqIHRibmV0X2Nvbm5lY3RlZF93b3JrKCksIHdoaWNoIGVuYWJsZXMgdGhlIHBhdGhzIGxhc3Qgc28gdGhlXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzkxLVx0XHQgKiBSeCByaW5nIGlzIHByaW1lZCBiZWZvcmUgcGFja2V0cyBjYW4gYXJyaXZlLiAgU3RvcHBpbmcgYVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz02Mjk9c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0Mi1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo2NDM6c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0NC17XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzODUtXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZuZXQtXHUwMDNlbG9naW5fd29yaywgdGJuZXRfbG9naW5fd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM4NjpcdElOSVRfV09SSyhcdTAwMjZuZXQtXHUwMDNlY29ubmVjdGVkX3dvcmssIHRibmV0X2Nvbm5lY3RlZF93b3JrKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg3LVx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VkaXNjb25uZWN0X3dvcmssIHRibmV0X2Rpc2Nvbm5lY3Rfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBXb3JrIEl0ZW0gUXVldWUqKgoKQWxyaWdodCwgaGFuZyBvbi4gYHRibmV0X2Nvbm5lY3RlZF93b3JrYC4uLiB0aGF0JiMzOTtzIGEgKndvcmsgaXRlbSosIHJpZ2h0PyBDbGFzc2ljLiBTbywgYnkgZGVmaW5pdGlvbiwgaXQmIzM5O3MgZ2V0dGluZyBxdWV1ZWQgKmZyb20gc29tZXdoZXJlKiB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYGNvbm5lY3RlZF93b3JrYCBpcyBhY3R1YWxseSBiZWluZyBlbnF1ZXVlZC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIHRyYWNlIHRoYXQgdGhpbmcuIExldCYjMzk7cyBmaW5kIGl0cyBvcmlnaW4gcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nvbm5lY3RlZF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xNDM9c3RydWN0IHRibmV0X3Jpbmcge1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xNjgtICogQGxvZ2luX3dvcms6IFdvcmtlciB0byBzZW5kIFRodW5kZXJib2x0SVAgbG9naW4gcGFja2V0c1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjE2OTogKiBAY29ubmVjdGVkX3dvcms6IFdvcmtlciB0aGF0IGZpbmFsaXplcyB0aGUgVGh1bmRlcmJvbHRJUCBjb25uZWN0aW9uXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTcwLSAqXHRcdCAgICBzZXR1cCBhbmQgZW5hYmxlcyBETUEgcGF0aHMgZm9yIGhpZ2ggc3BlZWQgZGF0YVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xODI9c3RydWN0IHRibmV0IHtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTk3LVx0c3RydWN0IGRlbGF5ZWRfd29yayBsb2dpbl93b3JrO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjE5ODpcdHN0cnVjdCB3b3JrX3N0cnVjdCBjb25uZWN0ZWRfd29yaztcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xOTktXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGlzY29ubmVjdF93b3JrO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0zMjM9c3RhdGljIHZvaWQgc3RvcF9sb2dpbihzdHJ1Y3QgdGJuZXQgKm5ldClcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzI1LVx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2Vsb2dpbl93b3JrKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzozMjY6XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2Vjb25uZWN0ZWRfd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzI3LVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0zNjk9c3RhdGljIHZvaWQgdGJuZXRfdGVhcl9kb3duKHN0cnVjdCB0Ym5ldCAqbmV0LCBib29sIHNlbmRfbG9nb3V0KVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zODktXHRcdC8qIFRlYXIgdGhlIHBhdGhzIGRvd24gYmVmb3JlIHN0b3BwaW5nIHRoZSByaW5ncy4gIFRoaXMgbWlycm9yc1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjM5MDpcdFx0ICogdGJuZXRfY29ubmVjdGVkX3dvcmsoKSwgd2hpY2ggZW5hYmxlcyB0aGUgcGF0aHMgbGFzdCBzbyB0aGVcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zOTEtXHRcdCAqIFJ4IHJpbmcgaXMgcHJpbWVkIGJlZm9yZSBwYWNrZXRzIGNhbiBhcnJpdmUuICBTdG9wcGluZyBhXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTQyNT1zdGF0aWMgaW50IHRibmV0X2hhbmRsZV9wYWNrZXQoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDc3LVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjQ3ODpcdFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZuZXQtXHUwMDNlY29ubmVjdGVkX3dvcmspO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQ3OS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz02Mjk9c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0Mi1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo2NDM6c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0NC17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NjQ1Olx0c3RydWN0IHRibmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpuZXQpLCBjb25uZWN0ZWRfd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjQ2LVx0Ym9vbCBjb25uZWN0ZWQ7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTcxND1zdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzQ0LVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc0NTpcdFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2bmV0LVx1MDAzZWNvbm5lY3RlZF93b3JrKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03NDYtXHR9XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzODUtXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZuZXQtXHUwMDNlbG9naW5fd29yaywgdGJuZXRfbG9naW5fd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM4NjpcdElOSVRfV09SSyhcdTAwMjZuZXQtXHUwMDNlY29ubmVjdGVkX3dvcmssIHRibmV0X2Nvbm5lY3RlZF93b3JrKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg3LVx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VkaXNjb25uZWN0X3dvcmssIHRibmV0X2Rpc2Nvbm5lY3Rfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzEzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGh1bmRlcmJvbHQgTmV0d29yayBDb25uZWN0aW9uKioKCk9rYXksIHNvIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaXMgYmVpbmcgcXVldWVkIGZyb20gYm90aCBgdGJuZXRfaGFuZGxlX3BhY2tldGAgYW5kIGB0Ym5ldF9sb2dpbl93b3JrYC4gUmlnaHQsIGB0Ym5ldF9oYW5kbGVfcGFja2V0YCBpcyBhIGNhbGxiYWNrIGZvciBpbmNvbWluZyBuZXR3b3JrIHBhY2tldHMuIE15IG1haW4gcXVlc3Rpb24gaXM6IGhvdyBpcyBTeXprYWxsZXIgdHJpZ2dlcmluZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCB0cmlnZ2VyLgoKQ291bGQgdGhpcyBpbnZvbHZlIGEgc29mdHdhcmUgVGh1bmRlcmJvbHQgZGV2aWNlPyBUaGF0JiMzOTtzIGEgcG9zc2liaWxpdHkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmNgIGFuZCBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgLiBBaCwgaW4gYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYCwgSSBzZWUgYSBjcnVjaWFsIG5vdGU6ICYjMzQ7UmVwcm9kdWNlcnMgZm9yIHRocmVlIG1lbW9yeS1zYWZldHkgZGVmZWN0cy4uLiByZWFjaGVkIGZyb20gYSBjcmFmdGVkIFhEb21haW4gUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLiYjMzQ7IFRoaXMgc3VnZ2VzdHMgdGhhdCBLVW5pdCB0ZXN0cyBhcmUgaW52b2x2ZWQsIGFuZCB0aGV5IGNhbiBpbmplY3QgWERvbWFpbiBwYXlsb2Fkcy4gQnV0IHdhaXQsIFN5emthbGxlciBkb2VzbiYjMzk7dCBkaXJlY3RseSBydW4gS1VuaXQgdGVzdHMsIGRvZXMgaXQ/IFRoYXQgc2VlbXMgdW5saWtlbHkuCgpIbW0uLi4gRG9lcyBTeXprYWxsZXIgaGF2ZSBhIGBzeXpfdXNiX2Nvbm5lY3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBObywgdGh1bmRlcmJvbHQgaXNuJiMzOTt0IFVTQi4gU28gaG93IGFyZSB0aGVzZSBYRG9tYWluIHBheWxvYWRzIGNyZWF0ZWQ/IFBlcmhhcHMgU3l6a2FsbGVyIHVzZXMgYGNvbmZpZ2ZzYCB0byBjcmVhdGUgdGh1bmRlcmJvbHQgeGRvbWFpbnM/IExldCBtZSBzaGlmdCBteSBmb2N1cy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGBkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmNgIGFuZCBgZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmNgIG1vcmUgY2xvc2VseS4gVGhhdCBzZWVtcyB0aGUgbW9zdCBsb2dpY2FsIHBhdGggZm9yIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hkb21haW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTk4OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZT00PXRodW5kZXJib2x0LW9ianMgOj0gbmhpLm8gY3RsLm8gdGIubyBzd2l0Y2gubyBjYXAubyBwY2kubyBwYXRoLm8gdHVubmVsLm8gZWVwcm9tLm9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6NTp0aHVuZGVyYm9sdC1vYmpzICYjNDM7PSBkb21haW4ubyBkbWFfcG9ydC5vIGljbS5vIHByb3BlcnR5Lm8geGRvbWFpbi5vIGxjLm8gdG11Lm8gdXNiNC5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTYtdGh1bmRlcmJvbHQtb2JqcyAmIzQzOz0gdXNiNF9wb3J0Lm8gbnZtLm8gcmV0aW1lci5vIHF1aXJrcy5vIGNseC5vXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9hY3BpLmM9MTYwPWJvb2wgdGJfYWNwaV9tYXlfdHVubmVsX3BjaWUodm9pZClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYy0xNjctLyoqXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYzoxNjg6ICogdGJfYWNwaV9pc194ZG9tYWluX2FsbG93ZWQoKSAtIEFyZSBYRG9tYWluIGNvbm5lY3Rpb25zIGFsbG93ZWRcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE2OS0gKlxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE3Mi0gKi9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jOjE3Mzpib29sIHRiX2FjcGlfaXNfeGRvbWFpbl9hbGxvd2VkKHZvaWQpXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYy0xNzQte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2x4LmM9Njg9c3RhdGljIGJvb2wgdGJfcG9ydF9jbHhfc3VwcG9ydGVkKHN0cnVjdCB0Yl9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2x4KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2x4LmMtNzctXHQvKiBEb24mIzM5O3QgZW5hYmxlIENMeCBpbiBjYXNlIG9mIGludGVyLWRvbWFpbiBsaW5rICovXG5kcml2ZXJzL3RodW5kZXJib2x0L2NseC5jOjc4Olx0aWYgKHBvcnQtXHUwMDNleGRvbWFpbilcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2x4LmMtNzktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYz0xODE4PXN0YXRpYyB2b2lkIG1hcmdpbmluZ19zd2l0Y2hfcmVtb3ZlKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4MzQtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoxODM1OnN0YXRpYyB2b2lkIG1hcmdpbmluZ194ZG9tYWluX2luaXQoc3RydWN0IHRiX3hkb21haW4gKnhkKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTgzNi17XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTgzOS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NDA6XHRwYXJlbnRfc3cgPSB0Yl94ZG9tYWluX3BhcmVudCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODQxLVx0ZG93bnN0cmVhbSA9IHRiX3BvcnRfYXQoeGQtXHUwMDNlcm91dGUsIHBhcmVudF9zdyk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg0NS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NDY6c3RhdGljIHZvaWQgbWFyZ2luaW5nX3hkb21haW5fcmVtb3ZlKHN0cnVjdCB0Yl94ZG9tYWluICp4ZClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4NDcte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4NTAtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoxODUxOlx0cGFyZW50X3N3ID0gdGJfeGRvbWFpbl9wYXJlbnQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg1Mi1cdGRvd25zdHJlYW0gPSB0Yl9wb3J0X2F0KHhkLVx1MDAzZXJvdXRlLCBwYXJlbnRfc3cpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jPTE4NzA9c3RhdGljIGlubGluZSB2b2lkIG1hcmdpbmluZ19zd2l0Y2hfcmVtb3ZlKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KSB7IH1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NzE6c3RhdGljIGlubGluZSB2b2lkIG1hcmdpbmluZ194ZG9tYWluX2luaXQoc3RydWN0IHRiX3hkb21haW4gKnhkKSB7IH1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NzI6c3RhdGljIGlubGluZSB2b2lkIG1hcmdpbmluZ194ZG9tYWluX3JlbW92ZShzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQpIHsgfVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg3My1zdGF0aWMgaW5saW5lIHZvaWQgbWFyZ2luaW5nX3JldGltZXJfaW5pdChzdHJ1Y3QgdGJfcmV0aW1lciAqcnQsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM9MjQ2Mj12b2lkIHRiX3N3aXRjaF9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgdGJfc3dpdGNoICpzdylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDY3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM6MjQ2ODp2b2lkIHRiX3hkb21haW5fZGVidWdmc19pbml0KHN0cnVjdCB0Yl94ZG9tYWluICp4ZClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTI0Njkte1xuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM6MjQ3MDpcdG1hcmdpbmluZ194ZG9tYWluX2luaXQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjQ3MS19XG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDcyLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM6MjQ3Mzp2b2lkIHRiX3hkb21haW5fZGVidWdmc19yZW1vdmUoc3RydWN0IHRiX3hkb21haW4gKnhkKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjQ3NC17XG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoyNDc1Olx0bWFyZ2luaW5nX3hkb21haW5fcmVtb3ZlKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTI0NzYtfVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz05MT1zdHJ1Y3QgZG1hX3Rlc3Qge1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTkyLVx0Y29uc3Qgc3RydWN0IHRiX3NlcnZpY2UgKnN2YztcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo5MzpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy05NC1cdHN0cnVjdCB0Yl9yaW5nICpyeF9yaW5nO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz0xMjA9c3RhdGljIHZvaWQgZG1hX3Rlc3RfZnJlZV9yaW5ncyhzdHJ1Y3QgZG1hX3Rlc3QgKmR0KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xMjItXHRpZiAoZHQtXHUwMDNlcnhfcmluZykge1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjEyMzpcdFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKGR0LVx1MDAzZXhkLCBkdC1cdTAwM2VyeF9ob3BpZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTI0LVx0XHR0Yl9yaW5nX2ZyZWUoZHQtXHUwMDNlcnhfcmluZyk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEyNy1cdGlmIChkdC1cdTAwM2V0eF9yaW5nKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTI4Olx0XHR0Yl94ZG9tYWluX3JlbGVhc2Vfb3V0X2hvcGlkKGR0LVx1MDAzZXhkLCBkdC1cdTAwM2V0eF9ob3BpZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTI5LVx0XHR0Yl9yaW5nX2ZyZWUoZHQtXHUwMDNldHhfcmluZyk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jPTEzND1zdGF0aWMgaW50IGRtYV90ZXN0X3N0YXJ0X3JpbmdzKHN0cnVjdCBkbWFfdGVzdCAqZHQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzNi1cdHVuc2lnbmVkIGludCBmbGFncyA9IFJJTkdfRkxBR19GUkFNRTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzoxMzc6XHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQgPSBkdC1cdTAwM2V4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xMzgtXHRpbnQgcmV0LCBlMmVfdHhfaG9wID0gMDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTU5LVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjE2MDpcdFx0cmV0ID0gdGJfeGRvbWFpbl9hbGxvY19vdXRfaG9waWQoeGQsIC0xKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xNjEtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTg3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjE4ODpcdFx0cmV0ID0gdGJfeGRvbWFpbl9hbGxvY19pbl9ob3BpZCh4ZCwgLTEpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTE4OS1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xOTYtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTk3Olx0cmV0ID0gdGJfeGRvbWFpbl9lbmFibGVfcGF0aHMoZHQtXHUwMDNleGQsIGR0LVx1MDAzZXR4X2hvcGlkLFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTE5OC1cdFx0XHRcdCAgICAgIGR0LVx1MDAzZXR4X3JpbmcgPyBkdC1cdTAwM2V0eF9yaW5nLVx1MDAzZWhvcCA6IC0xLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz0yMTQ9c3RhdGljIHZvaWQgZG1hX3Rlc3Rfc3RvcF9yaW5ncyhzdHJ1Y3QgZG1hX3Rlc3QgKmR0KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0yMjItXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MjIzOlx0cmV0ID0gdGJfeGRvbWFpbl9kaXNhYmxlX3BhdGhzKGR0LVx1MDAzZXhkLCBkdC1cdTAwM2V0eF9ob3BpZCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0yMjQtXHRcdFx0XHQgICAgICAgZHQtXHUwMDNldHhfcmluZyA/IGR0LVx1MDAzZXR4X3JpbmctXHUwMDNlaG9wIDogLTEsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jPTQ2OD1zdGF0aWMgaW50IGRtYV90ZXN0X3NldF9ib25kaW5nKHN0cnVjdCBkbWFfdGVzdCAqZHQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTQ3MS1cdGNhc2UgVEJfTElOS19XSURUSF9EVUFMOlxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjQ3MjpcdFx0cmV0dXJuIHRiX3hkb21haW5fbGFuZV9ib25kaW5nX2VuYWJsZShkdC1cdTAwM2V4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNDczLVx0Y2FzZSBUQl9MSU5LX1dJRFRIX1NJTkdMRTpcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo0NzQ6XHRcdHRiX3hkb21haW5fbGFuZV9ib25kaW5nX2Rpc2FibGUoZHQtXHUwMDNleGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTQ3NS1cdFx0ZmFsbHRocm91Z2g7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jPTYzOT1zdGF0aWMgaW50IGRtYV90ZXN0X3Byb2JlKHN0cnVjdCB0Yl9zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCB0Yl9zZXJ2aWNlX2lkICppZClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy02NDAte1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjY0MTpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZCA9IHRiX3NlcnZpY2VfcGFyZW50KHN2Yyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNjQyLVx0c3RydWN0IGRtYV90ZXN0ICpkdDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTMzOD1zdGF0aWMgYm9vbCB0Yl9kb21haW5fZXZlbnRfY2Iodm9pZCAqZGF0YSwgZW51bSB0Yl9jZmdfcGtnX3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTM1MC1cdGNhc2UgVEJfQ0ZHX1BLR19YRE9NQUlOX1JFU1A6XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjM1MTpcdFx0aWYgKHRiX2lzX3hkb21haW5fZW5hYmxlZCgpKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozNTI6XHRcdFx0cmV0dXJuIHRiX3hkb21haW5faGFuZGxlX3JlcXVlc3QodGIsIHR5cGUsIGJ1Ziwgc2l6ZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTM1My1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz03NTY9aW50IHRiX2RvbWFpbl9kaXNjb25uZWN0X3BjaWVfcGF0aHMoc3RydWN0IHRiICp0Yilcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc2NC0vKipcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6NzY1OiAqIHRiX2RvbWFpbl9hcHByb3ZlX3hkb21haW5fcGF0aHMoKSAtIEVuYWJsZSBETUEgcGF0aHMgZm9yIFhEb21haW5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzY2LSAqIEB0YjogRG9tYWluIGVuYWJsaW5nIHRoZSBETUEgcGF0aHNcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc4MS0gKi9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6NzgyOmludCB0Yl9kb21haW5fYXBwcm92ZV94ZG9tYWluX3BhdGhzKHN0cnVjdCB0YiAqdGIsIHN0cnVjdCB0Yl94ZG9tYWluICp4ZCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzgzLVx0XHRcdFx0ICAgIGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc4NS17XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjc4NjpcdGlmICghdGItXHUwMDNlY21fb3BzLVx1MDAzZWFwcHJvdmVfeGRvbWFpbl9wYXRocylcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzg3LVx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy03ODgtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjc4OTpcdHJldHVybiB0Yi1cdTAwM2VjbV9vcHMtXHUwMDNlYXBwcm92ZV94ZG9tYWluX3BhdGhzKHRiLCB4ZCwgdHJhbnNtaXRfcGF0aCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzkwLVx0XHRcdHRyYW5zbWl0X3JpbmcsIHJlY2VpdmVfcGF0aCwgcmVjZWl2ZV9yaW5nKTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc5My0vKipcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6Nzk0OiAqIHRiX2RvbWFpbl9kaXNjb25uZWN0X3hkb21haW5fcGF0aHMoKSAtIERpc2FibGUgRE1BIHBhdGhzIGZvciBYRG9tYWluXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc5NS0gKiBAdGI6IERvbWFpbiBkaXNhYmxpbmcgdGhlIERNQSBwYXRoc1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODEwLSAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MTE6aW50IHRiX2RvbWFpbl9kaXNjb25uZWN0X3hkb21haW5fcGF0aHMoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3hkb21haW4gKnhkLFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTItXHRcdFx0XHQgICAgICAgaW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODE0LXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODE1Olx0aWYgKCF0Yi1cdTAwM2VjbV9vcHMtXHUwMDNlZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTYtXHRcdHJldHVybiAtRU5PVFNVUFA7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgxNy1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODE4Olx0cmV0dXJuIHRiLVx1MDAzZWNtX29wcy1cdTAwM2VkaXNjb25uZWN0X3hkb21haW5fcGF0aHModGIsIHhkLCB0cmFuc21pdF9wYXRoLFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTktXHRcdFx0dHJhbnNtaXRfcmluZywgcmVjZWl2ZV9wYXRoLCByZWNlaXZlX3JpbmcpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODIxLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MjI6c3RhdGljIGludCBkaXNjb25uZWN0X3hkb21haW4oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MjMte1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MjQ6XHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQ7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgyNS1cdHN0cnVjdCB0YiAqdGIgPSBkYXRhO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODI3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4Mjg6XHR4ZCA9IHRiX3RvX3hkb21haW4oZGV2KTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODI5LVx0aWYgKHhkIFx1MDAyNlx1MDAyNiB4ZC1cdTAwM2V0YiA9PSB0YilcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODMwOlx0XHRyZXQgPSB0Yl94ZG9tYWluX2Rpc2FibGVfYWxsX3BhdGhzKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODMxLVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM9ODQ1PWludCB0Yl9kb21haW5fZGlzY29ubmVjdF9hbGxfcGF0aHMoc3RydWN0IHRiICp0Yilcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg1Mi1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODUzOlx0cmV0dXJuIGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2dGJfYnVzX3R5cGUsIE5VTEwsIHRiLCBkaXNjb25uZWN0X3hkb21haW4pO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NTQtfVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM9ODU2PXN0cnVjdCB1bnJlZ2lzdGVyX2NvbnRleHQge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYwLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4NjE6c3RhdGljIGludCB1bnJlZ2lzdGVyX3VucGx1Z2dlZF94ZG9tYWluKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYyLXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYzLVx0c3RydWN0IHVucmVnaXN0ZXJfY29udGV4dCAqY3R4ID0gZGF0YTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODY0Olx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NjUtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg2NjpcdHhkID0gdGJfdG9feGRvbWFpbihkZXYpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NjctXHRpZiAoeGQgXHUwMDI2XHUwMDI2IHhkLVx1MDAzZXRiID09IGN0eC1cdTAwM2V0YiBcdTAwMjZcdTAwMjYgeGQtXHUwMDNlaXNfdW5wbHVnZ2VkKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg2ODpcdFx0dGJfeGRvbWFpbl91bnJlZ2lzdGVyKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODY5LVx0XHRjdHgtXHUwMDNlbiYjNDM7JiM0Mzs7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NzMtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg3NDppbnQgdGJfZG9tYWluX3VucmVnaXN0ZXJfdW5wbHVnZ2VkX3hkb21haW5zKHN0cnVjdCB0YiAqdGIpXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg3NS17XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NzktXHRjdHgubiA9IDA7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg4MDpcdGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2dGJfYnVzX3R5cGUsIE5VTEwsIFx1MDAyNmN0eCwgdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbik7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg4MS1cdHRiX2RvbWFpbl9wdXQodGIpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM9ODg2PWludCB0Yl9kb21haW5faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODkzLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4OTQ6XHRyZXQgPSB0Yl94ZG9tYWluX2luaXQoKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODk1LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg5OC1cdGlmIChyZXQpXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg5OTpcdFx0Z290byBlcnJfeGRvbWFpbjtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTAwLVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTAyLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo5MDM6ZXJyX3hkb21haW46XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjkwNDpcdHRiX3hkb21haW5fZXhpdCgpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy05MDUtZXJyX2FjcGk6XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz05MTI9dm9pZCB0Yl9kb21haW5fZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTE2LVx0dGJfbnZtX2V4aXQoKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6OTE3Olx0dGJfeGRvbWFpbl9leGl0KCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTkxOC1cdHRiX2FjcGlfZXhpdCgpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9NTk9c3RydWN0IHVzYjRfc3dpdGNoX252bV9hdXRoIHtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTg5LSAqIEBkZXZpY2VfZGlzY29ubmVjdGVkOiBIYW5kbGUgZGV2aWNlIGRpc2Nvbm5lY3RlZCBJQ00gbWVzc2FnZVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5MDogKiBAeGRvbWFpbl9jb25uZWN0ZWQ6IEhhbmRsZSBYRG9tYWluIGNvbm5lY3RlZCBJQ00gbWVzc2FnZVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5MTogKiBAeGRvbWFpbl9kaXNjb25uZWN0ZWQ6IEhhbmRsZSBYRG9tYWluIGRpc2Nvbm5lY3RlZCBJQ00gbWVzc2FnZVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05Mi0gKiBAcnRkM192ZXRvOiBIYW5kbGUgUlREMyB2ZXRvIG5vdGlmaWNhdGlvbiBJQ00gbWVzc2FnZVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9OTQ9c3RydWN0IGljbSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTgtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTk6XHR2b2lkICgqeGRvbWFpbl9jb25uZWN0ZWQpKHN0cnVjdCB0YiAqdGIsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjE6XHR2b2lkICgqeGRvbWFpbl9kaXNjb25uZWN0ZWQpKHN0cnVjdCB0YiAqdGIsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9Mzc1PXN0YXRpYyBib29sIGljbV9maXJtd2FyZV9ydW5uaW5nKGNvbnN0IHN0cnVjdCB0Yl9uaGkgKm5oaSlcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTM4Mi1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MzgzOnN0YXRpYyB2b2lkIGljbV94ZG9tYWluX2FjdGl2YXRlZChzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsIGJvb2wgYWN0aXZhdGVkKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0zODQte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMzg4LVx0bmhpX3BvcnQgPSB0Yl9zd2l0Y2hfZmluZF9wb3J0KHRiLVx1MDAzZXJvb3Rfc3dpdGNoLCBUQl9UWVBFX05ISSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjM4OTpcdGRzdF9wb3J0ID0gdGJfeGRvbWFpbl9kb3duc3RyZWFtX3BvcnQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0zOTAtXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz01NTI9c3RhdGljIGludCBpY21fZnJfY2hhbGxlbmdlX3N3aXRjaF9rZXkoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3N3aXRjaCAqc3csXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy01ODEtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjU4MjpzdGF0aWMgaW50IGljbV9mcl9hcHByb3ZlX3hkb21haW5fcGF0aHMoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3hkb21haW4gKnhkLFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy01ODMtXHRcdFx0XHRcdGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTU4NS17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjU4NjpcdHN0cnVjdCBpY21fZnJfcGtnX2FwcHJvdmVfeGRvbWFpbl9yZXNwb25zZSByZXBseTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NTg3Olx0c3RydWN0IGljbV9mcl9wa2dfYXBwcm92ZV94ZG9tYWluIHJlcXVlc3Q7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTU4OC1cdGludCByZXQ7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MTMtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjYxNDpcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgdHJ1ZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTYxNS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNjE3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo2MTg6c3RhdGljIGludCBpY21fZnJfZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKHN0cnVjdCB0YiAqdGIsIHN0cnVjdCB0Yl94ZG9tYWluICp4ZCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNjE5LVx0XHRcdFx0XHQgICBpbnQgdHJhbnNtaXRfcGF0aCwgaW50IHRyYW5zbWl0X3JpbmcsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MzQtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjYzNTpcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgZmFsc2UpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MzYtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTcwMz1zdGF0aWMgdm9pZCByZW1vdmVfc3dpdGNoKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzA4LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MDk6c3RhdGljIHZvaWQgYWRkX3hkb21haW4oc3RydWN0IHRiX3N3aXRjaCAqc3csIHU2NCByb3V0ZSxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzEwLVx0XHRcdGNvbnN0IHV1aWRfdCAqbG9jYWxfdXVpZCwgY29uc3QgdXVpZF90ICpyZW1vdGVfdXVpZCxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcxMi17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjcxMzpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzE0LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzE2LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MTc6XHR4ZCA9IHRiX3hkb21haW5fYWxsb2Moc3ctXHUwMDNldGIsIFx1MDAyNnN3LVx1MDAzZWRldiwgcm91dGUsIGxvY2FsX3V1aWQsIHJlbW90ZV91dWlkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzE4LVx0aWYgKCF4ZClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcyMy1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzI0Olx0dGJfcG9ydF9hdChyb3V0ZSwgc3cpLVx1MDAzZXhkb21haW4gPSB4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzI1LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MjY6XHR0Yl94ZG9tYWluX2FkZCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcyNy1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTczMi1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzMzOnN0YXRpYyB2b2lkIHVwZGF0ZV94ZG9tYWluKHN0cnVjdCB0Yl94ZG9tYWluICp4ZCwgdTY0IHJvdXRlLCB1OCBsaW5rKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03MzQte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzM5LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3NDA6c3RhdGljIHZvaWQgcmVtb3ZlX3hkb21haW4oc3RydWN0IHRiX3hkb21haW4gKnhkKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03NDEte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzQ0LVx0c3cgPSB0Yl90b19zd2l0Y2goeGQtXHUwMDNlZGV2LnBhcmVudCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjc0NTpcdHRiX3BvcnRfYXQoeGQtXHUwMDNlcm91dGUsIHN3KS1cdTAwM2V4ZG9tYWluID0gTlVMTDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzQ2LVx0eGQtXHUwMDNlaXNfdW5wbHVnZ2VkID0gdHJ1ZTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzQ3Olx0dGJfeGRvbWFpbl9yZW1vdmUoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03NDgtfVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9NzUxPWljbV9mcl9kZXZpY2VfY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzU5LVx0Ym9vbCBhdXRob3JpemVkID0gZmFsc2U7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjc2MDpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzYxLVx0dTggbGluaywgZGVwdGg7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy04NTAtXHQvKiBSZW1vdmUgZXhpc3RpbmcgWERvbWFpbiBjb25uZWN0aW9uIGlmIGZvdW5kICovXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjg1MTpcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X2xpbmtfZGVwdGgodGIsIGxpbmssIGRlcHRoKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtODUyLVx0aWYgKHhkKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjg1MzpcdFx0cmVtb3ZlX3hkb21haW4oeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo4NTQ6XHRcdHRiX3hkb21haW5fcHV0KHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtODU1LVx0fVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9OTMyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzMzppY21fZnJfeGRvbWFpbl9jb25uZWN0ZWQoc3RydWN0IHRiICp0YiwgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTkzNC17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzNTpcdGNvbnN0IHN0cnVjdCBpY21fZnJfZXZlbnRfeGRvbWFpbl9jb25uZWN0ZWQgKnBrZyA9XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzNjpcdFx0KGNvbnN0IHN0cnVjdCBpY21fZnJfZXZlbnRfeGRvbWFpbl9jb25uZWN0ZWQgKiloZHI7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzNzpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTM4LVx0c3RydWN0IHRiX3N3aXRjaCAqc3c7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05NTItXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk1MzpcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3V1aWQodGIsIFx1MDAyNnBrZy1cdTAwM2VyZW1vdGVfdXVpZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk1NC1cdGlmICh4ZCkge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTYwLVx0XHRpZiAoeGQtXHUwMDNlZGVwdGggPT0gZGVwdGggXHUwMDI2XHUwMDI2IHhkX3BoeV9wb3J0ID09IHBoeV9wb3J0KSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk2MTpcdFx0XHR1cGRhdGVfeGRvbWFpbih4ZCwgcm91dGUsIGxpbmspO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5NjI6XHRcdFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05NjMtXHRcdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTcxLVx0XHQgKi9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTcyOlx0XHRyZW1vdmVfeGRvbWFpbih4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk3MzpcdFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05NzQtXHR9XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05ODAtXHQgKi9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTgxOlx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfbGlua19kZXB0aCh0YiwgbGluaywgZGVwdGgpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05ODItXHRpZiAoIXhkKSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05ODYtXHRcdGlmIChkdWFsX2xpbmspXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk4NzpcdFx0XHR4ZCA9IHRiX3hkb21haW5fZmluZF9ieV9saW5rX2RlcHRoKHRiLCBkdWFsX2xpbmssXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk4OC1cdFx0XHRcdFx0XHRcdCAgIGRlcHRoKTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk5MC1cdGlmICh4ZCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5OTE6XHRcdHJlbW92ZV94ZG9tYWluKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTkyOlx0XHR0Yl94ZG9tYWluX3B1dCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk5My1cdH1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMTItXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMTM6XHRhZGRfeGRvbWFpbihzdywgcm91dGUsIFx1MDAyNnBrZy1cdTAwM2Vsb2NhbF91dWlkLCBcdTAwMjZwa2ctXHUwMDNlcmVtb3RlX3V1aWQsIGxpbmssXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMTQtXHRcdCAgICBkZXB0aCk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0xMDE4PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMTk6aWNtX2ZyX3hkb21haW5fZGlzY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMDIwLXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTAyMTpcdGNvbnN0IHN0cnVjdCBpY21fZnJfZXZlbnRfeGRvbWFpbl9kaXNjb25uZWN0ZWQgKnBrZyA9XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMjI6XHRcdChjb25zdCBzdHJ1Y3QgaWNtX2ZyX2V2ZW50X3hkb21haW5fZGlzY29ubmVjdGVkICopaGRyO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDIzOlx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMDI0LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAyOS1cdCAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDMwOlx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfdXVpZCh0YiwgXHUwMDI2cGtnLVx1MDAzZXJlbW90ZV91dWlkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAzMS1cdGlmICh4ZCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDMyOlx0XHRyZW1vdmVfeGRvbWFpbih4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMzM6XHRcdHRiX3hkb21haW5fcHV0KHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAzNC1cdH1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTExMjc9c3RhdGljIGludCBpY21fdHJfY2hhbGxlbmdlX3N3aXRjaF9rZXkoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3N3aXRjaCAqc3csXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTU3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTU4OnN0YXRpYyBpbnQgaWNtX3RyX2FwcHJvdmVfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExNTktXHRcdFx0XHRcdGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExNjEte1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTYyOlx0c3RydWN0IGljbV90cl9wa2dfYXBwcm92ZV94ZG9tYWluX3Jlc3BvbnNlIHJlcGx5O1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTYzOlx0c3RydWN0IGljbV90cl9wa2dfYXBwcm92ZV94ZG9tYWluIHJlcXVlc3Q7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExNjQtXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTE4OS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTE5MDpcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgdHJ1ZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExOTEtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExOTMtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExOTQ6c3RhdGljIGludCBpY21fdHJfeGRvbWFpbl90ZWFyX2Rvd24oc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3hkb21haW4gKnhkLFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTk1LVx0XHRcdFx0ICAgIGludCBzdGFnZSlcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTE5Ni17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExOTc6XHRzdHJ1Y3QgaWNtX3RyX3BrZ19kaXNjb25uZWN0X3hkb21haW5fcmVzcG9uc2UgcmVwbHk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExOTg6XHRzdHJ1Y3QgaWNtX3RyX3BrZ19kaXNjb25uZWN0X3hkb21haW4gcmVxdWVzdDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTE5OS1cdGludCByZXQ7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjE5LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjIwOnN0YXRpYyBpbnQgaWNtX3RyX2Rpc2Nvbm5lY3RfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMjEtXHRcdFx0XHRcdCAgIGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMjUtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMjY6XHRyZXQgPSBpY21fdHJfeGRvbWFpbl90ZWFyX2Rvd24odGIsIHhkLCAxKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIyNy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjMwLVx0dXNsZWVwX3JhbmdlKDEwLCA1MCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMzE6XHRyZXQgPSBpY21fdHJfeGRvbWFpbl90ZWFyX2Rvd24odGIsIHhkLCAyKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIzMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjM0LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjM1Olx0aWNtX3hkb21haW5fYWN0aXZhdGVkKHhkLCBmYWxzZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMzYtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTEyNDA9X19pY21fdHJfZGV2aWNlX2Nvbm5lY3RlZChzdHJ1Y3QgdGIgKnRiLCBjb25zdCBzdHJ1Y3QgaWNtX3BrZ19oZWFkZXIgKmhkcixcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyNDctXHRzdHJ1Y3QgdGJfc3dpdGNoICpzdywgKnBhcmVudF9zdztcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTI0ODpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTI0OS1cdHU2NCByb3V0ZTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyOTYtXHQvKiBYRG9tYWluIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2FtZSBhZGRyZXNzICovXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyOTc6XHR4ZCA9IHRiX3hkb21haW5fZmluZF9ieV9yb3V0ZSh0Yiwgcm91dGUpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjk4LVx0aWYgKHhkKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyOTk6XHRcdHJlbW92ZV94ZG9tYWluKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTMwMDpcdFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMzAxLVx0fVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MTM2Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzY3OmljbV90cl94ZG9tYWluX2Nvbm5lY3RlZChzdHJ1Y3QgdGIgKnRiLCBjb25zdCBzdHJ1Y3QgaWNtX3BrZ19oZWFkZXIgKmhkcilcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM2OC17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzNjk6XHRjb25zdCBzdHJ1Y3QgaWNtX3RyX2V2ZW50X3hkb21haW5fY29ubmVjdGVkICpwa2cgPVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzcwOlx0XHQoY29uc3Qgc3RydWN0IGljbV90cl9ldmVudF94ZG9tYWluX2Nvbm5lY3RlZCAqKWhkcjtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM3MTpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM3Mi1cdHN0cnVjdCB0Yl9zd2l0Y2ggKnN3O1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM3OS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4MDpcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3V1aWQodGIsIFx1MDAyNnBrZy1cdTAwM2VyZW1vdGVfdXVpZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzODEtXHRpZiAoeGQpIHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM4Mi1cdFx0aWYgKHhkLVx1MDAzZXJvdXRlID09IHJvdXRlKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzODM6XHRcdFx0dXBkYXRlX3hkb21haW4oeGQsIHJvdXRlLCAwKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4NDpcdFx0XHR0Yl94ZG9tYWluX3B1dCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzODUtXHRcdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM4Ny1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4ODpcdFx0cmVtb3ZlX3hkb21haW4oeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzg5Olx0XHR0Yl94ZG9tYWluX3B1dCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzOTAtXHR9XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzOTEtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzOTI6XHQvKiBBbiBleGlzdGluZyB4ZG9tYWluIHdpdGggdGhlIHNhbWUgYWRkcmVzcyAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzkzOlx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfcm91dGUodGIsIHJvdXRlKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM5NC1cdGlmICh4ZCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzk1Olx0XHRyZW1vdmVfeGRvbWFpbih4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzOTY6XHRcdHRiX3hkb21haW5fcHV0KHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM5Ny1cdH1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MTUtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MTY6XHRhZGRfeGRvbWFpbihzdywgcm91dGUsIFx1MDAyNnBrZy1cdTAwM2Vsb2NhbF91dWlkLCBcdTAwMjZwa2ctXHUwMDNlcmVtb3RlX3V1aWQsIDAsIDApO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDE3LVx0dGJfc3dpdGNoX3B1dChzdyk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0xNDIwPXN0YXRpYyB2b2lkXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MjE6aWNtX3RyX3hkb21haW5fZGlzY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDIyLXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQyMzpcdGNvbnN0IHN0cnVjdCBpY21fdHJfZXZlbnRfeGRvbWFpbl9kaXNjb25uZWN0ZWQgKnBrZyA9XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MjQ6XHRcdChjb25zdCBzdHJ1Y3QgaWNtX3RyX2V2ZW50X3hkb21haW5fZGlzY29ubmVjdGVkICopaGRyO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDI1Olx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDI2LVx0dTY0IHJvdXRlO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTQyOS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQzMDpcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3JvdXRlKHRiLCByb3V0ZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MzEtXHRpZiAoeGQpIHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQzMjpcdFx0cmVtb3ZlX3hkb21haW4oeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDMzOlx0XHR0Yl94ZG9tYWluX3B1dCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MzQtXHR9XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0xNzM1PXN0YXRpYyB2b2lkIGljbV9oYW5kbGVfbm90aWZpY2F0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE3NTYtXHRcdGNhc2UgSUNNX0VWRU5UX1hET01BSU5fQ09OTkVDVEVEOlxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNzU3Olx0XHRcdGlmICh0Yl9pc194ZG9tYWluX2VuYWJsZWQoKSlcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTc1ODpcdFx0XHRcdGljbS1cdTAwM2V4ZG9tYWluX2Nvbm5lY3RlZCh0Yiwgbi1cdTAwM2Vwa2cpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzU5LVx0XHRcdGJyZWFrO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzYwLVx0XHRjYXNlIElDTV9FVkVOVF9YRE9NQUlOX0RJU0NPTk5FQ1RFRDpcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTc2MTpcdFx0XHRpZiAodGJfaXNfeGRvbWFpbl9lbmFibGVkKCkpXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE3NjI6XHRcdFx0XHRpY20tXHUwMDNleGRvbWFpbl9kaXNjb25uZWN0ZWQodGIsIG4tXHUwMDNlcGtnKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTc2My1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE3NzctXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE3Nzg6XHR0Yl9kb21haW5fdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbnModGIpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzc5LX1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTIwNTY9c3RhdGljIHZvaWQgaWNtX3VucGx1Z19jaGlsZHJlbihzdHJ1Y3QgdGJfc3dpdGNoICpzdylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIwNjMtXHR0Yl9zd2l0Y2hfZm9yX2VhY2hfcG9ydChzdywgcG9ydCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMDY0Olx0XHRpZiAocG9ydC1cdTAwM2V4ZG9tYWluKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMDY1Olx0XHRcdHBvcnQtXHUwMDNleGRvbWFpbi1cdTAwM2Vpc191bnBsdWdnZWQgPSB0cnVlO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMDY2LVx0XHRlbHNlIGlmICh0Yl9wb3J0X2hhc19yZW1vdGUocG9ydCkpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0yMTAxPXN0YXRpYyB2b2lkIGljbV9mcmVlX3VucGx1Z2dlZF9jaGlsZHJlbihzdHJ1Y3QgdGJfc3dpdGNoICpzdylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIxMDUtXHR0Yl9zd2l0Y2hfZm9yX2VhY2hfcG9ydChzdywgcG9ydCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMTA2Olx0XHRpZiAocG9ydC1cdTAwM2V4ZG9tYWluIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXhkb21haW4tXHUwMDNlaXNfdW5wbHVnZ2VkKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjIxMDc6XHRcdFx0dGJfeGRvbWFpbl9yZW1vdmUocG9ydC1cdTAwM2V4ZG9tYWluKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MjEwODpcdFx0XHRwb3J0LVx1MDAzZXhkb21haW4gPSBOVUxMO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMTA5LVx0XHR9IGVsc2UgaWYgKHRiX3BvcnRfaGFzX3JlbW90ZShwb3J0KSkge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjEyMD1zdGF0aWMgdm9pZCBpY21fcmVzY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjEyOS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MjEzMDpcdHRiX2RvbWFpbl91bnJlZ2lzdGVyX3VucGx1Z2dlZF94ZG9tYWlucyh0Yik7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIxMzEtfVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjQwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHRiX2NtX29wcyBpY21fZnJfb3BzID0ge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjQxMS1cdC5kaXNjb25uZWN0X3BjaWVfcGF0aHMgPSBpY21fZGlzY29ubmVjdF9wY2llX3BhdGhzLFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyNDEyOlx0LmFwcHJvdmVfeGRvbWFpbl9wYXRocyA9IGljbV9mcl9hcHByb3ZlX3hkb21haW5fcGF0aHMsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjI0MTM6XHQuZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzID0gaWNtX2ZyX2Rpc2Nvbm5lY3RfeGRvbWFpbl9wYXRocyxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjQxNC19O1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IHRiX2NtX29wcyBpY21fYXJfb3BzID0ge1xuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgVGh1bmRlcmJvbHQgeGRvbWFpbiBDcmVhdGlvbioqCgpPa2F5LCBzbyBgY29uZmlnZnMuY2AgaXMgdGhlIGtleSBmb3IgdGh1bmRlcmJvbHQgeGRvbWFpbnMsIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgKmFsbG93cyogdGhlIGNyZWF0aW9uIG9mIHRoZXNlIHhkb21haW5zLiBJJiMzOTtsbCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgY29kZSB0aGVyZSB0byBjb25maXJtIGFuZCB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGFuZCBzZXR1cCBvY2N1cnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRvbWFpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVGh1bmRlcmJvbHQgQ29uZmlnRlMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBleHBvc2VkIHZpYSBgY29uZmlnZnNgIGZvciBUaHVuZGVyYm9sdCBkZXZpY2VzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmNgLiBUaGF0IGZpbGUgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGhhbmRsaW5nIHRoZSBgY29uZmlnZnNgIGludGVyZmFjZSBmb3IgVGh1bmRlcmJvbHQsIHNvIGl0JiMzOTtzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkgZXhwZWN0IGl0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYXR0cmlidXRlcyBhbmQgc3RydWN0dXJlcyB0aGF0IGFyZSBiZWluZyBjcmVhdGVkIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IHVzZXJzcGFjZSBpcyBzdXBwb3NlZCB0byBpbnRlcmFjdCB3aXRoIHRoZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWdfaXRlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtMTMtXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM6MTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHRiX3Jvb3RfZ3JvdXBfdHlwZSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0xNS1cdC5jdF9vd25lciA9IFRISVNfTU9EVUxFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkxOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYDoKCioqRGlzc2VjdGluZyBUaHVuZGVyYm9sdCBDb25maWd1cmF0aW9uIFRocm91Z2ggY29uZmlnZnMqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYC4gSSBleHBlY3QgdGhpcyBjb2RlIHRvIGJlIHRoZSBjcnVjaWFsIGludGVyZmFjZSBmb3IgaG93IHdlIGV4cG9zZSBUaHVuZGVyYm9sdCBkZXZpY2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZXJzcGFjZSwgbGlrZWx5IHRocm91Z2ggdGhlIGBjb25maWdmc2AgZmlsZXN5c3RlbS4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgY3JlYXRpb24gb2YgdmFyaW91cyBhdHRyaWJ1dGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoaW4gYGNvbmZpZ2ZzYCB0aGF0IHJlcHJlc2VudCBkaWZmZXJlbnQgYXNwZWN0cyBvZiBhIFRodW5kZXJib2x0IGNvbm5lY3Rpb24sIGxpa2UgcG9ydCBjb25maWd1cmF0aW9uLCBzZWN1cml0eSBsZXZlbHMsIGFuZCBwZXJoYXBzIGV2ZW4gcG93ZXIgbWFuYWdlbWVudCBwYXJhbWV0ZXJzLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIHdpdGggYGNvbmZpZ2ZzYC4gSXQmIzM5O2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhleSYjMzk7dmUgc3RydWN0dXJlZCB0aGUgaGllcmFyY2h5IG9mIHRoZSBleHBvc2VkIG5vZGVzIGFuZCBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTt2ZSBkZWFsdCB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgVGh1bmRlcmJvbHQmIzM5O3Mgc2VjdXJpdHkgZmVhdHVyZXMgYW5kIGhvdyB0aGF0IG1hcHMgdG8gdGhlIHVzZXItbGV2ZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBob3QtcGx1Z2dpbmcgYW5kIGRldmljZSBlbnVtZXJhdGlvbiB0b28uCgpJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIGFueSBzcGVjaWZpYyBhY2Nlc3MgY29udHJvbHMgb3IgcGVybWlzc2lvbnMgbWFuYWdlbWVudCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb24gb2YgY3JpdGljYWwgVGh1bmRlcmJvbHQgc2V0dGluZ3MsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgVGh1bmRlcmJvbHQgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIHN5bmNocm9ub3VzIGNvbnRleHQgb2YgdGhlIGBjb25maWdmc2AgaW50ZXJmYWNlLiBJJiMzOTtsbCBhbHNvIGJlIHRyeWluZyB0byBzcG90IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBhbnkgZWxlZ2FudCBzb2x1dGlvbnMgdG8gcGFydGljdWxhcmx5IHRyaWNreSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBUaGlzIHNob3VsZCBiZSBhbiBpbGx1bWluYXRpbmcgcmVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvbmZpZ0ZTIHN1cHBvcnRcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAyNiwgSW50ZWwgQ29ycG9yYXRpb25cbiAgIDY6XHQgKiBBdXRob3I6IE1pa2EgV2VzdGVyYmVyZyBcdTAwM2NtaWthLndlc3RlcmJlcmdAbGludXguaW50ZWwuY29tXHUwMDNlXG4gICA3Olx0ICovXG4gICA4Olx0XG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29uZmlnZnMuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gIDExOlx0XG4gIDEyOlx0I2luY2x1ZGUgXCYjMzQ7dGIuaFwmIzM0O1xuICAxMzpcdFxuICAxNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB0Yl9yb290X2dyb3VwX3R5cGUgPSB7XG4gIDE1Olx0XHQuY3Rfb3duZXIgPSBUSElTX01PRFVMRSxcbiAgMTY6XHR9O1xuICAxNzpcdFxuICAxODpcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHRiX2NvbmZpZ2ZzID0ge1xuICAxOTpcdFx0LnN1X2dyb3VwID0ge1xuICAyMDpcdFx0XHQuY2dfaXRlbSA9IHtcbiAgMjE6XHRcdFx0XHQuY2lfbmFtZWJ1ZiA9IFwmIzM0O3RodW5kZXJib2x0XCYjMzQ7LFxuICAyMjpcdFx0XHRcdC5jaV90eXBlID0gXHUwMDI2dGJfcm9vdF9ncm91cF90eXBlLFxuICAyMzpcdFx0XHR9LFxuICAyNDpcdFx0fSxcbiAgMjU6XHR9O1xuICAyNjpcdFxuICAyNzpcdC8qKlxuICAyODpcdCAqIHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKCkgLSBSZWdpc3RlciBUaHVuZGVyYm9sdCBDb25maWdGUyBncm91cFxuICAyOTpcdCAqIEBncm91cDogR3JvdXAgdG8gcmVnaXN0ZXIuXG4gIDMwOlx0ICpcbiAgMzE6XHQgKiBSZWdpc3RlcnMgdGhlIG5ldyBAZ3JvdXAgdW5kZXIgVGh1bmRlcmJvbHQgc3Vic3lzdGVtIENvbmZpZ0ZTLlxuICAzMjpcdCAqXG4gIDMzOlx0ICogUmV0dXJuOiAwJSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZS5cbiAgMzQ6XHQgKi9cbiAgMzU6XHRpbnQgdGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4gIDM2Olx0e1xuICAzNzpcdFx0cmV0dXJuIGNvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKFx1MDAyNnRiX2NvbmZpZ2ZzLnN1X2dyb3VwLCBncm91cCk7XG4gIDM4Olx0fVxuICAzOTpcdEVYUE9SVF9TWU1CT0xfR1BMKHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKTtcbiAgNDA6XHRcbiAgNDE6XHQvKipcbiAgNDI6XHQgKiB0Yl9jb25maWdmc191bnJlZ2lzdGVyX2dyb3VwKCkgLSBVbnJlZ2lzdGVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBncm91cFxuICA0MzpcdCAqIEBncm91cDogR3JvdXAgdG8gdW5yZWdpc3Rlci5cbiAgNDQ6XHQgKi9cbiAgNDU6XHR2b2lkIHRiX2NvbmZpZ2ZzX3VucmVnaXN0ZXJfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4gIDQ2Olx0e1xuICA0NzpcdFx0Y29uZmlnZnNfdW5yZWdpc3Rlcl9ncm91cChncm91cCk7XG4gIDQ4Olx0fVxuICA0OTpcdEVYUE9SVF9TWU1CT0xfR1BMKHRiX2NvbmZpZ2ZzX3VucmVnaXN0ZXJfZ3JvdXApO1xuICA1MDpcdFxuICA1MTpcdGludCB0Yl9jb25maWdmc19pbml0KHZvaWQpXG4gIDUyOlx0e1xuICA1MzpcdFx0Y29uZmlnX2dyb3VwX2luaXQoXHUwMDI2dGJfY29uZmlnZnMuc3VfZ3JvdXApO1xuICA1NDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZ0Yl9jb25maWdmcy5zdV9tdXRleCk7XG4gIDU1Olx0XHRyZXR1cm4gY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKFx1MDAyNnRiX2NvbmZpZ2ZzKTtcbiAgNTY6XHR9XG4gIDU3Olx0XG4gIDU4Olx0dm9pZCB0Yl9jb25maWdmc19leGl0KHZvaWQpXG4gIDU5Olx0e1xuICA2MDpcdFx0Y29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oXHUwMDI2dGJfY29uZmlnZnMpO1xuICA2MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZ1bmN0aW9uOgoKKipEaWdnaW5nIGludG8gdGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAqKgoKQWxyaWdodCwgYHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwYCBpcyBhbiBleHBvcnRlZCBzeW1ib2wuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYXZhaWxhYmxlIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIHRvIHVzZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aG8gKnVzZXMqIHRoaXMgZnVuY3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzIHRvIHJlYWxseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSeKAmWxsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIHNlZSB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZHJpdmVyLCBhIGNvcmUgY29tcG9uZW50LCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGltZSB0byBicmVhayBvdXQgdGhlIGdyZXAsIG9yIHdoYXRldmVyIHN0YXRpYyBhbmFseXNpcyB0b29sIEkmIzM5O3ZlIGdvdCBhdCBoYW5kLCBhbmQgZmluZCB0aG9zZSBjYWxsIGxvY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM9MTg9c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gdGJfY29uZmlnZnMgPSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTI3LS8qKlxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jOjI4OiAqIHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKCkgLSBSZWdpc3RlciBUaHVuZGVyYm9sdCBDb25maWdGUyBncm91cFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTI5LSAqIEBncm91cDogR3JvdXAgdG8gcmVnaXN0ZXIuXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTM0LSAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jOjM1OmludCB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0zNi17XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTM4LX1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYzozOTpFWFBPUlRfU1lNQk9MX0dQTCh0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtNDAtXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYz0xNjQ4PXN0YXRpYyBpbnQgX19pbml0IHRic3RyZWFtX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jLTE2NjUtXHRjb25maWdfZ3JvdXBfaW5pdChcdTAwMjZ0YnN0cmVhbV9ncm91cCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjE2NjY6XHRyZXQgPSB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cChcdTAwMjZ0YnN0cmVhbV9ncm91cCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jLTE2NjctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYxNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBTeXprYWxsZXItVHJpZ2dlcmVkIFRodW5kZXJib2x0IEJ1ZyoqCgpPa2F5LCBzbyBgc3RyZWFtLmNgIHVzZXMgaXQsIHRoYXQmIzM5O3MgYSBkYXRhIHBvaW50LiBCdXQgaG9sZCBvbiwgYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYCBoYXMgS1VuaXQgdGVzdHMuIEFuZCBJIGtub3cgS1VuaXQgdGVzdHMgKmNhbiogYmUgcnVuIGluIHN5emthbGxlciBpZiB0aGV5JiMzOTtyZSBjb21waWxlZCBpbiwgdGhvdWdoIGl0JiMzOTtzIG5vdCB0aGUgbm9ybSBmb3Igc3l6a2FsbGVyIHRvIHRhcmdldCB0aGVtIGRpcmVjdGx5IGZvciBmdXp6aW5nLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGBzeXotY2x1c3RlcmAgaXMgdGhlIGF1dGhvciBvZiB0aGUgcmVwb3J0IG1lYW5zIHN5emthbGxlciAqZm91bmQqIGEgYnVnLCB3aGljaCBpcyB0aGUgaW1wb3J0YW50IHRha2Vhd2F5IGhlcmUuCgpTbywgaG93IGV4YWN0bHkgKmRpZCogc3l6a2FsbGVyIGdldCB0byBgdGJuZXRfY29ubmVjdGVkX3dvcmtgPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgIGFnYWluLCBzcGVjaWZpY2FsbHkgbG9va2luZyB0byBzZWUgaWYgdGhpcyBpcyBhIEtVbml0IHRlc3QgdHJpZ2dlci4KCldhaXQsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgaXMgdGhlIFRodW5kZXJib2x0ICpuZXR3b3JraW5nKiBkcml2ZXIuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2U7IG5ldHdvcmtpbmcgd291bGQgYmUgYSBwcmltZSB0YXJnZXQgZm9yIHN5emthbGxlci4gSWYgc3l6a2FsbGVyIGZ1enplZCBpdCwgaXQgKm11c3QqIGJlIHJlYWNoYWJsZS4KCkhvbGQgb24sIGRvZXMgc3l6a2FsbGVyIGhhdmUgYSBwc2V1ZG8tc3lzY2FsbCBmb3IgVGh1bmRlcmJvbHQ/IEkgbmVlZCB0byBjaGVjayB0aGF0LiBObywgSSBqdXN0IGxvb2tlZCwgYW5kIHRoZXJlJiMzOTtzIG5vIGBzeXpfYCBwc2V1ZG8tc3lzY2FsbCBzcGVjaWZpY2FsbHkgZm9yIFRodW5kZXJib2x0LiBUaGF0JiMzOTtzIGEgY3VydmViYWxsLgoKT2theSwgbWF5YmUgc3l6a2FsbGVyIGlzIHJlYWNoaW5nIGl0IHRocm91Z2ggdGhlIGBkdW1teWAgVGh1bmRlcmJvbHQgZHJpdmVyPyBBIGxvdCBvZiBmdXp6aW5nIGZyYW1ld29ya3Mgd2lsbCB1c2UgZHVtbXkgZHJpdmVycyBmb3IgdGVzdGluZy4gSXMgdGhlcmUgZXZlbiBhIGR1bW15IGRyaXZlcj8gTGV0IG1lIGNoZWNrIGBkcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuY2AgYWdhaW4uIEkgbmVlZCB0byBzZWUgaWYgaXQgcmVnaXN0ZXJzIGEgZHVtbXkgdGh1bmRlcmJvbHQgY29udHJvbGxlci4gVGhpcyBtaWdodCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkdW1teSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGh1bmRlcmJvbHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM9MTg9c3RhdGljIGludCB0Yl9wb3J0X2VuYWJsZV90bXUoc3RydWN0IHRiX3BvcnQgKnBvcnQsIGJvb2wgZW5hYmxlKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNDYtXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jOjQ3OnN0YXRpYyB2b2lkIHRiX3BvcnRfZHVtbXlfcmVhZChzdHJ1Y3QgdGJfcG9ydCAqcG9ydClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNDgte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNTEtXHQgKiBjb25maWcgc3BhY2UgdGhlIHJlYWQgZGF0YSBpcyBub3QgY2xlYXJlZCBvbiBMUi4gVG8gYXZvaWRcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM6NTI6XHQgKiByZWFkaW5nIHN0YWxlIGRhdGEgb24gbmV4dCByZWFkIHBlcmZvcm0gb25lIGR1bW15IHJlYWQgYWZ0ZXJcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNTMtXHQgKiBwb3J0IGNhcGFiaWxpdGllcyBhcmUgd2Fsa2VkLlxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNTUtXHRpZiAodGJfc3dpdGNoX2lzX2xpZ2h0X3JpZGdlKHBvcnQtXHUwMDNlc3cpKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jOjU2Olx0XHR1MzIgZHVtbXk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTU3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYzo1ODpcdFx0dGJfcG9ydF9yZWFkKHBvcnQsIFx1MDAyNmR1bW15LCBUQl9DRkdfUE9SVCwgMCwgMSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTU5LVx0fVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM9MTI0PWludCB0Yl9wb3J0X2ZpbmRfY2FwKHN0cnVjdCB0Yl9wb3J0ICpwb3J0LCBlbnVtIHRiX3BvcnRfY2FwIGNhcClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTEzMy1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM6MTM0Olx0dGJfcG9ydF9kdW1teV9yZWFkKHBvcnQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYy0xMzUtXHR0Yl9wb3J0X2VuYWJsZV90bXUocG9ydCwgZmFsc2UpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM9MTE3Mz1pbnQgdGJfY2ZnX2dldF91cHN0cmVhbV9wb3J0KHN0cnVjdCB0Yl9jdGwgKmN0bCwgdTY0IHJvdXRlKVxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuYy0xMTc0LXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM6MTE3NTpcdHUzMiBkdW1teTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM6MTE3NjpcdHN0cnVjdCB0Yl9jZmdfcmVzdWx0IHJlcyA9IHRiX2NmZ19yZWFkX3JhdyhjdGwsIFx1MDAyNmR1bW15LCByb3V0ZSwgMCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmMtMTE3Ny1cdFx0XHRcdFx0XHQgICBUQl9DRkdfU1dJVENILCAwLCAxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RibmV0X2Nvbm5lY3RfZmFpbGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz01ODk9c3RhdGljIGludCB0Ym5ldF9hbGxvY190eF9idWZmZXJzKHN0cnVjdCB0Ym5ldCAqbmV0KVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02MjgtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NjI5OnN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTYzMC17XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTY0Mz1zdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY2NS1cdFx0XHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVx1MDAzZXhkLCByZXQpO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY2NjpcdFx0dGJuZXRfY29ubmVjdF9mYWlsZWQobmV0KTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NjctXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzEwLVx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cdTAwM2V4ZCwgbmV0LVx1MDAzZXJlbW90ZV90cmFuc21pdF9wYXRoKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo3MTE6XHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTcxMi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGJuZXRfY29ubmVjdGVkX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90aHVuZGVyYm9sdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTM2OT1zdGF0aWMgdm9pZCB0Ym5ldF90ZWFyX2Rvd24oc3RydWN0IHRibmV0ICpuZXQsIGJvb2wgc2VuZF9sb2dvdXQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTM4OS1cdFx0LyogVGVhciB0aGUgcGF0aHMgZG93biBiZWZvcmUgc3RvcHBpbmcgdGhlIHJpbmdzLiAgVGhpcyBtaXJyb3JzXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MzkwOlx0XHQgKiB0Ym5ldF9jb25uZWN0ZWRfd29yaygpLCB3aGljaCBlbmFibGVzIHRoZSBwYXRocyBsYXN0IHNvIHRoZVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTM5MS1cdFx0ICogUnggcmluZyBpcyBwcmltZWQgYmVmb3JlIHBhY2tldHMgY2FuIGFycml2ZS4gIFN0b3BwaW5nIGFcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NjI5PXN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NDItXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NjQzOnN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NDQte1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xMzcxPXN0YXRpYyBpbnQgdGJuZXRfcHJvYmUoc3RydWN0IHRiX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHRiX3NlcnZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg1LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bmV0LVx1MDAzZWxvZ2luX3dvcmssIHRibmV0X2xvZ2luX3dvcmspO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjEzODY6XHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZWNvbm5lY3RlZF93b3JrLCB0Ym5ldF9jb25uZWN0ZWRfd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM4Ny1cdElOSVRfV09SSyhcdTAwMjZuZXQtXHUwMDNlZGlzY29ubmVjdF93b3JrLCB0Ym5ldF9kaXNjb25uZWN0X3dvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUzNwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCNF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Ym5ldF9jb25uZWN0ZWRfd29yayYjMzQ7LAogICAgJiMzNDt0Ym5ldF9jb25uZWN0X2ZhaWxlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGluIGBkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNgIHRvIGFkZCBhIG5ldyBmdW5jdGlvbiBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIHdoaWNoIHJlc2V0cyBgbmV0LVx1MDAzZWxvZ2luX3NlbnQgPSBmYWxzZWAgd2hlbiBjb25uZWN0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaWYgVVNCNF9ORVQgaXMgZW5hYmxlZCBhbmQgdGh1bmRlcmJvbHQgbmV0d29ya2luZyBpcyB1c2VkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGFuZCBgdGJuZXRfY29ubmVjdF9mYWlsZWRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0I0X05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RibmV0X2Nvbm5lY3RlZF93b3JrJiMzNDssCiAgICAmIzM0O3RibmV0X2Nvbm5lY3RfZmFpbGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlYCB3aGVuIGNvbm5lY3Rpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGh1bmRlcmJvbHQgbmV0d29yayBkcml2ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBVU0I0X05FVCBpcyBlbmFibGVkIGFuZCB0aHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIHVzZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgYW5kIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzdGF0ZSBtYWNoaW5lIGlzc3VlIGluIHRoZSBUaHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlciBieSBjbGVhcmluZyB0aGUgYGxvZ2luX3NlbnRgIGZsYWcgd2hlbiB0aGUgY29ubmVjdGlvbiBzZXR1cCBmYWlscywgcHJldmVudGluZyBgdGJuZXRfdGVhcl9kb3duKClgIGZyb20gaW5jb3JyZWN0bHkgdW53aW5kaW5nIGFscmVhZHkgcmVsZWFzZWQgcmVzb3VyY2VzLiBJdCBhbHNvIGFkZHMgYSBtaXNzaW5nIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGlmIGl0cyBhbGxvY2F0aW9uIHJldHVybnMgYW4gdW5leHBlY3RlZCB2YWxpZCBJRC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIGludmFsaWQgc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjYwNzQ0OWRkMjUyOTBjNDFmMTUzMmQyNTU3YWY2Njc4YTZkNTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDI6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMKaW5kZXggOTg4OTM3MzJiYzZlNC4uYjZhZWMyMTVhOGU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYwpAQCAtNjI2LDYgJiM0Mzs2MjYsMjAgQEAgc3RhdGljIGludCB0Ym5ldF9hbGxvY190eF9idWZmZXJzKHN0cnVjdCB0Ym5ldCAqbmV0KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNYXJrIHRoZSBjb25uZWN0aW9uIGFzIG5vIGxvbmdlciBlc3RhYmxpc2hlZCBzbyB0aGF0CiYjNDM7CSAqIHRibmV0X3RlYXJfZG93bigpIGRvZXMgbm90IHJ1biBvdmVyIHRoZSB1bndpbmQgd2UganVzdCBkaWQuCiYjNDM7CSAqIE9ubHkgbG9naW5fc2VudCBpcyBjbGVhcmVkOiBsb2dpbl9yZWNlaXZlZCByZWNvcmRzIHRoYXQgdGhlIHBlZXIKJiM0MzsJICogaGFzIGxvZ2dlZCBpbiB3aXRoIHVzIGFuZCBjYXJyaWVzIHRoZSB0cmFuc21pdCBwYXRoIGl0IGdhdmUgdXMsCiYjNDM7CSAqIGFuZCBub3RoaW5nIG9uIHRoaXMgc2lkZSBjYW4gbWFrZSB0aGUgcGVlciBzZW5kIHRoYXQgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmV0LSZndDtjb25uZWN0aW9uX2xvY2spOwomIzQzOwluZXQtJmd0O2xvZ2luX3NlbnQgPSBmYWxzZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmV0LSZndDtjb25uZWN0aW9uX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTsKQEAgLTY0Nyw2ICYjNDM7NjYxLDkgQEAgc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXJldCA9IHRiX3hkb21haW5fYWxsb2NfaW5faG9waWQobmV0LSZndDt4ZCwgbmV0LSZndDtyZW1vdGVfdHJhbnNtaXRfcGF0aCk7CiAJaWYgKHJldCAhPSBuZXQtJmd0O3JlbW90ZV90cmFuc21pdF9wYXRoKSB7CiAJCW5ldGRldl9lcnIobmV0LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIFJ4IEhvcElEXG4mIzM0Oyk7CiYjNDM7CQlpZiAocmV0ICZndDs9IDApCiYjNDM7CQkJdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC0mZ3Q7eGQsIHJldCk7CiYjNDM7CQl0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpOwogCQlyZXR1cm47CiAJfQogCkBAIC02OTEsNiAmIzQzOzcwOCw3IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAl0Yl9yaW5nX3N0b3AobmV0LSZndDtyeF9yaW5nLnJpbmcpOwogCXRiX3Jpbmdfc3RvcChuZXQtJmd0O3R4X3JpbmcucmluZyk7CiAJdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC0mZ3Q7eGQsIG5ldC0mZ3Q7cmVtb3RlX3RyYW5zbWl0X3BhdGgpOwomIzQzOwl0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpOwogfQogCiBzdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODcKCQkJCQkJCW91dHB1dDogMTU4CgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRodW5kZXJib2x0IE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29ubmVjdGlvbiBzZXR1cCBhbmQgdGVhcmRvd24gd2l0aGluIHRoZSBUaHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGJ1ZyBmaXguCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhIG5ldyBmdW5jdGlvbiwgYHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KWAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IHNldHMgYG5ldC0mZ3Q7bG9naW5fc2VudCA9IGZhbHNlYCB1bmRlciBhIG11dGV4LiBUaGUgcHVycG9zZSBpcyBjcnVjaWFsLiBJdCYjMzk7cyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IHN0YXRlIHRyYW5zaXRpb24gd2hlcmUgYHRibmV0X3RlYXJfZG93bigpYCBtaWdodCBleGVjdXRlIHByZW1hdHVyZWx5LCBwb3RlbnRpYWxseSB1bndpbmRpbmcgcmVzb3VyY2VzIHRoYXQgYXJlIGFscmVhZHkgY2xlYW5lZCB1cCBvciBpbiBhbiBpbnZhbGlkIHN0YXRlLiBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGF0IHdlIG9ubHkgY2xlYXIgYGxvZ2luX3NlbnRgIGJlY2F1c2UgYGxvZ2luX3JlY2VpdmVkYCBkZWFscyB3aXRoIGFuIGVzdGFibGlzaGVkIHN0YXRlIGZyb20gdGhlIHBlZXIsIHdoaWNoIGlzIGltbXV0YWJsZSBmcm9tIG91ciBzaWRlLgoKVGhpcyBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYHRiX3hkb21haW5fYWxsb2NfaW5faG9waWRgIGZhaWxzIG9yIG90aGVyIGNvbm5lY3Rpb24gc2V0dXAgaXNzdWVzIGFyaXNlIHdpdGhpbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgY2hlY2sgYW5kIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGluIHRoZSBmYWlsdXJlIHBhdGggb2YgYHRiX3hkb21haW5fYWxsb2NfaW5faG9waWRgIHRvIGF2b2lkIGFueSByZXNvdXJjZSBsZWFrcyBpbiB0aG9zZSBjYXNlcy4KCk15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSByZXNvdXJjZSBsZWFrIG9yIGEgY2xhc3NpYyBzdGF0ZSBtYWNoaW5lIGJ1ZyDigJMgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBzb21lIGtpbmQgb2YgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9uLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaW1tZWRpYXRlbHkgdGhhdCBzY3JlYW1zICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4mIzM0OyBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggdGhvdWdoLCBzbyBJJiMzOTtsbCByZXZpZXcgYWdhaW46IFRoZSBjb2RlIGp1c3Qgc2V0cyBhIGJvb2xlYW4gZmxhZyBhbmQgY2FsbHMgYHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZGAgd2hpY2ggYXJlIHZlcnkgc3RhbmRhcmQgb3BlcmF0aW9ucyBpbiB0aGVzZSBjb250ZXh0cy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBLQVNBTi9MT0NLREVQL2V0Yy4gd291bGQgYmUgd2VsbC1zdWl0ZWQgdG8gY2F0Y2ggYW55IGVycm9ycyBoZXJlLiBLTVNBTiBpcyBncmVhdCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGFwcGVhciB0byBpbnRyb2R1Y2UgYW55IG5ldyBhcmVhcyBmb3IgS01TQU4gdG8gYmUgY29uY2VybmVkIHdpdGguCgpUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhIGZvY3VzZWQgc3RhdGUgbWFjaGluZSBjb3JyZWN0aW9uLCBwcmV2ZW50aW5nIHBvdGVudGlhbCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlcyB0aHJvdWdoIGNsZWFyaW5nIG9mIGEgYm9vbGVhbiBmbGFnIG9uIGNvbm5lY3Rpb24gZmFpbHVyZSwgYXMgd2VsbCBhcyBmaXhpbmcgdGhlIHJlbGVhc2Ugb2YgcmVzb3VyY2VzIG9uIEhvcElEIGFsbG9jYXRpb24gZmFpbHVyZS4gSXQgYWRkcmVzc2VzIHJlc291cmNlIGxlYWtzIG9yIGluY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucy4gSXQgZG9lcyAqbm90KiBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zIG9yIGRhdGEgY29waWVzIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBtZWFucyB0aGF0IHRoaXMgZml4IGRvZXNuJiMzOTt0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIHBhdGNoJiMzOTtzIGNvcnJlY3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQyOjEyLjc4NTQ5MTQ4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTg2MjIzMjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0I0X05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRibmV0X2Nvbm5lY3RlZF93b3JrXCIsXG4gICAgXCJ0Ym5ldF9jb25uZWN0X2ZhaWxlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzdGF0ZSBtYWNoaW5lIGlzc3VlIGluIHRoZSBUaHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlciBieSBjbGVhcmluZyB0aGUgYGxvZ2luX3NlbnRgIGZsYWcgd2hlbiB0aGUgY29ubmVjdGlvbiBzZXR1cCBmYWlscywgcHJldmVudGluZyBgdGJuZXRfdGVhcl9kb3duKClgIGZyb20gaW5jb3JyZWN0bHkgdW53aW5kaW5nIGFscmVhZHkgcmVsZWFzZWQgcmVzb3VyY2VzLiBJdCBhbHNvIGFkZHMgYSBtaXNzaW5nIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGlmIGl0cyBhbGxvY2F0aW9uIHJldHVybnMgYW4gdW5leHBlY3RlZCB2YWxpZCBJRC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIGludmFsaWQgc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXFx1MDAzZWxvZ2luX3NlbnQgPSBmYWxzZWAgd2hlbiBjb25uZWN0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaWYgVVNCNF9ORVQgaXMgZW5hYmxlZCBhbmQgdGh1bmRlcmJvbHQgbmV0d29ya2luZyBpcyB1c2VkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGFuZCBgdGJuZXRfY29ubmVjdF9mYWlsZWRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0MjoxMi43ODU0OTg4NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzQyNTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyNjA3NDQ5ZGQyNTI5MGM0MWYxNTMyZDI1NTdhZjY2NzhhNmQ1NjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDI6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jIGIvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXFxuaW5kZXggOTg4OTM3MzJiYzZlNC4uYjZhZWMyMTVhOGU5MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNcXG5AQCAtNjI2LDYgKzYyNiwyMCBAQCBzdGF0aWMgaW50IHRibmV0X2FsbG9jX3R4X2J1ZmZlcnMoc3RydWN0IHRibmV0ICpuZXQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0X2ZhaWxlZChzdHJ1Y3QgdGJuZXQgKm5ldClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNYXJrIHRoZSBjb25uZWN0aW9uIGFzIG5vIGxvbmdlciBlc3RhYmxpc2hlZCBzbyB0aGF0XFxuK1xcdCAqIHRibmV0X3RlYXJfZG93bigpIGRvZXMgbm90IHJ1biBvdmVyIHRoZSB1bndpbmQgd2UganVzdCBkaWQuXFxuK1xcdCAqIE9ubHkgbG9naW5fc2VudCBpcyBjbGVhcmVkOiBsb2dpbl9yZWNlaXZlZCByZWNvcmRzIHRoYXQgdGhlIHBlZXJcXG4rXFx0ICogaGFzIGxvZ2dlZCBpbiB3aXRoIHVzIGFuZCBjYXJyaWVzIHRoZSB0cmFuc21pdCBwYXRoIGl0IGdhdmUgdXMsXFxuK1xcdCAqIGFuZCBub3RoaW5nIG9uIHRoaXMgc2lkZSBjYW4gbWFrZSB0aGUgcGVlciBzZW5kIHRoYXQgYWdhaW4uXFxuK1xcdCAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWNvbm5lY3Rpb25fbG9jayk7XFxuK1xcdG5ldC1cXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlY29ubmVjdGlvbl9sb2NrKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCB0Ym5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqbmV0KSwgY29ubmVjdGVkX3dvcmspO1xcbkBAIC02NDcsNiArNjYxLDkgQEAgc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRyZXQgPSB0Yl94ZG9tYWluX2FsbG9jX2luX2hvcGlkKG5ldC1cXHUwMDNleGQsIG5ldC1cXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xcbiBcXHRpZiAocmV0ICE9IG5ldC1cXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpIHtcXG4gXFx0XFx0bmV0ZGV2X2VycihuZXQtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBSeCBIb3BJRFxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cXHUwMDNleGQsIHJldCk7XFxuK1xcdFxcdHRibmV0X2Nvbm5lY3RfZmFpbGVkKG5ldCk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNjkxLDYgKzcwOCw3IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dGJfcmluZ19zdG9wKG5ldC1cXHUwMDNlcnhfcmluZy5yaW5nKTtcXG4gXFx0dGJfcmluZ19zdG9wKG5ldC1cXHUwMDNldHhfcmluZy5yaW5nKTtcXG4gXFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cXHUwMDNleGQsIG5ldC1cXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xcbitcXHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDI6MTMuMjU5NjE1MjQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzE1MTUwMTE1MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQjRfTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGJuZXRfY29ubmVjdGVkX3dvcmtcIixcbiAgICBcInRibmV0X2Nvbm5lY3RfZmFpbGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRibmV0X2Nvbm5lY3RlZF93b3JrYCBpbiBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYCB0byBhZGQgYSBuZXcgZnVuY3Rpb24gYHRibmV0X2Nvbm5lY3RfZmFpbGVkYCB3aGljaCByZXNldHMgYG5ldC1cXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlYCB3aGVuIGNvbm5lY3Rpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGh1bmRlcmJvbHQgbmV0d29yayBkcml2ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBVU0I0X05FVCBpcyBlbmFibGVkIGFuZCB0aHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIHVzZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgYW5kIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYyNjA3NDQ5ZGQyNTI5MGM0MWYxNTMyZDI1NTdhZjY2NzhhNmQ1NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0MjoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYyBiL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY1xuaW5kZXggOTg4OTM3MzJiYzZlNC4uYjZhZWMyMTVhOGU5MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG5AQCAtNjI2LDYgKzYyNiwyMCBAQCBzdGF0aWMgaW50IHRibmV0X2FsbG9jX3R4X2J1ZmZlcnMoc3RydWN0IHRibmV0ICpuZXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXG4re1xuK1x0LypcbitcdCAqIE1hcmsgdGhlIGNvbm5lY3Rpb24gYXMgbm8gbG9uZ2VyIGVzdGFibGlzaGVkIHNvIHRoYXRcbitcdCAqIHRibmV0X3RlYXJfZG93bigpIGRvZXMgbm90IHJ1biBvdmVyIHRoZSB1bndpbmQgd2UganVzdCBkaWQuXG4rXHQgKiBPbmx5IGxvZ2luX3NlbnQgaXMgY2xlYXJlZDogbG9naW5fcmVjZWl2ZWQgcmVjb3JkcyB0aGF0IHRoZSBwZWVyXG4rXHQgKiBoYXMgbG9nZ2VkIGluIHdpdGggdXMgYW5kIGNhcnJpZXMgdGhlIHRyYW5zbWl0IHBhdGggaXQgZ2F2ZSB1cyxcbitcdCAqIGFuZCBub3RoaW5nIG9uIHRoaXMgc2lkZSBjYW4gbWFrZSB0aGUgcGVlciBzZW5kIHRoYXQgYWdhaW4uXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2bmV0LVx1MDAzZWNvbm5lY3Rpb25fbG9jayk7XG4rXHRuZXQtXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2Vjb25uZWN0aW9uX2xvY2spO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHRibmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpuZXQpLCBjb25uZWN0ZWRfd29yayk7XG5AQCAtNjQ3LDYgKzY2MSw5IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJldCA9IHRiX3hkb21haW5fYWxsb2NfaW5faG9waWQobmV0LVx1MDAzZXhkLCBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xuIFx0aWYgKHJldCAhPSBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpIHtcbiBcdFx0bmV0ZGV2X2VycihuZXQtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBhbGxvY2F0ZSBSeCBIb3BJRFxcblwiKTtcbitcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cdTAwM2V4ZCwgcmV0KTtcbitcdFx0dGJuZXRfY29ubmVjdF9mYWlsZWQobmV0KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTY5MSw2ICs3MDgsNyBAQCBzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0Yl9yaW5nX3N0b3AobmV0LVx1MDAzZXJ4X3JpbmcucmluZyk7XG4gXHR0Yl9yaW5nX3N0b3AobmV0LVx1MDAzZXR4X3JpbmcucmluZyk7XG4gXHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVx1MDAzZXhkLCBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xuK1x0dGJuZXRfY29ubmVjdF9mYWlsZWQobmV0KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGJuZXRfbG9naW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0MjoxMy4yNTk2MTY1NTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU0NjQ2NDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUaHVuZGVyYm9sdCBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBhIG5ldyBmdW5jdGlvbiBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIGFuZCBhcmUgY2FsbGluZyBpdCBmcm9tIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AuIFRoZXkndmUgYWxzbyBhZGRlZCB0aGlzIGNvbmRpdGlvbmFsIGBpZiAocmV0IFx1MDAzZT0gMCkgdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cdTAwM2V4ZCwgcmV0KTtgIGJlZm9yZSBjYWxsaW5nIHRoYXQgZmFpbHVyZSBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHRibmV0X2Nvbm5lY3RlZF93b3JrYCBpcyBhbGwgYWJvdXQgYW5kIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eSB3aXRoaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmtpbmcgY29udGV4dC5cblxuVGh1bmRlcmJvbHQgbmV0d29ya2luZywgcmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IGhhcmR3YXJlLXNwZWNpZmljLiBJJ20gdGhpbmtpbmcsIGNvdWxkIHdlIHBvdGVudGlhbGx5IGVtdWxhdGUgdGhpcywgb3IgZXZlbiBmdXp6IGl0PyBIYW5nIG9uLCB0aG91Z2guIFRodW5kZXJib2x0IG5ldHdvcmtpbmcgKnJlcXVpcmVzKiBUaHVuZGVyYm9sdCBoYXJkd2FyZS4gVGhhdCdzIGEgc3RpY2tpbmcgcG9pbnQuIFN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBUaHVuZGVyYm9sdCBjb250cm9sbGVyLCBkb2VzIGl0PyBOZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgUUVNVSBoYXMgKmFueSogVGh1bmRlcmJvbHQgZW11bGF0aW9uIGF0IGFsbCwgb3IgaWYgdGhpcyBpcyBwdXJlbHkgaGFyZHdhcmUtZGVwZW5kZW50LlxuXG5SaWdodCwgYmFjayB0byB0aGUgZHJpdmVyIC0gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AuIE9rYXksIHNvLCBpcyB0aGlzIGV2ZW4gd29ydGggZ29pbmcgYWZ0ZXIgd2l0aCBmdXp6aW5nPyBCZWNhdXNlIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBlbXVsYXRlZCwgaXQncyBhIG5vbi1zdGFydGVyLiBBbHJpZ2h0LCBRRU1VIGNvbmZpcm1lZCwgaXQgZG9lc24ndCBlbXVsYXRlIFRodW5kZXJib2x0IGNvbnRyb2xsZXJzLiBTbyB0aGF0J3Mgb3V0LlxuXG5XYWl0IGEgc2Vjb25kLCBva2F5LCBUaHVuZGVyYm9sdCAqaXMqIFBDSWUtYmFzZWQsIGJ1dCBUaHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIGEgKnNvZnR3YXJlKiBwcm90b2NvbCBsYXllcmVkIG9uIHRvcCBvZiBUaHVuZGVyYm9sdCBYRG9tYWluIGNvbm5lY3Rpb25zLiBIbW0sIHRoYXQncyBhIGRpZmZlcmVudCBhbmdsZS4gQ2FuIHN5emthbGxlciBmdXp6IFRodW5kZXJib2x0IFhEb21haW4/IFRoYXQncyBhIHBvc3NpYmlsaXR5LiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUncyBhbnkgZXhpc3Rpbmcgc3l6a2FsbGVyIHN1cHBvcnQgZm9yIFRodW5kZXJib2x0LCBzcGVjaWZpY2FsbHkgdGhlIFhEb21haW4gaW50ZXJmYWNlLiBOZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBleGlzdGluZyBncm91bmR3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDM6MDIuODA2MDgzMzY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTk2MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRodW5kZXJib2x0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RodW5kZXJib2x0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnPTI9Y29uZmlnIFVTQjRfTkVUXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnLTExLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZzoxMjpcXHQgIGNhbGxlZCB0aHVuZGVyYm9sdF9uZXQuXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19VU0I0X05FVCkgOj0gdGh1bmRlcmJvbHRfbmV0Lm9cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9NYWtlZmlsZTozOnRodW5kZXJib2x0X25ldC1vYmpzIDo9IG1haW4ubyB0cmFjZS5vXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvTWFrZWZpbGUtNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RodW5kZXJib2x0LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91dWlkLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDMtI2RlZmluZSBUQk5FVF9NQVhfUEFZTE9BRF9TSVpFXFx0XFxcXFxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0NDpcXHQoVEJORVRfRlJBTUVfU0laRSAtIHNpemVvZihzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyKSlcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDUtLyogUnggcGFja2V0cyBuZWVkIHRvIGhvbGQgc3BhY2UgZm9yIHNrYl9zaGFyZWRfaW5mbyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTUzLS8qKlxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo1NDogKiBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyIC0gSGVhZGVyIGZvciBlYWNoIFRodW5kZXJib2x0IGZyYW1lXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTU1LSAqIEBmcmFtZV9zaXplOiBzaXplIG9mIHRoZSBkYXRhIHdpdGggdGhlIGZyYW1lXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjMtICovXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY0OnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIge1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NS1cXHRfX2xlMzIgZnJhbWVfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03MC1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NzE6ZW51bSB0aHVuZGVyYm9sdF9pcF9mcmFtZV9wZGYge1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03Mi1cXHRUQklQX1BERl9GUkFNRV9TVEFSVCA9IDEsXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzUtXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc2OmVudW0gdGh1bmRlcmJvbHRfaXBfdHlwZSB7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTc3LVxcdFRCSVBfTE9HSU4sXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtODItXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjgzOnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIge1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy04NC1cXHR1MzIgcm91dGVfaGk7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtOTctXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjk4OnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9sb2dpbiB7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjk5OlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgaGRyO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMDAtXFx0dTMyIHByb3RvX3ZlcnNpb247XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTA2LVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMDc6c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luX3Jlc3BvbnNlIHtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTA4OlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgaGRyO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMDktXFx0dTMyIHN0YXR1cztcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTQtXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjExNTpzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfbG9nb3V0IHtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTE2OlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgaGRyO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTctfTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTE4LVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMTk6c3RydWN0IHRodW5kZXJib2x0X2lwX3N0YXR1cyB7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjEyMDpcXHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfaGVhZGVyIGhkcjtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTIxLVxcdHUzMiBzdGF0dXM7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTgyPXN0cnVjdCB0Ym5ldCB7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTk5LVxcdHN0cnVjdCB3b3JrX3N0cnVjdCBkaXNjb25uZWN0X3dvcms7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjIwMDpcXHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyIHJ4X2hkcjtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjAxLVxcdHN0cnVjdCB0Ym5ldF9yaW5nIHJ4X3Jpbmc7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MjIwPU1PRFVMRV9QQVJNX0RFU0MoZTJlLCBcXFwiVVNCNE5FVCBmdWxsIGVuZC10by1lbmQgZmxvdyBjb250cm9sIChkZWZhdWx0OiB0cnVlKVxcXCIpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yMjEtXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjIyMjpzdGF0aWMgdm9pZCB0Ym5ldF9maWxsX2hlYWRlcihzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfaGVhZGVyICpoZHIsIHU2NCByb3V0ZSxcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjIzLVxcdHU4IHNlcXVlbmNlLCBjb25zdCB1dWlkX3QgKmluaXRpYXRvcl91dWlkLCBjb25zdCB1dWlkX3QgKnRhcmdldF91dWlkLFxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyMjQ6XFx0ZW51bSB0aHVuZGVyYm9sdF9pcF90eXBlIHR5cGUsIHNpemVfdCBzaXplLCB1MzIgY29tbWFuZF9pZClcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0yNDI9c3RhdGljIGludCB0Ym5ldF9sb2dpbl9yZXNwb25zZShzdHJ1Y3QgdGJuZXQgKm5ldCwgdTY0IHJvdXRlLCB1OCBzZXF1ZW5jZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yNDQte1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyNDU6XFx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luX3Jlc3BvbnNlIHJlcGx5O1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yNDYtXFx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gbmV0LVxcdTAwM2V4ZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0yNTk9c3RhdGljIGludCB0Ym5ldF9sb2dpbl9yZXF1ZXN0KHN0cnVjdCB0Ym5ldCAqbmV0LCB1OCBzZXF1ZW5jZSlcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjYwLXtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjYxOlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9sb2dpbl9yZXNwb25zZSByZXBseTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjYyOlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9sb2dpbiByZXF1ZXN0O1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yNjMtXFx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gbmV0LVxcdTAwM2V4ZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0yNzk9c3RhdGljIGludCB0Ym5ldF9sb2dvdXRfcmVzcG9uc2Uoc3RydWN0IHRibmV0ICpuZXQsIHU2NCByb3V0ZSwgdTggc2VxdWVuY2UsXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjgxLXtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjgyOlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9zdGF0dXMgcmVwbHk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI4My1cXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQgPSBuZXQtXFx1MDAzZXhkO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTI5Mz1zdGF0aWMgaW50IHRibmV0X2xvZ291dF9yZXF1ZXN0KHN0cnVjdCB0Ym5ldCAqbmV0KVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yOTQte1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyOTU6XFx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ291dCByZXF1ZXN0O1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyOTY6XFx0c3RydWN0IHRodW5kZXJib2x0X2lwX3N0YXR1cyByZXBseTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjk3LVxcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZCA9IG5ldC1cXHUwMDNleGQ7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NDI1PXN0YXRpYyBpbnQgdGJuZXRfaGFuZGxlX3BhY2tldChjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy00MjYte1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0Mjc6XFx0Y29uc3Qgc3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luICpwa2cgPSBidWY7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQyOC1cXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDM0LVxcdC8qIE1ha2Ugc3VyZSB0aGUgcGFja2V0IGlzIGZvciB1cyAqL1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0MzU6XFx0aWYgKHNpemUgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHRodW5kZXJib2x0X2lwX2hlYWRlcikpXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQzNi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz03NTY9c3RhdGljIGJvb2wgdGJuZXRfY2hlY2tfZnJhbWUoc3RydWN0IHRibmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB0Ym5ldF9mcmFtZSAqdGYsXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc1NzpcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyICpoZHIpXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTc1OC17XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9ODMxPXN0YXRpYyBpbnQgdGJuZXRfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtODM4LVxcdHdoaWxlIChyeF9wYWNrZXRzIFxcdTAwM2MgYnVkZ2V0KSB7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjgzOTpcXHRcXHRjb25zdCBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyICpoZHI7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTg0MC1cXHRcXHR1bnNpZ25lZCBpbnQgaGRyX3NpemUgPSBzaXplb2YoKmhkcik7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTAyMT1zdGF0aWMgYm9vbCB0Ym5ldF94bWl0X2NzdW1fYW5kX21hcChzdHJ1Y3QgdGJuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMDIzLXtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTAyNDpcXHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyICpoZHIgPSBwYWdlX2FkZHJlc3MoZnJhbWVzWzBdLVxcdTAwM2VwYWdlKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTAyNS1cXHRzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gdGJfcmluZ19kbWFfZGV2aWNlKG5ldC1cXHUwMDNldHhfcmluZy5yaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xMTM2PXN0YXRpYyBuZXRkZXZfdHhfdCB0Ym5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTE0MS1cXHR1MTYgZnJhbWVfaWQgPSBhdG9taWNfcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VmcmFtZV9pZCk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjExNDI6XFx0c3RydWN0IHRodW5kZXJib2x0X2lwX2ZyYW1lX2hlYWRlciAqaGRyO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTQzLVxcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfaGVhZGxlbihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM5Ni1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM5NzpcXHRzdHJjcHkoZGV2LVxcdTAwM2VuYW1lLCBcXFwidGh1bmRlcmJvbHQlZFxcXCIpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzk4LVxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ0Ym5ldF9uZXRkZXZfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE0MTYtXFx0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfCBORVRJRl9GX0hJR0hETUE7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjE0MTc6XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKz0gc2l6ZW9mKHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xNDE4LVxcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTE0OTU9c3RhdGljIHN0cnVjdCB0Yl9zZXJ2aWNlX2RyaXZlciB0Ym5ldF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTQ5Ny1cXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTQ5ODpcXHRcXHQubmFtZSA9IFxcXCJ0aHVuZGVyYm9sdC1uZXRcXFwiLFxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xNDk5LVxcdFxcdC5wbSA9IHBtX3NsZWVwX3B0cihcXHUwMDI2dGJuZXRfcG1fb3BzKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L3RyYWNlLmgtOS0jdW5kZWYgVFJBQ0VfU1lTVEVNXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvdHJhY2UuaDoxMDojZGVmaW5lIFRSQUNFX1NZU1RFTSB0aHVuZGVyYm9sdF9uZXRcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC90cmFjZS5oLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0MzowMi44NDkwODI5MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ0NzM5NTkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVGh1bmRlcmJvbHQgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AuIEl0J3MgYWRkaW5nIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgYW5kIGNhbGxpbmcgaXQgZnJvbSBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLiBUaGUgaWRlYSBpcyB0byByZXNldCBgbmV0LVx1MDAzZWxvZ2luX3NlbnRgIG9uIGNvbm5lY3Rpb24gZmFpbHVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gYXZvaWQgaXNzdWVzIHdpdGggYHRibmV0X3RlYXJfZG93bigpYC4gQnV0IGhvbGQgb24sIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyAqVGh1bmRlcmJvbHQqIG5ldHdvcmtpbmcgaGFzIG1lIHRoaW5raW5nLiBJcyB0aGlzIGV2ZW4gcmVsZXZhbnQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IFRodW5kZXJib2x0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLCByaWdodD8gUENJZS9VU0I0LCBpc24ndCBpdD9cblxuUUVNVSBkb2Vzbid0IG5hdGl2ZWx5IGVtdWxhdGUgVGh1bmRlcmJvbHQvVVNCNC4gQnV0IHdhaXQsIGRvZXMgaXQgaGF2ZSBzb21lIHNvZnR3YXJlIGVtdWxhdGlvbiBJJ20gbm90IHJlbWVtYmVyaW5nPyBObywgdGhlcmUgaXNuJ3QgYSBgbWFjODAyMTFfaHdzaW1gIGVxdWl2YWxlbnQgZm9yIFRodW5kZXJib2x0LiBPa2F5LCB3aGF0IGFib3V0IHN5emthbGxlcj8gRG9lcyBpdCBldmVuICpyZWFjaCogVGh1bmRlcmJvbHQgY29kZT8gSSB2YWd1ZWx5IHJlbWVtYmVyIHNvbWV0aGluZy4uLiBjb3VsZCBzeXprYWxsZXIgZnV6eiBUaHVuZGVyYm9sdCB2aWEgVVNCIG9yIFBDST8gSXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgIGJ1dCB0aGF0J3MgZm9yIFVTQiBpbiBnZW5lcmFsLiBJcyB0aGVyZSBhIGBzeXpfYCBwc2V1ZG8tc3lzY2FsbCBzcGVjaWZpY2FsbHkgZm9yIFRodW5kZXJib2x0P1xuXG5UaGUgY29udGV4dCBzdWdnZXN0cyB0aGF0IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gbGlrZSBRRU1VIGFyZSBvdXQgb2Ygc2NvcGUuIEJ1dCBUaHVuZGVyYm9sdC4uLml0J3MgUENJZS9VU0I0LiBTbywgaXMgaXQgKmFjdHVhbGx5KiBmdXp6ZWQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgcmVhY2hhYmxlLiBMZXQncyBsb29rIGZvciBgdGh1bmRlcmJvbHRgIGluIHN5emthbGxlcidzIGRlc2NyaXB0aW9ucy4gT3IgZXZlbiBiZXR0ZXIsIGxldCdzIGp1c3Qgc2VlIGlmIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaXMgcmVhY2hhYmxlLiBJdCdzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBzbyBpdCBtdXN0IGJlIHRyaWdnZXJlZCBieSAqc29tZXRoaW5nKi4gTWF5YmUgYFVTQjRfTkVUYCBpcyBmdXp6ZWQgc29tZWhvdz9cblxuSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSB3YXkgdG8gdHJpZ2dlciB0aGlzIFRodW5kZXJib2x0IGNvZGUgaW4gUUVNVS4gQXBwbGUgaGFzIFRodW5kZXJib2x0IGNvbnRyb2xsZXJzIGJ1dCB0aGF0IHN0aWxsIHVzdWFsbHkgcmVxdWlyZXMgc3BlY2lmaWMgUENJZSBoYXJkd2FyZS4gV2FpdCwgc3l6a2FsbGVyJ3MgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgXCJzeXotY2x1c3RlclwiLiBTbywgc3l6a2FsbGVyIGlzICphY3R1YWxseSogZnV6emluZyBpdCBvciAqaGFzKiBmb3VuZCBhIGJ1ZyBoZXJlIGFuZCBpcyB0ZXN0aW5nIGl0ISBNYXliZSBzeXprYWxsZXIgY2FuIHJlYWNoIGl0IGlmIHRoZXJlJ3MgYSBzb2Z0d2FyZSBkcml2ZXIsIG9yIG1heWJlIGl0J3MgZXhwb3NlZCB2aWEgVVNCNCBhbmQgZnV6emVkIHRocm91Z2ggYSBVU0IgZHVtbXkgSENEIG9yIHNpbWlsYXIuIExldCdzIGRpZyBkZWVwZXIuIElzIHRoZXJlIGEgVGh1bmRlcmJvbHQgS1VuaXQgdGVzdCBvciBzb21lIGtpbmQgb2Ygc29mdHdhcmUgcm91dGVyIGZvciB0aGlzIHN0dWZmPyBMZXQncyBjaGVjayB0aGUgYGRyaXZlcnMvdGh1bmRlcmJvbHQvYCBkaXJlY3Rvcnkgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjI3LjMyMzA0NDI1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ2NTE5MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGh1bmRlcmJvbHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnPTI9bWVudWNvbmZpZyBVU0I0XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWctMTYtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmVcXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWc6MTc6XFx0ICBjYWxsZWQgdGh1bmRlcmJvbHQuXFxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTE4LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnPTU0PWNvbmZpZyBVU0I0X0RNQV9URVNUXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWctNjQtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmVcXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWc6NjU6XFx0ICBjYWxsZWQgdGh1bmRlcmJvbHRfZG1hX3Rlc3QuXFxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTY2LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZz02Nz1jb25maWcgVVNCNF9TVFJFQU1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZy03NS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZzo3NjpcXHQgIGNhbGxlZCB0aHVuZGVyYm9sdF9zdHJlYW0uXFxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTc3LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZT0yPWNjZmxhZ3MteSA6PSAtSSQoc3JjKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MzpvYmotJHtDT05GSUdfVVNCNH0gOj0gdGh1bmRlcmJvbHQub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6NDp0aHVuZGVyYm9sdC1vYmpzIDo9IG5oaS5vIGN0bC5vIHRiLm8gc3dpdGNoLm8gY2FwLm8gcGNpLm8gcGF0aC5vIHR1bm5lbC5vIGVlcHJvbS5vXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo1OnRodW5kZXJib2x0LW9ianMgKz0gZG9tYWluLm8gZG1hX3BvcnQubyBpY20ubyBwcm9wZXJ0eS5vIHhkb21haW4ubyBsYy5vIHRtdS5vIHVzYjQub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6Njp0aHVuZGVyYm9sdC1vYmpzICs9IHVzYjRfcG9ydC5vIG52bS5vIHJldGltZXIubyBxdWlya3MubyBjbHgub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjg6dGh1bmRlcmJvbHQtJHtDT05GSUdfQUNQSX0gKz0gYWNwaS5vXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo5OnRodW5kZXJib2x0LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBkZWJ1Z2ZzLm9cXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjEwOnRodW5kZXJib2x0LSQoQ09ORklHX1VTQjRfQ09ORklHRlMpICs9IGNvbmZpZ2ZzLm9cXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjExOnRodW5kZXJib2x0LSR7Q09ORklHX1VTQjRfS1VOSVRfVEVTVH0gKz0gdGVzdC5vXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZS0xMi1DRkxBR1NfdGVzdC5vICs9ICQoRElTQUJMRV9TVFJVQ1RMRUFLX1BMVUdJTilcXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTEzLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MTQ6dGh1bmRlcmJvbHRfZG1hX3Rlc3QtJHtDT05GSUdfVVNCNF9ETUFfVEVTVH0gKz0gZG1hX3Rlc3Qub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1VTQjRfRE1BX1RFU1QpICs9IHRodW5kZXJib2x0X2RtYV90ZXN0Lm9cXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTE2LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MTc6dGh1bmRlcmJvbHRfc3RyZWFtLSR7Q09ORklHX1VTQjRfU1RSRUFNfSArPSBzdHJlYW0ub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1VTQjRfU1RSRUFNKSArPSB0aHVuZGVyYm9sdF9zdHJlYW0ub1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9hY3BpLmM9MzUzPXN0YXRpYyBzdHJ1Y3QgYWNwaV9idXNfdHlwZSB0Yl9hY3BpX2J1cyA9IHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYzozNTQ6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRcXFwiLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTM1NS1cXHQubWF0Y2ggPSB0Yl9hY3BpX2J1c19tYXRjaCxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYz0xOD1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSB0Yl9jb25maWdmcyA9IHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0yMC1cXHRcXHQuY2dfaXRlbSA9IHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM6MjE6XFx0XFx0XFx0LmNpX25hbWVidWYgPSBcXFwidGh1bmRlcmJvbHRcXFwiLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0yMi1cXHRcXHRcXHQuY2lfdHlwZSA9IFxcdTAwMjZ0Yl9yb290X2dyb3VwX3R5cGUsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jPTY1Mz1zdHJ1Y3QgdGJfY3RsICp0Yl9jdGxfYWxsb2Moc3RydWN0IHRiX25oaSAqbmhpLCBpbnQgaW5kZXgsIGludCB0aW1lb3V0X21zZWMsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jLTY2OC1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3RsLVxcdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jOjY2OTpcXHRjdGwtXFx1MDAzZWZyYW1lX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoXFxcInRodW5kZXJib2x0X2N0bFxcXCIsIG5oaS1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmMtNjcwLVxcdFxcdFxcdFxcdFxcdCAgVEJfRlJBTUVfU0laRSwgNCwgMCk7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rcmVmLmhcXHUwMDNlXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuaDoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5oLTE0LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM9MjU1NT12b2lkIHRiX2RlYnVnZnNfaW5pdCh2b2lkKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTI1NTYte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjI1NTc6XFx0dGJfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFxcXCJ0aHVuZGVyYm9sdFxcXCIsIE5VTEwpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTI1NTgtfVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfcG9ydC5jPTM3Mz1pbnQgZG1hX3BvcnRfZmxhc2hfd3JpdGUoc3RydWN0IHRiX2RtYV9wb3J0ICpkbWEsIHVuc2lnbmVkIGludCBhZGRyZXNzLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfcG9ydC5jLTM5MS0gKiBUaGlzIGlzIGJlY2F1c2UgaWYgdGhlIHN3aXRjaCBpbiBxdWVzdGlvbiBpcyByb290IHN3aXRjaCB0aGVcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV9wb3J0LmM6MzkyOiAqIHRodW5kZXJib2x0IGhvc3QgY29udHJvbGxlciBnZXRzIHJlc2V0IGFzIHdlbGwuXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfcG9ydC5jLTM5My0gKlxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzoxNDojaW5jbHVkZSBcXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTUtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9Njk2PXN0YXRpYyBzdHJ1Y3QgdGJfc2VydmljZV9kcml2ZXIgZG1hX3Rlc3RfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTY5OC1cXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6Njk5OlxcdFxcdC5uYW1lID0gXFxcInRodW5kZXJib2x0X2RtYV90ZXN0XFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNzAwLVxcdFxcdC5wbSA9IFxcdTAwMjZkbWFfdGVzdF9wbV9vcHMsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTMxMT1jb25zdCBzdHJ1Y3QgYnVzX3R5cGUgdGJfYnVzX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozMTI6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRcXFwiLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtMzEzLVxcdC5tYXRjaCA9IHRiX3NlcnZpY2VfbWF0Y2gsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTMzMz1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfZG9tYWluX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozMzQ6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRfZG9tYWluXFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTMzNS1cXHQucmVsZWFzZSA9IHRiX2RvbWFpbl9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz0zNzc9c3RydWN0IHRiICp0Yl9kb21haW5fYWxsb2Moc3RydWN0IHRiX25oaSAqbmhpLCBpbnQgdGltZW91dF9tc2VjLCBzaXplX3QgcHJpdnNpemUpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTM5OS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjQwMDpcXHR0Yi1cXHUwMDNld3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcXFwidGh1bmRlcmJvbHQlZFxcXCIsIDAsIHRiLVxcdTAwM2VpbmRleCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy00MDEtXFx0aWYgKCF0Yi1cXHUwMDNld3EpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTIwMDU9c3RhdGljIGludCBpY21fZHJpdmVyX3JlYWR5KHN0cnVjdCB0YiAqdGIpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIwMTYtXFx0XFx0dGJfaW5mbyh0YiwgXFxcIllvdSBuZWVkIHRvIHVwZGF0ZSBOVk0gZmlybXdhcmUgb2YgdGhlIGNvbnRyb2xsZXIgYmVmb3JlIGl0IGNhbiBiZSB1c2VkLlxcXFxuXFxcIik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMDE3OlxcdFxcdHRiX2luZm8odGIsIFxcXCJVc2UgZnd1cGQgdG9vbCB0byBhcHBseSB1cGRhdGUuIENoZWNrIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvdGh1bmRlcmJvbHQucnN0IGZvciBkZXRhaWxzLlxcXFxuXFxcIik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMDE4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYy01LSAqIFRoZSBOSEkgKG5hdGl2ZSBob3N0IGludGVyZmFjZSkgaXMgdGhlIGRldmljZSB0aGF0IGFsbG93cyB1cyB0byBzZW5kIGFuZFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmM6NjogKiByZWNlaXZlIGZyYW1lcyBmcm9tIHRoZSB0aHVuZGVyYm9sdCBidXMuXFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYy03LSAqXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jPTExODY9aW50IG5oaV9wcm9iZShzdHJ1Y3QgdGJfbmhpICpuaGkpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jLTEyMzUtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYzoxMjM2OlxcdGRldl9kYmcoZGV2LCBcXFwiTkhJIGluaXRpYWxpemVkLCBzdGFydGluZyB0aHVuZGVyYm9sdFxcXFxuXFxcIik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYy0xMjM3LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuaC0xMS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5oOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmgtMTMtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYz0xMDE9c3RydWN0IHRiX3BhdGggKnRiX3BhdGhfZGlzY292ZXIoc3RydWN0IHRiX3BvcnQgKnNyYywgaW50IHNyY19ob3BpZCxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGF0aC5jLTIxNS0vKipcXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYzoyMTY6ICogdGJfcGF0aF9hbGxvYygpIC0gYWxsb2NhdGUgYSB0aHVuZGVyYm9sdCBwYXRoIGJldHdlZW4gdHdvIHBvcnRzXFxuZHJpdmVycy90aHVuZGVyYm9sdC9wYXRoLmMtMjE3LSAqIEB0YjogRG9tYWluIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmM9MTExPXN0YXRpYyBpbnQgbmhpX3BjaV9pbml0X21zaShzdHJ1Y3QgdGJfbmhpICpuaGkpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTEzOS1cXHRcXHRyZXMgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGlycSwgbmhpX21zaSxcXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjE0MDpcXHRcXHRcXHRcXHQgICAgICAgSVJRRl9OT19TVVNQRU5ELCBcXFwidGh1bmRlcmJvbHRcXFwiLCBuaGkpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmMtMTQxLVxcdFxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jPTE4ND1zdGF0aWMgaW50IG5oaV9wY2lfcmluZ19yZXF1ZXN0X21zaXgoc3RydWN0IHRiX3JpbmcgKnJpbmcsIGJvb2wgbm9fc3VzcGVuZClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmMtMjA3LVxcdGlycWZsYWdzID0gbm9fc3VzcGVuZCA/IElSUUZfTk9fU1VTUEVORCA6IDA7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYzoyMDg6XFx0cmV0ID0gcmVxdWVzdF9pcnEocmluZy1cXHUwMDNlaXJxLCByaW5nX21zaXgsIGlycWZsYWdzLCBcXFwidGh1bmRlcmJvbHRcXFwiLCByaW5nKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTIwOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYz00NDc9c3RhdGljIGludCBuaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTQ2OC1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjQ2OTpcXHRuaGktXFx1MDAzZWlvYmFzZSA9IHBjaW1faW9tYXBfcmVnaW9uKHBkZXYsIDAsIFxcXCJ0aHVuZGVyYm9sdFxcXCIpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmMtNDcwLVxcdHJlcyA9IFBUUl9FUlJfT1JfWkVSTyhuaGktXFx1MDAzZWlvYmFzZSk7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jPTU5MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmhpX2RyaXZlciA9IHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjU5MjpcXHQubmFtZSA9IFxcXCJ0aHVuZGVyYm9sdFxcXCIsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYy01OTMtXFx0LmlkX3RhYmxlID0gbmhpX2lkcyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvdXVpZC5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYzoxNTojaW5jbHVkZSBcXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtMTYtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmM9MzczPXN0YXRpYyBzc2l6ZV90IF9fdGJfcHJvcGVydHlfZm9ybWF0X2Rpcihjb25zdCBzdHJ1Y3QgdGJfcHJvcGVydHlfZGlyICpkaXIsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtNTA4LSAqIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyB0aGUgZGlyZWN0b3J5IHRvIHRoZSBwYWNrZWQgZm9ybWF0IHRoYXQgY2FuIGJlXFxuZHJpdmVycy90aHVuZGVyYm9sdC9wcm9wZXJ0eS5jOjUwOTogKiB0aGVuIHNlbnQgb3ZlciB0aGUgdGh1bmRlcmJvbHQgZmFicmljIHRvIHJlY2VpdmluZyBob3N0LlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYy01MTAtICpcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcmV0aW1lci5jPTM4Mz1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfcmV0aW1lcl90eXBlID0ge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcmV0aW1lci5jOjM4NDpcXHQubmFtZSA9IFxcXCJ0aHVuZGVyYm9sdF9yZXRpbWVyXFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L3JldGltZXIuYy0zODUtXFx0Lmdyb3VwcyA9IHJldGltZXJfZ3JvdXBzLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjIxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmM9MTYzNz1zdGF0aWMgc3RydWN0IHRiX3NlcnZpY2VfZHJpdmVyIHRic3RyZWFtX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMTYzOS1cXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjE2NDA6XFx0XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRfc3RyZWFtXFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jLTE2NDEtXFx0XFx0LnBtID0gXFx1MDAyNnRic3RyZWFtX3BtX29wcyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM9NDQyPXN0YXRpYyB2b2lkIHRiX2R1bXBfcG9ydChzdHJ1Y3QgdGIgKnRiLCBjb25zdCBzdHJ1Y3QgdGJfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtNDQ4LVxcdCAgICAgICByZWdzLVxcdTAwM2Vwb3J0X251bWJlciwgcmVncy1cXHUwMDNldmVuZG9yX2lkLCByZWdzLVxcdTAwM2VkZXZpY2VfaWQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYzo0NDk6XFx0ICAgICAgIHJlZ3MtXFx1MDAzZXJldmlzaW9uLCByZWdzLVxcdTAwM2V0aHVuZGVyYm9sdF92ZXJzaW9uLCB0Yl9wb3J0X3R5cGUocmVncyksXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy00NTAtXFx0ICAgICAgIHJlZ3MtXFx1MDAzZXR5cGUpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYz0xNTYzPXN0YXRpYyB2b2lkIHRiX2R1bXBfc3dpdGNoKGNvbnN0IHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0xNTY4LVxcdCAgICAgICB0Yl9zd2l0Y2hfZ2VuZXJhdGlvbl9uYW1lKHN3KSwgcmVncy1cXHUwMDNldmVuZG9yX2lkLCByZWdzLVxcdTAwM2VkZXZpY2VfaWQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYzoxNTY5OlxcdCAgICAgICByZWdzLVxcdTAwM2VyZXZpc2lvbiwgcmVncy1cXHUwMDNldGh1bmRlcmJvbHRfdmVyc2lvbik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0xNTcwLVxcdHRiX2RiZyh0YiwgXFxcIiAgTWF4IFBvcnQgTnVtYmVyOiAlZFxcXFxuXFxcIiwgcmVncy1cXHUwMDNlbWF4X3BvcnRfbnVtYmVyKTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM9MTgxOT1zdGF0aWMgaW50IHRiX3N3aXRjaF9zZXRfYXV0aG9yaXplZChzdHJ1Y3QgdGJfc3dpdGNoICpzdywgdW5zaWduZWQgaW50IHZhbClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTg2MS1cXHRcXHQgKiBOb3RpZnkgc3RhdHVzIGNoYW5nZSB0byB0aGUgdXNlcnNwYWNlLCBpbmZvcm1pbmcgdGhlIG5ld1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM6MTg2MjpcXHRcXHQgKiB2YWx1ZSBvZiAvc3lzL2J1cy90aHVuZGVyYm9sdC9kZXZpY2VzLy4uLi9hdXRob3JpemVkLlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTg2My1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM9MjM3Mz1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfc3dpdGNoX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYzoyMzc0OlxcdC5uYW1lID0gXFxcInRodW5kZXJib2x0X2RldmljZVxcXCIsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0yMzc1LVxcdC5yZWxlYXNlID0gdGJfc3dpdGNoX3JlbGVhc2UsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDoxNTojaW5jbHVkZSBcXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3V1aWQuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaD0xMDU9c3RydWN0IHRiX3N3aXRjaF90bXUge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTExMi0vKipcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmg6MTEzOiAqIHN0cnVjdCB0Yl9zd2l0Y2ggLSBhIHRodW5kZXJib2x0IHN3aXRjaFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaC0xMTQtICogQGRldjogRGV2aWNlIGZvciB0aGUgc3dpdGNoXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmg9MjM4PXN0cnVjdCB0Yl9iYW5kd2lkdGhfZ3JvdXAge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTI0Ni0vKipcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmg6MjQ3OiAqIHN0cnVjdCB0Yl9wb3J0IC0gYSB0aHVuZGVyYm9sdCBwb3J0LCBwYXJ0IG9mIGEgdGJfc3dpdGNoXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTI0OC0gKiBAY29uZmlnOiBDYWNoZWQgcG9ydCBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSByZWdpc3RlcnNcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaD00MzA9c3RydWN0IHRiX3BhdGgge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTQ4Ny0gKiBAcnVudGltZV9yZXN1bWVfc3dpdGNoOiBSdW50aW1lIHJlc3VtZSBhIHN3aXRjaFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDo0ODg6ICogQGhhbmRsZV9ldmVudDogSGFuZGxlIHRodW5kZXJib2x0IGV2ZW50XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTQ4OS0gKiBAZ2V0X2Jvb3RfYWNsOiBHZXQgYm9vdCBBQ0wgbGlzdFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oPTEzMTE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdXNiNF9zd2l0Y2hfdmVyc2lvbihjb25zdCBzdHJ1Y3QgdGJfc3dpdGNoICpzdylcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTMxMi17XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oOjEzMTM6XFx0cmV0dXJuIEZJRUxEX0dFVChVU0I0X1ZFUlNJT05fTUFKT1JfTUFTSywgc3ctXFx1MDAzZWNvbmZpZy50aHVuZGVyYm9sdF92ZXJzaW9uKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTMxNC19XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaC00LSAqXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6NTogKiBFdmVyeSB0aHVuZGVyYm9sdCBkZXZpY2UgY29uc2lzdHMgKGxvZ2ljYWxseSkgb2YgYSBzd2l0Y2ggd2l0aCBtdWx0aXBsZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGJfcmVncy5oLTYtICogcG9ydHMuIEV2ZXJ5IHBvcnQgY29udGFpbnMgdXAgdG8gZm91ciBjb25maWcgcmVnaW9ucyAoSE9QUywgUE9SVCwgU1dJVENILFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg9MTY2PXN0cnVjdCB0Yl9yZWdzX3N3aXRjaF9oZWFkZXIge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTg4LVxcdHUzMiBfX3Vua25vd240Ojg7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6MTg5OlxcdHUzMiB0aHVuZGVyYm9sdF92ZXJzaW9uOjg7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkwLX0gX19wYWNrZWQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkxLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGJfcmVncy5oOjE5MjovKiBVc2VkIHdpdGggdGhlIHJvdXRlciB0aHVuZGVyYm9sdF92ZXJzaW9uICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkzLSNkZWZpbmUgVVNCNF9WRVJTSU9OX01BSk9SX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDUpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaD0yODM9c3RydWN0IHRiX3JlZ3NfcG9ydF9oZWFkZXIge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMjk0LVxcdGVudW0gdGJfcG9ydF90eXBlIHR5cGU6MjQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6Mjk1OlxcdHUzMiB0aHVuZGVyYm9sdF92ZXJzaW9uOjg7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMjk2LVxcdC8qIERXT1JEIDMgKi9cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jPTI4MjQ9c3RhdGljIHZvaWQgdGJfdGVzdF9wcm9wZXJ0eV9jb3B5KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jLTI4NTctICogUmVwcm9kdWNlcnMgZm9yIHRocmVlIG1lbW9yeS1zYWZldHkgZGVmZWN0cyBpblxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jOjI4NTg6ICogZHJpdmVycy90aHVuZGVyYm9sdC9wcm9wZXJ0eS5jIHJlYWNoZWQgZnJvbSBhIGNyYWZ0ZWQgWERvbWFpblxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jLTI4NTktICogUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLiAgV2l0aG91dCB0aGUgZml4IHRoZXNlIHRyaXAgS0FTQU4gb3JcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jPTMxNDc9c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSB0Yl90ZXN0X3N1aXRlID0ge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jOjMxNDg6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRcXFwiLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jLTMxNDktXFx0LnRlc3RfY2FzZXMgPSB0Yl90ZXN0X2Nhc2VzLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90cmFjZS5oLTEwLSN1bmRlZiBUUkFDRV9TWVNURU1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RyYWNlLmg6MTE6I2RlZmluZSBUUkFDRV9TWVNURU0gdGh1bmRlcmJvbHRcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RyYWNlLmgtMTItXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3hkb21haW4uYz0xMTMyPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl9zZXJ2aWNlX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmM6MTEzMzpcXHQubmFtZSA9IFxcXCJ0aHVuZGVyYm9sdF9zZXJ2aWNlXFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L3hkb21haW4uYy0xMTM0LVxcdC5ncm91cHMgPSB0Yl9zZXJ2aWNlX2F0dHJfZ3JvdXBzLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmM9MjA1MD1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfeGRvbWFpbl90eXBlID0ge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQveGRvbWFpbi5jOjIwNTE6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRfeGRvbWFpblxcXCIsXFxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmMtMjA1Mi1cXHQucmVsZWFzZSA9IHRiX3hkb21haW5fcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MjcuODk3NzAxODQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwNDMxNzYyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yYXZlbGluZyBUaHVuZGVyYm9sdCBGdXp6aW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBzeXprYWxsZXIgaXMgZnV6emluZyB0aGUgVGh1bmRlcmJvbHQgZHJpdmVyLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgIGJlY2F1c2UgaXQgaGFzIEtVbml0IHRlc3RzLCB3aGljaCwgSSBpbml0aWFsbHkgdGhvdWdodCwgbWlnaHQgYmUgYSBzdGFydGluZyBwb2ludC4gVGhlbiwgSSBub3RpY2VkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgY29tbWVudHM6IFwiUmVwcm9kdWNlcnMgZm9yIHRocmVlIG1lbW9yeS1zYWZldHkgZGVmZWN0cy4uLiByZWFjaGVkIGZyb20gYSBjcmFmdGVkIFhEb21haW4gUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLlwiIFRoaXMgY29uZmlybXMgc3l6a2FsbGVyIGlzIGluZGVlZCBmdXp6aW5nIFRodW5kZXJib2x0IVxuXG5NeSBuZXh0IHF1ZXN0aW9uIGlzICpob3cqPyBJcyBzeXprYWxsZXIgdXNpbmcgYSBwc2V1ZG8tc3lzY2FsbCwgYSBzb2Z0d2FyZSBkcml2ZXIsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIHF1aWNrbHkgcnVsZWQgb3V0IGBVU0I0X0tVTklUX1RFU1RgIGFuZCB0aGUgS1VuaXQgdGVzdHMsIGtub3dpbmcgdGhvc2UgYXJlbid0IGRpcmVjdGx5IGZ1enphYmxlIGJ5IHN5emthbGxlci4gU2luY2UgSSBjYW4ndCBlYXNpbHkgc2VhcmNoIHN5emthbGxlcidzIGRlc2NyaXB0aW9ucyB3aXRoIHRoZSB0b29scyBhdmFpbGFibGUsIGxpa2UgYGdyZXBwZXJgLCBidXQgSSdtIHJlbWluZGVkIHRoYXQgSSBjb3VsZCB1c2UgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIGlmIHRoZXkgd2VyZSBhY2Nlc3NpYmxlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCwgaG93ZXZlci5cblxuSSB0aGVuIGNvbnNpZGVyZWQgdGhlIHBvc3NpYmlsaXR5IG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBhbmQgbG9va2VkIGZvciBhIFwiZHVtbXlcIiBUaHVuZGVyYm9sdCBkcml2ZXIsIGJ1dCBmb3VuZCBub3RoaW5nIG9idmlvdXMuIFRoZW4sIEkgdHVybmVkIG15IGF0dGVudGlvbiB0byBgZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGVgLCB3aGVyZSBJIHNwb3R0ZWQgYFVTQjRfS1VOSVRfVEVTVGAgYWdhaW4sIHN0aWxsIG5vdCB0aGUgYW5zd2VyIHRvIG15IHF1ZXN0aW9uLlxuXG5TdWRkZW5seSwgYSBjb25uZWN0aW9uIGNsaWNrZWQ6IENvdWxkIHN5emthbGxlciBiZSBmdXp6aW5nIFRodW5kZXJib2x0IHZpYSBgY29uZmlnZnNgPyBJIHJlY2FsbGVkIHNlZWluZyBgdGh1bmRlcmJvbHQtJChDT05GSUdfVVNCNF9DT05GSUdGUykgKz0gY29uZmlnZnMub2AgaW4gdGhlIG1ha2VmaWxlLiBUaGlzIHNlZW1lZCBwcm9taXNpbmcuXG5cblRoZW4sIEkgc2hpZnRlZCBteSBmb2N1cyB0byB0aGUgbmV0d29ya2luZyBhc3BlY3RzLCBjaGVja2luZyBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYCwgcmVtZW1iZXJpbmcgaXQgcmVnaXN0ZXJzIGEgbmV0d29yayBkZXZpY2UuIEkgbG9va2VkIGF0IHRoYXQgZmlsZSBhZ2FpbiwgYW5kIG5vdGljZWQgYSBwYXRjaCBhZGRpbmcgYHRibmV0X2Nvbm5lY3RfZmFpbGVkYCB0byBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLCBhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIHJlZmVyZW5jaW5nIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3LlwiIFRoaXMgY29uZmlybXMgYSBidWcgd2FzIGZvdW5kIGJ5IHN5emthbGxlciB0aGVyZS4gSSBub3cgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHN5emthbGxlciB0cmlnZ2VyZWQgYHRibmV0X2Nvbm5lY3RlZF93b3JrYC4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYgd2l0aGluIGBkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNgIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjM4Ljk0MDg4MDcyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQ0NTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Ym5ldF9jb25uZWN0ZWRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTM2OT1zdGF0aWMgdm9pZCB0Ym5ldF90ZWFyX2Rvd24oc3RydWN0IHRibmV0ICpuZXQsIGJvb2wgc2VuZF9sb2dvdXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzg5LVxcdFxcdC8qIFRlYXIgdGhlIHBhdGhzIGRvd24gYmVmb3JlIHN0b3BwaW5nIHRoZSByaW5ncy4gIFRoaXMgbWlycm9yc1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzozOTA6XFx0XFx0ICogdGJuZXRfY29ubmVjdGVkX3dvcmsoKSwgd2hpY2ggZW5hYmxlcyB0aGUgcGF0aHMgbGFzdCBzbyB0aGVcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzkxLVxcdFxcdCAqIFJ4IHJpbmcgaXMgcHJpbWVkIGJlZm9yZSBwYWNrZXRzIGNhbiBhcnJpdmUuICBTdG9wcGluZyBhXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NjI5PXN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0Mi1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NjQzOnN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xMzcxPXN0YXRpYyBpbnQgdGJuZXRfcHJvYmUoc3RydWN0IHRiX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHRiX3NlcnZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzODUtXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlbG9naW5fd29yaywgdGJuZXRfbG9naW5fd29yayk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjEzODY6XFx0SU5JVF9XT1JLKFxcdTAwMjZuZXQtXFx1MDAzZWNvbm5lY3RlZF93b3JrLCB0Ym5ldF9jb25uZWN0ZWRfd29yayk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzODctXFx0SU5JVF9XT1JLKFxcdTAwMjZuZXQtXFx1MDAzZWRpc2Nvbm5lY3Rfd29yaywgdGJuZXRfZGlzY29ubmVjdF93b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MzkuMDE5MzM0MTk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1Njc1NjgzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIFdvcmsgSXRlbSBRdWV1ZSoqXG5cbkFscmlnaHQsIGhhbmcgb24uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AuLi4gdGhhdCdzIGEgKndvcmsgaXRlbSosIHJpZ2h0PyBDbGFzc2ljLiBTbywgYnkgZGVmaW5pdGlvbiwgaXQncyBnZXR0aW5nIHF1ZXVlZCAqZnJvbSBzb21ld2hlcmUqIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgY29ubmVjdGVkX3dvcmtgIGlzIGFjdHVhbGx5IGJlaW5nIGVucXVldWVkLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aGF0IHRoaW5nLiBMZXQncyBmaW5kIGl0cyBvcmlnaW4gcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6NDkuNTg2OTA1NjczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY4ODU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25uZWN0ZWRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTE0Mz1zdHJ1Y3QgdGJuZXRfcmluZyB7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTY4LSAqIEBsb2dpbl93b3JrOiBXb3JrZXIgdG8gc2VuZCBUaHVuZGVyYm9sdElQIGxvZ2luIHBhY2tldHNcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTY5OiAqIEBjb25uZWN0ZWRfd29yazogV29ya2VyIHRoYXQgZmluYWxpemVzIHRoZSBUaHVuZGVyYm9sdElQIGNvbm5lY3Rpb25cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTcwLSAqXFx0XFx0ICAgIHNldHVwIGFuZCBlbmFibGVzIERNQSBwYXRocyBmb3IgaGlnaCBzcGVlZCBkYXRhXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTgyPXN0cnVjdCB0Ym5ldCB7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTk3LVxcdHN0cnVjdCBkZWxheWVkX3dvcmsgbG9naW5fd29yaztcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTk4OlxcdHN0cnVjdCB3b3JrX3N0cnVjdCBjb25uZWN0ZWRfd29yaztcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTk5LVxcdHN0cnVjdCB3b3JrX3N0cnVjdCBkaXNjb25uZWN0X3dvcms7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MzIzPXN0YXRpYyB2b2lkIHN0b3BfbG9naW4oc3RydWN0IHRibmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzI1LVxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2Vsb2dpbl93b3JrKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MzI2OlxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNm5ldC1cXHUwMDNlY29ubmVjdGVkX3dvcmspO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zMjctXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MzY5PXN0YXRpYyB2b2lkIHRibmV0X3RlYXJfZG93bihzdHJ1Y3QgdGJuZXQgKm5ldCwgYm9vbCBzZW5kX2xvZ291dClcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zODktXFx0XFx0LyogVGVhciB0aGUgcGF0aHMgZG93biBiZWZvcmUgc3RvcHBpbmcgdGhlIHJpbmdzLiAgVGhpcyBtaXJyb3JzXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjM5MDpcXHRcXHQgKiB0Ym5ldF9jb25uZWN0ZWRfd29yaygpLCB3aGljaCBlbmFibGVzIHRoZSBwYXRocyBsYXN0IHNvIHRoZVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zOTEtXFx0XFx0ICogUnggcmluZyBpcyBwcmltZWQgYmVmb3JlIHBhY2tldHMgY2FuIGFycml2ZS4gIFN0b3BwaW5nIGFcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz00MjU9c3RhdGljIGludCB0Ym5ldF9oYW5kbGVfcGFja2V0KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDc3LVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0Nzg6XFx0XFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNm5ldC1cXHUwMDNlY29ubmVjdGVkX3dvcmspO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy00NzktXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTYyOT1zdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0X2ZhaWxlZChzdHJ1Y3QgdGJuZXQgKm5ldClcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NDItXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY0MzpzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0NC17XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY0NTpcXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjQ2LVxcdGJvb2wgY29ubmVjdGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTcxND1zdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03NDQtXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc0NTpcXHRcXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcXHUwMDI2bmV0LVxcdTAwM2Vjb25uZWN0ZWRfd29yayk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTc0Ni1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTM3MT1zdGF0aWMgaW50IHRibmV0X3Byb2JlKHN0cnVjdCB0Yl9zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCB0Yl9zZXJ2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg1LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZuZXQtXFx1MDAzZWxvZ2luX3dvcmssIHRibmV0X2xvZ2luX3dvcmspO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMzg2OlxcdElOSVRfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2Vjb25uZWN0ZWRfd29yaywgdGJuZXRfY29ubmVjdGVkX3dvcmspO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg3LVxcdElOSVRfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2VkaXNjb25uZWN0X3dvcmssIHRibmV0X2Rpc2Nvbm5lY3Rfd29yayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjQ5LjY0MTYwMDcxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ2OTE4NzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRodW5kZXJib2x0IE5ldHdvcmsgQ29ubmVjdGlvbioqXG5cbk9rYXksIHNvIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaXMgYmVpbmcgcXVldWVkIGZyb20gYm90aCBgdGJuZXRfaGFuZGxlX3BhY2tldGAgYW5kIGB0Ym5ldF9sb2dpbl93b3JrYC4gUmlnaHQsIGB0Ym5ldF9oYW5kbGVfcGFja2V0YCBpcyBhIGNhbGxiYWNrIGZvciBpbmNvbWluZyBuZXR3b3JrIHBhY2tldHMuIE15IG1haW4gcXVlc3Rpb24gaXM6IGhvdyBpcyBTeXprYWxsZXIgdHJpZ2dlcmluZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCB0cmlnZ2VyLlxuXG5Db3VsZCB0aGlzIGludm9sdmUgYSBzb2Z0d2FyZSBUaHVuZGVyYm9sdCBkZXZpY2U/IFRoYXQncyBhIHBvc3NpYmlsaXR5LiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdGh1bmRlcmJvbHQveGRvbWFpbi5jYCBhbmQgYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYC4gQWgsIGluIGBkcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuY2AsIEkgc2VlIGEgY3J1Y2lhbCBub3RlOiBcIlJlcHJvZHVjZXJzIGZvciB0aHJlZSBtZW1vcnktc2FmZXR5IGRlZmVjdHMuLi4gcmVhY2hlZCBmcm9tIGEgY3JhZnRlZCBYRG9tYWluIFBST1BFUlRJRVNfUkVTUE9OU0UgcGF5bG9hZC5cIiBUaGlzIHN1Z2dlc3RzIHRoYXQgS1VuaXQgdGVzdHMgYXJlIGludm9sdmVkLCBhbmQgdGhleSBjYW4gaW5qZWN0IFhEb21haW4gcGF5bG9hZHMuIEJ1dCB3YWl0LCBTeXprYWxsZXIgZG9lc24ndCBkaXJlY3RseSBydW4gS1VuaXQgdGVzdHMsIGRvZXMgaXQ/IFRoYXQgc2VlbXMgdW5saWtlbHkuXG5cbkhtbS4uLiBEb2VzIFN5emthbGxlciBoYXZlIGEgYHN5el91c2JfY29ubmVjdGAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IE5vLCB0aHVuZGVyYm9sdCBpc24ndCBVU0IuIFNvIGhvdyBhcmUgdGhlc2UgWERvbWFpbiBwYXlsb2FkcyBjcmVhdGVkPyBQZXJoYXBzIFN5emthbGxlciB1c2VzIGBjb25maWdmc2AgdG8gY3JlYXRlIHRodW5kZXJib2x0IHhkb21haW5zPyBMZXQgbWUgc2hpZnQgbXkgZm9jdXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYCBhbmQgYGRyaXZlcnMvdGh1bmRlcmJvbHQveGRvbWFpbi5jYCBtb3JlIGNsb3NlbHkuIFRoYXQgc2VlbXMgdGhlIG1vc3QgbG9naWNhbCBwYXRoIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcxMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjowMC4xMTA3OTA0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5MDQ5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRvbWFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3RodW5kZXJib2x0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE5ODkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU9ND10aHVuZGVyYm9sdC1vYmpzIDo9IG5oaS5vIGN0bC5vIHRiLm8gc3dpdGNoLm8gY2FwLm8gcGNpLm8gcGF0aC5vIHR1bm5lbC5vIGVlcHJvbS5vXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo1OnRodW5kZXJib2x0LW9ianMgKz0gZG9tYWluLm8gZG1hX3BvcnQubyBpY20ubyBwcm9wZXJ0eS5vIHhkb21haW4ubyBsYy5vIHRtdS5vIHVzYjQub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGUtNi10aHVuZGVyYm9sdC1vYmpzICs9IHVzYjRfcG9ydC5vIG52bS5vIHJldGltZXIubyBxdWlya3MubyBjbHgub1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9hY3BpLmM9MTYwPWJvb2wgdGJfYWNwaV9tYXlfdHVubmVsX3BjaWUodm9pZClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE2Ny0vKipcXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYzoxNjg6ICogdGJfYWNwaV9pc194ZG9tYWluX2FsbG93ZWQoKSAtIEFyZSBYRG9tYWluIGNvbm5lY3Rpb25zIGFsbG93ZWRcXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYy0xNjktICpcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE3Mi0gKi9cXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYzoxNzM6Ym9vbCB0Yl9hY3BpX2lzX3hkb21haW5fYWxsb3dlZCh2b2lkKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE3NC17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NseC5jPTY4PXN0YXRpYyBib29sIHRiX3BvcnRfY2x4X3N1cHBvcnRlZChzdHJ1Y3QgdGJfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNseClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2x4LmMtNzctXFx0LyogRG9uJ3QgZW5hYmxlIENMeCBpbiBjYXNlIG9mIGludGVyLWRvbWFpbiBsaW5rICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jbHguYzo3ODpcXHRpZiAocG9ydC1cXHUwMDNleGRvbWFpbilcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NseC5jLTc5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jPTE4MTg9c3RhdGljIHZvaWQgbWFyZ2luaW5nX3N3aXRjaF9yZW1vdmUoc3RydWN0IHRiX3N3aXRjaCAqc3cpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODM0LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4MzU6c3RhdGljIHZvaWQgbWFyZ2luaW5nX3hkb21haW5faW5pdChzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTgzNi17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODM5LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NDA6XFx0cGFyZW50X3N3ID0gdGJfeGRvbWFpbl9wYXJlbnQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4NDEtXFx0ZG93bnN0cmVhbSA9IHRiX3BvcnRfYXQoeGQtXFx1MDAzZXJvdXRlLCBwYXJlbnRfc3cpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg0NS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoxODQ2OnN0YXRpYyB2b2lkIG1hcmdpbmluZ194ZG9tYWluX3JlbW92ZShzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg0Ny17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODUwLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NTE6XFx0cGFyZW50X3N3ID0gdGJfeGRvbWFpbl9wYXJlbnQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4NTItXFx0ZG93bnN0cmVhbSA9IHRiX3BvcnRfYXQoeGQtXFx1MDAzZXJvdXRlLCBwYXJlbnRfc3cpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM9MTg3MD1zdGF0aWMgaW5saW5lIHZvaWQgbWFyZ2luaW5nX3N3aXRjaF9yZW1vdmUoc3RydWN0IHRiX3N3aXRjaCAqc3cpIHsgfVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NzE6c3RhdGljIGlubGluZSB2b2lkIG1hcmdpbmluZ194ZG9tYWluX2luaXQoc3RydWN0IHRiX3hkb21haW4gKnhkKSB7IH1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoxODcyOnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJnaW5pbmdfeGRvbWFpbl9yZW1vdmUoc3RydWN0IHRiX3hkb21haW4gKnhkKSB7IH1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODczLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJnaW5pbmdfcmV0aW1lcl9pbml0KHN0cnVjdCB0Yl9yZXRpbWVyICpydCxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jPTI0NjI9dm9pZCB0Yl9zd2l0Y2hfZGVidWdmc19yZW1vdmUoc3RydWN0IHRiX3N3aXRjaCAqc3cpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDY3LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjI0Njg6dm9pZCB0Yl94ZG9tYWluX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjQ2OS17XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM6MjQ3MDpcXHRtYXJnaW5pbmdfeGRvbWFpbl9pbml0KHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDcxLX1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDcyLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjI0NzM6dm9pZCB0Yl94ZG9tYWluX2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCB0Yl94ZG9tYWluICp4ZClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDc0LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoyNDc1OlxcdG1hcmdpbmluZ194ZG9tYWluX3JlbW92ZSh4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjQ3Ni19XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9OTE9c3RydWN0IGRtYV90ZXN0IHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtOTItXFx0Y29uc3Qgc3RydWN0IHRiX3NlcnZpY2UgKnN2YztcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6OTM6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy05NC1cXHRzdHJ1Y3QgdGJfcmluZyAqcnhfcmluZztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz0xMjA9c3RhdGljIHZvaWQgZG1hX3Rlc3RfZnJlZV9yaW5ncyhzdHJ1Y3QgZG1hX3Rlc3QgKmR0KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEyMi1cXHRpZiAoZHQtXFx1MDAzZXJ4X3JpbmcpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTIzOlxcdFxcdHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZChkdC1cXHUwMDNleGQsIGR0LVxcdTAwM2VyeF9ob3BpZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEyNC1cXHRcXHR0Yl9yaW5nX2ZyZWUoZHQtXFx1MDAzZXJ4X3JpbmcpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEyNy1cXHRpZiAoZHQtXFx1MDAzZXR4X3JpbmcpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTI4OlxcdFxcdHRiX3hkb21haW5fcmVsZWFzZV9vdXRfaG9waWQoZHQtXFx1MDAzZXhkLCBkdC1cXHUwMDNldHhfaG9waWQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xMjktXFx0XFx0dGJfcmluZ19mcmVlKGR0LVxcdTAwM2V0eF9yaW5nKTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz0xMzQ9c3RhdGljIGludCBkbWFfdGVzdF9zdGFydF9yaW5ncyhzdHJ1Y3QgZG1hX3Rlc3QgKmR0KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzNi1cXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBSSU5HX0ZMQUdfRlJBTUU7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjEzNzpcXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQgPSBkdC1cXHUwMDNleGQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzOC1cXHRpbnQgcmV0LCBlMmVfdHhfaG9wID0gMDtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xNTktXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjE2MDpcXHRcXHRyZXQgPSB0Yl94ZG9tYWluX2FsbG9jX291dF9ob3BpZCh4ZCwgLTEpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xNjEtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xODctXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjE4ODpcXHRcXHRyZXQgPSB0Yl94ZG9tYWluX2FsbG9jX2luX2hvcGlkKHhkLCAtMSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTE4OS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTE5Ni1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTk3OlxcdHJldCA9IHRiX3hkb21haW5fZW5hYmxlX3BhdGhzKGR0LVxcdTAwM2V4ZCwgZHQtXFx1MDAzZXR4X2hvcGlkLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xOTgtXFx0XFx0XFx0XFx0ICAgICAgZHQtXFx1MDAzZXR4X3JpbmcgPyBkdC1cXHUwMDNldHhfcmluZy1cXHUwMDNlaG9wIDogLTEsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9MjE0PXN0YXRpYyB2b2lkIGRtYV90ZXN0X3N0b3BfcmluZ3Moc3RydWN0IGRtYV90ZXN0ICpkdClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0yMjItXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjIyMzpcXHRyZXQgPSB0Yl94ZG9tYWluX2Rpc2FibGVfcGF0aHMoZHQtXFx1MDAzZXhkLCBkdC1cXHUwMDNldHhfaG9waWQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTIyNC1cXHRcXHRcXHRcXHQgICAgICAgZHQtXFx1MDAzZXR4X3JpbmcgPyBkdC1cXHUwMDNldHhfcmluZy1cXHUwMDNlaG9wIDogLTEsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9NDY4PXN0YXRpYyBpbnQgZG1hX3Rlc3Rfc2V0X2JvbmRpbmcoc3RydWN0IGRtYV90ZXN0ICpkdClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy00NzEtXFx0Y2FzZSBUQl9MSU5LX1dJRFRIX0RVQUw6XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjQ3MjpcXHRcXHRyZXR1cm4gdGJfeGRvbWFpbl9sYW5lX2JvbmRpbmdfZW5hYmxlKGR0LVxcdTAwM2V4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTQ3My1cXHRjYXNlIFRCX0xJTktfV0lEVEhfU0lOR0xFOlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo0NzQ6XFx0XFx0dGJfeGRvbWFpbl9sYW5lX2JvbmRpbmdfZGlzYWJsZShkdC1cXHUwMDNleGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy00NzUtXFx0XFx0ZmFsbHRocm91Z2g7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9NjM5PXN0YXRpYyBpbnQgZG1hX3Rlc3RfcHJvYmUoc3RydWN0IHRiX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHRiX3NlcnZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy02NDAte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo2NDE6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gdGJfc2VydmljZV9wYXJlbnQoc3ZjKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNjQyLVxcdHN0cnVjdCBkbWFfdGVzdCAqZHQ7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTMzOD1zdGF0aWMgYm9vbCB0Yl9kb21haW5fZXZlbnRfY2Iodm9pZCAqZGF0YSwgZW51bSB0Yl9jZmdfcGtnX3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtMzUwLVxcdGNhc2UgVEJfQ0ZHX1BLR19YRE9NQUlOX1JFU1A6XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozNTE6XFx0XFx0aWYgKHRiX2lzX3hkb21haW5fZW5hYmxlZCgpKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6MzUyOlxcdFxcdFxcdHJldHVybiB0Yl94ZG9tYWluX2hhbmRsZV9yZXF1ZXN0KHRiLCB0eXBlLCBidWYsIHNpemUpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtMzUzLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz03NTY9aW50IHRiX2RvbWFpbl9kaXNjb25uZWN0X3BjaWVfcGF0aHMoc3RydWN0IHRiICp0YilcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzY0LS8qKlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6NzY1OiAqIHRiX2RvbWFpbl9hcHByb3ZlX3hkb21haW5fcGF0aHMoKSAtIEVuYWJsZSBETUEgcGF0aHMgZm9yIFhEb21haW5cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc2Ni0gKiBAdGI6IERvbWFpbiBlbmFibGluZyB0aGUgRE1BIHBhdGhzXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc4MS0gKi9cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjc4MjppbnQgdGJfZG9tYWluX2FwcHJvdmVfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy03ODMtXFx0XFx0XFx0XFx0ICAgIGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzg1LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjc4NjpcXHRpZiAoIXRiLVxcdTAwM2VjbV9vcHMtXFx1MDAzZWFwcHJvdmVfeGRvbWFpbl9wYXRocylcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc4Ny1cXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzg4LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6Nzg5OlxcdHJldHVybiB0Yi1cXHUwMDNlY21fb3BzLVxcdTAwM2VhcHByb3ZlX3hkb21haW5fcGF0aHModGIsIHhkLCB0cmFuc21pdF9wYXRoLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzkwLVxcdFxcdFxcdHRyYW5zbWl0X3JpbmcsIHJlY2VpdmVfcGF0aCwgcmVjZWl2ZV9yaW5nKTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzkzLS8qKlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6Nzk0OiAqIHRiX2RvbWFpbl9kaXNjb25uZWN0X3hkb21haW5fcGF0aHMoKSAtIERpc2FibGUgRE1BIHBhdGhzIGZvciBYRG9tYWluXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy03OTUtICogQHRiOiBEb21haW4gZGlzYWJsaW5nIHRoZSBETUEgcGF0aHNcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODEwLSAqL1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODExOmludCB0Yl9kb21haW5fZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKHN0cnVjdCB0YiAqdGIsIHN0cnVjdCB0Yl94ZG9tYWluICp4ZCxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgxMi1cXHRcXHRcXHRcXHQgICAgICAgaW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTQte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODE1OlxcdGlmICghdGItXFx1MDAzZWNtX29wcy1cXHUwMDNlZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODE2LVxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTctXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MTg6XFx0cmV0dXJuIHRiLVxcdTAwM2VjbV9vcHMtXFx1MDAzZWRpc2Nvbm5lY3RfeGRvbWFpbl9wYXRocyh0YiwgeGQsIHRyYW5zbWl0X3BhdGgsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTktXFx0XFx0XFx0dHJhbnNtaXRfcmluZywgcmVjZWl2ZV9wYXRoLCByZWNlaXZlX3JpbmcpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MjEtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MjI6c3RhdGljIGludCBkaXNjb25uZWN0X3hkb21haW4oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODIzLXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjgyNDpcXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MjUtXFx0c3RydWN0IHRiICp0YiA9IGRhdGE7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgyNy1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjgyODpcXHR4ZCA9IHRiX3RvX3hkb21haW4oZGV2KTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgyOS1cXHRpZiAoeGQgXFx1MDAyNlxcdTAwMjYgeGQtXFx1MDAzZXRiID09IHRiKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODMwOlxcdFxcdHJldCA9IHRiX3hkb21haW5fZGlzYWJsZV9hbGxfcGF0aHMoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODMxLVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz04NDU9aW50IHRiX2RvbWFpbl9kaXNjb25uZWN0X2FsbF9wYXRocyhzdHJ1Y3QgdGIgKnRiKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NTItXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4NTM6XFx0cmV0dXJuIGJ1c19mb3JfZWFjaF9kZXYoXFx1MDAyNnRiX2J1c190eXBlLCBOVUxMLCB0YiwgZGlzY29ubmVjdF94ZG9tYWluKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg1NC19XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTg1Nj1zdHJ1Y3QgdW5yZWdpc3Rlcl9jb250ZXh0IHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYwLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODYxOnN0YXRpYyBpbnQgdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NjIte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYzLVxcdHN0cnVjdCB1bnJlZ2lzdGVyX2NvbnRleHQgKmN0eCA9IGRhdGE7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4NjQ6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODY1LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODY2OlxcdHhkID0gdGJfdG9feGRvbWFpbihkZXYpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODY3LVxcdGlmICh4ZCBcXHUwMDI2XFx1MDAyNiB4ZC1cXHUwMDNldGIgPT0gY3R4LVxcdTAwM2V0YiBcXHUwMDI2XFx1MDAyNiB4ZC1cXHUwMDNlaXNfdW5wbHVnZ2VkKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4Njg6XFx0XFx0dGJfeGRvbWFpbl91bnJlZ2lzdGVyKHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg2OS1cXHRcXHRjdHgtXFx1MDAzZW4rKztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODczLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODc0OmludCB0Yl9kb21haW5fdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbnMoc3RydWN0IHRiICp0YilcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg3NS17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg3OS1cXHRjdHgubiA9IDA7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4ODA6XFx0YnVzX2Zvcl9lYWNoX2RldihcXHUwMDI2dGJfYnVzX3R5cGUsIE5VTEwsIFxcdTAwMjZjdHgsIHVucmVnaXN0ZXJfdW5wbHVnZ2VkX3hkb21haW4pO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODgxLVxcdHRiX2RvbWFpbl9wdXQodGIpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz04ODY9aW50IHRiX2RvbWFpbl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg5My1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg5NDpcXHRyZXQgPSB0Yl94ZG9tYWluX2luaXQoKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg5NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04OTgtXFx0aWYgKHJldClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg5OTpcXHRcXHRnb3RvIGVycl94ZG9tYWluO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTAwLVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy05MDItXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo5MDM6ZXJyX3hkb21haW46XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo5MDQ6XFx0dGJfeGRvbWFpbl9leGl0KCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy05MDUtZXJyX2FjcGk6XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTkxMj12b2lkIHRiX2RvbWFpbl9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTkxNi1cXHR0Yl9udm1fZXhpdCgpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6OTE3OlxcdHRiX3hkb21haW5fZXhpdCgpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTE4LVxcdHRiX2FjcGlfZXhpdCgpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz01OT1zdHJ1Y3QgdXNiNF9zd2l0Y2hfbnZtX2F1dGgge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy04OS0gKiBAZGV2aWNlX2Rpc2Nvbm5lY3RlZDogSGFuZGxlIGRldmljZSBkaXNjb25uZWN0ZWQgSUNNIG1lc3NhZ2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkwOiAqIEB4ZG9tYWluX2Nvbm5lY3RlZDogSGFuZGxlIFhEb21haW4gY29ubmVjdGVkIElDTSBtZXNzYWdlXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5MTogKiBAeGRvbWFpbl9kaXNjb25uZWN0ZWQ6IEhhbmRsZSBYRG9tYWluIGRpc2Nvbm5lY3RlZCBJQ00gbWVzc2FnZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTItICogQHJ0ZDNfdmV0bzogSGFuZGxlIFJURDMgdmV0byBub3RpZmljYXRpb24gSUNNIG1lc3NhZ2VcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9OTQ9c3RydWN0IGljbSB7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExOC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTE5OlxcdHZvaWQgKCp4ZG9tYWluX2Nvbm5lY3RlZCkoc3RydWN0IHRiICp0YixcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMTpcXHR2b2lkICgqeGRvbWFpbl9kaXNjb25uZWN0ZWQpKHN0cnVjdCB0YiAqdGIsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjItXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgaWNtX3BrZ19oZWFkZXIgKmhkcik7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTM3NT1zdGF0aWMgYm9vbCBpY21fZmlybXdhcmVfcnVubmluZyhjb25zdCBzdHJ1Y3QgdGJfbmhpICpuaGkpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTM4Mi1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjM4MzpzdGF0aWMgdm9pZCBpY21feGRvbWFpbl9hY3RpdmF0ZWQoc3RydWN0IHRiX3hkb21haW4gKnhkLCBib29sIGFjdGl2YXRlZClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTM4NC17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTM4OC1cXHRuaGlfcG9ydCA9IHRiX3N3aXRjaF9maW5kX3BvcnQodGItXFx1MDAzZXJvb3Rfc3dpdGNoLCBUQl9UWVBFX05ISSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzozODk6XFx0ZHN0X3BvcnQgPSB0Yl94ZG9tYWluX2Rvd25zdHJlYW1fcG9ydCh4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0zOTAtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTU1Mj1zdGF0aWMgaW50IGljbV9mcl9jaGFsbGVuZ2Vfc3dpdGNoX2tleShzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfc3dpdGNoICpzdyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNTgxLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NTgyOnN0YXRpYyBpbnQgaWNtX2ZyX2FwcHJvdmVfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy01ODMtXFx0XFx0XFx0XFx0XFx0aW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy01ODUte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NTg2OlxcdHN0cnVjdCBpY21fZnJfcGtnX2FwcHJvdmVfeGRvbWFpbl9yZXNwb25zZSByZXBseTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjU4NzpcXHRzdHJ1Y3QgaWNtX2ZyX3BrZ19hcHByb3ZlX3hkb21haW4gcmVxdWVzdDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTU4OC1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MTMtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo2MTQ6XFx0aWNtX3hkb21haW5fYWN0aXZhdGVkKHhkLCB0cnVlKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTYxNS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNjE3LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NjE4OnN0YXRpYyBpbnQgaWNtX2ZyX2Rpc2Nvbm5lY3RfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MTktXFx0XFx0XFx0XFx0XFx0ICAgaW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MzQtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo2MzU6XFx0aWNtX3hkb21haW5fYWN0aXZhdGVkKHhkLCBmYWxzZSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MzYtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTcwMz1zdGF0aWMgdm9pZCByZW1vdmVfc3dpdGNoKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03MDgtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MDk6c3RhdGljIHZvaWQgYWRkX3hkb21haW4oc3RydWN0IHRiX3N3aXRjaCAqc3csIHU2NCByb3V0ZSxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcxMC1cXHRcXHRcXHRjb25zdCB1dWlkX3QgKmxvY2FsX3V1aWQsIGNvbnN0IHV1aWRfdCAqcmVtb3RlX3V1aWQsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcxMi17XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MTM6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzE0LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03MTYtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MTc6XFx0eGQgPSB0Yl94ZG9tYWluX2FsbG9jKHN3LVxcdTAwM2V0YiwgXFx1MDAyNnN3LVxcdTAwM2VkZXYsIHJvdXRlLCBsb2NhbF91dWlkLCByZW1vdGVfdXVpZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03MTgtXFx0aWYgKCF4ZClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzIzLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzI0OlxcdHRiX3BvcnRfYXQocm91dGUsIHN3KS1cXHUwMDNleGRvbWFpbiA9IHhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzI1LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzI2OlxcdHRiX3hkb21haW5fYWRkKHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcyNy1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzMyLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzMzOnN0YXRpYyB2b2lkIHVwZGF0ZV94ZG9tYWluKHN0cnVjdCB0Yl94ZG9tYWluICp4ZCwgdTY0IHJvdXRlLCB1OCBsaW5rKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzM0LXtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzM5LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzQwOnN0YXRpYyB2b2lkIHJlbW92ZV94ZG9tYWluKHN0cnVjdCB0Yl94ZG9tYWluICp4ZClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTc0MS17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTc0NC1cXHRzdyA9IHRiX3RvX3N3aXRjaCh4ZC1cXHUwMDNlZGV2LnBhcmVudCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3NDU6XFx0dGJfcG9ydF9hdCh4ZC1cXHUwMDNlcm91dGUsIHN3KS1cXHUwMDNleGRvbWFpbiA9IE5VTEw7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03NDYtXFx0eGQtXFx1MDAzZWlzX3VucGx1Z2dlZCA9IHRydWU7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3NDc6XFx0dGJfeGRvbWFpbl9yZW1vdmUoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzQ4LX1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9NzUxPWljbV9mcl9kZXZpY2VfY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03NTktXFx0Ym9vbCBhdXRob3JpemVkID0gZmFsc2U7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3NjA6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzYxLVxcdHU4IGxpbmssIGRlcHRoO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy04NTAtXFx0LyogUmVtb3ZlIGV4aXN0aW5nIFhEb21haW4gY29ubmVjdGlvbiBpZiBmb3VuZCAqL1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6ODUxOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X2xpbmtfZGVwdGgodGIsIGxpbmssIGRlcHRoKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTg1Mi1cXHRpZiAoeGQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjg1MzpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo4NTQ6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtODU1LVxcdH1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9OTMyPXN0YXRpYyB2b2lkXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5MzM6aWNtX2ZyX3hkb21haW5fY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTM0LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzNTpcXHRjb25zdCBzdHJ1Y3QgaWNtX2ZyX2V2ZW50X3hkb21haW5fY29ubmVjdGVkICpwa2cgPVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTM2OlxcdFxcdChjb25zdCBzdHJ1Y3QgaWNtX2ZyX2V2ZW50X3hkb21haW5fY29ubmVjdGVkICopaGRyO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTM3OlxcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTkzOC1cXHRzdHJ1Y3QgdGJfc3dpdGNoICpzdztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTUyLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTUzOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3V1aWQodGIsIFxcdTAwMjZwa2ctXFx1MDAzZXJlbW90ZV91dWlkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk1NC1cXHRpZiAoeGQpIHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTYwLVxcdFxcdGlmICh4ZC1cXHUwMDNlZGVwdGggPT0gZGVwdGggXFx1MDAyNlxcdTAwMjYgeGRfcGh5X3BvcnQgPT0gcGh5X3BvcnQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk2MTpcXHRcXHRcXHR1cGRhdGVfeGRvbWFpbih4ZCwgcm91dGUsIGxpbmspO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTYyOlxcdFxcdFxcdHRiX3hkb21haW5fcHV0KHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk2My1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk3MS1cXHRcXHQgKi9cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk3MjpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5NzM6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTc0LVxcdH1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTgwLVxcdCAqL1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTgxOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X2xpbmtfZGVwdGgodGIsIGxpbmssIGRlcHRoKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk4Mi1cXHRpZiAoIXhkKSB7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk4Ni1cXHRcXHRpZiAoZHVhbF9saW5rKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTg3OlxcdFxcdFxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X2xpbmtfZGVwdGgodGIsIGR1YWxfbGluayxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk4OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXB0aCk7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk5MC1cXHRpZiAoeGQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk5MTpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5OTI6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTkzLVxcdH1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAxMi1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMTM6XFx0YWRkX3hkb21haW4oc3csIHJvdXRlLCBcXHUwMDI2cGtnLVxcdTAwM2Vsb2NhbF91dWlkLCBcXHUwMDI2cGtnLVxcdTAwM2VyZW1vdGVfdXVpZCwgbGluayxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMTQtXFx0XFx0ICAgIGRlcHRoKTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MTAxOD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTAxOTppY21fZnJfeGRvbWFpbl9kaXNjb25uZWN0ZWQoc3RydWN0IHRiICp0YiwgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMDIwLXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMjE6XFx0Y29uc3Qgc3RydWN0IGljbV9mcl9ldmVudF94ZG9tYWluX2Rpc2Nvbm5lY3RlZCAqcGtnID1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMjI6XFx0XFx0KGNvbnN0IHN0cnVjdCBpY21fZnJfZXZlbnRfeGRvbWFpbl9kaXNjb25uZWN0ZWQgKiloZHI7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDIzOlxcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMjQtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMjktXFx0ICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDMwOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3V1aWQodGIsIFxcdTAwMjZwa2ctXFx1MDAzZXJlbW90ZV91dWlkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMzEtXFx0aWYgKHhkKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDMyOlxcdFxcdHJlbW92ZV94ZG9tYWluKHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMzM6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAzNC1cXHR9XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTExMjc9c3RhdGljIGludCBpY21fdHJfY2hhbGxlbmdlX3N3aXRjaF9rZXkoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3N3aXRjaCAqc3csXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExNTctXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTU4OnN0YXRpYyBpbnQgaWNtX3RyX2FwcHJvdmVfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTU5LVxcdFxcdFxcdFxcdFxcdGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTE2MS17XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTYyOlxcdHN0cnVjdCBpY21fdHJfcGtnX2FwcHJvdmVfeGRvbWFpbl9yZXNwb25zZSByZXBseTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExNjM6XFx0c3RydWN0IGljbV90cl9wa2dfYXBwcm92ZV94ZG9tYWluIHJlcXVlc3Q7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTY0LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExODktXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTkwOlxcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgdHJ1ZSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTkxLVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTkzLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTE5NDpzdGF0aWMgaW50IGljbV90cl94ZG9tYWluX3RlYXJfZG93bihzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTk1LVxcdFxcdFxcdFxcdCAgICBpbnQgc3RhZ2UpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTk2LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExOTc6XFx0c3RydWN0IGljbV90cl9wa2dfZGlzY29ubmVjdF94ZG9tYWluX3Jlc3BvbnNlIHJlcGx5O1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTE5ODpcXHRzdHJ1Y3QgaWNtX3RyX3BrZ19kaXNjb25uZWN0X3hkb21haW4gcmVxdWVzdDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExOTktXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIxOS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMjA6c3RhdGljIGludCBpY21fdHJfZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKHN0cnVjdCB0YiAqdGIsIHN0cnVjdCB0Yl94ZG9tYWluICp4ZCxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMjEtXFx0XFx0XFx0XFx0XFx0ICAgaW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjI1LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTIyNjpcXHRyZXQgPSBpY21fdHJfeGRvbWFpbl90ZWFyX2Rvd24odGIsIHhkLCAxKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMjctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIzMC1cXHR1c2xlZXBfcmFuZ2UoMTAsIDUwKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMzE6XFx0cmV0ID0gaWNtX3RyX3hkb21haW5fdGVhcl9kb3duKHRiLCB4ZCwgMik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjMyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMzQtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjM1OlxcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgZmFsc2UpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIzNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MTI0MD1fX2ljbV90cl9kZXZpY2VfY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjQ3LVxcdHN0cnVjdCB0Yl9zd2l0Y2ggKnN3LCAqcGFyZW50X3N3O1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTI0ODpcXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjQ5LVxcdHU2NCByb3V0ZTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTI5Ni1cXHQvKiBYRG9tYWluIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2FtZSBhZGRyZXNzICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjk3OlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3JvdXRlKHRiLCByb3V0ZSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjk4LVxcdGlmICh4ZCkge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTI5OTpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzAwOlxcdFxcdHRiX3hkb21haW5fcHV0KHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzMDEtXFx0fVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0xMzY2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzY3OmljbV90cl94ZG9tYWluX2Nvbm5lY3RlZChzdHJ1Y3QgdGIgKnRiLCBjb25zdCBzdHJ1Y3QgaWNtX3BrZ19oZWFkZXIgKmhkcilcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzNjgte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM2OTpcXHRjb25zdCBzdHJ1Y3QgaWNtX3RyX2V2ZW50X3hkb21haW5fY29ubmVjdGVkICpwa2cgPVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM3MDpcXHRcXHQoY29uc3Qgc3RydWN0IGljbV90cl9ldmVudF94ZG9tYWluX2Nvbm5lY3RlZCAqKWhkcjtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzNzE6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM3Mi1cXHRzdHJ1Y3QgdGJfc3dpdGNoICpzdztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM3OS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzODA6XFx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfdXVpZCh0YiwgXFx1MDAyNnBrZy1cXHUwMDNlcmVtb3RlX3V1aWQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM4MS1cXHRpZiAoeGQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzODItXFx0XFx0aWYgKHhkLVxcdTAwM2Vyb3V0ZSA9PSByb3V0ZSkge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4MzpcXHRcXHRcXHR1cGRhdGVfeGRvbWFpbih4ZCwgcm91dGUsIDApO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4NDpcXHRcXHRcXHR0Yl94ZG9tYWluX3B1dCh4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMzg1LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM4Ny1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzODg6XFx0XFx0cmVtb3ZlX3hkb21haW4oeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4OTpcXHRcXHR0Yl94ZG9tYWluX3B1dCh4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMzkwLVxcdH1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzOTEtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzkyOlxcdC8qIEFuIGV4aXN0aW5nIHhkb21haW4gd2l0aCB0aGUgc2FtZSBhZGRyZXNzICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzkzOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3JvdXRlKHRiLCByb3V0ZSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMzk0LVxcdGlmICh4ZCkge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM5NTpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzk2OlxcdFxcdHRiX3hkb21haW5fcHV0KHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzOTctXFx0fVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDE1LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQxNjpcXHRhZGRfeGRvbWFpbihzdywgcm91dGUsIFxcdTAwMjZwa2ctXFx1MDAzZWxvY2FsX3V1aWQsIFxcdTAwMjZwa2ctXFx1MDAzZXJlbW90ZV91dWlkLCAwLCAwKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MTctXFx0dGJfc3dpdGNoX3B1dChzdyk7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTE0MjA9c3RhdGljIHZvaWRcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MjE6aWNtX3RyX3hkb21haW5fZGlzY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTQyMi17XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDIzOlxcdGNvbnN0IHN0cnVjdCBpY21fdHJfZXZlbnRfeGRvbWFpbl9kaXNjb25uZWN0ZWQgKnBrZyA9XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDI0OlxcdFxcdChjb25zdCBzdHJ1Y3QgaWNtX3RyX2V2ZW50X3hkb21haW5fZGlzY29ubmVjdGVkICopaGRyO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQyNTpcXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDI2LVxcdHU2NCByb3V0ZTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTQyOS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MzA6XFx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfcm91dGUodGIsIHJvdXRlKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MzEtXFx0aWYgKHhkKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDMyOlxcdFxcdHJlbW92ZV94ZG9tYWluKHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MzM6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTQzNC1cXHR9XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTE3MzU9c3RhdGljIHZvaWQgaWNtX2hhbmRsZV9ub3RpZmljYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzU2LVxcdFxcdGNhc2UgSUNNX0VWRU5UX1hET01BSU5fQ09OTkVDVEVEOlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTc1NzpcXHRcXHRcXHRpZiAodGJfaXNfeGRvbWFpbl9lbmFibGVkKCkpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNzU4OlxcdFxcdFxcdFxcdGljbS1cXHUwMDNleGRvbWFpbl9jb25uZWN0ZWQodGIsIG4tXFx1MDAzZXBrZyk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzU5LVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTc2MC1cXHRcXHRjYXNlIElDTV9FVkVOVF9YRE9NQUlOX0RJU0NPTk5FQ1RFRDpcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE3NjE6XFx0XFx0XFx0aWYgKHRiX2lzX3hkb21haW5fZW5hYmxlZCgpKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTc2MjpcXHRcXHRcXHRcXHRpY20tXFx1MDAzZXhkb21haW5fZGlzY29ubmVjdGVkKHRiLCBuLVxcdTAwM2Vwa2cpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTc2My1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTc3Ny1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE3Nzg6XFx0dGJfZG9tYWluX3VucmVnaXN0ZXJfdW5wbHVnZ2VkX3hkb21haW5zKHRiKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE3NzktfVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0yMDU2PXN0YXRpYyB2b2lkIGljbV91bnBsdWdfY2hpbGRyZW4oc3RydWN0IHRiX3N3aXRjaCAqc3cpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIwNjMtXFx0dGJfc3dpdGNoX2Zvcl9lYWNoX3BvcnQoc3csIHBvcnQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjIwNjQ6XFx0XFx0aWYgKHBvcnQtXFx1MDAzZXhkb21haW4pXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMDY1OlxcdFxcdFxcdHBvcnQtXFx1MDAzZXhkb21haW4tXFx1MDAzZWlzX3VucGx1Z2dlZCA9IHRydWU7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMDY2LVxcdFxcdGVsc2UgaWYgKHRiX3BvcnRfaGFzX3JlbW90ZShwb3J0KSlcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjEwMT1zdGF0aWMgdm9pZCBpY21fZnJlZV91bnBsdWdnZWRfY2hpbGRyZW4oc3RydWN0IHRiX3N3aXRjaCAqc3cpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIxMDUtXFx0dGJfc3dpdGNoX2Zvcl9lYWNoX3BvcnQoc3csIHBvcnQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjIxMDY6XFx0XFx0aWYgKHBvcnQtXFx1MDAzZXhkb21haW4gXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNleGRvbWFpbi1cXHUwMDNlaXNfdW5wbHVnZ2VkKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMTA3OlxcdFxcdFxcdHRiX3hkb21haW5fcmVtb3ZlKHBvcnQtXFx1MDAzZXhkb21haW4pO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MjEwODpcXHRcXHRcXHRwb3J0LVxcdTAwM2V4ZG9tYWluID0gTlVMTDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIxMDktXFx0XFx0fSBlbHNlIGlmICh0Yl9wb3J0X2hhc19yZW1vdGUocG9ydCkpIHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjEyMD1zdGF0aWMgdm9pZCBpY21fcmVzY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMTI5LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MjEzMDpcXHR0Yl9kb21haW5fdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbnModGIpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjEzMS19XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTI0MDE9c3RhdGljIGNvbnN0IHN0cnVjdCB0Yl9jbV9vcHMgaWNtX2ZyX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjQxMS1cXHQuZGlzY29ubmVjdF9wY2llX3BhdGhzID0gaWNtX2Rpc2Nvbm5lY3RfcGNpZV9wYXRocyxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjI0MTI6XFx0LmFwcHJvdmVfeGRvbWFpbl9wYXRocyA9IGljbV9mcl9hcHByb3ZlX3hkb21haW5fcGF0aHMsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyNDEzOlxcdC5kaXNjb25uZWN0X3hkb21haW5fcGF0aHMgPSBpY21fZnJfZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjQxNC19O1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0yNDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGJfY21fb3BzIGljbV9hcl9vcHMgPSB7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6MDAuMjAyNjk5MTg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTY3MjE2NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVGh1bmRlcmJvbHQgeGRvbWFpbiBDcmVhdGlvbioqXG5cbk9rYXksIHNvIGBjb25maWdmcy5jYCBpcyB0aGUga2V5IGZvciB0aHVuZGVyYm9sdCB4ZG9tYWlucywgaW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSAqYWxsb3dzKiB0aGUgY3JlYXRpb24gb2YgdGhlc2UgeGRvbWFpbnMuIEknbGwgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGNvZGUgdGhlcmUgdG8gY29uZmlybSBhbmQgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBhbmQgc2V0dXAgb2NjdXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjEwLjc2OTkxODgyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NDIzNjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkb21haW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjoxMC44MzA3Njc5MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNTMxMTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gVGh1bmRlcmJvbHQgQ29uZmlnRlMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgZXhwb3NlZCB2aWEgYGNvbmZpZ2ZzYCBmb3IgVGh1bmRlcmJvbHQgZGV2aWNlcy4gTGV0J3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmNgLiBUaGF0IGZpbGUgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGhhbmRsaW5nIHRoZSBgY29uZmlnZnNgIGludGVyZmFjZSBmb3IgVGh1bmRlcmJvbHQsIHNvIGl0J3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSBleHBlY3QgaXQnbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGF0dHJpYnV0ZXMgYW5kIHN0cnVjdHVyZXMgdGhhdCBhcmUgYmVpbmcgY3JlYXRlZCB1bmRlciB0aGUgaG9vZCwgYW5kIGhvdyB1c2Vyc3BhY2UgaXMgc3VwcG9zZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjoxNi4wNDYwODI1MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTAwMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ19pdGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtMTMtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jOjE0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB0Yl9yb290X2dyb3VwX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTE1LVxcdC5jdF9vd25lciA9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjoxNi4xMDg1ODY2NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyOTc0ODE0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYDpcblxuKipEaXNzZWN0aW5nIFRodW5kZXJib2x0IENvbmZpZ3VyYXRpb24gVGhyb3VnaCBjb25maWdmcyoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBkaWcgaW50byBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYC4gSSBleHBlY3QgdGhpcyBjb2RlIHRvIGJlIHRoZSBjcnVjaWFsIGludGVyZmFjZSBmb3IgaG93IHdlIGV4cG9zZSBUaHVuZGVyYm9sdCBkZXZpY2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZXJzcGFjZSwgbGlrZWx5IHRocm91Z2ggdGhlIGBjb25maWdmc2AgZmlsZXN5c3RlbS4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgY3JlYXRpb24gb2YgdmFyaW91cyBhdHRyaWJ1dGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoaW4gYGNvbmZpZ2ZzYCB0aGF0IHJlcHJlc2VudCBkaWZmZXJlbnQgYXNwZWN0cyBvZiBhIFRodW5kZXJib2x0IGNvbm5lY3Rpb24sIGxpa2UgcG9ydCBjb25maWd1cmF0aW9uLCBzZWN1cml0eSBsZXZlbHMsIGFuZCBwZXJoYXBzIGV2ZW4gcG93ZXIgbWFuYWdlbWVudCBwYXJhbWV0ZXJzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIGBjb25maWdmc2AuIEl0J2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhleSd2ZSBzdHJ1Y3R1cmVkIHRoZSBoaWVyYXJjaHkgb2YgdGhlIGV4cG9zZWQgbm9kZXMgYW5kIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3ZlIGRlYWx0IHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiBUaHVuZGVyYm9sdCdzIHNlY3VyaXR5IGZlYXR1cmVzIGFuZCBob3cgdGhhdCBtYXBzIHRvIHRoZSB1c2VyLWxldmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBob3QtcGx1Z2dpbmcgYW5kIGRldmljZSBlbnVtZXJhdGlvbiB0b28uXG5cbkknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3ZlIGltcGxlbWVudGVkIGFueSBzcGVjaWZpYyBhY2Nlc3MgY29udHJvbHMgb3IgcGVybWlzc2lvbnMgbWFuYWdlbWVudCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb24gb2YgY3JpdGljYWwgVGh1bmRlcmJvbHQgc2V0dGluZ3MsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgVGh1bmRlcmJvbHQgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIHN5bmNocm9ub3VzIGNvbnRleHQgb2YgdGhlIGBjb25maWdmc2AgaW50ZXJmYWNlLiBJJ2xsIGFsc28gYmUgdHJ5aW5nIHRvIHNwb3QgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGFueSBlbGVnYW50IHNvbHV0aW9ucyB0byBwYXJ0aWN1bGFybHkgdHJpY2t5IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIFRoaXMgc2hvdWxkIGJlIGFuIGlsbHVtaW5hdGluZyByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkxOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjI2LjQwNjA3MDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvbmZpZ0ZTIHN1cHBvcnRcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIEludGVsIENvcnBvcmF0aW9uXFxuICAgNjpcXHQgKiBBdXRob3I6IE1pa2EgV2VzdGVyYmVyZyBcXHUwMDNjbWlrYS53ZXN0ZXJiZXJnQGxpbnV4LmludGVsLmNvbVxcdTAwM2VcXG4gICA3OlxcdCAqL1xcbiAgIDg6XFx0XFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY29uZmlnZnMuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0I2luY2x1ZGUgXFxcInRiLmhcXFwiXFxuICAxMzpcXHRcXG4gIDE0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB0Yl9yb290X2dyb3VwX3R5cGUgPSB7XFxuICAxNTpcXHRcXHQuY3Rfb3duZXIgPSBUSElTX01PRFVMRSxcXG4gIDE2OlxcdH07XFxuICAxNzpcXHRcXG4gIDE4OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHRiX2NvbmZpZ2ZzID0ge1xcbiAgMTk6XFx0XFx0LnN1X2dyb3VwID0ge1xcbiAgMjA6XFx0XFx0XFx0LmNnX2l0ZW0gPSB7XFxuICAyMTpcXHRcXHRcXHRcXHQuY2lfbmFtZWJ1ZiA9IFxcXCJ0aHVuZGVyYm9sdFxcXCIsXFxuICAyMjpcXHRcXHRcXHRcXHQuY2lfdHlwZSA9IFxcdTAwMjZ0Yl9yb290X2dyb3VwX3R5cGUsXFxuICAyMzpcXHRcXHRcXHR9LFxcbiAgMjQ6XFx0XFx0fSxcXG4gIDI1OlxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdC8qKlxcbiAgMjg6XFx0ICogdGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAoKSAtIFJlZ2lzdGVyIFRodW5kZXJib2x0IENvbmZpZ0ZTIGdyb3VwXFxuICAyOTpcXHQgKiBAZ3JvdXA6IEdyb3VwIHRvIHJlZ2lzdGVyLlxcbiAgMzA6XFx0ICpcXG4gIDMxOlxcdCAqIFJlZ2lzdGVycyB0aGUgbmV3IEBncm91cCB1bmRlciBUaHVuZGVyYm9sdCBzdWJzeXN0ZW0gQ29uZmlnRlMuXFxuICAzMjpcXHQgKlxcbiAgMzM6XFx0ICogUmV0dXJuOiAwJSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZS5cXG4gIDM0OlxcdCAqL1xcbiAgMzU6XFx0aW50IHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxcbiAgMzY6XFx0e1xcbiAgMzc6XFx0XFx0cmV0dXJuIGNvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKFxcdTAwMjZ0Yl9jb25maWdmcy5zdV9ncm91cCwgZ3JvdXApO1xcbiAgMzg6XFx0fVxcbiAgMzk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXApO1xcbiAgNDA6XFx0XFxuICA0MTpcXHQvKipcXG4gIDQyOlxcdCAqIHRiX2NvbmZpZ2ZzX3VucmVnaXN0ZXJfZ3JvdXAoKSAtIFVucmVnaXN0ZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIGdyb3VwXFxuICA0MzpcXHQgKiBAZ3JvdXA6IEdyb3VwIHRvIHVucmVnaXN0ZXIuXFxuICA0NDpcXHQgKi9cXG4gIDQ1OlxcdHZvaWQgdGJfY29uZmlnZnNfdW5yZWdpc3Rlcl9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZ3JvdXAoZ3JvdXApO1xcbiAgNDg6XFx0fVxcbiAgNDk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodGJfY29uZmlnZnNfdW5yZWdpc3Rlcl9ncm91cCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdGludCB0Yl9jb25maWdmc19pbml0KHZvaWQpXFxuICA1MjpcXHR7XFxuICA1MzpcXHRcXHRjb25maWdfZ3JvdXBfaW5pdChcXHUwMDI2dGJfY29uZmlnZnMuc3VfZ3JvdXApO1xcbiAgNTQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2dGJfY29uZmlnZnMuc3VfbXV0ZXgpO1xcbiAgNTU6XFx0XFx0cmV0dXJuIGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShcXHUwMDI2dGJfY29uZmlnZnMpO1xcbiAgNTY6XFx0fVxcbiAgNTc6XFx0XFxuICA1ODpcXHR2b2lkIHRiX2NvbmZpZ2ZzX2V4aXQodm9pZClcXG4gIDU5OlxcdHtcXG4gIDYwOlxcdFxcdGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKFxcdTAwMjZ0Yl9jb25maWdmcyk7XFxuICA2MTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjI2LjQwNjE0MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNTAyMjQwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZ1bmN0aW9uOlxuXG4qKkRpZ2dpbmcgaW50byB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cCoqXG5cbkFscmlnaHQsIGB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cGAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLiBUaGF0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIHRvIHVzZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aG8gKnVzZXMqIHRoaXMgZnVuY3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzIHRvIHJlYWxseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSeKAmWxsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIHNlZSB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZHJpdmVyLCBhIGNvcmUgY29tcG9uZW50LCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGltZSB0byBicmVhayBvdXQgdGhlIGdyZXAsIG9yIHdoYXRldmVyIHN0YXRpYyBhbmFseXNpcyB0b29sIEkndmUgZ290IGF0IGhhbmQsIGFuZCBmaW5kIHRob3NlIGNhbGwgbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6MzYuNzU2MzY3ODMzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ2MTQ1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jPTE4PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHRiX2NvbmZpZ2ZzID0ge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTI3LS8qKlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYzoyODogKiB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cCgpIC0gUmVnaXN0ZXIgVGh1bmRlcmJvbHQgQ29uZmlnRlMgZ3JvdXBcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtMjktICogQGdyb3VwOiBHcm91cCB0byByZWdpc3Rlci5cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0zNC0gKi9cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM6MzU6aW50IHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0zNi17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtMzgtfVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYzozOTpFWFBPUlRfU1lNQk9MX0dQTCh0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTQwLVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYz0xNjQ4PXN0YXRpYyBpbnQgX19pbml0IHRic3RyZWFtX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMTY2NS1cXHRjb25maWdfZ3JvdXBfaW5pdChcXHUwMDI2dGJzdHJlYW1fZ3JvdXApO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmM6MTY2NjpcXHRyZXQgPSB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cChcXHUwMDI2dGJzdHJlYW1fZ3JvdXApO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMTY2Ny1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjozNy4yNTA5OTA5OThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NDczNjU3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgU3l6a2FsbGVyLVRyaWdnZXJlZCBUaHVuZGVyYm9sdCBCdWcqKlxuXG5Pa2F5LCBzbyBgc3RyZWFtLmNgIHVzZXMgaXQsIHRoYXQncyBhIGRhdGEgcG9pbnQuIEJ1dCBob2xkIG9uLCBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgIGhhcyBLVW5pdCB0ZXN0cy4gQW5kIEkga25vdyBLVW5pdCB0ZXN0cyAqY2FuKiBiZSBydW4gaW4gc3l6a2FsbGVyIGlmIHRoZXkncmUgY29tcGlsZWQgaW4sIHRob3VnaCBpdCdzIG5vdCB0aGUgbm9ybSBmb3Igc3l6a2FsbGVyIHRvIHRhcmdldCB0aGVtIGRpcmVjdGx5IGZvciBmdXp6aW5nLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGBzeXotY2x1c3RlcmAgaXMgdGhlIGF1dGhvciBvZiB0aGUgcmVwb3J0IG1lYW5zIHN5emthbGxlciAqZm91bmQqIGEgYnVnLCB3aGljaCBpcyB0aGUgaW1wb3J0YW50IHRha2Vhd2F5IGhlcmUuXG5cblNvLCBob3cgZXhhY3RseSAqZGlkKiBzeXprYWxsZXIgZ2V0IHRvIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2A/IFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgdG8gc2VlIGlmIHRoaXMgaXMgYSBLVW5pdCB0ZXN0IHRyaWdnZXIuXG5cbldhaXQsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgaXMgdGhlIFRodW5kZXJib2x0ICpuZXR3b3JraW5nKiBkcml2ZXIuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2U7IG5ldHdvcmtpbmcgd291bGQgYmUgYSBwcmltZSB0YXJnZXQgZm9yIHN5emthbGxlci4gSWYgc3l6a2FsbGVyIGZ1enplZCBpdCwgaXQgKm11c3QqIGJlIHJlYWNoYWJsZS5cblxuSG9sZCBvbiwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIHBzZXVkby1zeXNjYWxsIGZvciBUaHVuZGVyYm9sdD8gSSBuZWVkIHRvIGNoZWNrIHRoYXQuIE5vLCBJIGp1c3QgbG9va2VkLCBhbmQgdGhlcmUncyBubyBgc3l6X2AgcHNldWRvLXN5c2NhbGwgc3BlY2lmaWNhbGx5IGZvciBUaHVuZGVyYm9sdC4gVGhhdCdzIGEgY3VydmViYWxsLlxuXG5Pa2F5LCBtYXliZSBzeXprYWxsZXIgaXMgcmVhY2hpbmcgaXQgdGhyb3VnaCB0aGUgYGR1bW15YCBUaHVuZGVyYm9sdCBkcml2ZXI/IEEgbG90IG9mIGZ1enppbmcgZnJhbWV3b3JrcyB3aWxsIHVzZSBkdW1teSBkcml2ZXJzIGZvciB0ZXN0aW5nLiBJcyB0aGVyZSBldmVuIGEgZHVtbXkgZHJpdmVyPyBMZXQgbWUgY2hlY2sgYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSBpZiBpdCByZWdpc3RlcnMgYSBkdW1teSB0aHVuZGVyYm9sdCBjb250cm9sbGVyLiBUaGlzIG1pZ2h0IGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZXhlY3V0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjE2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjQ4LjA5ODM1ODk0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MDIxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdGh1bmRlcmJvbHQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM9MTg9c3RhdGljIGludCB0Yl9wb3J0X2VuYWJsZV90bXUoc3RydWN0IHRiX3BvcnQgKnBvcnQsIGJvb2wgZW5hYmxlKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYy00Ni1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jOjQ3OnN0YXRpYyB2b2lkIHRiX3BvcnRfZHVtbXlfcmVhZChzdHJ1Y3QgdGJfcG9ydCAqcG9ydClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTQ4LXtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNTEtXFx0ICogY29uZmlnIHNwYWNlIHRoZSByZWFkIGRhdGEgaXMgbm90IGNsZWFyZWQgb24gTFIuIFRvIGF2b2lkXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYzo1MjpcXHQgKiByZWFkaW5nIHN0YWxlIGRhdGEgb24gbmV4dCByZWFkIHBlcmZvcm0gb25lIGR1bW15IHJlYWQgYWZ0ZXJcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTUzLVxcdCAqIHBvcnQgY2FwYWJpbGl0aWVzIGFyZSB3YWxrZWQuXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTU1LVxcdGlmICh0Yl9zd2l0Y2hfaXNfbGlnaHRfcmlkZ2UocG9ydC1cXHUwMDNlc3cpKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYzo1NjpcXHRcXHR1MzIgZHVtbXk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYy01Ny1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jOjU4OlxcdFxcdHRiX3BvcnRfcmVhZChwb3J0LCBcXHUwMDI2ZHVtbXksIFRCX0NGR19QT1JULCAwLCAxKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTU5LVxcdH1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM9MTI0PWludCB0Yl9wb3J0X2ZpbmRfY2FwKHN0cnVjdCB0Yl9wb3J0ICpwb3J0LCBlbnVtIHRiX3BvcnRfY2FwIGNhcClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtMTMzLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM6MTM0OlxcdHRiX3BvcnRfZHVtbXlfcmVhZChwb3J0KTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTEzNS1cXHR0Yl9wb3J0X2VuYWJsZV90bXUocG9ydCwgZmFsc2UpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuYz0xMTczPWludCB0Yl9jZmdfZ2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHRiX2N0bCAqY3RsLCB1NjQgcm91dGUpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuYy0xMTc0LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jOjExNzU6XFx0dTMyIGR1bW15O1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM6MTE3NjpcXHRzdHJ1Y3QgdGJfY2ZnX3Jlc3VsdCByZXMgPSB0Yl9jZmdfcmVhZF9yYXcoY3RsLCBcXHUwMDI2ZHVtbXksIHJvdXRlLCAwLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICBUQl9DRkdfU1dJVENILCAwLCAxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Njo0OC4yMDIzODcxNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczOTU4NzA5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyNjc2NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MDUuNTk4MjU5OTM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY3MDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Ym5ldF9jb25uZWN0X2ZhaWxlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTU4OT1zdGF0aWMgaW50IHRibmV0X2FsbG9jX3R4X2J1ZmZlcnMoc3RydWN0IHRibmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjI4LVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo2Mjk6c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTYzMC17XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NjQzPXN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NjUtXFx0XFx0XFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cXHUwMDNleGQsIHJldCk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY2NjpcXHRcXHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NjctXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTcxMC1cXHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVxcdTAwM2V4ZCwgbmV0LVxcdTAwM2VyZW1vdGVfdHJhbnNtaXRfcGF0aCk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjcxMTpcXHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03MTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NzowNS42NTE5MzUyODZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk1MjU3ODUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjI3MTEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NzoxNS42MDQ1MTU3MDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDIyNTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRibmV0X2Nvbm5lY3RlZF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RodW5kZXJib2x0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MzY5PXN0YXRpYyB2b2lkIHRibmV0X3RlYXJfZG93bihzdHJ1Y3QgdGJuZXQgKm5ldCwgYm9vbCBzZW5kX2xvZ291dClcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zODktXFx0XFx0LyogVGVhciB0aGUgcGF0aHMgZG93biBiZWZvcmUgc3RvcHBpbmcgdGhlIHJpbmdzLiAgVGhpcyBtaXJyb3JzXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjM5MDpcXHRcXHQgKiB0Ym5ldF9jb25uZWN0ZWRfd29yaygpLCB3aGljaCBlbmFibGVzIHRoZSBwYXRocyBsYXN0IHNvIHRoZVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zOTEtXFx0XFx0ICogUnggcmluZyBpcyBwcmltZWQgYmVmb3JlIHBhY2tldHMgY2FuIGFycml2ZS4gIFN0b3BwaW5nIGFcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz02Mjk9c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjQyLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo2NDM6c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NDQte1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM4NS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2Vsb2dpbl93b3JrLCB0Ym5ldF9sb2dpbl93b3JrKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM4NjpcXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlY29ubmVjdGVkX3dvcmssIHRibmV0X2Nvbm5lY3RlZF93b3JrKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM4Ny1cXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlZGlzY29ubmVjdF93b3JrLCB0Ym5ldF9kaXNjb25uZWN0X3dvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NzoxNS42ODY5NDM4MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1ODcyMzQ1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyNzUzNywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjI4LjI3NDE4MTYyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTU0NTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCNF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Ym5ldF9jb25uZWN0ZWRfd29ya1wiLFxuICAgIFwidGJuZXRfY29ubmVjdF9mYWlsZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGluIGBkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNgIHRvIGFkZCBhIG5ldyBmdW5jdGlvbiBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIHdoaWNoIHJlc2V0cyBgbmV0LVxcdTAwM2Vsb2dpbl9zZW50ID0gZmFsc2VgIHdoZW4gY29ubmVjdGlvbiBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB0aHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlci4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGlmIFVTQjRfTkVUIGlzIGVuYWJsZWQgYW5kIHRodW5kZXJib2x0IG5ldHdvcmtpbmcgaXMgdXNlZC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYHRibmV0X2Nvbm5lY3RlZF93b3JrYCBhbmQgYHRibmV0X2Nvbm5lY3RfZmFpbGVkYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0I0X05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRibmV0X2Nvbm5lY3RlZF93b3JrXCIsXG4gICAgXCJ0Ym5ldF9jb25uZWN0X2ZhaWxlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXFx1MDAzZWxvZ2luX3NlbnQgPSBmYWxzZWAgd2hlbiBjb25uZWN0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaWYgVVNCNF9ORVQgaXMgZW5hYmxlZCBhbmQgdGh1bmRlcmJvbHQgbmV0d29ya2luZyBpcyB1c2VkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGFuZCBgdGJuZXRfY29ubmVjdF9mYWlsZWRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NzoyOC40MDk3MzU0MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjM3OTc3MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MjguNDEwNTQ1ODgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0MjM3MTYyNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI2MDc0NDlkZDI1MjkwYzQxZjE1MzJkMjU1N2FmNjY3OGE2ZDU2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQyOjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jIGIvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG5pbmRleCA5ODg5MzczMmJjNmU0Li5iNmFlYzIxNWE4ZTkzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNcbkBAIC02MjYsNiArNjI2LDIwIEBAIHN0YXRpYyBpbnQgdGJuZXRfYWxsb2NfdHhfYnVmZmVycyhzdHJ1Y3QgdGJuZXQgKm5ldClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0X2ZhaWxlZChzdHJ1Y3QgdGJuZXQgKm5ldClcbit7XG4rXHQvKlxuK1x0ICogTWFyayB0aGUgY29ubmVjdGlvbiBhcyBubyBsb25nZXIgZXN0YWJsaXNoZWQgc28gdGhhdFxuK1x0ICogdGJuZXRfdGVhcl9kb3duKCkgZG9lcyBub3QgcnVuIG92ZXIgdGhlIHVud2luZCB3ZSBqdXN0IGRpZC5cbitcdCAqIE9ubHkgbG9naW5fc2VudCBpcyBjbGVhcmVkOiBsb2dpbl9yZWNlaXZlZCByZWNvcmRzIHRoYXQgdGhlIHBlZXJcbitcdCAqIGhhcyBsb2dnZWQgaW4gd2l0aCB1cyBhbmQgY2FycmllcyB0aGUgdHJhbnNtaXQgcGF0aCBpdCBnYXZlIHVzLFxuK1x0ICogYW5kIG5vdGhpbmcgb24gdGhpcyBzaWRlIGNhbiBtYWtlIHRoZSBwZWVyIHNlbmQgdGhhdCBhZ2Fpbi5cbitcdCAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuZXQtXHUwMDNlY29ubmVjdGlvbl9sb2NrKTtcbitcdG5ldC1cdTAwM2Vsb2dpbl9zZW50ID0gZmFsc2U7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWNvbm5lY3Rpb25fbG9jayk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTtcbkBAIC02NDcsNiArNjYxLDkgQEAgc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cmV0ID0gdGJfeGRvbWFpbl9hbGxvY19pbl9ob3BpZChuZXQtXHUwMDNleGQsIG5ldC1cdTAwM2VyZW1vdGVfdHJhbnNtaXRfcGF0aCk7XG4gXHRpZiAocmV0ICE9IG5ldC1cdTAwM2VyZW1vdGVfdHJhbnNtaXRfcGF0aCkge1xuIFx0XHRuZXRkZXZfZXJyKG5ldC1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIGFsbG9jYXRlIFJ4IEhvcElEXFxuXCIpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMClcbitcdFx0XHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVx1MDAzZXhkLCByZXQpO1xuK1x0XHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNjkxLDYgKzcwOCw3IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHRiX3Jpbmdfc3RvcChuZXQtXHUwMDNlcnhfcmluZy5yaW5nKTtcbiBcdHRiX3Jpbmdfc3RvcChuZXQtXHUwMDNldHhfcmluZy5yaW5nKTtcbiBcdHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZChuZXQtXHUwMDNleGQsIG5ldC1cdTAwM2VyZW1vdGVfdHJhbnNtaXRfcGF0aCk7XG4rXHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjI4LjQxMDU0NzMzMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDIzNzEyOTI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUaHVuZGVyYm9sdCBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjb25uZWN0aW9uIHNldHVwIGFuZCB0ZWFyZG93biB3aXRoaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgYnVnIGZpeC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYSBuZXcgZnVuY3Rpb24sIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZChzdHJ1Y3QgdGJuZXQgKm5ldClgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IHNldHMgYG5ldC1cdTAwM2Vsb2dpbl9zZW50ID0gZmFsc2VgIHVuZGVyIGEgbXV0ZXguIFRoZSBwdXJwb3NlIGlzIGNydWNpYWwuIEl0J3MgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIG9yIGluY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9uIHdoZXJlIGB0Ym5ldF90ZWFyX2Rvd24oKWAgbWlnaHQgZXhlY3V0ZSBwcmVtYXR1cmVseSwgcG90ZW50aWFsbHkgdW53aW5kaW5nIHJlc291cmNlcyB0aGF0IGFyZSBhbHJlYWR5IGNsZWFuZWQgdXAgb3IgaW4gYW4gaW52YWxpZCBzdGF0ZS4gVGhlIGNvbW1lbnQgbWFrZXMgaXQgY2xlYXIgdGhhdCB3ZSBvbmx5IGNsZWFyIGBsb2dpbl9zZW50YCBiZWNhdXNlIGBsb2dpbl9yZWNlaXZlZGAgZGVhbHMgd2l0aCBhbiBlc3RhYmxpc2hlZCBzdGF0ZSBmcm9tIHRoZSBwZWVyLCB3aGljaCBpcyBpbW11dGFibGUgZnJvbSBvdXIgc2lkZS5cblxuVGhpcyBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYHRiX3hkb21haW5fYWxsb2NfaW5faG9waWRgIGZhaWxzIG9yIG90aGVyIGNvbm5lY3Rpb24gc2V0dXAgaXNzdWVzIGFyaXNlIHdpdGhpbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgY2hlY2sgYW5kIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGluIHRoZSBmYWlsdXJlIHBhdGggb2YgYHRiX3hkb21haW5fYWxsb2NfaW5faG9waWRgIHRvIGF2b2lkIGFueSByZXNvdXJjZSBsZWFrcyBpbiB0aG9zZSBjYXNlcy5cblxuTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgaXMgYWRkcmVzc2luZyBhIHJlc291cmNlIGxlYWsgb3IgYSBjbGFzc2ljIHN0YXRlIG1hY2hpbmUgYnVnIOKAkyBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHNvbWUga2luZCBvZiBpbnZhbGlkIHN0YXRlIHRyYW5zaXRpb24uIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGltbWVkaWF0ZWx5IHRoYXQgc2NyZWFtcyBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuXCIgSSBuZWVkIHRvIGJlIHRob3JvdWdoIHRob3VnaCwgc28gSSdsbCByZXZpZXcgYWdhaW46IFRoZSBjb2RlIGp1c3Qgc2V0cyBhIGJvb2xlYW4gZmxhZyBhbmQgY2FsbHMgYHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZGAgd2hpY2ggYXJlIHZlcnkgc3RhbmRhcmQgb3BlcmF0aW9ucyBpbiB0aGVzZSBjb250ZXh0cy5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBJJ20gY29uZmlkZW50IHRoYXQgS0FTQU4vTE9DS0RFUC9ldGMuIHdvdWxkIGJlIHdlbGwtc3VpdGVkIHRvIGNhdGNoIGFueSBlcnJvcnMgaGVyZS4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhpcyBwYXRjaCBkb2Vzbid0IGFwcGVhciB0byBpbnRyb2R1Y2UgYW55IG5ldyBhcmVhcyBmb3IgS01TQU4gdG8gYmUgY29uY2VybmVkIHdpdGguXG5cblRoZXJlZm9yZSwgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgYSBmb2N1c2VkIHN0YXRlIG1hY2hpbmUgY29ycmVjdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgdGhyb3VnaCBjbGVhcmluZyBvZiBhIGJvb2xlYW4gZmxhZyBvbiBjb25uZWN0aW9uIGZhaWx1cmUsIGFzIHdlbGwgYXMgZml4aW5nIHRoZSByZWxlYXNlIG9mIHJlc291cmNlcyBvbiBIb3BJRCBhbGxvY2F0aW9uIGZhaWx1cmUuIEl0IGFkZHJlc3NlcyByZXNvdXJjZSBsZWFrcyBvciBpbmNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbnMuIEl0IGRvZXMgKm5vdCogaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucyBvciBkYXRhIGNvcGllcyB0aGF0IG5lZWQgdG8gYmUgdGVzdGVkIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGZpeCBkb2Vzbid0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIHBhdGNoJ3MgY29ycmVjdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODcsIk91dHB1dFRva2VucyI6MTU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6NTIuNjQ3NjgwODQzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzdGF0ZSBtYWNoaW5lIGlzc3VlIGluIHRoZSBUaHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlciBieSBjbGVhcmluZyB0aGUgYGxvZ2luX3NlbnRgIGZsYWcgd2hlbiB0aGUgY29ubmVjdGlvbiBzZXR1cCBmYWlscywgcHJldmVudGluZyBgdGJuZXRfdGVhcl9kb3duKClgIGZyb20gaW5jb3JyZWN0bHkgdW53aW5kaW5nIGFscmVhZHkgcmVsZWFzZWQgcmVzb3VyY2VzLiBJdCBhbHNvIGFkZHMgYSBtaXNzaW5nIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGlmIGl0cyBhbGxvY2F0aW9uIHJldHVybnMgYW4gdW5leHBlY3RlZCB2YWxpZCBJRC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIGludmFsaWQgc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfh2mx[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 09:41:08 +0000 UTC FinishedAt: 2026-08-10 09:48:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB4_NET" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "db2ddb87143519e20a95aa36c60b36107b736a58", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB4_NET" ], "series_id": "a6b3b063-29db-42a8-bd26-e858657f04c7" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tbnet_connected_work", "tbnet_connect_failed" ], "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+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Nm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQjRfTkVUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGJuZXRfY29ubmVjdGVkX3dvcmsmIzM0OywKICAgICYjMzQ7dGJuZXRfY29ubmVjdF9mYWlsZWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlYCB3aGVuIGNvbm5lY3Rpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGh1bmRlcmJvbHQgbmV0d29yayBkcml2ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBVU0I0X05FVCBpcyBlbmFibGVkIGFuZCB0aHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIHVzZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgYW5kIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MjYwNzQ0OWRkMjUyOTBjNDFmMTUzMmQyNTU3YWY2Njc4YTZkNTYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDI6MTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jIGIvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG5pbmRleCA5ODg5MzczMmJjNmU0Li5iNmFlYzIxNWE4ZTkzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNcbkBAIC02MjYsNiAmIzQzOzYyNiwyMCBAQCBzdGF0aWMgaW50IHRibmV0X2FsbG9jX3R4X2J1ZmZlcnMoc3RydWN0IHRibmV0ICpuZXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNYXJrIHRoZSBjb25uZWN0aW9uIGFzIG5vIGxvbmdlciBlc3RhYmxpc2hlZCBzbyB0aGF0XG4mIzQzO1x0ICogdGJuZXRfdGVhcl9kb3duKCkgZG9lcyBub3QgcnVuIG92ZXIgdGhlIHVud2luZCB3ZSBqdXN0IGRpZC5cbiYjNDM7XHQgKiBPbmx5IGxvZ2luX3NlbnQgaXMgY2xlYXJlZDogbG9naW5fcmVjZWl2ZWQgcmVjb3JkcyB0aGF0IHRoZSBwZWVyXG4mIzQzO1x0ICogaGFzIGxvZ2dlZCBpbiB3aXRoIHVzIGFuZCBjYXJyaWVzIHRoZSB0cmFuc21pdCBwYXRoIGl0IGdhdmUgdXMsXG4mIzQzO1x0ICogYW5kIG5vdGhpbmcgb24gdGhpcyBzaWRlIGNhbiBtYWtlIHRoZSBwZWVyIHNlbmQgdGhhdCBhZ2Fpbi5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNm5ldC1cdTAwM2Vjb25uZWN0aW9uX2xvY2spO1xuJiM0MztcdG5ldC1cdTAwM2Vsb2dpbl9zZW50ID0gZmFsc2U7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2Vjb25uZWN0aW9uX2xvY2spO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTtcbkBAIC02NDcsNiAmIzQzOzY2MSw5IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJldCA9IHRiX3hkb21haW5fYWxsb2NfaW5faG9waWQobmV0LVx1MDAzZXhkLCBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xuIFx0aWYgKHJldCAhPSBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpIHtcbiBcdFx0bmV0ZGV2X2VycihuZXQtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gYWxsb2NhdGUgUnggSG9wSURcXG5cJiMzNDspO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4mIzQzO1x0XHRcdHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZChuZXQtXHUwMDNleGQsIHJldCk7XG4mIzQzO1x0XHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNjkxLDYgJiM0Mzs3MDgsNyBAQCBzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0Yl9yaW5nX3N0b3AobmV0LVx1MDAzZXJ4X3JpbmcucmluZyk7XG4gXHR0Yl9yaW5nX3N0b3AobmV0LVx1MDAzZXR4X3JpbmcucmluZyk7XG4gXHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVx1MDAzZXhkLCBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xuJiM0MztcdHRibmV0X2Nvbm5lY3RfZmFpbGVkKG5ldCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHRibmV0X2xvZ2luX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0I0X05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RibmV0X2Nvbm5lY3RlZF93b3JrJiMzNDssCiAgICAmIzM0O3RibmV0X2Nvbm5lY3RfZmFpbGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlYCB3aGVuIGNvbm5lY3Rpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGh1bmRlcmJvbHQgbmV0d29yayBkcml2ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBVU0I0X05FVCBpcyBlbmFibGVkIGFuZCB0aHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIHVzZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgYW5kIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjYwNzQ0OWRkMjUyOTBjNDFmMTUzMmQyNTU3YWY2Njc4YTZkNTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDI6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMKaW5kZXggOTg4OTM3MzJiYzZlNC4uYjZhZWMyMTVhOGU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYwpAQCAtNjI2LDYgJiM0Mzs2MjYsMjAgQEAgc3RhdGljIGludCB0Ym5ldF9hbGxvY190eF9idWZmZXJzKHN0cnVjdCB0Ym5ldCAqbmV0KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNYXJrIHRoZSBjb25uZWN0aW9uIGFzIG5vIGxvbmdlciBlc3RhYmxpc2hlZCBzbyB0aGF0CiYjNDM7CSAqIHRibmV0X3RlYXJfZG93bigpIGRvZXMgbm90IHJ1biBvdmVyIHRoZSB1bndpbmQgd2UganVzdCBkaWQuCiYjNDM7CSAqIE9ubHkgbG9naW5fc2VudCBpcyBjbGVhcmVkOiBsb2dpbl9yZWNlaXZlZCByZWNvcmRzIHRoYXQgdGhlIHBlZXIKJiM0MzsJICogaGFzIGxvZ2dlZCBpbiB3aXRoIHVzIGFuZCBjYXJyaWVzIHRoZSB0cmFuc21pdCBwYXRoIGl0IGdhdmUgdXMsCiYjNDM7CSAqIGFuZCBub3RoaW5nIG9uIHRoaXMgc2lkZSBjYW4gbWFrZSB0aGUgcGVlciBzZW5kIHRoYXQgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmV0LSZndDtjb25uZWN0aW9uX2xvY2spOwomIzQzOwluZXQtJmd0O2xvZ2luX3NlbnQgPSBmYWxzZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmV0LSZndDtjb25uZWN0aW9uX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTsKQEAgLTY0Nyw2ICYjNDM7NjYxLDkgQEAgc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXJldCA9IHRiX3hkb21haW5fYWxsb2NfaW5faG9waWQobmV0LSZndDt4ZCwgbmV0LSZndDtyZW1vdGVfdHJhbnNtaXRfcGF0aCk7CiAJaWYgKHJldCAhPSBuZXQtJmd0O3JlbW90ZV90cmFuc21pdF9wYXRoKSB7CiAJCW5ldGRldl9lcnIobmV0LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIFJ4IEhvcElEXG4mIzM0Oyk7CiYjNDM7CQlpZiAocmV0ICZndDs9IDApCiYjNDM7CQkJdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC0mZ3Q7eGQsIHJldCk7CiYjNDM7CQl0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpOwogCQlyZXR1cm47CiAJfQogCkBAIC02OTEsNiAmIzQzOzcwOCw3IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAl0Yl9yaW5nX3N0b3AobmV0LSZndDtyeF9yaW5nLnJpbmcpOwogCXRiX3Jpbmdfc3RvcChuZXQtJmd0O3R4X3JpbmcucmluZyk7CiAJdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC0mZ3Q7eGQsIG5ldC0mZ3Q7cmVtb3RlX3RyYW5zbWl0X3BhdGgpOwomIzQzOwl0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpOwogfQogCiBzdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM5MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDI5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBUaHVuZGVyYm9sdCBOZXR3b3JraW5nIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGluIGBkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNgLiBJdCBzZWVtcyB0aGV5JiMzOTt2ZSBhZGRlZCBhIG5ldyBmdW5jdGlvbiBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIGFuZCBhcmUgY2FsbGluZyBpdCBmcm9tIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AuIFRoZXkmIzM5O3ZlIGFsc28gYWRkZWQgdGhpcyBjb25kaXRpb25hbCBgaWYgKHJldCAmZ3Q7PSAwKSB0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LSZndDt4ZCwgcmV0KTtgIGJlZm9yZSBjYWxsaW5nIHRoYXQgZmFpbHVyZSBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHRibmV0X2Nvbm5lY3RlZF93b3JrYCBpcyBhbGwgYWJvdXQgYW5kIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eSB3aXRoaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmtpbmcgY29udGV4dC4KClRodW5kZXJib2x0IG5ldHdvcmtpbmcsIHJpZ2h0LCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgaGFyZHdhcmUtc3BlY2lmaWMuIEkmIzM5O20gdGhpbmtpbmcsIGNvdWxkIHdlIHBvdGVudGlhbGx5IGVtdWxhdGUgdGhpcywgb3IgZXZlbiBmdXp6IGl0PyBIYW5nIG9uLCB0aG91Z2guIFRodW5kZXJib2x0IG5ldHdvcmtpbmcgKnJlcXVpcmVzKiBUaHVuZGVyYm9sdCBoYXJkd2FyZS4gVGhhdCYjMzk7cyBhIHN0aWNraW5nIHBvaW50LiBTdGFuZGFyZCBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIFRodW5kZXJib2x0IGNvbnRyb2xsZXIsIGRvZXMgaXQ/IE5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayBpZiBRRU1VIGhhcyAqYW55KiBUaHVuZGVyYm9sdCBlbXVsYXRpb24gYXQgYWxsLCBvciBpZiB0aGlzIGlzIHB1cmVseSBoYXJkd2FyZS1kZXBlbmRlbnQuCgpSaWdodCwgYmFjayB0byB0aGUgZHJpdmVyIC0gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AuIE9rYXksIHNvLCBpcyB0aGlzIGV2ZW4gd29ydGggZ29pbmcgYWZ0ZXIgd2l0aCBmdXp6aW5nPyBCZWNhdXNlIGlmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgZW11bGF0ZWQsIGl0JiMzOTtzIGEgbm9uLXN0YXJ0ZXIuIEFscmlnaHQsIFFFTVUgY29uZmlybWVkLCBpdCBkb2VzbiYjMzk7dCBlbXVsYXRlIFRodW5kZXJib2x0IGNvbnRyb2xsZXJzLiBTbyB0aGF0JiMzOTtzIG91dC4KCldhaXQgYSBzZWNvbmQsIG9rYXksIFRodW5kZXJib2x0ICppcyogUENJZS1iYXNlZCwgYnV0IFRodW5kZXJib2x0IG5ldHdvcmtpbmcgaXMgYSAqc29mdHdhcmUqIHByb3RvY29sIGxheWVyZWQgb24gdG9wIG9mIFRodW5kZXJib2x0IFhEb21haW4gY29ubmVjdGlvbnMuIEhtbSwgdGhhdCYjMzk7cyBhIGRpZmZlcmVudCBhbmdsZS4gQ2FuIHN5emthbGxlciBmdXp6IFRodW5kZXJib2x0IFhEb21haW4/IFRoYXQmIzM5O3MgYSBwb3NzaWJpbGl0eS4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBzeXprYWxsZXIgc3VwcG9ydCBmb3IgVGh1bmRlcmJvbHQsIHNwZWNpZmljYWxseSB0aGUgWERvbWFpbiBpbnRlcmZhY2UuIE5lZWQgdG8gc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBleGlzdGluZyBncm91bmR3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RodW5kZXJib2x0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWc9Mj1jb25maWcgVVNCNF9ORVRcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnLTExLVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmVcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L0tjb25maWc6MTI6XHQgIGNhbGxlZCB0aHVuZGVyYm9sdF9uZXQuXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvTWFrZWZpbGUtMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19VU0I0X05FVCkgOj0gdGh1bmRlcmJvbHRfbmV0Lm9cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L01ha2VmaWxlOjM6dGh1bmRlcmJvbHRfbmV0LW9ianMgOj0gbWFpbi5vIHRyYWNlLm9cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L01ha2VmaWxlLTQtXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyMTojaW5jbHVkZSBcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXHUwMDNlXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvdXVpZC5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQzLSNkZWZpbmUgVEJORVRfTUFYX1BBWUxPQURfU0laRVx0XFxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0NDpcdChUQk5FVF9GUkFNRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIpKVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQ1LS8qIFJ4IHBhY2tldHMgbmVlZCB0byBob2xkIHNwYWNlIGZvciBza2Jfc2hhcmVkX2luZm8gKi9cbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNTMtLyoqXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NTQ6ICogc3RydWN0IHRodW5kZXJib2x0X2lwX2ZyYW1lX2hlYWRlciAtIEhlYWRlciBmb3IgZWFjaCBUaHVuZGVyYm9sdCBmcmFtZVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTU1LSAqIEBmcmFtZV9zaXplOiBzaXplIG9mIHRoZSBkYXRhIHdpdGggdGhlIGZyYW1lXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTYzLSAqL1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY0OnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIge1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY1LVx0X19sZTMyIGZyYW1lX3NpemU7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTcwLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjcxOmVudW0gdGh1bmRlcmJvbHRfaXBfZnJhbWVfcGRmIHtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03Mi1cdFRCSVBfUERGX0ZSQU1FX1NUQVJUID0gMSxcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzUtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NzY6ZW51bSB0aHVuZGVyYm9sdF9pcF90eXBlIHtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03Ny1cdFRCSVBfTE9HSU4sXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTgyLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjgzOnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIge1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTg0LVx0dTMyIHJvdXRlX2hpO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy05Ny1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo5ODpzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfbG9naW4ge1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjk5Olx0c3RydWN0IHRodW5kZXJib2x0X2lwX2hlYWRlciBoZHI7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTAwLVx0dTMyIHByb3RvX3ZlcnNpb247XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEwNi1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMDc6c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luX3Jlc3BvbnNlIHtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMDg6XHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfaGVhZGVyIGhkcjtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMDktXHR1MzIgc3RhdHVzO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTQtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTE1OnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9sb2dvdXQge1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjExNjpcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgaGRyO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTExNy19O1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTExOC1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMTk6c3RydWN0IHRodW5kZXJib2x0X2lwX3N0YXR1cyB7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTIwOlx0c3RydWN0IHRodW5kZXJib2x0X2lwX2hlYWRlciBoZHI7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTIxLVx0dTMyIHN0YXR1cztcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTgyPXN0cnVjdCB0Ym5ldCB7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE5OS1cdHN0cnVjdCB3b3JrX3N0cnVjdCBkaXNjb25uZWN0X3dvcms7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjAwOlx0c3RydWN0IHRodW5kZXJib2x0X2lwX2ZyYW1lX2hlYWRlciByeF9oZHI7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjAxLVx0c3RydWN0IHRibmV0X3JpbmcgcnhfcmluZztcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MjIwPU1PRFVMRV9QQVJNX0RFU0MoZTJlLCBcJiMzNDtVU0I0TkVUIGZ1bGwgZW5kLXRvLWVuZCBmbG93IGNvbnRyb2wgKGRlZmF1bHQ6IHRydWUpXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yMjEtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjIyOnN0YXRpYyB2b2lkIHRibmV0X2ZpbGxfaGVhZGVyKHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgKmhkciwgdTY0IHJvdXRlLFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTIyMy1cdHU4IHNlcXVlbmNlLCBjb25zdCB1dWlkX3QgKmluaXRpYXRvcl91dWlkLCBjb25zdCB1dWlkX3QgKnRhcmdldF91dWlkLFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjIyNDpcdGVudW0gdGh1bmRlcmJvbHRfaXBfdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSwgdTMyIGNvbW1hbmRfaWQpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjI1LXtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MjQyPXN0YXRpYyBpbnQgdGJuZXRfbG9naW5fcmVzcG9uc2Uoc3RydWN0IHRibmV0ICpuZXQsIHU2NCByb3V0ZSwgdTggc2VxdWVuY2UsXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI0NC17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjQ1Olx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luX3Jlc3BvbnNlIHJlcGx5O1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI0Ni1cdHN0cnVjdCB0Yl94ZG9tYWluICp4ZCA9IG5ldC1cdTAwM2V4ZDtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MjU5PXN0YXRpYyBpbnQgdGJuZXRfbG9naW5fcmVxdWVzdChzdHJ1Y3QgdGJuZXQgKm5ldCwgdTggc2VxdWVuY2UpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjYwLXtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyNjE6XHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfbG9naW5fcmVzcG9uc2UgcmVwbHk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjYyOlx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luIHJlcXVlc3Q7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjYzLVx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gbmV0LVx1MDAzZXhkO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0yNzk9c3RhdGljIGludCB0Ym5ldF9sb2dvdXRfcmVzcG9uc2Uoc3RydWN0IHRibmV0ICpuZXQsIHU2NCByb3V0ZSwgdTggc2VxdWVuY2UsXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI4MS17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjgyOlx0c3RydWN0IHRodW5kZXJib2x0X2lwX3N0YXR1cyByZXBseTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yODMtXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQgPSBuZXQtXHUwMDNleGQ7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTI5Mz1zdGF0aWMgaW50IHRibmV0X2xvZ291dF9yZXF1ZXN0KHN0cnVjdCB0Ym5ldCAqbmV0KVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI5NC17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6Mjk1Olx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ291dCByZXF1ZXN0O1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjI5NjpcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9zdGF0dXMgcmVwbHk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjk3LVx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gbmV0LVx1MDAzZXhkO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz00MjU9c3RhdGljIGludCB0Ym5ldF9oYW5kbGVfcGFja2V0KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDI2LXtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0Mjc6XHRjb25zdCBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfbG9naW4gKnBrZyA9IGJ1ZjtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy00MjgtXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGRhdGE7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQzNC1cdC8qIE1ha2Ugc3VyZSB0aGUgcGFja2V0IGlzIGZvciB1cyAqL1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjQzNTpcdGlmIChzaXplIFx1MDAzYyBzaXplb2Yoc3RydWN0IHRodW5kZXJib2x0X2lwX2hlYWRlcikpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDM2LVx0XHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NzU2PXN0YXRpYyBib29sIHRibmV0X2NoZWNrX2ZyYW1lKHN0cnVjdCB0Ym5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgdGJuZXRfZnJhbWUgKnRmLFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc1NzpcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyICpoZHIpXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzU4LXtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9ODMxPXN0YXRpYyBpbnQgdGJuZXRfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTgzOC1cdHdoaWxlIChyeF9wYWNrZXRzIFx1MDAzYyBidWRnZXQpIHtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo4Mzk6XHRcdGNvbnN0IHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIgKmhkcjtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy04NDAtXHRcdHVuc2lnbmVkIGludCBoZHJfc2l6ZSA9IHNpemVvZigqaGRyKTtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTAyMT1zdGF0aWMgYm9vbCB0Ym5ldF94bWl0X2NzdW1fYW5kX21hcChzdHJ1Y3QgdGJuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTAyMy17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTAyNDpcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIgKmhkciA9IHBhZ2VfYWRkcmVzcyhmcmFtZXNbMF0tXHUwMDNlcGFnZSk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTAyNS1cdHN0cnVjdCBkZXZpY2UgKmRtYV9kZXYgPSB0Yl9yaW5nX2RtYV9kZXZpY2UobmV0LVx1MDAzZXR4X3JpbmcucmluZyk7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTExMzY9c3RhdGljIG5ldGRldl90eF90IHRibmV0X3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTE0MS1cdHUxNiBmcmFtZV9pZCA9IGF0b21pY19yZWFkKFx1MDAyNm5ldC1cdTAwM2VmcmFtZV9pZCk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTE0MjpcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIgKmhkcjtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTQzLVx0dW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzOTYtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM5NzpcdHN0cmNweShkZXYtXHUwMDNlbmFtZSwgXCYjMzQ7dGh1bmRlcmJvbHQlZFwmIzM0Oyk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM5OC1cdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dGJuZXRfbmV0ZGV2X29wcztcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTQxNi1cdGRldi1cdTAwM2VmZWF0dXJlcyA9IGRldi1cdTAwM2Vod19mZWF0dXJlcyB8IE5FVElGX0ZfSElHSERNQTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxNDE3Olx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIpO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE0MTgtXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTE0OTU9c3RhdGljIHN0cnVjdCB0Yl9zZXJ2aWNlX2RyaXZlciB0Ym5ldF9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE0OTctXHRcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjE0OTg6XHRcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHQtbmV0XCYjMzQ7LFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE0OTktXHRcdC5wbSA9IHBtX3NsZWVwX3B0cihcdTAwMjZ0Ym5ldF9wbV9vcHMpLFxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L3RyYWNlLmgtOS0jdW5kZWYgVFJBQ0VfU1lTVEVNXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC90cmFjZS5oOjEwOiNkZWZpbmUgVFJBQ0VfU1lTVEVNIHRodW5kZXJib2x0X25ldFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvdHJhY2UuaC0xMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzQxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFRodW5kZXJib2x0IE5ldHdvcmtpbmcgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbiBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYC4gSXQmIzM5O3MgYWRkaW5nIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgYW5kIGNhbGxpbmcgaXQgZnJvbSBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLiBUaGUgaWRlYSBpcyB0byByZXNldCBgbmV0LSZndDtsb2dpbl9zZW50YCBvbiBjb25uZWN0aW9uIGZhaWx1cmUsIHdoaWNoIG1ha2VzIHNlbnNlIHRvIGF2b2lkIGlzc3VlcyB3aXRoIGB0Ym5ldF90ZWFyX2Rvd24oKWAuIEJ1dCBob2xkIG9uLCB0aGUgZmFjdCB0aGF0IHRoaXMgaXMgKlRodW5kZXJib2x0KiBuZXR3b3JraW5nIGhhcyBtZSB0aGlua2luZy4gSXMgdGhpcyBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBUaHVuZGVyYm9sdCByZXF1aXJlcyBzcGVjaWZpYyBoYXJkd2FyZSwgcmlnaHQ/IFBDSWUvVVNCNCwgaXNuJiMzOTt0IGl0PwoKUUVNVSBkb2VzbiYjMzk7dCBuYXRpdmVseSBlbXVsYXRlIFRodW5kZXJib2x0L1VTQjQuIEJ1dCB3YWl0LCBkb2VzIGl0IGhhdmUgc29tZSBzb2Z0d2FyZSBlbXVsYXRpb24gSSYjMzk7bSBub3QgcmVtZW1iZXJpbmc/IE5vLCB0aGVyZSBpc24mIzM5O3QgYSBgbWFjODAyMTFfaHdzaW1gIGVxdWl2YWxlbnQgZm9yIFRodW5kZXJib2x0LiBPa2F5LCB3aGF0IGFib3V0IHN5emthbGxlcj8gRG9lcyBpdCBldmVuICpyZWFjaCogVGh1bmRlcmJvbHQgY29kZT8gSSB2YWd1ZWx5IHJlbWVtYmVyIHNvbWV0aGluZy4uLiBjb3VsZCBzeXprYWxsZXIgZnV6eiBUaHVuZGVyYm9sdCB2aWEgVVNCIG9yIFBDST8gSXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgIGJ1dCB0aGF0JiMzOTtzIGZvciBVU0IgaW4gZ2VuZXJhbC4gSXMgdGhlcmUgYSBgc3l6X2AgcHNldWRvLXN5c2NhbGwgc3BlY2lmaWNhbGx5IGZvciBUaHVuZGVyYm9sdD8KClRoZSBjb250ZXh0IHN1Z2dlc3RzIHRoYXQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbiBsaWtlIFFFTVUgYXJlIG91dCBvZiBzY29wZS4gQnV0IFRodW5kZXJib2x0Li4uaXQmIzM5O3MgUENJZS9VU0I0LiBTbywgaXMgaXQgKmFjdHVhbGx5KiBmdXp6ZWQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHJlYWNoYWJsZS4gTGV0JiMzOTtzIGxvb2sgZm9yIGB0aHVuZGVyYm9sdGAgaW4gc3l6a2FsbGVyJiMzOTtzIGRlc2NyaXB0aW9ucy4gT3IgZXZlbiBiZXR0ZXIsIGxldCYjMzk7cyBqdXN0IHNlZSBpZiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGlzIHJlYWNoYWJsZS4gSXQmIzM5O3MgYSB3b3JrcXVldWUgZnVuY3Rpb24sIHNvIGl0IG11c3QgYmUgdHJpZ2dlcmVkIGJ5ICpzb21ldGhpbmcqLiBNYXliZSBgVVNCNF9ORVRgIGlzIGZ1enplZCBzb21laG93PwoKSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBUaHVuZGVyYm9sdCBjb2RlIGluIFFFTVUuIEFwcGxlIGhhcyBUaHVuZGVyYm9sdCBjb250cm9sbGVycyBidXQgdGhhdCBzdGlsbCB1c3VhbGx5IHJlcXVpcmVzIHNwZWNpZmljIFBDSWUgaGFyZHdhcmUuIFdhaXQsIHN5emthbGxlciYjMzk7cyBjb21taXQgbWVzc2FnZSBtZW50aW9ucyAmIzM0O3N5ei1jbHVzdGVyJiMzNDsuIFNvLCBzeXprYWxsZXIgaXMgKmFjdHVhbGx5KiBmdXp6aW5nIGl0IG9yICpoYXMqIGZvdW5kIGEgYnVnIGhlcmUgYW5kIGlzIHRlc3RpbmcgaXQhIE1heWJlIHN5emthbGxlciBjYW4gcmVhY2ggaXQgaWYgdGhlcmUmIzM5O3MgYSBzb2Z0d2FyZSBkcml2ZXIsIG9yIG1heWJlIGl0JiMzOTtzIGV4cG9zZWQgdmlhIFVTQjQgYW5kIGZ1enplZCB0aHJvdWdoIGEgVVNCIGR1bW15IEhDRCBvciBzaW1pbGFyLiBMZXQmIzM5O3MgZGlnIGRlZXBlci4gSXMgdGhlcmUgYSBUaHVuZGVyYm9sdCBLVW5pdCB0ZXN0IG9yIHNvbWUga2luZCBvZiBzb2Z0d2FyZSByb3V0ZXIgZm9yIHRoaXMgc3R1ZmY/IExldCYjMzk7cyBjaGVjayB0aGUgYGRyaXZlcnMvdGh1bmRlcmJvbHQvYCBkaXJlY3Rvcnkgc3BlY2lmaWNhbGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RodW5kZXJib2x0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy90aHVuZGVyYm9sdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnPTI9bWVudWNvbmZpZyBVU0I0XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTE2LVx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmVcbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZzoxNzpcdCAgY2FsbGVkIHRodW5kZXJib2x0LlxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTE4LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZz01ND1jb25maWcgVVNCNF9ETUFfVEVTVFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZy02NC1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWc6NjU6XHQgIGNhbGxlZCB0aHVuZGVyYm9sdF9kbWFfdGVzdC5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZy02Ni1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZz02Nz1jb25maWcgVVNCNF9TVFJFQU1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWctNzUtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZVxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnOjc2Olx0ICBjYWxsZWQgdGh1bmRlcmJvbHRfc3RyZWFtLlxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTc3LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU9Mj1jY2ZsYWdzLXkgOj0gLUkkKHNyYylcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MzpvYmotJHtDT05GSUdfVVNCNH0gOj0gdGh1bmRlcmJvbHQub1xuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo0OnRodW5kZXJib2x0LW9ianMgOj0gbmhpLm8gY3RsLm8gdGIubyBzd2l0Y2gubyBjYXAubyBwY2kubyBwYXRoLm8gdHVubmVsLm8gZWVwcm9tLm9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6NTp0aHVuZGVyYm9sdC1vYmpzICYjNDM7PSBkb21haW4ubyBkbWFfcG9ydC5vIGljbS5vIHByb3BlcnR5Lm8geGRvbWFpbi5vIGxjLm8gdG11Lm8gdXNiNC5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjY6dGh1bmRlcmJvbHQtb2JqcyAmIzQzOz0gdXNiNF9wb3J0Lm8gbnZtLm8gcmV0aW1lci5vIHF1aXJrcy5vIGNseC5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTctXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjg6dGh1bmRlcmJvbHQtJHtDT05GSUdfQUNQSX0gJiM0Mzs9IGFjcGkub1xuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo5OnRodW5kZXJib2x0LSQoQ09ORklHX0RFQlVHX0ZTKSAmIzQzOz0gZGVidWdmcy5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjEwOnRodW5kZXJib2x0LSQoQ09ORklHX1VTQjRfQ09ORklHRlMpICYjNDM7PSBjb25maWdmcy5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjExOnRodW5kZXJib2x0LSR7Q09ORklHX1VTQjRfS1VOSVRfVEVTVH0gJiM0Mzs9IHRlc3Qub1xuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZS0xMi1DRkxBR1NfdGVzdC5vICYjNDM7PSAkKERJU0FCTEVfU1RSVUNUTEVBS19QTFVHSU4pXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTEzLVxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZToxNDp0aHVuZGVyYm9sdF9kbWFfdGVzdC0ke0NPTkZJR19VU0I0X0RNQV9URVNUfSAmIzQzOz0gZG1hX3Rlc3Qub1xuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZToxNTpvYmotJChDT05GSUdfVVNCNF9ETUFfVEVTVCkgJiM0Mzs9IHRodW5kZXJib2x0X2RtYV90ZXN0Lm9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGUtMTYtXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjE3OnRodW5kZXJib2x0X3N0cmVhbS0ke0NPTkZJR19VU0I0X1NUUkVBTX0gJiM0Mzs9IHN0cmVhbS5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjE4Om9iai0kKENPTkZJR19VU0I0X1NUUkVBTSkgJiM0Mzs9IHRodW5kZXJib2x0X3N0cmVhbS5vXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9hY3BpLmM9MzUzPXN0YXRpYyBzdHJ1Y3QgYWNwaV9idXNfdHlwZSB0Yl9hY3BpX2J1cyA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jOjM1NDpcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRcJiMzNDssXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYy0zNTUtXHQubWF0Y2ggPSB0Yl9hY3BpX2J1c19tYXRjaCxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM9MTg9c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gdGJfY29uZmlnZnMgPSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTIwLVx0XHQuY2dfaXRlbSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYzoyMTpcdFx0XHQuY2lfbmFtZWJ1ZiA9IFwmIzM0O3RodW5kZXJib2x0XCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTIyLVx0XHRcdC5jaV90eXBlID0gXHUwMDI2dGJfcm9vdF9ncm91cF90eXBlLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM9NjUzPXN0cnVjdCB0Yl9jdGwgKnRiX2N0bF9hbGxvYyhzdHJ1Y3QgdGJfbmhpICpuaGksIGludCBpbmRleCwgaW50IHRpbWVvdXRfbXNlYyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jLTY2OC1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0bC1cdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM6NjY5Olx0Y3RsLVx1MDAzZWZyYW1lX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoXCYjMzQ7dGh1bmRlcmJvbHRfY3RsXCYjMzQ7LCBuaGktXHUwMDNlZGV2LFxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuYy02NzAtXHRcdFx0XHRcdCAgVEJfRlJBTUVfU0laRSwgNCwgMCk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuaC0xMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2VcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmg6MTM6I2luY2x1ZGUgXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFx1MDAzZVxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuaC0xNC1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYz0yNTU1PXZvaWQgdGJfZGVidWdmc19pbml0KHZvaWQpXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNTU2LXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjI1NTc6XHR0Yl9kZWJ1Z2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXCYjMzQ7dGh1bmRlcmJvbHRcJiMzNDssIE5VTEwpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjU1OC19XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfcG9ydC5jPTM3Mz1pbnQgZG1hX3BvcnRfZmxhc2hfd3JpdGUoc3RydWN0IHRiX2RtYV9wb3J0ICpkbWEsIHVuc2lnbmVkIGludCBhZGRyZXNzLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3BvcnQuYy0zOTEtICogVGhpcyBpcyBiZWNhdXNlIGlmIHRoZSBzd2l0Y2ggaW4gcXVlc3Rpb24gaXMgcm9vdCBzd2l0Y2ggdGhlXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV9wb3J0LmM6MzkyOiAqIHRodW5kZXJib2x0IGhvc3QgY29udHJvbGxlciBnZXRzIHJlc2V0IGFzIHdlbGwuXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV9wb3J0LmMtMzkzLSAqXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzLSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NpemVzLmhcdTAwM2VcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzoxNDojaW5jbHVkZSBcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXHUwMDNlXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTUtXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jPTY5Nj1zdGF0aWMgc3RydWN0IHRiX3NlcnZpY2VfZHJpdmVyIGRtYV90ZXN0X2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNjk4LVx0XHQub3duZXIgPSBUSElTX01PRFVMRSxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo2OTk6XHRcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRfZG1hX3Rlc3RcJiMzNDssXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNzAwLVx0XHQucG0gPSBcdTAwMjZkbWFfdGVzdF9wbV9vcHMsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz0zMTE9Y29uc3Qgc3RydWN0IGJ1c190eXBlIHRiX2J1c190eXBlID0ge1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozMTI6XHQubmFtZSA9IFwmIzM0O3RodW5kZXJib2x0XCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy0zMTMtXHQubWF0Y2ggPSB0Yl9zZXJ2aWNlX21hdGNoLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM9MzMzPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl9kb21haW5fdHlwZSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6MzM0Olx0Lm5hbWUgPSBcJiMzNDt0aHVuZGVyYm9sdF9kb21haW5cJiMzNDssXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTMzNS1cdC5yZWxlYXNlID0gdGJfZG9tYWluX3JlbGVhc2UsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz0zNzc9c3RydWN0IHRiICp0Yl9kb21haW5fYWxsb2Moc3RydWN0IHRiX25oaSAqbmhpLCBpbnQgdGltZW91dF9tc2VjLCBzaXplX3QgcHJpdnNpemUpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy0zOTktXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjQwMDpcdHRiLVx1MDAzZXdxID0gYWxsb2Nfb3JkZXJlZF93b3JrcXVldWUoXCYjMzQ7dGh1bmRlcmJvbHQlZFwmIzM0OywgMCwgdGItXHUwMDNlaW5kZXgpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy00MDEtXHRpZiAoIXRiLVx1MDAzZXdxKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjAwNT1zdGF0aWMgaW50IGljbV9kcml2ZXJfcmVhZHkoc3RydWN0IHRiICp0Yilcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIwMTYtXHRcdHRiX2luZm8odGIsIFwmIzM0O1lvdSBuZWVkIHRvIHVwZGF0ZSBOVk0gZmlybXdhcmUgb2YgdGhlIGNvbnRyb2xsZXIgYmVmb3JlIGl0IGNhbiBiZSB1c2VkLlxcblwmIzM0Oyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjIwMTc6XHRcdHRiX2luZm8odGIsIFwmIzM0O1VzZSBmd3VwZCB0b29sIHRvIGFwcGx5IHVwZGF0ZS4gQ2hlY2sgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS90aHVuZGVyYm9sdC5yc3QgZm9yIGRldGFpbHMuXFxuXCYjMzQ7KTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjAxOC1cdFx0cmV0dXJuIDA7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYy01LSAqIFRoZSBOSEkgKG5hdGl2ZSBob3N0IGludGVyZmFjZSkgaXMgdGhlIGRldmljZSB0aGF0IGFsbG93cyB1cyB0byBzZW5kIGFuZFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYzo2OiAqIHJlY2VpdmUgZnJhbWVzIGZyb20gdGhlIHRodW5kZXJib2x0IGJ1cy5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmMtNy0gKlxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmM9MTE4Nj1pbnQgbmhpX3Byb2JlKHN0cnVjdCB0Yl9uaGkgKm5oaSlcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jLTEyMzUtXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jOjEyMzY6XHRkZXZfZGJnKGRldiwgXCYjMzQ7TkhJIGluaXRpYWxpemVkLCBzdGFydGluZyB0aHVuZGVyYm9sdFxcblwmIzM0Oyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jLTEyMzctXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuaC0xMS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmg6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFx1MDAzZVxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuaC0xMy1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYz0xMDE9c3RydWN0IHRiX3BhdGggKnRiX3BhdGhfZGlzY292ZXIoc3RydWN0IHRiX3BvcnQgKnNyYywgaW50IHNyY19ob3BpZCxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYy0yMTUtLyoqXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYzoyMTY6ICogdGJfcGF0aF9hbGxvYygpIC0gYWxsb2NhdGUgYSB0aHVuZGVyYm9sdCBwYXRoIGJldHdlZW4gdHdvIHBvcnRzXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYy0yMTctICogQHRiOiBEb21haW4gcG9pbnRlclxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmM9MTExPXN0YXRpYyBpbnQgbmhpX3BjaV9pbml0X21zaShzdHJ1Y3QgdGJfbmhpICpuaGkpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYy0xMzktXHRcdHJlcyA9IGRldm1fcmVxdWVzdF9pcnEoXHUwMDI2cGRldi1cdTAwM2VkZXYsIGlycSwgbmhpX21zaSxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmM6MTQwOlx0XHRcdFx0ICAgICAgIElSUUZfTk9fU1VTUEVORCwgXCYjMzQ7dGh1bmRlcmJvbHRcJiMzNDssIG5oaSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTE0MS1cdFx0aWYgKHJlcylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jPTE4ND1zdGF0aWMgaW50IG5oaV9wY2lfcmluZ19yZXF1ZXN0X21zaXgoc3RydWN0IHRiX3JpbmcgKnJpbmcsIGJvb2wgbm9fc3VzcGVuZClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTIwNy1cdGlycWZsYWdzID0gbm9fc3VzcGVuZCA/IElSUUZfTk9fU1VTUEVORCA6IDA7XG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjIwODpcdHJldCA9IHJlcXVlc3RfaXJxKHJpbmctXHUwMDNlaXJxLCByaW5nX21zaXgsIGlycWZsYWdzLCBcJiMzNDt0aHVuZGVyYm9sdFwmIzM0OywgcmluZyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTIwOS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYz00NDc9c3RhdGljIGludCBuaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYy00NjgtXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjQ2OTpcdG5oaS1cdTAwM2Vpb2Jhc2UgPSBwY2ltX2lvbWFwX3JlZ2lvbihwZGV2LCAwLCBcJiMzNDt0aHVuZGVyYm9sdFwmIzM0Oyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTQ3MC1cdHJlcyA9IFBUUl9FUlJfT1JfWkVSTyhuaGktXHUwMDNlaW9iYXNlKTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jPTU5MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmhpX2RyaXZlciA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmM6NTkyOlx0Lm5hbWUgPSBcJiMzNDt0aHVuZGVyYm9sdFwmIzM0OyxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmMtNTkzLVx0LmlkX3RhYmxlID0gbmhpX2lkcyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvdXVpZC5oXHUwMDNlXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmM6MTU6I2luY2x1ZGUgXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFx1MDAzZVxuZHJpdmVycy90aHVuZGVyYm9sdC9wcm9wZXJ0eS5jLTE2LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYz0zNzM9c3RhdGljIHNzaXplX3QgX190Yl9wcm9wZXJ0eV9mb3JtYXRfZGlyKGNvbnN0IHN0cnVjdCB0Yl9wcm9wZXJ0eV9kaXIgKmRpcixcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtNTA4LSAqIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyB0aGUgZGlyZWN0b3J5IHRvIHRoZSBwYWNrZWQgZm9ybWF0IHRoYXQgY2FuIGJlXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmM6NTA5OiAqIHRoZW4gc2VudCBvdmVyIHRoZSB0aHVuZGVyYm9sdCBmYWJyaWMgdG8gcmVjZWl2aW5nIGhvc3QuXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtNTEwLSAqXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9yZXRpbWVyLmM9MzgzPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl9yZXRpbWVyX3R5cGUgPSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L3JldGltZXIuYzozODQ6XHQubmFtZSA9IFwmIzM0O3RodW5kZXJib2x0X3JldGltZXJcJiMzNDssXG5kcml2ZXJzL3RodW5kZXJib2x0L3JldGltZXIuYy0zODUtXHQuZ3JvdXBzID0gcmV0aW1lcl9ncm91cHMsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYy0yMC0jaW5jbHVkZSBcdTAwM2NsaW51eC9zaXplcy5oXHUwMDNlXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjIxOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3RodW5kZXJib2x0LmhcdTAwM2VcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvdWFjY2Vzcy5oXHUwMDNlXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYz0xNjM3PXN0YXRpYyBzdHJ1Y3QgdGJfc2VydmljZV9kcml2ZXIgdGJzdHJlYW1fZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMTYzOS1cdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjE2NDA6XHRcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRfc3RyZWFtXCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYy0xNjQxLVx0XHQucG0gPSBcdTAwMjZ0YnN0cmVhbV9wbV9vcHMsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYz00NDI9c3RhdGljIHZvaWQgdGJfZHVtcF9wb3J0KHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCB0Yl9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtNDQ4LVx0ICAgICAgIHJlZ3MtXHUwMDNlcG9ydF9udW1iZXIsIHJlZ3MtXHUwMDNldmVuZG9yX2lkLCByZWdzLVx1MDAzZWRldmljZV9pZCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM6NDQ5Olx0ICAgICAgIHJlZ3MtXHUwMDNlcmV2aXNpb24sIHJlZ3MtXHUwMDNldGh1bmRlcmJvbHRfdmVyc2lvbiwgdGJfcG9ydF90eXBlKHJlZ3MpLFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy00NTAtXHQgICAgICAgcmVncy1cdTAwM2V0eXBlKTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3N3aXRjaC5jPTE1NjM9c3RhdGljIHZvaWQgdGJfZHVtcF9zd2l0Y2goY29uc3Qgc3RydWN0IHRiICp0YiwgY29uc3Qgc3RydWN0IHRiX3N3aXRjaCAqc3cpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0xNTY4LVx0ICAgICAgIHRiX3N3aXRjaF9nZW5lcmF0aW9uX25hbWUoc3cpLCByZWdzLVx1MDAzZXZlbmRvcl9pZCwgcmVncy1cdTAwM2VkZXZpY2VfaWQsXG5kcml2ZXJzL3RodW5kZXJib2x0L3N3aXRjaC5jOjE1Njk6XHQgICAgICAgcmVncy1cdTAwM2VyZXZpc2lvbiwgcmVncy1cdTAwM2V0aHVuZGVyYm9sdF92ZXJzaW9uKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTU3MC1cdHRiX2RiZyh0YiwgXCYjMzQ7ICBNYXggUG9ydCBOdW1iZXI6ICVkXFxuXCYjMzQ7LCByZWdzLVx1MDAzZW1heF9wb3J0X251bWJlcik7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYz0xODE5PXN0YXRpYyBpbnQgdGJfc3dpdGNoX3NldF9hdXRob3JpemVkKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3LCB1bnNpZ25lZCBpbnQgdmFsKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTg2MS1cdFx0ICogTm90aWZ5IHN0YXR1cyBjaGFuZ2UgdG8gdGhlIHVzZXJzcGFjZSwgaW5mb3JtaW5nIHRoZSBuZXdcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM6MTg2MjpcdFx0ICogdmFsdWUgb2YgL3N5cy9idXMvdGh1bmRlcmJvbHQvZGV2aWNlcy8uLi4vYXV0aG9yaXplZC5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTg2My1cdFx0ICovXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYz0yMzczPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl9zd2l0Y2hfdHlwZSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM6MjM3NDpcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRfZGV2aWNlXCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0yMzc1LVx0LnJlbGVhc2UgPSB0Yl9zd2l0Y2hfcmVsZWFzZSxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTQtI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDoxNTojaW5jbHVkZSBcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXHUwMDNlXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTYtI2luY2x1ZGUgXHUwMDNjbGludXgvdXVpZC5oXHUwMDNlXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oPTEwNT1zdHJ1Y3QgdGJfc3dpdGNoX3RtdSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTExMi0vKipcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDoxMTM6ICogc3RydWN0IHRiX3N3aXRjaCAtIGEgdGh1bmRlcmJvbHQgc3dpdGNoXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTE0LSAqIEBkZXY6IERldmljZSBmb3IgdGhlIHN3aXRjaFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaD0yMzg9c3RydWN0IHRiX2JhbmR3aWR0aF9ncm91cCB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTI0Ni0vKipcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDoyNDc6ICogc3RydWN0IHRiX3BvcnQgLSBhIHRodW5kZXJib2x0IHBvcnQsIHBhcnQgb2YgYSB0Yl9zd2l0Y2hcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaC0yNDgtICogQGNvbmZpZzogQ2FjaGVkIHBvcnQgY29uZmlndXJhdGlvbiByZWFkIGZyb20gcmVnaXN0ZXJzXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oPTQzMD1zdHJ1Y3QgdGJfcGF0aCB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTQ4Ny0gKiBAcnVudGltZV9yZXN1bWVfc3dpdGNoOiBSdW50aW1lIHJlc3VtZSBhIHN3aXRjaFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oOjQ4ODogKiBAaGFuZGxlX2V2ZW50OiBIYW5kbGUgdGh1bmRlcmJvbHQgZXZlbnRcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaC00ODktICogQGdldF9ib290X2FjbDogR2V0IGJvb3QgQUNMIGxpc3Rcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmg9MTMxMT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB1c2I0X3N3aXRjaF92ZXJzaW9uKGNvbnN0IHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTEzMTIte1xuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oOjEzMTM6XHRyZXR1cm4gRklFTERfR0VUKFVTQjRfVkVSU0lPTl9NQUpPUl9NQVNLLCBzdy1cdTAwM2Vjb25maWcudGh1bmRlcmJvbHRfdmVyc2lvbik7XG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTMxNC19XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtNC0gKlxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6NTogKiBFdmVyeSB0aHVuZGVyYm9sdCBkZXZpY2UgY29uc2lzdHMgKGxvZ2ljYWxseSkgb2YgYSBzd2l0Y2ggd2l0aCBtdWx0aXBsZVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtNi0gKiBwb3J0cy4gRXZlcnkgcG9ydCBjb250YWlucyB1cCB0byBmb3VyIGNvbmZpZyByZWdpb25zIChIT1BTLCBQT1JULCBTV0lUQ0gsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg9MTY2PXN0cnVjdCB0Yl9yZWdzX3N3aXRjaF9oZWFkZXIge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGJfcmVncy5oLTE4OC1cdHUzMiBfX3Vua25vd240Ojg7XG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaDoxODk6XHR1MzIgdGh1bmRlcmJvbHRfdmVyc2lvbjo4O1xuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkwLX0gX19wYWNrZWQ7XG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaC0xOTEtXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaDoxOTI6LyogVXNlZCB3aXRoIHRoZSByb3V0ZXIgdGh1bmRlcmJvbHRfdmVyc2lvbiAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkzLSNkZWZpbmUgVVNCNF9WRVJTSU9OX01BSk9SX01BU0tcdFx0XHRHRU5NQVNLKDcsIDUpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg9MjgzPXN0cnVjdCB0Yl9yZWdzX3BvcnRfaGVhZGVyIHtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaC0yOTQtXHRlbnVtIHRiX3BvcnRfdHlwZSB0eXBlOjI0O1xuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6Mjk1Olx0dTMyIHRodW5kZXJib2x0X3ZlcnNpb246ODtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGJfcmVncy5oLTI5Ni1cdC8qIERXT1JEIDMgKi9cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuYz0yODI0PXN0YXRpYyB2b2lkIHRiX3Rlc3RfcHJvcGVydHlfY29weShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmMtMjg1Ny0gKiBSZXByb2R1Y2VycyBmb3IgdGhyZWUgbWVtb3J5LXNhZmV0eSBkZWZlY3RzIGluXG5kcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuYzoyODU4OiAqIGRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYyByZWFjaGVkIGZyb20gYSBjcmFmdGVkIFhEb21haW5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jLTI4NTktICogUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLiAgV2l0aG91dCB0aGUgZml4IHRoZXNlIHRyaXAgS0FTQU4gb3Jcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuYz0zMTQ3PXN0YXRpYyBzdHJ1Y3Qga3VuaXRfc3VpdGUgdGJfdGVzdF9zdWl0ZSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jOjMxNDg6XHQubmFtZSA9IFwmIzM0O3RodW5kZXJib2x0XCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmMtMzE0OS1cdC50ZXN0X2Nhc2VzID0gdGJfdGVzdF9jYXNlcyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3RyYWNlLmgtMTAtI3VuZGVmIFRSQUNFX1NZU1RFTVxuZHJpdmVycy90aHVuZGVyYm9sdC90cmFjZS5oOjExOiNkZWZpbmUgVFJBQ0VfU1lTVEVNIHRodW5kZXJib2x0XG5kcml2ZXJzL3RodW5kZXJib2x0L3RyYWNlLmgtMTItXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmM9MTEzMj1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfc2VydmljZV90eXBlID0ge1xuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmM6MTEzMzpcdC5uYW1lID0gXCYjMzQ7dGh1bmRlcmJvbHRfc2VydmljZVwmIzM0OyxcbmRyaXZlcnMvdGh1bmRlcmJvbHQveGRvbWFpbi5jLTExMzQtXHQuZ3JvdXBzID0gdGJfc2VydmljZV9hdHRyX2dyb3Vwcyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3hkb21haW4uYz0yMDUwPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl94ZG9tYWluX3R5cGUgPSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L3hkb21haW4uYzoyMDUxOlx0Lm5hbWUgPSBcJiMzNDt0aHVuZGVyYm9sdF94ZG9tYWluXCYjMzQ7LFxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmMtMjA1Mi1cdC5yZWxlYXNlID0gdGJfeGRvbWFpbl9yZWxlYXNlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmF2ZWxpbmcgVGh1bmRlcmJvbHQgRnV6emluZyBpbiB0aGUgS2VybmVsKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGhvdyBzeXprYWxsZXIgaXMgZnV6emluZyB0aGUgVGh1bmRlcmJvbHQgZHJpdmVyLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgIGJlY2F1c2UgaXQgaGFzIEtVbml0IHRlc3RzLCB3aGljaCwgSSBpbml0aWFsbHkgdGhvdWdodCwgbWlnaHQgYmUgYSBzdGFydGluZyBwb2ludC4gVGhlbiwgSSBub3RpY2VkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgY29tbWVudHM6ICYjMzQ7UmVwcm9kdWNlcnMgZm9yIHRocmVlIG1lbW9yeS1zYWZldHkgZGVmZWN0cy4uLiByZWFjaGVkIGZyb20gYSBjcmFmdGVkIFhEb21haW4gUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLiYjMzQ7IFRoaXMgY29uZmlybXMgc3l6a2FsbGVyIGlzIGluZGVlZCBmdXp6aW5nIFRodW5kZXJib2x0IQoKTXkgbmV4dCBxdWVzdGlvbiBpcyAqaG93Kj8gSXMgc3l6a2FsbGVyIHVzaW5nIGEgcHNldWRvLXN5c2NhbGwsIGEgc29mdHdhcmUgZHJpdmVyLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gSSBxdWlja2x5IHJ1bGVkIG91dCBgVVNCNF9LVU5JVF9URVNUYCBhbmQgdGhlIEtVbml0IHRlc3RzLCBrbm93aW5nIHRob3NlIGFyZW4mIzM5O3QgZGlyZWN0bHkgZnV6emFibGUgYnkgc3l6a2FsbGVyLiBTaW5jZSBJIGNhbiYjMzk7dCBlYXNpbHkgc2VhcmNoIHN5emthbGxlciYjMzk7cyBkZXNjcmlwdGlvbnMgd2l0aCB0aGUgdG9vbHMgYXZhaWxhYmxlLCBsaWtlIGBncmVwcGVyYCwgYnV0IEkmIzM5O20gcmVtaW5kZWQgdGhhdCBJIGNvdWxkIHVzZSBgcmVhZC1zeXotc3BlY2AgYW5kIGBzeXotZ3JlcHBlcmAgaWYgdGhleSB3ZXJlIGFjY2Vzc2libGUuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCwgaG93ZXZlci4KCkkgdGhlbiBjb25zaWRlcmVkIHRoZSBwb3NzaWJpbGl0eSBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gYW5kIGxvb2tlZCBmb3IgYSAmIzM0O2R1bW15JiMzNDsgVGh1bmRlcmJvbHQgZHJpdmVyLCBidXQgZm91bmQgbm90aGluZyBvYnZpb3VzLiBUaGVuLCBJIHR1cm5lZCBteSBhdHRlbnRpb24gdG8gYGRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZ2AgYW5kIGBkcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlYCwgd2hlcmUgSSBzcG90dGVkIGBVU0I0X0tVTklUX1RFU1RgIGFnYWluLCBzdGlsbCBub3QgdGhlIGFuc3dlciB0byBteSBxdWVzdGlvbi4KClN1ZGRlbmx5LCBhIGNvbm5lY3Rpb24gY2xpY2tlZDogQ291bGQgc3l6a2FsbGVyIGJlIGZ1enppbmcgVGh1bmRlcmJvbHQgdmlhIGBjb25maWdmc2A/IEkgcmVjYWxsZWQgc2VlaW5nIGB0aHVuZGVyYm9sdC0kKENPTkZJR19VU0I0X0NPTkZJR0ZTKSAmIzQzOz0gY29uZmlnZnMub2AgaW4gdGhlIG1ha2VmaWxlLiBUaGlzIHNlZW1lZCBwcm9taXNpbmcuCgpUaGVuLCBJIHNoaWZ0ZWQgbXkgZm9jdXMgdG8gdGhlIG5ldHdvcmtpbmcgYXNwZWN0cywgY2hlY2tpbmcgYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AsIHJlbWVtYmVyaW5nIGl0IHJlZ2lzdGVycyBhIG5ldHdvcmsgZGV2aWNlLiBJIGxvb2tlZCBhdCB0aGF0IGZpbGUgYWdhaW4sIGFuZCBub3RpY2VkIGEgcGF0Y2ggYWRkaW5nIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgdG8gYHRibmV0X2Nvbm5lY3RlZF93b3JrYCwgYW5kIHRoZSBjb21taXQgbWVzc2FnZSByZWZlcmVuY2luZyAmIzM0O3N5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldy4mIzM0OyBUaGlzIGNvbmZpcm1zIGEgYnVnIHdhcyBmb3VuZCBieSBzeXprYWxsZXIgdGhlcmUuIEkgbm93IG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBzeXprYWxsZXIgdHJpZ2dlcmVkIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AuIEkmIzM5O2xsIGRlbHZlIGludG8gdGhlIGZ1bmN0aW9uIGl0c2VsZiB3aXRoaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Ym5ldF9jb25uZWN0ZWRfd29yayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MzY5PXN0YXRpYyB2b2lkIHRibmV0X3RlYXJfZG93bihzdHJ1Y3QgdGJuZXQgKm5ldCwgYm9vbCBzZW5kX2xvZ291dClcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzg5LVx0XHQvKiBUZWFyIHRoZSBwYXRocyBkb3duIGJlZm9yZSBzdG9wcGluZyB0aGUgcmluZ3MuICBUaGlzIG1pcnJvcnNcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzozOTA6XHRcdCAqIHRibmV0X2Nvbm5lY3RlZF93b3JrKCksIHdoaWNoIGVuYWJsZXMgdGhlIHBhdGhzIGxhc3Qgc28gdGhlXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzkxLVx0XHQgKiBSeCByaW5nIGlzIHByaW1lZCBiZWZvcmUgcGFja2V0cyBjYW4gYXJyaXZlLiAgU3RvcHBpbmcgYVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz02Mjk9c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0Mi1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo2NDM6c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0NC17XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzODUtXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZuZXQtXHUwMDNlbG9naW5fd29yaywgdGJuZXRfbG9naW5fd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM4NjpcdElOSVRfV09SSyhcdTAwMjZuZXQtXHUwMDNlY29ubmVjdGVkX3dvcmssIHRibmV0X2Nvbm5lY3RlZF93b3JrKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg3LVx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VkaXNjb25uZWN0X3dvcmssIHRibmV0X2Rpc2Nvbm5lY3Rfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzMKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipUcmFjaW5nIHRoZSBXb3JrIEl0ZW0gUXVldWUqKgoKQWxyaWdodCwgaGFuZyBvbi4gYHRibmV0X2Nvbm5lY3RlZF93b3JrYC4uLiB0aGF0JiMzOTtzIGEgKndvcmsgaXRlbSosIHJpZ2h0PyBDbGFzc2ljLiBTbywgYnkgZGVmaW5pdGlvbiwgaXQmIzM5O3MgZ2V0dGluZyBxdWV1ZWQgKmZyb20gc29tZXdoZXJlKiB3aXRoaW4gdGhlIHN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgYGNvbm5lY3RlZF93b3JrYCBpcyBhY3R1YWxseSBiZWluZyBlbnF1ZXVlZC4gVGhhdCYjMzk7cyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaXRzIGxpZmVjeWNsZSBhbmQgcG90ZW50aWFsIHBvaW50cyBvZiBjb250ZW50aW9uIG9yIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRpbWUgdG8gZmlyZSB1cCB0aGUgdG9vbHMgYW5kIHRyYWNlIHRoYXQgdGhpbmcuIExldCYjMzk7cyBmaW5kIGl0cyBvcmlnaW4gcG9pbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nvbm5lY3RlZF93b3JrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xNDM9c3RydWN0IHRibmV0X3Jpbmcge1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xNjgtICogQGxvZ2luX3dvcms6IFdvcmtlciB0byBzZW5kIFRodW5kZXJib2x0SVAgbG9naW4gcGFja2V0c1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjE2OTogKiBAY29ubmVjdGVkX3dvcms6IFdvcmtlciB0aGF0IGZpbmFsaXplcyB0aGUgVGh1bmRlcmJvbHRJUCBjb25uZWN0aW9uXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTcwLSAqXHRcdCAgICBzZXR1cCBhbmQgZW5hYmxlcyBETUEgcGF0aHMgZm9yIGhpZ2ggc3BlZWQgZGF0YVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xODI9c3RydWN0IHRibmV0IHtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTk3LVx0c3RydWN0IGRlbGF5ZWRfd29yayBsb2dpbl93b3JrO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjE5ODpcdHN0cnVjdCB3b3JrX3N0cnVjdCBjb25uZWN0ZWRfd29yaztcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xOTktXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGlzY29ubmVjdF93b3JrO1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0zMjM9c3RhdGljIHZvaWQgc3RvcF9sb2dpbihzdHJ1Y3QgdGJuZXQgKm5ldClcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzI1LVx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2Vsb2dpbl93b3JrKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzozMjY6XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNm5ldC1cdTAwM2Vjb25uZWN0ZWRfd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzI3LVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0zNjk9c3RhdGljIHZvaWQgdGJuZXRfdGVhcl9kb3duKHN0cnVjdCB0Ym5ldCAqbmV0LCBib29sIHNlbmRfbG9nb3V0KVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zODktXHRcdC8qIFRlYXIgdGhlIHBhdGhzIGRvd24gYmVmb3JlIHN0b3BwaW5nIHRoZSByaW5ncy4gIFRoaXMgbWlycm9yc1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjM5MDpcdFx0ICogdGJuZXRfY29ubmVjdGVkX3dvcmsoKSwgd2hpY2ggZW5hYmxlcyB0aGUgcGF0aHMgbGFzdCBzbyB0aGVcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zOTEtXHRcdCAqIFJ4IHJpbmcgaXMgcHJpbWVkIGJlZm9yZSBwYWNrZXRzIGNhbiBhcnJpdmUuICBTdG9wcGluZyBhXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTQyNT1zdGF0aWMgaW50IHRibmV0X2hhbmRsZV9wYWNrZXQoY29uc3Qgdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwgdm9pZCAqZGF0YSlcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDc3LVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjQ3ODpcdFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZuZXQtXHUwMDNlY29ubmVjdGVkX3dvcmspO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQ3OS1cdFx0fVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz02Mjk9c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0Mi1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo2NDM6c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0NC17XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NjQ1Olx0c3RydWN0IHRibmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpuZXQpLCBjb25uZWN0ZWRfd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjQ2LVx0Ym9vbCBjb25uZWN0ZWQ7XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTcxND1zdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzQ0LVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc0NTpcdFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2bmV0LVx1MDAzZWNvbm5lY3RlZF93b3JrKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03NDYtXHR9XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzODUtXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZuZXQtXHUwMDNlbG9naW5fd29yaywgdGJuZXRfbG9naW5fd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM4NjpcdElOSVRfV09SSyhcdTAwMjZuZXQtXHUwMDNlY29ubmVjdGVkX3dvcmssIHRibmV0X2Nvbm5lY3RlZF93b3JrKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg3LVx0SU5JVF9XT1JLKFx1MDAyNm5ldC1cdTAwM2VkaXNjb25uZWN0X3dvcmssIHRibmV0X2Rpc2Nvbm5lY3Rfd29yayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NzEzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGh1bmRlcmJvbHQgTmV0d29yayBDb25uZWN0aW9uKioKCk9rYXksIHNvIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaXMgYmVpbmcgcXVldWVkIGZyb20gYm90aCBgdGJuZXRfaGFuZGxlX3BhY2tldGAgYW5kIGB0Ym5ldF9sb2dpbl93b3JrYC4gUmlnaHQsIGB0Ym5ldF9oYW5kbGVfcGFja2V0YCBpcyBhIGNhbGxiYWNrIGZvciBpbmNvbWluZyBuZXR3b3JrIHBhY2tldHMuIE15IG1haW4gcXVlc3Rpb24gaXM6IGhvdyBpcyBTeXprYWxsZXIgdHJpZ2dlcmluZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCB0cmlnZ2VyLgoKQ291bGQgdGhpcyBpbnZvbHZlIGEgc29mdHdhcmUgVGh1bmRlcmJvbHQgZGV2aWNlPyBUaGF0JiMzOTtzIGEgcG9zc2liaWxpdHkuIExldCBtZSBxdWlja2x5IGV4YW1pbmUgdGhlIGNvZGUsIHNwZWNpZmljYWxseSBgZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmNgIGFuZCBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgLiBBaCwgaW4gYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYCwgSSBzZWUgYSBjcnVjaWFsIG5vdGU6ICYjMzQ7UmVwcm9kdWNlcnMgZm9yIHRocmVlIG1lbW9yeS1zYWZldHkgZGVmZWN0cy4uLiByZWFjaGVkIGZyb20gYSBjcmFmdGVkIFhEb21haW4gUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLiYjMzQ7IFRoaXMgc3VnZ2VzdHMgdGhhdCBLVW5pdCB0ZXN0cyBhcmUgaW52b2x2ZWQsIGFuZCB0aGV5IGNhbiBpbmplY3QgWERvbWFpbiBwYXlsb2Fkcy4gQnV0IHdhaXQsIFN5emthbGxlciBkb2VzbiYjMzk7dCBkaXJlY3RseSBydW4gS1VuaXQgdGVzdHMsIGRvZXMgaXQ/IFRoYXQgc2VlbXMgdW5saWtlbHkuCgpIbW0uLi4gRG9lcyBTeXprYWxsZXIgaGF2ZSBhIGBzeXpfdXNiX2Nvbm5lY3RgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBObywgdGh1bmRlcmJvbHQgaXNuJiMzOTt0IFVTQi4gU28gaG93IGFyZSB0aGVzZSBYRG9tYWluIHBheWxvYWRzIGNyZWF0ZWQ/IFBlcmhhcHMgU3l6a2FsbGVyIHVzZXMgYGNvbmZpZ2ZzYCB0byBjcmVhdGUgdGh1bmRlcmJvbHQgeGRvbWFpbnM/IExldCBtZSBzaGlmdCBteSBmb2N1cy4gSSBuZWVkIHRvIGludmVzdGlnYXRlIGBkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmNgIGFuZCBgZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmNgIG1vcmUgY2xvc2VseS4gVGhhdCBzZWVtcyB0aGUgbW9zdCBsb2dpY2FsIHBhdGggZm9yIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hkb21haW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTk4OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZT00PXRodW5kZXJib2x0LW9ianMgOj0gbmhpLm8gY3RsLm8gdGIubyBzd2l0Y2gubyBjYXAubyBwY2kubyBwYXRoLm8gdHVubmVsLm8gZWVwcm9tLm9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6NTp0aHVuZGVyYm9sdC1vYmpzICYjNDM7PSBkb21haW4ubyBkbWFfcG9ydC5vIGljbS5vIHByb3BlcnR5Lm8geGRvbWFpbi5vIGxjLm8gdG11Lm8gdXNiNC5vXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTYtdGh1bmRlcmJvbHQtb2JqcyAmIzQzOz0gdXNiNF9wb3J0Lm8gbnZtLm8gcmV0aW1lci5vIHF1aXJrcy5vIGNseC5vXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9hY3BpLmM9MTYwPWJvb2wgdGJfYWNwaV9tYXlfdHVubmVsX3BjaWUodm9pZClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYy0xNjctLyoqXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYzoxNjg6ICogdGJfYWNwaV9pc194ZG9tYWluX2FsbG93ZWQoKSAtIEFyZSBYRG9tYWluIGNvbm5lY3Rpb25zIGFsbG93ZWRcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE2OS0gKlxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE3Mi0gKi9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jOjE3Mzpib29sIHRiX2FjcGlfaXNfeGRvbWFpbl9hbGxvd2VkKHZvaWQpXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYy0xNzQte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2x4LmM9Njg9c3RhdGljIGJvb2wgdGJfcG9ydF9jbHhfc3VwcG9ydGVkKHN0cnVjdCB0Yl9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2x4KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2x4LmMtNzctXHQvKiBEb24mIzM5O3QgZW5hYmxlIENMeCBpbiBjYXNlIG9mIGludGVyLWRvbWFpbiBsaW5rICovXG5kcml2ZXJzL3RodW5kZXJib2x0L2NseC5jOjc4Olx0aWYgKHBvcnQtXHUwMDNleGRvbWFpbilcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2x4LmMtNzktXHRcdHJldHVybiBmYWxzZTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYz0xODE4PXN0YXRpYyB2b2lkIG1hcmdpbmluZ19zd2l0Y2hfcmVtb3ZlKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4MzQtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoxODM1OnN0YXRpYyB2b2lkIG1hcmdpbmluZ194ZG9tYWluX2luaXQoc3RydWN0IHRiX3hkb21haW4gKnhkKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTgzNi17XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTgzOS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NDA6XHRwYXJlbnRfc3cgPSB0Yl94ZG9tYWluX3BhcmVudCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODQxLVx0ZG93bnN0cmVhbSA9IHRiX3BvcnRfYXQoeGQtXHUwMDNlcm91dGUsIHBhcmVudF9zdyk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg0NS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NDY6c3RhdGljIHZvaWQgbWFyZ2luaW5nX3hkb21haW5fcmVtb3ZlKHN0cnVjdCB0Yl94ZG9tYWluICp4ZClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4NDcte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4NTAtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoxODUxOlx0cGFyZW50X3N3ID0gdGJfeGRvbWFpbl9wYXJlbnQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg1Mi1cdGRvd25zdHJlYW0gPSB0Yl9wb3J0X2F0KHhkLVx1MDAzZXJvdXRlLCBwYXJlbnRfc3cpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jPTE4NzA9c3RhdGljIGlubGluZSB2b2lkIG1hcmdpbmluZ19zd2l0Y2hfcmVtb3ZlKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KSB7IH1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NzE6c3RhdGljIGlubGluZSB2b2lkIG1hcmdpbmluZ194ZG9tYWluX2luaXQoc3RydWN0IHRiX3hkb21haW4gKnhkKSB7IH1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NzI6c3RhdGljIGlubGluZSB2b2lkIG1hcmdpbmluZ194ZG9tYWluX3JlbW92ZShzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQpIHsgfVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg3My1zdGF0aWMgaW5saW5lIHZvaWQgbWFyZ2luaW5nX3JldGltZXJfaW5pdChzdHJ1Y3QgdGJfcmV0aW1lciAqcnQsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM9MjQ2Mj12b2lkIHRiX3N3aXRjaF9kZWJ1Z2ZzX3JlbW92ZShzdHJ1Y3QgdGJfc3dpdGNoICpzdylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDY3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM6MjQ2ODp2b2lkIHRiX3hkb21haW5fZGVidWdmc19pbml0KHN0cnVjdCB0Yl94ZG9tYWluICp4ZClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTI0Njkte1xuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM6MjQ3MDpcdG1hcmdpbmluZ194ZG9tYWluX2luaXQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjQ3MS19XG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDcyLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM6MjQ3Mzp2b2lkIHRiX3hkb21haW5fZGVidWdmc19yZW1vdmUoc3RydWN0IHRiX3hkb21haW4gKnhkKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjQ3NC17XG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoyNDc1Olx0bWFyZ2luaW5nX3hkb21haW5fcmVtb3ZlKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTI0NzYtfVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz05MT1zdHJ1Y3QgZG1hX3Rlc3Qge1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTkyLVx0Y29uc3Qgc3RydWN0IHRiX3NlcnZpY2UgKnN2YztcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo5MzpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy05NC1cdHN0cnVjdCB0Yl9yaW5nICpyeF9yaW5nO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz0xMjA9c3RhdGljIHZvaWQgZG1hX3Rlc3RfZnJlZV9yaW5ncyhzdHJ1Y3QgZG1hX3Rlc3QgKmR0KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xMjItXHRpZiAoZHQtXHUwMDNlcnhfcmluZykge1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjEyMzpcdFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKGR0LVx1MDAzZXhkLCBkdC1cdTAwM2VyeF9ob3BpZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTI0LVx0XHR0Yl9yaW5nX2ZyZWUoZHQtXHUwMDNlcnhfcmluZyk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEyNy1cdGlmIChkdC1cdTAwM2V0eF9yaW5nKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTI4Olx0XHR0Yl94ZG9tYWluX3JlbGVhc2Vfb3V0X2hvcGlkKGR0LVx1MDAzZXhkLCBkdC1cdTAwM2V0eF9ob3BpZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTI5LVx0XHR0Yl9yaW5nX2ZyZWUoZHQtXHUwMDNldHhfcmluZyk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jPTEzND1zdGF0aWMgaW50IGRtYV90ZXN0X3N0YXJ0X3JpbmdzKHN0cnVjdCBkbWFfdGVzdCAqZHQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzNi1cdHVuc2lnbmVkIGludCBmbGFncyA9IFJJTkdfRkxBR19GUkFNRTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzoxMzc6XHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQgPSBkdC1cdTAwM2V4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xMzgtXHRpbnQgcmV0LCBlMmVfdHhfaG9wID0gMDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTU5LVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjE2MDpcdFx0cmV0ID0gdGJfeGRvbWFpbl9hbGxvY19vdXRfaG9waWQoeGQsIC0xKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xNjEtXHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTg3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjE4ODpcdFx0cmV0ID0gdGJfeGRvbWFpbl9hbGxvY19pbl9ob3BpZCh4ZCwgLTEpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTE4OS1cdFx0aWYgKHJldCBcdTAwM2MgMCkge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xOTYtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTk3Olx0cmV0ID0gdGJfeGRvbWFpbl9lbmFibGVfcGF0aHMoZHQtXHUwMDNleGQsIGR0LVx1MDAzZXR4X2hvcGlkLFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTE5OC1cdFx0XHRcdCAgICAgIGR0LVx1MDAzZXR4X3JpbmcgPyBkdC1cdTAwM2V0eF9yaW5nLVx1MDAzZWhvcCA6IC0xLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz0yMTQ9c3RhdGljIHZvaWQgZG1hX3Rlc3Rfc3RvcF9yaW5ncyhzdHJ1Y3QgZG1hX3Rlc3QgKmR0KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0yMjItXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MjIzOlx0cmV0ID0gdGJfeGRvbWFpbl9kaXNhYmxlX3BhdGhzKGR0LVx1MDAzZXhkLCBkdC1cdTAwM2V0eF9ob3BpZCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0yMjQtXHRcdFx0XHQgICAgICAgZHQtXHUwMDNldHhfcmluZyA/IGR0LVx1MDAzZXR4X3JpbmctXHUwMDNlaG9wIDogLTEsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jPTQ2OD1zdGF0aWMgaW50IGRtYV90ZXN0X3NldF9ib25kaW5nKHN0cnVjdCBkbWFfdGVzdCAqZHQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTQ3MS1cdGNhc2UgVEJfTElOS19XSURUSF9EVUFMOlxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjQ3MjpcdFx0cmV0dXJuIHRiX3hkb21haW5fbGFuZV9ib25kaW5nX2VuYWJsZShkdC1cdTAwM2V4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNDczLVx0Y2FzZSBUQl9MSU5LX1dJRFRIX1NJTkdMRTpcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo0NzQ6XHRcdHRiX3hkb21haW5fbGFuZV9ib25kaW5nX2Rpc2FibGUoZHQtXHUwMDNleGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTQ3NS1cdFx0ZmFsbHRocm91Z2g7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jPTYzOT1zdGF0aWMgaW50IGRtYV90ZXN0X3Byb2JlKHN0cnVjdCB0Yl9zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCB0Yl9zZXJ2aWNlX2lkICppZClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy02NDAte1xuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjY0MTpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZCA9IHRiX3NlcnZpY2VfcGFyZW50KHN2Yyk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNjQyLVx0c3RydWN0IGRtYV90ZXN0ICpkdDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTMzOD1zdGF0aWMgYm9vbCB0Yl9kb21haW5fZXZlbnRfY2Iodm9pZCAqZGF0YSwgZW51bSB0Yl9jZmdfcGtnX3R5cGUgdHlwZSxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTM1MC1cdGNhc2UgVEJfQ0ZHX1BLR19YRE9NQUlOX1JFU1A6XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjM1MTpcdFx0aWYgKHRiX2lzX3hkb21haW5fZW5hYmxlZCgpKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozNTI6XHRcdFx0cmV0dXJuIHRiX3hkb21haW5faGFuZGxlX3JlcXVlc3QodGIsIHR5cGUsIGJ1Ziwgc2l6ZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTM1My1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz03NTY9aW50IHRiX2RvbWFpbl9kaXNjb25uZWN0X3BjaWVfcGF0aHMoc3RydWN0IHRiICp0Yilcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc2NC0vKipcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6NzY1OiAqIHRiX2RvbWFpbl9hcHByb3ZlX3hkb21haW5fcGF0aHMoKSAtIEVuYWJsZSBETUEgcGF0aHMgZm9yIFhEb21haW5cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzY2LSAqIEB0YjogRG9tYWluIGVuYWJsaW5nIHRoZSBETUEgcGF0aHNcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc4MS0gKi9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6NzgyOmludCB0Yl9kb21haW5fYXBwcm92ZV94ZG9tYWluX3BhdGhzKHN0cnVjdCB0YiAqdGIsIHN0cnVjdCB0Yl94ZG9tYWluICp4ZCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzgzLVx0XHRcdFx0ICAgIGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc4NS17XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjc4NjpcdGlmICghdGItXHUwMDNlY21fb3BzLVx1MDAzZWFwcHJvdmVfeGRvbWFpbl9wYXRocylcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzg3LVx0XHRyZXR1cm4gLUVOT1RTVVBQO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy03ODgtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjc4OTpcdHJldHVybiB0Yi1cdTAwM2VjbV9vcHMtXHUwMDNlYXBwcm92ZV94ZG9tYWluX3BhdGhzKHRiLCB4ZCwgdHJhbnNtaXRfcGF0aCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzkwLVx0XHRcdHRyYW5zbWl0X3JpbmcsIHJlY2VpdmVfcGF0aCwgcmVjZWl2ZV9yaW5nKTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc5My0vKipcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6Nzk0OiAqIHRiX2RvbWFpbl9kaXNjb25uZWN0X3hkb21haW5fcGF0aHMoKSAtIERpc2FibGUgRE1BIHBhdGhzIGZvciBYRG9tYWluXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc5NS0gKiBAdGI6IERvbWFpbiBkaXNhYmxpbmcgdGhlIERNQSBwYXRoc1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODEwLSAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MTE6aW50IHRiX2RvbWFpbl9kaXNjb25uZWN0X3hkb21haW5fcGF0aHMoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3hkb21haW4gKnhkLFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTItXHRcdFx0XHQgICAgICAgaW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODE0LXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODE1Olx0aWYgKCF0Yi1cdTAwM2VjbV9vcHMtXHUwMDNlZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTYtXHRcdHJldHVybiAtRU5PVFNVUFA7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgxNy1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODE4Olx0cmV0dXJuIHRiLVx1MDAzZWNtX29wcy1cdTAwM2VkaXNjb25uZWN0X3hkb21haW5fcGF0aHModGIsIHhkLCB0cmFuc21pdF9wYXRoLFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTktXHRcdFx0dHJhbnNtaXRfcmluZywgcmVjZWl2ZV9wYXRoLCByZWNlaXZlX3JpbmcpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODIxLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MjI6c3RhdGljIGludCBkaXNjb25uZWN0X3hkb21haW4oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MjMte1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MjQ6XHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQ7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgyNS1cdHN0cnVjdCB0YiAqdGIgPSBkYXRhO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODI3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4Mjg6XHR4ZCA9IHRiX3RvX3hkb21haW4oZGV2KTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODI5LVx0aWYgKHhkIFx1MDAyNlx1MDAyNiB4ZC1cdTAwM2V0YiA9PSB0YilcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODMwOlx0XHRyZXQgPSB0Yl94ZG9tYWluX2Rpc2FibGVfYWxsX3BhdGhzKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODMxLVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM9ODQ1PWludCB0Yl9kb21haW5fZGlzY29ubmVjdF9hbGxfcGF0aHMoc3RydWN0IHRiICp0Yilcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg1Mi1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODUzOlx0cmV0dXJuIGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2dGJfYnVzX3R5cGUsIE5VTEwsIHRiLCBkaXNjb25uZWN0X3hkb21haW4pO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NTQtfVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM9ODU2PXN0cnVjdCB1bnJlZ2lzdGVyX2NvbnRleHQge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYwLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4NjE6c3RhdGljIGludCB1bnJlZ2lzdGVyX3VucGx1Z2dlZF94ZG9tYWluKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSlcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYyLXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYzLVx0c3RydWN0IHVucmVnaXN0ZXJfY29udGV4dCAqY3R4ID0gZGF0YTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODY0Olx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NjUtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg2NjpcdHhkID0gdGJfdG9feGRvbWFpbihkZXYpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NjctXHRpZiAoeGQgXHUwMDI2XHUwMDI2IHhkLVx1MDAzZXRiID09IGN0eC1cdTAwM2V0YiBcdTAwMjZcdTAwMjYgeGQtXHUwMDNlaXNfdW5wbHVnZ2VkKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg2ODpcdFx0dGJfeGRvbWFpbl91bnJlZ2lzdGVyKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODY5LVx0XHRjdHgtXHUwMDNlbiYjNDM7JiM0Mzs7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NzMtXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg3NDppbnQgdGJfZG9tYWluX3VucmVnaXN0ZXJfdW5wbHVnZ2VkX3hkb21haW5zKHN0cnVjdCB0YiAqdGIpXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg3NS17XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NzktXHRjdHgubiA9IDA7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg4MDpcdGJ1c19mb3JfZWFjaF9kZXYoXHUwMDI2dGJfYnVzX3R5cGUsIE5VTEwsIFx1MDAyNmN0eCwgdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbik7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg4MS1cdHRiX2RvbWFpbl9wdXQodGIpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM9ODg2PWludCB0Yl9kb21haW5faW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODkzLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4OTQ6XHRyZXQgPSB0Yl94ZG9tYWluX2luaXQoKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODk1LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg5OC1cdGlmIChyZXQpXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg5OTpcdFx0Z290byBlcnJfeGRvbWFpbjtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTAwLVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTAyLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo5MDM6ZXJyX3hkb21haW46XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjkwNDpcdHRiX3hkb21haW5fZXhpdCgpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy05MDUtZXJyX2FjcGk6XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz05MTI9dm9pZCB0Yl9kb21haW5fZXhpdCh2b2lkKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTE2LVx0dGJfbnZtX2V4aXQoKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6OTE3Olx0dGJfeGRvbWFpbl9leGl0KCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTkxOC1cdHRiX2FjcGlfZXhpdCgpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9NTk9c3RydWN0IHVzYjRfc3dpdGNoX252bV9hdXRoIHtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTg5LSAqIEBkZXZpY2VfZGlzY29ubmVjdGVkOiBIYW5kbGUgZGV2aWNlIGRpc2Nvbm5lY3RlZCBJQ00gbWVzc2FnZVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5MDogKiBAeGRvbWFpbl9jb25uZWN0ZWQ6IEhhbmRsZSBYRG9tYWluIGNvbm5lY3RlZCBJQ00gbWVzc2FnZVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5MTogKiBAeGRvbWFpbl9kaXNjb25uZWN0ZWQ6IEhhbmRsZSBYRG9tYWluIGRpc2Nvbm5lY3RlZCBJQ00gbWVzc2FnZVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05Mi0gKiBAcnRkM192ZXRvOiBIYW5kbGUgUlREMyB2ZXRvIG5vdGlmaWNhdGlvbiBJQ00gbWVzc2FnZVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9OTQ9c3RydWN0IGljbSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTgtXHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTk6XHR2b2lkICgqeGRvbWFpbl9jb25uZWN0ZWQpKHN0cnVjdCB0YiAqdGIsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMC1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjE6XHR2b2lkICgqeGRvbWFpbl9kaXNjb25uZWN0ZWQpKHN0cnVjdCB0YiAqdGIsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9Mzc1PXN0YXRpYyBib29sIGljbV9maXJtd2FyZV9ydW5uaW5nKGNvbnN0IHN0cnVjdCB0Yl9uaGkgKm5oaSlcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTM4Mi1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MzgzOnN0YXRpYyB2b2lkIGljbV94ZG9tYWluX2FjdGl2YXRlZChzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsIGJvb2wgYWN0aXZhdGVkKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0zODQte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMzg4LVx0bmhpX3BvcnQgPSB0Yl9zd2l0Y2hfZmluZF9wb3J0KHRiLVx1MDAzZXJvb3Rfc3dpdGNoLCBUQl9UWVBFX05ISSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjM4OTpcdGRzdF9wb3J0ID0gdGJfeGRvbWFpbl9kb3duc3RyZWFtX3BvcnQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0zOTAtXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz01NTI9c3RhdGljIGludCBpY21fZnJfY2hhbGxlbmdlX3N3aXRjaF9rZXkoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3N3aXRjaCAqc3csXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy01ODEtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjU4MjpzdGF0aWMgaW50IGljbV9mcl9hcHByb3ZlX3hkb21haW5fcGF0aHMoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3hkb21haW4gKnhkLFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy01ODMtXHRcdFx0XHRcdGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTU4NS17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjU4NjpcdHN0cnVjdCBpY21fZnJfcGtnX2FwcHJvdmVfeGRvbWFpbl9yZXNwb25zZSByZXBseTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NTg3Olx0c3RydWN0IGljbV9mcl9wa2dfYXBwcm92ZV94ZG9tYWluIHJlcXVlc3Q7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTU4OC1cdGludCByZXQ7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MTMtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjYxNDpcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgdHJ1ZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTYxNS1cdHJldHVybiAwO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNjE3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo2MTg6c3RhdGljIGludCBpY21fZnJfZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKHN0cnVjdCB0YiAqdGIsIHN0cnVjdCB0Yl94ZG9tYWluICp4ZCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNjE5LVx0XHRcdFx0XHQgICBpbnQgdHJhbnNtaXRfcGF0aCwgaW50IHRyYW5zbWl0X3JpbmcsXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MzQtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjYzNTpcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgZmFsc2UpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MzYtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTcwMz1zdGF0aWMgdm9pZCByZW1vdmVfc3dpdGNoKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzA4LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MDk6c3RhdGljIHZvaWQgYWRkX3hkb21haW4oc3RydWN0IHRiX3N3aXRjaCAqc3csIHU2NCByb3V0ZSxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzEwLVx0XHRcdGNvbnN0IHV1aWRfdCAqbG9jYWxfdXVpZCwgY29uc3QgdXVpZF90ICpyZW1vdGVfdXVpZCxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcxMi17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjcxMzpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzE0LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzE2LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MTc6XHR4ZCA9IHRiX3hkb21haW5fYWxsb2Moc3ctXHUwMDNldGIsIFx1MDAyNnN3LVx1MDAzZWRldiwgcm91dGUsIGxvY2FsX3V1aWQsIHJlbW90ZV91dWlkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzE4LVx0aWYgKCF4ZClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcyMy1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzI0Olx0dGJfcG9ydF9hdChyb3V0ZSwgc3cpLVx1MDAzZXhkb21haW4gPSB4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzI1LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MjY6XHR0Yl94ZG9tYWluX2FkZCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcyNy1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTczMi1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzMzOnN0YXRpYyB2b2lkIHVwZGF0ZV94ZG9tYWluKHN0cnVjdCB0Yl94ZG9tYWluICp4ZCwgdTY0IHJvdXRlLCB1OCBsaW5rKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03MzQte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzM5LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3NDA6c3RhdGljIHZvaWQgcmVtb3ZlX3hkb21haW4oc3RydWN0IHRiX3hkb21haW4gKnhkKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03NDEte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzQ0LVx0c3cgPSB0Yl90b19zd2l0Y2goeGQtXHUwMDNlZGV2LnBhcmVudCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjc0NTpcdHRiX3BvcnRfYXQoeGQtXHUwMDNlcm91dGUsIHN3KS1cdTAwM2V4ZG9tYWluID0gTlVMTDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzQ2LVx0eGQtXHUwMDNlaXNfdW5wbHVnZ2VkID0gdHJ1ZTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzQ3Olx0dGJfeGRvbWFpbl9yZW1vdmUoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03NDgtfVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9NzUxPWljbV9mcl9kZXZpY2VfY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzU5LVx0Ym9vbCBhdXRob3JpemVkID0gZmFsc2U7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjc2MDpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzYxLVx0dTggbGluaywgZGVwdGg7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy04NTAtXHQvKiBSZW1vdmUgZXhpc3RpbmcgWERvbWFpbiBjb25uZWN0aW9uIGlmIGZvdW5kICovXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjg1MTpcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X2xpbmtfZGVwdGgodGIsIGxpbmssIGRlcHRoKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtODUyLVx0aWYgKHhkKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjg1MzpcdFx0cmVtb3ZlX3hkb21haW4oeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo4NTQ6XHRcdHRiX3hkb21haW5fcHV0KHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtODU1LVx0fVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9OTMyPXN0YXRpYyB2b2lkXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzMzppY21fZnJfeGRvbWFpbl9jb25uZWN0ZWQoc3RydWN0IHRiICp0YiwgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTkzNC17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzNTpcdGNvbnN0IHN0cnVjdCBpY21fZnJfZXZlbnRfeGRvbWFpbl9jb25uZWN0ZWQgKnBrZyA9XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzNjpcdFx0KGNvbnN0IHN0cnVjdCBpY21fZnJfZXZlbnRfeGRvbWFpbl9jb25uZWN0ZWQgKiloZHI7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzNzpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTM4LVx0c3RydWN0IHRiX3N3aXRjaCAqc3c7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05NTItXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk1MzpcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3V1aWQodGIsIFx1MDAyNnBrZy1cdTAwM2VyZW1vdGVfdXVpZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk1NC1cdGlmICh4ZCkge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTYwLVx0XHRpZiAoeGQtXHUwMDNlZGVwdGggPT0gZGVwdGggXHUwMDI2XHUwMDI2IHhkX3BoeV9wb3J0ID09IHBoeV9wb3J0KSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk2MTpcdFx0XHR1cGRhdGVfeGRvbWFpbih4ZCwgcm91dGUsIGxpbmspO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5NjI6XHRcdFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05NjMtXHRcdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTcxLVx0XHQgKi9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTcyOlx0XHRyZW1vdmVfeGRvbWFpbih4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk3MzpcdFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05NzQtXHR9XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05ODAtXHQgKi9cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTgxOlx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfbGlua19kZXB0aCh0YiwgbGluaywgZGVwdGgpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05ODItXHRpZiAoIXhkKSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy05ODYtXHRcdGlmIChkdWFsX2xpbmspXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk4NzpcdFx0XHR4ZCA9IHRiX3hkb21haW5fZmluZF9ieV9saW5rX2RlcHRoKHRiLCBkdWFsX2xpbmssXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk4OC1cdFx0XHRcdFx0XHRcdCAgIGRlcHRoKTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk5MC1cdGlmICh4ZCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5OTE6XHRcdHJlbW92ZV94ZG9tYWluKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTkyOlx0XHR0Yl94ZG9tYWluX3B1dCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk5My1cdH1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMTItXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMTM6XHRhZGRfeGRvbWFpbihzdywgcm91dGUsIFx1MDAyNnBrZy1cdTAwM2Vsb2NhbF91dWlkLCBcdTAwMjZwa2ctXHUwMDNlcmVtb3RlX3V1aWQsIGxpbmssXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMTQtXHRcdCAgICBkZXB0aCk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0xMDE4PXN0YXRpYyB2b2lkXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMTk6aWNtX2ZyX3hkb21haW5fZGlzY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMDIwLXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTAyMTpcdGNvbnN0IHN0cnVjdCBpY21fZnJfZXZlbnRfeGRvbWFpbl9kaXNjb25uZWN0ZWQgKnBrZyA9XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMjI6XHRcdChjb25zdCBzdHJ1Y3QgaWNtX2ZyX2V2ZW50X3hkb21haW5fZGlzY29ubmVjdGVkICopaGRyO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDIzOlx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMDI0LVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAyOS1cdCAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDMwOlx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfdXVpZCh0YiwgXHUwMDI2cGtnLVx1MDAzZXJlbW90ZV91dWlkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAzMS1cdGlmICh4ZCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDMyOlx0XHRyZW1vdmVfeGRvbWFpbih4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMzM6XHRcdHRiX3hkb21haW5fcHV0KHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAzNC1cdH1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTExMjc9c3RhdGljIGludCBpY21fdHJfY2hhbGxlbmdlX3N3aXRjaF9rZXkoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3N3aXRjaCAqc3csXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTU3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTU4OnN0YXRpYyBpbnQgaWNtX3RyX2FwcHJvdmVfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExNTktXHRcdFx0XHRcdGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExNjEte1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTYyOlx0c3RydWN0IGljbV90cl9wa2dfYXBwcm92ZV94ZG9tYWluX3Jlc3BvbnNlIHJlcGx5O1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTYzOlx0c3RydWN0IGljbV90cl9wa2dfYXBwcm92ZV94ZG9tYWluIHJlcXVlc3Q7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExNjQtXHRpbnQgcmV0O1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTE4OS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTE5MDpcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgdHJ1ZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExOTEtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExOTMtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExOTQ6c3RhdGljIGludCBpY21fdHJfeGRvbWFpbl90ZWFyX2Rvd24oc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3hkb21haW4gKnhkLFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTk1LVx0XHRcdFx0ICAgIGludCBzdGFnZSlcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTE5Ni17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExOTc6XHRzdHJ1Y3QgaWNtX3RyX3BrZ19kaXNjb25uZWN0X3hkb21haW5fcmVzcG9uc2UgcmVwbHk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExOTg6XHRzdHJ1Y3QgaWNtX3RyX3BrZ19kaXNjb25uZWN0X3hkb21haW4gcmVxdWVzdDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTE5OS1cdGludCByZXQ7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjE5LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjIwOnN0YXRpYyBpbnQgaWNtX3RyX2Rpc2Nvbm5lY3RfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMjEtXHRcdFx0XHRcdCAgIGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMjUtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMjY6XHRyZXQgPSBpY21fdHJfeGRvbWFpbl90ZWFyX2Rvd24odGIsIHhkLCAxKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIyNy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjMwLVx0dXNsZWVwX3JhbmdlKDEwLCA1MCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMzE6XHRyZXQgPSBpY21fdHJfeGRvbWFpbl90ZWFyX2Rvd24odGIsIHhkLCAyKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIzMi1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjM0LVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjM1Olx0aWNtX3hkb21haW5fYWN0aXZhdGVkKHhkLCBmYWxzZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMzYtXHRyZXR1cm4gMDtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTEyNDA9X19pY21fdHJfZGV2aWNlX2Nvbm5lY3RlZChzdHJ1Y3QgdGIgKnRiLCBjb25zdCBzdHJ1Y3QgaWNtX3BrZ19oZWFkZXIgKmhkcixcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyNDctXHRzdHJ1Y3QgdGJfc3dpdGNoICpzdywgKnBhcmVudF9zdztcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTI0ODpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTI0OS1cdHU2NCByb3V0ZTtcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyOTYtXHQvKiBYRG9tYWluIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2FtZSBhZGRyZXNzICovXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyOTc6XHR4ZCA9IHRiX3hkb21haW5fZmluZF9ieV9yb3V0ZSh0Yiwgcm91dGUpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjk4LVx0aWYgKHhkKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyOTk6XHRcdHJlbW92ZV94ZG9tYWluKHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTMwMDpcdFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMzAxLVx0fVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MTM2Nj1zdGF0aWMgdm9pZFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzY3OmljbV90cl94ZG9tYWluX2Nvbm5lY3RlZChzdHJ1Y3QgdGIgKnRiLCBjb25zdCBzdHJ1Y3QgaWNtX3BrZ19oZWFkZXIgKmhkcilcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM2OC17XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzNjk6XHRjb25zdCBzdHJ1Y3QgaWNtX3RyX2V2ZW50X3hkb21haW5fY29ubmVjdGVkICpwa2cgPVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzcwOlx0XHQoY29uc3Qgc3RydWN0IGljbV90cl9ldmVudF94ZG9tYWluX2Nvbm5lY3RlZCAqKWhkcjtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM3MTpcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM3Mi1cdHN0cnVjdCB0Yl9zd2l0Y2ggKnN3O1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM3OS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4MDpcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3V1aWQodGIsIFx1MDAyNnBrZy1cdTAwM2VyZW1vdGVfdXVpZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzODEtXHRpZiAoeGQpIHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM4Mi1cdFx0aWYgKHhkLVx1MDAzZXJvdXRlID09IHJvdXRlKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzODM6XHRcdFx0dXBkYXRlX3hkb21haW4oeGQsIHJvdXRlLCAwKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4NDpcdFx0XHR0Yl94ZG9tYWluX3B1dCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzODUtXHRcdFx0cmV0dXJuO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM4Ny1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4ODpcdFx0cmVtb3ZlX3hkb21haW4oeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzg5Olx0XHR0Yl94ZG9tYWluX3B1dCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzOTAtXHR9XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzOTEtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzOTI6XHQvKiBBbiBleGlzdGluZyB4ZG9tYWluIHdpdGggdGhlIHNhbWUgYWRkcmVzcyAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzkzOlx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfcm91dGUodGIsIHJvdXRlKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM5NC1cdGlmICh4ZCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzk1Olx0XHRyZW1vdmVfeGRvbWFpbih4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzOTY6XHRcdHRiX3hkb21haW5fcHV0KHhkKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM5Ny1cdH1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MTUtXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MTY6XHRhZGRfeGRvbWFpbihzdywgcm91dGUsIFx1MDAyNnBrZy1cdTAwM2Vsb2NhbF91dWlkLCBcdTAwMjZwa2ctXHUwMDNlcmVtb3RlX3V1aWQsIDAsIDApO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDE3LVx0dGJfc3dpdGNoX3B1dChzdyk7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0xNDIwPXN0YXRpYyB2b2lkXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MjE6aWNtX3RyX3hkb21haW5fZGlzY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDIyLXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQyMzpcdGNvbnN0IHN0cnVjdCBpY21fdHJfZXZlbnRfeGRvbWFpbl9kaXNjb25uZWN0ZWQgKnBrZyA9XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MjQ6XHRcdChjb25zdCBzdHJ1Y3QgaWNtX3RyX2V2ZW50X3hkb21haW5fZGlzY29ubmVjdGVkICopaGRyO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDI1Olx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDI2LVx0dTY0IHJvdXRlO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTQyOS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQzMDpcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3JvdXRlKHRiLCByb3V0ZSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MzEtXHRpZiAoeGQpIHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQzMjpcdFx0cmVtb3ZlX3hkb21haW4oeGQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDMzOlx0XHR0Yl94ZG9tYWluX3B1dCh4ZCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MzQtXHR9XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0xNzM1PXN0YXRpYyB2b2lkIGljbV9oYW5kbGVfbm90aWZpY2F0aW9uKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE3NTYtXHRcdGNhc2UgSUNNX0VWRU5UX1hET01BSU5fQ09OTkVDVEVEOlxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNzU3Olx0XHRcdGlmICh0Yl9pc194ZG9tYWluX2VuYWJsZWQoKSlcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTc1ODpcdFx0XHRcdGljbS1cdTAwM2V4ZG9tYWluX2Nvbm5lY3RlZCh0Yiwgbi1cdTAwM2Vwa2cpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzU5LVx0XHRcdGJyZWFrO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzYwLVx0XHRjYXNlIElDTV9FVkVOVF9YRE9NQUlOX0RJU0NPTk5FQ1RFRDpcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTc2MTpcdFx0XHRpZiAodGJfaXNfeGRvbWFpbl9lbmFibGVkKCkpXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE3NjI6XHRcdFx0XHRpY20tXHUwMDNleGRvbWFpbl9kaXNjb25uZWN0ZWQodGIsIG4tXHUwMDNlcGtnKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTc2My1cdFx0XHRicmVhaztcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE3NzctXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE3Nzg6XHR0Yl9kb21haW5fdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbnModGIpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzc5LX1cbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTIwNTY9c3RhdGljIHZvaWQgaWNtX3VucGx1Z19jaGlsZHJlbihzdHJ1Y3QgdGJfc3dpdGNoICpzdylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIwNjMtXHR0Yl9zd2l0Y2hfZm9yX2VhY2hfcG9ydChzdywgcG9ydCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMDY0Olx0XHRpZiAocG9ydC1cdTAwM2V4ZG9tYWluKVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMDY1Olx0XHRcdHBvcnQtXHUwMDNleGRvbWFpbi1cdTAwM2Vpc191bnBsdWdnZWQgPSB0cnVlO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMDY2LVx0XHRlbHNlIGlmICh0Yl9wb3J0X2hhc19yZW1vdGUocG9ydCkpXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0yMTAxPXN0YXRpYyB2b2lkIGljbV9mcmVlX3VucGx1Z2dlZF9jaGlsZHJlbihzdHJ1Y3QgdGJfc3dpdGNoICpzdylcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIxMDUtXHR0Yl9zd2l0Y2hfZm9yX2VhY2hfcG9ydChzdywgcG9ydCkge1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMTA2Olx0XHRpZiAocG9ydC1cdTAwM2V4ZG9tYWluIFx1MDAyNlx1MDAyNiBwb3J0LVx1MDAzZXhkb21haW4tXHUwMDNlaXNfdW5wbHVnZ2VkKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjIxMDc6XHRcdFx0dGJfeGRvbWFpbl9yZW1vdmUocG9ydC1cdTAwM2V4ZG9tYWluKTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MjEwODpcdFx0XHRwb3J0LVx1MDAzZXhkb21haW4gPSBOVUxMO1xuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMTA5LVx0XHR9IGVsc2UgaWYgKHRiX3BvcnRfaGFzX3JlbW90ZShwb3J0KSkge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjEyMD1zdGF0aWMgdm9pZCBpY21fcmVzY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjEyOS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MjEzMDpcdHRiX2RvbWFpbl91bnJlZ2lzdGVyX3VucGx1Z2dlZF94ZG9tYWlucyh0Yik7XG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIxMzEtfVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjQwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHRiX2NtX29wcyBpY21fZnJfb3BzID0ge1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjQxMS1cdC5kaXNjb25uZWN0X3BjaWVfcGF0aHMgPSBpY21fZGlzY29ubmVjdF9wY2llX3BhdGhzLFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyNDEyOlx0LmFwcHJvdmVfeGRvbWFpbl9wYXRocyA9IGljbV9mcl9hcHByb3ZlX3hkb21haW5fcGF0aHMsXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjI0MTM6XHQuZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzID0gaWNtX2ZyX2Rpc2Nvbm5lY3RfeGRvbWFpbl9wYXRocyxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjQxNC19O1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjQxNz1zdGF0aWMgY29uc3Qgc3RydWN0IHRiX2NtX29wcyBpY21fYXJfb3BzID0ge1xuLS1cblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTQ2NQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgVGh1bmRlcmJvbHQgeGRvbWFpbiBDcmVhdGlvbioqCgpPa2F5LCBzbyBgY29uZmlnZnMuY2AgaXMgdGhlIGtleSBmb3IgdGh1bmRlcmJvbHQgeGRvbWFpbnMsIGludGVyZXN0aW5nLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIGBkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmNgLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgKmFsbG93cyogdGhlIGNyZWF0aW9uIG9mIHRoZXNlIHhkb21haW5zLiBJJiMzOTtsbCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGUgY29kZSB0aGVyZSB0byBjb25maXJtIGFuZCB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MuIFRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGFuZCBzZXR1cCBvY2N1cnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGRvbWFpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjQ3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gVGh1bmRlcmJvbHQgQ29uZmlnRlMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBleHBvc2VkIHZpYSBgY29uZmlnZnNgIGZvciBUaHVuZGVyYm9sdCBkZXZpY2VzLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmNgLiBUaGF0IGZpbGUgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGhhbmRsaW5nIHRoZSBgY29uZmlnZnNgIGludGVyZmFjZSBmb3IgVGh1bmRlcmJvbHQsIHNvIGl0JiMzOTtzIHRoZSBuYXR1cmFsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24uIEkgZXhwZWN0IGl0JiMzOTtsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgYXR0cmlidXRlcyBhbmQgc3RydWN0dXJlcyB0aGF0IGFyZSBiZWluZyBjcmVhdGVkIHVuZGVyIHRoZSBob29kLCBhbmQgaG93IHVzZXJzcGFjZSBpcyBzdXBwb3NlZCB0byBpbnRlcmFjdCB3aXRoIHRoZW0uIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWdfaXRlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtMTMtXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM6MTQ6c3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIHRiX3Jvb3RfZ3JvdXBfdHlwZSA9IHtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0xNS1cdC5jdF9vd25lciA9IFRISVNfTU9EVUxFLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTkxOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYDoKCioqRGlzc2VjdGluZyBUaHVuZGVyYm9sdCBDb25maWd1cmF0aW9uIFRocm91Z2ggY29uZmlnZnMqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYC4gSSBleHBlY3QgdGhpcyBjb2RlIHRvIGJlIHRoZSBjcnVjaWFsIGludGVyZmFjZSBmb3IgaG93IHdlIGV4cG9zZSBUaHVuZGVyYm9sdCBkZXZpY2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZXJzcGFjZSwgbGlrZWx5IHRocm91Z2ggdGhlIGBjb25maWdmc2AgZmlsZXN5c3RlbS4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgY3JlYXRpb24gb2YgdmFyaW91cyBhdHRyaWJ1dGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoaW4gYGNvbmZpZ2ZzYCB0aGF0IHJlcHJlc2VudCBkaWZmZXJlbnQgYXNwZWN0cyBvZiBhIFRodW5kZXJib2x0IGNvbm5lY3Rpb24sIGxpa2UgcG9ydCBjb25maWd1cmF0aW9uLCBzZWN1cml0eSBsZXZlbHMsIGFuZCBwZXJoYXBzIGV2ZW4gcG93ZXIgbWFuYWdlbWVudCBwYXJhbWV0ZXJzLgoKTXkgZmlyc3QgdGhvdWdodCBpcyBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBob3cgdGhlIGRyaXZlciByZWdpc3RlcnMgaXRzZWxmIHdpdGggYGNvbmZpZ2ZzYC4gSXQmIzM5O2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhleSYjMzk7dmUgc3RydWN0dXJlZCB0aGUgaGllcmFyY2h5IG9mIHRoZSBleHBvc2VkIG5vZGVzIGFuZCBob3cgdGhleSYjMzk7dmUgaGFuZGxlZCB0aGUgdmFyaW91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5JiMzOTt2ZSBkZWFsdCB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgVGh1bmRlcmJvbHQmIzM5O3Mgc2VjdXJpdHkgZmVhdHVyZXMgYW5kIGhvdyB0aGF0IG1hcHMgdG8gdGhlIHVzZXItbGV2ZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBob3QtcGx1Z2dpbmcgYW5kIGRldmljZSBlbnVtZXJhdGlvbiB0b28uCgpJJiMzOTttIGtlZW4gdG8gc2VlIGlmIHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIGFueSBzcGVjaWZpYyBhY2Nlc3MgY29udHJvbHMgb3IgcGVybWlzc2lvbnMgbWFuYWdlbWVudCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb24gb2YgY3JpdGljYWwgVGh1bmRlcmJvbHQgc2V0dGluZ3MsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgVGh1bmRlcmJvbHQgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIHN5bmNocm9ub3VzIGNvbnRleHQgb2YgdGhlIGBjb25maWdmc2AgaW50ZXJmYWNlLiBJJiMzOTtsbCBhbHNvIGJlIHRyeWluZyB0byBzcG90IHBvdGVudGlhbCBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLCBvciBhbnkgZWxlZ2FudCBzb2x1dGlvbnMgdG8gcGFydGljdWxhcmx5IHRyaWNreSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLiBUaGlzIHNob3VsZCBiZSBhbiBpbGx1bWluYXRpbmcgcmVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHQvKlxuICAgMzpcdCAqIENvbmZpZ0ZTIHN1cHBvcnRcbiAgIDQ6XHQgKlxuICAgNTpcdCAqIENvcHlyaWdodCAoQykgMjAyNiwgSW50ZWwgQ29ycG9yYXRpb25cbiAgIDY6XHQgKiBBdXRob3I6IE1pa2EgV2VzdGVyYmVyZyBcdTAwM2NtaWthLndlc3RlcmJlcmdAbGludXguaW50ZWwuY29tXHUwMDNlXG4gICA3Olx0ICovXG4gICA4Olx0XG4gICA5Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29uZmlnZnMuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2V4cG9ydC5oXHUwMDNlXG4gIDExOlx0XG4gIDEyOlx0I2luY2x1ZGUgXCYjMzQ7dGIuaFwmIzM0O1xuICAxMzpcdFxuICAxNDpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB0Yl9yb290X2dyb3VwX3R5cGUgPSB7XG4gIDE1Olx0XHQuY3Rfb3duZXIgPSBUSElTX01PRFVMRSxcbiAgMTY6XHR9O1xuICAxNzpcdFxuICAxODpcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHRiX2NvbmZpZ2ZzID0ge1xuICAxOTpcdFx0LnN1X2dyb3VwID0ge1xuICAyMDpcdFx0XHQuY2dfaXRlbSA9IHtcbiAgMjE6XHRcdFx0XHQuY2lfbmFtZWJ1ZiA9IFwmIzM0O3RodW5kZXJib2x0XCYjMzQ7LFxuICAyMjpcdFx0XHRcdC5jaV90eXBlID0gXHUwMDI2dGJfcm9vdF9ncm91cF90eXBlLFxuICAyMzpcdFx0XHR9LFxuICAyNDpcdFx0fSxcbiAgMjU6XHR9O1xuICAyNjpcdFxuICAyNzpcdC8qKlxuICAyODpcdCAqIHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKCkgLSBSZWdpc3RlciBUaHVuZGVyYm9sdCBDb25maWdGUyBncm91cFxuICAyOTpcdCAqIEBncm91cDogR3JvdXAgdG8gcmVnaXN0ZXIuXG4gIDMwOlx0ICpcbiAgMzE6XHQgKiBSZWdpc3RlcnMgdGhlIG5ldyBAZ3JvdXAgdW5kZXIgVGh1bmRlcmJvbHQgc3Vic3lzdGVtIENvbmZpZ0ZTLlxuICAzMjpcdCAqXG4gIDMzOlx0ICogUmV0dXJuOiAwJSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZS5cbiAgMzQ6XHQgKi9cbiAgMzU6XHRpbnQgdGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4gIDM2Olx0e1xuICAzNzpcdFx0cmV0dXJuIGNvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKFx1MDAyNnRiX2NvbmZpZ2ZzLnN1X2dyb3VwLCBncm91cCk7XG4gIDM4Olx0fVxuICAzOTpcdEVYUE9SVF9TWU1CT0xfR1BMKHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKTtcbiAgNDA6XHRcbiAgNDE6XHQvKipcbiAgNDI6XHQgKiB0Yl9jb25maWdmc191bnJlZ2lzdGVyX2dyb3VwKCkgLSBVbnJlZ2lzdGVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBncm91cFxuICA0MzpcdCAqIEBncm91cDogR3JvdXAgdG8gdW5yZWdpc3Rlci5cbiAgNDQ6XHQgKi9cbiAgNDU6XHR2b2lkIHRiX2NvbmZpZ2ZzX3VucmVnaXN0ZXJfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4gIDQ2Olx0e1xuICA0NzpcdFx0Y29uZmlnZnNfdW5yZWdpc3Rlcl9ncm91cChncm91cCk7XG4gIDQ4Olx0fVxuICA0OTpcdEVYUE9SVF9TWU1CT0xfR1BMKHRiX2NvbmZpZ2ZzX3VucmVnaXN0ZXJfZ3JvdXApO1xuICA1MDpcdFxuICA1MTpcdGludCB0Yl9jb25maWdmc19pbml0KHZvaWQpXG4gIDUyOlx0e1xuICA1MzpcdFx0Y29uZmlnX2dyb3VwX2luaXQoXHUwMDI2dGJfY29uZmlnZnMuc3VfZ3JvdXApO1xuICA1NDpcdFx0bXV0ZXhfaW5pdChcdTAwMjZ0Yl9jb25maWdmcy5zdV9tdXRleCk7XG4gIDU1Olx0XHRyZXR1cm4gY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKFx1MDAyNnRiX2NvbmZpZ2ZzKTtcbiAgNTY6XHR9XG4gIDU3Olx0XG4gIDU4Olx0dm9pZCB0Yl9jb25maWdmc19leGl0KHZvaWQpXG4gIDU5Olx0e1xuICA2MDpcdFx0Y29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oXHUwMDI2dGJfY29uZmlnZnMpO1xuICA2MTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwNjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZ1bmN0aW9uOgoKKipEaWdnaW5nIGludG8gdGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAqKgoKQWxyaWdodCwgYHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwYCBpcyBhbiBleHBvcnRlZCBzeW1ib2wuIFRoYXQgbWVhbnMgaXQmIzM5O3MgYXZhaWxhYmxlIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIHRvIHVzZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aG8gKnVzZXMqIHRoaXMgZnVuY3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzIHRvIHJlYWxseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSeKAmWxsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIHNlZSB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZHJpdmVyLCBhIGNvcmUgY29tcG9uZW50LCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGltZSB0byBicmVhayBvdXQgdGhlIGdyZXAsIG9yIHdoYXRldmVyIHN0YXRpYyBhbmFseXNpcyB0b29sIEkmIzM5O3ZlIGdvdCBhdCBoYW5kLCBhbmQgZmluZCB0aG9zZSBjYWxsIGxvY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM9MTg9c3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gdGJfY29uZmlnZnMgPSB7XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTI3LS8qKlxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jOjI4OiAqIHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKCkgLSBSZWdpc3RlciBUaHVuZGVyYm9sdCBDb25maWdGUyBncm91cFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTI5LSAqIEBncm91cDogR3JvdXAgdG8gcmVnaXN0ZXIuXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTM0LSAqL1xuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jOjM1OmludCB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0zNi17XG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTM4LX1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYzozOTpFWFBPUlRfU1lNQk9MX0dQTCh0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtNDAtXG4tLVxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYz0xNjQ4PXN0YXRpYyBpbnQgX19pbml0IHRic3RyZWFtX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jLTE2NjUtXHRjb25maWdfZ3JvdXBfaW5pdChcdTAwMjZ0YnN0cmVhbV9ncm91cCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjE2NjY6XHRyZXQgPSB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cChcdTAwMjZ0YnN0cmVhbV9ncm91cCk7XG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jLTE2NjctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzYxNgoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEZWJ1Z2dpbmcgYSBTeXprYWxsZXItVHJpZ2dlcmVkIFRodW5kZXJib2x0IEJ1ZyoqCgpPa2F5LCBzbyBgc3RyZWFtLmNgIHVzZXMgaXQsIHRoYXQmIzM5O3MgYSBkYXRhIHBvaW50LiBCdXQgaG9sZCBvbiwgYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYCBoYXMgS1VuaXQgdGVzdHMuIEFuZCBJIGtub3cgS1VuaXQgdGVzdHMgKmNhbiogYmUgcnVuIGluIHN5emthbGxlciBpZiB0aGV5JiMzOTtyZSBjb21waWxlZCBpbiwgdGhvdWdoIGl0JiMzOTtzIG5vdCB0aGUgbm9ybSBmb3Igc3l6a2FsbGVyIHRvIHRhcmdldCB0aGVtIGRpcmVjdGx5IGZvciBmdXp6aW5nLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGBzeXotY2x1c3RlcmAgaXMgdGhlIGF1dGhvciBvZiB0aGUgcmVwb3J0IG1lYW5zIHN5emthbGxlciAqZm91bmQqIGEgYnVnLCB3aGljaCBpcyB0aGUgaW1wb3J0YW50IHRha2Vhd2F5IGhlcmUuCgpTbywgaG93IGV4YWN0bHkgKmRpZCogc3l6a2FsbGVyIGdldCB0byBgdGJuZXRfY29ubmVjdGVkX3dvcmtgPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBzdGFydCBieSBjaGVja2luZyBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgIGFnYWluLCBzcGVjaWZpY2FsbHkgbG9va2luZyB0byBzZWUgaWYgdGhpcyBpcyBhIEtVbml0IHRlc3QgdHJpZ2dlci4KCldhaXQsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgaXMgdGhlIFRodW5kZXJib2x0ICpuZXR3b3JraW5nKiBkcml2ZXIuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2U7IG5ldHdvcmtpbmcgd291bGQgYmUgYSBwcmltZSB0YXJnZXQgZm9yIHN5emthbGxlci4gSWYgc3l6a2FsbGVyIGZ1enplZCBpdCwgaXQgKm11c3QqIGJlIHJlYWNoYWJsZS4KCkhvbGQgb24sIGRvZXMgc3l6a2FsbGVyIGhhdmUgYSBwc2V1ZG8tc3lzY2FsbCBmb3IgVGh1bmRlcmJvbHQ/IEkgbmVlZCB0byBjaGVjayB0aGF0LiBObywgSSBqdXN0IGxvb2tlZCwgYW5kIHRoZXJlJiMzOTtzIG5vIGBzeXpfYCBwc2V1ZG8tc3lzY2FsbCBzcGVjaWZpY2FsbHkgZm9yIFRodW5kZXJib2x0LiBUaGF0JiMzOTtzIGEgY3VydmViYWxsLgoKT2theSwgbWF5YmUgc3l6a2FsbGVyIGlzIHJlYWNoaW5nIGl0IHRocm91Z2ggdGhlIGBkdW1teWAgVGh1bmRlcmJvbHQgZHJpdmVyPyBBIGxvdCBvZiBmdXp6aW5nIGZyYW1ld29ya3Mgd2lsbCB1c2UgZHVtbXkgZHJpdmVycyBmb3IgdGVzdGluZy4gSXMgdGhlcmUgZXZlbiBhIGR1bW15IGRyaXZlcj8gTGV0IG1lIGNoZWNrIGBkcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuY2AgYWdhaW4uIEkgbmVlZCB0byBzZWUgaWYgaXQgcmVnaXN0ZXJzIGEgZHVtbXkgdGh1bmRlcmJvbHQgY29udHJvbGxlci4gVGhpcyBtaWdodCBiZSB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkdW1teSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGh1bmRlcmJvbHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM9MTg9c3RhdGljIGludCB0Yl9wb3J0X2VuYWJsZV90bXUoc3RydWN0IHRiX3BvcnQgKnBvcnQsIGJvb2wgZW5hYmxlKVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNDYtXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jOjQ3OnN0YXRpYyB2b2lkIHRiX3BvcnRfZHVtbXlfcmVhZChzdHJ1Y3QgdGJfcG9ydCAqcG9ydClcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNDgte1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNTEtXHQgKiBjb25maWcgc3BhY2UgdGhlIHJlYWQgZGF0YSBpcyBub3QgY2xlYXJlZCBvbiBMUi4gVG8gYXZvaWRcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM6NTI6XHQgKiByZWFkaW5nIHN0YWxlIGRhdGEgb24gbmV4dCByZWFkIHBlcmZvcm0gb25lIGR1bW15IHJlYWQgYWZ0ZXJcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNTMtXHQgKiBwb3J0IGNhcGFiaWxpdGllcyBhcmUgd2Fsa2VkLlxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNTUtXHRpZiAodGJfc3dpdGNoX2lzX2xpZ2h0X3JpZGdlKHBvcnQtXHUwMDNlc3cpKSB7XG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jOjU2Olx0XHR1MzIgZHVtbXk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTU3LVxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYzo1ODpcdFx0dGJfcG9ydF9yZWFkKHBvcnQsIFx1MDAyNmR1bW15LCBUQl9DRkdfUE9SVCwgMCwgMSk7XG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTU5LVx0fVxuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM9MTI0PWludCB0Yl9wb3J0X2ZpbmRfY2FwKHN0cnVjdCB0Yl9wb3J0ICpwb3J0LCBlbnVtIHRiX3BvcnRfY2FwIGNhcClcbi0tXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTEzMy1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM6MTM0Olx0dGJfcG9ydF9kdW1teV9yZWFkKHBvcnQpO1xuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYy0xMzUtXHR0Yl9wb3J0X2VuYWJsZV90bXUocG9ydCwgZmFsc2UpO1xuLS1cbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM9MTE3Mz1pbnQgdGJfY2ZnX2dldF91cHN0cmVhbV9wb3J0KHN0cnVjdCB0Yl9jdGwgKmN0bCwgdTY0IHJvdXRlKVxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuYy0xMTc0LXtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM6MTE3NTpcdHUzMiBkdW1teTtcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM6MTE3NjpcdHN0cnVjdCB0Yl9jZmdfcmVzdWx0IHJlcyA9IHRiX2NmZ19yZWFkX3JhdyhjdGwsIFx1MDAyNmR1bW15LCByb3V0ZSwgMCxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmMtMTE3Ny1cdFx0XHRcdFx0XHQgICBUQl9DRkdfU1dJVENILCAwLCAxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc2NgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RibmV0X2Nvbm5lY3RfZmFpbGVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz01ODk9c3RhdGljIGludCB0Ym5ldF9hbGxvY190eF9idWZmZXJzKHN0cnVjdCB0Ym5ldCAqbmV0KVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02MjgtXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NjI5OnN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTYzMC17XG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTY0Mz1zdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY2NS1cdFx0XHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVx1MDAzZXhkLCByZXQpO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY2NjpcdFx0dGJuZXRfY29ubmVjdF9mYWlsZWQobmV0KTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NjctXHRcdHJldHVybjtcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzEwLVx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cdTAwM2V4ZCwgbmV0LVx1MDAzZXJlbW90ZV90cmFuc21pdF9wYXRoKTtcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo3MTE6XHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTcxMi19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MTEwCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGJuZXRfY29ubmVjdGVkX3dvcmsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC90aHVuZGVyYm9sdC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTM2OT1zdGF0aWMgdm9pZCB0Ym5ldF90ZWFyX2Rvd24oc3RydWN0IHRibmV0ICpuZXQsIGJvb2wgc2VuZF9sb2dvdXQpXG4tLVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTM4OS1cdFx0LyogVGVhciB0aGUgcGF0aHMgZG93biBiZWZvcmUgc3RvcHBpbmcgdGhlIHJpbmdzLiAgVGhpcyBtaXJyb3JzXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MzkwOlx0XHQgKiB0Ym5ldF9jb25uZWN0ZWRfd29yaygpLCB3aGljaCBlbmFibGVzIHRoZSBwYXRocyBsYXN0IHNvIHRoZVxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTM5MS1cdFx0ICogUnggcmluZyBpcyBwcmltZWQgYmVmb3JlIHBhY2tldHMgY2FuIGFycml2ZS4gIFN0b3BwaW5nIGFcbi0tXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NjI5PXN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NDItXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NjQzOnN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NDQte1xuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xMzcxPXN0YXRpYyBpbnQgdGJuZXRfcHJvYmUoc3RydWN0IHRiX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHRiX3NlcnZpY2VfaWQgKmlkKVxuLS1cbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg1LVx0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2bmV0LVx1MDAzZWxvZ2luX3dvcmssIHRibmV0X2xvZ2luX3dvcmspO1xuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjEzODY6XHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZWNvbm5lY3RlZF93b3JrLCB0Ym5ldF9jb25uZWN0ZWRfd29yayk7XG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM4Ny1cdElOSVRfV09SSyhcdTAwMjZuZXQtXHUwMDNlZGlzY29ubmVjdF93b3JrLCB0Ym5ldF9kaXNjb25uZWN0X3dvcmspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzUzNwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCNF9ORVQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0Ym5ldF9jb25uZWN0ZWRfd29yayYjMzQ7LAogICAgJiMzNDt0Ym5ldF9jb25uZWN0X2ZhaWxlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGluIGBkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNgIHRvIGFkZCBhIG5ldyBmdW5jdGlvbiBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIHdoaWNoIHJlc2V0cyBgbmV0LVx1MDAzZWxvZ2luX3NlbnQgPSBmYWxzZWAgd2hlbiBjb25uZWN0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaWYgVVNCNF9ORVQgaXMgZW5hYmxlZCBhbmQgdGh1bmRlcmJvbHQgbmV0d29ya2luZyBpcyB1c2VkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGFuZCBgdGJuZXRfY29ubmVjdF9mYWlsZWRgLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0I0X05FVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RibmV0X2Nvbm5lY3RlZF93b3JrJiMzNDssCiAgICAmIzM0O3RibmV0X2Nvbm5lY3RfZmFpbGVkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlYCB3aGVuIGNvbm5lY3Rpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGh1bmRlcmJvbHQgbmV0d29yayBkcml2ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBVU0I0X05FVCBpcyBlbmFibGVkIGFuZCB0aHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIHVzZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgYW5kIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMDk6NDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBzdGF0ZSBtYWNoaW5lIGlzc3VlIGluIHRoZSBUaHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlciBieSBjbGVhcmluZyB0aGUgYGxvZ2luX3NlbnRgIGZsYWcgd2hlbiB0aGUgY29ubmVjdGlvbiBzZXR1cCBmYWlscywgcHJldmVudGluZyBgdGJuZXRfdGVhcl9kb3duKClgIGZyb20gaW5jb3JyZWN0bHkgdW53aW5kaW5nIGFscmVhZHkgcmVsZWFzZWQgcmVzb3VyY2VzLiBJdCBhbHNvIGFkZHMgYSBtaXNzaW5nIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGlmIGl0cyBhbGxvY2F0aW9uIHJldHVybnMgYW4gdW5leHBlY3RlZCB2YWxpZCBJRC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIGludmFsaWQgc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2MjYwNzQ0OWRkMjUyOTBjNDFmMTUzMmQyNTU3YWY2Njc4YTZkNTYxCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDI6MTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMKaW5kZXggOTg4OTM3MzJiYzZlNC4uYjZhZWMyMTVhOGU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYwpAQCAtNjI2LDYgJiM0Mzs2MjYsMjAgQEAgc3RhdGljIGludCB0Ym5ldF9hbGxvY190eF9idWZmZXJzKHN0cnVjdCB0Ym5ldCAqbmV0KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBNYXJrIHRoZSBjb25uZWN0aW9uIGFzIG5vIGxvbmdlciBlc3RhYmxpc2hlZCBzbyB0aGF0CiYjNDM7CSAqIHRibmV0X3RlYXJfZG93bigpIGRvZXMgbm90IHJ1biBvdmVyIHRoZSB1bndpbmQgd2UganVzdCBkaWQuCiYjNDM7CSAqIE9ubHkgbG9naW5fc2VudCBpcyBjbGVhcmVkOiBsb2dpbl9yZWNlaXZlZCByZWNvcmRzIHRoYXQgdGhlIHBlZXIKJiM0MzsJICogaGFzIGxvZ2dlZCBpbiB3aXRoIHVzIGFuZCBjYXJyaWVzIHRoZSB0cmFuc21pdCBwYXRoIGl0IGdhdmUgdXMsCiYjNDM7CSAqIGFuZCBub3RoaW5nIG9uIHRoaXMgc2lkZSBjYW4gbWFrZSB0aGUgcGVlciBzZW5kIHRoYXQgYWdhaW4uCiYjNDM7CSAqLwomIzQzOwltdXRleF9sb2NrKCZhbXA7bmV0LSZndDtjb25uZWN0aW9uX2xvY2spOwomIzQzOwluZXQtJmd0O2xvZ2luX3NlbnQgPSBmYWxzZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7bmV0LSZndDtjb25uZWN0aW9uX2xvY2spOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTsKQEAgLTY0Nyw2ICYjNDM7NjYxLDkgQEAgc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCXJldCA9IHRiX3hkb21haW5fYWxsb2NfaW5faG9waWQobmV0LSZndDt4ZCwgbmV0LSZndDtyZW1vdGVfdHJhbnNtaXRfcGF0aCk7CiAJaWYgKHJldCAhPSBuZXQtJmd0O3JlbW90ZV90cmFuc21pdF9wYXRoKSB7CiAJCW5ldGRldl9lcnIobmV0LSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIGFsbG9jYXRlIFJ4IEhvcElEXG4mIzM0Oyk7CiYjNDM7CQlpZiAocmV0ICZndDs9IDApCiYjNDM7CQkJdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC0mZ3Q7eGQsIHJldCk7CiYjNDM7CQl0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpOwogCQlyZXR1cm47CiAJfQogCkBAIC02OTEsNiAmIzQzOzcwOCw3IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAl0Yl9yaW5nX3N0b3AobmV0LSZndDtyeF9yaW5nLnJpbmcpOwogCXRiX3Jpbmdfc3RvcChuZXQtJmd0O3R4X3JpbmcucmluZyk7CiAJdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC0mZ3Q7eGQsIG5ldC0mZ3Q7cmVtb3RlX3RyYW5zbWl0X3BhdGgpOwomIzQzOwl0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpOwogfQogCiBzdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDA5OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzODcKCQkJCQkJCW91dHB1dDogMTU4CgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFRodW5kZXJib2x0IE5ldHdvcmsgRHJpdmVyIFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AsIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiB0aGUgY29ubmVjdGlvbiBzZXR1cCBhbmQgdGVhcmRvd24gd2l0aGluIHRoZSBUaHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlci4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkIGJ1ZyBmaXguCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBhIG5ldyBmdW5jdGlvbiwgYHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KWAuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IHNldHMgYG5ldC0mZ3Q7bG9naW5fc2VudCA9IGZhbHNlYCB1bmRlciBhIG11dGV4LiBUaGUgcHVycG9zZSBpcyBjcnVjaWFsLiBJdCYjMzk7cyB0byBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gb3IgaW5jb3JyZWN0IHN0YXRlIHRyYW5zaXRpb24gd2hlcmUgYHRibmV0X3RlYXJfZG93bigpYCBtaWdodCBleGVjdXRlIHByZW1hdHVyZWx5LCBwb3RlbnRpYWxseSB1bndpbmRpbmcgcmVzb3VyY2VzIHRoYXQgYXJlIGFscmVhZHkgY2xlYW5lZCB1cCBvciBpbiBhbiBpbnZhbGlkIHN0YXRlLiBUaGUgY29tbWVudCBtYWtlcyBpdCBjbGVhciB0aGF0IHdlIG9ubHkgY2xlYXIgYGxvZ2luX3NlbnRgIGJlY2F1c2UgYGxvZ2luX3JlY2VpdmVkYCBkZWFscyB3aXRoIGFuIGVzdGFibGlzaGVkIHN0YXRlIGZyb20gdGhlIHBlZXIsIHdoaWNoIGlzIGltbXV0YWJsZSBmcm9tIG91ciBzaWRlLgoKVGhpcyBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYHRiX3hkb21haW5fYWxsb2NfaW5faG9waWRgIGZhaWxzIG9yIG90aGVyIGNvbm5lY3Rpb24gc2V0dXAgaXNzdWVzIGFyaXNlIHdpdGhpbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgY2hlY2sgYW5kIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGluIHRoZSBmYWlsdXJlIHBhdGggb2YgYHRiX3hkb21haW5fYWxsb2NfaW5faG9waWRgIHRvIGF2b2lkIGFueSByZXNvdXJjZSBsZWFrcyBpbiB0aG9zZSBjYXNlcy4KCk15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGlzIGlzIGFkZHJlc3NpbmcgYSByZXNvdXJjZSBsZWFrIG9yIGEgY2xhc3NpYyBzdGF0ZSBtYWNoaW5lIGJ1ZyDigJMgbGlrZWx5IGEgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZS1mcmVlLCBvciBzb21lIGtpbmQgb2YgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9uLiBJIGRvbiYjMzk7dCBzZWUgYW55dGhpbmcgaW1tZWRpYXRlbHkgdGhhdCBzY3JlYW1zICYjMzQ7dW5pbml0aWFsaXplZCBtZW1vcnkgdnVsbmVyYWJpbGl0eS4mIzM0OyBJIG5lZWQgdG8gYmUgdGhvcm91Z2ggdGhvdWdoLCBzbyBJJiMzOTtsbCByZXZpZXcgYWdhaW46IFRoZSBjb2RlIGp1c3Qgc2V0cyBhIGJvb2xlYW4gZmxhZyBhbmQgY2FsbHMgYHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZGAgd2hpY2ggYXJlIHZlcnkgc3RhbmRhcmQgb3BlcmF0aW9ucyBpbiB0aGVzZSBjb250ZXh0cy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGZpeCwgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBLQVNBTi9MT0NLREVQL2V0Yy4gd291bGQgYmUgd2VsbC1zdWl0ZWQgdG8gY2F0Y2ggYW55IGVycm9ycyBoZXJlLiBLTVNBTiBpcyBncmVhdCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnksIGJ1dCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGFwcGVhciB0byBpbnRyb2R1Y2UgYW55IG5ldyBhcmVhcyBmb3IgS01TQU4gdG8gYmUgY29uY2VybmVkIHdpdGguCgpUaGVyZWZvcmUsIEkmIzM5O20gY29tZm9ydGFibGUgc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAgZm9yIHRoaXMuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBwYXRjaCBpcyBhIGZvY3VzZWQgc3RhdGUgbWFjaGluZSBjb3JyZWN0aW9uLCBwcmV2ZW50aW5nIHBvdGVudGlhbCByZXNvdXJjZSBtYW5hZ2VtZW50IGlzc3VlcyB0aHJvdWdoIGNsZWFyaW5nIG9mIGEgYm9vbGVhbiBmbGFnIG9uIGNvbm5lY3Rpb24gZmFpbHVyZSwgYXMgd2VsbCBhcyBmaXhpbmcgdGhlIHJlbGVhc2Ugb2YgcmVzb3VyY2VzIG9uIEhvcElEIGFsbG9jYXRpb24gZmFpbHVyZS4gSXQgYWRkcmVzc2VzIHJlc291cmNlIGxlYWtzIG9yIGluY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9ucy4gSXQgZG9lcyAqbm90KiBpbnRyb2R1Y2UgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zIG9yIGRhdGEgY29waWVzIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCB3aGljaCBtZWFucyB0aGF0IHRoaXMgZml4IGRvZXNuJiMzOTt0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIHBhdGNoJiMzOTtzIGNvcnJlY3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAwOTo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQyOjEyLjc4NTQ5MTQ4OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM5OTg2MjIzMjM3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0I0X05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRibmV0X2Nvbm5lY3RlZF93b3JrXCIsXG4gICAgXCJ0Ym5ldF9jb25uZWN0X2ZhaWxlZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzdGF0ZSBtYWNoaW5lIGlzc3VlIGluIHRoZSBUaHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlciBieSBjbGVhcmluZyB0aGUgYGxvZ2luX3NlbnRgIGZsYWcgd2hlbiB0aGUgY29ubmVjdGlvbiBzZXR1cCBmYWlscywgcHJldmVudGluZyBgdGJuZXRfdGVhcl9kb3duKClgIGZyb20gaW5jb3JyZWN0bHkgdW53aW5kaW5nIGFscmVhZHkgcmVsZWFzZWQgcmVzb3VyY2VzLiBJdCBhbHNvIGFkZHMgYSBtaXNzaW5nIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGlmIGl0cyBhbGxvY2F0aW9uIHJldHVybnMgYW4gdW5leHBlY3RlZCB2YWxpZCBJRC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIGludmFsaWQgc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXFx1MDAzZWxvZ2luX3NlbnQgPSBmYWxzZWAgd2hlbiBjb25uZWN0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaWYgVVNCNF9ORVQgaXMgZW5hYmxlZCBhbmQgdGh1bmRlcmJvbHQgbmV0d29ya2luZyBpcyB1c2VkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGFuZCBgdGJuZXRfY29ubmVjdF9mYWlsZWRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0MjoxMi43ODU0OTg4NDlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3MzQyNTY0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDYyNjA3NDQ5ZGQyNTI5MGM0MWYxNTMyZDI1NTdhZjY2NzhhNmQ1NjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMDk6NDI6MTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jIGIvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXFxuaW5kZXggOTg4OTM3MzJiYzZlNC4uYjZhZWMyMTVhOGU5MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNcXG5AQCAtNjI2LDYgKzYyNiwyMCBAQCBzdGF0aWMgaW50IHRibmV0X2FsbG9jX3R4X2J1ZmZlcnMoc3RydWN0IHRibmV0ICpuZXQpXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0X2ZhaWxlZChzdHJ1Y3QgdGJuZXQgKm5ldClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBNYXJrIHRoZSBjb25uZWN0aW9uIGFzIG5vIGxvbmdlciBlc3RhYmxpc2hlZCBzbyB0aGF0XFxuK1xcdCAqIHRibmV0X3RlYXJfZG93bigpIGRvZXMgbm90IHJ1biBvdmVyIHRoZSB1bndpbmQgd2UganVzdCBkaWQuXFxuK1xcdCAqIE9ubHkgbG9naW5fc2VudCBpcyBjbGVhcmVkOiBsb2dpbl9yZWNlaXZlZCByZWNvcmRzIHRoYXQgdGhlIHBlZXJcXG4rXFx0ICogaGFzIGxvZ2dlZCBpbiB3aXRoIHVzIGFuZCBjYXJyaWVzIHRoZSB0cmFuc21pdCBwYXRoIGl0IGdhdmUgdXMsXFxuK1xcdCAqIGFuZCBub3RoaW5nIG9uIHRoaXMgc2lkZSBjYW4gbWFrZSB0aGUgcGVlciBzZW5kIHRoYXQgYWdhaW4uXFxuK1xcdCAqL1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZuZXQtXFx1MDAzZWNvbm5lY3Rpb25fbG9jayk7XFxuK1xcdG5ldC1cXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNm5ldC1cXHUwMDNlY29ubmVjdGlvbl9sb2NrKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCB0Ym5ldCAqbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHR5cGVvZigqbmV0KSwgY29ubmVjdGVkX3dvcmspO1xcbkBAIC02NDcsNiArNjYxLDkgQEAgc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiBcXHRyZXQgPSB0Yl94ZG9tYWluX2FsbG9jX2luX2hvcGlkKG5ldC1cXHUwMDNleGQsIG5ldC1cXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xcbiBcXHRpZiAocmV0ICE9IG5ldC1cXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpIHtcXG4gXFx0XFx0bmV0ZGV2X2VycihuZXQtXFx1MDAzZWRldiwgXFxcImZhaWxlZCB0byBhbGxvY2F0ZSBSeCBIb3BJRFxcXFxuXFxcIik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cXHUwMDNleGQsIHJldCk7XFxuK1xcdFxcdHRibmV0X2Nvbm5lY3RfZmFpbGVkKG5ldCk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtNjkxLDYgKzcwOCw3IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0dGJfcmluZ19zdG9wKG5ldC1cXHUwMDNlcnhfcmluZy5yaW5nKTtcXG4gXFx0dGJfcmluZ19zdG9wKG5ldC1cXHUwMDNldHhfcmluZy5yaW5nKTtcXG4gXFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cXHUwMDNleGQsIG5ldC1cXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xcbitcXHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDI6MTMuMjU5NjE1MjQ1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzE1MTUwMTE1MzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQjRfTkVUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGJuZXRfY29ubmVjdGVkX3dvcmtcIixcbiAgICBcInRibmV0X2Nvbm5lY3RfZmFpbGVkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYHRibmV0X2Nvbm5lY3RlZF93b3JrYCBpbiBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYCB0byBhZGQgYSBuZXcgZnVuY3Rpb24gYHRibmV0X2Nvbm5lY3RfZmFpbGVkYCB3aGljaCByZXNldHMgYG5ldC1cXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlYCB3aGVuIGNvbm5lY3Rpb24gZmFpbHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdGh1bmRlcmJvbHQgbmV0d29yayBkcml2ZXIuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSBpZiBVU0I0X05FVCBpcyBlbmFibGVkIGFuZCB0aHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIHVzZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgYW5kIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDYyNjA3NDQ5ZGQyNTI5MGM0MWYxNTMyZDI1NTdhZjY2NzhhNmQ1NjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAwOTo0MjoxMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYyBiL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY1xuaW5kZXggOTg4OTM3MzJiYzZlNC4uYjZhZWMyMTVhOGU5MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG5AQCAtNjI2LDYgKzYyNiwyMCBAQCBzdGF0aWMgaW50IHRibmV0X2FsbG9jX3R4X2J1ZmZlcnMoc3RydWN0IHRibmV0ICpuZXQpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXG4re1xuK1x0LypcbitcdCAqIE1hcmsgdGhlIGNvbm5lY3Rpb24gYXMgbm8gbG9uZ2VyIGVzdGFibGlzaGVkIHNvIHRoYXRcbitcdCAqIHRibmV0X3RlYXJfZG93bigpIGRvZXMgbm90IHJ1biBvdmVyIHRoZSB1bndpbmQgd2UganVzdCBkaWQuXG4rXHQgKiBPbmx5IGxvZ2luX3NlbnQgaXMgY2xlYXJlZDogbG9naW5fcmVjZWl2ZWQgcmVjb3JkcyB0aGF0IHRoZSBwZWVyXG4rXHQgKiBoYXMgbG9nZ2VkIGluIHdpdGggdXMgYW5kIGNhcnJpZXMgdGhlIHRyYW5zbWl0IHBhdGggaXQgZ2F2ZSB1cyxcbitcdCAqIGFuZCBub3RoaW5nIG9uIHRoaXMgc2lkZSBjYW4gbWFrZSB0aGUgcGVlciBzZW5kIHRoYXQgYWdhaW4uXG4rXHQgKi9cbitcdG11dGV4X2xvY2soXHUwMDI2bmV0LVx1MDAzZWNvbm5lY3Rpb25fbG9jayk7XG4rXHRuZXQtXHUwMDNlbG9naW5fc2VudCA9IGZhbHNlO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNm5ldC1cdTAwM2Vjb25uZWN0aW9uX2xvY2spO1xuK31cbitcbiBzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHRibmV0ICpuZXQgPSBjb250YWluZXJfb2Yod29yaywgdHlwZW9mKCpuZXQpLCBjb25uZWN0ZWRfd29yayk7XG5AQCAtNjQ3LDYgKzY2MSw5IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHJldCA9IHRiX3hkb21haW5fYWxsb2NfaW5faG9waWQobmV0LVx1MDAzZXhkLCBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xuIFx0aWYgKHJldCAhPSBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpIHtcbiBcdFx0bmV0ZGV2X2VycihuZXQtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBhbGxvY2F0ZSBSeCBIb3BJRFxcblwiKTtcbitcdFx0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cdTAwM2V4ZCwgcmV0KTtcbitcdFx0dGJuZXRfY29ubmVjdF9mYWlsZWQobmV0KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTY5MSw2ICs3MDgsNyBAQCBzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHR0Yl9yaW5nX3N0b3AobmV0LVx1MDAzZXJ4X3JpbmcucmluZyk7XG4gXHR0Yl9yaW5nX3N0b3AobmV0LVx1MDAzZXR4X3JpbmcucmluZyk7XG4gXHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVx1MDAzZXhkLCBuZXQtXHUwMDNlcmVtb3RlX3RyYW5zbWl0X3BhdGgpO1xuK1x0dGJuZXRfY29ubmVjdF9mYWlsZWQobmV0KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdGJuZXRfbG9naW5fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0MjoxMy4yNTk2MTY1NTVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU0NjQ2NDU0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBUaHVuZGVyYm9sdCBOZXR3b3JraW5nIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYC4gSXQgc2VlbXMgdGhleSd2ZSBhZGRlZCBhIG5ldyBmdW5jdGlvbiBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIGFuZCBhcmUgY2FsbGluZyBpdCBmcm9tIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AuIFRoZXkndmUgYWxzbyBhZGRlZCB0aGlzIGNvbmRpdGlvbmFsIGBpZiAocmV0IFx1MDAzZT0gMCkgdGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cdTAwM2V4ZCwgcmV0KTtgIGJlZm9yZSBjYWxsaW5nIHRoYXQgZmFpbHVyZSBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuIExldCBtZSBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgYHRibmV0X2Nvbm5lY3RlZF93b3JrYCBpcyBhbGwgYWJvdXQgYW5kIGNvbmZpcm0gaXRzIHJlYWNoYWJpbGl0eSB3aXRoaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmtpbmcgY29udGV4dC5cblxuVGh1bmRlcmJvbHQgbmV0d29ya2luZywgcmlnaHQsIHRoYXQncyBkZWZpbml0ZWx5IGhhcmR3YXJlLXNwZWNpZmljLiBJJ20gdGhpbmtpbmcsIGNvdWxkIHdlIHBvdGVudGlhbGx5IGVtdWxhdGUgdGhpcywgb3IgZXZlbiBmdXp6IGl0PyBIYW5nIG9uLCB0aG91Z2guIFRodW5kZXJib2x0IG5ldHdvcmtpbmcgKnJlcXVpcmVzKiBUaHVuZGVyYm9sdCBoYXJkd2FyZS4gVGhhdCdzIGEgc3RpY2tpbmcgcG9pbnQuIFN0YW5kYXJkIFFFTVUgZG9lc24ndCBlbXVsYXRlIHRoZSBUaHVuZGVyYm9sdCBjb250cm9sbGVyLCBkb2VzIGl0PyBOZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgUUVNVSBoYXMgKmFueSogVGh1bmRlcmJvbHQgZW11bGF0aW9uIGF0IGFsbCwgb3IgaWYgdGhpcyBpcyBwdXJlbHkgaGFyZHdhcmUtZGVwZW5kZW50LlxuXG5SaWdodCwgYmFjayB0byB0aGUgZHJpdmVyIC0gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AuIE9rYXksIHNvLCBpcyB0aGlzIGV2ZW4gd29ydGggZ29pbmcgYWZ0ZXIgd2l0aCBmdXp6aW5nPyBCZWNhdXNlIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBlbXVsYXRlZCwgaXQncyBhIG5vbi1zdGFydGVyLiBBbHJpZ2h0LCBRRU1VIGNvbmZpcm1lZCwgaXQgZG9lc24ndCBlbXVsYXRlIFRodW5kZXJib2x0IGNvbnRyb2xsZXJzLiBTbyB0aGF0J3Mgb3V0LlxuXG5XYWl0IGEgc2Vjb25kLCBva2F5LCBUaHVuZGVyYm9sdCAqaXMqIFBDSWUtYmFzZWQsIGJ1dCBUaHVuZGVyYm9sdCBuZXR3b3JraW5nIGlzIGEgKnNvZnR3YXJlKiBwcm90b2NvbCBsYXllcmVkIG9uIHRvcCBvZiBUaHVuZGVyYm9sdCBYRG9tYWluIGNvbm5lY3Rpb25zLiBIbW0sIHRoYXQncyBhIGRpZmZlcmVudCBhbmdsZS4gQ2FuIHN5emthbGxlciBmdXp6IFRodW5kZXJib2x0IFhEb21haW4/IFRoYXQncyBhIHBvc3NpYmlsaXR5LiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUncyBhbnkgZXhpc3Rpbmcgc3l6a2FsbGVyIHN1cHBvcnQgZm9yIFRodW5kZXJib2x0LCBzcGVjaWZpY2FsbHkgdGhlIFhEb21haW4gaW50ZXJmYWNlLiBOZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBleGlzdGluZyBncm91bmR3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzkwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDM6MDIuODA2MDgzMzY5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTk2MDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRodW5kZXJib2x0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RodW5kZXJib2x0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnPTI9Y29uZmlnIFVTQjRfTkVUXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9LY29uZmlnLTExLVxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZSB3aWxsIGJlXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvS2NvbmZpZzoxMjpcXHQgIGNhbGxlZCB0aHVuZGVyYm9sdF9uZXQuXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9NYWtlZmlsZS0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9NYWtlZmlsZToyOm9iai0kKENPTkZJR19VU0I0X05FVCkgOj0gdGh1bmRlcmJvbHRfbmV0Lm9cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9NYWtlZmlsZTozOnRodW5kZXJib2x0X25ldC1vYmpzIDo9IG1haW4ubyB0cmFjZS5vXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvTWFrZWZpbGUtNC1cXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RodW5kZXJib2x0LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTIyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC91dWlkLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDMtI2RlZmluZSBUQk5FVF9NQVhfUEFZTE9BRF9TSVpFXFx0XFxcXFxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0NDpcXHQoVEJORVRfRlJBTUVfU0laRSAtIHNpemVvZihzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyKSlcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDUtLyogUnggcGFja2V0cyBuZWVkIHRvIGhvbGQgc3BhY2UgZm9yIHNrYl9zaGFyZWRfaW5mbyAqL1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTUzLS8qKlxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo1NDogKiBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyIC0gSGVhZGVyIGZvciBlYWNoIFRodW5kZXJib2x0IGZyYW1lXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTU1LSAqIEBmcmFtZV9zaXplOiBzaXplIG9mIHRoZSBkYXRhIHdpdGggdGhlIGZyYW1lXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjMtICovXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY0OnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIge1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NS1cXHRfX2xlMzIgZnJhbWVfc2l6ZTtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03MC1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NzE6ZW51bSB0aHVuZGVyYm9sdF9pcF9mcmFtZV9wZGYge1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03Mi1cXHRUQklQX1BERl9GUkFNRV9TVEFSVCA9IDEsXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNzUtXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc2OmVudW0gdGh1bmRlcmJvbHRfaXBfdHlwZSB7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTc3LVxcdFRCSVBfTE9HSU4sXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtODItXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjgzOnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIge1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy04NC1cXHR1MzIgcm91dGVfaGk7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtOTctXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjk4OnN0cnVjdCB0aHVuZGVyYm9sdF9pcF9sb2dpbiB7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjk5OlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgaGRyO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMDAtXFx0dTMyIHByb3RvX3ZlcnNpb247XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTA2LVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMDc6c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luX3Jlc3BvbnNlIHtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTA4OlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgaGRyO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMDktXFx0dTMyIHN0YXR1cztcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTQtXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjExNTpzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfbG9nb3V0IHtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTE2OlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9oZWFkZXIgaGRyO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTctfTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTE4LVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMTk6c3RydWN0IHRodW5kZXJib2x0X2lwX3N0YXR1cyB7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjEyMDpcXHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfaGVhZGVyIGhkcjtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTIxLVxcdHUzMiBzdGF0dXM7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTgyPXN0cnVjdCB0Ym5ldCB7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTk5LVxcdHN0cnVjdCB3b3JrX3N0cnVjdCBkaXNjb25uZWN0X3dvcms7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjIwMDpcXHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyIHJ4X2hkcjtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjAxLVxcdHN0cnVjdCB0Ym5ldF9yaW5nIHJ4X3Jpbmc7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MjIwPU1PRFVMRV9QQVJNX0RFU0MoZTJlLCBcXFwiVVNCNE5FVCBmdWxsIGVuZC10by1lbmQgZmxvdyBjb250cm9sIChkZWZhdWx0OiB0cnVlKVxcXCIpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yMjEtXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjIyMjpzdGF0aWMgdm9pZCB0Ym5ldF9maWxsX2hlYWRlcihzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfaGVhZGVyICpoZHIsIHU2NCByb3V0ZSxcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjIzLVxcdHU4IHNlcXVlbmNlLCBjb25zdCB1dWlkX3QgKmluaXRpYXRvcl91dWlkLCBjb25zdCB1dWlkX3QgKnRhcmdldF91dWlkLFxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyMjQ6XFx0ZW51bSB0aHVuZGVyYm9sdF9pcF90eXBlIHR5cGUsIHNpemVfdCBzaXplLCB1MzIgY29tbWFuZF9pZClcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjI1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0yNDI9c3RhdGljIGludCB0Ym5ldF9sb2dpbl9yZXNwb25zZShzdHJ1Y3QgdGJuZXQgKm5ldCwgdTY0IHJvdXRlLCB1OCBzZXF1ZW5jZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yNDQte1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyNDU6XFx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luX3Jlc3BvbnNlIHJlcGx5O1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yNDYtXFx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gbmV0LVxcdTAwM2V4ZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0yNTk9c3RhdGljIGludCB0Ym5ldF9sb2dpbl9yZXF1ZXN0KHN0cnVjdCB0Ym5ldCAqbmV0LCB1OCBzZXF1ZW5jZSlcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjYwLXtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjYxOlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9sb2dpbl9yZXNwb25zZSByZXBseTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjYyOlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9sb2dpbiByZXF1ZXN0O1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yNjMtXFx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gbmV0LVxcdTAwM2V4ZDtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0yNzk9c3RhdGljIGludCB0Ym5ldF9sb2dvdXRfcmVzcG9uc2Uoc3RydWN0IHRibmV0ICpuZXQsIHU2NCByb3V0ZSwgdTggc2VxdWVuY2UsXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjgxLXtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MjgyOlxcdHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9zdGF0dXMgcmVwbHk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTI4My1cXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQgPSBuZXQtXFx1MDAzZXhkO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTI5Mz1zdGF0aWMgaW50IHRibmV0X2xvZ291dF9yZXF1ZXN0KHN0cnVjdCB0Ym5ldCAqbmV0KVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0yOTQte1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyOTU6XFx0c3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ291dCByZXF1ZXN0O1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoyOTY6XFx0c3RydWN0IHRodW5kZXJib2x0X2lwX3N0YXR1cyByZXBseTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMjk3LVxcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZCA9IG5ldC1cXHUwMDNleGQ7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NDI1PXN0YXRpYyBpbnQgdGJuZXRfaGFuZGxlX3BhY2tldChjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplLCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy00MjYte1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0Mjc6XFx0Y29uc3Qgc3RydWN0IHRodW5kZXJib2x0X2lwX2xvZ2luICpwa2cgPSBidWY7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQyOC1cXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGRhdGE7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDM0LVxcdC8qIE1ha2Ugc3VyZSB0aGUgcGFja2V0IGlzIGZvciB1cyAqL1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0MzU6XFx0aWYgKHNpemUgXFx1MDAzYyBzaXplb2Yoc3RydWN0IHRodW5kZXJib2x0X2lwX2hlYWRlcikpXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTQzNi1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz03NTY9c3RhdGljIGJvb2wgdGJuZXRfY2hlY2tfZnJhbWUoc3RydWN0IHRibmV0ICpuZXQsIGNvbnN0IHN0cnVjdCB0Ym5ldF9mcmFtZSAqdGYsXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc1NzpcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyICpoZHIpXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTc1OC17XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9ODMxPXN0YXRpYyBpbnQgdGJuZXRfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtODM4LVxcdHdoaWxlIChyeF9wYWNrZXRzIFxcdTAwM2MgYnVkZ2V0KSB7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjgzOTpcXHRcXHRjb25zdCBzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyICpoZHI7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTg0MC1cXHRcXHR1bnNpZ25lZCBpbnQgaGRyX3NpemUgPSBzaXplb2YoKmhkcik7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTAyMT1zdGF0aWMgYm9vbCB0Ym5ldF94bWl0X2NzdW1fYW5kX21hcChzdHJ1Y3QgdGJuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMDIzLXtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTAyNDpcXHRzdHJ1Y3QgdGh1bmRlcmJvbHRfaXBfZnJhbWVfaGVhZGVyICpoZHIgPSBwYWdlX2FkZHJlc3MoZnJhbWVzWzBdLVxcdTAwM2VwYWdlKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTAyNS1cXHRzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2ID0gdGJfcmluZ19kbWFfZGV2aWNlKG5ldC1cXHUwMDNldHhfcmluZy5yaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xMTM2PXN0YXRpYyBuZXRkZXZfdHhfdCB0Ym5ldF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTE0MS1cXHR1MTYgZnJhbWVfaWQgPSBhdG9taWNfcmVhZChcXHUwMDI2bmV0LVxcdTAwM2VmcmFtZV9pZCk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjExNDI6XFx0c3RydWN0IHRodW5kZXJib2x0X2lwX2ZyYW1lX2hlYWRlciAqaGRyO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMTQzLVxcdHVuc2lnbmVkIGludCBsZW4gPSBza2JfaGVhZGxlbihza2IpO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM5Ni1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM5NzpcXHRzdHJjcHkoZGV2LVxcdTAwM2VuYW1lLCBcXFwidGh1bmRlcmJvbHQlZFxcXCIpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzk4LVxcdGRldi1cXHUwMDNlbmV0ZGV2X29wcyA9IFxcdTAwMjZ0Ym5ldF9uZXRkZXZfb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTE0MTYtXFx0ZGV2LVxcdTAwM2VmZWF0dXJlcyA9IGRldi1cXHUwMDNlaHdfZmVhdHVyZXMgfCBORVRJRl9GX0hJR0hETUE7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjE0MTc6XFx0ZGV2LVxcdTAwM2VoYXJkX2hlYWRlcl9sZW4gKz0gc2l6ZW9mKHN0cnVjdCB0aHVuZGVyYm9sdF9pcF9mcmFtZV9oZWFkZXIpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xNDE4LVxcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTE0OTU9c3RhdGljIHN0cnVjdCB0Yl9zZXJ2aWNlX2RyaXZlciB0Ym5ldF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTQ5Ny1cXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTQ5ODpcXHRcXHQubmFtZSA9IFxcXCJ0aHVuZGVyYm9sdC1uZXRcXFwiLFxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xNDk5LVxcdFxcdC5wbSA9IHBtX3NsZWVwX3B0cihcXHUwMDI2dGJuZXRfcG1fb3BzKSxcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L3RyYWNlLmgtOS0jdW5kZWYgVFJBQ0VfU1lTVEVNXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvdHJhY2UuaDoxMDojZGVmaW5lIFRSQUNFX1NZU1RFTSB0aHVuZGVyYm9sdF9uZXRcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC90cmFjZS5oLTExLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0MzowMi44NDkwODI5MjhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDQ0NzM5NTkxNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgVGh1bmRlcmJvbHQgTmV0d29ya2luZyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AuIEl0J3MgYWRkaW5nIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgYW5kIGNhbGxpbmcgaXQgZnJvbSBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLiBUaGUgaWRlYSBpcyB0byByZXNldCBgbmV0LVx1MDAzZWxvZ2luX3NlbnRgIG9uIGNvbm5lY3Rpb24gZmFpbHVyZSwgd2hpY2ggbWFrZXMgc2Vuc2UgdG8gYXZvaWQgaXNzdWVzIHdpdGggYHRibmV0X3RlYXJfZG93bigpYC4gQnV0IGhvbGQgb24sIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyAqVGh1bmRlcmJvbHQqIG5ldHdvcmtpbmcgaGFzIG1lIHRoaW5raW5nLiBJcyB0aGlzIGV2ZW4gcmVsZXZhbnQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBsaWtlIFFFTVU/IFRodW5kZXJib2x0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLCByaWdodD8gUENJZS9VU0I0LCBpc24ndCBpdD9cblxuUUVNVSBkb2Vzbid0IG5hdGl2ZWx5IGVtdWxhdGUgVGh1bmRlcmJvbHQvVVNCNC4gQnV0IHdhaXQsIGRvZXMgaXQgaGF2ZSBzb21lIHNvZnR3YXJlIGVtdWxhdGlvbiBJJ20gbm90IHJlbWVtYmVyaW5nPyBObywgdGhlcmUgaXNuJ3QgYSBgbWFjODAyMTFfaHdzaW1gIGVxdWl2YWxlbnQgZm9yIFRodW5kZXJib2x0LiBPa2F5LCB3aGF0IGFib3V0IHN5emthbGxlcj8gRG9lcyBpdCBldmVuICpyZWFjaCogVGh1bmRlcmJvbHQgY29kZT8gSSB2YWd1ZWx5IHJlbWVtYmVyIHNvbWV0aGluZy4uLiBjb3VsZCBzeXprYWxsZXIgZnV6eiBUaHVuZGVyYm9sdCB2aWEgVVNCIG9yIFBDST8gSXQgaGFzIGBzeXpfdXNiX2Nvbm5lY3RgIGJ1dCB0aGF0J3MgZm9yIFVTQiBpbiBnZW5lcmFsLiBJcyB0aGVyZSBhIGBzeXpfYCBwc2V1ZG8tc3lzY2FsbCBzcGVjaWZpY2FsbHkgZm9yIFRodW5kZXJib2x0P1xuXG5UaGUgY29udGV4dCBzdWdnZXN0cyB0aGF0IGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6YXRpb24gbGlrZSBRRU1VIGFyZSBvdXQgb2Ygc2NvcGUuIEJ1dCBUaHVuZGVyYm9sdC4uLml0J3MgUENJZS9VU0I0LiBTbywgaXMgaXQgKmFjdHVhbGx5KiBmdXp6ZWQ/IEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0J3MgcmVhY2hhYmxlLiBMZXQncyBsb29rIGZvciBgdGh1bmRlcmJvbHRgIGluIHN5emthbGxlcidzIGRlc2NyaXB0aW9ucy4gT3IgZXZlbiBiZXR0ZXIsIGxldCdzIGp1c3Qgc2VlIGlmIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaXMgcmVhY2hhYmxlLiBJdCdzIGEgd29ya3F1ZXVlIGZ1bmN0aW9uLCBzbyBpdCBtdXN0IGJlIHRyaWdnZXJlZCBieSAqc29tZXRoaW5nKi4gTWF5YmUgYFVTQjRfTkVUYCBpcyBmdXp6ZWQgc29tZWhvdz9cblxuSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFueSB3YXkgdG8gdHJpZ2dlciB0aGlzIFRodW5kZXJib2x0IGNvZGUgaW4gUUVNVS4gQXBwbGUgaGFzIFRodW5kZXJib2x0IGNvbnRyb2xsZXJzIGJ1dCB0aGF0IHN0aWxsIHVzdWFsbHkgcmVxdWlyZXMgc3BlY2lmaWMgUENJZSBoYXJkd2FyZS4gV2FpdCwgc3l6a2FsbGVyJ3MgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgXCJzeXotY2x1c3RlclwiLiBTbywgc3l6a2FsbGVyIGlzICphY3R1YWxseSogZnV6emluZyBpdCBvciAqaGFzKiBmb3VuZCBhIGJ1ZyBoZXJlIGFuZCBpcyB0ZXN0aW5nIGl0ISBNYXliZSBzeXprYWxsZXIgY2FuIHJlYWNoIGl0IGlmIHRoZXJlJ3MgYSBzb2Z0d2FyZSBkcml2ZXIsIG9yIG1heWJlIGl0J3MgZXhwb3NlZCB2aWEgVVNCNCBhbmQgZnV6emVkIHRocm91Z2ggYSBVU0IgZHVtbXkgSENEIG9yIHNpbWlsYXIuIExldCdzIGRpZyBkZWVwZXIuIElzIHRoZXJlIGEgVGh1bmRlcmJvbHQgS1VuaXQgdGVzdCBvciBzb21lIGtpbmQgb2Ygc29mdHdhcmUgcm91dGVyIGZvciB0aGlzIHN0dWZmPyBMZXQncyBjaGVjayB0aGUgYGRyaXZlcnMvdGh1bmRlcmJvbHQvYCBkaXJlY3Rvcnkgc3BlY2lmaWNhbGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NzQxLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjI3LjMyMzA0NDI1NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQ2NTE5MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGh1bmRlcmJvbHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnPTI9bWVudWNvbmZpZyBVU0I0XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWctMTYtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmVcXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWc6MTc6XFx0ICBjYWxsZWQgdGh1bmRlcmJvbHQuXFxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTE4LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnPTU0PWNvbmZpZyBVU0I0X0RNQV9URVNUXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWctNjQtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlIHdpbGwgYmVcXG5kcml2ZXJzL3RodW5kZXJib2x0L0tjb25maWc6NjU6XFx0ICBjYWxsZWQgdGh1bmRlcmJvbHRfZG1hX3Rlc3QuXFxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTY2LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZz02Nz1jb25maWcgVVNCNF9TVFJFQU1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZy03NS1cXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGUgd2lsbCBiZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvS2NvbmZpZzo3NjpcXHQgIGNhbGxlZCB0aHVuZGVyYm9sdF9zdHJlYW0uXFxuZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnLTc3LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZT0yPWNjZmxhZ3MteSA6PSAtSSQoc3JjKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MzpvYmotJHtDT05GSUdfVVNCNH0gOj0gdGh1bmRlcmJvbHQub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6NDp0aHVuZGVyYm9sdC1vYmpzIDo9IG5oaS5vIGN0bC5vIHRiLm8gc3dpdGNoLm8gY2FwLm8gcGNpLm8gcGF0aC5vIHR1bm5lbC5vIGVlcHJvbS5vXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo1OnRodW5kZXJib2x0LW9ianMgKz0gZG9tYWluLm8gZG1hX3BvcnQubyBpY20ubyBwcm9wZXJ0eS5vIHhkb21haW4ubyBsYy5vIHRtdS5vIHVzYjQub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6Njp0aHVuZGVyYm9sdC1vYmpzICs9IHVzYjRfcG9ydC5vIG52bS5vIHJldGltZXIubyBxdWlya3MubyBjbHgub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGUtNy1cXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjg6dGh1bmRlcmJvbHQtJHtDT05GSUdfQUNQSX0gKz0gYWNwaS5vXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo5OnRodW5kZXJib2x0LSQoQ09ORklHX0RFQlVHX0ZTKSArPSBkZWJ1Z2ZzLm9cXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjEwOnRodW5kZXJib2x0LSQoQ09ORklHX1VTQjRfQ09ORklHRlMpICs9IGNvbmZpZ2ZzLm9cXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlOjExOnRodW5kZXJib2x0LSR7Q09ORklHX1VTQjRfS1VOSVRfVEVTVH0gKz0gdGVzdC5vXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZS0xMi1DRkxBR1NfdGVzdC5vICs9ICQoRElTQUJMRV9TVFJVQ1RMRUFLX1BMVUdJTilcXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTEzLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MTQ6dGh1bmRlcmJvbHRfZG1hX3Rlc3QtJHtDT05GSUdfVVNCNF9ETUFfVEVTVH0gKz0gZG1hX3Rlc3Qub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MTU6b2JqLSQoQ09ORklHX1VTQjRfRE1BX1RFU1QpICs9IHRodW5kZXJib2x0X2RtYV90ZXN0Lm9cXG5kcml2ZXJzL3RodW5kZXJib2x0L01ha2VmaWxlLTE2LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MTc6dGh1bmRlcmJvbHRfc3RyZWFtLSR7Q09ORklHX1VTQjRfU1RSRUFNfSArPSBzdHJlYW0ub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU6MTg6b2JqLSQoQ09ORklHX1VTQjRfU1RSRUFNKSArPSB0aHVuZGVyYm9sdF9zdHJlYW0ub1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9hY3BpLmM9MzUzPXN0YXRpYyBzdHJ1Y3QgYWNwaV9idXNfdHlwZSB0Yl9hY3BpX2J1cyA9IHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYzozNTQ6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRcXFwiLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTM1NS1cXHQubWF0Y2ggPSB0Yl9hY3BpX2J1c19tYXRjaCxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYz0xOD1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSB0Yl9jb25maWdmcyA9IHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0yMC1cXHRcXHQuY2dfaXRlbSA9IHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM6MjE6XFx0XFx0XFx0LmNpX25hbWVidWYgPSBcXFwidGh1bmRlcmJvbHRcXFwiLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0yMi1cXHRcXHRcXHQuY2lfdHlwZSA9IFxcdTAwMjZ0Yl9yb290X2dyb3VwX3R5cGUsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jPTY1Mz1zdHJ1Y3QgdGJfY3RsICp0Yl9jdGxfYWxsb2Moc3RydWN0IHRiX25oaSAqbmhpLCBpbnQgaW5kZXgsIGludCB0aW1lb3V0X21zZWMsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jLTY2OC1cXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y3RsLVxcdTAwM2VyZXF1ZXN0X3F1ZXVlKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jOjY2OTpcXHRjdGwtXFx1MDAzZWZyYW1lX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoXFxcInRodW5kZXJib2x0X2N0bFxcXCIsIG5oaS1cXHUwMDNlZGV2LFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmMtNjcwLVxcdFxcdFxcdFxcdFxcdCAgVEJfRlJBTUVfU0laRSwgNCwgMCk7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5oLTEyLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9rcmVmLmhcXHUwMDNlXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuaDoxMzojaW5jbHVkZSBcXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5oLTE0LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM9MjU1NT12b2lkIHRiX2RlYnVnZnNfaW5pdCh2b2lkKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTI1NTYte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjI1NTc6XFx0dGJfZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKFxcXCJ0aHVuZGVyYm9sdFxcXCIsIE5VTEwpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTI1NTgtfVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfcG9ydC5jPTM3Mz1pbnQgZG1hX3BvcnRfZmxhc2hfd3JpdGUoc3RydWN0IHRiX2RtYV9wb3J0ICpkbWEsIHVuc2lnbmVkIGludCBhZGRyZXNzLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfcG9ydC5jLTM5MS0gKiBUaGlzIGlzIGJlY2F1c2UgaWYgdGhlIHN3aXRjaCBpbiBxdWVzdGlvbiBpcyByb290IHN3aXRjaCB0aGVcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV9wb3J0LmM6MzkyOiAqIHRodW5kZXJib2x0IGhvc3QgY29udHJvbGxlciBnZXRzIHJlc2V0IGFzIHdlbGwuXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfcG9ydC5jLTM5My0gKlxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9zaXplcy5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzoxNDojaW5jbHVkZSBcXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtMTUtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9Njk2PXN0YXRpYyBzdHJ1Y3QgdGJfc2VydmljZV9kcml2ZXIgZG1hX3Rlc3RfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTY5OC1cXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6Njk5OlxcdFxcdC5uYW1lID0gXFxcInRodW5kZXJib2x0X2RtYV90ZXN0XFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNzAwLVxcdFxcdC5wbSA9IFxcdTAwMjZkbWFfdGVzdF9wbV9vcHMsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTMxMT1jb25zdCBzdHJ1Y3QgYnVzX3R5cGUgdGJfYnVzX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozMTI6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRcXFwiLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtMzEzLVxcdC5tYXRjaCA9IHRiX3NlcnZpY2VfbWF0Y2gsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTMzMz1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfZG9tYWluX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozMzQ6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRfZG9tYWluXFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTMzNS1cXHQucmVsZWFzZSA9IHRiX2RvbWFpbl9yZWxlYXNlLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz0zNzc9c3RydWN0IHRiICp0Yl9kb21haW5fYWxsb2Moc3RydWN0IHRiX25oaSAqbmhpLCBpbnQgdGltZW91dF9tc2VjLCBzaXplX3QgcHJpdnNpemUpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTM5OS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjQwMDpcXHR0Yi1cXHUwMDNld3EgPSBhbGxvY19vcmRlcmVkX3dvcmtxdWV1ZShcXFwidGh1bmRlcmJvbHQlZFxcXCIsIDAsIHRiLVxcdTAwM2VpbmRleCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy00MDEtXFx0aWYgKCF0Yi1cXHUwMDNld3EpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTIwMDU9c3RhdGljIGludCBpY21fZHJpdmVyX3JlYWR5KHN0cnVjdCB0YiAqdGIpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIwMTYtXFx0XFx0dGJfaW5mbyh0YiwgXFxcIllvdSBuZWVkIHRvIHVwZGF0ZSBOVk0gZmlybXdhcmUgb2YgdGhlIGNvbnRyb2xsZXIgYmVmb3JlIGl0IGNhbiBiZSB1c2VkLlxcXFxuXFxcIik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMDE3OlxcdFxcdHRiX2luZm8odGIsIFxcXCJVc2UgZnd1cGQgdG9vbCB0byBhcHBseSB1cGRhdGUuIENoZWNrIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvdGh1bmRlcmJvbHQucnN0IGZvciBkZXRhaWxzLlxcXFxuXFxcIik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMDE4LVxcdFxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYy01LSAqIFRoZSBOSEkgKG5hdGl2ZSBob3N0IGludGVyZmFjZSkgaXMgdGhlIGRldmljZSB0aGF0IGFsbG93cyB1cyB0byBzZW5kIGFuZFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmM6NjogKiByZWNlaXZlIGZyYW1lcyBmcm9tIHRoZSB0aHVuZGVyYm9sdCBidXMuXFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYy03LSAqXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jPTExODY9aW50IG5oaV9wcm9iZShzdHJ1Y3QgdGJfbmhpICpuaGkpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5jLTEyMzUtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYzoxMjM2OlxcdGRldl9kYmcoZGV2LCBcXFwiTkhJIGluaXRpYWxpemVkLCBzdGFydGluZyB0aHVuZGVyYm9sdFxcXFxuXFxcIik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuYy0xMjM3LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9uaGkuaC0xMS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L25oaS5oOjEyOiNpbmNsdWRlIFxcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvbmhpLmgtMTMtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYz0xMDE9c3RydWN0IHRiX3BhdGggKnRiX3BhdGhfZGlzY292ZXIoc3RydWN0IHRiX3BvcnQgKnNyYywgaW50IHNyY19ob3BpZCxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGF0aC5jLTIxNS0vKipcXG5kcml2ZXJzL3RodW5kZXJib2x0L3BhdGguYzoyMTY6ICogdGJfcGF0aF9hbGxvYygpIC0gYWxsb2NhdGUgYSB0aHVuZGVyYm9sdCBwYXRoIGJldHdlZW4gdHdvIHBvcnRzXFxuZHJpdmVycy90aHVuZGVyYm9sdC9wYXRoLmMtMjE3LSAqIEB0YjogRG9tYWluIHBvaW50ZXJcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmM9MTExPXN0YXRpYyBpbnQgbmhpX3BjaV9pbml0X21zaShzdHJ1Y3QgdGJfbmhpICpuaGkpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTEzOS1cXHRcXHRyZXMgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGlycSwgbmhpX21zaSxcXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjE0MDpcXHRcXHRcXHRcXHQgICAgICAgSVJRRl9OT19TVVNQRU5ELCBcXFwidGh1bmRlcmJvbHRcXFwiLCBuaGkpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmMtMTQxLVxcdFxcdGlmIChyZXMpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jPTE4ND1zdGF0aWMgaW50IG5oaV9wY2lfcmluZ19yZXF1ZXN0X21zaXgoc3RydWN0IHRiX3JpbmcgKnJpbmcsIGJvb2wgbm9fc3VzcGVuZClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmMtMjA3LVxcdGlycWZsYWdzID0gbm9fc3VzcGVuZCA/IElSUUZfTk9fU1VTUEVORCA6IDA7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYzoyMDg6XFx0cmV0ID0gcmVxdWVzdF9pcnEocmluZy1cXHUwMDNlaXJxLCByaW5nX21zaXgsIGlycWZsYWdzLCBcXFwidGh1bmRlcmJvbHRcXFwiLCByaW5nKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTIwOS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYz00NDc9c3RhdGljIGludCBuaGlfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jLTQ2OC1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjQ2OTpcXHRuaGktXFx1MDAzZWlvYmFzZSA9IHBjaW1faW9tYXBfcmVnaW9uKHBkZXYsIDAsIFxcXCJ0aHVuZGVyYm9sdFxcXCIpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcGNpLmMtNDcwLVxcdHJlcyA9IFBUUl9FUlJfT1JfWkVSTyhuaGktXFx1MDAzZWlvYmFzZSk7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jPTU5MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmhpX2RyaXZlciA9IHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L3BjaS5jOjU5MjpcXHQubmFtZSA9IFxcXCJ0aHVuZGVyYm9sdFxcXCIsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9wY2kuYy01OTMtXFx0LmlkX3RhYmxlID0gbmhpX2lkcyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYy0xNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvdXVpZC5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYzoxNTojaW5jbHVkZSBcXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtMTYtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmM9MzczPXN0YXRpYyBzc2l6ZV90IF9fdGJfcHJvcGVydHlfZm9ybWF0X2Rpcihjb25zdCBzdHJ1Y3QgdGJfcHJvcGVydHlfZGlyICpkaXIsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3Byb3BlcnR5LmMtNTA4LSAqIFRoaXMgZnVuY3Rpb24gZm9ybWF0cyB0aGUgZGlyZWN0b3J5IHRvIHRoZSBwYWNrZWQgZm9ybWF0IHRoYXQgY2FuIGJlXFxuZHJpdmVycy90aHVuZGVyYm9sdC9wcm9wZXJ0eS5jOjUwOTogKiB0aGVuIHNlbnQgb3ZlciB0aGUgdGh1bmRlcmJvbHQgZmFicmljIHRvIHJlY2VpdmluZyBob3N0LlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcHJvcGVydHkuYy01MTAtICpcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcmV0aW1lci5jPTM4Mz1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfcmV0aW1lcl90eXBlID0ge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvcmV0aW1lci5jOjM4NDpcXHQubmFtZSA9IFxcXCJ0aHVuZGVyYm9sdF9yZXRpbWVyXFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L3JldGltZXIuYy0zODUtXFx0Lmdyb3VwcyA9IHJldGltZXJfZ3JvdXBzLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2l6ZXMuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjIxOiNpbmNsdWRlIFxcdTAwM2NsaW51eC90aHVuZGVyYm9sdC5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmM9MTYzNz1zdGF0aWMgc3RydWN0IHRiX3NlcnZpY2VfZHJpdmVyIHRic3RyZWFtX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMTYzOS1cXHRcXHQub3duZXIgPSBUSElTX01PRFVMRSxcXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jOjE2NDA6XFx0XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRfc3RyZWFtXFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L3N0cmVhbS5jLTE2NDEtXFx0XFx0LnBtID0gXFx1MDAyNnRic3RyZWFtX3BtX29wcyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM9NDQyPXN0YXRpYyB2b2lkIHRiX2R1bXBfcG9ydChzdHJ1Y3QgdGIgKnRiLCBjb25zdCBzdHJ1Y3QgdGJfcG9ydCAqcG9ydClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtNDQ4LVxcdCAgICAgICByZWdzLVxcdTAwM2Vwb3J0X251bWJlciwgcmVncy1cXHUwMDNldmVuZG9yX2lkLCByZWdzLVxcdTAwM2VkZXZpY2VfaWQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYzo0NDk6XFx0ICAgICAgIHJlZ3MtXFx1MDAzZXJldmlzaW9uLCByZWdzLVxcdTAwM2V0aHVuZGVyYm9sdF92ZXJzaW9uLCB0Yl9wb3J0X3R5cGUocmVncyksXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy00NTAtXFx0ICAgICAgIHJlZ3MtXFx1MDAzZXR5cGUpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYz0xNTYzPXN0YXRpYyB2b2lkIHRiX2R1bXBfc3dpdGNoKGNvbnN0IHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0xNTY4LVxcdCAgICAgICB0Yl9zd2l0Y2hfZ2VuZXJhdGlvbl9uYW1lKHN3KSwgcmVncy1cXHUwMDNldmVuZG9yX2lkLCByZWdzLVxcdTAwM2VkZXZpY2VfaWQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYzoxNTY5OlxcdCAgICAgICByZWdzLVxcdTAwM2VyZXZpc2lvbiwgcmVncy1cXHUwMDNldGh1bmRlcmJvbHRfdmVyc2lvbik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0xNTcwLVxcdHRiX2RiZyh0YiwgXFxcIiAgTWF4IFBvcnQgTnVtYmVyOiAlZFxcXFxuXFxcIiwgcmVncy1cXHUwMDNlbWF4X3BvcnRfbnVtYmVyKTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM9MTgxOT1zdGF0aWMgaW50IHRiX3N3aXRjaF9zZXRfYXV0aG9yaXplZChzdHJ1Y3QgdGJfc3dpdGNoICpzdywgdW5zaWduZWQgaW50IHZhbClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTg2MS1cXHRcXHQgKiBOb3RpZnkgc3RhdHVzIGNoYW5nZSB0byB0aGUgdXNlcnNwYWNlLCBpbmZvcm1pbmcgdGhlIG5ld1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM6MTg2MjpcXHRcXHQgKiB2YWx1ZSBvZiAvc3lzL2J1cy90aHVuZGVyYm9sdC9kZXZpY2VzLy4uLi9hdXRob3JpemVkLlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmMtMTg2My1cXHRcXHQgKi9cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3dpdGNoLmM9MjM3Mz1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfc3dpdGNoX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYzoyMzc0OlxcdC5uYW1lID0gXFxcInRodW5kZXJib2x0X2RldmljZVxcXCIsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zd2l0Y2guYy0yMzc1LVxcdC5yZWxlYXNlID0gdGJfc3dpdGNoX3JlbGVhc2UsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTQtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaS5oXFx1MDAzZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDoxNTojaW5jbHVkZSBcXHUwMDNjbGludXgvdGh1bmRlcmJvbHQuaFxcdTAwM2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTYtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3V1aWQuaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaD0xMDU9c3RydWN0IHRiX3N3aXRjaF90bXUge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTExMi0vKipcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmg6MTEzOiAqIHN0cnVjdCB0Yl9zd2l0Y2ggLSBhIHRodW5kZXJib2x0IHN3aXRjaFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaC0xMTQtICogQGRldjogRGV2aWNlIGZvciB0aGUgc3dpdGNoXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmg9MjM4PXN0cnVjdCB0Yl9iYW5kd2lkdGhfZ3JvdXAge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTI0Ni0vKipcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmg6MjQ3OiAqIHN0cnVjdCB0Yl9wb3J0IC0gYSB0aHVuZGVyYm9sdCBwb3J0LCBwYXJ0IG9mIGEgdGJfc3dpdGNoXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTI0OC0gKiBAY29uZmlnOiBDYWNoZWQgcG9ydCBjb25maWd1cmF0aW9uIHJlYWQgZnJvbSByZWdpc3RlcnNcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaD00MzA9c3RydWN0IHRiX3BhdGgge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTQ4Ny0gKiBAcnVudGltZV9yZXN1bWVfc3dpdGNoOiBSdW50aW1lIHJlc3VtZSBhIHN3aXRjaFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGIuaDo0ODg6ICogQGhhbmRsZV9ldmVudDogSGFuZGxlIHRodW5kZXJib2x0IGV2ZW50XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oLTQ4OS0gKiBAZ2V0X2Jvb3RfYWNsOiBHZXQgYm9vdCBBQ0wgbGlzdFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oPTEzMTE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdXNiNF9zd2l0Y2hfdmVyc2lvbihjb25zdCBzdHJ1Y3QgdGJfc3dpdGNoICpzdylcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTMxMi17XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yi5oOjEzMTM6XFx0cmV0dXJuIEZJRUxEX0dFVChVU0I0X1ZFUlNJT05fTUFKT1JfTUFTSywgc3ctXFx1MDAzZWNvbmZpZy50aHVuZGVyYm9sdF92ZXJzaW9uKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiLmgtMTMxNC19XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaC00LSAqXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6NTogKiBFdmVyeSB0aHVuZGVyYm9sdCBkZXZpY2UgY29uc2lzdHMgKGxvZ2ljYWxseSkgb2YgYSBzd2l0Y2ggd2l0aCBtdWx0aXBsZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGJfcmVncy5oLTYtICogcG9ydHMuIEV2ZXJ5IHBvcnQgY29udGFpbnMgdXAgdG8gZm91ciBjb25maWcgcmVnaW9ucyAoSE9QUywgUE9SVCwgU1dJVENILFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg9MTY2PXN0cnVjdCB0Yl9yZWdzX3N3aXRjaF9oZWFkZXIge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTg4LVxcdHUzMiBfX3Vua25vd240Ojg7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6MTg5OlxcdHUzMiB0aHVuZGVyYm9sdF92ZXJzaW9uOjg7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkwLX0gX19wYWNrZWQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkxLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGJfcmVncy5oOjE5MjovKiBVc2VkIHdpdGggdGhlIHJvdXRlciB0aHVuZGVyYm9sdF92ZXJzaW9uICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMTkzLSNkZWZpbmUgVVNCNF9WRVJTSU9OX01BSk9SX01BU0tcXHRcXHRcXHRHRU5NQVNLKDcsIDUpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RiX3JlZ3MuaD0yODM9c3RydWN0IHRiX3JlZ3NfcG9ydF9oZWFkZXIge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMjk0LVxcdGVudW0gdGJfcG9ydF90eXBlIHR5cGU6MjQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmg6Mjk1OlxcdHUzMiB0aHVuZGVyYm9sdF92ZXJzaW9uOjg7XFxuZHJpdmVycy90aHVuZGVyYm9sdC90Yl9yZWdzLmgtMjk2LVxcdC8qIERXT1JEIDMgKi9cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jPTI4MjQ9c3RhdGljIHZvaWQgdGJfdGVzdF9wcm9wZXJ0eV9jb3B5KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jLTI4NTctICogUmVwcm9kdWNlcnMgZm9yIHRocmVlIG1lbW9yeS1zYWZldHkgZGVmZWN0cyBpblxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jOjI4NTg6ICogZHJpdmVycy90aHVuZGVyYm9sdC9wcm9wZXJ0eS5jIHJlYWNoZWQgZnJvbSBhIGNyYWZ0ZWQgWERvbWFpblxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jLTI4NTktICogUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLiAgV2l0aG91dCB0aGUgZml4IHRoZXNlIHRyaXAgS0FTQU4gb3JcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jPTMxNDc9c3RhdGljIHN0cnVjdCBrdW5pdF9zdWl0ZSB0Yl90ZXN0X3N1aXRlID0ge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jOjMxNDg6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRcXFwiLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jLTMxNDktXFx0LnRlc3RfY2FzZXMgPSB0Yl90ZXN0X2Nhc2VzLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC90cmFjZS5oLTEwLSN1bmRlZiBUUkFDRV9TWVNURU1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3RyYWNlLmg6MTE6I2RlZmluZSBUUkFDRV9TWVNURU0gdGh1bmRlcmJvbHRcXG5kcml2ZXJzL3RodW5kZXJib2x0L3RyYWNlLmgtMTItXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L3hkb21haW4uYz0xMTMyPWNvbnN0IHN0cnVjdCBkZXZpY2VfdHlwZSB0Yl9zZXJ2aWNlX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmM6MTEzMzpcXHQubmFtZSA9IFxcXCJ0aHVuZGVyYm9sdF9zZXJ2aWNlXFxcIixcXG5kcml2ZXJzL3RodW5kZXJib2x0L3hkb21haW4uYy0xMTM0LVxcdC5ncm91cHMgPSB0Yl9zZXJ2aWNlX2F0dHJfZ3JvdXBzLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmM9MjA1MD1jb25zdCBzdHJ1Y3QgZGV2aWNlX3R5cGUgdGJfeGRvbWFpbl90eXBlID0ge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQveGRvbWFpbi5jOjIwNTE6XFx0Lm5hbWUgPSBcXFwidGh1bmRlcmJvbHRfeGRvbWFpblxcXCIsXFxuZHJpdmVycy90aHVuZGVyYm9sdC94ZG9tYWluLmMtMjA1Mi1cXHQucmVsZWFzZSA9IHRiX3hkb21haW5fcmVsZWFzZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MjcuODk3NzAxODQ3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwNDMxNzYyNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yYXZlbGluZyBUaHVuZGVyYm9sdCBGdXp6aW5nIGluIHRoZSBLZXJuZWwqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBzeXprYWxsZXIgaXMgZnV6emluZyB0aGUgVGh1bmRlcmJvbHQgZHJpdmVyLiBJIHN0YXJ0ZWQgYnkgbG9va2luZyBhdCBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgIGJlY2F1c2UgaXQgaGFzIEtVbml0IHRlc3RzLCB3aGljaCwgSSBpbml0aWFsbHkgdGhvdWdodCwgbWlnaHQgYmUgYSBzdGFydGluZyBwb2ludC4gVGhlbiwgSSBub3RpY2VkIHNvbWV0aGluZyBpbnRlcmVzdGluZyBpbiB0aGUgY29tbWVudHM6IFwiUmVwcm9kdWNlcnMgZm9yIHRocmVlIG1lbW9yeS1zYWZldHkgZGVmZWN0cy4uLiByZWFjaGVkIGZyb20gYSBjcmFmdGVkIFhEb21haW4gUFJPUEVSVElFU19SRVNQT05TRSBwYXlsb2FkLlwiIFRoaXMgY29uZmlybXMgc3l6a2FsbGVyIGlzIGluZGVlZCBmdXp6aW5nIFRodW5kZXJib2x0IVxuXG5NeSBuZXh0IHF1ZXN0aW9uIGlzICpob3cqPyBJcyBzeXprYWxsZXIgdXNpbmcgYSBwc2V1ZG8tc3lzY2FsbCwgYSBzb2Z0d2FyZSBkcml2ZXIsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBJIHF1aWNrbHkgcnVsZWQgb3V0IGBVU0I0X0tVTklUX1RFU1RgIGFuZCB0aGUgS1VuaXQgdGVzdHMsIGtub3dpbmcgdGhvc2UgYXJlbid0IGRpcmVjdGx5IGZ1enphYmxlIGJ5IHN5emthbGxlci4gU2luY2UgSSBjYW4ndCBlYXNpbHkgc2VhcmNoIHN5emthbGxlcidzIGRlc2NyaXB0aW9ucyB3aXRoIHRoZSB0b29scyBhdmFpbGFibGUsIGxpa2UgYGdyZXBwZXJgLCBidXQgSSdtIHJlbWluZGVkIHRoYXQgSSBjb3VsZCB1c2UgYHJlYWQtc3l6LXNwZWNgIGFuZCBgc3l6LWdyZXBwZXJgIGlmIHRoZXkgd2VyZSBhY2Nlc3NpYmxlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCwgaG93ZXZlci5cblxuSSB0aGVuIGNvbnNpZGVyZWQgdGhlIHBvc3NpYmlsaXR5IG9mIHNvZnR3YXJlIGVtdWxhdGlvbiBhbmQgbG9va2VkIGZvciBhIFwiZHVtbXlcIiBUaHVuZGVyYm9sdCBkcml2ZXIsIGJ1dCBmb3VuZCBub3RoaW5nIG9idmlvdXMuIFRoZW4sIEkgdHVybmVkIG15IGF0dGVudGlvbiB0byBgZHJpdmVycy90aHVuZGVyYm9sdC9LY29uZmlnYCBhbmQgYGRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGVgLCB3aGVyZSBJIHNwb3R0ZWQgYFVTQjRfS1VOSVRfVEVTVGAgYWdhaW4sIHN0aWxsIG5vdCB0aGUgYW5zd2VyIHRvIG15IHF1ZXN0aW9uLlxuXG5TdWRkZW5seSwgYSBjb25uZWN0aW9uIGNsaWNrZWQ6IENvdWxkIHN5emthbGxlciBiZSBmdXp6aW5nIFRodW5kZXJib2x0IHZpYSBgY29uZmlnZnNgPyBJIHJlY2FsbGVkIHNlZWluZyBgdGh1bmRlcmJvbHQtJChDT05GSUdfVVNCNF9DT05GSUdGUykgKz0gY29uZmlnZnMub2AgaW4gdGhlIG1ha2VmaWxlLiBUaGlzIHNlZW1lZCBwcm9taXNpbmcuXG5cblRoZW4sIEkgc2hpZnRlZCBteSBmb2N1cyB0byB0aGUgbmV0d29ya2luZyBhc3BlY3RzLCBjaGVja2luZyBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYCwgcmVtZW1iZXJpbmcgaXQgcmVnaXN0ZXJzIGEgbmV0d29yayBkZXZpY2UuIEkgbG9va2VkIGF0IHRoYXQgZmlsZSBhZ2FpbiwgYW5kIG5vdGljZWQgYSBwYXRjaCBhZGRpbmcgYHRibmV0X2Nvbm5lY3RfZmFpbGVkYCB0byBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLCBhbmQgdGhlIGNvbW1pdCBtZXNzYWdlIHJlZmVyZW5jaW5nIFwic3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3LlwiIFRoaXMgY29uZmlybXMgYSBidWcgd2FzIGZvdW5kIGJ5IHN5emthbGxlciB0aGVyZS4gSSBub3cgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHN5emthbGxlciB0cmlnZ2VyZWQgYHRibmV0X2Nvbm5lY3RlZF93b3JrYC4gSSdsbCBkZWx2ZSBpbnRvIHRoZSBmdW5jdGlvbiBpdHNlbGYgd2l0aGluIGBkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNgIHRvIHVuZGVyc3RhbmQgdGhlIHRyaWdnZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjM4Ljk0MDg4MDcyOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3ODQ0NTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Ym5ldF9jb25uZWN0ZWRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTM2OT1zdGF0aWMgdm9pZCB0Ym5ldF90ZWFyX2Rvd24oc3RydWN0IHRibmV0ICpuZXQsIGJvb2wgc2VuZF9sb2dvdXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzg5LVxcdFxcdC8qIFRlYXIgdGhlIHBhdGhzIGRvd24gYmVmb3JlIHN0b3BwaW5nIHRoZSByaW5ncy4gIFRoaXMgbWlycm9yc1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzozOTA6XFx0XFx0ICogdGJuZXRfY29ubmVjdGVkX3dvcmsoKSwgd2hpY2ggZW5hYmxlcyB0aGUgcGF0aHMgbGFzdCBzbyB0aGVcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzkxLVxcdFxcdCAqIFJ4IHJpbmcgaXMgcHJpbWVkIGJlZm9yZSBwYWNrZXRzIGNhbiBhcnJpdmUuICBTdG9wcGluZyBhXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NjI5PXN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RfZmFpbGVkKHN0cnVjdCB0Ym5ldCAqbmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0Mi1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6NjQzOnN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjQ0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz0xMzcxPXN0YXRpYyBpbnQgdGJuZXRfcHJvYmUoc3RydWN0IHRiX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHRiX3NlcnZpY2VfaWQgKmlkKVxcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzODUtXFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlbG9naW5fd29yaywgdGJuZXRfbG9naW5fd29yayk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjEzODY6XFx0SU5JVF9XT1JLKFxcdTAwMjZuZXQtXFx1MDAzZWNvbm5lY3RlZF93b3JrLCB0Ym5ldF9jb25uZWN0ZWRfd29yayk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTEzODctXFx0SU5JVF9XT1JLKFxcdTAwMjZuZXQtXFx1MDAzZWRpc2Nvbm5lY3Rfd29yaywgdGJuZXRfZGlzY29ubmVjdF93b3JrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6MzkuMDE5MzM0MTk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA1Njc1NjgzOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlRyYWNpbmcgdGhlIFdvcmsgSXRlbSBRdWV1ZSoqXG5cbkFscmlnaHQsIGhhbmcgb24uIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AuLi4gdGhhdCdzIGEgKndvcmsgaXRlbSosIHJpZ2h0PyBDbGFzc2ljLiBTbywgYnkgZGVmaW5pdGlvbiwgaXQncyBnZXR0aW5nIHF1ZXVlZCAqZnJvbSBzb21ld2hlcmUqIHdpdGhpbiB0aGUgc3lzdGVtLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBgY29ubmVjdGVkX3dvcmtgIGlzIGFjdHVhbGx5IGJlaW5nIGVucXVldWVkLiBUaGF0J3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBsaWZlY3ljbGUgYW5kIHBvdGVudGlhbCBwb2ludHMgb2YgY29udGVudGlvbiBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aGF0IHRoaW5nLiBMZXQncyBmaW5kIGl0cyBvcmlnaW4gcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTMzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDU6NDkuNTg2OTA1NjczWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDY4ODU4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25uZWN0ZWRfd29ya1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTE0Mz1zdHJ1Y3QgdGJuZXRfcmluZyB7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTY4LSAqIEBsb2dpbl93b3JrOiBXb3JrZXIgdG8gc2VuZCBUaHVuZGVyYm9sdElQIGxvZ2luIHBhY2tldHNcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTY5OiAqIEBjb25uZWN0ZWRfd29yazogV29ya2VyIHRoYXQgZmluYWxpemVzIHRoZSBUaHVuZGVyYm9sdElQIGNvbm5lY3Rpb25cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTcwLSAqXFx0XFx0ICAgIHNldHVwIGFuZCBlbmFibGVzIERNQSBwYXRocyBmb3IgaGlnaCBzcGVlZCBkYXRhXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTgyPXN0cnVjdCB0Ym5ldCB7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTk3LVxcdHN0cnVjdCBkZWxheWVkX3dvcmsgbG9naW5fd29yaztcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTk4OlxcdHN0cnVjdCB3b3JrX3N0cnVjdCBjb25uZWN0ZWRfd29yaztcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTk5LVxcdHN0cnVjdCB3b3JrX3N0cnVjdCBkaXNjb25uZWN0X3dvcms7XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MzIzPXN0YXRpYyB2b2lkIHN0b3BfbG9naW4oc3RydWN0IHRibmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMzI1LVxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2bmV0LVxcdTAwM2Vsb2dpbl93b3JrKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MzI2OlxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNm5ldC1cXHUwMDNlY29ubmVjdGVkX3dvcmspO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zMjctXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MzY5PXN0YXRpYyB2b2lkIHRibmV0X3RlYXJfZG93bihzdHJ1Y3QgdGJuZXQgKm5ldCwgYm9vbCBzZW5kX2xvZ291dClcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zODktXFx0XFx0LyogVGVhciB0aGUgcGF0aHMgZG93biBiZWZvcmUgc3RvcHBpbmcgdGhlIHJpbmdzLiAgVGhpcyBtaXJyb3JzXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjM5MDpcXHRcXHQgKiB0Ym5ldF9jb25uZWN0ZWRfd29yaygpLCB3aGljaCBlbmFibGVzIHRoZSBwYXRocyBsYXN0IHNvIHRoZVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zOTEtXFx0XFx0ICogUnggcmluZyBpcyBwcmltZWQgYmVmb3JlIHBhY2tldHMgY2FuIGFycml2ZS4gIFN0b3BwaW5nIGFcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz00MjU9c3RhdGljIGludCB0Ym5ldF9oYW5kbGVfcGFja2V0KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNDc3LVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo0Nzg6XFx0XFx0XFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXFx1MDAyNm5ldC1cXHUwMDNlY29ubmVjdGVkX3dvcmspO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy00NzktXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTYyOT1zdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0X2ZhaWxlZChzdHJ1Y3QgdGJuZXQgKm5ldClcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NDItXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY0MzpzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0ZWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTY0NC17XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY0NTpcXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjQ2LVxcdGJvb2wgY29ubmVjdGVkO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTcxND1zdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03NDQtXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjc0NTpcXHRcXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcXHUwMDI2bmV0LVxcdTAwM2Vjb25uZWN0ZWRfd29yayk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTc0Ni1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MTM3MT1zdGF0aWMgaW50IHRibmV0X3Byb2JlKHN0cnVjdCB0Yl9zZXJ2aWNlICpzdmMsIGNvbnN0IHN0cnVjdCB0Yl9zZXJ2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg1LVxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZuZXQtXFx1MDAzZWxvZ2luX3dvcmssIHRibmV0X2xvZ2luX3dvcmspO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzoxMzg2OlxcdElOSVRfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2Vjb25uZWN0ZWRfd29yaywgdGJuZXRfY29ubmVjdGVkX3dvcmspO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0xMzg3LVxcdElOSVRfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2VkaXNjb25uZWN0X3dvcmssIHRibmV0X2Rpc2Nvbm5lY3Rfd29yayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ1OjQ5LjY0MTYwMDcxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ2OTE4NzQ1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFRodW5kZXJib2x0IE5ldHdvcmsgQ29ubmVjdGlvbioqXG5cbk9rYXksIHNvIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaXMgYmVpbmcgcXVldWVkIGZyb20gYm90aCBgdGJuZXRfaGFuZGxlX3BhY2tldGAgYW5kIGB0Ym5ldF9sb2dpbl93b3JrYC4gUmlnaHQsIGB0Ym5ldF9oYW5kbGVfcGFja2V0YCBpcyBhIGNhbGxiYWNrIGZvciBpbmNvbWluZyBuZXR3b3JrIHBhY2tldHMuIE15IG1haW4gcXVlc3Rpb24gaXM6IGhvdyBpcyBTeXprYWxsZXIgdHJpZ2dlcmluZyB0aGlzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCB0cmlnZ2VyLlxuXG5Db3VsZCB0aGlzIGludm9sdmUgYSBzb2Z0d2FyZSBUaHVuZGVyYm9sdCBkZXZpY2U/IFRoYXQncyBhIHBvc3NpYmlsaXR5LiBMZXQgbWUgcXVpY2tseSBleGFtaW5lIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvdGh1bmRlcmJvbHQveGRvbWFpbi5jYCBhbmQgYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYC4gQWgsIGluIGBkcml2ZXJzL3RodW5kZXJib2x0L3Rlc3QuY2AsIEkgc2VlIGEgY3J1Y2lhbCBub3RlOiBcIlJlcHJvZHVjZXJzIGZvciB0aHJlZSBtZW1vcnktc2FmZXR5IGRlZmVjdHMuLi4gcmVhY2hlZCBmcm9tIGEgY3JhZnRlZCBYRG9tYWluIFBST1BFUlRJRVNfUkVTUE9OU0UgcGF5bG9hZC5cIiBUaGlzIHN1Z2dlc3RzIHRoYXQgS1VuaXQgdGVzdHMgYXJlIGludm9sdmVkLCBhbmQgdGhleSBjYW4gaW5qZWN0IFhEb21haW4gcGF5bG9hZHMuIEJ1dCB3YWl0LCBTeXprYWxsZXIgZG9lc24ndCBkaXJlY3RseSBydW4gS1VuaXQgdGVzdHMsIGRvZXMgaXQ/IFRoYXQgc2VlbXMgdW5saWtlbHkuXG5cbkhtbS4uLiBEb2VzIFN5emthbGxlciBoYXZlIGEgYHN5el91c2JfY29ubmVjdGAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IE5vLCB0aHVuZGVyYm9sdCBpc24ndCBVU0IuIFNvIGhvdyBhcmUgdGhlc2UgWERvbWFpbiBwYXlsb2FkcyBjcmVhdGVkPyBQZXJoYXBzIFN5emthbGxlciB1c2VzIGBjb25maWdmc2AgdG8gY3JlYXRlIHRodW5kZXJib2x0IHhkb21haW5zPyBMZXQgbWUgc2hpZnQgbXkgZm9jdXMuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYCBhbmQgYGRyaXZlcnMvdGh1bmRlcmJvbHQveGRvbWFpbi5jYCBtb3JlIGNsb3NlbHkuIFRoYXQgc2VlbXMgdGhlIG1vc3QgbG9naWNhbCBwYXRoIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDcxMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjowMC4xMTA3OTA0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTE5MDQ5NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwieGRvbWFpblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL3RodW5kZXJib2x0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE5ODkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGU9ND10aHVuZGVyYm9sdC1vYmpzIDo9IG5oaS5vIGN0bC5vIHRiLm8gc3dpdGNoLm8gY2FwLm8gcGNpLm8gcGF0aC5vIHR1bm5lbC5vIGVlcHJvbS5vXFxuZHJpdmVycy90aHVuZGVyYm9sdC9NYWtlZmlsZTo1OnRodW5kZXJib2x0LW9ianMgKz0gZG9tYWluLm8gZG1hX3BvcnQubyBpY20ubyBwcm9wZXJ0eS5vIHhkb21haW4ubyBsYy5vIHRtdS5vIHVzYjQub1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvTWFrZWZpbGUtNi10aHVuZGVyYm9sdC1vYmpzICs9IHVzYjRfcG9ydC5vIG52bS5vIHJldGltZXIubyBxdWlya3MubyBjbHgub1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9hY3BpLmM9MTYwPWJvb2wgdGJfYWNwaV9tYXlfdHVubmVsX3BjaWUodm9pZClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE2Ny0vKipcXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYzoxNjg6ICogdGJfYWNwaV9pc194ZG9tYWluX2FsbG93ZWQoKSAtIEFyZSBYRG9tYWluIGNvbm5lY3Rpb25zIGFsbG93ZWRcXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYy0xNjktICpcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE3Mi0gKi9cXG5kcml2ZXJzL3RodW5kZXJib2x0L2FjcGkuYzoxNzM6Ym9vbCB0Yl9hY3BpX2lzX3hkb21haW5fYWxsb3dlZCh2b2lkKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvYWNwaS5jLTE3NC17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NseC5jPTY4PXN0YXRpYyBib29sIHRiX3BvcnRfY2x4X3N1cHBvcnRlZChzdHJ1Y3QgdGJfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNseClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2x4LmMtNzctXFx0LyogRG9uJ3QgZW5hYmxlIENMeCBpbiBjYXNlIG9mIGludGVyLWRvbWFpbiBsaW5rICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jbHguYzo3ODpcXHRpZiAocG9ydC1cXHUwMDNleGRvbWFpbilcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NseC5jLTc5LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jPTE4MTg9c3RhdGljIHZvaWQgbWFyZ2luaW5nX3N3aXRjaF9yZW1vdmUoc3RydWN0IHRiX3N3aXRjaCAqc3cpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODM0LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4MzU6c3RhdGljIHZvaWQgbWFyZ2luaW5nX3hkb21haW5faW5pdChzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTgzNi17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODM5LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NDA6XFx0cGFyZW50X3N3ID0gdGJfeGRvbWFpbl9wYXJlbnQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4NDEtXFx0ZG93bnN0cmVhbSA9IHRiX3BvcnRfYXQoeGQtXFx1MDAzZXJvdXRlLCBwYXJlbnRfc3cpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg0NS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoxODQ2OnN0YXRpYyB2b2lkIG1hcmdpbmluZ194ZG9tYWluX3JlbW92ZShzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMTg0Ny17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODUwLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NTE6XFx0cGFyZW50X3N3ID0gdGJfeGRvbWFpbl9wYXJlbnQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jLTE4NTItXFx0ZG93bnN0cmVhbSA9IHRiX3BvcnRfYXQoeGQtXFx1MDAzZXJvdXRlLCBwYXJlbnRfc3cpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM9MTg3MD1zdGF0aWMgaW5saW5lIHZvaWQgbWFyZ2luaW5nX3N3aXRjaF9yZW1vdmUoc3RydWN0IHRiX3N3aXRjaCAqc3cpIHsgfVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjE4NzE6c3RhdGljIGlubGluZSB2b2lkIG1hcmdpbmluZ194ZG9tYWluX2luaXQoc3RydWN0IHRiX3hkb21haW4gKnhkKSB7IH1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoxODcyOnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJnaW5pbmdfeGRvbWFpbl9yZW1vdmUoc3RydWN0IHRiX3hkb21haW4gKnhkKSB7IH1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0xODczLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJnaW5pbmdfcmV0aW1lcl9pbml0KHN0cnVjdCB0Yl9yZXRpbWVyICpydCxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jPTI0NjI9dm9pZCB0Yl9zd2l0Y2hfZGVidWdmc19yZW1vdmUoc3RydWN0IHRiX3N3aXRjaCAqc3cpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDY3LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjI0Njg6dm9pZCB0Yl94ZG9tYWluX2RlYnVnZnNfaW5pdChzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjQ2OS17XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmM6MjQ3MDpcXHRtYXJnaW5pbmdfeGRvbWFpbl9pbml0KHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDcxLX1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDcyLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZGVidWdmcy5jOjI0NzM6dm9pZCB0Yl94ZG9tYWluX2RlYnVnZnNfcmVtb3ZlKHN0cnVjdCB0Yl94ZG9tYWluICp4ZClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYy0yNDc0LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RlYnVnZnMuYzoyNDc1OlxcdG1hcmdpbmluZ194ZG9tYWluX3JlbW92ZSh4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kZWJ1Z2ZzLmMtMjQ3Ni19XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9OTE9c3RydWN0IGRtYV90ZXN0IHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtOTItXFx0Y29uc3Qgc3RydWN0IHRiX3NlcnZpY2UgKnN2YztcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6OTM6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy05NC1cXHRzdHJ1Y3QgdGJfcmluZyAqcnhfcmluZztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz0xMjA9c3RhdGljIHZvaWQgZG1hX3Rlc3RfZnJlZV9yaW5ncyhzdHJ1Y3QgZG1hX3Rlc3QgKmR0KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEyMi1cXHRpZiAoZHQtXFx1MDAzZXJ4X3JpbmcpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTIzOlxcdFxcdHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZChkdC1cXHUwMDNleGQsIGR0LVxcdTAwM2VyeF9ob3BpZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEyNC1cXHRcXHR0Yl9yaW5nX2ZyZWUoZHQtXFx1MDAzZXJ4X3JpbmcpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEyNy1cXHRpZiAoZHQtXFx1MDAzZXR4X3JpbmcpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTI4OlxcdFxcdHRiX3hkb21haW5fcmVsZWFzZV9vdXRfaG9waWQoZHQtXFx1MDAzZXhkLCBkdC1cXHUwMDNldHhfaG9waWQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xMjktXFx0XFx0dGJfcmluZ19mcmVlKGR0LVxcdTAwM2V0eF9yaW5nKTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYz0xMzQ9c3RhdGljIGludCBkbWFfdGVzdF9zdGFydF9yaW5ncyhzdHJ1Y3QgZG1hX3Rlc3QgKmR0KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzNi1cXHR1bnNpZ25lZCBpbnQgZmxhZ3MgPSBSSU5HX0ZMQUdfRlJBTUU7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjEzNzpcXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQgPSBkdC1cXHUwMDNleGQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTEzOC1cXHRpbnQgcmV0LCBlMmVfdHhfaG9wID0gMDtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xNTktXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjE2MDpcXHRcXHRyZXQgPSB0Yl94ZG9tYWluX2FsbG9jX291dF9ob3BpZCh4ZCwgLTEpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xNjEtXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xODctXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjE4ODpcXHRcXHRyZXQgPSB0Yl94ZG9tYWluX2FsbG9jX2luX2hvcGlkKHhkLCAtMSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTE4OS1cXHRcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTE5Ni1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM6MTk3OlxcdHJldCA9IHRiX3hkb21haW5fZW5hYmxlX3BhdGhzKGR0LVxcdTAwM2V4ZCwgZHQtXFx1MDAzZXR4X2hvcGlkLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0xOTgtXFx0XFx0XFx0XFx0ICAgICAgZHQtXFx1MDAzZXR4X3JpbmcgPyBkdC1cXHUwMDNldHhfcmluZy1cXHUwMDNlaG9wIDogLTEsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9MjE0PXN0YXRpYyB2b2lkIGRtYV90ZXN0X3N0b3BfcmluZ3Moc3RydWN0IGRtYV90ZXN0ICpkdClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy0yMjItXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjIyMzpcXHRyZXQgPSB0Yl94ZG9tYWluX2Rpc2FibGVfcGF0aHMoZHQtXFx1MDAzZXhkLCBkdC1cXHUwMDNldHhfaG9waWQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTIyNC1cXHRcXHRcXHRcXHQgICAgICAgZHQtXFx1MDAzZXR4X3JpbmcgPyBkdC1cXHUwMDNldHhfcmluZy1cXHUwMDNlaG9wIDogLTEsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9NDY4PXN0YXRpYyBpbnQgZG1hX3Rlc3Rfc2V0X2JvbmRpbmcoc3RydWN0IGRtYV90ZXN0ICpkdClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy00NzEtXFx0Y2FzZSBUQl9MSU5LX1dJRFRIX0RVQUw6XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jOjQ3MjpcXHRcXHRyZXR1cm4gdGJfeGRvbWFpbl9sYW5lX2JvbmRpbmdfZW5hYmxlKGR0LVxcdTAwM2V4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kbWFfdGVzdC5jLTQ3My1cXHRjYXNlIFRCX0xJTktfV0lEVEhfU0lOR0xFOlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo0NzQ6XFx0XFx0dGJfeGRvbWFpbl9sYW5lX2JvbmRpbmdfZGlzYWJsZShkdC1cXHUwMDNleGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy00NzUtXFx0XFx0ZmFsbHRocm91Z2g7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmM9NjM5PXN0YXRpYyBpbnQgZG1hX3Rlc3RfcHJvYmUoc3RydWN0IHRiX3NlcnZpY2UgKnN2YywgY29uc3Qgc3RydWN0IHRiX3NlcnZpY2VfaWQgKmlkKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYy02NDAte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG1hX3Rlc3QuYzo2NDE6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkID0gdGJfc2VydmljZV9wYXJlbnQoc3ZjKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RtYV90ZXN0LmMtNjQyLVxcdHN0cnVjdCBkbWFfdGVzdCAqZHQ7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTMzOD1zdGF0aWMgYm9vbCB0Yl9kb21haW5fZXZlbnRfY2Iodm9pZCAqZGF0YSwgZW51bSB0Yl9jZmdfcGtnX3R5cGUgdHlwZSxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtMzUwLVxcdGNhc2UgVEJfQ0ZHX1BLR19YRE9NQUlOX1JFU1A6XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzozNTE6XFx0XFx0aWYgKHRiX2lzX3hkb21haW5fZW5hYmxlZCgpKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6MzUyOlxcdFxcdFxcdHJldHVybiB0Yl94ZG9tYWluX2hhbmRsZV9yZXF1ZXN0KHRiLCB0eXBlLCBidWYsIHNpemUpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtMzUzLVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz03NTY9aW50IHRiX2RvbWFpbl9kaXNjb25uZWN0X3BjaWVfcGF0aHMoc3RydWN0IHRiICp0YilcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzY0LS8qKlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6NzY1OiAqIHRiX2RvbWFpbl9hcHByb3ZlX3hkb21haW5fcGF0aHMoKSAtIEVuYWJsZSBETUEgcGF0aHMgZm9yIFhEb21haW5cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc2Ni0gKiBAdGI6IERvbWFpbiBlbmFibGluZyB0aGUgRE1BIHBhdGhzXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc4MS0gKi9cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjc4MjppbnQgdGJfZG9tYWluX2FwcHJvdmVfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy03ODMtXFx0XFx0XFx0XFx0ICAgIGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzg1LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjc4NjpcXHRpZiAoIXRiLVxcdTAwM2VjbV9vcHMtXFx1MDAzZWFwcHJvdmVfeGRvbWFpbl9wYXRocylcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTc4Ny1cXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzg4LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6Nzg5OlxcdHJldHVybiB0Yi1cXHUwMDNlY21fb3BzLVxcdTAwM2VhcHByb3ZlX3hkb21haW5fcGF0aHModGIsIHhkLCB0cmFuc21pdF9wYXRoLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzkwLVxcdFxcdFxcdHRyYW5zbWl0X3JpbmcsIHJlY2VpdmVfcGF0aCwgcmVjZWl2ZV9yaW5nKTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtNzkzLS8qKlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6Nzk0OiAqIHRiX2RvbWFpbl9kaXNjb25uZWN0X3hkb21haW5fcGF0aHMoKSAtIERpc2FibGUgRE1BIHBhdGhzIGZvciBYRG9tYWluXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy03OTUtICogQHRiOiBEb21haW4gZGlzYWJsaW5nIHRoZSBETUEgcGF0aHNcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODEwLSAqL1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODExOmludCB0Yl9kb21haW5fZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKHN0cnVjdCB0YiAqdGIsIHN0cnVjdCB0Yl94ZG9tYWluICp4ZCxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgxMi1cXHRcXHRcXHRcXHQgICAgICAgaW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTQte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODE1OlxcdGlmICghdGItXFx1MDAzZWNtX29wcy1cXHUwMDNlZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODE2LVxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTctXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MTg6XFx0cmV0dXJuIHRiLVxcdTAwM2VjbV9vcHMtXFx1MDAzZWRpc2Nvbm5lY3RfeGRvbWFpbl9wYXRocyh0YiwgeGQsIHRyYW5zbWl0X3BhdGgsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MTktXFx0XFx0XFx0dHJhbnNtaXRfcmluZywgcmVjZWl2ZV9wYXRoLCByZWNlaXZlX3JpbmcpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MjEtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4MjI6c3RhdGljIGludCBkaXNjb25uZWN0X3hkb21haW4oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODIzLXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjgyNDpcXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04MjUtXFx0c3RydWN0IHRiICp0YiA9IGRhdGE7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgyNy1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjgyODpcXHR4ZCA9IHRiX3RvX3hkb21haW4oZGV2KTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTgyOS1cXHRpZiAoeGQgXFx1MDAyNlxcdTAwMjYgeGQtXFx1MDAzZXRiID09IHRiKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODMwOlxcdFxcdHJldCA9IHRiX3hkb21haW5fZGlzYWJsZV9hbGxfcGF0aHMoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODMxLVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz04NDU9aW50IHRiX2RvbWFpbl9kaXNjb25uZWN0X2FsbF9wYXRocyhzdHJ1Y3QgdGIgKnRiKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NTItXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4NTM6XFx0cmV0dXJuIGJ1c19mb3JfZWFjaF9kZXYoXFx1MDAyNnRiX2J1c190eXBlLCBOVUxMLCB0YiwgZGlzY29ubmVjdF94ZG9tYWluKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg1NC19XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTg1Nj1zdHJ1Y3QgdW5yZWdpc3Rlcl9jb250ZXh0IHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYwLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODYxOnN0YXRpYyBpbnQgdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04NjIte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODYzLVxcdHN0cnVjdCB1bnJlZ2lzdGVyX2NvbnRleHQgKmN0eCA9IGRhdGE7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4NjQ6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODY1LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODY2OlxcdHhkID0gdGJfdG9feGRvbWFpbihkZXYpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODY3LVxcdGlmICh4ZCBcXHUwMDI2XFx1MDAyNiB4ZC1cXHUwMDNldGIgPT0gY3R4LVxcdTAwM2V0YiBcXHUwMDI2XFx1MDAyNiB4ZC1cXHUwMDNlaXNfdW5wbHVnZ2VkKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4Njg6XFx0XFx0dGJfeGRvbWFpbl91bnJlZ2lzdGVyKHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg2OS1cXHRcXHRjdHgtXFx1MDAzZW4rKztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODczLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6ODc0OmludCB0Yl9kb21haW5fdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbnMoc3RydWN0IHRiICp0YilcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg3NS17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg3OS1cXHRjdHgubiA9IDA7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo4ODA6XFx0YnVzX2Zvcl9lYWNoX2RldihcXHUwMDI2dGJfYnVzX3R5cGUsIE5VTEwsIFxcdTAwMjZjdHgsIHVucmVnaXN0ZXJfdW5wbHVnZ2VkX3hkb21haW4pO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtODgxLVxcdHRiX2RvbWFpbl9wdXQodGIpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYz04ODY9aW50IHRiX2RvbWFpbl9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg5My1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg5NDpcXHRyZXQgPSB0Yl94ZG9tYWluX2luaXQoKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTg5NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy04OTgtXFx0aWYgKHJldClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jOjg5OTpcXHRcXHRnb3RvIGVycl94ZG9tYWluO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTAwLVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy05MDItXFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo5MDM6ZXJyX3hkb21haW46XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYzo5MDQ6XFx0dGJfeGRvbWFpbl9leGl0KCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9kb21haW4uYy05MDUtZXJyX2FjcGk6XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jPTkxMj12b2lkIHRiX2RvbWFpbl9leGl0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2RvbWFpbi5jLTkxNi1cXHR0Yl9udm1fZXhpdCgpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmM6OTE3OlxcdHRiX3hkb21haW5fZXhpdCgpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvZG9tYWluLmMtOTE4LVxcdHRiX2FjcGlfZXhpdCgpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz01OT1zdHJ1Y3QgdXNiNF9zd2l0Y2hfbnZtX2F1dGgge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy04OS0gKiBAZGV2aWNlX2Rpc2Nvbm5lY3RlZDogSGFuZGxlIGRldmljZSBkaXNjb25uZWN0ZWQgSUNNIG1lc3NhZ2VcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkwOiAqIEB4ZG9tYWluX2Nvbm5lY3RlZDogSGFuZGxlIFhEb21haW4gY29ubmVjdGVkIElDTSBtZXNzYWdlXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5MTogKiBAeGRvbWFpbl9kaXNjb25uZWN0ZWQ6IEhhbmRsZSBYRG9tYWluIGRpc2Nvbm5lY3RlZCBJQ00gbWVzc2FnZVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTItICogQHJ0ZDNfdmV0bzogSGFuZGxlIFJURDMgdmV0byBub3RpZmljYXRpb24gSUNNIG1lc3NhZ2VcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9OTQ9c3RydWN0IGljbSB7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExOC1cXHRcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTE5OlxcdHZvaWQgKCp4ZG9tYWluX2Nvbm5lY3RlZCkoc3RydWN0IHRiICp0YixcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMC1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMTpcXHR2b2lkICgqeGRvbWFpbl9kaXNjb25uZWN0ZWQpKHN0cnVjdCB0YiAqdGIsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjItXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgaWNtX3BrZ19oZWFkZXIgKmhkcik7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTM3NT1zdGF0aWMgYm9vbCBpY21fZmlybXdhcmVfcnVubmluZyhjb25zdCBzdHJ1Y3QgdGJfbmhpICpuaGkpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTM4Mi1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjM4MzpzdGF0aWMgdm9pZCBpY21feGRvbWFpbl9hY3RpdmF0ZWQoc3RydWN0IHRiX3hkb21haW4gKnhkLCBib29sIGFjdGl2YXRlZClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTM4NC17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTM4OC1cXHRuaGlfcG9ydCA9IHRiX3N3aXRjaF9maW5kX3BvcnQodGItXFx1MDAzZXJvb3Rfc3dpdGNoLCBUQl9UWVBFX05ISSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzozODk6XFx0ZHN0X3BvcnQgPSB0Yl94ZG9tYWluX2Rvd25zdHJlYW1fcG9ydCh4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0zOTAtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTU1Mj1zdGF0aWMgaW50IGljbV9mcl9jaGFsbGVuZ2Vfc3dpdGNoX2tleShzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfc3dpdGNoICpzdyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNTgxLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NTgyOnN0YXRpYyBpbnQgaWNtX2ZyX2FwcHJvdmVfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy01ODMtXFx0XFx0XFx0XFx0XFx0aW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy01ODUte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NTg2OlxcdHN0cnVjdCBpY21fZnJfcGtnX2FwcHJvdmVfeGRvbWFpbl9yZXNwb25zZSByZXBseTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjU4NzpcXHRzdHJ1Y3QgaWNtX2ZyX3BrZ19hcHByb3ZlX3hkb21haW4gcmVxdWVzdDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTU4OC1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MTMtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo2MTQ6XFx0aWNtX3hkb21haW5fYWN0aXZhdGVkKHhkLCB0cnVlKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTYxNS1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNjE3LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NjE4OnN0YXRpYyBpbnQgaWNtX2ZyX2Rpc2Nvbm5lY3RfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MTktXFx0XFx0XFx0XFx0XFx0ICAgaW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MzQtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo2MzU6XFx0aWNtX3hkb21haW5fYWN0aXZhdGVkKHhkLCBmYWxzZSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy02MzYtXFx0cmV0dXJuIDA7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTcwMz1zdGF0aWMgdm9pZCByZW1vdmVfc3dpdGNoKHN0cnVjdCB0Yl9zd2l0Y2ggKnN3KVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03MDgtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MDk6c3RhdGljIHZvaWQgYWRkX3hkb21haW4oc3RydWN0IHRiX3N3aXRjaCAqc3csIHU2NCByb3V0ZSxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcxMC1cXHRcXHRcXHRjb25zdCB1dWlkX3QgKmxvY2FsX3V1aWQsIGNvbnN0IHV1aWRfdCAqcmVtb3RlX3V1aWQsXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcxMi17XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MTM6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzE0LVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03MTYtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3MTc6XFx0eGQgPSB0Yl94ZG9tYWluX2FsbG9jKHN3LVxcdTAwM2V0YiwgXFx1MDAyNnN3LVxcdTAwM2VkZXYsIHJvdXRlLCBsb2NhbF91dWlkLCByZW1vdGVfdXVpZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03MTgtXFx0aWYgKCF4ZClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzIzLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzI0OlxcdHRiX3BvcnRfYXQocm91dGUsIHN3KS1cXHUwMDNleGRvbWFpbiA9IHhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzI1LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzI2OlxcdHRiX3hkb21haW5fYWRkKHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTcyNy1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzMyLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzMzOnN0YXRpYyB2b2lkIHVwZGF0ZV94ZG9tYWluKHN0cnVjdCB0Yl94ZG9tYWluICp4ZCwgdTY0IHJvdXRlLCB1OCBsaW5rKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzM0LXtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzM5LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6NzQwOnN0YXRpYyB2b2lkIHJlbW92ZV94ZG9tYWluKHN0cnVjdCB0Yl94ZG9tYWluICp4ZClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTc0MS17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTc0NC1cXHRzdyA9IHRiX3RvX3N3aXRjaCh4ZC1cXHUwMDNlZGV2LnBhcmVudCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3NDU6XFx0dGJfcG9ydF9hdCh4ZC1cXHUwMDNlcm91dGUsIHN3KS1cXHUwMDNleGRvbWFpbiA9IE5VTEw7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03NDYtXFx0eGQtXFx1MDAzZWlzX3VucGx1Z2dlZCA9IHRydWU7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3NDc6XFx0dGJfeGRvbWFpbl9yZW1vdmUoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzQ4LX1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9NzUxPWljbV9mcl9kZXZpY2VfY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy03NTktXFx0Ym9vbCBhdXRob3JpemVkID0gZmFsc2U7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo3NjA6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtNzYxLVxcdHU4IGxpbmssIGRlcHRoO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy04NTAtXFx0LyogUmVtb3ZlIGV4aXN0aW5nIFhEb21haW4gY29ubmVjdGlvbiBpZiBmb3VuZCAqL1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6ODUxOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X2xpbmtfZGVwdGgodGIsIGxpbmssIGRlcHRoKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTg1Mi1cXHRpZiAoeGQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjg1MzpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo4NTQ6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtODU1LVxcdH1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9OTMyPXN0YXRpYyB2b2lkXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5MzM6aWNtX2ZyX3hkb21haW5fY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTM0LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjkzNTpcXHRjb25zdCBzdHJ1Y3QgaWNtX2ZyX2V2ZW50X3hkb21haW5fY29ubmVjdGVkICpwa2cgPVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTM2OlxcdFxcdChjb25zdCBzdHJ1Y3QgaWNtX2ZyX2V2ZW50X3hkb21haW5fY29ubmVjdGVkICopaGRyO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTM3OlxcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTkzOC1cXHRzdHJ1Y3QgdGJfc3dpdGNoICpzdztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTUyLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTUzOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3V1aWQodGIsIFxcdTAwMjZwa2ctXFx1MDAzZXJlbW90ZV91dWlkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk1NC1cXHRpZiAoeGQpIHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTYwLVxcdFxcdGlmICh4ZC1cXHUwMDNlZGVwdGggPT0gZGVwdGggXFx1MDAyNlxcdTAwMjYgeGRfcGh5X3BvcnQgPT0gcGh5X3BvcnQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk2MTpcXHRcXHRcXHR1cGRhdGVfeGRvbWFpbih4ZCwgcm91dGUsIGxpbmspO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTYyOlxcdFxcdFxcdHRiX3hkb21haW5fcHV0KHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk2My1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk3MS1cXHRcXHQgKi9cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk3MjpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5NzM6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTc0LVxcdH1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTgwLVxcdCAqL1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTgxOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X2xpbmtfZGVwdGgodGIsIGxpbmssIGRlcHRoKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk4Mi1cXHRpZiAoIXhkKSB7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk4Ni1cXHRcXHRpZiAoZHVhbF9saW5rKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6OTg3OlxcdFxcdFxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X2xpbmtfZGVwdGgodGIsIGR1YWxfbGluayxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk4OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXB0aCk7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTk5MC1cXHRpZiAoeGQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjk5MTpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzo5OTI6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtOTkzLVxcdH1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAxMi1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMTM6XFx0YWRkX3hkb21haW4oc3csIHJvdXRlLCBcXHUwMDI2cGtnLVxcdTAwM2Vsb2NhbF91dWlkLCBcXHUwMDI2cGtnLVxcdTAwM2VyZW1vdGVfdXVpZCwgbGluayxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMTQtXFx0XFx0ICAgIGRlcHRoKTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MTAxOD1zdGF0aWMgdm9pZFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTAxOTppY21fZnJfeGRvbWFpbl9kaXNjb25uZWN0ZWQoc3RydWN0IHRiICp0YiwgY29uc3Qgc3RydWN0IGljbV9wa2dfaGVhZGVyICpoZHIpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMDIwLXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMjE6XFx0Y29uc3Qgc3RydWN0IGljbV9mcl9ldmVudF94ZG9tYWluX2Rpc2Nvbm5lY3RlZCAqcGtnID1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMjI6XFx0XFx0KGNvbnN0IHN0cnVjdCBpY21fZnJfZXZlbnRfeGRvbWFpbl9kaXNjb25uZWN0ZWQgKiloZHI7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDIzOlxcdHN0cnVjdCB0Yl94ZG9tYWluICp4ZDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMjQtXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMjktXFx0ICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDMwOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3V1aWQodGIsIFxcdTAwMjZwa2ctXFx1MDAzZXJlbW90ZV91dWlkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEwMzEtXFx0aWYgKHhkKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMDMyOlxcdFxcdHJlbW92ZV94ZG9tYWluKHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEwMzM6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTAzNC1cXHR9XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTExMjc9c3RhdGljIGludCBpY21fdHJfY2hhbGxlbmdlX3N3aXRjaF9rZXkoc3RydWN0IHRiICp0Yiwgc3RydWN0IHRiX3N3aXRjaCAqc3csXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExNTctXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTU4OnN0YXRpYyBpbnQgaWNtX3RyX2FwcHJvdmVfeGRvbWFpbl9wYXRocyhzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTU5LVxcdFxcdFxcdFxcdFxcdGludCB0cmFuc21pdF9wYXRoLCBpbnQgdHJhbnNtaXRfcmluZyxcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTE2MS17XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTYyOlxcdHN0cnVjdCBpY21fdHJfcGtnX2FwcHJvdmVfeGRvbWFpbl9yZXNwb25zZSByZXBseTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExNjM6XFx0c3RydWN0IGljbV90cl9wa2dfYXBwcm92ZV94ZG9tYWluIHJlcXVlc3Q7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTY0LVxcdGludCByZXQ7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExODktXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMTkwOlxcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgdHJ1ZSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTkxLVxcdHJldHVybiAwO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTkzLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTE5NDpzdGF0aWMgaW50IGljbV90cl94ZG9tYWluX3RlYXJfZG93bihzdHJ1Y3QgdGIgKnRiLCBzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTk1LVxcdFxcdFxcdFxcdCAgICBpbnQgc3RhZ2UpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMTk2LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjExOTc6XFx0c3RydWN0IGljbV90cl9wa2dfZGlzY29ubmVjdF94ZG9tYWluX3Jlc3BvbnNlIHJlcGx5O1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTE5ODpcXHRzdHJ1Y3QgaWNtX3RyX3BrZ19kaXNjb25uZWN0X3hkb21haW4gcmVxdWVzdDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTExOTktXFx0aW50IHJldDtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIxOS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMjA6c3RhdGljIGludCBpY21fdHJfZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzKHN0cnVjdCB0YiAqdGIsIHN0cnVjdCB0Yl94ZG9tYWluICp4ZCxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMjEtXFx0XFx0XFx0XFx0XFx0ICAgaW50IHRyYW5zbWl0X3BhdGgsIGludCB0cmFuc21pdF9yaW5nLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjI1LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTIyNjpcXHRyZXQgPSBpY21fdHJfeGRvbWFpbl90ZWFyX2Rvd24odGIsIHhkLCAxKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMjctXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIzMC1cXHR1c2xlZXBfcmFuZ2UoMTAsIDUwKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEyMzE6XFx0cmV0ID0gaWNtX3RyX3hkb21haW5fdGVhcl9kb3duKHRiLCB4ZCwgMik7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjMyLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEyMzQtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjM1OlxcdGljbV94ZG9tYWluX2FjdGl2YXRlZCh4ZCwgZmFsc2UpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTIzNi1cXHRyZXR1cm4gMDtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MTI0MD1fX2ljbV90cl9kZXZpY2VfY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyLFxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjQ3LVxcdHN0cnVjdCB0Yl9zd2l0Y2ggKnN3LCAqcGFyZW50X3N3O1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTI0ODpcXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjQ5LVxcdHU2NCByb3V0ZTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTI5Ni1cXHQvKiBYRG9tYWluIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2FtZSBhZGRyZXNzICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMjk3OlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3JvdXRlKHRiLCByb3V0ZSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMjk4LVxcdGlmICh4ZCkge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTI5OTpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzAwOlxcdFxcdHRiX3hkb21haW5fcHV0KHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzMDEtXFx0fVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0xMzY2PXN0YXRpYyB2b2lkXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzY3OmljbV90cl94ZG9tYWluX2Nvbm5lY3RlZChzdHJ1Y3QgdGIgKnRiLCBjb25zdCBzdHJ1Y3QgaWNtX3BrZ19oZWFkZXIgKmhkcilcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzNjgte1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM2OTpcXHRjb25zdCBzdHJ1Y3QgaWNtX3RyX2V2ZW50X3hkb21haW5fY29ubmVjdGVkICpwa2cgPVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM3MDpcXHRcXHQoY29uc3Qgc3RydWN0IGljbV90cl9ldmVudF94ZG9tYWluX2Nvbm5lY3RlZCAqKWhkcjtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzNzE6XFx0c3RydWN0IHRiX3hkb21haW4gKnhkO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM3Mi1cXHRzdHJ1Y3QgdGJfc3dpdGNoICpzdztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM3OS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzODA6XFx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfdXVpZCh0YiwgXFx1MDAyNnBrZy1cXHUwMDNlcmVtb3RlX3V1aWQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM4MS1cXHRpZiAoeGQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzODItXFx0XFx0aWYgKHhkLVxcdTAwM2Vyb3V0ZSA9PSByb3V0ZSkge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4MzpcXHRcXHRcXHR1cGRhdGVfeGRvbWFpbih4ZCwgcm91dGUsIDApO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4NDpcXHRcXHRcXHR0Yl94ZG9tYWluX3B1dCh4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMzg1LVxcdFxcdFxcdHJldHVybjtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTM4Ny1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjEzODg6XFx0XFx0cmVtb3ZlX3hkb21haW4oeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM4OTpcXHRcXHR0Yl94ZG9tYWluX3B1dCh4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMzkwLVxcdH1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzOTEtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzkyOlxcdC8qIEFuIGV4aXN0aW5nIHhkb21haW4gd2l0aCB0aGUgc2FtZSBhZGRyZXNzICovXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzkzOlxcdHhkID0gdGJfeGRvbWFpbl9maW5kX2J5X3JvdXRlKHRiLCByb3V0ZSk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xMzk0LVxcdGlmICh4ZCkge1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTM5NTpcXHRcXHRyZW1vdmVfeGRvbWFpbih4ZCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxMzk2OlxcdFxcdHRiX3hkb21haW5fcHV0KHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTEzOTctXFx0fVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDE1LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQxNjpcXHRhZGRfeGRvbWFpbihzdywgcm91dGUsIFxcdTAwMjZwa2ctXFx1MDAzZWxvY2FsX3V1aWQsIFxcdTAwMjZwa2ctXFx1MDAzZXJlbW90ZV91dWlkLCAwLCAwKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MTctXFx0dGJfc3dpdGNoX3B1dChzdyk7XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTE0MjA9c3RhdGljIHZvaWRcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MjE6aWNtX3RyX3hkb21haW5fZGlzY29ubmVjdGVkKHN0cnVjdCB0YiAqdGIsIGNvbnN0IHN0cnVjdCBpY21fcGtnX2hlYWRlciAqaGRyKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTQyMi17XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDIzOlxcdGNvbnN0IHN0cnVjdCBpY21fdHJfZXZlbnRfeGRvbWFpbl9kaXNjb25uZWN0ZWQgKnBrZyA9XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDI0OlxcdFxcdChjb25zdCBzdHJ1Y3QgaWNtX3RyX2V2ZW50X3hkb21haW5fZGlzY29ubmVjdGVkICopaGRyO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTQyNTpcXHRzdHJ1Y3QgdGJfeGRvbWFpbiAqeGQ7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNDI2LVxcdHU2NCByb3V0ZTtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTQyOS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MzA6XFx0eGQgPSB0Yl94ZG9tYWluX2ZpbmRfYnlfcm91dGUodGIsIHJvdXRlKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE0MzEtXFx0aWYgKHhkKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNDMyOlxcdFxcdHJlbW92ZV94ZG9tYWluKHhkKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE0MzM6XFx0XFx0dGJfeGRvbWFpbl9wdXQoeGQpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTQzNC1cXHR9XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTE3MzU9c3RhdGljIHZvaWQgaWNtX2hhbmRsZV9ub3RpZmljYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzU2LVxcdFxcdGNhc2UgSUNNX0VWRU5UX1hET01BSU5fQ09OTkVDVEVEOlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTc1NzpcXHRcXHRcXHRpZiAodGJfaXNfeGRvbWFpbl9lbmFibGVkKCkpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoxNzU4OlxcdFxcdFxcdFxcdGljbS1cXHUwMDNleGRvbWFpbl9jb25uZWN0ZWQodGIsIG4tXFx1MDAzZXBrZyk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0xNzU5LVxcdFxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTc2MC1cXHRcXHRjYXNlIElDTV9FVkVOVF9YRE9NQUlOX0RJU0NPTk5FQ1RFRDpcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE3NjE6XFx0XFx0XFx0aWYgKHRiX2lzX3hkb21haW5fZW5hYmxlZCgpKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MTc2MjpcXHRcXHRcXHRcXHRpY20tXFx1MDAzZXhkb21haW5fZGlzY29ubmVjdGVkKHRiLCBuLVxcdTAwM2Vwa2cpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTc2My1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMTc3Ny1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjE3Nzg6XFx0dGJfZG9tYWluX3VucmVnaXN0ZXJfdW5wbHVnZ2VkX3hkb21haW5zKHRiKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTE3NzktfVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0yMDU2PXN0YXRpYyB2b2lkIGljbV91bnBsdWdfY2hpbGRyZW4oc3RydWN0IHRiX3N3aXRjaCAqc3cpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIwNjMtXFx0dGJfc3dpdGNoX2Zvcl9lYWNoX3BvcnQoc3csIHBvcnQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjIwNjQ6XFx0XFx0aWYgKHBvcnQtXFx1MDAzZXhkb21haW4pXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMDY1OlxcdFxcdFxcdHBvcnQtXFx1MDAzZXhkb21haW4tXFx1MDAzZWlzX3VucGx1Z2dlZCA9IHRydWU7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMDY2LVxcdFxcdGVsc2UgaWYgKHRiX3BvcnRfaGFzX3JlbW90ZShwb3J0KSlcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjEwMT1zdGF0aWMgdm9pZCBpY21fZnJlZV91bnBsdWdnZWRfY2hpbGRyZW4oc3RydWN0IHRiX3N3aXRjaCAqc3cpXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIxMDUtXFx0dGJfc3dpdGNoX2Zvcl9lYWNoX3BvcnQoc3csIHBvcnQpIHtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjIxMDY6XFx0XFx0aWYgKHBvcnQtXFx1MDAzZXhkb21haW4gXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNleGRvbWFpbi1cXHUwMDNlaXNfdW5wbHVnZ2VkKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyMTA3OlxcdFxcdFxcdHRiX3hkb21haW5fcmVtb3ZlKHBvcnQtXFx1MDAzZXhkb21haW4pO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MjEwODpcXHRcXHRcXHRwb3J0LVxcdTAwM2V4ZG9tYWluID0gTlVMTDtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jLTIxMDktXFx0XFx0fSBlbHNlIGlmICh0Yl9wb3J0X2hhc19yZW1vdGUocG9ydCkpIHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM9MjEyMD1zdGF0aWMgdm9pZCBpY21fcmVzY2FuX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYy0yMTI5LVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmM6MjEzMDpcXHR0Yl9kb21haW5fdW5yZWdpc3Rlcl91bnBsdWdnZWRfeGRvbWFpbnModGIpO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjEzMS19XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jPTI0MDE9c3RhdGljIGNvbnN0IHN0cnVjdCB0Yl9jbV9vcHMgaWNtX2ZyX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjQxMS1cXHQuZGlzY29ubmVjdF9wY2llX3BhdGhzID0gaWNtX2Rpc2Nvbm5lY3RfcGNpZV9wYXRocyxcXG5kcml2ZXJzL3RodW5kZXJib2x0L2ljbS5jOjI0MTI6XFx0LmFwcHJvdmVfeGRvbWFpbl9wYXRocyA9IGljbV9mcl9hcHByb3ZlX3hkb21haW5fcGF0aHMsXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYzoyNDEzOlxcdC5kaXNjb25uZWN0X3hkb21haW5fcGF0aHMgPSBpY21fZnJfZGlzY29ubmVjdF94ZG9tYWluX3BhdGhzLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvaWNtLmMtMjQxNC19O1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9pY20uYz0yNDE3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGJfY21fb3BzIGljbV9hcl9vcHMgPSB7XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6MDAuMjAyNjk5MTg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTY3MjE2NTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgVGh1bmRlcmJvbHQgeGRvbWFpbiBDcmVhdGlvbioqXG5cbk9rYXksIHNvIGBjb25maWdmcy5jYCBpcyB0aGUga2V5IGZvciB0aHVuZGVyYm9sdCB4ZG9tYWlucywgaW50ZXJlc3RpbmcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuY2AuIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSAqYWxsb3dzKiB0aGUgY3JlYXRpb24gb2YgdGhlc2UgeGRvbWFpbnMuIEknbGwgdGFrZSBhIGNsb3NlIGxvb2sgYXQgdGhlIGNvZGUgdGhlcmUgdG8gY29uZmlybSBhbmQgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzLiBUaGlzIGlzIGxpa2VseSB3aGVyZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBhbmQgc2V0dXAgb2NjdXJzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTQ2NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjEwLjc2OTkxODgyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NDIzNjgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhkb21haW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjoxMC44MzA3Njc5MjJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTIxNTMxMTE3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gVGh1bmRlcmJvbHQgQ29uZmlnRlMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgZXhwb3NlZCB2aWEgYGNvbmZpZ2ZzYCBmb3IgVGh1bmRlcmJvbHQgZGV2aWNlcy4gTGV0J3Mgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmNgLiBUaGF0IGZpbGUgaXMgdGhlIHByaW1lIHN1c3BlY3QgZm9yIGhhbmRsaW5nIHRoZSBgY29uZmlnZnNgIGludGVyZmFjZSBmb3IgVGh1bmRlcmJvbHQsIHNvIGl0J3MgdGhlIG5hdHVyYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbi4gSSBleHBlY3QgaXQnbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGF0dHJpYnV0ZXMgYW5kIHN0cnVjdHVyZXMgdGhhdCBhcmUgYmVpbmcgY3JlYXRlZCB1bmRlciB0aGUgaG9vZCwgYW5kIGhvdyB1c2Vyc3BhY2UgaXMgc3VwcG9zZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGVtLiBUaGlzIGlzIHRoZSBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2NDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjoxNi4wNDYwODI1MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNTAwMjI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZ19pdGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtMTMtXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jOjE0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB0Yl9yb290X2dyb3VwX3R5cGUgPSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTE1LVxcdC5jdF9vd25lciA9IFRISVNfTU9EVUxFLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjoxNi4xMDg1ODY2NzVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyOTc0ODE0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYDpcblxuKipEaXNzZWN0aW5nIFRodW5kZXJib2x0IENvbmZpZ3VyYXRpb24gVGhyb3VnaCBjb25maWdmcyoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBkaWcgaW50byBgZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jYC4gSSBleHBlY3QgdGhpcyBjb2RlIHRvIGJlIHRoZSBjcnVjaWFsIGludGVyZmFjZSBmb3IgaG93IHdlIGV4cG9zZSBUaHVuZGVyYm9sdCBkZXZpY2UgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIHVzZXJzcGFjZSwgbGlrZWx5IHRocm91Z2ggdGhlIGBjb25maWdmc2AgZmlsZXN5c3RlbS4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgY3JlYXRpb24gb2YgdmFyaW91cyBhdHRyaWJ1dGVzIGFuZCBkaXJlY3RvcmllcyB3aXRoaW4gYGNvbmZpZ2ZzYCB0aGF0IHJlcHJlc2VudCBkaWZmZXJlbnQgYXNwZWN0cyBvZiBhIFRodW5kZXJib2x0IGNvbm5lY3Rpb24sIGxpa2UgcG9ydCBjb25maWd1cmF0aW9uLCBzZWN1cml0eSBsZXZlbHMsIGFuZCBwZXJoYXBzIGV2ZW4gcG93ZXIgbWFuYWdlbWVudCBwYXJhbWV0ZXJzLlxuXG5NeSBmaXJzdCB0aG91Z2h0IGlzIEknbGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBkcml2ZXIgcmVnaXN0ZXJzIGl0c2VsZiB3aXRoIGBjb25maWdmc2AuIEl0J2xsIGJlIGludGVyZXN0aW5nIHRvIHNlZSBob3cgdGhleSd2ZSBzdHJ1Y3R1cmVkIHRoZSBoaWVyYXJjaHkgb2YgdGhlIGV4cG9zZWQgbm9kZXMgYW5kIGhvdyB0aGV5J3ZlIGhhbmRsZWQgdGhlIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyB0aGV5J3ZlIGRlYWx0IHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiBUaHVuZGVyYm9sdCdzIHNlY3VyaXR5IGZlYXR1cmVzIGFuZCBob3cgdGhhdCBtYXBzIHRvIHRoZSB1c2VyLWxldmVsIGNvbmZpZ3VyYXRpb24uIEknbGwgYmUgd2F0Y2hpbmcgdG8gc2VlIGhvdyB0aGV5IGhhbmRsZSBob3QtcGx1Z2dpbmcgYW5kIGRldmljZSBlbnVtZXJhdGlvbiB0b28uXG5cbkknbSBrZWVuIHRvIHNlZSBpZiB0aGV5J3ZlIGltcGxlbWVudGVkIGFueSBzcGVjaWZpYyBhY2Nlc3MgY29udHJvbHMgb3IgcGVybWlzc2lvbnMgbWFuYWdlbWVudCB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBtb2RpZmljYXRpb24gb2YgY3JpdGljYWwgVGh1bmRlcmJvbHQgc2V0dGluZ3MsIGFuZCBob3cgdGhleSBoYW5kbGUgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgb2YgVGh1bmRlcmJvbHQgb3BlcmF0aW9ucyB3aXRoaW4gdGhlIHN5bmNocm9ub3VzIGNvbnRleHQgb2YgdGhlIGBjb25maWdmc2AgaW50ZXJmYWNlLiBJJ2xsIGFsc28gYmUgdHJ5aW5nIHRvIHNwb3QgcG90ZW50aWFsIGFyZWFzIGZvciBvcHRpbWl6YXRpb24sIG9yIGFueSBlbGVnYW50IHNvbHV0aW9ucyB0byBwYXJ0aWN1bGFybHkgdHJpY2t5IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMuIFRoaXMgc2hvdWxkIGJlIGFuIGlsbHVtaW5hdGluZyByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTkxOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjI2LjQwNjA3MDg3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2OTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIENvbmZpZ0ZTIHN1cHBvcnRcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDIwMjYsIEludGVsIENvcnBvcmF0aW9uXFxuICAgNjpcXHQgKiBBdXRob3I6IE1pa2EgV2VzdGVyYmVyZyBcXHUwMDNjbWlrYS53ZXN0ZXJiZXJnQGxpbnV4LmludGVsLmNvbVxcdTAwM2VcXG4gICA3OlxcdCAqL1xcbiAgIDg6XFx0XFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY29uZmlnZnMuaFxcdTAwM2VcXG4gIDEwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9leHBvcnQuaFxcdTAwM2VcXG4gIDExOlxcdFxcbiAgMTI6XFx0I2luY2x1ZGUgXFxcInRiLmhcXFwiXFxuICAxMzpcXHRcXG4gIDE0OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSB0Yl9yb290X2dyb3VwX3R5cGUgPSB7XFxuICAxNTpcXHRcXHQuY3Rfb3duZXIgPSBUSElTX01PRFVMRSxcXG4gIDE2OlxcdH07XFxuICAxNzpcXHRcXG4gIDE4OlxcdHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHRiX2NvbmZpZ2ZzID0ge1xcbiAgMTk6XFx0XFx0LnN1X2dyb3VwID0ge1xcbiAgMjA6XFx0XFx0XFx0LmNnX2l0ZW0gPSB7XFxuICAyMTpcXHRcXHRcXHRcXHQuY2lfbmFtZWJ1ZiA9IFxcXCJ0aHVuZGVyYm9sdFxcXCIsXFxuICAyMjpcXHRcXHRcXHRcXHQuY2lfdHlwZSA9IFxcdTAwMjZ0Yl9yb290X2dyb3VwX3R5cGUsXFxuICAyMzpcXHRcXHRcXHR9LFxcbiAgMjQ6XFx0XFx0fSxcXG4gIDI1OlxcdH07XFxuICAyNjpcXHRcXG4gIDI3OlxcdC8qKlxcbiAgMjg6XFx0ICogdGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXAoKSAtIFJlZ2lzdGVyIFRodW5kZXJib2x0IENvbmZpZ0ZTIGdyb3VwXFxuICAyOTpcXHQgKiBAZ3JvdXA6IEdyb3VwIHRvIHJlZ2lzdGVyLlxcbiAgMzA6XFx0ICpcXG4gIDMxOlxcdCAqIFJlZ2lzdGVycyB0aGUgbmV3IEBncm91cCB1bmRlciBUaHVuZGVyYm9sdCBzdWJzeXN0ZW0gQ29uZmlnRlMuXFxuICAzMjpcXHQgKlxcbiAgMzM6XFx0ICogUmV0dXJuOiAwJSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG90aGVyd2lzZS5cXG4gIDM0OlxcdCAqL1xcbiAgMzU6XFx0aW50IHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxcbiAgMzY6XFx0e1xcbiAgMzc6XFx0XFx0cmV0dXJuIGNvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKFxcdTAwMjZ0Yl9jb25maWdmcy5zdV9ncm91cCwgZ3JvdXApO1xcbiAgMzg6XFx0fVxcbiAgMzk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXApO1xcbiAgNDA6XFx0XFxuICA0MTpcXHQvKipcXG4gIDQyOlxcdCAqIHRiX2NvbmZpZ2ZzX3VucmVnaXN0ZXJfZ3JvdXAoKSAtIFVucmVnaXN0ZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIGdyb3VwXFxuICA0MzpcXHQgKiBAZ3JvdXA6IEdyb3VwIHRvIHVucmVnaXN0ZXIuXFxuICA0NDpcXHQgKi9cXG4gIDQ1OlxcdHZvaWQgdGJfY29uZmlnZnNfdW5yZWdpc3Rlcl9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcXG4gIDQ2OlxcdHtcXG4gIDQ3OlxcdFxcdGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZ3JvdXAoZ3JvdXApO1xcbiAgNDg6XFx0fVxcbiAgNDk6XFx0RVhQT1JUX1NZTUJPTF9HUEwodGJfY29uZmlnZnNfdW5yZWdpc3Rlcl9ncm91cCk7XFxuICA1MDpcXHRcXG4gIDUxOlxcdGludCB0Yl9jb25maWdmc19pbml0KHZvaWQpXFxuICA1MjpcXHR7XFxuICA1MzpcXHRcXHRjb25maWdfZ3JvdXBfaW5pdChcXHUwMDI2dGJfY29uZmlnZnMuc3VfZ3JvdXApO1xcbiAgNTQ6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2dGJfY29uZmlnZnMuc3VfbXV0ZXgpO1xcbiAgNTU6XFx0XFx0cmV0dXJuIGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShcXHUwMDI2dGJfY29uZmlnZnMpO1xcbiAgNTY6XFx0fVxcbiAgNTc6XFx0XFxuICA1ODpcXHR2b2lkIHRiX2NvbmZpZ2ZzX2V4aXQodm9pZClcXG4gIDU5OlxcdHtcXG4gIDYwOlxcdFxcdGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKFxcdTAwMjZ0Yl9jb25maWdmcyk7XFxuICA2MTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjI2LjQwNjE0MDNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAzNTAyMjQwMjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIGZ1bmN0aW9uOlxuXG4qKkRpZ2dpbmcgaW50byB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cCoqXG5cbkFscmlnaHQsIGB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cGAgaXMgYW4gZXhwb3J0ZWQgc3ltYm9sLiBUaGF0IG1lYW5zIGl0J3MgYXZhaWxhYmxlIGZvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIHRvIHVzZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiB3aG8gKnVzZXMqIHRoaXMgZnVuY3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIHNpdGVzIHRvIHJlYWxseSBncmFzcCBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdC4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gSeKAmWxsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIHNlZSB3aGVyZSBpdCBmaXRzIHdpdGhpbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgZHJpdmVyLCBhIGNvcmUgY29tcG9uZW50LCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gVGltZSB0byBicmVhayBvdXQgdGhlIGdyZXAsIG9yIHdoYXRldmVyIHN0YXRpYyBhbmFseXNpcyB0b29sIEkndmUgZ290IGF0IGhhbmQsIGFuZCBmaW5kIHRob3NlIGNhbGwgbG9jYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDY6MzYuNzU2MzY3ODMzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ2MTQ1OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGJfY29uZmlnZnNfcmVnaXN0ZXJfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jPTE4PXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHRiX2NvbmZpZ2ZzID0ge1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTI3LS8qKlxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYzoyODogKiB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cCgpIC0gUmVnaXN0ZXIgVGh1bmRlcmJvbHQgQ29uZmlnRlMgZ3JvdXBcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtMjktICogQGdyb3VwOiBHcm91cCB0byByZWdpc3Rlci5cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0zNC0gKi9cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmM6MzU6aW50IHRiX2NvbmZpZ2ZzX3JlZ2lzdGVyX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYy0zNi17XFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NvbmZpZ2ZzLmMtMzgtfVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY29uZmlnZnMuYzozOTpFWFBPUlRfU1lNQk9MX0dQTCh0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cCk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9jb25maWdmcy5jLTQwLVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9zdHJlYW0uYz0xNjQ4PXN0YXRpYyBpbnQgX19pbml0IHRic3RyZWFtX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMTY2NS1cXHRjb25maWdfZ3JvdXBfaW5pdChcXHUwMDI2dGJzdHJlYW1fZ3JvdXApO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmM6MTY2NjpcXHRyZXQgPSB0Yl9jb25maWdmc19yZWdpc3Rlcl9ncm91cChcXHUwMDI2dGJzdHJlYW1fZ3JvdXApO1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvc3RyZWFtLmMtMTY2Ny1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NjozNy4yNTA5OTA5OThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA4NDczNjU3NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRGVidWdnaW5nIGEgU3l6a2FsbGVyLVRyaWdnZXJlZCBUaHVuZGVyYm9sdCBCdWcqKlxuXG5Pa2F5LCBzbyBgc3RyZWFtLmNgIHVzZXMgaXQsIHRoYXQncyBhIGRhdGEgcG9pbnQuIEJ1dCBob2xkIG9uLCBgZHJpdmVycy90aHVuZGVyYm9sdC90ZXN0LmNgIGhhcyBLVW5pdCB0ZXN0cy4gQW5kIEkga25vdyBLVW5pdCB0ZXN0cyAqY2FuKiBiZSBydW4gaW4gc3l6a2FsbGVyIGlmIHRoZXkncmUgY29tcGlsZWQgaW4sIHRob3VnaCBpdCdzIG5vdCB0aGUgbm9ybSBmb3Igc3l6a2FsbGVyIHRvIHRhcmdldCB0aGVtIGRpcmVjdGx5IGZvciBmdXp6aW5nLiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGBzeXotY2x1c3RlcmAgaXMgdGhlIGF1dGhvciBvZiB0aGUgcmVwb3J0IG1lYW5zIHN5emthbGxlciAqZm91bmQqIGEgYnVnLCB3aGljaCBpcyB0aGUgaW1wb3J0YW50IHRha2Vhd2F5IGhlcmUuXG5cblNvLCBob3cgZXhhY3RseSAqZGlkKiBzeXprYWxsZXIgZ2V0IHRvIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2A/IFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgc3RhcnQgYnkgY2hlY2tpbmcgYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYCBhZ2Fpbiwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgdG8gc2VlIGlmIHRoaXMgaXMgYSBLVW5pdCB0ZXN0IHRyaWdnZXIuXG5cbldhaXQsIEkgbmVlZCB0byB6b29tIG91dCBhIGJpdC4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgaXMgdGhlIFRodW5kZXJib2x0ICpuZXR3b3JraW5nKiBkcml2ZXIuIE9rYXksIHRoYXQgbWFrZXMgc2Vuc2U7IG5ldHdvcmtpbmcgd291bGQgYmUgYSBwcmltZSB0YXJnZXQgZm9yIHN5emthbGxlci4gSWYgc3l6a2FsbGVyIGZ1enplZCBpdCwgaXQgKm11c3QqIGJlIHJlYWNoYWJsZS5cblxuSG9sZCBvbiwgZG9lcyBzeXprYWxsZXIgaGF2ZSBhIHBzZXVkby1zeXNjYWxsIGZvciBUaHVuZGVyYm9sdD8gSSBuZWVkIHRvIGNoZWNrIHRoYXQuIE5vLCBJIGp1c3QgbG9va2VkLCBhbmQgdGhlcmUncyBubyBgc3l6X2AgcHNldWRvLXN5c2NhbGwgc3BlY2lmaWNhbGx5IGZvciBUaHVuZGVyYm9sdC4gVGhhdCdzIGEgY3VydmViYWxsLlxuXG5Pa2F5LCBtYXliZSBzeXprYWxsZXIgaXMgcmVhY2hpbmcgaXQgdGhyb3VnaCB0aGUgYGR1bW15YCBUaHVuZGVyYm9sdCBkcml2ZXI/IEEgbG90IG9mIGZ1enppbmcgZnJhbWV3b3JrcyB3aWxsIHVzZSBkdW1teSBkcml2ZXJzIGZvciB0ZXN0aW5nLiBJcyB0aGVyZSBldmVuIGEgZHVtbXkgZHJpdmVyPyBMZXQgbWUgY2hlY2sgYGRyaXZlcnMvdGh1bmRlcmJvbHQvdGVzdC5jYCBhZ2Fpbi4gSSBuZWVkIHRvIHNlZSBpZiBpdCByZWdpc3RlcnMgYSBkdW1teSB0aHVuZGVyYm9sdCBjb250cm9sbGVyLiBUaGlzIG1pZ2h0IGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZXhlY3V0aW9uIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NjE2LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ2OjQ4LjA5ODM1ODk0NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MDIxNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImR1bW15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvdGh1bmRlcmJvbHQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM9MTg9c3RhdGljIGludCB0Yl9wb3J0X2VuYWJsZV90bXUoc3RydWN0IHRiX3BvcnQgKnBvcnQsIGJvb2wgZW5hYmxlKVxcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYy00Ni1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jOjQ3OnN0YXRpYyB2b2lkIHRiX3BvcnRfZHVtbXlfcmVhZChzdHJ1Y3QgdGJfcG9ydCAqcG9ydClcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTQ4LXtcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtNTEtXFx0ICogY29uZmlnIHNwYWNlIHRoZSByZWFkIGRhdGEgaXMgbm90IGNsZWFyZWQgb24gTFIuIFRvIGF2b2lkXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYzo1MjpcXHQgKiByZWFkaW5nIHN0YWxlIGRhdGEgb24gbmV4dCByZWFkIHBlcmZvcm0gb25lIGR1bW15IHJlYWQgYWZ0ZXJcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTUzLVxcdCAqIHBvcnQgY2FwYWJpbGl0aWVzIGFyZSB3YWxrZWQuXFxuLS1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTU1LVxcdGlmICh0Yl9zd2l0Y2hfaXNfbGlnaHRfcmlkZ2UocG9ydC1cXHUwMDNlc3cpKSB7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYzo1NjpcXHRcXHR1MzIgZHVtbXk7XFxuZHJpdmVycy90aHVuZGVyYm9sdC9jYXAuYy01Ny1cXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jOjU4OlxcdFxcdHRiX3BvcnRfcmVhZChwb3J0LCBcXHUwMDI2ZHVtbXksIFRCX0NGR19QT1JULCAwLCAxKTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTU5LVxcdH1cXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM9MTI0PWludCB0Yl9wb3J0X2ZpbmRfY2FwKHN0cnVjdCB0Yl9wb3J0ICpwb3J0LCBlbnVtIHRiX3BvcnRfY2FwIGNhcClcXG4tLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmMtMTMzLVxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY2FwLmM6MTM0OlxcdHRiX3BvcnRfZHVtbXlfcmVhZChwb3J0KTtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2NhcC5jLTEzNS1cXHR0Yl9wb3J0X2VuYWJsZV90bXUocG9ydCwgZmFsc2UpO1xcbi0tXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuYz0xMTczPWludCB0Yl9jZmdfZ2V0X3Vwc3RyZWFtX3BvcnQoc3RydWN0IHRiX2N0bCAqY3RsLCB1NjQgcm91dGUpXFxuZHJpdmVycy90aHVuZGVyYm9sdC9jdGwuYy0xMTc0LXtcXG5kcml2ZXJzL3RodW5kZXJib2x0L2N0bC5jOjExNzU6XFx0dTMyIGR1bW15O1xcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmM6MTE3NjpcXHRzdHJ1Y3QgdGJfY2ZnX3Jlc3VsdCByZXMgPSB0Yl9jZmdfcmVhZF9yYXcoY3RsLCBcXHUwMDI2ZHVtbXksIHJvdXRlLCAwLFxcbmRyaXZlcnMvdGh1bmRlcmJvbHQvY3RsLmMtMTE3Ny1cXHRcXHRcXHRcXHRcXHRcXHQgICBUQl9DRkdfU1dJVENILCAwLCAxLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0Njo0OC4yMDIzODcxNTNaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTczOTU4NzA5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyNjc2NiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MDUuNTk4MjU5OTM3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzY3MDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Ym5ldF9jb25uZWN0X2ZhaWxlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTU4OT1zdGF0aWMgaW50IHRibmV0X2FsbG9jX3R4X2J1ZmZlcnMoc3RydWN0IHRibmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjI4LVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo2Mjk6c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTYzMC17XFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9NjQzPXN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NjUtXFx0XFx0XFx0dGJfeGRvbWFpbl9yZWxlYXNlX2luX2hvcGlkKG5ldC1cXHUwMDNleGQsIHJldCk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjY2NjpcXHRcXHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NjctXFx0XFx0cmV0dXJuO1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jLTcxMC1cXHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVxcdTAwM2V4ZCwgbmV0LVxcdTAwM2VyZW1vdGVfdHJhbnNtaXRfcGF0aCk7XFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjcxMTpcXHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy03MTItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NzowNS42NTE5MzUyODZaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTk1MjU3ODUyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjI3MTEwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NzoxNS42MDQ1MTU3MDFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDIyNTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRibmV0X2Nvbm5lY3RlZF93b3JrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3RodW5kZXJib2x0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM9MzY5PXN0YXRpYyB2b2lkIHRibmV0X3RlYXJfZG93bihzdHJ1Y3QgdGJuZXQgKm5ldCwgYm9vbCBzZW5kX2xvZ291dClcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zODktXFx0XFx0LyogVGVhciB0aGUgcGF0aHMgZG93biBiZWZvcmUgc3RvcHBpbmcgdGhlIHJpbmdzLiAgVGhpcyBtaXJyb3JzXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jOjM5MDpcXHRcXHQgKiB0Ym5ldF9jb25uZWN0ZWRfd29yaygpLCB3aGljaCBlbmFibGVzIHRoZSBwYXRocyBsYXN0IHNvIHRoZVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy0zOTEtXFx0XFx0ICogUnggcmluZyBpcyBwcmltZWQgYmVmb3JlIHBhY2tldHMgY2FuIGFycml2ZS4gIFN0b3BwaW5nIGFcXG4tLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYz02Mjk9c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdF9mYWlsZWQoc3RydWN0IHRibmV0ICpuZXQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtNjQyLVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYzo2NDM6c3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbmRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uYy02NDQte1xcbi0tXFxuZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jPTEzNzE9c3RhdGljIGludCB0Ym5ldF9wcm9iZShzdHJ1Y3QgdGJfc2VydmljZSAqc3ZjLCBjb25zdCBzdHJ1Y3QgdGJfc2VydmljZV9pZCAqaWQpXFxuLS1cXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM4NS1cXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2bmV0LVxcdTAwM2Vsb2dpbl93b3JrLCB0Ym5ldF9sb2dpbl93b3JrKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmM6MTM4NjpcXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlY29ubmVjdGVkX3dvcmssIHRibmV0X2Nvbm5lY3RlZF93b3JrKTtcXG5kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmMtMTM4Ny1cXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlZGlzY29ubmVjdF93b3JrLCB0Ym5ldF9kaXNjb25uZWN0X3dvcmspO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NzoxNS42ODY5NDM4MDhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI1ODcyMzQ1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoyNzUzNywiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjI4LjI3NDE4MTYyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNTU0NTIwNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCNF9ORVRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0Ym5ldF9jb25uZWN0ZWRfd29ya1wiLFxuICAgIFwidGJuZXRfY29ubmVjdF9mYWlsZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGluIGBkcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNgIHRvIGFkZCBhIG5ldyBmdW5jdGlvbiBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIHdoaWNoIHJlc2V0cyBgbmV0LVxcdTAwM2Vsb2dpbl9zZW50ID0gZmFsc2VgIHdoZW4gY29ubmVjdGlvbiBmYWlscy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB0aHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlci4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIGlmIFVTQjRfTkVUIGlzIGVuYWJsZWQgYW5kIHRodW5kZXJib2x0IG5ldHdvcmtpbmcgaXMgdXNlZC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gYHRibmV0X2Nvbm5lY3RlZF93b3JrYCBhbmQgYHRibmV0X2Nvbm5lY3RfZmFpbGVkYC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0I0X05FVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRibmV0X2Nvbm5lY3RlZF93b3JrXCIsXG4gICAgXCJ0Ym5ldF9jb25uZWN0X2ZhaWxlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGB0Ym5ldF9jb25uZWN0ZWRfd29ya2AgaW4gYGRyaXZlcnMvbmV0L3RodW5kZXJib2x0L21haW4uY2AgdG8gYWRkIGEgbmV3IGZ1bmN0aW9uIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZGAgd2hpY2ggcmVzZXRzIGBuZXQtXFx1MDAzZWxvZ2luX3NlbnQgPSBmYWxzZWAgd2hlbiBjb25uZWN0aW9uIGZhaWxzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyLiBUaGUgY29kZSBpcyByZWFjaGFibGUgaWYgVVNCNF9ORVQgaXMgZW5hYmxlZCBhbmQgdGh1bmRlcmJvbHQgbmV0d29ya2luZyBpcyB1c2VkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgIGFuZCBgdGJuZXRfY29ubmVjdF9mYWlsZWRgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQwOTo0NzoyOC40MDk3MzU0MTFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjM3OTc3MzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDc6MjguNDEwNTQ1ODgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg0MjM3MTYyNDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI2MDc0NDlkZDI1MjkwYzQxZjE1MzJkMjU1N2FmNjY3OGE2ZDU2MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDA5OjQyOjExIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jIGIvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG5pbmRleCA5ODg5MzczMmJjNmU0Li5iNmFlYzIxNWE4ZTkzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC90aHVuZGVyYm9sdC9tYWluLmNcbkBAIC02MjYsNiArNjI2LDIwIEBAIHN0YXRpYyBpbnQgdGJuZXRfYWxsb2NfdHhfYnVmZmVycyhzdHJ1Y3QgdGJuZXQgKm5ldClcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0Ym5ldF9jb25uZWN0X2ZhaWxlZChzdHJ1Y3QgdGJuZXQgKm5ldClcbit7XG4rXHQvKlxuK1x0ICogTWFyayB0aGUgY29ubmVjdGlvbiBhcyBubyBsb25nZXIgZXN0YWJsaXNoZWQgc28gdGhhdFxuK1x0ICogdGJuZXRfdGVhcl9kb3duKCkgZG9lcyBub3QgcnVuIG92ZXIgdGhlIHVud2luZCB3ZSBqdXN0IGRpZC5cbitcdCAqIE9ubHkgbG9naW5fc2VudCBpcyBjbGVhcmVkOiBsb2dpbl9yZWNlaXZlZCByZWNvcmRzIHRoYXQgdGhlIHBlZXJcbitcdCAqIGhhcyBsb2dnZWQgaW4gd2l0aCB1cyBhbmQgY2FycmllcyB0aGUgdHJhbnNtaXQgcGF0aCBpdCBnYXZlIHVzLFxuK1x0ICogYW5kIG5vdGhpbmcgb24gdGhpcyBzaWRlIGNhbiBtYWtlIHRoZSBwZWVyIHNlbmQgdGhhdCBhZ2Fpbi5cbitcdCAqL1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZuZXQtXHUwMDNlY29ubmVjdGlvbl9sb2NrKTtcbitcdG5ldC1cdTAwM2Vsb2dpbl9zZW50ID0gZmFsc2U7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2bmV0LVx1MDAzZWNvbm5lY3Rpb25fbG9jayk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgdGJuZXQgKm5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCB0eXBlb2YoKm5ldCksIGNvbm5lY3RlZF93b3JrKTtcbkBAIC02NDcsNiArNjYxLDkgQEAgc3RhdGljIHZvaWQgdGJuZXRfY29ubmVjdGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFx0cmV0ID0gdGJfeGRvbWFpbl9hbGxvY19pbl9ob3BpZChuZXQtXHUwMDNleGQsIG5ldC1cdTAwM2VyZW1vdGVfdHJhbnNtaXRfcGF0aCk7XG4gXHRpZiAocmV0ICE9IG5ldC1cdTAwM2VyZW1vdGVfdHJhbnNtaXRfcGF0aCkge1xuIFx0XHRuZXRkZXZfZXJyKG5ldC1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIGFsbG9jYXRlIFJ4IEhvcElEXFxuXCIpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMClcbitcdFx0XHR0Yl94ZG9tYWluX3JlbGVhc2VfaW5faG9waWQobmV0LVx1MDAzZXhkLCByZXQpO1xuK1x0XHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtNjkxLDYgKzcwOCw3IEBAIHN0YXRpYyB2b2lkIHRibmV0X2Nvbm5lY3RlZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcdHRiX3Jpbmdfc3RvcChuZXQtXHUwMDNlcnhfcmluZy5yaW5nKTtcbiBcdHRiX3Jpbmdfc3RvcChuZXQtXHUwMDNldHhfcmluZy5yaW5nKTtcbiBcdHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZChuZXQtXHUwMDNleGQsIG5ldC1cdTAwM2VyZW1vdGVfdHJhbnNtaXRfcGF0aCk7XG4rXHR0Ym5ldF9jb25uZWN0X2ZhaWxlZChuZXQpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCB0Ym5ldF9sb2dpbl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDA5OjQ3OjI4LjQxMDU0NzMzMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDIzNzEyOTI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBUaHVuZGVyYm9sdCBOZXR3b3JrIERyaXZlciBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZHJpdmVycy9uZXQvdGh1bmRlcmJvbHQvbWFpbi5jYCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHRoZSBjb25uZWN0aW9uIHNldHVwIGFuZCB0ZWFyZG93biB3aXRoaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBzZWVtcyBsaWtlIGEgc29saWQgYnVnIGZpeC5cblxuVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgYSBuZXcgZnVuY3Rpb24sIGB0Ym5ldF9jb25uZWN0X2ZhaWxlZChzdHJ1Y3QgdGJuZXQgKm5ldClgLiBJdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGl0IHNldHMgYG5ldC1cdTAwM2Vsb2dpbl9zZW50ID0gZmFsc2VgIHVuZGVyIGEgbXV0ZXguIFRoZSBwdXJwb3NlIGlzIGNydWNpYWwuIEl0J3MgdG8gcHJldmVudCBhIHJhY2UgY29uZGl0aW9uIG9yIGluY29ycmVjdCBzdGF0ZSB0cmFuc2l0aW9uIHdoZXJlIGB0Ym5ldF90ZWFyX2Rvd24oKWAgbWlnaHQgZXhlY3V0ZSBwcmVtYXR1cmVseSwgcG90ZW50aWFsbHkgdW53aW5kaW5nIHJlc291cmNlcyB0aGF0IGFyZSBhbHJlYWR5IGNsZWFuZWQgdXAgb3IgaW4gYW4gaW52YWxpZCBzdGF0ZS4gVGhlIGNvbW1lbnQgbWFrZXMgaXQgY2xlYXIgdGhhdCB3ZSBvbmx5IGNsZWFyIGBsb2dpbl9zZW50YCBiZWNhdXNlIGBsb2dpbl9yZWNlaXZlZGAgZGVhbHMgd2l0aCBhbiBlc3RhYmxpc2hlZCBzdGF0ZSBmcm9tIHRoZSBwZWVyLCB3aGljaCBpcyBpbW11dGFibGUgZnJvbSBvdXIgc2lkZS5cblxuVGhpcyBgdGJuZXRfY29ubmVjdF9mYWlsZWRgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gYHRiX3hkb21haW5fYWxsb2NfaW5faG9waWRgIGZhaWxzIG9yIG90aGVyIGNvbm5lY3Rpb24gc2V0dXAgaXNzdWVzIGFyaXNlIHdpdGhpbiBgdGJuZXRfY29ubmVjdGVkX3dvcmtgLiBUaGUgcGF0Y2ggYWxzbyBhZGRzIGEgY2hlY2sgYW5kIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGluIHRoZSBmYWlsdXJlIHBhdGggb2YgYHRiX3hkb21haW5fYWxsb2NfaW5faG9waWRgIHRvIGF2b2lkIGFueSByZXNvdXJjZSBsZWFrcyBpbiB0aG9zZSBjYXNlcy5cblxuTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgaXMgYWRkcmVzc2luZyBhIHJlc291cmNlIGxlYWsgb3IgYSBjbGFzc2ljIHN0YXRlIG1hY2hpbmUgYnVnIOKAkyBsaWtlbHkgYSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHNvbWUga2luZCBvZiBpbnZhbGlkIHN0YXRlIHRyYW5zaXRpb24uIEkgZG9uJ3Qgc2VlIGFueXRoaW5nIGltbWVkaWF0ZWx5IHRoYXQgc2NyZWFtcyBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5IHZ1bG5lcmFiaWxpdHkuXCIgSSBuZWVkIHRvIGJlIHRob3JvdWdoIHRob3VnaCwgc28gSSdsbCByZXZpZXcgYWdhaW46IFRoZSBjb2RlIGp1c3Qgc2V0cyBhIGJvb2xlYW4gZmxhZyBhbmQgY2FsbHMgYHRiX3hkb21haW5fcmVsZWFzZV9pbl9ob3BpZGAgd2hpY2ggYXJlIHZlcnkgc3RhbmRhcmQgb3BlcmF0aW9ucyBpbiB0aGVzZSBjb250ZXh0cy5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgZml4LCBJJ20gY29uZmlkZW50IHRoYXQgS0FTQU4vTE9DS0RFUC9ldGMuIHdvdWxkIGJlIHdlbGwtc3VpdGVkIHRvIGNhdGNoIGFueSBlcnJvcnMgaGVyZS4gS01TQU4gaXMgZ3JlYXQgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBidXQgdGhpcyBwYXRjaCBkb2Vzbid0IGFwcGVhciB0byBpbnRyb2R1Y2UgYW55IG5ldyBhcmVhcyBmb3IgS01TQU4gdG8gYmUgY29uY2VybmVkIHdpdGguXG5cblRoZXJlZm9yZSwgSSdtIGNvbWZvcnRhYmxlIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgcGF0Y2ggaXMgYSBmb2N1c2VkIHN0YXRlIG1hY2hpbmUgY29ycmVjdGlvbiwgcHJldmVudGluZyBwb3RlbnRpYWwgcmVzb3VyY2UgbWFuYWdlbWVudCBpc3N1ZXMgdGhyb3VnaCBjbGVhcmluZyBvZiBhIGJvb2xlYW4gZmxhZyBvbiBjb25uZWN0aW9uIGZhaWx1cmUsIGFzIHdlbGwgYXMgZml4aW5nIHRoZSByZWxlYXNlIG9mIHJlc291cmNlcyBvbiBIb3BJRCBhbGxvY2F0aW9uIGZhaWx1cmUuIEl0IGFkZHJlc3NlcyByZXNvdXJjZSBsZWFrcyBvciBpbmNvcnJlY3Qgc3RhdGUgdHJhbnNpdGlvbnMuIEl0IGRvZXMgKm5vdCogaW50cm9kdWNlIG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucyBvciBkYXRhIGNvcGllcyB0aGF0IG5lZWQgdG8gYmUgdGVzdGVkIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSwgd2hpY2ggbWVhbnMgdGhhdCB0aGlzIGZpeCBkb2Vzbid0IHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbi4gS0FTQU4gYW5kIG90aGVyIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gdmFsaWRhdGUgdGhlIHBhdGNoJ3MgY29ycmVjdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzODcsIk91dHB1dFRva2VucyI6MTU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMDk6NDg6NTIuNjQ3NjgwODQzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIHN0YXRlIG1hY2hpbmUgaXNzdWUgaW4gdGhlIFRodW5kZXJib2x0IG5ldHdvcmsgZHJpdmVyIGJ5IGNsZWFyaW5nIHRoZSBgbG9naW5fc2VudGAgZmxhZyB3aGVuIHRoZSBjb25uZWN0aW9uIHNldHVwIGZhaWxzLCBwcmV2ZW50aW5nIGB0Ym5ldF90ZWFyX2Rvd24oKWAgZnJvbSBpbmNvcnJlY3RseSB1bndpbmRpbmcgYWxyZWFkeSByZWxlYXNlZCByZXNvdXJjZXMuIEl0IGFsc28gYWRkcyBhIG1pc3NpbmcgcmVsZWFzZSBvZiB0aGUgUnggSG9wSUQgaWYgaXRzIGFsbG9jYXRpb24gcmV0dXJucyBhbiB1bmV4cGVjdGVkIHZhbGlkIElELiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgcmVzb3VyY2UgbGVha3MsIGRvdWJsZSBmcmVlcywgb3IgaW52YWxpZCBzdGF0ZSB0cmFuc2l0aW9ucywgd2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBzdGF0ZSBtYWNoaW5lIGlzc3VlIGluIHRoZSBUaHVuZGVyYm9sdCBuZXR3b3JrIGRyaXZlciBieSBjbGVhcmluZyB0aGUgYGxvZ2luX3NlbnRgIGZsYWcgd2hlbiB0aGUgY29ubmVjdGlvbiBzZXR1cCBmYWlscywgcHJldmVudGluZyBgdGJuZXRfdGVhcl9kb3duKClgIGZyb20gaW5jb3JyZWN0bHkgdW53aW5kaW5nIGFscmVhZHkgcmVsZWFzZWQgcmVzb3VyY2VzLiBJdCBhbHNvIGFkZHMgYSBtaXNzaW5nIHJlbGVhc2Ugb2YgdGhlIFJ4IEhvcElEIGlmIGl0cyBhbGxvY2F0aW9uIHJldHVybnMgYW4gdW5leHBlY3RlZCB2YWxpZCBJRC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIHJlc291cmNlIGxlYWtzLCBkb3VibGUgZnJlZXMsIG9yIGludmFsaWQgc3RhdGUgdHJhbnNpdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgY2F1Z2h0IGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowfh2mx[1] Phase: Succeeded StartedAt: 2026-08-10 09:49:04 +0000 UTC FinishedAt: 2026-08-10 09:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 09:49:04 +0000 UTC FinishedAt: 2026-08-10 09:49:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2] Phase: Succeeded StartedAt: 2026-08-10 09:49:04 +0000 UTC FinishedAt: 2026-08-10 11:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 09:49:04 +0000 UTC FinishedAt: 2026-08-10 11:36:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 09:49:04 +0000 UTC FinishedAt: 2026-08-10 09:49:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 09:49:04 +0000 UTC FinishedAt: 2026-08-10 09:49:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowfh2mx/series-workflowfh2mx-convert-artifact-1731143422/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 09:49:14 +0000 UTC FinishedAt: 2026-08-10 10:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 09:49:14 +0000 UTC FinishedAt: 2026-08-10 10:08:41 +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:*3e6bdf87-4511-4f1a-95b5-19b4338591f1,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-workflowfh2mx/series-workflowfh2mx-convert-artifact-1731143422/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": "86351ef9-42d2-4c96-91e6-91626b713ed7", "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-workflowfh2mx/series-workflowfh2mx-build-action-1000214244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 09:49:14 +0000 UTC FinishedAt: 2026-08-10 10:08:31 +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:*3e6bdf87-4511-4f1a-95b5-19b4338591f1,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-workflowfh2mx/series-workflowfh2mx-convert-artifact-1731143422/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": "86351ef9-42d2-4c96-91e6-91626b713ed7", "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-workflowfh2mx/series-workflowfh2mx-build-action-1000214244/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 10:08:41 +0000 UTC FinishedAt: 2026-08-10 10:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 10:08:41 +0000 UTC FinishedAt: 2026-08-10 10:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 10:08:41 +0000 UTC FinishedAt: 2026-08-10 10:08:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 10:08:41 +0000 UTC FinishedAt: 2026-08-10 10:08:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.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-workflowfh2mx/series-workflowfh2mx-convert-artifact-2135144497/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 10:08:51 +0000 UTC FinishedAt: 2026-08-10 10:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 10:08:51 +0000 UTC FinishedAt: 2026-08-10 10:11:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*86351ef9-42d2-4c96-91e6-91626b713ed7,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-workflowfh2mx/series-workflowfh2mx-build-action-1000214244/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-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 10:11:10 +0000 UTC FinishedAt: 2026-08-10 10:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 10:11:10 +0000 UTC FinishedAt: 2026-08-10 10:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 10:11:10 +0000 UTC FinishedAt: 2026-08-10 10:31:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 10:11:10 +0000 UTC FinishedAt: 2026-08-10 10:31:52 +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:*3e6bdf87-4511-4f1a-95b5-19b4338591f1,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-workflowfh2mx/series-workflowfh2mx-convert-artifact-2135144497/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": "f7eeeec2-b482-41d9-9306-5b3acbe99d81", "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-workflowfh2mx/series-workflowfh2mx-build-action-4270257661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 10:11:10 +0000 UTC FinishedAt: 2026-08-10 10:31:42 +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:*3e6bdf87-4511-4f1a-95b5-19b4338591f1,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-workflowfh2mx/series-workflowfh2mx-convert-artifact-2135144497/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": "f7eeeec2-b482-41d9-9306-5b3acbe99d81", "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-workflowfh2mx/series-workflowfh2mx-build-action-4270257661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 10:31:52 +0000 UTC FinishedAt: 2026-08-10 10:31:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 10:31:52 +0000 UTC FinishedAt: 2026-08-10 10:31:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 10:31:52 +0000 UTC FinishedAt: 2026-08-10 10:33:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 10:31:52 +0000 UTC FinishedAt: 2026-08-10 10:33:44 +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:*f7eeeec2-b482-41d9-9306-5b3acbe99d81,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-workflowfh2mx/series-workflowfh2mx-build-action-4270257661/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-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 10:33:54 +0000 UTC FinishedAt: 2026-08-10 11:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 10:33:54 +0000 UTC FinishedAt: 2026-08-10 11:36:17 +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":["tbnet_connected_work","tbnet_connect_failed"],"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:*86351ef9-42d2-4c96-91e6-91626b713ed7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f7eeeec2-b482-41d9-9306-5b3acbe99d81,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-workflowfh2mx/series-workflowfh2mx-build-action-1000214244/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-workflowfh2mx/series-workflowfh2mx-build-action-4270257661/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 10:33:54 +0000 UTC FinishedAt: 2026-08-10 10:34:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 10:33:54 +0000 UTC FinishedAt: 2026-08-10 10:33:59 +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":["tbnet_connected_work","tbnet_connect_failed"],"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-workflowfh2mx/series-workflowfh2mx-convert-artifact-2898391270/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 10:33:54 +0000 UTC FinishedAt: 2026-08-10 10:33:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 10:33:54 +0000 UTC FinishedAt: 2026-08-10 10:33:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 10:33:55 +0000 UTC FinishedAt: 2026-08-10 10:33:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 10:34:05 +0000 UTC FinishedAt: 2026-08-10 11:36:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfh2mx[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tbnet_connected_work","tbnet_connect_failed"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"db2ddb87143519e20a95aa36c60b36107b736a58","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB4_NET"],"series_id":"a6b3b063-29db-42a8-bd26-e858657f04c7","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 10:34:05 +0000 UTC FinishedAt: 2026-08-10 11:36:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*86351ef9-42d2-4c96-91e6-91626b713ed7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f7eeeec2-b482-41d9-9306-5b3acbe99d81,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-workflowfh2mx/series-workflowfh2mx-build-action-1000214244/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-workflowfh2mx/series-workflowfh2mx-build-action-4270257661/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-workflowfh2mx/series-workflowfh2mx-convert-artifact-2898391270/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,}