Name: series-workflowmhjgk Phase: Succeeded StartedAt: 2026-09-02 13:05:34 +0000 UTC FinishedAt: 2026-09-02 16:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[0] Phase: Succeeded StartedAt: 2026-09-02 13:05:34 +0000 UTC FinishedAt: 2026-09-02 13:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 13:05:34 +0000 UTC FinishedAt: 2026-09-02 13:14:08 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "a7e0f517-930a-41c6-b05d-2b21a2ae047d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__swap_cache_del_folio", "swap_cache_del_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVyIGNvcGllcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYm9vbGVhbiBmbGFnIGBzd2Fwb3V0YCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBjb25zdGFudCBsaXRlcmFscyAoYHRydWVgL2BmYWxzZWApLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyB3b3VsZCBpbnZvbHZlIGZvbGlvIGxpZmVjeWNsZSBzdGF0ZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1jZyBhY2NvdW50aW5nLCBvciBsb2NraW5nLCB3aGljaCBhcmUgdHJhY2tlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYXNzZXJ0aW9ucywgTE9DS0RFUCwgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGxvZ2ljIGluIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gYW5kIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCByZXBvc2l0aW9uaW5nIHRoZSBjZ3JvdXAgdjEgbWVtc3cgY2hhcmdlIHRyYW5zZmVyIChfX21lbWNnMV9zd2Fwb3V0KSBiZWZvcmUgcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdG8gYXZvaWQgcmVmZXJlbmNpbmcgY2xlYXJlZCBzd2FwIG1ldGFkYXRhLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdHMgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwcGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcwZmZmMGY0YTYyZmExYjQwMTFiYjZhYzUzY2JmNmE3NjA3MTNkZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDEzOjA3OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgJiM0MzszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4mIzQzO1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgJiM0Mzs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4mIzQzO1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjk5OTg1MjA4YjUyOWIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiw2ICYjNDM7MzA2LDcgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXG4gICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxuQEAgLTMxNCwxMyAmIzQzOzMxNSwxNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cbiAgKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbiYjNDM7XHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuLVx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3dhcG91dClcbiYjNDM7XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiYjNDM7XG4mIzQzO1x0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzksNyAmIzQzOzM0NCw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpO1xuJiM0MztcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG4gXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGI0YzliOGYzZGZlOTkuLmFmN2RmYTkwNWNiNTAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC03MzUsOCAmIzQzOzczNSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuLVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4tXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuJiM0MztcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG4gXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgc3dhcCBjYWNoZSBkZWxldGlvbiBsb2dpYyBpbiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIGFuZCBzd2FwX2NhY2hlX2RlbF9mb2xpbywgcmVwb3NpdGlvbmluZyB0aGUgY2dyb3VwIHYxIG1lbXN3IGNoYXJnZSB0cmFuc2ZlciAoX19tZW1jZzFfc3dhcG91dCkgYmVmb3JlIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIHRvIGF2b2lkIHJlZmVyZW5jaW5nIGNsZWFyZWQgc3dhcCBtZXRhZGF0YS4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RzIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcHBpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGZmZjBmNGE2MmZhMWI0MDExYmI2YWM1M2NiZjZhNzYwNzEzZGU3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxMzowNzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCAwYjVkNTA3NzM5YmNiLi5iM2I1NGMyODkyOWExIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC0zMTksNyAmIzQzOzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7CiYjNDM7CQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csCiYjNDM7CQkJICAgIGJvb2wgc3dhcG91dCk7CiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkJc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTsKIApAQCAtNDUyLDcgJiM0Mzs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdykKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csCiYjNDM7CQlib29sIHN3YXBvdXQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCAzMDU4NzdlMWY0ZDdiLi45OTk4NTIwOGI1MjliIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0zMDYsNiAmIzQzOzMwNiw3IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIEBmb2xpbzogVGhlIGZvbGlvLgogICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by4KICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuCiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby4KICAqCiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuCiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LgpAQCAtMzE0LDEzICYjNDM7MzE1LDE3IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuCiAgKi8KIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQkJICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dCkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCi0JX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogCW5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7CiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7CiYjNDM7CiYjNDM7CWlmIChzd2Fwb3V0KQomIzQzOwkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwomIzQzOwomIzQzOwlfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7CiB9CiAKIC8qKgpAQCAtMzM5LDcgJiM0MzszNDQsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKIAogCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7Ci0JX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTsKJiM0MzsJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKIAlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiNGM5YjhmM2RmZTk5Li5hZjdkZmE5MDVjYjUwIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzM1LDggJiM0Mzs3MzUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIAkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiAJCQlzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpOwotCQlfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7Ci0JCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7CiAJCXN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTsKIAl9IGVsc2UgewogCQl2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBkaWZmcywgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU3dhcCBQYXRjaCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHRoaW5nLiYjMzQ7IEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoYXQgdHJpbyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpbXBhY3Qgb24gaG93IHdlIGhhbmRsZSBzd2FwcGluZyBhbmQgcGFnZSByZWNsYW1hdGlvbiwgd2hpY2ggaXMsIG9idmlvdXNseSwgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHNwZWNpZmljIGZpbGVzIGFyZSBiZWluZyB0b3VjaGVkIGFuZCB3aGF0JiMzOTtzIGJlaW5nIGFsdGVyZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGVtLgoKU3BlY2lmaWNhbGx5LCBJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGBtbS92bXNjYW4uY2AgZmlyc3QsIGJlY2F1c2UgYG1tL3N3YXAuaGAgaXMgbGlrZWx5IHJlbGF0ZWQsIGJ1dCB0aGUgcmVhbCBsb2dpYyBpcyBpbiB0aGUgb3RoZXIgdHdvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0fVxuIDMwMTpcdH1cbiAzMDI6XHRcbiAzMDM6XHQvKipcbiAzMDQ6XHQgKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG4gMzA1Olx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbiAzMDY6XHQgKiBAZm9saW86IFRoZSBmb2xpby5cbiAzMDc6XHQgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuIDMwODpcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzA5Olx0ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiAzMTA6XHQgKlxuIDMxMTpcdCAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAzMTI6XHQgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxuIDMxMzpcdCAqXG4gMzE0Olx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlXG4gMzE1Olx0ICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cbiAzMTY6XHQgKi9cbiAzMTc6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMTg6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMxOTpcdHtcbiAzMjA6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIxOlx0XG4gMzIyOlx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyMzpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI0Olx0XG4gMzI1Olx0XHRpZiAoc3dhcG91dClcbiAzMjY6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyNzpcdFxuIDMyODpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMyOTpcdH1cbiAzMzA6XHRcbiAzMzE6XHQvKipcbiAzMzI6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzMzpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNDpcdCAqXG4gMzM1Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM2Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzNzpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzM4Olx0ICpcbiAzMzk6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQwOlx0ICovXG4gMzQxOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0MjpcdHtcbiAzNDM6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ0Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0NzpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzQ4Olx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNDk6XHRcbiAzNTA6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUxOlx0fVxuIDM1MjpcdFxuIDM1MzpcdC8qKlxuIDM1NDpcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM1NTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzU2Olx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cbiAzNTc6XHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxuIDM1ODpcdCAqXG4gMzU5Olx0ICogUmVwbGFjZSBhbiBleGlzdGluZyBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSB3aXRoIGEgbmV3IGZvbGlvLiBUaGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvcmUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbWVtb3J5IGlzc3VlLCBhbmQgSSBzdXNwZWN0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gaG93IG1hcHBpbmdzIGFyZSBoYW5kbGVkIGR1cmluZyBzY2FubmluZyBpbiB0aGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIGZ1bmN0aW9uOiBgX19yZW1vdmVfbWFwcGluZ2AuIEkga25vdyB0aGlzIGlzIGxvY2F0ZWQgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgdGhlIGtlcm5lbCYjMzk7cyB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB3aGVyZSBtYXBwaW5ncyBhcmUgYWN0dWFsbHkgdW5tYXBwZWQgZnJvbSBhIHByb2Nlc3PigJlzIGFkZHJlc3Mgc3BhY2UgZHVyaW5nIHBhZ2UgcmVjbGFpbS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIGluIGBfX3JlbW92ZV9tYXBwaW5nYCBhbmQgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgdG8gc2VlIGhvdyBpdCBvcGVyYXRlcy4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cywgYW5kIHdoZXJlIGFuZCBob3cgdGhlIG1hcHBpbmcgcmVtb3ZhbCBpcyBoYW5kbGVkIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaXNzdWUuIEkgd2lsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IHJhY2UgY29uZGl0aW9ucywgbG9ja2luZyBpc3N1ZXMsIG9yIHN1YnRsZSBsb2dpYyBlcnJvcnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdCAqXG4gNzIxOlx0XHQgKiBOb3RlIHRoYXQgaWYgdGhlIGRpcnR5IGZsYWcgaXMgYWx3YXlzIHNldCB2aWEgZm9saW9fbWFya19kaXJ0eSxcbiA3MjI6XHRcdCAqIGFuZCB0aHVzIHVuZGVyIHRoZSBpX3BhZ2VzIGxvY2ssIHRoZW4gdGhpcyBvcmRlcmluZyBpcyBub3QgcmVxdWlyZWQuXG4gNzIzOlx0XHQgKi9cbiA3MjQ6XHRcdHJlZmNvdW50ID0gMSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gNzI1Olx0XHRpZiAoIWZvbGlvX3JlZl9mcmVlemUoZm9saW8sIHJlZmNvdW50KSlcbiA3MjY6XHRcdFx0Z290byBjYW5ub3RfZnJlZTtcbiA3Mjc6XHRcdC8qIG5vdGU6IGF0b21pY19jbXB4Y2hnIGluIGZvbGlvX3JlZl9mcmVlemUgcHJvdmlkZXMgdGhlIHNtcF9ybWIgKi9cbiA3Mjg6XHRcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpIHtcbiA3Mjk6XHRcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCByZWZjb3VudCk7XG4gNzMwOlx0XHRcdGdvdG8gY2Fubm90X2ZyZWU7XG4gNzMxOlx0XHR9XG4gNzMyOlx0XG4gNzMzOlx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4gNzM0Olx0XHRcdHN3cF9lbnRyeV90IHN3YXAgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIDczNTpcdFxuIDczNjpcdFx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxuIDczNzpcdFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gNzM4Olx0XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xuIDczOTpcdFx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4gNzQwOlx0XHR9IGVsc2Uge1xuIDc0MTpcdFx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuIDc0MjpcdFxuIDc0MzpcdFx0XHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VmcmVlX2ZvbGlvO1xuIDc0NDpcdFx0XHQvKlxuIDc0NTpcdFx0XHQgKiBSZW1lbWJlciBhIHNoYWRvdyBlbnRyeSBmb3IgcmVjbGFpbWVkIGZpbGUgY2FjaGUgaW5cbiA3NDY6XHRcdFx0ICogb3JkZXIgdG8gZGV0ZWN0IHJlZmF1bHRzLCB0aHVzIHRocmFzaGluZywgbGF0ZXIgb24uXG4gNzQ3Olx0XHRcdCAqXG4gNzQ4Olx0XHRcdCAqIEJ1dCBkb24mIzM5O3Qgc3RvcmUgc2hhZG93cyBpbiBhbiBhZGRyZXNzIHNwYWNlIHRoYXQgaXNcbiA3NDk6XHRcdFx0ICogYWxyZWFkeSBleGl0aW5nLiAgVGhpcyBpcyBub3QganVzdCBhbiBvcHRpbWl6YXRpb24sXG4gNzUwOlx0XHRcdCAqIGlub2RlIHJlY2xhaW0gbmVlZHMgdG8gZW1wdHkgb3V0IHRoZSByYWRpeCB0cmVlIG9yXG4gNzUxOlx0XHRcdCAqIHRoZSBub2RlcyBhcmUgbG9zdC4gIERvbiYjMzk7dCBwbGFudCBzaGFkb3dzIGJlaGluZCBpdHNcbiA3NTI6XHRcdFx0ICogYmFjay5cbiA3NTM6XHRcdFx0ICpcbiA3NTQ6XHRcdFx0ICogV2UgYWxzbyBkb24mIzM5O3Qgc3RvcmUgc2hhZG93cyBmb3IgREFYIG1hcHBpbmdzIGJlY2F1c2UgdGhlXG4gNzU1Olx0XHRcdCAqIG9ubHkgcGFnZSBjYWNoZSBmb2xpb3MgZm91bmQgaW4gdGhlc2UgYXJlIHplcm8gcGFnZXNcbiA3NTY6XHRcdFx0ICogY292ZXJpbmcgaG9sZXMsIGFuZCBiZWNhdXNlIHdlIGRvbiYjMzk7dCB3YW50IHRvIG1peCBEQVhcbiA3NTc6XHRcdFx0ICogZXhjZXB0aW9uYWwgZW50cmllcyBhbmQgc2hhZG93IGV4Y2VwdGlvbmFsIGVudHJpZXMgaW4gdGhlXG4gNzU4Olx0XHRcdCAqIHNhbWUgYWRkcmVzc19zcGFjZS5cbiA3NTk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGZ1bmN0aW9uLiBTbywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIHNlZSB3aGVyZSBlbHNlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IGNvbnRleHRzIEkgbmVlZCB0byBjb25zaWRlci4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBvdmVyYWxsIGltcGFjdCBhbmQgd2h5IGl0IG1pZ2h0IGJlIHByb2JsZW1hdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjAtXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIyLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXAuaD00NTE9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcC5oLTQ1NC1cbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NTYtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcbm1tL3N3YXBfc3RhdGUuYzozMDQ6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMTYtICovXG5tbS9zd2FwX3N0YXRlLmM6MzE3OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcF9zdGF0ZS5jLTMxOC1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMzQtICpcbm1tL3N3YXBfc3RhdGUuYzozMzU6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzQxPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzQ2LVx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbm1tL3N3YXBfc3RhdGUuYzozNDc6XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MTgtXHRcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxubW0vc3dhcGZpbGUuYzoxNjE5Olx0XHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXG5tbS9zd2FwZmlsZS5jLTE2MjAtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTY4Mj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzM3LVx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG5tbS92bXNjYW4uYzo3Mzg6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xubW0vdm1zY2FuLmMtNzM5LVx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBSZWxvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0YCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBleGFjdGx5ICppcyogYF9fbWVtY2cxX3N3YXBvdXRgLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgKndoeSogd2FzIGl0IGRlZW1lZCBuZWNlc3NhcnkgdG8gbW92ZSBpdCBpbnRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYD8gVGhpcyBoYXMgdG8gaGF2ZSBzb21lIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU29tZXRoaW5nIGNoYW5nZWQsIGFuZCBJIG5lZWQgdG8gZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhcmNoaXRlY3R1cmFsIHNoaWZ0LiBGaXJzdCwgSSB3aWxsIGxvb2sgZm9yIGhvdyBgX19tZW1jZzFfc3dhcG91dGAgaXMgZGVmaW5lZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTE9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NTk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2My1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjQ6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjUtXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTQ5PXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTY4Olx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2OS1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE3PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjUtXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjY6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ2FjaGUgRGVsZXRpb24gYW5kIE1lbW9yeSBDb250cm9sIEdyb3VwIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIG9yZGVyaW5nLCBsb2NraW5nLCBhbmQgYmVoYXZpb3IgY2hhbmdlIGlzIHBsYXlpbmcgb3V0LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpZyBpbnRvIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCBhbmQgdGhlbiBgX19tZW1jZzFfc3dhcG91dGAuIEkgd2FudCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgdGhlIHNwZWNpZmljIG9yZGVyIGluIHdoaWNoIHRoaW5ncyBhcmUgaGFwcGVuaW5nLiBUbyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIHJldmVhbCBob3cgdGhlIHN3YXAgY2FjaGUgaW50ZXJhY3RzIHdpdGggdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgc3dhcG91dCBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyB0byBpZGVudGlmeSBleGFjdGx5IHdoZXJlIHRoZSBhbHRlcmF0aW9uIGluIGJlaGF2aW9yIGhhcyBzdXJmYWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiAyNTE6XHRcbiAyNTI6XHRcdF9fc3dhcF9jYWNoZV9kb19hZGRfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSk7XG4gMjUzOlx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XG4gMjU0Olx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIDI1NTpcdH1cbiAyNTY6XHRcbiAyNTc6XHRzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gMjU4Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIDI1OTpcdFx0XHRcdFx0ICAgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbiAyNjA6XHR7XG4gMjYxOlx0XHR1bnNpZ25lZCBsb25nIG9sZF90YjtcbiAyNjI6XHRcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiAyNjM6XHRcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4gMjY0Olx0XHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XG4gMjY1Olx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIDI2NjpcdFxuIDI2NzpcdFx0Vk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7XG4gMjY4Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIDI2OTpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbiAyNzA6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiAyNzE6XHRcbiAyNzI6XHRcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIDI3MzpcdFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIDI3NDpcdFx0Y2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7XG4gMjc1Olx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyNzY6XHRcdGRvIHtcbiAyNzc6XHRcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiAyNzg6XHRcdFx0V0FSTl9PTl9PTkNFKCFzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fFxuIDI3OTpcdFx0XHRcdCAgICAgc3dwX3RiX3RvX2ZvbGlvKG9sZF90YikgIT0gZm9saW8pO1xuIDI4MDpcdFx0XHRpZiAoX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpXG4gMjgxOlx0XHRcdFx0Zm9saW9fc3dhcHBlZCA9IHRydWU7XG4gMjgyOlx0XHRcdGVsc2VcbiAyODM6XHRcdFx0XHRuZWVkX2ZyZWUgPSB0cnVlO1xuIDI4NDpcdFx0XHQvKiBJZiBzaGFkb3cgaXMgTlVMTCwgd2Ugc2V0IGFuIGVtcHR5IHNoYWRvdy4gKi9cbiAyODU6XHRcdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBzaGFkb3dfdG9fc3dwX3RiKHNoYWRvdyxcbiAyODY6XHRcdFx0XHRcdCBfX3N3cF90Yl9nZXRfZmxhZ3Mob2xkX3RiKSkpO1xuIDI4NzpcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAyODg6XHRcbiAyODk6XHRcdGZvbGlvLVx1MDAzZXN3YXAudmFsID0gMDtcbiAyOTA6XHRcdGZvbGlvX2NsZWFyX3N3YXBjYWNoZShmb2xpbyk7XG4gMjkxOlx0XG4gMjkyOlx0XHRpZiAoIWZvbGlvX3N3YXBwZWQpIHtcbiAyOTM6XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcbiAyOTQ6XHRcdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XG4gMjk1Olx0XHRcdGNpX29mZiA9IGNpX3N0YXJ0O1xuIDI5NjpcdFx0XHRkbyB7XG4gMjk3Olx0XHRcdFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXG4gMjk4Olx0XHRcdFx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xuIDI5OTpcdFx0XHR9IHdoaWxlICgmIzQzOyYjNDM7Y2lfb2ZmIFx1MDAzYyBjaV9lbmQpO1xuIDMwMDpcdFx0fVxuIDMwMTpcdH1cbiAzMDI6XHRcbiAzMDM6XHQvKipcbiAzMDQ6XHQgKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG4gMzA1Olx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbiAzMDY6XHQgKiBAZm9saW86IFRoZSBmb2xpby5cbiAzMDc6XHQgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuIDMwODpcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzA5Olx0ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIC0gdjEqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEga2V5IHBhcnQgb2YgbWVtb3J5IGNvbnRyb2wsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHN3YXBwaW5nLiBSaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgbW0vbWVtY29udHJvbC12MS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaXMgbGlrZWx5IGhhcHBlbmluZy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgbWVtb3J5IGNncm91cHMgYW5kIGhvdyBpdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZSBzd2FwLW91dCBiZWhhdmlvci4gSSYjMzk7bSBndWVzc2luZyB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgdGhyZXNob2xkIG9yIGFsZ29yaXRobSBhdCBwbGF5IHRoYXQmIzM5O3MgcHVzaGluZyBtZW1vcnkgcGFnZXMgdG8gc3dhcCB3aGVuIGEgY2dyb3VwIGhpdHMgYSBjZXJ0YWluIGxpbWl0IG9yIGhhcyBvdGhlciBtZW1vcnkgcHJlc3N1cmUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1NTpcdH1cbiAyNTY6XHRcbiAyNTc6XHQjaWZkZWYgQ09ORklHX1NXQVBcbiAyNTg6XHQvKipcbiAyNTk6XHQgKiBfX21lbWNnMV9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcFxuIDI2MDpcdCAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4gMjYxOlx0ICogQGNpOiB0aGUgbG9ja2VkIHN3YXAgY2x1c3RlciBob2xkaW5nIHRoZSBzd2FwIGVudHJpZXNcbiAyNjI6XHQgKlxuIDI2MzpcdCAqIFRyYW5zZmVyIHRoZSBtZW1zdyBjaGFyZ2Ugb2YgQGZvbGlvIHRvIHRoZSBzd2FwIGVudHJ5IHN0b3JlZCBpblxuIDI2NDpcdCAqIGZvbGlvLVx1MDAzZXN3YXAuXG4gMjY1Olx0ICpcbiAyNjY6XHQgKiBDb250ZXh0OiBmb2xpbyBtdXN0IGJlIGlzb2xhdGVkLCB1bm1hcHBlZCwgbG9ja2VkIGFuZCBpcyBqdXN0IGFib3V0IHRvXG4gMjY3Olx0ICogYmUgZnJlZWQsIGFuZCBjYWxsZXIgbXVzdCBkaXNhYmxlIElSUXMgYW5kIGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrLlxuIDI2ODpcdCAqL1xuIDI2OTpcdHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIDI3MDpcdHtcbiAyNzE6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7XG4gMjcyOlx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gMjczOlx0XHR1bnNpZ25lZCBpbnQgbnJfZW50cmllcztcbiAyNzQ6XHRcbiAyNzU6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gMjc2Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIDI3NzpcdFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuIDI3ODpcdFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbiAyNzk6XHRcbiAyODA6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gMjgxOlx0XHRcdHJldHVybjtcbiAyODI6XHRcbiAyODM6XHRcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpKVxuIDI4NDpcdFx0XHRyZXR1cm47XG4gMjg1Olx0XG4gMjg2Olx0XHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcbiAyODc6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghb2JqY2csIGZvbGlvKTtcbiAyODg6XHRcdGlmICghb2JqY2cpXG4gMjg5Olx0XHRcdHJldHVybjtcbiAyOTA6XHRcbiAyOTE6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyOTI6XHRcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gMjkzOlx0XHQvKlxuIDI5NDpcdFx0ICogSW4gY2FzZSB0aGUgbWVtY2cgb3duaW5nIHRoZXNlIHBhZ2VzIGhhcyBiZWVuIG9mZmxpbmVkIGFuZCBkb2VzbiYjMzk7dFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDQ2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9saW8gU3dhcCBDYWNoZSBSZW1vdmFsIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjaGFuZ2UgaW4gaG93IHN3YXAgY2FjaGUgZW50cmllcyBhcmUgcmVtb3ZlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIG1lbWNnIGFjY291bnRpbmcuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gaG93IGBfX21lbWNnMV9zd2Fwb3V0YCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8mIzM5O3MgYHN3YXBgIGZpZWxkIGFuZCB0aGUgYHN3YXBjYWNoZWAgc3RhdGUuCgpJbml0aWFsbHksIEkmIzM5O20gbm90aW5nIHRoZSBwcmVzZW5jZSBvZiBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtgIHdpdGhpbiBgX19tZW1jZzFfc3dhcG91dGAsIGhpZ2hsaWdodGluZyB0aGUgaW1wb3J0YW5jZSBvZiB0aGUgYHN3YXBjYWNoZWAgZmxhZyBiZWZvcmUgaW52b2tpbmcgbWVtY2cgc3dhcG91dC4gVGhlIGBmb2xpby0mZ3Q7c3dhcGAgZmllbGQgaXMgY2xlYXJseSB1c2VkIHdpdGhpbiBgX19tZW1jZzFfc3dhcG91dGAsIHNldHRpbmcgdGhlIHN0YWdlIGZvciBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIGlmIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGlzbiYjMzk7dCBjb3JyZWN0LiBJJiMzOTttIHNlZWluZyB0aGF0IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiB0aGUgcmVtb3ZhbCBwcm9jZXNzLCB6ZXJvZXMgb3V0IGBmb2xpby0mZ3Q7c3dhcC52YWxgIGFuZCBjbGVhcnMgdGhlIHN3YXBjYWNoZSBmbGFnLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSAqYWN0dWFsKiByZW1vdmFsIG9mIHRoZSBzd2FwIGNhY2hlIGVudHJ5IG9jY3Vycy4KClByaW9yIHRvIHRoaXMgY2hhbmdlLCB0aGUgY2FsbCBzZXF1ZW5jZSB3YXMgd2VsbC1kZWZpbmVkOiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgY2FsbGVkIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gQWxzbywgSSYjMzk7bSB0cmFjaW5nIGJhY2sgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBicm9hZGVyIFZNIHNjYW5uaW5nIHByb2Nlc3MsIHNlZWluZyB0aGF0IGBfX3JlbW92ZV9tYXBwaW5nYCBjYWxsZWQgYm90aCBgX19tZW1jZzFfc3dhcG91dGAgYW5kIHRoZW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLiBTcGVjaWZpY2FsbHkgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGNhbGxlZCB0aGUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGZ1bmN0aW9uICpmaXJzdCosIHRoZW4gdGhlIHN0YXRpc3RpY2FsIHVwZGF0ZXMuCgpOb3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBgX19tZW1jZzFfc3dhcG91dGAgaXMgKmluc2lkZSogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGJlZm9yZSB0aGUgY29yZSByZW1vdmFsIGZ1bmN0aW9uLCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AuIEFuZCB3aGVuIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgY2FsbGVkIGZyb20gdGhlIGZvbGlvLCB0aGUgYHN3YXBvdXRgIGZsYWcgaXMgZmFsc2UuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIG1vZGlmaWNhdGlvbi4gVGhpcyByYWlzZXMgc29tZSBxdWVzdGlvbnMgYWJvdXQgdGhlIG1lbWNnIGFjY291bnRpbmcgZmxvdyBpbiB0aGUgbmV3IHNldHVwLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBsb2dpYyBpcyBub3cgdXNlZC4gSSYjMzk7bGwgdXNlIGBncmVwYCB0byBsb29rIGZvciBvdGhlciBjYWxsIHNpdGVzIGZvciBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIHRvIHNlZSB3aGF0IGltcGFjdCB0aGUgY2hhbmdlIG9mIGV4ZWN1dGlvbiBoYXMgb24gdGhlIHdob2xlIHN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyB0aHJlYWQtc2FmZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByYWNlIGNvbmRpdGlvbnMgd2l0aCB0aGUgc3dhcCBjYWNoZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xMTI1PXN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTI5LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMTMwOlx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTMxLVxuLS1cbm1tL21lbW9yeS5jPTQ4NTc9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTA4OS1cdFx0aWYgKCFXQVJOX09OX09OQ0UoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpKVxubW0vbWVtb3J5LmM6NTA5MDpcdFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9tZW1vcnkuYy01MDkxLVx0XHRnb3RvIG91dF9ub21hcDtcbi0tXG5tbS9zaG1lbS5jPTE4MDg9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3NobWVtLmMtMTk0MC1cdFx0Lypcbm1tL3NobWVtLmM6MTk0MTpcdFx0ICogVGhlIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYmVsb3cgY291bGQgYmUgbGVmdCBmb3Jcbm1tL3NobWVtLmMtMTk0Mi1cdFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSYjMzk7cyBmb2xpb19mcmVlX3N3YXAoKSB0byBkaXNwb3NlIG9mO1xuLS1cbm1tL3NobWVtLmMtMTk0Ni1cdFx0ICovXG5tbS9zaG1lbS5jOjE5NDc6XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3NobWVtLmMtMTk0OC1cdFx0Z290byByZWRpcnR5O1xuLS1cbm1tL3NobWVtLmM9MjM1MD1zdGF0aWMgdm9pZCBzaG1lbV9zZXRfZm9saW9fc3dhcGluX2Vycm9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0yMzY3LVx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIE5VTEwpO1xubW0vc2htZW0uYzoyMzY4Olx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc2htZW0uYy0yMzY5LVx0Lypcbi0tXG5tbS9zaG1lbS5jPTI0NTU9c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI1OTctXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XG5tbS9zaG1lbS5jOjI1OTg6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zaG1lbS5jLTI1OTktXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbi0tXG5tbS9zd2FwLmg9MzEzPXZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XG5tbS9zd2FwLmg6MzE0OnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmgtMzE1LXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIwLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5tbS9zd2FwLmg6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMi1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbi0tXG5tbS9zd2FwLmg9NDQ2PXN0YXRpYyBpbmxpbmUgdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXAuaC00NTAtXG5tbS9zd2FwLmg6NDUxOnN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vc3dhcC5oLTQ1Mi17XG4tLVxubW0vc3dhcC5oLTQ1NC1cbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NTYtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcbm1tL3N3YXBfc3RhdGUuYzozMDQ6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMTYtICovXG5tbS9zd2FwX3N0YXRlLmM6MzE3OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcF9zdGF0ZS5jLTMxOC1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMzEtLyoqXG5tbS9zd2FwX3N0YXRlLmM6MzMyOiAqIHN3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtMzMzLSAqIEBmb2xpbzogVGhlIGZvbGlvLlxubW0vc3dhcF9zdGF0ZS5jLTMzNC0gKlxubW0vc3dhcF9zdGF0ZS5jOjMzNTogKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcbm1tL3N3YXBfc3RhdGUuYy0zMzYtICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zNDAtICovXG5tbS9zd2FwX3N0YXRlLmM6MzQxOnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3N3YXBfc3RhdGUuYy0zNDIte1xuLS1cbm1tL3N3YXBfc3RhdGUuYy0zNDYtXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xubW0vc3dhcF9zdGF0ZS5jOjM0NzpcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xubW0vc3dhcF9zdGF0ZS5jLTM0OC1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTk4PXN0YXRpYyBpbnQgX190cnlfdG9fcmVjbGFpbV9zd2FwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MS1cbm1tL3N3YXBmaWxlLmM6MjUyOlx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc3dhcGZpbGUuYy0yNTMtXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTU4OD1zdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTYxOC1cdFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXG5tbS9zd2FwZmlsZS5jOjE2MTk6XHRcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cbm1tL3N3YXBmaWxlLmMtMTYyMC1cdFx0ICovXG4tLVxubW0vc3dhcGZpbGUuYz0xNzQwPWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0xNzc4LVx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG5tbS9zd2FwZmlsZS5jOjE3Nzk6XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3N3YXBmaWxlLmMtMTc4MC1cbi0tXG5tbS9zd2FwZmlsZS5jPTIxMDI9Ym9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTIxMDgtXG5tbS9zd2FwZmlsZS5jOjIxMDk6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zd2FwZmlsZS5jLTIxMTAtXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTY4Mj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzM3LVx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG5tbS92bXNjYW4uYzo3Mzg6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xubW0vdm1zY2FuLmMtNzM5LVx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4tLVxubW0venN3YXAuYz05NzQ9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwNDQtXHRpZiAocmV0KSB7XG5tbS96c3dhcC5jOjEwNDU6XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3pzd2FwLmMtMTA0Ni1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgU3dhcCBDYWNoZSBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUgbG93LWxldmVsLCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBsb2dpYyB3aXRoaW4gdGhlIE1NIHN1YnN5c3RlbS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyB0byBmdW5jdGlvbnMgbGlrZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFuZCBgX19yZW1vdmVfbWFwcGluZ2Ag4oCTIGFsbCBjcml0aWNhbCBjb21wb25lbnRzIGludm9sdmVkIGluIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwLW91dCBwcm9jZXNzZXMuCgpUaGUga2V5IHRoaW5nIGlzIHRoZSByZW9yZGVyaW5nIG9mIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgY2FsbC4gQmVmb3JlIHRoaXMsIG9yIHBlcmhhcHMgYSByZWNlbnQgcmVmYWN0b3JpbmcsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCB3YXMgY2xlYXJpbmcgYGZvbGlvLSZndDtzd2FwLnZhbGAgYW5kIGNhbGxpbmcgYGZvbGlvX2NsZWFyX3N3YXBjYWNoZShmb2xpbylgLiBOb3csIGlmIGBfX21lbWNnMV9zd2Fwb3V0YCBjb21lcyAqYWZ0ZXIqIHRob3NlIGNsZWFyIG9wZXJhdGlvbnMsIG9yIGlmIHRoZSBvcmRlcmluZyB3YXMgdGhlIG90aGVyIHdheSBhcm91bmQsIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24gd291bGQgaGl0IGEgc25hZyDigJMgaXQgcmVsaWVzIG9uIGBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbylgIGFuZCBvbiByZWFkaW5nIGBmb2xpby0mZ3Q7c3dhcGAgLSBhbmQgd2Uga25vdyB0aGlzIGNvdWxkIGNhdXNlIGEgZmFpbHVyZSwgc3BlY2lmaWNhbGx5IGEgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AuIEFuZCBvZiBjb3Vyc2UsIHRoZSBvcmRlciBvZiBub2RlIHN0YXRzIGFuZCBscnV2ZWMgc3RhdHMgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIGFkanVzdGVkIGFzIHdlbGwuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgc3dhcCBjYWNoZSBkZWxldGlvbiwgbWVtb3J5IHJlY2xhaW0sIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBtZW1jZy4gR2l2ZW4gaXRzIGxvY2F0aW9uIHdpdGhpbiBNTSwgaXTigJlzIGdvaW5nIHRvIGJlIHRyaWdnZXJlZCBpbiBhbnkgc3RhbmRhcmQgTGludXggZW52aXJvbm1lbnQgZXhwZXJpZW5jaW5nIHN3YXBwaW5nIG9yIG1lbW9yeSBwcmVzc3VyZS4gVGhpcyBtYWtlcyBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgQ09ORklHX1NXQVBgLCBgQ09ORklHX01FTUNHYCwgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLCBhbmQgcGVyaGFwcyBncmVwIGFyb3VuZCBpbiBgbW0vS2NvbmZpZ2Agb3IgYGluaXQvS2NvbmZpZ2AgdG8gYmUgY2VydGFpbi4gR2l2ZW4gdGhpcyBsZXZlbCBvZiBjaGFuZ2UsIGl04oCZcyB3b3J0aCB0aGUgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1DR19WMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI3NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI3NjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNzctXHQvKiBMZWdhY3kgY29uc3VtZXItb3JpZW50ZWQgY291bnRlcnMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zMTAtXHRpbnQgc3dhcHBpbmVzcztcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjMxMTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zMTItXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwNj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkxNS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MTY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkxNy1ib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkzMD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTM1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTkzNjojZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5Mzctc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NTQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU1OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NTYtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU3OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DR19WMSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU4LVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MzU9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzMC0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDMxOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDMyLVx0dW5zaWduZWRcdFx0XHRpbl91c2VyX2ZhdWx0OjE7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjctXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU2ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU2OS1cdHN0cnVjdCBtZW1fY2dyb3VwXHRcdCptZW1jZ19pbl9vb207XG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9MTM9c3RydWN0IHZtcHJlc3N1cmUge1xuLS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTE4LVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6MTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMjAtXHQvKlxuLS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTIyLVx0ICogKG1lbW9yeS5wcmVzc3VyZV9sZXZlbCkuIERyYWluZWQgYnkgQHdvcmsuIHYyIGhhcyBubyBlcXVpdmFsZW50XG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDoyMzpcdCAqIGludGVyZmFjZSwgc28gdGhpcyBzdGF0ZSBpcyBvbWl0dGVkIG9uIENPTkZJR19NRU1DR19WMT1uIGJ1aWxkcy5cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTI0LVx0ICovXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NTU9ZXh0ZXJuIGVudW0gdm1wcmVzc3VyZV9sZXZlbHMgdm1wcmVzc3VyZV9jYWxjX2xldmVsKHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC01Ny1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTU5LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHByaW8pO1xuLS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oPTYzPWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNjUtXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDo2NjovKiB2MSBob29rcyBjYWxsZWQgZnJvbSBtbS92bXByZXNzdXJlLmM7IG5vLW9wcyBiZWxvdyB3aGVuICFNRU1DR19WMS4gKi9cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTY3LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfdjFfaW5pdChzdHJ1Y3Qgdm1wcmVzc3VyZSAqdm1wcik7XG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9Nzc9c3RhdGljIGlubGluZSB2b2lkIHZtcHJlc3N1cmVfdjFfYWNjb3VudF90cmVlKHN0cnVjdCB2bXByZXNzdXJlICp2bXByLFxuLS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTc5LVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJlY2xhaW1lZCkge31cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjgwOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTgxLVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yNzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3NrX3VuZGVyX21lbW9yeV9wcmVzc3VyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDUtXG5pbmNsdWRlL25ldC9zb2NrLmg6MjcwNjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwNy1cdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA4LVx0XHRyZXR1cm4gISFtZW1jZy1cdTAwM2V0Y3BtZW1fcHJlc3N1cmU7XG5pbmNsdWRlL25ldC9zb2NrLmg6MjcwOTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcxMC1cbi0tXG5pbml0L0tjb25maWc9MTEwMT1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5tbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTEyMz12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTExMzAtICogY2dyb3VwIHYxIHVzZXJzcGFjZSB2bXByZXNzdXJlIGludGVyZmFjZSAobWVtb3J5LnByZXNzdXJlX2xldmVsIC9cbm1tL21lbWNvbnRyb2wtdjEuYzoxMTMxOiAqIGNncm91cC5ldmVudF9jb250cm9sKS4gS2VwdCBoZXJlIHNvIHYyLW9ubHkga2VybmVscyAoQ09ORklHX01FTUNHX1YxPW4pXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0yNT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC0yOC0vKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovXG5tbS9tZW1jb250cm9sLXYxLmg6Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC12MS5oLTMwLVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD04Nj1leHRlcm4gc3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdO1xubW0vbWVtY29udHJvbC12MS5oLTg3LVxubW0vbWVtY29udHJvbC12MS5oOjg4OiNlbHNlXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbm1tL21lbWNvbnRyb2wtdjEuaC04OS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTE5LVxubW0vbWVtY29udHJvbC12MS5oOjEyMDojZW5kaWZcdC8qIENPTkZJR19NRU1DR19WMSAqL1xubW0vbWVtY29udHJvbC12MS5oLTEyMS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MjE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjM0LVxubW0vbWVtY29udHJvbC5jOjIzNTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Mi1cbm1tL21lbWNvbnRyb2wuYzo1NzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MDAtXHRQR1BHSU4sXG4tLVxubW0vbWVtY29udHJvbC5jPTgzMj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTg0Ny1cbm1tL21lbWNvbnRyb2wuYzo4NDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxuLS1cbm1tL21lbWNvbnRyb2wuYz05MTY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkyOC1cbm1tL21lbWNvbnRyb2wuYzo5Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXG4tLVxubW0vbWVtY29udHJvbC5jPTExMDQ9Ym9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTExMTEtXG5tbS9tZW1jb250cm9sLmM6MTExMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY5Nj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MDEtXG5tbS9tZW1jb250cm9sLmM6MTcwMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTcwMy11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jPTE3MjI9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc2OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkmIzQzOyYjNDM7KSB7XG5tbS9tZW1jb250cm9sLmM6MTc2OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTc3MC1cdFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XG4tLVxubW0vbWVtY29udHJvbC5jPTE4MjA9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg0MS1cdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XG5tbS9tZW1jb250cm9sLmM6MTg0MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTg0My1cdGVsc2Uge1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MjM1PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjU1LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBcdTAwMjZwYXJlbnQtXHUwMDNlc3dhcCwgZmFsc2UpO1xubW0vbWVtY29udHJvbC5jOjQyNTY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQyNTctXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MjY5LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDI3MDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDI3MS1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgTlVMTCwgZmFsc2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NDM2PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ0NDYtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NDQ0NzojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDQ0OC1cdHBhZ2VfY291bnRlcl9zZXRfbWF4KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFBBR0VfQ09VTlRFUl9NQVgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTc2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE4Ny1cdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcbm1tL21lbWNvbnRyb2wuYzo1MTg4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01MTg5LVx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXG4tLVxubW0vbWVtY29udHJvbC5jPTYxODc9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjE5Mi1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcbm1tL21lbWNvbnRyb2wuYzo2MTkzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MTk0LVx0V0FSTl9PTihjZ3JvdXBfYWRkX2xlZ2FjeV9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcbi0tXG5tbS9zd2FwLmg9ODU9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3N3YXAuaC04Ni17XG5tbS9zd2FwLmg6ODc6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vc3dhcC5oLTg4LVx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYCwgYW5kIGZvY3VzIG9uIGEgZmV3IGtleSBhcmVhcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMsIHBhcnRpY3VsYXJseSB2ZXJzaW9uIDEgKGBDT05GSUdfTUVNQ0dfVjFgKSwgdGhlIGdlbmVyYWwgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKGBDT05GSUdfTUVNQ0dgKSBmZWF0dXJlLCBhbmQgdGhlIHN3YXAgY29uZmlndXJhdGlvbiAoYENPTkZJR19TV0FQYCkgYXJlIGJlaW5nIGRlZmluZWQgYW5kIGludGVycmVsYXRlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIG92ZXJhbGwgbWVtb3J5IGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBjb25maWd1cmVkLCBhbnkgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlbSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZ28gaHVudGluZyBmb3Igc29tZSBLY29uZmlnIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMTA1Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMTA2Olx0XHRkZWZhdWx0IHlcbjExMDc6XHRcbjExMDg6XHRjb25maWcgTUVNQ0dfVjFcbjExMDk6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTExMDpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTExMTpcdFx0ZGVmYXVsdCBuXG4xMTEyOlx0XHRoZWxwXG4xMTEzOlx0XHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxuMTExNDpcdFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xuMTExNTpcdFx0ICB3aGljaCBoYXZlbiYjMzk7dCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcbjExMTY6XHRcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXG4xMTE3Olx0XHQgIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuMTExODpcdFxuMTExOTpcdFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XG4xMTIwOlx0XHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcbjExMjE6XHRcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxuMTEyMjpcdFxuMTEyMzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMTI0Olx0XG4xMTI1Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMjY6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTEyNzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTEyODpcdFx0ZGVmYXVsdCBuXG4xMTI5Olx0XHRoZWxwXG4xMTMwOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTMxOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMzI6XHRcdHBvbGljaWVzLlxuMTEzMzpcdFxuMTEzNDpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEzNTpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEzNjpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTM3Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTM4Olx0XG4xMTM5Olx0XHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzczOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN3YXAgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgYENPTkZJR19TV0FQYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBzZXR0aW5nLCBzbyBpdCYjMzk7cyB0aGUgb2J2aW91cyBmaXJzdCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBmaWd1cmUgb3V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUaGVuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIGltcGFjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1dBUFxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTU4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UgbmVlZCB0byBsb29rIGF0IGhvdyBzd2FwIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCBzYXlzIHRvIHN0YXJ0IHdpdGggYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHByaW1hcnkgb3B0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgYENPTkZJR19TV0FQYCBmZWVscyBsaWtlIGl0IHNob3VsZCByZXNpZGUgd2l0aGluIHRoYXQgYXJlYS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBzd2FwIHNwYWNlLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGZpbGUgd2lsbCByZXZlYWwgbm90IG9ubHkgdGhlIGBDT05GSUdfU1dBUGAgb3B0aW9uIGl0c2VsZiwgYnV0IGFsc28gaXRzIGRlcGVuZGVuY2llcywgYW55IHJlbGV2YW50IGhlbHAgdGV4dCwgYW5kIHBvc3NpYmx5IHJlbGF0ZWQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgc3dhcCBiZWhhdmlvci4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0IGlzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBnZXQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMDpcdFx0Ym9vbFxuICAxMTpcdFxuICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjA2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBLZXJuZWwgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYENPTkZJR19NRU1DR2AuIFRoaXMgbGlrZWx5IG1lYW5zIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFyZSBlbmFibGVkIGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggaXMgdG8gbG9vayBkaXJlY3RseSBhdCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uLiBHaXZlbiB0aGF0IHRoZXNlIHNldHRpbmdzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBpbiBgS2NvbmZpZ2AgZmlsZXMsIGFuZCBjb25zaWRlcmluZyB0aGUga2VybmVsJiMzOTtzIGluaXRpYWxpemF0aW9uIGFzcGVjdHMsIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGhpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgZmlyZSBvZmYgYSBgZ3JlcGAgY29tbWFuZCB0byBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7IOKAkyBzcGVjaWZpY2FsbHksIHVzaW5nIHRoZSB3b3JkIGJvdW5kYXJ5IGBcYmAgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzIHdpdGggc2ltaWxhciBuYW1lcyDigJMgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGlzIHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgdGhlIGBDT05GSUdfTUVNQ0dgIHN5bWJvbCBpcyBkZWZpbmVkLCBhbmQgaWRlYWxseSwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IGl0JiMzOTtzIGRlZmluZWQgKGUuZy4sIGFzIGEgYm9vbCwgdHJpc3RhdGUsIGV0Yy4pIGFuZCB3aGF0IGl0cyBkZWZhdWx0IHNldHRpbmcgbWlnaHQgYmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgaW4gZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgbWVtY2cgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR1xcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NC1cbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODYtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gS2NvbmZpZyBmb3IgTWVtb3J5IENHcm91cHMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGluaXQvS2NvbmZpZ2AuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgaW5pdGlhbCBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmN5IGhhbmRsaW5nIGZvciBgQ09ORklHX01FTUNHYC4gVGhpcyBmaWxlIHVzdWFsbHkgb3V0bGluZXMgdGhlIG1ham9yIGZlYXR1cmUgZmxhZ3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBwcmVzZW50ZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBvciBkZXBlbmRlbnQgb3B0aW9ucyBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDgxOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgyOlx0XG4xMDgzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODQ6XHRcbjEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMTA1Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMTA2Olx0XHRkZWZhdWx0IHlcbjExMDc6XHRcbjExMDg6XHRjb25maWcgTUVNQ0dfVjFcbjExMDk6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYyMgoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA4NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWVtb3J5IENvbnRyb2wgYW5kIFN3YXAgRnVuY3Rpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYENPTkZJR19NRU1DR19WMWAgYW5kIGBDT05GSUdfU1dBUGAuIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhpcyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBJbXBvcnRhbnRseSwgYENPTkZJR19NRU1DR19WMWAgcmVsaWVzIG9uIGBDT05GSUdfTUVNQ0dgLCBhbmQgYENPTkZJR19TV0FQYCBoaW5nZXMgb24gYE1NVWAsIGBCTE9DS2AsIGFuZCB0aGUgYWJzZW5jZSBvZiBgQVJDSF9OT19TV0FQYC4gU28sIGlmIHRoZXNlIGNvcmUgY29uZmlndXJhdGlvbnMgKGBTV0FQYCwgYE1FTUNHYCwgYW5kIGBNRU1DR19WMWApIGFyZSBlbmFibGVkLCB0aGUgY29kZSB3aWxsIHVzZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgbWVtb3J5IGNncm91cCB2ZXJzaW9uIDEgc3dhcG91dCBjaGFyZ2UgYWNjb3VudGluZy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRocmVlOiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgKGJvdGggaW4gYG1tL3N3YXBfc3RhdGUuY2ApLCBhbmQgYF9fcmVtb3ZlX21hcHBpbmdgIChpbiBgbW0vdm1zY2FuLmNgLCBkZWNsYXJlZCBhcyBzdGF0aWMpLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGUgc3ltYm9scy4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBkZWNsYXJlZCBpbiBgbW0vc3dhcC5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4gIGBfX21lbWNnMV9zd2Fwb3V0YCBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFuZCBkZWZpbmVkIGluIGBtbS9tZW1jb250cm9sLXYxLmNgLiBUaGV5IGFyZSBhbGwgbm9uLXN0YXRpYy4KCkFyZSB0aGVzZSBmdW5jdGlvbnMsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgc3VpdGFibGUgZm9yIG15IEZvY3VzU3ltYm9scz8gQWJzb2x1dGVseS4gVGhleSYjMzk7cmUgaW52b2x2ZWQgaW4gc3dhcCBvcGVyYXRpb25zLCBsaWtlIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgc2htZW1fd3JpdGVvdXRgLCBgZm9saW9fYWxsb2Nfc3dhcGAsIGBmb2xpb19mcmVlX3N3YXBgLCBgZG9fc3dhcF9wYWdlYCwgYG1lX3N3YXBjYWNoZV9jbGVhbmAgZXRjLiAgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGNhbGxlZCBieSBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AuCgpMZXQgbWUgY2hlY2sgdGhlIG90aGVyIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guIEluIGBtbS9zd2FwLmhgLCB0aGUgZGVjbGFyYXRpb24gb2YgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG5vdyBpbmNsdWRlcyBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlciwgYW5kIHRoZSBpbmxpbmUgZHVtbXkgdmVyc2lvbiAoaWYgYENPTkZJR19TV0FQYCBpc24mIzM5O3QgZW5hYmxlZCkgaGFzIGJlZW4gdXBkYXRlZC4gVGhlIGRlZmluaXRpb25zIG9mIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhcmUgaW4gYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AgaXMgaW4gYG1tL3Ztc2Nhbi5jYC4KCkxldCYjMzk7cyBzb2xpZGlmeSBteSBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3M6CgpGb2N1c1N5bWJvbHM6IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYAoKRW5hYmxlQ29uZmlnczogYFNXQVBgLCBgTUVNQ0dgLCBgTUVNQ0dfVjFgCgpGaW5hbGx5LCBpcyB0aGlzIHBhdGNoICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs/IFllcywgd2l0aG91dCBhIGRvdWJ0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB3aXRoaW4gdGhlIE1NIHRoYXQgZGVhbHMgd2l0aCBob3cgdGhlIHN3YXAgY2FjaGUgaXMgZGVsZXRlZCwgYW5kIGl0JiMzOTtzIGFsc28gdGllZCB0byBtZW1jZyB2MSBzd2Fwb3V0IGNoYXJnZSBhY2NvdW50aW5nLiBBIGZpbmFsIHJldmlldyBjb25maXJtcyBhbGwgY3JpdGVyaWEgYXJlIG1ldC4gSSBhbSBub3cgY29uZmlkZW50LiBSZWFkeSBmb3IgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHN3YXAgY2FjaGUgZGVsZXRpb24gbG9naWMgaW4gX19zd2FwX2NhY2hlX2RlbF9mb2xpbyBhbmQgc3dhcF9jYWNoZV9kZWxfZm9saW8sIHJlcG9zaXRpb25pbmcgdGhlIGNncm91cCB2MSBtZW1zdyBjaGFyZ2UgdHJhbnNmZXIgKF9fbWVtY2cxX3N3YXBvdXQpIGJlZm9yZSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0byBhdm9pZCByZWZlcmVuY2luZyBjbGVhcmVkIHN3YXAgbWV0YWRhdGEuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0cyBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIHN3YXBwaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGxvZ2ljIGluIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gYW5kIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCByZXBvc2l0aW9uaW5nIHRoZSBjZ3JvdXAgdjEgbWVtc3cgY2hhcmdlIHRyYW5zZmVyIChfX21lbWNnMV9zd2Fwb3V0KSBiZWZvcmUgcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdG8gYXZvaWQgcmVmZXJlbmNpbmcgY2xlYXJlZCBzd2FwIG1ldGFkYXRhLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdHMgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwcGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzd2FwIGNhY2hlIGZvbGlvIGRlbGV0aW9uIGJ5IGludGVncmF0aW5nIGBfX21lbWNnMV9zd2Fwb3V0KClgIGludG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKWAgd2l0aCBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlci4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGJ1ZmZlciBjb3BpZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGJvb2xlYW4gZmxhZyBgc3dhcG91dGAgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgY29uc3RhbnQgbGl0ZXJhbHMgKGB0cnVlYC9gZmFsc2VgKS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgaW52b2x2ZSBmb2xpbyBsaWZlY3ljbGUgc3RhdGUsIHJlZmVyZW5jZSBjb3VudGluZywgbWVtY2cgYWNjb3VudGluZywgb3IgbG9ja2luZywgd2hpY2ggYXJlIHRyYWNrZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnIGFzc2VydGlvbnMsIExPQ0tERVAsIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzBmZmYwZjRhNjJmYTFiNDAxMWJiNmFjNTNjYmY2YTc2MDcxM2RlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTM6MDc6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzE5LDcgJiM0MzszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAotCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpOwomIzQzOwkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJCSAgICBib29sIHN3YXBvdXQpOwogdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJCXN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7CiAKQEAgLTQ1Miw3ICYjNDM7NDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJYm9vbCBzd2Fwb3V0KQogewogfQogCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uOTk5ODUyMDhiNTI5YiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMzA2LDYgJiM0MzszMDYsNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAgKiBAZm9saW86IFRoZSBmb2xpby4KICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uCiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLgomIzQzOyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uCiAgKgogICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLgogICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC4KQEAgLTMxNCwxMyAmIzQzOzMxNSwxNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLgogICovCiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KQomIzQzOwkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAotCV9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTsKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpOwomIzQzOwomIzQzOwlpZiAoc3dhcG91dCkKJiM0MzsJCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKJiM0MzsKJiM0MzsJX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogfQogCiAvKioKQEAgLTMzOSw3ICYjNDM7MzQ0LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tJmd0O3N3YXA7CiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpOwotCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7CiYjNDM7CV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCiAJZm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYjRjOWI4ZjNkZmU5OS4uYWY3ZGZhOTA1Y2I1MCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTczNSw4ICYjNDM7NzM1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKLQkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwotCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKJiM0MzsJCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpOwogCQlzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7CiAJfSBlbHNlIHsKIAkJdm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU3dhcHBpbmcgYW5kIE1lbW9yeSBDZ3JvdXBzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgbm93IHRha2luZyBhIGJvb2xlYW4gcGFyYW1ldGVyLCBgc3dhcG91dGAuIEludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBtb3ZlbWVudCBvZiBgX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO2AgaW5zaWRlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgcmlnaHQgYmVmb3JlIHRoZSBjYWxsIHRvIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdylgLgoKU28sIGluIHRoZSBzdGFuZGFyZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIHBhdGgsIGBzd2Fwb3V0YCBpcyBwYXNzZWQgYXMgYGZhbHNlYC4gTWFrZXMgc2Vuc2UgZm9yIHRoZSAmIzM0O25vcm1hbCYjMzQ7IHVuc3dhcHBpbmcuIEJ1dCwgYHN3YXBvdXRgIGlzIHNldCB0byBgdHJ1ZWAgd2hlbiBjYWxsZWQgZnJvbSBgX19yZW1vdmVfbWFwcGluZ2AgaW4gYG1tL3Ztc2Nhbi5jYC4gQWhhLCB0aGF0JiMzOTtzIHRoZSBrZXkgZGlmZmVyZW5jZS4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGlzIHJlb3JkZXJpbmcgYW5kIGVuY2Fwc3VsYXRpb24gd2l0aGluIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4KClRoZSBjb250ZXh0IGlzIGNyaXRpY2FsIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYF9fbWVtY2cxX3N3YXBvdXRgIGFjdHVhbGx5IGRvZXMgYW5kIGhvdyB0aGlzIGNoYW5nZSBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gSXMgdGhpcyByZWxhdGVkIHRvIGFjY291bnRpbmcgb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVjbGFpbSBzdHJhdGVneSBmb3IgY2dyb3VwLWNvbnRyb2xsZWQgcHJvY2Vzc2VzPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS92bXNjYW4uY2AgYW5kIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCBjb2RlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgbWlnaHQgYmUgYWJvdXQgYWNjb3VudGluZyBzd2FwIHVzYWdlIHBlciBtZW1jZyBkdXJpbmcgYWdncmVzc2l2ZSByZWNsYWltLiBJIHN1c3BlY3QgdGhhdCB0aGlzIGNoYW5nZSBpcyBtYWtpbmcgc3VyZSB0aGUgbWVtY2cgYWNjb3VudGluZyBoYXBwZW5zIGNvcnJlY3RseSwgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTE9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NTk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2My1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjQ6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjUtXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTQ5PXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTY4Olx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2OS1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE3PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjUtXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjY6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBsb2NhdGlvbnM6CgoqKkRpdmluZyBpbnRvIFN3YXBvdXQgYW5kIE1lbW9yeSBDb250cm9sKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtbS9tZW1jb250cm9sLXYxLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24uIEFuZCB3aGlsZSB3ZSYjMzk7cmUgYXQgaXQsIGxldCYjMzk7cyBrZWVwIGBtbS9zd2FwX3N0YXRlLmNgIGluIG1pbmQsIGFzIGl0JiMzOTtzIGJvdW5kIHRvIGhhdmUgcmVsZXZhbnQgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKSBhbmQgaG93IHRoZXkgc3BlY2lmaWNhbGx5IGhhbmRsZSBzd2FwLW91dCBvcGVyYXRpb25zLiBgX19tZW1jZzFfc3dhcG91dGAgc2hvdWxkIGJlIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBpbml0aWF0aW5nIHRoYXQgcHJvY2VzcywgSSYjMzk7bSBleHBlY3RpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgc3RydWN0dXJlZC4gSSYjMzk7bSBpbWFnaW5pbmcgaXQgZGVhbHMgd2l0aCByZWNsYWltaW5nIHBhZ2VzLCBwb3RlbnRpYWxseSBiYXNlZCBvbiB0aGUgY3VycmVudCBwcmVzc3VyZSBhbmQgdGhlIHNldHRpbmdzIGltcG9zZWQgYnkgdGhlIG1lbWNnLiBJJiMzOTttIGFudGljaXBhdGluZyB0byBlbmNvdW50ZXIgYSBsb3Qgb2YgdGhlIHN0YW5kYXJkIHJlY2xhaW0gcHJvY2VzcywgbGlrZWx5IHNvbWUgcGFnZSBzZWxlY3Rpb24gYmFzZWQgb24gTFJVLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIG1lY2hhbmljcyBvZiB3cml0aW5nIHRob3NlIHBhZ2VzIHRvIHN3YXAgc3BhY2UuIEkgc3VzcGVjdCBpdCYjMzk7bGwgYWxzbyBiZSByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgYWNjb3VudGluZyBtZXRyaWNzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBjYXJlZnVsbHkgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwcGluZyBzdGF0ZSBhbmQgdGhlIG92ZXJhbGwgc3dhcCBzeXN0ZW0mIzM5O3MgZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpY2FsbHkgYHN3YXBfc3RhdGUuY2AsIHdoaWNoIG91Z2h0IHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IG9mIHRyYWNraW5nIHN3YXBwZWQgcGFnZXMgYW5kIGF2YWlsYWJsZSBzd2FwIHNwYWNlLiBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIHRoZSBsb2dpYyBvZiBzZWxlY3RpbmcgdmljdGltcywgc2V0dGluZyBzd2FwIGVudHJpZXMsIGFuZCBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGJldHdlZW4gbWVtb3J5IGFuZCBzd2FwIHNwYWNlLiBJJiMzOTttIHJlYWxseSBjdXJpb3VzIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhleSYjMzk7cmUgdXNpbmcgdG8gcHJvdGVjdCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgd29uZGVyaW5nIGFib3V0IGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5IGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyBmcm9tIHZhcmlvdXMgdGhyZWFkcyBhbmQgcHJvY2Vzc2VzLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBib3RoIGZ1bmN0aW9ucywgYXMgc3dhcG91dCBpcyBhbiBpbXBvcnRhbnQgcHJvY2VzcywgYW5kIGEgZmFpbHVyZSBjb3VsZCBzZXJpb3VzbHkgaW1wYWN0IHN5c3RlbSBwZXJmb3JtYW5jZSBvciBldmVuIGNhdXNlIGNyYXNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTU6XHR9XG4gMjU2Olx0XG4gMjU3Olx0I2lmZGVmIENPTkZJR19TV0FQXG4gMjU4Olx0LyoqXG4gMjU5Olx0ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcbiAyNjA6XHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxuIDI2MTpcdCAqIEBjaTogdGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIgaG9sZGluZyB0aGUgc3dhcCBlbnRyaWVzXG4gMjYyOlx0ICpcbiAyNjM6XHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cbiAyNjQ6XHQgKiBmb2xpby1cdTAwM2Vzd2FwLlxuIDI2NTpcdCAqXG4gMjY2Olx0ICogQ29udGV4dDogZm9saW8gbXVzdCBiZSBpc29sYXRlZCwgdW5tYXBwZWQsIGxvY2tlZCBhbmQgaXMganVzdCBhYm91dCB0b1xuIDI2NzpcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cbiAyNjg6XHQgKi9cbiAyNjk6XHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiAyNzA6XHR7XG4gMjcxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xuIDI3MjpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIDI3MzpcdFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gMjc0Olx0XG4gMjc1Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIDI3NjpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiAyNzc6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiAyNzg6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gMjc5Olx0XG4gMjgwOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDI4MTpcdFx0XHRyZXR1cm47XG4gMjgyOlx0XG4gMjgzOlx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSlcbiAyODQ6XHRcdFx0cmV0dXJuO1xuIDI4NTpcdFxuIDI4NjpcdFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XG4gMjg3Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XG4gMjg4Olx0XHRpZiAoIW9iamNnKVxuIDI4OTpcdFx0XHRyZXR1cm47XG4gMjkwOlx0XG4gMjkxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMjkyOlx0XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIDI5MzpcdFx0LypcbiAyOTQ6XHRcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24mIzM5O3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZSBzZWN0aW9uLCByZWZsZWN0aW5nIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gU3dhcCBDYWNoZSBEZWxpbWluYXRpb24qKgoKUmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgc3dhcCBjYWNoZSBlbnRyaWVzIGFyZSByZW1vdmVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhpcyBhcmVhLCBidXQgbGV0JiMzOTtzIHJlZnJlc2ggYW5kIHNvbGlkaWZ5IHRoZSB1bmRlcnN0YW5kaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGFzIHdlbGwuIFdlIGtub3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNyaXRpY2FsIGZvciBzd2FwLW91dCBhbmQgcmVjbGFpbSwgc28gSSBuZWVkIHRvIGtub3cgaG93IGl0IGlzIGNvcnJlY3RseSBoYW5kbGVkLiBJ4oCZbGwgc3RhcnQgYnkgcGlucG9pbnRpbmcgdGhvc2UgZnVuY3Rpb25zIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBiZWdpbiB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBmb2xpbyBpcyB1bmxpbmtlZCwgaG93IG1ldGFkYXRhIGlzIHVwZGF0ZWQsIGFuZCB3aGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktQ1BVIGVudmlyb25tZW50LiBJIGtub3cgdGhhdCBmb2xpbyBkZWFsbG9jYXRpb24gY2FuIGJlIGNvbXBsZXggYmVjYXVzZSBvZiBjb25jdXJyZW50IGFjY2VzcyBhbmQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zLiBBbHNvLCBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZyBvciBlZGdlIGNhc2VzIHdpdGhpbiB0aGUgZnVuY3Rpb25zLCBsb29raW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMuIFdlJiMzOTtyZSBkaXNjdXNzaW5nIGZpbGUgYmFja2luZyBhbmQgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCByaWdodD8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBuYWlsIGRvd24gYXMgcGFydCBvZiB0aGUgbWVudGFsIG1vZGVsIGluIHRoZSBrZXJuZWwgY29kZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSB3b3JrIHRvZ2V0aGVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0XHRmb2xpb19jbGVhcl9zd2FwY2FjaGUoZm9saW8pO1xuIDI5MTpcdFxuIDI5MjpcdFx0aWYgKCFmb2xpb19zd2FwcGVkKSB7XG4gMjkzOlx0XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX3N0YXJ0LCBucl9wYWdlcyk7XG4gMjk0Olx0XHR9IGVsc2UgaWYgKG5lZWRfZnJlZSkge1xuIDI5NTpcdFx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyOTY6XHRcdFx0ZG8ge1xuIDI5NzpcdFx0XHRcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxuIDI5ODpcdFx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbiAyOTk6XHRcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICovXG4gMzE3Olx0dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gMzE4Olx0XHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbiAzMTk6XHR7XG4gMzIwOlx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIDMyMTpcdFxuIDMyMjpcdFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbiAzMjM6XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xuIDMyNDpcdFxuIDMyNTpcdFx0aWYgKHN3YXBvdXQpXG4gMzI2Olx0XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiAzMjc6XHRcbiAzMjg6XHRcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiAzMjk6XHR9XG4gMzMwOlx0XG4gMzMxOlx0LyoqXG4gMzMyOlx0ICogc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cbiAzMzM6XHQgKiBAZm9saW86IFRoZSBmb2xpby5cbiAzMzQ6XHQgKlxuIDMzNTpcdCAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxuIDMzNjpcdCAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcbiAzMzc6XHQgKiBlcXVhbCB0byB6ZXJvLCBvciBpdCBtYXkgY2F1c2UgZGF0YSBsb3NzLlxuIDMzODpcdCAqXG4gMzM5Olx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM0MDpcdCAqL1xuIDM0MTpcdHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAzNDI6XHR7XG4gMzQzOlx0XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuIDM0NDpcdFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIDM0NTpcdFxuIDM0NjpcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbiAzNDc6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xuIDM0ODpcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gMzQ5Olx0XG4gMzUwOlx0XHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIDM1MTpcdH1cbiAzNTI6XHRcbiAzNTM6XHQvKipcbiAzNTQ6XHQgKiBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyAtIFJlcGxhY2UgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYG1tL3Ztc2Nhbi5jYCBSYWJiaXQgSG9sZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgc29tZXRoaW5nIEkgb2Z0ZW4gZG8gd2hlbiB0cmFja2luZyBkb3duIHRoZXNlIHNvcnRzIG9mIHByb2JsZW1zLCBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGFjdGlvbnMuIEkgd2FudCB0byBjaGVjayBvdXQgYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBhcmVhIGFyb3VuZCBgX19yZW1vdmVfbWFwcGluZ2AuIFRoYXQgZnVuY3Rpb24gaXMgYSBrZXkgcGxheWVyLCBhbmQgdHlwaWNhbGx5IHdoZXJlIHlvdSBzZWUgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMgbWFuaWZlc3QuIEdvaW5nIHRoZXJlIGZpcnN0IHdpbGwgaGVscCBtZSBxdWlja2x5IHplcm8gaW4gb24gdGhlIGFjdGlvbnMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjU6XHRcdGlmICghZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgcmVmY291bnQpKVxuIDcyNjpcdFx0XHRnb3RvIGNhbm5vdF9mcmVlO1xuIDcyNzpcdFx0Lyogbm90ZTogYXRvbWljX2NtcHhjaGcgaW4gZm9saW9fcmVmX2ZyZWV6ZSBwcm92aWRlcyB0aGUgc21wX3JtYiAqL1xuIDcyODpcdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSkge1xuIDcyOTpcdFx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIHJlZmNvdW50KTtcbiA3MzA6XHRcdFx0Z290byBjYW5ub3RfZnJlZTtcbiA3MzE6XHRcdH1cbiA3MzI6XHRcbiA3MzM6XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbiA3MzQ6XHRcdFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gNzM1Olx0XG4gNzM2Olx0XHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4gNzM3Olx0XHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbiA3Mzg6XHRcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG4gNzM5Olx0XHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiA3NDA6XHRcdH0gZWxzZSB7XG4gNzQxOlx0XHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4gNzQyOlx0XG4gNzQzOlx0XHRcdGZyZWVfZm9saW8gPSBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWZyZWVfZm9saW87XG4gNzQ0Olx0XHRcdC8qXG4gNzQ1Olx0XHRcdCAqIFJlbWVtYmVyIGEgc2hhZG93IGVudHJ5IGZvciByZWNsYWltZWQgZmlsZSBjYWNoZSBpblxuIDc0NjpcdFx0XHQgKiBvcmRlciB0byBkZXRlY3QgcmVmYXVsdHMsIHRodXMgdGhyYXNoaW5nLCBsYXRlciBvbi5cbiA3NDc6XHRcdFx0ICpcbiA3NDg6XHRcdFx0ICogQnV0IGRvbiYjMzk7dCBzdG9yZSBzaGFkb3dzIGluIGFuIGFkZHJlc3Mgc3BhY2UgdGhhdCBpc1xuIDc0OTpcdFx0XHQgKiBhbHJlYWR5IGV4aXRpbmcuICBUaGlzIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNQoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA3OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucywgYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgY2FzZS4KClRoZSBrZXkgY2hhbmdlIGlzIG1vdmluZyBgX19tZW1jZzFfc3dhcG91dGAgKmluc2lkZSogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLiBUaGlzIGlzIGJlY2F1c2UgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGNsZWFycyB0aGUgYHN3YXBjYWNoZWAgZmxhZywgYW5kIHdlIGhhdmUgYSB3YXJuaW5nIGBWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO2Agd2hpY2ggY291bGQgYmUgdHJpZ2dlcmVkIGlmIHdlIGNsZWFyZWQgdGhlIHN3YXBjYWNoZSBmbGFnIGJlZm9yZSBjYWxsaW5nIGBfX21lbWNnMV9zd2Fwb3V0YCB0byB1cGRhdGUgbWVtY2cgYWNjb3VudGluZy4gSXQgd2FzIHByZXZpb3VzbHkgY2FsbGVkIGJlZm9yZSB0aGUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGluIHRoZSBvcmlnaW5hbCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFuZCBpbiBgX19yZW1vdmVfbWFwcGluZ2AsIGBfX21lbWNnMV9zd2Fwb3V0YCB3YXMgY2FsbGVkIGJlZm9yZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHNvIHRoaXMgcmVhcnJhbmdlbWVudCBhbGlnbnMgdGhlIHNlcXVlbmNlLgoKTm93LCBjb25jZXJuaW5nIEtNU0FOLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBwb3RlbnRpYWwgcmlza3M6CgoxLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlPyoqIE5vcGUuIFRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nIGFueSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhc3NlZCB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBpbnRlcm5hbCBNTSByZWZhY3RvcmluZy4KMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZS1EZXBlbmRlbnQgTG9naWM/KiogTm8gd2F5LiBUaGUgYHN3YXBvdXRgIHBhcmFtZXRlciBpcyBleHBsaWNpdGx5IHNldCB0byBgdHJ1ZWAgb3IgYGZhbHNlYCDigJMgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgYXQgcGxheSB0aGF0IHdvdWxkIGRlcGVuZCBvbiBhbiB1bmluaXRpYWxpemVkIHZhbHVlLgozLiAgKipVbmluaXRpYWxpemVkIENvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdCBpcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZS4gSXQmIzM5O3MgYWxsIGFib3V0IGZvbGlvIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBtZW1jZyBhY2NvdW50aW5nLgo0LiAgKipCb3VuZHMgQ2hlY2tzL0xlbmd0aCBMb2dpYz8qKiBOby4gVGhpcyBwYXRjaCBpc24mIzM5O3QgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgaW50cm9kdWNpbmcgbmV3IGxvZ2ljIHRoYXQgbWlnaHQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhyb3VnaCB0aG9zZSBtZWNoYW5pc21zLgo1LiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBhdCBBbGw/KiogTXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcHVyZWx5IGludm9sdmVzIHJlZmFjdG9yaW5nIHN3YXAgY2FjaGUgbG9naWMgYW5kIG1lbWNnIHN3YXBvdXQsIHNvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzbiYjMzk7dCBhIGZhY3Rvci4KCkZ1cnRoZXJtb3JlLCBhbnkgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGxpa2VseSBiZSByZWxhdGVkIHRvIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBmb2xpbyBsaWZlY3ljbGUgaXNzdWVzLiBCdXQgd2UgaGF2ZSBzYWZlZ3VhcmRzIGluIHBsYWNlLiBLQVNBTiB3b3VsZCBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgcHJvYmxlbXMsIExPQ0tERVAgd291bGQgaGFuZGxlIGxvY2tpbmcgaXNzdWVzLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgbGlrZSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCBhbmQgYFZNX0JVR19PTl9GT0xJT2AgcHJvdmlkZSBhZGRpdGlvbmFsIGRlYnVnZ2luZy4gS01TQU4mIzM5O3MgcHVycG9zZSBpcyB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBub25lIG9mIHRoYXQgaXMgaGFwcGVuaW5nIG9yIGV4cG9zZWQgaW4gdGhpcyBwYXRjaC4KClNvLCB0byBzdW1tYXJpemU6IFRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGZ1bmN0aW9uIGJ5IGFkZGluZyBhIGJvb2xlYW4gYW5kIG1vdmluZyB0aGUgY2FsbCB0byBgX19tZW1jZzFfc3dhcG91dCgpYC4gVGhlcmUmIzM5O3Mgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgYHN3YXBvdXRgIGJvb2xlYW4gaXMgaGFyZGNvZGVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBhc3NlcnRpb25zLiBLTVNBTiBpcyBpcnJlbGV2YW50LiBJJiMzOTttIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBOZWVkc0tNU0FOIGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVyIGNvcGllcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYm9vbGVhbiBmbGFnIGBzd2Fwb3V0YCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBjb25zdGFudCBsaXRlcmFscyAoYHRydWVgL2BmYWxzZWApLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyB3b3VsZCBpbnZvbHZlIGZvbGlvIGxpZmVjeWNsZSBzdGF0ZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1jZyBhY2NvdW50aW5nLCBvciBsb2NraW5nLCB3aGljaCBhcmUgdHJhY2tlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYXNzZXJ0aW9ucywgTE9DS0RFUCwgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVyIGNvcGllcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYm9vbGVhbiBmbGFnIGBzd2Fwb3V0YCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBjb25zdGFudCBsaXRlcmFscyAoYHRydWVgL2BmYWxzZWApLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyB3b3VsZCBpbnZvbHZlIGZvbGlvIGxpZmVjeWNsZSBzdGF0ZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1jZyBhY2NvdW50aW5nLCBvciBsb2NraW5nLCB3aGljaCBhcmUgdHJhY2tlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYXNzZXJ0aW9ucywgTE9DS0RFUCwgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowNzo1Ny44MzgxMDY2NDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTg2MjU5MzcxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBzd2FwIGNhY2hlIGZvbGlvIGRlbGV0aW9uIGJ5IGludGVncmF0aW5nIGBfX21lbWNnMV9zd2Fwb3V0KClgIGludG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKWAgd2l0aCBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlci4gXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVyIGNvcGllcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYm9vbGVhbiBmbGFnIGBzd2Fwb3V0YCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBjb25zdGFudCBsaXRlcmFscyAoYHRydWVgL2BmYWxzZWApLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyB3b3VsZCBpbnZvbHZlIGZvbGlvIGxpZmVjeWNsZSBzdGF0ZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1jZyBhY2NvdW50aW5nLCBvciBsb2NraW5nLCB3aGljaCBhcmUgdHJhY2tlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYXNzZXJ0aW9ucywgTE9DS0RFUCwgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHN3YXAgY2FjaGUgZGVsZXRpb24gbG9naWMgaW4gX19zd2FwX2NhY2hlX2RlbF9mb2xpbyBhbmQgc3dhcF9jYWNoZV9kZWxfZm9saW8sIHJlcG9zaXRpb25pbmcgdGhlIGNncm91cCB2MSBtZW1zdyBjaGFyZ2UgdHJhbnNmZXIgKF9fbWVtY2cxX3N3YXBvdXQpIGJlZm9yZSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0byBhdm9pZCByZWZlcmVuY2luZyBjbGVhcmVkIHN3YXAgbWV0YWRhdGEuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0cyBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIHN3YXBwaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowNzo1Ny44MzgxMTExOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTIxNjM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcwZmZmMGY0YTYyZmExYjQwMTFiYjZhYzUzY2JmNmE3NjA3MTNkZTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAxMzowNzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5iM2I1NGMyODkyOWExIDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuaFxcbisrKyBiL21tL3N3YXAuaFxcbkBAIC0zMTksNyArMzE5LDggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xcbitcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgc3dhcG91dCk7XFxuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTtcXG4gXFxuQEAgLTQ1Miw3ICs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4rXFx0XFx0Ym9vbCBzd2Fwb3V0KVxcbiB7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjk5OTg1MjA4YjUyOWIgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTMwNiw2ICszMDYsNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxcbiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxcbisgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxcbiAgKlxcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXFxuICAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbkBAIC0zMTQsMTMgKzMxNSwxNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXFxuICAqL1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuK1xcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFxuLVxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XFxuK1xcbitcXHRpZiAoc3dhcG91dClcXG4rXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbitcXG4rXFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzM5LDcgKzM0NCw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLVxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XFxuK1xcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFxuIFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBiNGM5YjhmM2RmZTk5Li5hZjdkZmE5MDVjYjUwIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNzM1LDggKzczNSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcXG4gXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4tXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbi1cXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcXG4rXFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxuIFxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDc6NTguNDE4MDA5MzI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzgyMzUzODY4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGxvZ2ljIGluIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gYW5kIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCByZXBvc2l0aW9uaW5nIHRoZSBjZ3JvdXAgdjEgbWVtc3cgY2hhcmdlIHRyYW5zZmVyIChfX21lbWNnMV9zd2Fwb3V0KSBiZWZvcmUgcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdG8gYXZvaWQgcmVmZXJlbmNpbmcgY2xlYXJlZCBzd2FwIG1ldGFkYXRhLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdHMgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwcGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzBmZmYwZjRhNjJmYTFiNDAxMWJiNmFjNTNjYmY2YTc2MDcxM2RlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTM6MDc6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMxOSw3ICszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcbitcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbitcdFx0XHQgICAgYm9vbCBzd2Fwb3V0KTtcbiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xuIFxuQEAgLTQ1Miw3ICs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbitcdFx0Ym9vbCBzd2Fwb3V0KVxuIHtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi45OTk4NTIwOGI1MjliIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0zMDYsNiArMzA2LDcgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXG4gICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cbisgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxuICAqXG4gICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLlxuICAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxuQEAgLTMxNCwxMyArMzE1LDE3IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLlxuICAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbi1cdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTtcbitcbitcdGlmIChzd2Fwb3V0KVxuK1x0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4rXG4rXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gfVxuIFxuIC8qKlxuQEAgLTMzOSw3ICszNDQsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuLVx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTtcbitcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG4gXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGI0YzliOGYzZGZlOTkuLmFmN2RmYTkwNWNiNTAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC03MzUsOCArNzM1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4tXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbi1cdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG4rXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xuIFx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4gXHR9IGVsc2Uge1xuIFx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDc6NTguNDE4MDEwOTY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI4MjAwMTY4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGRpZmZzLCBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFN3YXAgUGF0Y2gqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyB0aGluZy5cIiBJIHNlZSBpdCdzIHRvdWNoaW5nIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoYXQgdHJpbyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpbXBhY3Qgb24gaG93IHdlIGhhbmRsZSBzd2FwcGluZyBhbmQgcGFnZSByZWNsYW1hdGlvbiwgd2hpY2ggaXMsIG9idmlvdXNseSwgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhlc2Ugc3BlY2lmaWMgZmlsZXMgYXJlIGJlaW5nIHRvdWNoZWQgYW5kIHdoYXQncyBiZWluZyBhbHRlcmVkLiBJJ2xsIG5lZWQgdG8gcmVhZCB0aGVtLlxuXG5TcGVjaWZpY2FsbHksIEkgdGhpbmsgSSdsbCBzdGFydCB3aXRoIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgbW0vdm1zY2FuLmNgIGZpcnN0LCBiZWNhdXNlIGBtbS9zd2FwLmhgIGlzIGxpa2VseSByZWxhdGVkLCBidXQgdGhlIHJlYWwgbG9naWMgaXMgaW4gdGhlIG90aGVyIHR3by4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDk5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowODo1MS4yMzgwMzAyNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwX3N0YXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcdH1cXG4gMzAxOlxcdH1cXG4gMzAyOlxcdFxcbiAzMDM6XFx0LyoqXFxuIDMwNDpcXHQgKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMwNTpcXHQgKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbiAzMDY6XFx0ICogQGZvbGlvOiBUaGUgZm9saW8uXFxuIDMwNzpcXHQgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxcbiAzMDg6XFx0ICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzA5OlxcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXFxuIDMxMDpcXHQgKlxcbiAzMTE6XFx0ICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLlxcbiAzMTI6XFx0ICogVGhpcyB3b24ndCBwdXQgdGhlIGZvbGlvJ3MgcmVmY291bnQuIFRoZSBjYWxsZXIgaGFzIHRvIGRvIHRoYXQuXFxuIDMxMzpcXHQgKlxcbiAzMTQ6XFx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlXFxuIDMxNTpcXHQgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLlxcbiAzMTY6XFx0ICovXFxuIDMxNzpcXHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gMzE4OlxcdFxcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXFxuIDMxOTpcXHR7XFxuIDMyMDpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiAzMjE6XFx0XFxuIDMyMjpcXHRcXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xcbiAzMjM6XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdGlmIChzd2Fwb3V0KVxcbiAzMjY6XFx0XFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XFxuIDMyOTpcXHR9XFxuIDMzMDpcXHRcXG4gMzMxOlxcdC8qKlxcbiAzMzI6XFx0ICogc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG4gMzMzOlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAzMzQ6XFx0ICpcXG4gMzM1OlxcdCAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxcbiAzMzY6XFx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxcbiAzMzc6XFx0ICogZXF1YWwgdG8gemVybywgb3IgaXQgbWF5IGNhdXNlIGRhdGEgbG9zcy5cXG4gMzM4OlxcdCAqXFxuIDMzOTpcXHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDM0MDpcXHQgKi9cXG4gMzQxOlxcdHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gMzQyOlxcdHtcXG4gMzQzOlxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuIDM0NDpcXHRcXHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbiAzNDc6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxuIDM0ODpcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4gMzUxOlxcdH1cXG4gMzUyOlxcdFxcbiAzNTM6XFx0LyoqXFxuIDM1NDpcXHQgKiBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyAtIFJlcGxhY2UgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzU1OlxcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuIDM1NjpcXHQgKiBAb2xkOiBUaGUgb2xkIGZvbGlvIHRvIGJlIHJlcGxhY2VkLlxcbiAzNTc6XFx0ICogQG5ldzogVGhlIG5ldyBmb2xpby5cXG4gMzU4OlxcdCAqXFxuIDM1OTpcXHQgKiBSZXBsYWNlIGFuIGV4aXN0aW5nIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlIHdpdGggYSBuZXcgZm9saW8uIFRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowODo1MS4yMzgxMjgxODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDgyODU5OTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgaXNzdWUsIGFuZCBJIHN1c3BlY3QgaXQncyByZWxhdGVkIHRvIGhvdyBtYXBwaW5ncyBhcmUgaGFuZGxlZCBkdXJpbmcgc2Nhbm5pbmcgaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHN1YnN5c3RlbS4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIGZ1bmN0aW9uOiBgX19yZW1vdmVfbWFwcGluZ2AuIEkga25vdyB0aGlzIGlzIGxvY2F0ZWQgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgdGhlIGtlcm5lbCdzIHZpcnR1YWwgbWVtb3J5IHNjYW5uZXIuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIG1hcHBpbmdzIGFyZSBhY3R1YWxseSB1bm1hcHBlZCBmcm9tIGEgcHJvY2Vzc+KAmXMgYWRkcmVzcyBzcGFjZSBkdXJpbmcgcGFnZSByZWNsYWltLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSBpbiBgX19yZW1vdmVfbWFwcGluZ2AgYW5kIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRvIHNlZSBob3cgaXQgb3BlcmF0ZXMuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMsIGFuZCB3aGVyZSBhbmQgaG93IHRoZSBtYXBwaW5nIHJlbW92YWwgaXMgaGFuZGxlZCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGlzc3VlLiBJIHdpbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgaXNzdWVzLCBvciBzdWJ0bGUgbG9naWMgZXJyb3JzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDk6MDIuMDY2NzMxMDY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY3NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMDpcXHRcXHQgKlxcbiA3MjE6XFx0XFx0ICogTm90ZSB0aGF0IGlmIHRoZSBkaXJ0eSBmbGFnIGlzIGFsd2F5cyBzZXQgdmlhIGZvbGlvX21hcmtfZGlydHksXFxuIDcyMjpcXHRcXHQgKiBhbmQgdGh1cyB1bmRlciB0aGUgaV9wYWdlcyBsb2NrLCB0aGVuIHRoaXMgb3JkZXJpbmcgaXMgbm90IHJlcXVpcmVkLlxcbiA3MjM6XFx0XFx0ICovXFxuIDcyNDpcXHRcXHRyZWZjb3VudCA9IDEgKyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIDcyNTpcXHRcXHRpZiAoIWZvbGlvX3JlZl9mcmVlemUoZm9saW8sIHJlZmNvdW50KSlcXG4gNzI2OlxcdFxcdFxcdGdvdG8gY2Fubm90X2ZyZWU7XFxuIDcyNzpcXHRcXHQvKiBub3RlOiBhdG9taWNfY21weGNoZyBpbiBmb2xpb19yZWZfZnJlZXplIHByb3ZpZGVzIHRoZSBzbXBfcm1iICovXFxuIDcyODpcXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpKSB7XFxuIDcyOTpcXHRcXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIHJlZmNvdW50KTtcXG4gNzMwOlxcdFxcdFxcdGdvdG8gY2Fubm90X2ZyZWU7XFxuIDczMTpcXHRcXHR9XFxuIDczMjpcXHRcXG4gNzMzOlxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4gNzM0OlxcdFxcdFxcdHN3cF9lbnRyeV90IHN3YXAgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gNzM1OlxcdFxcbiA3MzY6XFx0XFx0XFx0aWYgKHJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxcbiA3Mzc6XFx0XFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4gNzM4OlxcdFxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xcbiA3Mzk6XFx0XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xcbiA3NDA6XFx0XFx0fSBlbHNlIHtcXG4gNzQxOlxcdFxcdFxcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XFxuIDc0MjpcXHRcXG4gNzQzOlxcdFxcdFxcdGZyZWVfZm9saW8gPSBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZnJlZV9mb2xpbztcXG4gNzQ0OlxcdFxcdFxcdC8qXFxuIDc0NTpcXHRcXHRcXHQgKiBSZW1lbWJlciBhIHNoYWRvdyBlbnRyeSBmb3IgcmVjbGFpbWVkIGZpbGUgY2FjaGUgaW5cXG4gNzQ2OlxcdFxcdFxcdCAqIG9yZGVyIHRvIGRldGVjdCByZWZhdWx0cywgdGh1cyB0aHJhc2hpbmcsIGxhdGVyIG9uLlxcbiA3NDc6XFx0XFx0XFx0ICpcXG4gNzQ4OlxcdFxcdFxcdCAqIEJ1dCBkb24ndCBzdG9yZSBzaGFkb3dzIGluIGFuIGFkZHJlc3Mgc3BhY2UgdGhhdCBpc1xcbiA3NDk6XFx0XFx0XFx0ICogYWxyZWFkeSBleGl0aW5nLiAgVGhpcyBpcyBub3QganVzdCBhbiBvcHRpbWl6YXRpb24sXFxuIDc1MDpcXHRcXHRcXHQgKiBpbm9kZSByZWNsYWltIG5lZWRzIHRvIGVtcHR5IG91dCB0aGUgcmFkaXggdHJlZSBvclxcbiA3NTE6XFx0XFx0XFx0ICogdGhlIG5vZGVzIGFyZSBsb3N0LiAgRG9uJ3QgcGxhbnQgc2hhZG93cyBiZWhpbmQgaXRzXFxuIDc1MjpcXHRcXHRcXHQgKiBiYWNrLlxcbiA3NTM6XFx0XFx0XFx0ICpcXG4gNzU0OlxcdFxcdFxcdCAqIFdlIGFsc28gZG9uJ3Qgc3RvcmUgc2hhZG93cyBmb3IgREFYIG1hcHBpbmdzIGJlY2F1c2UgdGhlXFxuIDc1NTpcXHRcXHRcXHQgKiBvbmx5IHBhZ2UgY2FjaGUgZm9saW9zIGZvdW5kIGluIHRoZXNlIGFyZSB6ZXJvIHBhZ2VzXFxuIDc1NjpcXHRcXHRcXHQgKiBjb3ZlcmluZyBob2xlcywgYW5kIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBtaXggREFYXFxuIDc1NzpcXHRcXHRcXHQgKiBleGNlcHRpb25hbCBlbnRyaWVzIGFuZCBzaGFkb3cgZXhjZXB0aW9uYWwgZW50cmllcyBpbiB0aGVcXG4gNzU4OlxcdFxcdFxcdCAqIHNhbWUgYWRkcmVzc19zcGFjZS5cXG4gNzU5OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowOTowMi4wNjcxMDI2NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjI1MDEzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyB0aGluayB0aGlzIHRocm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgZnVuY3Rpb24uIFNvLCB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZSB0byBzZWUgd2hlcmUgZWxzZSBpdCdzIGJlaW5nIGNhbGxlZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgY29udGV4dHMgSSBuZWVkIHRvIGNvbnNpZGVyLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgaW1wYWN0IGFuZCB3aHkgaXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjA5OjA1LjY5MjEyNzI4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE2NDgyMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbi0tXFxubW0vc3dhcC5oPTQ1MT1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXAuaC00NTQtXFxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC00NTYtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzE2LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozMTc6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcF9zdGF0ZS5jLTMxOC1cXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMzNC0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzU6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzQxPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zNDYtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5tbS9zd2FwX3N0YXRlLmM6MzQ3OlxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYxOC1cXHRcXHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcXG5tbS9zd2FwZmlsZS5jOjE2MTk6XFx0XFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxcbm1tL3N3YXBmaWxlLmMtMTYyMC1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4Mj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03MzctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3Mzg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzM5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDk6MDcuNzA4NjE2OTkxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTU4ODQ5NTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJlbG9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXRgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgZXhhY3RseSAqaXMqIGBfX21lbWNnMV9zd2Fwb3V0YCwgYW5kIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIHdhcyBpdCBkZWVtZWQgbmVjZXNzYXJ5IHRvIG1vdmUgaXQgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2A/IFRoaXMgaGFzIHRvIGhhdmUgc29tZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNvbWV0aGluZyBjaGFuZ2VkLCBhbmQgSSBuZWVkIHRvIGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gRmlyc3QsIEkgd2lsbCBsb29rIGZvciBob3cgYF9fbWVtY2cxX3N3YXBvdXRgIGlzIGRlZmluZWQuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDk6MTcuMjk3MTE0MzI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTExODczOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2cxX3N3YXBvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1MT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NTgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk1OTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjQ6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1NDk9dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NjctXFx0ICogRXhjbHVkZSBzd2FwY2FjaGU6IG9yaWdpbmFsbHkgdG8gYXZvaWQgYSBjb3JydXB0IGRlZmVycmVkIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYzo0NTY4OlxcdCAqIHF1ZXVlLiBOb3dhZGF5cyB0aGF0IGlzIGZ1bGx5IHByZXZlbnRlZCBieSBfX21lbWNnMV9zd2Fwb3V0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTY5LVxcdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNDc9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjU4LS8qKlxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTk6ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjY4LSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxubW0vbWVtY29udHJvbC12MS5jLTI3MC17XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzE3PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMyNS1cXHRpZiAoc3dhcG91dClcXG5tbS9zd2FwX3N0YXRlLmM6MzI2OlxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG5tbS9zd2FwX3N0YXRlLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowOToxOS4yMDg5OTY3NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4OTcxNTEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBTd2FwIENhY2hlIERlbGV0aW9uIGFuZCBNZW1vcnkgQ29udHJvbCBHcm91cCBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIG9yZGVyaW5nLCBsb2NraW5nLCBhbmQgYmVoYXZpb3IgY2hhbmdlIGlzIHBsYXlpbmcgb3V0LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpZyBpbnRvIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCBhbmQgdGhlbiBgX19tZW1jZzFfc3dhcG91dGAuIEkgd2FudCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGFuZCB0aGUgc3BlY2lmaWMgb3JkZXIgaW4gd2hpY2ggdGhpbmdzIGFyZSBoYXBwZW5pbmcuIFRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcmVhZGluZyB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiB3aGF0J3MgZ29pbmcgb24uIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSB0d28gZnVuY3Rpb25zIHdpbGwgcmV2ZWFsIGhvdyB0aGUgc3dhcCBjYWNoZSBpbnRlcmFjdHMgd2l0aCB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzd2Fwb3V0IHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGVyZSB0aGUgYWx0ZXJhdGlvbiBpbiBiZWhhdmlvciBoYXMgc3VyZmFjZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowOToyOC4xOTg3MTQ1MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3N3YXBfc3RhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2FkZF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5KTtcXG4gMjUzOlxcdFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcXG4gMjU0OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XFxuIDI1NTpcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gMjU4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDI1OTpcXHRcXHRcXHRcXHRcXHQgICAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxcbiAyNjA6XFx0e1xcbiAyNjE6XFx0XFx0dW5zaWduZWQgbG9uZyBvbGRfdGI7XFxuIDI2MjpcXHRcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XFxuIDI2MzpcXHRcXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xcbiAyNjQ6XFx0XFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xcbiAyNjU6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7XFxuIDI2ODpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiAyNjk6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gMjcwOlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0XFx0c2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7XFxuIDI3MzpcXHRcXHRjaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7XFxuIDI3NDpcXHRcXHRjaV9lbmQgPSBjaV9zdGFydCArIG5yX3BhZ2VzO1xcbiAyNzU6XFx0XFx0Y2lfb2ZmID0gY2lfc3RhcnQ7XFxuIDI3NjpcXHRcXHRkbyB7XFxuIDI3NzpcXHRcXHRcXHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbiAyNzg6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fFxcbiAyNzk6XFx0XFx0XFx0XFx0ICAgICBzd3BfdGJfdG9fZm9saW8ob2xkX3RiKSAhPSBmb2xpbyk7XFxuIDI4MDpcXHRcXHRcXHRpZiAoX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpXFxuIDI4MTpcXHRcXHRcXHRcXHRmb2xpb19zd2FwcGVkID0gdHJ1ZTtcXG4gMjgyOlxcdFxcdFxcdGVsc2VcXG4gMjgzOlxcdFxcdFxcdFxcdG5lZWRfZnJlZSA9IHRydWU7XFxuIDI4NDpcXHRcXHRcXHQvKiBJZiBzaGFkb3cgaXMgTlVMTCwgd2Ugc2V0IGFuIGVtcHR5IHNoYWRvdy4gKi9cXG4gMjg1OlxcdFxcdFxcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgc2hhZG93X3RvX3N3cF90YihzaGFkb3csXFxuIDI4NjpcXHRcXHRcXHRcXHRcXHQgX19zd3BfdGJfZ2V0X2ZsYWdzKG9sZF90YikpKTtcXG4gMjg3OlxcdFxcdH0gd2hpbGUgKCsrY2lfb2ZmIFxcdTAwM2MgY2lfZW5kKTtcXG4gMjg4OlxcdFxcbiAyODk6XFx0XFx0Zm9saW8tXFx1MDAzZXN3YXAudmFsID0gMDtcXG4gMjkwOlxcdFxcdGZvbGlvX2NsZWFyX3N3YXBjYWNoZShmb2xpbyk7XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdGlmICghZm9saW9fc3dhcHBlZCkge1xcbiAyOTM6XFx0XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcXG4gMjk0OlxcdFxcdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XFxuIDI5NTpcXHRcXHRcXHRjaV9vZmYgPSBjaV9zdGFydDtcXG4gMjk2OlxcdFxcdFxcdGRvIHtcXG4gMjk3OlxcdFxcdFxcdFxcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcXG4gMjk5OlxcdFxcdFxcdH0gd2hpbGUgKCsrY2lfb2ZmIFxcdTAwM2MgY2lfZW5kKTtcXG4gMzAwOlxcdFxcdH1cXG4gMzAxOlxcdH1cXG4gMzAyOlxcdFxcbiAzMDM6XFx0LyoqXFxuIDMwNDpcXHQgKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMwNTpcXHQgKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbiAzMDY6XFx0ICogQGZvbGlvOiBUaGUgZm9saW8uXFxuIDMwNzpcXHQgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxcbiAzMDg6XFx0ICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzA5OlxcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjA5OjI4LjE5ODgyMzU2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODM4MzkwMjgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgLSB2MSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgYSBrZXkgcGFydCBvZiBtZW1vcnkgY29udHJvbCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc3dhcHBpbmcuIFJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYG1tL21lbWNvbnRyb2wtdjEuY2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaXMgbGlrZWx5IGhhcHBlbmluZy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBtZW1vcnkgY2dyb3VwcyBhbmQgaG93IGl0J3MgdHJpZ2dlcmluZyB0aGUgc3dhcC1vdXQgYmVoYXZpb3IuIEknbSBndWVzc2luZyB0aGVyZSdzIHNvbWUga2luZCBvZiB0aHJlc2hvbGQgb3IgYWxnb3JpdGhtIGF0IHBsYXkgdGhhdCdzIHB1c2hpbmcgbWVtb3J5IHBhZ2VzIHRvIHN3YXAgd2hlbiBhIGNncm91cCBoaXRzIGEgY2VydGFpbiBsaW1pdCBvciBoYXMgb3RoZXIgbWVtb3J5IHByZXNzdXJlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgY29kZSBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjA5OjQ2LjU4MjcyOTU1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC12MS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1NTpcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdCNpZmRlZiBDT05GSUdfU1dBUFxcbiAyNTg6XFx0LyoqXFxuIDI1OTpcXHQgKiBfX21lbWNnMV9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcFxcbiAyNjA6XFx0ICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcXG4gMjYxOlxcdCAqIEBjaTogdGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIgaG9sZGluZyB0aGUgc3dhcCBlbnRyaWVzXFxuIDI2MjpcXHQgKlxcbiAyNjM6XFx0ICogVHJhbnNmZXIgdGhlIG1lbXN3IGNoYXJnZSBvZiBAZm9saW8gdG8gdGhlIHN3YXAgZW50cnkgc3RvcmVkIGluXFxuIDI2NDpcXHQgKiBmb2xpby1cXHUwMDNlc3dhcC5cXG4gMjY1OlxcdCAqXFxuIDI2NjpcXHQgKiBDb250ZXh0OiBmb2xpbyBtdXN0IGJlIGlzb2xhdGVkLCB1bm1hcHBlZCwgbG9ja2VkIGFuZCBpcyBqdXN0IGFib3V0IHRvXFxuIDI2NzpcXHQgKiBiZSBmcmVlZCwgYW5kIGNhbGxlciBtdXN0IGRpc2FibGUgSVJRcyBhbmQgaG9sZCB0aGUgc3dhcCBjbHVzdGVyIGxvY2suXFxuIDI2ODpcXHQgKi9cXG4gMjY5OlxcdHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiAyNzA6XFx0e1xcbiAyNzE6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqc3dhcF9tZW1jZztcXG4gMjcyOlxcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4gMjczOlxcdFxcdHVuc2lnbmVkIGludCBucl9lbnRyaWVzO1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbiAyNzY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4gMjc3OlxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG4gMjc4OlxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuIDI3OTpcXHRcXG4gMjgwOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDI4MTpcXHRcXHRcXHRyZXR1cm47XFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpKVxcbiAyODQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcXG4gMjg3OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghb2JqY2csIGZvbGlvKTtcXG4gMjg4OlxcdFxcdGlmICghb2JqY2cpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm47XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMjkyOlxcdFxcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XFxuIDI5MzpcXHRcXHQvKlxcbiAyOTQ6XFx0XFx0ICogSW4gY2FzZSB0aGUgbWVtY2cgb3duaW5nIHRoZXNlIHBhZ2VzIGhhcyBiZWVuIG9mZmxpbmVkIGFuZCBkb2Vzbid0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjA5OjQ2LjU4Mjg1Mzc2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjIwNzk5OTgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIFN3YXAgQ2FjaGUgUmVtb3ZhbCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNoYW5nZSBpbiBob3cgc3dhcCBjYWNoZSBlbnRyaWVzIGFyZSByZW1vdmVkLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gbWVtY2cgYWNjb3VudGluZy4gVGhlIGNvcmUgb2YgbXkgaW50ZXJlc3QgbGllcyBpbiBob3cgYF9fbWVtY2cxX3N3YXBvdXRgIGludGVyYWN0cyB3aXRoIHRoZSBmb2xpbydzIGBzd2FwYCBmaWVsZCBhbmQgdGhlIGBzd2FwY2FjaGVgIHN0YXRlLlxuXG5Jbml0aWFsbHksIEknbSBub3RpbmcgdGhlIHByZXNlbmNlIG9mIGBWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO2Agd2l0aGluIGBfX21lbWNnMV9zd2Fwb3V0YCwgaGlnaGxpZ2h0aW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoZSBgc3dhcGNhY2hlYCBmbGFnIGJlZm9yZSBpbnZva2luZyBtZW1jZyBzd2Fwb3V0LiBUaGUgYGZvbGlvLVx1MDAzZXN3YXBgIGZpZWxkIGlzIGNsZWFybHkgdXNlZCB3aXRoaW4gYF9fbWVtY2cxX3N3YXBvdXRgLCBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgcG90ZW50aWFsIGluY29uc2lzdGVuY2llcyBpZiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpc24ndCBjb3JyZWN0LiBJJ20gc2VlaW5nIHRoYXQgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIHRoZSByZW1vdmFsIHByb2Nlc3MsIHplcm9lcyBvdXQgYGZvbGlvLVx1MDAzZXN3YXAudmFsYCBhbmQgY2xlYXJzIHRoZSBzd2FwY2FjaGUgZmxhZywgd2hpY2ggdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgKmFjdHVhbCogcmVtb3ZhbCBvZiB0aGUgc3dhcCBjYWNoZSBlbnRyeSBvY2N1cnMuXG5cblByaW9yIHRvIHRoaXMgY2hhbmdlLCB0aGUgY2FsbCBzZXF1ZW5jZSB3YXMgd2VsbC1kZWZpbmVkOiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgY2FsbGVkIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gQWxzbywgSSdtIHRyYWNpbmcgYmFjayBob3cgdGhpcyBmaXRzIGludG8gdGhlIGJyb2FkZXIgVk0gc2Nhbm5pbmcgcHJvY2Vzcywgc2VlaW5nIHRoYXQgYF9fcmVtb3ZlX21hcHBpbmdgIGNhbGxlZCBib3RoIGBfX21lbWNnMV9zd2Fwb3V0YCBhbmQgdGhlbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFNwZWNpZmljYWxseSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgY2FsbGVkIHRoZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AgZnVuY3Rpb24gKmZpcnN0KiwgdGhlbiB0aGUgc3RhdGlzdGljYWwgdXBkYXRlcy5cblxuTm93LCB0aGluZ3MgYXJlIGRpZmZlcmVudC4gYF9fbWVtY2cxX3N3YXBvdXRgIGlzICppbnNpZGUqIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBiZWZvcmUgdGhlIGNvcmUgcmVtb3ZhbCBmdW5jdGlvbiwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBBbmQgd2hlbiBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGNhbGxlZCBmcm9tIHRoZSBmb2xpbywgdGhlIGBzd2Fwb3V0YCBmbGFnIGlzIGZhbHNlLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBtb2RpZmljYXRpb24uIFRoaXMgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IHRoZSBtZW1jZyBhY2NvdW50aW5nIGZsb3cgaW4gdGhlIG5ldyBzZXR1cC5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBsb2dpYyBpcyBub3cgdXNlZC4gSSdsbCB1c2UgYGdyZXBgIHRvIGxvb2sgZm9yIG90aGVyIGNhbGwgc2l0ZXMgZm9yIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgdG8gc2VlIHdoYXQgaW1wYWN0IHRoZSBjaGFuZ2Ugb2YgZXhlY3V0aW9uIGhhcyBvbiB0aGUgd2hvbGUgc3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHRocmVhZC1zYWZlIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIHN3YXAgY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMDoyMi43OTA4NTY3NjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDI0ODYyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMTI1PXN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMjktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMTMwOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMzEtXFxuLS1cXG5tbS9tZW1vcnkuYz00ODU3PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTA4OS1cXHRcXHRpZiAoIVdBUk5fT05fT05DRShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpXFxubW0vbWVtb3J5LmM6NTA5MDpcXHRcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vbWVtb3J5LmMtNTA5MS1cXHRcXHRnb3RvIG91dF9ub21hcDtcXG4tLVxcbm1tL3NobWVtLmM9MTgwOD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE5NDAtXFx0XFx0LypcXG5tbS9zaG1lbS5jOjE5NDE6XFx0XFx0ICogVGhlIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYmVsb3cgY291bGQgYmUgbGVmdCBmb3JcXG5tbS9zaG1lbS5jLTE5NDItXFx0XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSdzIGZvbGlvX2ZyZWVfc3dhcCgpIHRvIGRpc3Bvc2Ugb2Y7XFxuLS1cXG5tbS9zaG1lbS5jLTE5NDYtXFx0XFx0ICovXFxubW0vc2htZW0uYzoxOTQ3OlxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTE5NDgtXFx0XFx0Z290byByZWRpcnR5O1xcbi0tXFxubW0vc2htZW0uYz0yMzUwPXN0YXRpYyB2b2lkIHNobWVtX3NldF9mb2xpb19zd2FwaW5fZXJyb3Ioc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjM2Ny1cXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XFxubW0vc2htZW0uYzoyMzY4OlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTIzNjktXFx0LypcXG4tLVxcbm1tL3NobWVtLmM9MjQ1NT1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTk3LVxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jOjI1OTg6XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3NobWVtLmMtMjU5OS1cXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3N3YXAuaD0zMTM9dm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcXG5tbS9zd2FwLmg6MzE0OnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oLTMxNS1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMC1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMi1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXAuaD00NDY9c3RhdGljIGlubGluZSB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwLmgtNDUwLVxcbm1tL3N3YXAuaDo0NTE6c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcC5oLTQ1Mi17XFxuLS1cXG5tbS9zd2FwLmgtNDU0LVxcbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtNDU2LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMxNi0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzE3OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXBfc3RhdGUuYy0zMTgtXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMzEtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMzMjogKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy0zMzMtICogQGZvbGlvOiBUaGUgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTMzNC0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzU6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzQwLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozNDE6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy0zNDIte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0Ni1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDc6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTk4PXN0YXRpYyBpbnQgX190cnlfdG9fcmVjbGFpbV9zd2FwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjUxLVxcbm1tL3N3YXBmaWxlLmM6MjUyOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTI1My1cXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MTgtXFx0XFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXFxubW0vc3dhcGZpbGUuYzoxNjE5OlxcdFxcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cXG5tbS9zd2FwZmlsZS5jLTE2MjAtXFx0XFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTc3OC1cXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcXG5tbS9zd2FwZmlsZS5jOjE3Nzk6XFx0XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3N3YXBmaWxlLmMtMTc4MC1cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjEwMj1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTA4LVxcbm1tL3N3YXBmaWxlLmM6MjEwOTpcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vc3dhcGZpbGUuYy0yMTEwLVxcdGZvbGlvX3NldF9kaXJ0eShmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz02ODI9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtNzM3LVxcdFxcdFxcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XFxubW0vdm1zY2FuLmM6NzM4OlxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xcbm1tL3Ztc2Nhbi5jLTczOS1cXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XFxuLS1cXG5tbS96c3dhcC5jPTk3ND1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbi0tXFxubW0venN3YXAuYy0xMDQ0LVxcdGlmIChyZXQpIHtcXG5tbS96c3dhcC5jOjEwNDU6XFx0XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3pzd2FwLmMtMTA0Ni1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMDoyNC45MzMzNDkyODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0ODg1ODIzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgU3dhcCBDYWNoZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGxvdy1sZXZlbCwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gbG9naWMgd2l0aGluIHRoZSBNTSBzdWJzeXN0ZW0uIFdlJ3JlIGxvb2tpbmcgYXQgY2hhbmdlcyB0byBmdW5jdGlvbnMgbGlrZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFuZCBgX19yZW1vdmVfbWFwcGluZ2Ag4oCTIGFsbCBjcml0aWNhbCBjb21wb25lbnRzIGludm9sdmVkIGluIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwLW91dCBwcm9jZXNzZXMuXG5cblRoZSBrZXkgdGhpbmcgaXMgdGhlIHJlb3JkZXJpbmcgb2YgdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBjYWxsLiBCZWZvcmUgdGhpcywgb3IgcGVyaGFwcyBhIHJlY2VudCByZWZhY3RvcmluZywgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIHdhcyBjbGVhcmluZyBgZm9saW8tXHUwMDNlc3dhcC52YWxgIGFuZCBjYWxsaW5nIGBmb2xpb19jbGVhcl9zd2FwY2FjaGUoZm9saW8pYC4gTm93LCBpZiBgX19tZW1jZzFfc3dhcG91dGAgY29tZXMgKmFmdGVyKiB0aG9zZSBjbGVhciBvcGVyYXRpb25zLCBvciBpZiB0aGUgb3JkZXJpbmcgd2FzIHRoZSBvdGhlciB3YXkgYXJvdW5kLCB0aGUgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uIHdvdWxkIGhpdCBhIHNuYWcg4oCTIGl0IHJlbGllcyBvbiBgZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pYCBhbmQgb24gcmVhZGluZyBgZm9saW8tXHUwMDNlc3dhcGAgLSBhbmQgd2Uga25vdyB0aGlzIGNvdWxkIGNhdXNlIGEgZmFpbHVyZSwgc3BlY2lmaWNhbGx5IGEgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AuIEFuZCBvZiBjb3Vyc2UsIHRoZSBvcmRlciBvZiBub2RlIHN0YXRzIGFuZCBscnV2ZWMgc3RhdHMgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIGFkanVzdGVkIGFzIHdlbGwuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwIGNhY2hlIGRlbGV0aW9uLCBtZW1vcnkgcmVjbGFpbSwgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG1lbWNnLiBHaXZlbiBpdHMgbG9jYXRpb24gd2l0aGluIE1NLCBpdOKAmXMgZ29pbmcgdG8gYmUgdHJpZ2dlcmVkIGluIGFueSBzdGFuZGFyZCBMaW51eCBlbnZpcm9ubWVudCBleHBlcmllbmNpbmcgc3dhcHBpbmcgb3IgbWVtb3J5IHByZXNzdXJlLiBUaGlzIG1ha2VzIGl0IGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBDT05GSUdfU1dBUGAsIGBDT05GSUdfTUVNQ0dgLCBhbmQgYENPTkZJR19NRU1DR19WMWAsIGFuZCBwZXJoYXBzIGdyZXAgYXJvdW5kIGluIGBtbS9LY29uZmlnYCBvciBgaW5pdC9LY29uZmlnYCB0byBiZSBjZXJ0YWluLiBHaXZlbiB0aGlzIGxldmVsIG9mIGNoYW5nZSwgaXTigJlzIHdvcnRoIHRoZSBlZmZvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDIyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEwOjQ5LjQyMTkzODY0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MTk2MjI0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRU1DR19WMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI3NjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc3LVxcdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEwLVxcdGludCBzd2FwcGluZXNzO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjMxMTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwNj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTE1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MTY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTctYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkzMD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MzUtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTkzNjojZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTM3LXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU1OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NTc6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHX1YxKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODM1PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzMC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAzMTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzItXFx0dW5zaWduZWRcXHRcXHRcXHRpbl91c2VyX2ZhdWx0OjE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU2Ny1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU2ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjktXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHRcXHQqbWVtY2dfaW5fb29tO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9MTM9c3RydWN0IHZtcHJlc3N1cmUge1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMTgtXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6MTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTIwLVxcdC8qXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0yMi1cXHQgKiAobWVtb3J5LnByZXNzdXJlX2xldmVsKS4gRHJhaW5lZCBieSBAd29yay4gdjIgaGFzIG5vIGVxdWl2YWxlbnRcXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDoyMzpcXHQgKiBpbnRlcmZhY2UsIHNvIHRoaXMgc3RhdGUgaXMgb21pdHRlZCBvbiBDT05GSUdfTUVNQ0dfVjE9biBidWlsZHMuXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMjQtXFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD01NT1leHRlcm4gZW51bSB2bXByZXNzdXJlX2xldmVscyB2bXByZXNzdXJlX2NhbGNfbGV2ZWwodW5zaWduZWQgbG9uZyBzY2FubmVkLFxcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNTctXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6NTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTU5LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHByaW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NjM9ZXh0ZXJuIHZvaWQgdm1wcmVzc3VyZV91bnJlZ2lzdGVyX2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTY1LVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjY2Oi8qIHYxIGhvb2tzIGNhbGxlZCBmcm9tIG1tL3ZtcHJlc3N1cmUuYzsgbm8tb3BzIGJlbG93IHdoZW4gIU1FTUNHX1YxLiAqL1xcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTY3LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfdjFfaW5pdChzdHJ1Y3Qgdm1wcmVzc3VyZSAqdm1wcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD03Nz1zdGF0aWMgaW5saW5lIHZvaWQgdm1wcmVzc3VyZV92MV9hY2NvdW50X3RyZWUoc3RydWN0IHZtcHJlc3N1cmUgKnZtcHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC03OS1cXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHJlY2xhaW1lZCkge31cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDo4MDojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtODEtXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9za191bmRlcl9tZW1vcnlfcHJlc3N1cmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDUtXFxuaW5jbHVkZS9uZXQvc29jay5oOjI3MDY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA3LVxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwOC1cXHRcXHRyZXR1cm4gISFtZW1jZy1cXHUwMDNldGNwbWVtX3ByZXNzdXJlO1xcbmluY2x1ZGUvbmV0L3NvY2suaDoyNzA5OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcxMC1cXG4tLVxcbmluaXQvS2NvbmZpZz0xMTAxPWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZS0xMDUtb2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTEyMz12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMC0gKiBjZ3JvdXAgdjEgdXNlcnNwYWNlIHZtcHJlc3N1cmUgaW50ZXJmYWNlIChtZW1vcnkucHJlc3N1cmVfbGV2ZWwgL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxMTMxOiAqIGNncm91cC5ldmVudF9jb250cm9sKS4gS2VwdCBoZXJlIHNvIHYyLW9ubHkga2VybmVscyAoQ09ORklHX01FTUNHX1YxPW4pXFxubW0vbWVtY29udHJvbC12MS5jLTExMzItICogZHJvcCB0aGUgd2hvbGUgZXZlbnRmZCBhY2N1bXVsYXRvciwgaXRzIHdvcmsgaXRlbSwgYW5kIHRoZSBwZXItbWVtY2dcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0yNT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTI4LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cXG5tbS9tZW1jb250cm9sLXYxLmg6Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wtdjEuaC0zMC1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD04Nj1leHRlcm4gc3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdO1xcbm1tL21lbWNvbnRyb2wtdjEuaC04Ny1cXG5tbS9tZW1jb250cm9sLXYxLmg6ODg6I2Vsc2VcXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5tbS9tZW1jb250cm9sLXYxLmgtODktXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHt9XFxubW0vbWVtY29udHJvbC12MS5oLTExOS1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTIwOiNlbmRpZlxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC0xMjEtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMzQtXFxubW0vbWVtY29udHJvbC5jOjIzNTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTIzNi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTcyLVxcbm1tL21lbWNvbnRyb2wuYzo1NzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01NzQtc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxubW0vbWVtY29udHJvbC5jOjU5OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTYwMC1cXHRQR1BHSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NDctXFxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjgtXFxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTExLVxcbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNjk2PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzAxLVxcbm1tL21lbWNvbnRyb2wuYzoxNzAyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTcwMy11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTcyMj1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3NjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkrKykge1xcbm1tL21lbWNvbnRyb2wuYzoxNzY5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTc3MC1cXHRcXHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xODIwPXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTg0MS1cXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG5tbS9tZW1jb250cm9sLmM6MTg0MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE4NDMtXFx0ZWxzZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDIzNT1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjU1LVxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgXFx1MDAyNnBhcmVudC1cXHUwMDNlc3dhcCwgZmFsc2UpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjU2OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDI1Ny1cXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI2OS1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDI3MDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQyNzEtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQzNj1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0NDYtI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjQ0NDc6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00NDQ4LVxcdHBhZ2VfY291bnRlcl9zZXRfbWF4KFxcdTAwMjZtZW1jZy1cXHUwMDNla21lbSwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE3Nj1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE4Ny1cXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXFxubW0vbWVtY29udHJvbC5jOjUxODg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01MTg5LVxcdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYxODc9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTkyLVxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jOjYxOTM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy02MTk0LVxcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xcbi0tXFxubW0vc3dhcC5oPTg1PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vc3dhcC5oLTg2LXtcXG5tbS9zd2FwLmg6ODc6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL3N3YXAuaC04OC1cXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTA6NTEuMjEzOTA3Mzk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjcwODQwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYCwgYW5kIGZvY3VzIG9uIGEgZmV3IGtleSBhcmVhcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMsIHBhcnRpY3VsYXJseSB2ZXJzaW9uIDEgKGBDT05GSUdfTUVNQ0dfVjFgKSwgdGhlIGdlbmVyYWwgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKGBDT05GSUdfTUVNQ0dgKSBmZWF0dXJlLCBhbmQgdGhlIHN3YXAgY29uZmlndXJhdGlvbiAoYENPTkZJR19TV0FQYCkgYXJlIGJlaW5nIGRlZmluZWQgYW5kIGludGVycmVsYXRlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIG92ZXJhbGwgbWVtb3J5IGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBjb25maWd1cmVkLCBhbnkgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlbSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZ28gaHVudGluZyBmb3Igc29tZSBLY29uZmlnIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTM4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTA6NTMuMTgwOTk1ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTExNTpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTExNjpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTc6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTEyMDpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTIxOlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTI0OlxcdFxcbjExMjU6XFx0Y29uZmlnIEJMS19DR1JPVVBcXG4xMTI2OlxcdFxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuMTEyNzpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuMTEyODpcXHRcXHRkZWZhdWx0IG5cXG4xMTI5OlxcdFxcdGhlbHBcXG4xMTMwOlxcdFxcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cXG4xMTMxOlxcdFxcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xcbjExMzI6XFx0XFx0cG9saWNpZXMuXFxuMTEzMzpcXHRcXG4xMTM0OlxcdFxcdEN1cnJlbnRseSwgQ0ZRIElPIHNjaGVkdWxlciB1c2VzIGl0IHRvIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmRcXG4xMTM1OlxcdFxcdGNvbnRyb2wgZGlzayBiYW5kd2lkdGggYWxsb2NhdGlvbiAocHJvcG9ydGlvbmFsIHRpbWUgc2xpY2UgYWxsb2NhdGlvbilcXG4xMTM2OlxcdFxcdHRvIHN1Y2ggdGFzayBncm91cHMuIEl0IGlzIGFsc28gdXNlZCBieSBiaW8gdGhyb3R0bGluZyBsb2dpYyBpblxcbjExMzc6XFx0XFx0YmxvY2sgbGF5ZXIgdG8gaW1wbGVtZW50IHVwcGVyIGxpbWl0IGluIElPIHJhdGVzIG9uIGEgZGV2aWNlLlxcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMDo1My4xODExMzE3NzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2Nzk1MDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSdtIGdvaW5nIHN0cmFpZ2h0IGZvciBgQ09ORklHX1NXQVBgLiBUaGF0J3MgdGhlIGNvcmUgc2V0dGluZywgc28gaXQncyB0aGUgb2J2aW91cyBmaXJzdCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBmaWd1cmUgb3V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUaGVuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIGltcGFjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzczOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTA6NTUuMzQ5MDg2MDM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDYxNjc1Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTA6NTcuODEwNzcwOTU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNDExNDYzMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFN3YXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBhdCBob3cgc3dhcCBpcyBoYW5kbGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCB3aXRoIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgcHJpbWFyeSBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBgQ09ORklHX1NXQVBgIGZlZWxzIGxpa2UgaXQgc2hvdWxkIHJlc2lkZSB3aXRoaW4gdGhhdCBhcmVhLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygc3dhcCBzcGFjZS4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgcmV2ZWFsIG5vdCBvbmx5IHRoZSBgQ09ORklHX1NXQVBgIG9wdGlvbiBpdHNlbGYsIGJ1dCBhbHNvIGl0cyBkZXBlbmRlbmNpZXMsIGFueSByZWxldmFudCBoZWxwIHRleHQsIGFuZCBwb3NzaWJseSByZWxhdGVkIG9wdGlvbnMgdGhhdCBjb250cm9sIHN3YXAgYmVoYXZpb3IuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0IGlzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCdzIGdldCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjIxLjIyMjIzODAyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMDpcXHRcXHRib29sXFxuICAxMTpcXHRcXG4gIDEyOlxcdG1lbnVjb25maWcgU1dBUFxcbiAgMTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgQkxPQ0sgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfTk9fU1dBUFxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjIxLjIyMjM0NTAyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzg2MTM2MDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBLZXJuZWwgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgQ09ORklHX01FTUNHYC4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBpcyB0byBsb29rIGRpcmVjdGx5IGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlZmluaXRpb24uIEdpdmVuIHRoYXQgdGhlc2Ugc2V0dGluZ3MgYXJlIHR5cGljYWxseSBkZWZpbmVkIGluIGBLY29uZmlnYCBmaWxlcywgYW5kIGNvbnNpZGVyaW5nIHRoZSBrZXJuZWwncyBpbml0aWFsaXphdGlvbiBhc3BlY3RzLCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGhpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhlcmVmb3JlLCBsZXQncyBmaXJlIG9mZiBhIGBncmVwYCBjb21tYW5kIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIFwiY29uZmlnIE1FTUNHXCIg4oCTIHNwZWNpZmljYWxseSwgdXNpbmcgdGhlIHdvcmQgYm91bmRhcnkgYFxcYmAgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzIHdpdGggc2ltaWxhciBuYW1lcyDigJMgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGlzIHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgdGhlIGBDT05GSUdfTUVNQ0dgIHN5bWJvbCBpcyBkZWZpbmVkLCBhbmQgaWRlYWxseSwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IGl0J3MgZGVmaW5lZCAoZS5nLiwgYXMgYSBib29sLCB0cmlzdGF0ZSwgZXRjLikgYW5kIHdoYXQgaXRzIGRlZmF1bHQgc2V0dGluZyBtaWdodCBiZS4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwIGluIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIG1lbWNnIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTE6MzUuMDgzNzA4OTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTk0NTU1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTE6MzcuOTQzMTcyMTU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNDU4MzA0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIEtjb25maWcgZm9yIE1lbW9yeSBDR3JvdXBzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYC4gV2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjZ3JvdXBzLCBzbyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBpbml0aWFsIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY3kgaGFuZGxpbmcgZm9yIGBDT05GSUdfTUVNQ0dgLiBUaGlzIGZpbGUgdXN1YWxseSBvdXRsaW5lcyB0aGUgbWFqb3IgZmVhdHVyZSBmbGFncy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBob3cgaXQncyBwcmVzZW50ZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBvciBkZXBlbmRlbnQgb3B0aW9ucyBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjQxLjI4OTAwNjMwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjM3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMTA1OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjExMDY6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwNzpcXHRcXG4xMTA4OlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDk6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTE6NDEuMjg5Mzc3NjM2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1Mjg0MjYyMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1lbW9yeSBDb250cm9sIGFuZCBTd2FwIEZ1bmN0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBmdW5jdGlvbiBhbmQgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBmdW5jdGlvbiBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBgQ09ORklHX01FTUNHX1YxYCBhbmQgYENPTkZJR19TV0FQYC4gQSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIEltcG9ydGFudGx5LCBgQ09ORklHX01FTUNHX1YxYCByZWxpZXMgb24gYENPTkZJR19NRU1DR2AsIGFuZCBgQ09ORklHX1NXQVBgIGhpbmdlcyBvbiBgTU1VYCwgYEJMT0NLYCwgYW5kIHRoZSBhYnNlbmNlIG9mIGBBUkNIX05PX1NXQVBgLiBTbywgaWYgdGhlc2UgY29yZSBjb25maWd1cmF0aW9ucyAoYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYE1FTUNHX1YxYCkgYXJlIGVuYWJsZWQsIHRoZSBjb2RlIHdpbGwgdXNlIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBtZW1vcnkgY2dyb3VwIHZlcnNpb24gMSBzd2Fwb3V0IGNoYXJnZSBhY2NvdW50aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzLiBJJ3ZlIGlkZW50aWZpZWQgdGhyZWU6IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCAoYm90aCBpbiBgbW0vc3dhcF9zdGF0ZS5jYCksIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AgKGluIGBtbS92bXNjYW4uY2AsIGRlY2xhcmVkIGFzIHN0YXRpYykuXG5cbkxldCdzIHZlcmlmeSB0aGUgc3ltYm9scy4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBkZWNsYXJlZCBpbiBgbW0vc3dhcC5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4gIGBfX21lbWNnMV9zd2Fwb3V0YCBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFuZCBkZWZpbmVkIGluIGBtbS9tZW1jb250cm9sLXYxLmNgLiBUaGV5IGFyZSBhbGwgbm9uLXN0YXRpYy5cblxuQXJlIHRoZXNlIGZ1bmN0aW9ucywgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBzdWl0YWJsZSBmb3IgbXkgRm9jdXNTeW1ib2xzPyBBYnNvbHV0ZWx5LiBUaGV5J3JlIGludm9sdmVkIGluIHN3YXAgb3BlcmF0aW9ucywgbGlrZSBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHNobWVtX3dyaXRlb3V0YCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgZm9saW9fZnJlZV9zd2FwYCwgYGRvX3N3YXBfcGFnZWAsIGBtZV9zd2FwY2FjaGVfY2xlYW5gIGV0Yy4gIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBjYWxsZWQgYnkgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fcmVtb3ZlX21hcHBpbmdgLlxuXG5MZXQgbWUgY2hlY2sgdGhlIG90aGVyIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guIEluIGBtbS9zd2FwLmhgLCB0aGUgZGVjbGFyYXRpb24gb2YgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG5vdyBpbmNsdWRlcyBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlciwgYW5kIHRoZSBpbmxpbmUgZHVtbXkgdmVyc2lvbiAoaWYgYENPTkZJR19TV0FQYCBpc24ndCBlbmFibGVkKSBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgZGVmaW5pdGlvbnMgb2YgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBfX3JlbW92ZV9tYXBwaW5nYCBpcyBpbiBgbW0vdm1zY2FuLmNgLlxuXG5MZXQncyBzb2xpZGlmeSBteSBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3M6XG5cbkZvY3VzU3ltYm9sczogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gXG5cbkVuYWJsZUNvbmZpZ3M6IGBTV0FQYCwgYE1FTUNHYCwgYE1FTUNHX1YxYFxuXG5GaW5hbGx5LCBpcyB0aGlzIHBhdGNoIFwiV29ydGhGdXp6aW5nXCI/IFllcywgd2l0aG91dCBhIGRvdWJ0LiBJdCdzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHdpdGhpbiB0aGUgTU0gdGhhdCBkZWFscyB3aXRoIGhvdyB0aGUgc3dhcCBjYWNoZSBpcyBkZWxldGVkLCBhbmQgaXQncyBhbHNvIHRpZWQgdG8gbWVtY2cgdjEgc3dhcG91dCBjaGFyZ2UgYWNjb3VudGluZy4gQSBmaW5hbCByZXZpZXcgY29uZmlybXMgYWxsIGNyaXRlcmlhIGFyZSBtZXQuIEkgYW0gbm93IGNvbmZpZGVudC4gUmVhZHkgZm9yIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjIyLCJPdXRwdXRUb2tlbnMiOjEzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjU2LjU3MzY0NDUwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzQ3NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHN3YXAgY2FjaGUgZGVsZXRpb24gbG9naWMgaW4gX19zd2FwX2NhY2hlX2RlbF9mb2xpbyBhbmQgc3dhcF9jYWNoZV9kZWxfZm9saW8sIHJlcG9zaXRpb25pbmcgdGhlIGNncm91cCB2MSBtZW1zdyBjaGFyZ2UgdHJhbnNmZXIgKF9fbWVtY2cxX3N3YXBvdXQpIGJlZm9yZSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0byBhdm9pZCByZWZlcmVuY2luZyBjbGVhcmVkIHN3YXAgbWV0YWRhdGEuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0cyBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIHN3YXBwaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIixcbiAgICBcInN3YXBfY2FjaGVfZGVsX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgc3dhcCBjYWNoZSBkZWxldGlvbiBsb2dpYyBpbiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIGFuZCBzd2FwX2NhY2hlX2RlbF9mb2xpbywgcmVwb3NpdGlvbmluZyB0aGUgY2dyb3VwIHYxIG1lbXN3IGNoYXJnZSB0cmFuc2ZlciAoX19tZW1jZzFfc3dhcG91dCkgYmVmb3JlIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIHRvIGF2b2lkIHJlZmVyZW5jaW5nIGNsZWFyZWQgc3dhcCBtZXRhZGF0YS4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RzIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcHBpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjU2LjY1MzQwMDQxN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5ODEwNjMwMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTE6NTYuNjUzOTk2ODk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE5ODEwMDI4NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc3dhcCBjYWNoZSBmb2xpbyBkZWxldGlvbiBieSBpbnRlZ3JhdGluZyBgX19tZW1jZzFfc3dhcG91dCgpYCBpbnRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIHdpdGggYSBgYm9vbCBzd2Fwb3V0YCBwYXJhbWV0ZXIuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGJ1ZmZlciBjb3BpZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGJvb2xlYW4gZmxhZyBgc3dhcG91dGAgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgY29uc3RhbnQgbGl0ZXJhbHMgKGB0cnVlYC9gZmFsc2VgKS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgaW52b2x2ZSBmb2xpbyBsaWZlY3ljbGUgc3RhdGUsIHJlZmVyZW5jZSBjb3VudGluZywgbWVtY2cgYWNjb3VudGluZywgb3IgbG9ja2luZywgd2hpY2ggYXJlIHRyYWNrZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnIGFzc2VydGlvbnMsIExPQ0tERVAsIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGZmZjBmNGE2MmZhMWI0MDExYmI2YWM1M2NiZjZhNzYwNzEzZGU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMzowNzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuKysrIGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuK1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjk5OTg1MjA4YjUyOWIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiw2ICszMDYsNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogQGZvbGlvOiBUaGUgZm9saW8uXG4gICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuKyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gICpcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gICogVGhpcyB3b24ndCBwdXQgdGhlIGZvbGlvJ3MgcmVmY291bnQuIFRoZSBjYWxsZXIgaGFzIHRvIGRvIHRoYXQuXG5AQCAtMzE0LDEzICszMTUsMTcgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4rXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuLVx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xuK1xuK1x0aWYgKHN3YXBvdXQpXG4rXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbitcbitcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiB9XG4gXG4gLyoqXG5AQCAtMzM5LDcgKzM0NCw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpO1xuK1x0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbiBcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYjRjOWI4ZjNkZmU5OS4uYWY3ZGZhOTA1Y2I1MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTczNSw4ICs3MzUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4gXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbi1cdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuLVx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcbitcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG4gXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMTo1Ni42NTM5OTg0NzdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDczMzk1NTE2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU3dhcHBpbmcgYW5kIE1lbW9yeSBDZ3JvdXBzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjb2RlIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIG5vdyB0YWtpbmcgYSBib29sZWFuIHBhcmFtZXRlciwgYHN3YXBvdXRgLiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgbW92ZW1lbnQgb2YgYF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHJpZ2h0IGJlZm9yZSB0aGUgY2FsbCB0byBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpYC5cblxuU28sIGluIHRoZSBzdGFuZGFyZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIHBhdGgsIGBzd2Fwb3V0YCBpcyBwYXNzZWQgYXMgYGZhbHNlYC4gTWFrZXMgc2Vuc2UgZm9yIHRoZSBcIm5vcm1hbFwiIHVuc3dhcHBpbmcuIEJ1dCwgYHN3YXBvdXRgIGlzIHNldCB0byBgdHJ1ZWAgd2hlbiBjYWxsZWQgZnJvbSBgX19yZW1vdmVfbWFwcGluZ2AgaW4gYG1tL3Ztc2Nhbi5jYC4gQWhhLCB0aGF0J3MgdGhlIGtleSBkaWZmZXJlbmNlLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgcmVvcmRlcmluZyBhbmQgZW5jYXBzdWxhdGlvbiB3aXRoaW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LlxuXG5UaGUgY29udGV4dCBpcyBjcml0aWNhbCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBfX21lbWNnMV9zd2Fwb3V0YCBhY3R1YWxseSBkb2VzIGFuZCBob3cgdGhpcyBjaGFuZ2UgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGNncm91cHMuIElzIHRoaXMgcmVsYXRlZCB0byBhY2NvdW50aW5nIG9yIGEgc3BlY2lmaWMgbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kgZm9yIGNncm91cC1jb250cm9sbGVkIHByb2Nlc3Nlcz8gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS92bXNjYW4uY2AgYW5kIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCBjb2RlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgbWlnaHQgYmUgYWJvdXQgYWNjb3VudGluZyBzd2FwIHVzYWdlIHBlciBtZW1jZyBkdXJpbmcgYWdncmVzc2l2ZSByZWNsYWltLiBJIHN1c3BlY3QgdGhhdCB0aGlzIGNoYW5nZSBpcyBtYWtpbmcgc3VyZSB0aGUgbWVtY2cgYWNjb3VudGluZyBoYXBwZW5zIGNvcnJlY3RseSwgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQncyBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMjo0My45OTM1NjYyOTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDMyMjA1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZzFfc3dhcG91dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1OC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU5OnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjMtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2NDpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjUtXFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDU0OT12b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cXHQgKiBFeGNsdWRlIHN3YXBjYWNoZTogb3JpZ2luYWxseSB0byBhdm9pZCBhIGNvcnJ1cHQgZGVmZXJyZWQgc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jOjQ1Njg6XFx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1NjktXFx0ICogYnV0IGlmIHBhZ2UgcmVjbGFpbSBpcyBhbHJlYWR5IGhhbmRsaW5nIHRoZSBzYW1lIGZvbGlvLCBpdCBpc1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI0Nz12b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXFxubW0vbWVtY29udHJvbC12MS5jOjI1OTogKiBfX21lbWNnMV9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjAtICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjgtICovXFxubW0vbWVtY29udHJvbC12MS5jOjI2OTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zMTc9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzI1LVxcdGlmIChzd2Fwb3V0KVxcbm1tL3N3YXBfc3RhdGUuYzozMjY6XFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbm1tL3N3YXBfc3RhdGUuYy0zMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEyOjQ2LjIzNjc5NTkwN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzYyNTA3NTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgbG9jYXRpb25zOlxuXG4qKkRpdmluZyBpbnRvIFN3YXBvdXQgYW5kIE1lbW9yeSBDb250cm9sKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nLCBsZXQncyB6ZXJvIGluIG9uIGBtbS9tZW1jb250cm9sLXYxLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24uIEFuZCB3aGlsZSB3ZSdyZSBhdCBpdCwgbGV0J3Mga2VlcCBgbW0vc3dhcF9zdGF0ZS5jYCBpbiBtaW5kLCBhcyBpdCdzIGJvdW5kIHRvIGhhdmUgcmVsZXZhbnQgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKSBhbmQgaG93IHRoZXkgc3BlY2lmaWNhbGx5IGhhbmRsZSBzd2FwLW91dCBvcGVyYXRpb25zLiBgX19tZW1jZzFfc3dhcG91dGAgc2hvdWxkIGJlIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBpbml0aWF0aW5nIHRoYXQgcHJvY2VzcywgSSdtIGV4cGVjdGluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJ20gaW1hZ2luaW5nIGl0IGRlYWxzIHdpdGggcmVjbGFpbWluZyBwYWdlcywgcG90ZW50aWFsbHkgYmFzZWQgb24gdGhlIGN1cnJlbnQgcHJlc3N1cmUgYW5kIHRoZSBzZXR0aW5ncyBpbXBvc2VkIGJ5IHRoZSBtZW1jZy4gSSdtIGFudGljaXBhdGluZyB0byBlbmNvdW50ZXIgYSBsb3Qgb2YgdGhlIHN0YW5kYXJkIHJlY2xhaW0gcHJvY2VzcywgbGlrZWx5IHNvbWUgcGFnZSBzZWxlY3Rpb24gYmFzZWQgb24gTFJVLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIG1lY2hhbmljcyBvZiB3cml0aW5nIHRob3NlIHBhZ2VzIHRvIHN3YXAgc3BhY2UuIEkgc3VzcGVjdCBpdCdsbCBhbHNvIGJlIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBhY2NvdW50aW5nIG1ldHJpY3MuXG5cbkknbGwgYmUgbG9va2luZyBjYXJlZnVsbHkgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwcGluZyBzdGF0ZSBhbmQgdGhlIG92ZXJhbGwgc3dhcCBzeXN0ZW0ncyBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSBgc3dhcF9zdGF0ZS5jYCwgd2hpY2ggb3VnaHQgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgb2YgdHJhY2tpbmcgc3dhcHBlZCBwYWdlcyBhbmQgYXZhaWxhYmxlIHN3YXAgc3BhY2UuIEknbGwgYmUgZm9jdXNlZCBvbiB0aGUgbG9naWMgb2Ygc2VsZWN0aW5nIHZpY3RpbXMsIHNldHRpbmcgc3dhcCBlbnRyaWVzLCBhbmQgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBiZXR3ZWVuIG1lbW9yeSBhbmQgc3dhcCBzcGFjZS4gSSdtIHJlYWxseSBjdXJpb3VzIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhleSdyZSB1c2luZyB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB3b25kZXJpbmcgYWJvdXQgbG9ja3MsIGF0b21pYyBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzIGZyb20gdmFyaW91cyB0aHJlYWRzIGFuZCBwcm9jZXNzZXMuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gYm90aCBmdW5jdGlvbnMsIGFzIHN3YXBvdXQgaXMgYW4gaW1wb3J0YW50IHByb2Nlc3MsIGFuZCBhIGZhaWx1cmUgY291bGQgc2VyaW91c2x5IGltcGFjdCBzeXN0ZW0gcGVyZm9ybWFuY2Ugb3IgZXZlbiBjYXVzZSBjcmFzaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTM6MjMuODYxODc1NjMzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLXYxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0I2lmZGVmIENPTkZJR19TV0FQXFxuIDI1ODpcXHQvKipcXG4gMjU5OlxcdCAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxuIDI2MDpcXHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxcbiAyNjE6XFx0ICogQGNpOiB0aGUgbG9ja2VkIHN3YXAgY2x1c3RlciBob2xkaW5nIHRoZSBzd2FwIGVudHJpZXNcXG4gMjYyOlxcdCAqXFxuIDI2MzpcXHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cXG4gMjY0OlxcdCAqIGZvbGlvLVxcdTAwM2Vzd2FwLlxcbiAyNjU6XFx0ICpcXG4gMjY2OlxcdCAqIENvbnRleHQ6IGZvbGlvIG11c3QgYmUgaXNvbGF0ZWQsIHVubWFwcGVkLCBsb2NrZWQgYW5kIGlzIGp1c3QgYWJvdXQgdG9cXG4gMjY3OlxcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cXG4gMjY4OlxcdCAqL1xcbiAyNjk6XFx0dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIDI3MDpcXHR7XFxuIDI3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xcbiAyNzI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAyNzM6XFx0XFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XFxuIDI3NjpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiAyNzc6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbiAyNzg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gMjgxOlxcdFxcdFxcdHJldHVybjtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkpXFxuIDI4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbiAyODc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbiAyODg6XFx0XFx0aWYgKCFvYmpjZylcXG4gMjg5OlxcdFxcdFxcdHJldHVybjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAyOTI6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4gMjkzOlxcdFxcdC8qXFxuIDI5NDpcXHRcXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJ3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTM6MjMuODYyMDMxNzgyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMTE2MTE5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNlY3Rpb24sIHJlZmxlY3RpbmcgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFN3YXAgQ2FjaGUgRGVsaW1pbmF0aW9uKipcblxuUmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgc3dhcCBjYWNoZSBlbnRyaWVzIGFyZSByZW1vdmVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBJJ20gZmFtaWxpYXIgd2l0aCB0aGlzIGFyZWEsIGJ1dCBsZXQncyByZWZyZXNoIGFuZCBzb2xpZGlmeSB0aGUgdW5kZXJzdGFuZGluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGFzIHdlbGwuIFdlIGtub3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNyaXRpY2FsIGZvciBzd2FwLW91dCBhbmQgcmVjbGFpbSwgc28gSSBuZWVkIHRvIGtub3cgaG93IGl0IGlzIGNvcnJlY3RseSBoYW5kbGVkLiBJ4oCZbGwgc3RhcnQgYnkgcGlucG9pbnRpbmcgdGhvc2UgZnVuY3Rpb25zIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBiZWdpbiB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBmb2xpbyBpcyB1bmxpbmtlZCwgaG93IG1ldGFkYXRhIGlzIHVwZGF0ZWQsIGFuZCB3aGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktQ1BVIGVudmlyb25tZW50LiBJIGtub3cgdGhhdCBmb2xpbyBkZWFsbG9jYXRpb24gY2FuIGJlIGNvbXBsZXggYmVjYXVzZSBvZiBjb25jdXJyZW50IGFjY2VzcyBhbmQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zLiBBbHNvLCBJJ2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIG9yIGVkZ2UgY2FzZXMgd2l0aGluIHRoZSBmdW5jdGlvbnMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucy4gV2UncmUgZGlzY3Vzc2luZyBmaWxlIGJhY2tpbmcgYW5kIHBhZ2UgdGFibGUgc3RydWN0dXJlcywgcmlnaHQ/IFRoYXQncyB3aGF0IEkgd2FudCB0byBuYWlsIGRvd24gYXMgcGFydCBvZiB0aGUgbWVudGFsIG1vZGVsIGluIHRoZSBrZXJuZWwgY29kZS4gTGV0J3Mgc2VlIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEzOjI5LjA3MzY0Njk5M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcF9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRmb2xpb19jbGVhcl9zd2FwY2FjaGUoZm9saW8pO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRpZiAoIWZvbGlvX3N3YXBwZWQpIHtcXG4gMjkzOlxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX3N0YXJ0LCBucl9wYWdlcyk7XFxuIDI5NDpcXHRcXHR9IGVsc2UgaWYgKG5lZWRfZnJlZSkge1xcbiAyOTU6XFx0XFx0XFx0Y2lfb2ZmID0gY2lfc3RhcnQ7XFxuIDI5NjpcXHRcXHRcXHRkbyB7XFxuIDI5NzpcXHRcXHRcXHRcXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX29mZiwgMSk7XFxuIDI5OTpcXHRcXHRcXHR9IHdoaWxlICgrK2NpX29mZiBcXHUwMDNjIGNpX2VuZCk7XFxuIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHR9XFxuIDMwMjpcXHRcXG4gMzAzOlxcdC8qKlxcbiAzMDQ6XFx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDU6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzA2OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAzMDc6XFx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cXG4gMzA4OlxcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDMwOTpcXHQgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxcbiAzMTA6XFx0ICpcXG4gMzExOlxcdCAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cXG4gMzEyOlxcdCAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbiAzMTM6XFx0ICpcXG4gMzE0OlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxcbiAzMTU6XFx0ICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cXG4gMzE2OlxcdCAqL1xcbiAzMTc6XFx0dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDMxODpcXHRcXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbiAzMTk6XFx0e1xcbiAzMjA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gMzIzOlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRpZiAoc3dhcG91dClcXG4gMzI2OlxcdFxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiAzMjk6XFx0fVxcbiAzMzA6XFx0XFxuIDMzMTpcXHQvKipcXG4gMzMyOlxcdCAqIHN3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMzMzpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzM0OlxcdCAqXFxuIDMzNTpcXHQgKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG4gMzM2OlxcdCAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4gMzM3OlxcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXFxuIDMzODpcXHQgKlxcbiAzMzk6XFx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNDA6XFx0ICovXFxuIDM0MTpcXHR2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDM0MjpcXHR7XFxuIDM0MzpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbiAzNDQ6XFx0XFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG4gMzQ3OlxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiAzNDg6XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDM1MTpcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdC8qKlxcbiAzNTQ6XFx0ICogX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8gLSBSZXBsYWNlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEzOjI5LjA3Mzc5NzY1M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA5NTA2MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG1tL3Ztc2Nhbi5jYCBSYWJiaXQgSG9sZSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIEEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIHNvbWV0aGluZyBJIG9mdGVuIGRvIHdoZW4gdHJhY2tpbmcgZG93biB0aGVzZSBzb3J0cyBvZiBwcm9ibGVtcywgaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgY29yZSBhY3Rpb25zLiBJIHdhbnQgdG8gY2hlY2sgb3V0IGBtbS92bXNjYW4uY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgYXJlYSBhcm91bmQgYF9fcmVtb3ZlX21hcHBpbmdgLiBUaGF0IGZ1bmN0aW9uIGlzIGEga2V5IHBsYXllciwgYW5kIHR5cGljYWxseSB3aGVyZSB5b3Ugc2VlIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zIG1hbmlmZXN0LiBHb2luZyB0aGVyZSBmaXJzdCB3aWxsIGhlbHAgbWUgcXVpY2tseSB6ZXJvIGluIG9uIHRoZSBhY3Rpb25zIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTM6MzEuMjgzMzA5Mjc3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODg2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcdGlmICghZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgcmVmY291bnQpKVxcbiA3MjY6XFx0XFx0XFx0Z290byBjYW5ub3RfZnJlZTtcXG4gNzI3OlxcdFxcdC8qIG5vdGU6IGF0b21pY19jbXB4Y2hnIGluIGZvbGlvX3JlZl9mcmVlemUgcHJvdmlkZXMgdGhlIHNtcF9ybWIgKi9cXG4gNzI4OlxcdFxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpIHtcXG4gNzI5OlxcdFxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgcmVmY291bnQpO1xcbiA3MzA6XFx0XFx0XFx0Z290byBjYW5ub3RfZnJlZTtcXG4gNzMxOlxcdFxcdH1cXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbiA3MzQ6XFx0XFx0XFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXFxuIDczNzpcXHRcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbiA3Mzg6XFx0XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxuIDczOTpcXHRcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XFxuIDc0MDpcXHRcXHR9IGVsc2Uge1xcbiA3NDE6XFx0XFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0XFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VmcmVlX2ZvbGlvO1xcbiA3NDQ6XFx0XFx0XFx0LypcXG4gNzQ1OlxcdFxcdFxcdCAqIFJlbWVtYmVyIGEgc2hhZG93IGVudHJ5IGZvciByZWNsYWltZWQgZmlsZSBjYWNoZSBpblxcbiA3NDY6XFx0XFx0XFx0ICogb3JkZXIgdG8gZGV0ZWN0IHJlZmF1bHRzLCB0aHVzIHRocmFzaGluZywgbGF0ZXIgb24uXFxuIDc0NzpcXHRcXHRcXHQgKlxcbiA3NDg6XFx0XFx0XFx0ICogQnV0IGRvbid0IHN0b3JlIHNoYWRvd3MgaW4gYW4gYWRkcmVzcyBzcGFjZSB0aGF0IGlzXFxuIDc0OTpcXHRcXHRcXHQgKiBhbHJlYWR5IGV4aXRpbmcuICBUaGlzIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTM6MzEuMjg0NDA5MjE3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MTc5NTg0Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgU2FmZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnMsIGFuZCBJIHRoaW5rIEkndmUgZ290IGEgc29saWQgY2FzZS5cblxuVGhlIGtleSBjaGFuZ2UgaXMgbW92aW5nIGBfX21lbWNnMV9zd2Fwb3V0YCAqaW5zaWRlKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoaXMgaXMgYmVjYXVzZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AgY2xlYXJzIHRoZSBgc3dhcGNhY2hlYCBmbGFnLCBhbmQgd2UgaGF2ZSBhIHdhcm5pbmcgYFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7YCB3aGljaCBjb3VsZCBiZSB0cmlnZ2VyZWQgaWYgd2UgY2xlYXJlZCB0aGUgc3dhcGNhY2hlIGZsYWcgYmVmb3JlIGNhbGxpbmcgYF9fbWVtY2cxX3N3YXBvdXRgIHRvIHVwZGF0ZSBtZW1jZyBhY2NvdW50aW5nLiBJdCB3YXMgcHJldmlvdXNseSBjYWxsZWQgYmVmb3JlIHRoZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AgaW4gdGhlIG9yaWdpbmFsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYW5kIGluIGBfX3JlbW92ZV9tYXBwaW5nYCwgYF9fbWVtY2cxX3N3YXBvdXRgIHdhcyBjYWxsZWQgYmVmb3JlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgc28gdGhpcyByZWFycmFuZ2VtZW50IGFsaWducyB0aGUgc2VxdWVuY2UuXG5cbk5vdywgY29uY2VybmluZyBLTVNBTiwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayBmb3IgcG90ZW50aWFsIHJpc2tzOlxuXG4xLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlPyoqIE5vcGUuIFRoaXMgaXNuJ3QgdG91Y2hpbmcgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIEl0J3MgaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlLURlcGVuZGVudCBMb2dpYz8qKiBObyB3YXkuIFRoZSBgc3dhcG91dGAgcGFyYW1ldGVyIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGB0cnVlYCBvciBgZmFsc2VgIOKAkyB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkgdGhhdCB3b3VsZCBkZXBlbmQgb24gYW4gdW5pbml0aWFsaXplZCB2YWx1ZS5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0IGlzIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBoZXJlLiBJdCdzIGFsbCBhYm91dCBmb2xpbyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZy5cbjQuICAqKkJvdW5kcyBDaGVja3MvTGVuZ3RoIExvZ2ljPyoqIE5vLiBUaGlzIHBhdGNoIGlzbid0IG1lc3Npbmcgd2l0aCBib3VuZHMgY2hlY2tzIG9yIGludHJvZHVjaW5nIG5ldyBsb2dpYyB0aGF0IG1pZ2h0IGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRocm91Z2ggdGhvc2UgbWVjaGFuaXNtcy5cbjUuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IGF0IEFsbD8qKiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwdXJlbHkgaW52b2x2ZXMgcmVmYWN0b3Jpbmcgc3dhcCBjYWNoZSBsb2dpYyBhbmQgbWVtY2cgc3dhcG91dCwgc28gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJ3QgYSBmYWN0b3IuXG5cbkZ1cnRoZXJtb3JlLCBhbnkgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGxpa2VseSBiZSByZWxhdGVkIHRvIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBmb2xpbyBsaWZlY3ljbGUgaXNzdWVzLiBCdXQgd2UgaGF2ZSBzYWZlZ3VhcmRzIGluIHBsYWNlLiBLQVNBTiB3b3VsZCBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgcHJvYmxlbXMsIExPQ0tERVAgd291bGQgaGFuZGxlIGxvY2tpbmcgaXNzdWVzLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgbGlrZSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCBhbmQgYFZNX0JVR19PTl9GT0xJT2AgcHJvdmlkZSBhZGRpdGlvbmFsIGRlYnVnZ2luZy4gS01TQU4ncyBwdXJwb3NlIGlzIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIG5vbmUgb2YgdGhhdCBpcyBoYXBwZW5pbmcgb3IgZXhwb3NlZCBpbiB0aGlzIHBhdGNoLlxuXG5TbywgdG8gc3VtbWFyaXplOiBUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBmdW5jdGlvbiBieSBhZGRpbmcgYSBib29sZWFuIGFuZCBtb3ZpbmcgdGhlIGNhbGwgdG8gYF9fbWVtY2cxX3N3YXBvdXQoKWAuIFRoZXJlJ3Mgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgYHN3YXBvdXRgIGJvb2xlYW4gaXMgaGFyZGNvZGVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBhc3NlcnRpb25zLiBLTVNBTiBpcyBpcnJlbGV2YW50LiBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYE5lZWRzS01TQU4gZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDA1LCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEzOjU2LjQ2Mzk5ODM4NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXIgY29waWVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBib29sZWFuIGZsYWcgYHN3YXBvdXRgIGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGNvbnN0YW50IGxpdGVyYWxzIChgdHJ1ZWAvYGZhbHNlYCkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIGludm9sdmUgZm9saW8gbGlmZWN5Y2xlIHN0YXRlLCByZWZlcmVuY2UgY291bnRpbmcsIG1lbWNnIGFjY291bnRpbmcsIG9yIGxvY2tpbmcsIHdoaWNoIGFyZSB0cmFja2VkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBhc3NlcnRpb25zLCBMT0NLREVQLCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXIgY29waWVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBib29sZWFuIGZsYWcgYHN3YXBvdXRgIGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGNvbnN0YW50IGxpdGVyYWxzIChgdHJ1ZWAvYGZhbHNlYCkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIGludm9sdmUgZm9saW8gbGlmZWN5Y2xlIHN0YXRlLCByZWZlcmVuY2UgY291bnRpbmcsIG1lbWNnIGFjY291bnRpbmcsIG9yIGxvY2tpbmcsIHdoaWNoIGFyZSB0cmFja2VkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBhc3NlcnRpb25zLCBMT0NLREVQLCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhjgk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 13:05:34 +0000 UTC FinishedAt: 2026-09-02 13:13:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "88297631d4d42f6004cb39c0ba3da7d2d10a616f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "MEMCG", "MEMCG_V1" ], "series_id": "a7e0f517-930a-41c6-b05d-2b21a2ae047d" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__swap_cache_del_folio", "swap_cache_del_folio" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVyIGNvcGllcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYm9vbGVhbiBmbGFnIGBzd2Fwb3V0YCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBjb25zdGFudCBsaXRlcmFscyAoYHRydWVgL2BmYWxzZWApLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyB3b3VsZCBpbnZvbHZlIGZvbGlvIGxpZmVjeWNsZSBzdGF0ZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1jZyBhY2NvdW50aW5nLCBvciBsb2NraW5nLCB3aGljaCBhcmUgdHJhY2tlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYXNzZXJ0aW9ucywgTE9DS0RFUCwgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGxvZ2ljIGluIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gYW5kIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCByZXBvc2l0aW9uaW5nIHRoZSBjZ3JvdXAgdjEgbWVtc3cgY2hhcmdlIHRyYW5zZmVyIChfX21lbWNnMV9zd2Fwb3V0KSBiZWZvcmUgcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdG8gYXZvaWQgcmVmZXJlbmNpbmcgY2xlYXJlZCBzd2FwIG1ldGFkYXRhLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdHMgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwcGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDcwZmZmMGY0YTYyZmExYjQwMTFiYjZhYzUzY2JmNmE3NjA3MTNkZTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIFNlcCAyIDEzOjA3OjU2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgJiM0MzszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4mIzQzO1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgJiM0Mzs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4mIzQzO1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjk5OTg1MjA4YjUyOWIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiw2ICYjNDM7MzA2LDcgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXG4gICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cbiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiAgKlxuICAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxuQEAgLTMxNCwxMyAmIzQzOzMxNSwxNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cbiAgKi9cbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbiYjNDM7XHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuLVx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3dhcG91dClcbiYjNDM7XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiYjNDM7XG4mIzQzO1x0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIH1cbiBcbiAvKipcbkBAIC0zMzksNyAmIzQzOzM0NCw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpO1xuJiM0MztcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG4gXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGI0YzliOGYzZGZlOTkuLmFmN2RmYTkwNWNiNTAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC03MzUsOCAmIzQzOzczNSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcbiBcdFx0aWYgKHJlY2xhaW1lZCBcdTAwMjZcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcbiBcdFx0XHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xuLVx0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4tXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpO1xuJiM0MztcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG4gXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7LAogICAgJiMzNDtNRU1DRyYjMzQ7LAogICAgJiMzNDtNRU1DR19WMSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OywKICAgICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgc3dhcCBjYWNoZSBkZWxldGlvbiBsb2dpYyBpbiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIGFuZCBzd2FwX2NhY2hlX2RlbF9mb2xpbywgcmVwb3NpdGlvbmluZyB0aGUgY2dyb3VwIHYxIG1lbXN3IGNoYXJnZSB0cmFuc2ZlciAoX19tZW1jZzFfc3dhcG91dCkgYmVmb3JlIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIHRvIGF2b2lkIHJlZmVyZW5jaW5nIGNsZWFyZWQgc3dhcCBtZXRhZGF0YS4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RzIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcHBpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3MGZmZjBmNGE2MmZhMWI0MDExYmI2YWM1M2NiZjZhNzYwNzEzZGU3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBTZXAgMiAxMzowNzo1NiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaAppbmRleCAwYjVkNTA3NzM5YmNiLi5iM2I1NGMyODkyOWExIDEwMDY0NAotLS0gYS9tbS9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oCkBAIC0zMTksNyAmIzQzOzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyk7CiYjNDM7CQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csCiYjNDM7CQkJICAgIGJvb2wgc3dhcG91dCk7CiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkJc3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTsKIApAQCAtNDUyLDcgJiM0Mzs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKLQkJc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdykKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csCiYjNDM7CQlib29sIHN3YXBvdXQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuYwppbmRleCAzMDU4NzdlMWY0ZDdiLi45OTk4NTIwOGI1MjliIDEwMDY0NAotLS0gYS9tbS9zd2FwX3N0YXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jCkBAIC0zMDYsNiAmIzQzOzMwNiw3IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIEBmb2xpbzogVGhlIGZvbGlvLgogICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by4KICAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuCiYjNDM7ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby4KICAqCiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuCiAgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LgpAQCAtMzE0LDEzICYjNDM7MzE1LDE3IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuCiAgKi8KIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQkJICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dCkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCi0JX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogCW5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7CiAJbHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7CiYjNDM7CiYjNDM7CWlmIChzd2Fwb3V0KQomIzQzOwkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwomIzQzOwomIzQzOwlfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7CiB9CiAKIC8qKgpAQCAtMzM5LDcgJiM0MzszNDQsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKIAogCWNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7Ci0JX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTsKJiM0MzsJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKIAlmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiNGM5YjhmM2RmZTk5Li5hZjdkZmE5MDVjYjUwIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNzM1LDggJiM0Mzs3MzUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAKIAkJaWYgKHJlY2xhaW1lZCAmYW1wOyZhbXA7ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpCiAJCQlzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpOwotCQlfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7Ci0JCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3cpOwomIzQzOwkJX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7CiAJCXN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTsKIAl9IGVsc2UgewogCQl2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDk5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBkaWZmcywgZm9jdXNpbmcgb24gdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU3dhcCBQYXRjaCoqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGlzIHRoaW5nLiYjMzQ7IEkgc2VlIGl0JiMzOTtzIHRvdWNoaW5nIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoYXQgdHJpbyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpbXBhY3Qgb24gaG93IHdlIGhhbmRsZSBzd2FwcGluZyBhbmQgcGFnZSByZWNsYW1hdGlvbiwgd2hpY2ggaXMsIG9idmlvdXNseSwgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kICp3aHkqIHRoZXNlIHNwZWNpZmljIGZpbGVzIGFyZSBiZWluZyB0b3VjaGVkIGFuZCB3aGF0JiMzOTtzIGJlaW5nIGFsdGVyZWQuIEkmIzM5O2xsIG5lZWQgdG8gcmVhZCB0aGVtLgoKU3BlY2lmaWNhbGx5LCBJIHRoaW5rIEkmIzM5O2xsIHN0YXJ0IHdpdGggYG1tL3N3YXBfc3RhdGUuY2AgYW5kIGBtbS92bXNjYW4uY2AgZmlyc3QsIGJlY2F1c2UgYG1tL3N3YXAuaGAgaXMgbGlrZWx5IHJlbGF0ZWQsIGJ1dCB0aGUgcmVhbCBsb2dpYyBpcyBpbiB0aGUgb3RoZXIgdHdvLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDMwMDpcdFx0fVxuIDMwMTpcdH1cbiAzMDI6XHRcbiAzMDM6XHQvKipcbiAzMDQ6XHQgKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG4gMzA1Olx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbiAzMDY6XHQgKiBAZm9saW86IFRoZSBmb2xpby5cbiAzMDc6XHQgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuIDMwODpcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzA5Olx0ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiAzMTA6XHQgKlxuIDMxMTpcdCAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cbiAzMTI6XHQgKiBUaGlzIHdvbiYjMzk7dCBwdXQgdGhlIGZvbGlvJiMzOTtzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxuIDMxMzpcdCAqXG4gMzE0Olx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlXG4gMzE1Olx0ICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cbiAzMTY6XHQgKi9cbiAzMTc6XHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAzMTg6XHRcdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuIDMxOTpcdHtcbiAzMjA6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gMzIxOlx0XG4gMzIyOlx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xuIDMyMzpcdFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XG4gMzI0Olx0XG4gMzI1Olx0XHRpZiAoc3dhcG91dClcbiAzMjY6XHRcdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuIDMyNzpcdFxuIDMyODpcdFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIDMyOTpcdH1cbiAzMzA6XHRcbiAzMzE6XHQvKipcbiAzMzI6XHQgKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMzMzpcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxuIDMzNDpcdCAqXG4gMzM1Olx0ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG4gMzM2Olx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuIDMzNzpcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXG4gMzM4Olx0ICpcbiAzMzk6XHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzQwOlx0ICovXG4gMzQxOlx0dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIDM0MjpcdHtcbiAzNDM6XHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4gMzQ0Olx0XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gMzQ1Olx0XG4gMzQ2Olx0XHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuIDM0NzpcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gMzQ4Olx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiAzNDk6XHRcbiAzNTA6XHRcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG4gMzUxOlx0fVxuIDM1MjpcdFxuIDM1MzpcdC8qKlxuIDM1NDpcdCAqIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvIC0gUmVwbGFjZSBhIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM1NTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzU2Olx0ICogQG9sZDogVGhlIG9sZCBmb2xpbyB0byBiZSByZXBsYWNlZC5cbiAzNTc6XHQgKiBAbmV3OiBUaGUgbmV3IGZvbGlvLlxuIDM1ODpcdCAqXG4gMzU5Olx0ICogUmVwbGFjZSBhbiBleGlzdGluZyBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZSB3aXRoIGEgbmV3IGZvbGlvLiBUaGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Mzk3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvcmUqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgbWVtb3J5IGlzc3VlLCBhbmQgSSBzdXNwZWN0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gaG93IG1hcHBpbmdzIGFyZSBoYW5kbGVkIGR1cmluZyBzY2FubmluZyBpbiB0aGUgdmlydHVhbCBtZW1vcnkgc3Vic3lzdGVtLiBMZXQmIzM5O3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIGZ1bmN0aW9uOiBgX19yZW1vdmVfbWFwcGluZ2AuIEkga25vdyB0aGlzIGlzIGxvY2F0ZWQgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgdGhlIGtlcm5lbCYjMzk7cyB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB3aGVyZSBtYXBwaW5ncyBhcmUgYWN0dWFsbHkgdW5tYXBwZWQgZnJvbSBhIHByb2Nlc3PigJlzIGFkZHJlc3Mgc3BhY2UgZHVyaW5nIHBhZ2UgcmVjbGFpbS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb2RlIGluIGBfX3JlbW92ZV9tYXBwaW5nYCBhbmQgc3Vycm91bmRpbmcgZnVuY3Rpb25zIHdpdGhpbiB0aGF0IGZpbGUgdG8gc2VlIGhvdyBpdCBvcGVyYXRlcy4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgdGhlIHNlcXVlbmNlIG9mIGV2ZW50cywgYW5kIHdoZXJlIGFuZCBob3cgdGhlIG1hcHBpbmcgcmVtb3ZhbCBpcyBoYW5kbGVkIHRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBwb3RlbnRpYWwgaXNzdWUuIEkgd2lsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgYW55IHJhY2UgY29uZGl0aW9ucywgbG9ja2luZyBpc3N1ZXMsIG9yIHN1YnRsZSBsb2dpYyBlcnJvcnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjA6XHRcdCAqXG4gNzIxOlx0XHQgKiBOb3RlIHRoYXQgaWYgdGhlIGRpcnR5IGZsYWcgaXMgYWx3YXlzIHNldCB2aWEgZm9saW9fbWFya19kaXJ0eSxcbiA3MjI6XHRcdCAqIGFuZCB0aHVzIHVuZGVyIHRoZSBpX3BhZ2VzIGxvY2ssIHRoZW4gdGhpcyBvcmRlcmluZyBpcyBub3QgcmVxdWlyZWQuXG4gNzIzOlx0XHQgKi9cbiA3MjQ6XHRcdHJlZmNvdW50ID0gMSAmIzQzOyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gNzI1Olx0XHRpZiAoIWZvbGlvX3JlZl9mcmVlemUoZm9saW8sIHJlZmNvdW50KSlcbiA3MjY6XHRcdFx0Z290byBjYW5ub3RfZnJlZTtcbiA3Mjc6XHRcdC8qIG5vdGU6IGF0b21pY19jbXB4Y2hnIGluIGZvbGlvX3JlZl9mcmVlemUgcHJvdmlkZXMgdGhlIHNtcF9ybWIgKi9cbiA3Mjg6XHRcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpIHtcbiA3Mjk6XHRcdFx0Zm9saW9fcmVmX3VuZnJlZXplKGZvbGlvLCByZWZjb3VudCk7XG4gNzMwOlx0XHRcdGdvdG8gY2Fubm90X2ZyZWU7XG4gNzMxOlx0XHR9XG4gNzMyOlx0XG4gNzMzOlx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4gNzM0Olx0XHRcdHN3cF9lbnRyeV90IHN3YXAgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIDczNTpcdFxuIDczNjpcdFx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxuIDczNzpcdFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4gNzM4Olx0XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xuIDczOTpcdFx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4gNzQwOlx0XHR9IGVsc2Uge1xuIDc0MTpcdFx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuIDc0MjpcdFxuIDc0MzpcdFx0XHRmcmVlX2ZvbGlvID0gbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VmcmVlX2ZvbGlvO1xuIDc0NDpcdFx0XHQvKlxuIDc0NTpcdFx0XHQgKiBSZW1lbWJlciBhIHNoYWRvdyBlbnRyeSBmb3IgcmVjbGFpbWVkIGZpbGUgY2FjaGUgaW5cbiA3NDY6XHRcdFx0ICogb3JkZXIgdG8gZGV0ZWN0IHJlZmF1bHRzLCB0aHVzIHRocmFzaGluZywgbGF0ZXIgb24uXG4gNzQ3Olx0XHRcdCAqXG4gNzQ4Olx0XHRcdCAqIEJ1dCBkb24mIzM5O3Qgc3RvcmUgc2hhZG93cyBpbiBhbiBhZGRyZXNzIHNwYWNlIHRoYXQgaXNcbiA3NDk6XHRcdFx0ICogYWxyZWFkeSBleGl0aW5nLiAgVGhpcyBpcyBub3QganVzdCBhbiBvcHRpbWl6YXRpb24sXG4gNzUwOlx0XHRcdCAqIGlub2RlIHJlY2xhaW0gbmVlZHMgdG8gZW1wdHkgb3V0IHRoZSByYWRpeCB0cmVlIG9yXG4gNzUxOlx0XHRcdCAqIHRoZSBub2RlcyBhcmUgbG9zdC4gIERvbiYjMzk7dCBwbGFudCBzaGFkb3dzIGJlaGluZCBpdHNcbiA3NTI6XHRcdFx0ICogYmFjay5cbiA3NTM6XHRcdFx0ICpcbiA3NTQ6XHRcdFx0ICogV2UgYWxzbyBkb24mIzM5O3Qgc3RvcmUgc2hhZG93cyBmb3IgREFYIG1hcHBpbmdzIGJlY2F1c2UgdGhlXG4gNzU1Olx0XHRcdCAqIG9ubHkgcGFnZSBjYWNoZSBmb2xpb3MgZm91bmQgaW4gdGhlc2UgYXJlIHplcm8gcGFnZXNcbiA3NTY6XHRcdFx0ICogY292ZXJpbmcgaG9sZXMsIGFuZCBiZWNhdXNlIHdlIGRvbiYjMzk7dCB3YW50IHRvIG1peCBEQVhcbiA3NTc6XHRcdFx0ICogZXhjZXB0aW9uYWwgZW50cmllcyBhbmQgc2hhZG93IGV4Y2VwdGlvbmFsIGVudHJpZXMgaW4gdGhlXG4gNzU4Olx0XHRcdCAqIHNhbWUgYWRkcmVzc19zcGFjZS5cbiA3NTk6XHRcdFx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyMwoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgdGhpbmsgdGhpcyB0aHJvdWdoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGZ1bmN0aW9uLiBTbywgdGhlIGxvZ2ljYWwgZmlyc3Qgc3RlcCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWFyY2ggdGhlIGNvZGViYXNlIHRvIHNlZSB3aGVyZSBlbHNlIGl0JiMzOTtzIGJlaW5nIGNhbGxlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBgZ3JlcGAgZm9yIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IGNvbnRleHRzIEkgbmVlZCB0byBjb25zaWRlci4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzaXRlcyBpcyBrZXkgdG8gZmlndXJpbmcgb3V0IHRoZSBvdmVyYWxsIGltcGFjdCBhbmQgd2h5IGl0IG1pZ2h0IGJlIHByb2JsZW1hdGljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fc3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC0zMjAtXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIyLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuLS1cbm1tL3N3YXAuaD00NTE9c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcC5oLTQ1NC1cbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NTYtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcbm1tL3N3YXBfc3RhdGUuYzozMDQ6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMTYtICovXG5tbS9zd2FwX3N0YXRlLmM6MzE3OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcF9zdGF0ZS5jLTMxOC1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMzQtICpcbm1tL3N3YXBfc3RhdGUuYzozMzU6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXG5tbS9zd2FwX3N0YXRlLmMtMzM2LSAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzQxPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwX3N0YXRlLmMtMzQ2LVx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbm1tL3N3YXBfc3RhdGUuYzozNDc6XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwsIGZhbHNlKTtcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbi0tXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTE2MTgtXHRcdCAqIHNsb3RzIHdpbGwgYmUgZnJlZWQgd2hlbiBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZVxubW0vc3dhcGZpbGUuYzoxNjE5Olx0XHQgKiAoX19zd2FwX2NhY2hlX2RlbF9mb2xpbykuXG5tbS9zd2FwZmlsZS5jLTE2MjAtXHRcdCAqL1xuLS1cbm1tL3Ztc2Nhbi5jPTY4Mj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzM3LVx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG5tbS92bXNjYW4uYzo3Mzg6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xubW0vdm1zY2FuLmMtNzM5LVx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBSZWxvY2F0aW9uIG9mIGBfX21lbWNnMV9zd2Fwb3V0YCoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGNoYW5nZS4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpczogd2hhdCBleGFjdGx5ICppcyogYF9fbWVtY2cxX3N3YXBvdXRgLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgKndoeSogd2FzIGl0IGRlZW1lZCBuZWNlc3NhcnkgdG8gbW92ZSBpdCBpbnRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYD8gVGhpcyBoYXMgdG8gaGF2ZSBzb21lIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBmb3IgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gU29tZXRoaW5nIGNoYW5nZWQsIGFuZCBJIG5lZWQgdG8gZ3Jhc3AgdGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBhcmNoaXRlY3R1cmFsIHNoaWZ0LiBGaXJzdCwgSSB3aWxsIGxvb2sgZm9yIGhvdyBgX19tZW1jZzFfc3dhcG91dGAgaXMgZGVmaW5lZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTE9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NTk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2My1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjQ6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjUtXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTQ5PXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTY4Olx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2OS1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE3PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjUtXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjY6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcxNTYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ2FjaGUgRGVsZXRpb24gYW5kIE1lbW9yeSBDb250cm9sIEdyb3VwIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIG9yZGVyaW5nLCBsb2NraW5nLCBhbmQgYmVoYXZpb3IgY2hhbmdlIGlzIHBsYXlpbmcgb3V0LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpZyBpbnRvIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCBhbmQgdGhlbiBgX19tZW1jZzFfc3dhcG91dGAuIEkgd2FudCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIGxvY2tpbmcgbWVjaGFuaXNtcyBhbmQgdGhlIHNwZWNpZmljIG9yZGVyIGluIHdoaWNoIHRoaW5ncyBhcmUgaGFwcGVuaW5nLiBUbyBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSByZWFkaW5nIHRoZSBzb3VyY2UgY29kZSwgc3BlY2lmaWNhbGx5IGBtbS9zd2FwX3N0YXRlLmNgLCBhbmQgemVybyBpbiBvbiB0aGUgdmljaW5pdHkgb2YgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzIG9mIHdoYXQmIzM5O3MgZ29pbmcgb24uIEkmIzM5O20gYW50aWNpcGF0aW5nIHRoYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucyB3aWxsIHJldmVhbCBob3cgdGhlIHN3YXAgY2FjaGUgaW50ZXJhY3RzIHdpdGggdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIChtZW1jZykgc3dhcG91dCBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBuaXR0eS1ncml0dHkgZGV0YWlscyB0byBpZGVudGlmeSBleGFjdGx5IHdoZXJlIHRoZSBhbHRlcmF0aW9uIGluIGJlaGF2aW9yIGhhcyBzdXJmYWNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zd2FwX3N0YXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1MDpcdFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiAyNTE6XHRcbiAyNTI6XHRcdF9fc3dhcF9jYWNoZV9kb19hZGRfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSk7XG4gMjUzOlx0XHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCBucl9wYWdlcyk7XG4gMjU0Olx0XHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIDI1NTpcdH1cbiAyNTY6XHRcbiAyNTc6XHRzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gMjU4Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIDI1OTpcdFx0XHRcdFx0ICAgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbiAyNjA6XHR7XG4gMjYxOlx0XHR1bnNpZ25lZCBsb25nIG9sZF90YjtcbiAyNjI6XHRcdHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaTtcbiAyNjM6XHRcdHVuc2lnbmVkIGludCBjaV9zdGFydCwgY2lfb2ZmLCBjaV9lbmQ7XG4gMjY0Olx0XHRib29sIGZvbGlvX3N3YXBwZWQgPSBmYWxzZSwgbmVlZF9mcmVlID0gZmFsc2U7XG4gMjY1Olx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIDI2NjpcdFxuIDI2NzpcdFx0Vk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7XG4gMjY4Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIDI2OTpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbiAyNzA6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiAyNzE6XHRcbiAyNzI6XHRcdHNpID0gX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpO1xuIDI3MzpcdFx0Y2lfc3RhcnQgPSBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpO1xuIDI3NDpcdFx0Y2lfZW5kID0gY2lfc3RhcnQgJiM0MzsgbnJfcGFnZXM7XG4gMjc1Olx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyNzY6XHRcdGRvIHtcbiAyNzc6XHRcdFx0b2xkX3RiID0gX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbiAyNzg6XHRcdFx0V0FSTl9PTl9PTkNFKCFzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fFxuIDI3OTpcdFx0XHRcdCAgICAgc3dwX3RiX3RvX2ZvbGlvKG9sZF90YikgIT0gZm9saW8pO1xuIDI4MDpcdFx0XHRpZiAoX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpXG4gMjgxOlx0XHRcdFx0Zm9saW9fc3dhcHBlZCA9IHRydWU7XG4gMjgyOlx0XHRcdGVsc2VcbiAyODM6XHRcdFx0XHRuZWVkX2ZyZWUgPSB0cnVlO1xuIDI4NDpcdFx0XHQvKiBJZiBzaGFkb3cgaXMgTlVMTCwgd2Ugc2V0IGFuIGVtcHR5IHNoYWRvdy4gKi9cbiAyODU6XHRcdFx0X19zd2FwX3RhYmxlX3NldChjaSwgY2lfb2ZmLCBzaGFkb3dfdG9fc3dwX3RiKHNoYWRvdyxcbiAyODY6XHRcdFx0XHRcdCBfX3N3cF90Yl9nZXRfZmxhZ3Mob2xkX3RiKSkpO1xuIDI4NzpcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAyODg6XHRcbiAyODk6XHRcdGZvbGlvLVx1MDAzZXN3YXAudmFsID0gMDtcbiAyOTA6XHRcdGZvbGlvX2NsZWFyX3N3YXBjYWNoZShmb2xpbyk7XG4gMjkxOlx0XG4gMjkyOlx0XHRpZiAoIWZvbGlvX3N3YXBwZWQpIHtcbiAyOTM6XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcbiAyOTQ6XHRcdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XG4gMjk1Olx0XHRcdGNpX29mZiA9IGNpX3N0YXJ0O1xuIDI5NjpcdFx0XHRkbyB7XG4gMjk3Olx0XHRcdFx0aWYgKCFfX3N3cF90Yl9nZXRfY291bnQoX19zd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKSkpXG4gMjk4Olx0XHRcdFx0XHRfX3N3YXBfY2x1c3Rlcl9mcmVlX2VudHJpZXMoc2ksIGNpLCBjaV9vZmYsIDEpO1xuIDI5OTpcdFx0XHR9IHdoaWxlICgmIzQzOyYjNDM7Y2lfb2ZmIFx1MDAzYyBjaV9lbmQpO1xuIDMwMDpcdFx0fVxuIDMwMTpcdH1cbiAzMDI6XHRcbiAzMDM6XHQvKipcbiAzMDQ6XHQgKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG4gMzA1Olx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cbiAzMDY6XHQgKiBAZm9saW86IFRoZSBmb2xpby5cbiAzMDc6XHQgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxuIDMwODpcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXG4gMzA5Olx0ICogQHN3YXBvdXQ6IHdoZXRoZXIgdGhpcyBvcGVyYXRpb24gc3dhcHMgb3V0IHRoZSBmb2xpby5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODU3MQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIC0gdjEqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoIHRoaXMgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0JiMzOTtzIGEga2V5IHBhcnQgb2YgbWVtb3J5IGNvbnRyb2wsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIHN3YXBwaW5nLiBSaWdodCwgbGV0JiMzOTtzIHB1bGwgdXAgdGhlIHNvdXJjZSBjb2RlIGZvciBgbW0vbWVtY29udHJvbC12MS5jYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaXMgbGlrZWx5IGhhcHBlbmluZy4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGUgbWVtb3J5IGNncm91cHMgYW5kIGhvdyBpdCYjMzk7cyB0cmlnZ2VyaW5nIHRoZSBzd2FwLW91dCBiZWhhdmlvci4gSSYjMzk7bSBndWVzc2luZyB0aGVyZSYjMzk7cyBzb21lIGtpbmQgb2YgdGhyZXNob2xkIG9yIGFsZ29yaXRobSBhdCBwbGF5IHRoYXQmIzM5O3MgcHVzaGluZyBtZW1vcnkgcGFnZXMgdG8gc3dhcCB3aGVuIGEgY2dyb3VwIGhpdHMgYSBjZXJ0YWluIGxpbWl0IG9yIGhhcyBvdGhlciBtZW1vcnkgcHJlc3N1cmUuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCBzdGFydCB0cmFjaW5nIHRoZSBjb2RlIGV4ZWN1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI1NTpcdH1cbiAyNTY6XHRcbiAyNTc6XHQjaWZkZWYgQ09ORklHX1NXQVBcbiAyNTg6XHQvKipcbiAyNTk6XHQgKiBfX21lbWNnMV9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcFxuIDI2MDpcdCAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4gMjYxOlx0ICogQGNpOiB0aGUgbG9ja2VkIHN3YXAgY2x1c3RlciBob2xkaW5nIHRoZSBzd2FwIGVudHJpZXNcbiAyNjI6XHQgKlxuIDI2MzpcdCAqIFRyYW5zZmVyIHRoZSBtZW1zdyBjaGFyZ2Ugb2YgQGZvbGlvIHRvIHRoZSBzd2FwIGVudHJ5IHN0b3JlZCBpblxuIDI2NDpcdCAqIGZvbGlvLVx1MDAzZXN3YXAuXG4gMjY1Olx0ICpcbiAyNjY6XHQgKiBDb250ZXh0OiBmb2xpbyBtdXN0IGJlIGlzb2xhdGVkLCB1bm1hcHBlZCwgbG9ja2VkIGFuZCBpcyBqdXN0IGFib3V0IHRvXG4gMjY3Olx0ICogYmUgZnJlZWQsIGFuZCBjYWxsZXIgbXVzdCBkaXNhYmxlIElSUXMgYW5kIGhvbGQgdGhlIHN3YXAgY2x1c3RlciBsb2NrLlxuIDI2ODpcdCAqL1xuIDI2OTpcdHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxuIDI3MDpcdHtcbiAyNzE6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgKnN3YXBfbWVtY2c7XG4gMjcyOlx0XHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2c7XG4gMjczOlx0XHR1bnNpZ25lZCBpbnQgbnJfZW50cmllcztcbiAyNzQ6XHRcbiAyNzU6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gMjc2Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xuIDI3NzpcdFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuIDI3ODpcdFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcbiAyNzk6XHRcbiAyODA6XHRcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXG4gMjgxOlx0XHRcdHJldHVybjtcbiAyODI6XHRcbiAyODM6XHRcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpKVxuIDI4NDpcdFx0XHRyZXR1cm47XG4gMjg1Olx0XG4gMjg2Olx0XHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcbiAyODc6XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghb2JqY2csIGZvbGlvKTtcbiAyODg6XHRcdGlmICghb2JqY2cpXG4gMjg5Olx0XHRcdHJldHVybjtcbiAyOTA6XHRcbiAyOTE6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyOTI6XHRcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XG4gMjkzOlx0XHQvKlxuIDI5NDpcdFx0ICogSW4gY2FzZSB0aGUgbWVtY2cgb3duaW5nIHRoZXNlIHBhZ2VzIGhhcyBiZWVuIG9mZmxpbmVkIGFuZCBkb2VzbiYjMzk7dFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDQ2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMzY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9saW8gU3dhcCBDYWNoZSBSZW1vdmFsIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjaGFuZ2UgaW4gaG93IHN3YXAgY2FjaGUgZW50cmllcyBhcmUgcmVtb3ZlZCwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIG1lbWNnIGFjY291bnRpbmcuIFRoZSBjb3JlIG9mIG15IGludGVyZXN0IGxpZXMgaW4gaG93IGBfX21lbWNnMV9zd2Fwb3V0YCBpbnRlcmFjdHMgd2l0aCB0aGUgZm9saW8mIzM5O3MgYHN3YXBgIGZpZWxkIGFuZCB0aGUgYHN3YXBjYWNoZWAgc3RhdGUuCgpJbml0aWFsbHksIEkmIzM5O20gbm90aW5nIHRoZSBwcmVzZW5jZSBvZiBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtgIHdpdGhpbiBgX19tZW1jZzFfc3dhcG91dGAsIGhpZ2hsaWdodGluZyB0aGUgaW1wb3J0YW5jZSBvZiB0aGUgYHN3YXBjYWNoZWAgZmxhZyBiZWZvcmUgaW52b2tpbmcgbWVtY2cgc3dhcG91dC4gVGhlIGBmb2xpby0mZ3Q7c3dhcGAgZmllbGQgaXMgY2xlYXJseSB1c2VkIHdpdGhpbiBgX19tZW1jZzFfc3dhcG91dGAsIHNldHRpbmcgdGhlIHN0YWdlIGZvciBwb3RlbnRpYWwgaW5jb25zaXN0ZW5jaWVzIGlmIHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGlzbiYjMzk7dCBjb3JyZWN0LiBJJiMzOTttIHNlZWluZyB0aGF0IGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCwgd2hpY2ggaXMgY2FsbGVkIHdpdGhpbiB0aGUgcmVtb3ZhbCBwcm9jZXNzLCB6ZXJvZXMgb3V0IGBmb2xpby0mZ3Q7c3dhcC52YWxgIGFuZCBjbGVhcnMgdGhlIHN3YXBjYWNoZSBmbGFnLCB3aGljaCB0ZWxscyBtZSB0aGlzIGlzIHdoZXJlIHRoZSAqYWN0dWFsKiByZW1vdmFsIG9mIHRoZSBzd2FwIGNhY2hlIGVudHJ5IG9jY3Vycy4KClByaW9yIHRvIHRoaXMgY2hhbmdlLCB0aGUgY2FsbCBzZXF1ZW5jZSB3YXMgd2VsbC1kZWZpbmVkOiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgY2FsbGVkIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gQWxzbywgSSYjMzk7bSB0cmFjaW5nIGJhY2sgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBicm9hZGVyIFZNIHNjYW5uaW5nIHByb2Nlc3MsIHNlZWluZyB0aGF0IGBfX3JlbW92ZV9tYXBwaW5nYCBjYWxsZWQgYm90aCBgX19tZW1jZzFfc3dhcG91dGAgYW5kIHRoZW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLiBTcGVjaWZpY2FsbHkgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGNhbGxlZCB0aGUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGZ1bmN0aW9uICpmaXJzdCosIHRoZW4gdGhlIHN0YXRpc3RpY2FsIHVwZGF0ZXMuCgpOb3csIHRoaW5ncyBhcmUgZGlmZmVyZW50LiBgX19tZW1jZzFfc3dhcG91dGAgaXMgKmluc2lkZSogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGJlZm9yZSB0aGUgY29yZSByZW1vdmFsIGZ1bmN0aW9uLCBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AuIEFuZCB3aGVuIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgY2FsbGVkIGZyb20gdGhlIGZvbGlvLCB0aGUgYHN3YXBvdXRgIGZsYWcgaXMgZmFsc2UuIFRoaXMgaXMgdGhlIGNydXggb2YgdGhlIG1vZGlmaWNhdGlvbi4gVGhpcyByYWlzZXMgc29tZSBxdWVzdGlvbnMgYWJvdXQgdGhlIG1lbWNnIGFjY291bnRpbmcgZmxvdyBpbiB0aGUgbmV3IHNldHVwLgoKVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBsb2dpYyBpcyBub3cgdXNlZC4gSSYjMzk7bGwgdXNlIGBncmVwYCB0byBsb29rIGZvciBvdGhlciBjYWxsIHNpdGVzIGZvciBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUsIHRvIHNlZSB3aGF0IGltcGFjdCB0aGUgY2hhbmdlIG9mIGV4ZWN1dGlvbiBoYXMgb24gdGhlIHdob2xlIHN5c3RlbS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyB0aHJlYWQtc2FmZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSByYWNlIGNvbmRpdGlvbnMgd2l0aCB0aGUgc3dhcCBjYWNoZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3dhcF9jYWNoZV9kZWxfZm9saW8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LWZhaWx1cmUuYz0xMTI1PXN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXG4tLVxubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTI5LVxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMTMwOlx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vbWVtb3J5LWZhaWx1cmUuYy0xMTMxLVxuLS1cbm1tL21lbW9yeS5jPTQ4NTc9dm1fZmF1bHRfdCBkb19zd2FwX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNTA4OS1cdFx0aWYgKCFXQVJOX09OX09OQ0UoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpKVxubW0vbWVtb3J5LmM6NTA5MDpcdFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9tZW1vcnkuYy01MDkxLVx0XHRnb3RvIG91dF9ub21hcDtcbi0tXG5tbS9zaG1lbS5jPTE4MDg9aW50IHNobWVtX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3NobWVtLmMtMTk0MC1cdFx0Lypcbm1tL3NobWVtLmM6MTk0MTpcdFx0ICogVGhlIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYmVsb3cgY291bGQgYmUgbGVmdCBmb3Jcbm1tL3NobWVtLmMtMTk0Mi1cdFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSYjMzk7cyBmb2xpb19mcmVlX3N3YXAoKSB0byBkaXNwb3NlIG9mO1xuLS1cbm1tL3NobWVtLmMtMTk0Ni1cdFx0ICovXG5tbS9zaG1lbS5jOjE5NDc6XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3NobWVtLmMtMTk0OC1cdFx0Z290byByZWRpcnR5O1xuLS1cbm1tL3NobWVtLmM9MjM1MD1zdGF0aWMgdm9pZCBzaG1lbV9zZXRfZm9saW9fc3dhcGluX2Vycm9yKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsXG4tLVxubW0vc2htZW0uYy0yMzY3LVx0Zm9saW9fcHV0X3N3YXAoZm9saW8sIE5VTEwpO1xubW0vc2htZW0uYzoyMzY4Olx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc2htZW0uYy0yMzY5LVx0Lypcbi0tXG5tbS9zaG1lbS5jPTI0NTU9c3RhdGljIGludCBzaG1lbV9zd2FwaW5fZm9saW8oc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcbi0tXG5tbS9zaG1lbS5jLTI1OTctXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XG5tbS9zaG1lbS5jOjI1OTg6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zaG1lbS5jLTI1OTktXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcbi0tXG5tbS9zd2FwLmg9MzEzPXZvaWQgKnN3YXBfY2FjaGVfZ2V0X3NoYWRvdyhzd3BfZW50cnlfdCBlbnRyeSk7XG5tbS9zd2FwLmg6MzE0OnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG5tbS9zd2FwLmgtMzE1LXN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG5tbS9zd2FwLmgtMzIwLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5tbS9zd2FwLmg6MzIxOnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxubW0vc3dhcC5oLTMyMi1cdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbi0tXG5tbS9zd2FwLmg9NDQ2PXN0YXRpYyBpbmxpbmUgdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KVxuLS1cbm1tL3N3YXAuaC00NTAtXG5tbS9zd2FwLmg6NDUxOnN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vc3dhcC5oLTQ1Mi17XG4tLVxubW0vc3dhcC5oLTQ1NC1cbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbm1tL3N3YXAuaC00NTYtXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXG4tLVxubW0vc3dhcF9zdGF0ZS5jPTI1Nz1zdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcbm1tL3N3YXBfc3RhdGUuYzozMDQ6ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMTYtICovXG5tbS9zd2FwX3N0YXRlLmM6MzE3OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxubW0vc3dhcF9zdGF0ZS5jLTMxOC1cdFx0XHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMzEtLyoqXG5tbS9zd2FwX3N0YXRlLmM6MzMyOiAqIHN3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXG5tbS9zd2FwX3N0YXRlLmMtMzMzLSAqIEBmb2xpbzogVGhlIGZvbGlvLlxubW0vc3dhcF9zdGF0ZS5jLTMzNC0gKlxubW0vc3dhcF9zdGF0ZS5jOjMzNTogKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcbm1tL3N3YXBfc3RhdGUuYy0zMzYtICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zNDAtICovXG5tbS9zd2FwX3N0YXRlLmM6MzQxOnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbm1tL3N3YXBfc3RhdGUuYy0zNDIte1xuLS1cbm1tL3N3YXBfc3RhdGUuYy0zNDYtXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xubW0vc3dhcF9zdGF0ZS5jOjM0NzpcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xubW0vc3dhcF9zdGF0ZS5jLTM0OC1cdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTk4PXN0YXRpYyBpbnQgX190cnlfdG9fcmVjbGFpbV9zd2FwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTI1MS1cbm1tL3N3YXBmaWxlLmM6MjUyOlx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xubW0vc3dhcGZpbGUuYy0yNTMtXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xuLS1cbm1tL3N3YXBmaWxlLmM9MTU4OD1zdGF0aWMgdm9pZCBzd2FwX3B1dF9lbnRyaWVzX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMTYxOC1cdFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXG5tbS9zd2FwZmlsZS5jOjE2MTk6XHRcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cbm1tL3N3YXBmaWxlLmMtMTYyMC1cdFx0ICovXG4tLVxubW0vc3dhcGZpbGUuYz0xNzQwPWludCBmb2xpb19hbGxvY19zd2FwKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcGZpbGUuYy0xNzc4LVx0aWYgKHVubGlrZWx5KG1lbV9jZ3JvdXBfdHJ5X2NoYXJnZV9zd2FwKGZvbGlvKSkpXG5tbS9zd2FwZmlsZS5jOjE3Nzk6XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3N3YXBmaWxlLmMtMTc4MC1cbi0tXG5tbS9zd2FwZmlsZS5jPTIxMDI9Ym9vbCBmb2xpb19mcmVlX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwZmlsZS5jLTIxMDgtXG5tbS9zd2FwZmlsZS5jOjIxMDk6XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG5tbS9zd2FwZmlsZS5jLTIxMTAtXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTY4Mj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtNzM3LVx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG5tbS92bXNjYW4uYzo3Mzg6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xubW0vdm1zY2FuLmMtNzM5LVx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4tLVxubW0venN3YXAuYz05NzQ9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwNDQtXHRpZiAocmV0KSB7XG5tbS96c3dhcC5jOjEwNDU6XHRcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcbm1tL3pzd2FwLmMtMTA0Ni1cdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MjIKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA1MDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgU3dhcCBDYWNoZSBEZWxldGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHNvbWUgbG93LWxldmVsLCBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB0aGUgc3dhcCBjYWNoZSBkZWxldGlvbiBsb2dpYyB3aXRoaW4gdGhlIE1NIHN1YnN5c3RlbS4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyB0byBmdW5jdGlvbnMgbGlrZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFuZCBgX19yZW1vdmVfbWFwcGluZ2Ag4oCTIGFsbCBjcml0aWNhbCBjb21wb25lbnRzIGludm9sdmVkIGluIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwLW91dCBwcm9jZXNzZXMuCgpUaGUga2V5IHRoaW5nIGlzIHRoZSByZW9yZGVyaW5nIG9mIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgY2FsbC4gQmVmb3JlIHRoaXMsIG9yIHBlcmhhcHMgYSByZWNlbnQgcmVmYWN0b3JpbmcsIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCB3YXMgY2xlYXJpbmcgYGZvbGlvLSZndDtzd2FwLnZhbGAgYW5kIGNhbGxpbmcgYGZvbGlvX2NsZWFyX3N3YXBjYWNoZShmb2xpbylgLiBOb3csIGlmIGBfX21lbWNnMV9zd2Fwb3V0YCBjb21lcyAqYWZ0ZXIqIHRob3NlIGNsZWFyIG9wZXJhdGlvbnMsIG9yIGlmIHRoZSBvcmRlcmluZyB3YXMgdGhlIG90aGVyIHdheSBhcm91bmQsIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24gd291bGQgaGl0IGEgc25hZyDigJMgaXQgcmVsaWVzIG9uIGBmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbylgIGFuZCBvbiByZWFkaW5nIGBmb2xpby0mZ3Q7c3dhcGAgLSBhbmQgd2Uga25vdyB0aGlzIGNvdWxkIGNhdXNlIGEgZmFpbHVyZSwgc3BlY2lmaWNhbGx5IGEgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AuIEFuZCBvZiBjb3Vyc2UsIHRoZSBvcmRlciBvZiBub2RlIHN0YXRzIGFuZCBscnV2ZWMgc3RhdHMgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIGFkanVzdGVkIGFzIHdlbGwuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhpcyBkaXJlY3RseSBhZmZlY3RzIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgc3dhcCBjYWNoZSBkZWxldGlvbiwgbWVtb3J5IHJlY2xhaW0sIGFuZCB0aGUgaW50ZXJhY3Rpb24gd2l0aCBtZW1jZy4gR2l2ZW4gaXRzIGxvY2F0aW9uIHdpdGhpbiBNTSwgaXTigJlzIGdvaW5nIHRvIGJlIHRyaWdnZXJlZCBpbiBhbnkgc3RhbmRhcmQgTGludXggZW52aXJvbm1lbnQgZXhwZXJpZW5jaW5nIHN3YXBwaW5nIG9yIG1lbW9yeSBwcmVzc3VyZS4gVGhpcyBtYWtlcyBpdCBhIGhpZ2gtdmFsdWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIGZvciBgQ09ORklHX1NXQVBgLCBgQ09ORklHX01FTUNHYCwgYW5kIGBDT05GSUdfTUVNQ0dfVjFgLCBhbmQgcGVyaGFwcyBncmVwIGFyb3VuZCBpbiBgbW0vS2NvbmZpZ2Agb3IgYGluaXQvS2NvbmZpZ2AgdG8gYmUgY2VydGFpbi4gR2l2ZW4gdGhpcyBsZXZlbCBvZiBjaGFuZ2UsIGl04oCZcyB3b3J0aCB0aGUgZWZmb3J0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtNRU1DR19WMSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI3NS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI3NjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNzctXHQvKiBMZWdhY3kgY29uc3VtZXItb3JpZW50ZWQgY291bnRlcnMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zMTAtXHRpbnQgc3dhcHBpbmVzcztcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjMxMTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0zMTItXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwNj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkxNS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MTY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTkxNy1ib29sIG1lbV9jZ3JvdXBfb29tX3N5bmNocm9uaXplKGJvb2wgd2FpdCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkzMD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTM1LVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTkzNjojZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5Mzctc3RhdGljIGlubGluZSBib29sIHRhc2tfaW5fbWVtY2dfb29tKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NTQtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU1OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NTYtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU3OiNpZiBkZWZpbmVkKENPTkZJR19NRU1DR19WMSkgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX1NXQVApXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU4LVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MzU9c3RydWN0IHRhc2tfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzMC0jZW5kaWZcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMDMxOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMDMyLVx0dW5zaWduZWRcdFx0XHRpbl91c2VyX2ZhdWx0OjE7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjctXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU2ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU2OS1cdHN0cnVjdCBtZW1fY2dyb3VwXHRcdCptZW1jZ19pbl9vb207XG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9MTM9c3RydWN0IHZtcHJlc3N1cmUge1xuLS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTE4LVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6MTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMjAtXHQvKlxuLS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTIyLVx0ICogKG1lbW9yeS5wcmVzc3VyZV9sZXZlbCkuIERyYWluZWQgYnkgQHdvcmsuIHYyIGhhcyBubyBlcXVpdmFsZW50XG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDoyMzpcdCAqIGludGVyZmFjZSwgc28gdGhpcyBzdGF0ZSBpcyBvbWl0dGVkIG9uIENPTkZJR19NRU1DR19WMT1uIGJ1aWxkcy5cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTI0LVx0ICovXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NTU9ZXh0ZXJuIGVudW0gdm1wcmVzc3VyZV9sZXZlbHMgdm1wcmVzc3VyZV9jYWxjX2xldmVsKHVuc2lnbmVkIGxvbmcgc2Nhbm5lZCxcbi0tXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC01Ny1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjU4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTU5LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHByaW8pO1xuLS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oPTYzPWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNjUtXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDo2NjovKiB2MSBob29rcyBjYWxsZWQgZnJvbSBtbS92bXByZXNzdXJlLmM7IG5vLW9wcyBiZWxvdyB3aGVuICFNRU1DR19WMS4gKi9cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTY3LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfdjFfaW5pdChzdHJ1Y3Qgdm1wcmVzc3VyZSAqdm1wcik7XG4tLVxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9Nzc9c3RhdGljIGlubGluZSB2b2lkIHZtcHJlc3N1cmVfdjFfYWNjb3VudF90cmVlKHN0cnVjdCB2bXByZXNzdXJlICp2bXByLFxuLS1cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTc5LVx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHJlY2xhaW1lZCkge31cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjgwOiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTgxLVxuLS1cbmluY2x1ZGUvbmV0L3NvY2suaD0yNzAyPXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX3NrX3VuZGVyX21lbW9yeV9wcmVzc3VyZShjb25zdCBzdHJ1Y3Qgc29jayAqc2spXG4tLVxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDUtXG5pbmNsdWRlL25ldC9zb2NrLmg6MjcwNjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwNy1cdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA4LVx0XHRyZXR1cm4gISFtZW1jZy1cdTAwM2V0Y3BtZW1fcHJlc3N1cmU7XG5pbmNsdWRlL25ldC9zb2NrLmg6MjcwOTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcxMC1cbi0tXG5pbml0L0tjb25maWc9MTEwMT1jb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbi0tXG5pbml0L0tjb25maWctMTEwNy1cbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxuaW5pdC9LY29uZmlnLTExMDktXHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5tbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGUtMTA1LW9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTEyMz12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTExMzAtICogY2dyb3VwIHYxIHVzZXJzcGFjZSB2bXByZXNzdXJlIGludGVyZmFjZSAobWVtb3J5LnByZXNzdXJlX2xldmVsIC9cbm1tL21lbWNvbnRyb2wtdjEuYzoxMTMxOiAqIGNncm91cC5ldmVudF9jb250cm9sKS4gS2VwdCBoZXJlIHNvIHYyLW9ubHkga2VybmVscyAoQ09ORklHX01FTUNHX1YxPW4pXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMi0gKiBkcm9wIHRoZSB3aG9sZSBldmVudGZkIGFjY3VtdWxhdG9yLCBpdHMgd29yayBpdGVtLCBhbmQgdGhlIHBlci1tZW1jZ1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0yNT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC0yOC0vKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovXG5tbS9tZW1jb250cm9sLXYxLmg6Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC12MS5oLTMwLVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD04Nj1leHRlcm4gc3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdO1xubW0vbWVtY29udHJvbC12MS5oLTg3LVxubW0vbWVtY29udHJvbC12MS5oOjg4OiNlbHNlXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cbm1tL21lbWNvbnRyb2wtdjEuaC04OS1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHt9XG5tbS9tZW1jb250cm9sLXYxLmgtMTE5LVxubW0vbWVtY29udHJvbC12MS5oOjEyMDojZW5kaWZcdC8qIENPTkZJR19NRU1DR19WMSAqL1xubW0vbWVtY29udHJvbC12MS5oLTEyMS1cbi0tXG5tbS9tZW1jb250cm9sLmM9MjE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMjM0LVxubW0vbWVtY29udHJvbC5jOjIzNTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMjM2LXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Mi1cbm1tL21lbWNvbnRyb2wuYzo1NzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTU3NC1zdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5tbS9tZW1jb250cm9sLmM6NTk5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MDAtXHRQR1BHSU4sXG4tLVxubW0vbWVtY29udHJvbC5jPTgzMj1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTg0Ny1cbm1tL21lbWNvbnRyb2wuYzo4NDg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxuLS1cbm1tL21lbWNvbnRyb2wuYz05MTY9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkyOC1cbm1tL21lbWNvbnRyb2wuYzo5Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXG4tLVxubW0vbWVtY29udHJvbC5jPTExMDQ9Ym9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTExMTEtXG5tbS9tZW1jb250cm9sLmM6MTExMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcbi0tXG5tbS9tZW1jb250cm9sLmM9MTY5Nj11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MDEtXG5tbS9tZW1jb250cm9sLmM6MTcwMjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTcwMy11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jPTE3MjI9c3RhdGljIHZvaWQgbWVtY2dfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTc2OC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkmIzQzOyYjNDM7KSB7XG5tbS9tZW1jb250cm9sLmM6MTc2OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTc3MC1cdFx0aWYgKG1lbWNnX3ZtX2V2ZW50X3N0YXRbaV0gPT0gUEdQR0lOIHx8XG4tLVxubW0vbWVtY29udHJvbC5jPTE4MjA9dm9pZCBtZW1fY2dyb3VwX3ByaW50X29vbV9tZW1pbmZvKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMTg0MS1cdFx0XHRhdG9taWNfbG9uZ19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNbTUVNQ0dfU1dBUF9NQVhdKSk7XG5tbS9tZW1jb250cm9sLmM6MTg0MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtMTg0My1cdGVsc2Uge1xuLS1cbm1tL21lbWNvbnRyb2wuYz00MjM1PW1lbV9jZ3JvdXBfY3NzX2FsbG9jKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpwYXJlbnRfY3NzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00MjU1LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBcdTAwMjZwYXJlbnQtXHUwMDNlc3dhcCwgZmFsc2UpO1xubW0vbWVtY29udHJvbC5jOjQyNTY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jLTQyNTctXHRcdFdSSVRFX09OQ0UobWVtY2ctXHUwMDNlc3dhcHBpbmVzcywgbWVtX2Nncm91cF9zd2FwcGluZXNzKHBhcmVudCkpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MjY5LVx0XHRwYWdlX2NvdW50ZXJfaW5pdChcdTAwMjZtZW1jZy1cdTAwM2Vzd2FwLCBOVUxMLCBmYWxzZSk7XG5tbS9tZW1jb250cm9sLmM6NDI3MDojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDI3MS1cdFx0cGFnZV9jb3VudGVyX2luaXQoXHUwMDI2bWVtY2ctXHUwMDNla21lbSwgTlVMTCwgZmFsc2UpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NDM2PXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ0NDYtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NDQ0NzojaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmMtNDQ0OC1cdHBhZ2VfY291bnRlcl9zZXRfbWF4KFx1MDAyNm1lbWNnLVx1MDAzZWttZW0sIFBBR0VfQ09VTlRFUl9NQVgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTc2PXN0cnVjdCBjZ3JvdXBfc3Vic3lzIG1lbW9yeV9jZ3JwX3N1YnN5cyA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTE4Ny1cdC5kZmxfY2Z0eXBlcyA9IG1lbW9yeV9maWxlcyxcbm1tL21lbWNvbnRyb2wuYzo1MTg4OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy01MTg5LVx0LmxlZ2FjeV9jZnR5cGVzID0gbWVtX2Nncm91cF9sZWdhY3lfZmlsZXMsXG4tLVxubW0vbWVtY29udHJvbC5jPTYxODc9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcbi0tXG5tbS9tZW1jb250cm9sLmMtNjE5Mi1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHN3YXBfZmlsZXMpKTtcbm1tL21lbWNvbnRyb2wuYzo2MTkzOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYy02MTk0LVx0V0FSTl9PTihjZ3JvdXBfYWRkX2xlZ2FjeV9jZnR5cGVzKFx1MDAyNm1lbW9yeV9jZ3JwX3N1YnN5cywgbWVtc3dfZmlsZXMpKTtcbi0tXG5tbS9zd2FwLmg9ODU9c3RhdGljIGlubGluZSBpbnQgbWVtX2Nncm91cF9zd2FwcGluZXNzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL3N3YXAuaC04Ni17XG5tbS9zd2FwLmg6ODc6I2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vc3dhcC5oLTg4LVx0aWYgKCFjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjkzOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYCwgYW5kIGZvY3VzIG9uIGEgZmV3IGtleSBhcmVhcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMsIHBhcnRpY3VsYXJseSB2ZXJzaW9uIDEgKGBDT05GSUdfTUVNQ0dfVjFgKSwgdGhlIGdlbmVyYWwgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKGBDT05GSUdfTUVNQ0dgKSBmZWF0dXJlLCBhbmQgdGhlIHN3YXAgY29uZmlndXJhdGlvbiAoYENPTkZJR19TV0FQYCkgYXJlIGJlaW5nIGRlZmluZWQgYW5kIGludGVycmVsYXRlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIG92ZXJhbGwgbWVtb3J5IGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBjb25maWd1cmVkLCBhbnkgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlbSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZ28gaHVudGluZyBmb3Igc29tZSBLY29uZmlnIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTEwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMTA1Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMTA2Olx0XHRkZWZhdWx0IHlcbjExMDc6XHRcbjExMDg6XHRjb25maWcgTUVNQ0dfVjFcbjExMDk6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuMTExMDpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTExMTpcdFx0ZGVmYXVsdCBuXG4xMTEyOlx0XHRoZWxwXG4xMTEzOlx0XHQgIExlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXIgd2hpY2ggaGFzIGJlZW4gZGVwcmVjYXRlZCBieVxuMTExNDpcdFx0ICBjZ3JvdXAgdjIgaW1wbGVtZW50YXRpb24uIFRoZSB2MSBpcyB0aGVyZSBmb3IgbGVnYWN5IGFwcGxpY2F0aW9uc1xuMTExNTpcdFx0ICB3aGljaCBoYXZlbiYjMzk7dCBtaWdyYXRlZCB0byB0aGUgbmV3IGNncm91cCB2MiBpbnRlcmZhY2UgeWV0LiBJZiB5b3VcbjExMTY6XHRcdCAgZG8gbm90IGhhdmUgYW55IHN1Y2ggYXBwbGljYXRpb24gdGhlbiB5b3UgYXJlIGNvbXBsZXRlbHkgZmluZSBsZWF2aW5nXG4xMTE3Olx0XHQgIHRoaXMgb3B0aW9uIGRpc2FibGVkLlxuMTExODpcdFxuMTExOTpcdFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XG4xMTIwOlx0XHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcbjExMjE6XHRcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxuMTEyMjpcdFxuMTEyMzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMTI0Olx0XG4xMTI1Olx0Y29uZmlnIEJMS19DR1JPVVBcbjExMjY6XHRcdGJvb2wgXCYjMzQ7SU8gY29udHJvbGxlclwmIzM0O1xuMTEyNzpcdFx0ZGVwZW5kcyBvbiBCTE9DS1xuMTEyODpcdFx0ZGVmYXVsdCBuXG4xMTI5Olx0XHRoZWxwXG4xMTMwOlx0XHRHZW5lcmljIGJsb2NrIElPIGNvbnRyb2xsZXIgY2dyb3VwIGludGVyZmFjZS4gVGhpcyBpcyB0aGUgY29tbW9uXG4xMTMxOlx0XHRjZ3JvdXAgaW50ZXJmYWNlIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHZhcmlvdXMgSU8gY29udHJvbGxpbmdcbjExMzI6XHRcdHBvbGljaWVzLlxuMTEzMzpcdFxuMTEzNDpcdFx0Q3VycmVudGx5LCBDRlEgSU8gc2NoZWR1bGVyIHVzZXMgaXQgdG8gcmVjb2duaXplIHRhc2sgZ3JvdXBzIGFuZFxuMTEzNTpcdFx0Y29udHJvbCBkaXNrIGJhbmR3aWR0aCBhbGxvY2F0aW9uIChwcm9wb3J0aW9uYWwgdGltZSBzbGljZSBhbGxvY2F0aW9uKVxuMTEzNjpcdFx0dG8gc3VjaCB0YXNrIGdyb3Vwcy4gSXQgaXMgYWxzbyB1c2VkIGJ5IGJpbyB0aHJvdHRsaW5nIGxvZ2ljIGluXG4xMTM3Olx0XHRibG9jayBsYXllciB0byBpbXBsZW1lbnQgdXBwZXIgbGltaXQgaW4gSU8gcmF0ZXMgb24gYSBkZXZpY2UuXG4xMTM4Olx0XG4xMTM5Olx0XHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzczOAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBTd2FwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHF1aWNrbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHN3YXAgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgYENPTkZJR19TV0FQYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBzZXR0aW5nLCBzbyBpdCYjMzk7cyB0aGUgb2J2aW91cyBmaXJzdCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBmaWd1cmUgb3V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUaGVuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIGltcGFjdGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgU1dBUFxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTk9Y29uZmlnIEFSQ0hfTk9fU1dBUFxuLS1cbm1tL0tjb25maWctMTEtXG5tbS9LY29uZmlnOjEyOm1lbnVjb25maWcgU1dBUFxubW0vS2NvbmZpZy0xMy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTU4CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKkRpdmluZyBpbnRvIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gd2UgbmVlZCB0byBsb29rIGF0IGhvdyBzd2FwIGlzIGhhbmRsZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBpbnN0aW5jdCBzYXlzIHRvIHN0YXJ0IHdpdGggYG1tL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIHByaW1hcnkgb3B0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgYENPTkZJR19TV0FQYCBmZWVscyBsaWtlIGl0IHNob3VsZCByZXNpZGUgd2l0aGluIHRoYXQgYXJlYS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHJlZ2FyZGluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBzd2FwIHNwYWNlLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIGZpbGUgd2lsbCByZXZlYWwgbm90IG9ubHkgdGhlIGBDT05GSUdfU1dBUGAgb3B0aW9uIGl0c2VsZiwgYnV0IGFsc28gaXRzIGRlcGVuZGVuY2llcywgYW55IHJlbGV2YW50IGhlbHAgdGV4dCwgYW5kIHBvc3NpYmx5IHJlbGF0ZWQgb3B0aW9ucyB0aGF0IGNvbnRyb2wgc3dhcCBiZWhhdmlvci4gSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0IGlzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBnZXQgZGlnZ2luZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMDpcdFx0Ym9vbFxuICAxMTpcdFxuICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjA2CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipDaGVja2luZyBLZXJuZWwgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdmVyaWZ5IHRoZSBzdGF0dXMgb2YgYENPTkZJR19NRU1DR2AuIFRoaXMgbGlrZWx5IG1lYW5zIEkgbmVlZCB0byBjb25maXJtIHdoZXRoZXIgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFyZSBlbmFibGVkIGluIHRoZSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBUaGUgbW9zdCBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggaXMgdG8gbG9vayBkaXJlY3RseSBhdCB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmdzLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGxvY2F0ZSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9uLiBHaXZlbiB0aGF0IHRoZXNlIHNldHRpbmdzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZCBpbiBgS2NvbmZpZ2AgZmlsZXMsIGFuZCBjb25zaWRlcmluZyB0aGUga2VybmVsJiMzOTtzIGluaXRpYWxpemF0aW9uIGFzcGVjdHMsIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGhpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgZmlyZSBvZmYgYSBgZ3JlcGAgY29tbWFuZCB0byBzZWFyY2ggZm9yIGluc3RhbmNlcyBvZiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7IOKAkyBzcGVjaWZpY2FsbHksIHVzaW5nIHRoZSB3b3JkIGJvdW5kYXJ5IGBcYmAgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzIHdpdGggc2ltaWxhciBuYW1lcyDigJMgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGlzIHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgdGhlIGBDT05GSUdfTUVNQ0dgIHN5bWJvbCBpcyBkZWZpbmVkLCBhbmQgaWRlYWxseSwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IGl0JiMzOTtzIGRlZmluZWQgKGUuZy4sIGFzIGEgYm9vbCwgdHJpc3RhdGUsIGV0Yy4pIGFuZCB3aGF0IGl0cyBkZWZhdWx0IHNldHRpbmcgbWlnaHQgYmUuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IHN0ZXAgaW4gZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGUgbWVtY2cgaW1wbGVtZW50YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DR1xcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3NT1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA4NC1cbmluaXQvS2NvbmZpZzoxMDg1OmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwODYtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4OTk3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gS2NvbmZpZyBmb3IgTWVtb3J5IENHcm91cHMqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIGZpbGVzLCBzcGVjaWZpY2FsbHkgYGluaXQvS2NvbmZpZ2AuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IGNncm91cHMsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgaW5pdGlhbCBkZWZpbml0aW9uIGFuZCBkZXBlbmRlbmN5IGhhbmRsaW5nIGZvciBgQ09ORklHX01FTUNHYC4gVGhpcyBmaWxlIHVzdWFsbHkgb3V0bGluZXMgdGhlIG1ham9yIGZlYXR1cmUgZmxhZ3MuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbiB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBwcmVzZW50ZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBvciBkZXBlbmRlbnQgb3B0aW9ucyBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwODA6XHRcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXG4xMDgxOlx0XHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXG4xMDgyOlx0XG4xMDgzOlx0XHQgIFNheSBOIGlmIHVuc3VyZS5cbjEwODQ6XHRcbjEwODU6XHRjb25maWcgTUVNQ0dcbjEwODY6XHRcdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjEwODc6XHRcdHNlbGVjdCBQQUdFX0NPVU5URVJcbjEwODg6XHRcdHNlbGVjdCBFVkVOVEZEXG4xMDg5Olx0XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG4xMDkwOlx0XHRzZWxlY3QgVk1fRVZFTlRfQ09VTlRFUlNcbjEwOTE6XHRcdGhlbHBcbjEwOTI6XHRcdCAgUHJvdmlkZXMgY29udHJvbCBvdmVyIHRoZSBtZW1vcnkgZm9vdHByaW50IG9mIHRhc2tzIGluIGEgY2dyb3VwLlxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG4xMDk1Olx0XHRib29sXG4xMDk2Olx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMDk3Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMDk4Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2ICFBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4xMTAyOlx0XHRib29sXG4xMTAzOlx0XHRkZXBlbmRzIG9uIE1FTUNHXG4xMTA0Olx0XHRkZXBlbmRzIG9uIEhBVkVfTk1JXG4xMTA1Olx0XHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXHUwMDI2XHUwMDI2IEFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXG4xMTA2Olx0XHRkZWZhdWx0IHlcbjExMDc6XHRcbjExMDg6XHRjb25maWcgTUVNQ0dfVjFcbjExMDk6XHRcdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYyMgoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA4NzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgTWVtb3J5IENvbnRyb2wgYW5kIFN3YXAgRnVuY3Rpb24gQ2hhbmdlcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24gYW5kIGl0cyBkZXBlbmRlbmNpZXMuIFRoaXMgZnVuY3Rpb24gaXMgc3BlY2lmaWNhbGx5IHRpZWQgdG8gYENPTkZJR19NRU1DR19WMWAgYW5kIGBDT05GSUdfU1dBUGAuIEEgcXVpY2sgY2hlY2sgY29uZmlybXMgdGhpcyBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgLiBJbXBvcnRhbnRseSwgYENPTkZJR19NRU1DR19WMWAgcmVsaWVzIG9uIGBDT05GSUdfTUVNQ0dgLCBhbmQgYENPTkZJR19TV0FQYCBoaW5nZXMgb24gYE1NVWAsIGBCTE9DS2AsIGFuZCB0aGUgYWJzZW5jZSBvZiBgQVJDSF9OT19TV0FQYC4gU28sIGlmIHRoZXNlIGNvcmUgY29uZmlndXJhdGlvbnMgKGBTV0FQYCwgYE1FTUNHYCwgYW5kIGBNRU1DR19WMWApIGFyZSBlbmFibGVkLCB0aGUgY29kZSB3aWxsIHVzZSB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gc3dhcCBjYWNoZSBkZWxldGlvbiBhbmQgbWVtb3J5IGNncm91cCB2ZXJzaW9uIDEgc3dhcG91dCBjaGFyZ2UgYWNjb3VudGluZy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzLiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRocmVlOiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgKGJvdGggaW4gYG1tL3N3YXBfc3RhdGUuY2ApLCBhbmQgYF9fcmVtb3ZlX21hcHBpbmdgIChpbiBgbW0vdm1zY2FuLmNgLCBkZWNsYXJlZCBhcyBzdGF0aWMpLgoKTGV0JiMzOTtzIHZlcmlmeSB0aGUgc3ltYm9scy4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBkZWNsYXJlZCBpbiBgbW0vc3dhcC5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4gIGBfX21lbWNnMV9zd2Fwb3V0YCBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFuZCBkZWZpbmVkIGluIGBtbS9tZW1jb250cm9sLXYxLmNgLiBUaGV5IGFyZSBhbGwgbm9uLXN0YXRpYy4KCkFyZSB0aGVzZSBmdW5jdGlvbnMsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AgYW5kIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgc3VpdGFibGUgZm9yIG15IEZvY3VzU3ltYm9scz8gQWJzb2x1dGVseS4gVGhleSYjMzk7cmUgaW52b2x2ZWQgaW4gc3dhcCBvcGVyYXRpb25zLCBsaWtlIGBzaG1lbV9zd2FwaW5fZm9saW9gLCBgc2htZW1fd3JpdGVvdXRgLCBgZm9saW9fYWxsb2Nfc3dhcGAsIGBmb2xpb19mcmVlX3N3YXBgLCBgZG9fc3dhcF9wYWdlYCwgYG1lX3N3YXBjYWNoZV9jbGVhbmAgZXRjLiAgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGNhbGxlZCBieSBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AuCgpMZXQgbWUgY2hlY2sgdGhlIG90aGVyIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guIEluIGBtbS9zd2FwLmhgLCB0aGUgZGVjbGFyYXRpb24gb2YgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG5vdyBpbmNsdWRlcyBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlciwgYW5kIHRoZSBpbmxpbmUgZHVtbXkgdmVyc2lvbiAoaWYgYENPTkZJR19TV0FQYCBpc24mIzM5O3QgZW5hYmxlZCkgaGFzIGJlZW4gdXBkYXRlZC4gVGhlIGRlZmluaXRpb25zIG9mIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhcmUgaW4gYG1tL3N3YXBfc3RhdGUuY2AsIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AgaXMgaW4gYG1tL3Ztc2Nhbi5jYC4KCkxldCYjMzk7cyBzb2xpZGlmeSBteSBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3M6CgpGb2N1c1N5bWJvbHM6IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYAoKRW5hYmxlQ29uZmlnczogYFNXQVBgLCBgTUVNQ0dgLCBgTUVNQ0dfVjFgCgpGaW5hbGx5LCBpcyB0aGlzIHBhdGNoICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs/IFllcywgd2l0aG91dCBhIGRvdWJ0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB3aXRoaW4gdGhlIE1NIHRoYXQgZGVhbHMgd2l0aCBob3cgdGhlIHN3YXAgY2FjaGUgaXMgZGVsZXRlZCwgYW5kIGl0JiMzOTtzIGFsc28gdGllZCB0byBtZW1jZyB2MSBzd2Fwb3V0IGNoYXJnZSBhY2NvdW50aW5nLiBBIGZpbmFsIHJldmlldyBjb25maXJtcyBhbGwgY3JpdGVyaWEgYXJlIG1ldC4gSSBhbSBub3cgY29uZmlkZW50LiBSZWFkeSBmb3IgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDssCiAgICAmIzM0O3N3YXBfY2FjaGVfZGVsX2ZvbGlvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHN3YXAgY2FjaGUgZGVsZXRpb24gbG9naWMgaW4gX19zd2FwX2NhY2hlX2RlbF9mb2xpbyBhbmQgc3dhcF9jYWNoZV9kZWxfZm9saW8sIHJlcG9zaXRpb25pbmcgdGhlIGNncm91cCB2MSBtZW1zdyBjaGFyZ2UgdHJhbnNmZXIgKF9fbWVtY2cxX3N3YXBvdXQpIGJlZm9yZSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0byBhdm9pZCByZWZlcmVuY2luZyBjbGVhcmVkIHN3YXAgbWV0YWRhdGEuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0cyBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIHN3YXBwaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtTV0FQJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19zd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7LAogICAgJiMzNDtzd2FwX2NhY2hlX2RlbF9mb2xpbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGxvZ2ljIGluIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gYW5kIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCByZXBvc2l0aW9uaW5nIHRoZSBjZ3JvdXAgdjEgbWVtc3cgY2hhcmdlIHRyYW5zZmVyIChfX21lbWNnMV9zd2Fwb3V0KSBiZWZvcmUgcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdG8gYXZvaWQgcmVmZXJlbmNpbmcgY2xlYXJlZCBzd2FwIG1ldGFkYXRhLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdHMgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwcGluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBzd2FwIGNhY2hlIGZvbGlvIGRlbGV0aW9uIGJ5IGludGVncmF0aW5nIGBfX21lbWNnMV9zd2Fwb3V0KClgIGludG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKWAgd2l0aCBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlci4gXG5cblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGJ1ZmZlciBjb3BpZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGJvb2xlYW4gZmxhZyBgc3dhcG91dGAgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgY29uc3RhbnQgbGl0ZXJhbHMgKGB0cnVlYC9gZmFsc2VgKS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgaW52b2x2ZSBmb2xpbyBsaWZlY3ljbGUgc3RhdGUsIHJlZmVyZW5jZSBjb3VudGluZywgbWVtY2cgYWNjb3VudGluZywgb3IgbG9ja2luZywgd2hpY2ggYXJlIHRyYWNrZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnIGFzc2VydGlvbnMsIExPQ0tERVAsIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzBmZmYwZjRhNjJmYTFiNDAxMWJiNmFjNTNjYmY2YTc2MDcxM2RlNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTM6MDc6NTYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzE5LDcgJiM0MzszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzaywKIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTsKIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAotCQkJICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpOwomIzQzOwkJCSAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJCSAgICBib29sIHN3YXBvdXQpOwogdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLAogCQkJCXN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7CiAKQEAgLTQ1Miw3ICYjNDM7NDUzLDggQEAgc3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCi0JCXN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LAomIzQzOwkJYm9vbCBzd2Fwb3V0KQogewogfQogCmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmMKaW5kZXggMzA1ODc3ZTFmNGQ3Yi4uOTk5ODUyMDhiNTI5YiAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtMzA2LDYgJiM0MzszMDYsNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAgKiBAZm9saW86IFRoZSBmb2xpby4KICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uCiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLgomIzQzOyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uCiAgKgogICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLgogICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC4KQEAgLTMxNCwxMyAmIzQzOzMxNSwxNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLgogICovCiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbywKLQkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KQomIzQzOwkJCSAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpCiB7CiAJdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAotCV9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTsKIAlub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpOwogCWxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpOwomIzQzOwomIzQzOwlpZiAoc3dhcG91dCkKJiM0MzsJCV9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTsKJiM0MzsKJiM0MzsJX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpOwogfQogCiAvKioKQEAgLTMzOSw3ICYjNDM7MzQ0LDcgQEAgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tJmd0O3N3YXA7CiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpOwotCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7CiYjNDM7CV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpOwogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogCiAJZm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYjRjOWI4ZjNkZmU5OS4uYWY3ZGZhOTA1Y2I1MCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTczNSw4ICYjNDM7NzM1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCiAJCWlmIChyZWNsYWltZWQgJmFtcDsmYW1wOyAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKQogCQkJc2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTsKLQkJX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpOwotCQlfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTsKJiM0MzsJCV9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpOwogCQlzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7CiAJfSBlbHNlIHsKIAkJdm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTYKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU3dhcHBpbmcgYW5kIE1lbW9yeSBDZ3JvdXBzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNvZGUgbW9kaWZpY2F0aW9ucy4gSXQgbG9va3MgbGlrZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgaXMgbm93IHRha2luZyBhIGJvb2xlYW4gcGFyYW1ldGVyLCBgc3dhcG91dGAuIEludGVyZXN0aW5nLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIHRoZSBtb3ZlbWVudCBvZiBgX19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO2AgaW5zaWRlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgcmlnaHQgYmVmb3JlIHRoZSBjYWxsIHRvIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdylgLgoKU28sIGluIHRoZSBzdGFuZGFyZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIHBhdGgsIGBzd2Fwb3V0YCBpcyBwYXNzZWQgYXMgYGZhbHNlYC4gTWFrZXMgc2Vuc2UgZm9yIHRoZSAmIzM0O25vcm1hbCYjMzQ7IHVuc3dhcHBpbmcuIEJ1dCwgYHN3YXBvdXRgIGlzIHNldCB0byBgdHJ1ZWAgd2hlbiBjYWxsZWQgZnJvbSBgX19yZW1vdmVfbWFwcGluZ2AgaW4gYG1tL3Ztc2Nhbi5jYC4gQWhhLCB0aGF0JiMzOTtzIHRoZSBrZXkgZGlmZmVyZW5jZS4gTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB0aGlzIHJlb3JkZXJpbmcgYW5kIGVuY2Fwc3VsYXRpb24gd2l0aGluIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCB3YXMgZGVlbWVkIG5lY2Vzc2FyeS4KClRoZSBjb250ZXh0IGlzIGNyaXRpY2FsIGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYF9fbWVtY2cxX3N3YXBvdXRgIGFjdHVhbGx5IGRvZXMgYW5kIGhvdyB0aGlzIGNoYW5nZSBpbnRlcmFjdHMgd2l0aCBtZW1vcnkgY2dyb3Vwcy4gSXMgdGhpcyByZWxhdGVkIHRvIGFjY291bnRpbmcgb3IgYSBzcGVjaWZpYyBtZW1vcnkgcmVjbGFpbSBzdHJhdGVneSBmb3IgY2dyb3VwLWNvbnRyb2xsZWQgcHJvY2Vzc2VzPyBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS92bXNjYW4uY2AgYW5kIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCBjb2RlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgbWlnaHQgYmUgYWJvdXQgYWNjb3VudGluZyBzd2FwIHVzYWdlIHBlciBtZW1jZyBkdXJpbmcgYWdncmVzc2l2ZSByZWNsYWltLiBJIHN1c3BlY3QgdGhhdCB0aGlzIGNoYW5nZSBpcyBtYWtpbmcgc3VyZSB0aGUgbWVtY2cgYWNjb3VudGluZyBoYXBwZW5zIGNvcnJlY3RseSwgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX21lbWNnMV9zd2Fwb3V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE5NTE9c3RhdGljIGlubGluZSB2b2lkIG1lbV9jZ3JvdXBfZXhpdF91c2VyX2ZhdWx0KHZvaWQpXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1OC1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NTk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2My1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjQ6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjUtXHRcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00NTQ5PXZvaWQgZGVmZXJyZWRfc3BsaXRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgYm9vbCBwYXJ0aWFsbHlfbWFwcGVkKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cdCAqIEV4Y2x1ZGUgc3dhcGNhY2hlOiBvcmlnaW5hbGx5IHRvIGF2b2lkIGEgY29ycnVwdCBkZWZlcnJlZCBzcGxpdFxubW0vaHVnZV9tZW1vcnkuYzo0NTY4Olx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2OS1cdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MjQ3PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXG5tbS9tZW1jb250cm9sLXYxLmM6MjU5OiAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTI2OC0gKi9cbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcbi0tXG5tbS9zd2FwX3N0YXRlLmM9MzE3PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL3N3YXBfc3RhdGUuYy0zMjUtXHRpZiAoc3dhcG91dClcbm1tL3N3YXBfc3RhdGUuYzozMjY6XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbm1tL3N3YXBfc3RhdGUuYy0zMjctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNTMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgY29kZSBsb2NhdGlvbnM6CgoqKkRpdmluZyBpbnRvIFN3YXBvdXQgYW5kIE1lbW9yeSBDb250cm9sKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGBtbS9tZW1jb250cm9sLXYxLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24uIEFuZCB3aGlsZSB3ZSYjMzk7cmUgYXQgaXQsIGxldCYjMzk7cyBrZWVwIGBtbS9zd2FwX3N0YXRlLmNgIGluIG1pbmQsIGFzIGl0JiMzOTtzIGJvdW5kIHRvIGhhdmUgcmVsZXZhbnQgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKSBhbmQgaG93IHRoZXkgc3BlY2lmaWNhbGx5IGhhbmRsZSBzd2FwLW91dCBvcGVyYXRpb25zLiBgX19tZW1jZzFfc3dhcG91dGAgc2hvdWxkIGJlIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBpbml0aWF0aW5nIHRoYXQgcHJvY2VzcywgSSYjMzk7bSBleHBlY3RpbmcuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gaXMgc3RydWN0dXJlZC4gSSYjMzk7bSBpbWFnaW5pbmcgaXQgZGVhbHMgd2l0aCByZWNsYWltaW5nIHBhZ2VzLCBwb3RlbnRpYWxseSBiYXNlZCBvbiB0aGUgY3VycmVudCBwcmVzc3VyZSBhbmQgdGhlIHNldHRpbmdzIGltcG9zZWQgYnkgdGhlIG1lbWNnLiBJJiMzOTttIGFudGljaXBhdGluZyB0byBlbmNvdW50ZXIgYSBsb3Qgb2YgdGhlIHN0YW5kYXJkIHJlY2xhaW0gcHJvY2VzcywgbGlrZWx5IHNvbWUgcGFnZSBzZWxlY3Rpb24gYmFzZWQgb24gTFJVLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIG1lY2hhbmljcyBvZiB3cml0aW5nIHRob3NlIHBhZ2VzIHRvIHN3YXAgc3BhY2UuIEkgc3VzcGVjdCBpdCYjMzk7bGwgYWxzbyBiZSByZXNwb25zaWJsZSBmb3IgdXBkYXRpbmcgYWNjb3VudGluZyBtZXRyaWNzLgoKSSYjMzk7bGwgYmUgbG9va2luZyBjYXJlZnVsbHkgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwcGluZyBzdGF0ZSBhbmQgdGhlIG92ZXJhbGwgc3dhcCBzeXN0ZW0mIzM5O3MgZGF0YSBzdHJ1Y3R1cmVzLCBzcGVjaWZpY2FsbHkgYHN3YXBfc3RhdGUuY2AsIHdoaWNoIG91Z2h0IHRvIGJlIHRoZSBjZW50cmFsIHBvaW50IG9mIHRyYWNraW5nIHN3YXBwZWQgcGFnZXMgYW5kIGF2YWlsYWJsZSBzd2FwIHNwYWNlLiBJJiMzOTtsbCBiZSBmb2N1c2VkIG9uIHRoZSBsb2dpYyBvZiBzZWxlY3RpbmcgdmljdGltcywgc2V0dGluZyBzd2FwIGVudHJpZXMsIGFuZCBlbnN1cmluZyBkYXRhIGNvbnNpc3RlbmN5IGJldHdlZW4gbWVtb3J5IGFuZCBzd2FwIHNwYWNlLiBJJiMzOTttIHJlYWxseSBjdXJpb3VzIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhleSYjMzk7cmUgdXNpbmcgdG8gcHJvdGVjdCBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIEkgc3RhcnQgd29uZGVyaW5nIGFib3V0IGxvY2tzLCBhdG9taWMgb3BlcmF0aW9ucywgYW5kIGhvdyB0aGV5IGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyBmcm9tIHZhcmlvdXMgdGhyZWFkcyBhbmQgcHJvY2Vzc2VzLiBJJiMzOTttIGdvaW5nIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGVycm9yIGhhbmRsaW5nIHdpdGhpbiBib3RoIGZ1bmN0aW9ucywgYXMgc3dhcG91dCBpcyBhbiBpbXBvcnRhbnQgcHJvY2VzcywgYW5kIGEgZmFpbHVyZSBjb3VsZCBzZXJpb3VzbHkgaW1wYWN0IHN5c3RlbSBwZXJmb3JtYW5jZSBvciBldmVuIGNhdXNlIGNyYXNoZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEzOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTU6XHR9XG4gMjU2Olx0XG4gMjU3Olx0I2lmZGVmIENPTkZJR19TV0FQXG4gMjU4Olx0LyoqXG4gMjU5Olx0ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcbiAyNjA6XHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxuIDI2MTpcdCAqIEBjaTogdGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIgaG9sZGluZyB0aGUgc3dhcCBlbnRyaWVzXG4gMjYyOlx0ICpcbiAyNjM6XHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cbiAyNjQ6XHQgKiBmb2xpby1cdTAwM2Vzd2FwLlxuIDI2NTpcdCAqXG4gMjY2Olx0ICogQ29udGV4dDogZm9saW8gbXVzdCBiZSBpc29sYXRlZCwgdW5tYXBwZWQsIGxvY2tlZCBhbmQgaXMganVzdCBhYm91dCB0b1xuIDI2NzpcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cbiAyNjg6XHQgKi9cbiAyNjk6XHR2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcbiAyNzA6XHR7XG4gMjcxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xuIDI3MjpcdFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xuIDI3MzpcdFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XG4gMjc0Olx0XG4gMjc1Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIDI3NjpcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcbiAyNzc6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiAyNzg6XHRcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XG4gMjc5Olx0XG4gMjgwOlx0XHRpZiAobWVtX2Nncm91cF9kaXNhYmxlZCgpKVxuIDI4MTpcdFx0XHRyZXR1cm47XG4gMjgyOlx0XG4gMjgzOlx0XHRpZiAoIWRvX21lbXN3X2FjY291bnQoKSlcbiAyODQ6XHRcdFx0cmV0dXJuO1xuIDI4NTpcdFxuIDI4NjpcdFx0b2JqY2cgPSBmb2xpb19vYmpjZyhmb2xpbyk7XG4gMjg3Olx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIW9iamNnLCBmb2xpbyk7XG4gMjg4Olx0XHRpZiAoIW9iamNnKVxuIDI4OTpcdFx0XHRyZXR1cm47XG4gMjkwOlx0XG4gMjkxOlx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gMjkyOlx0XHRtZW1jZyA9IG9ial9jZ3JvdXBfbWVtY2cob2JqY2cpO1xuIDI5MzpcdFx0LypcbiAyOTQ6XHRcdCAqIEluIGNhc2UgdGhlIG1lbWNnIG93bmluZyB0aGVzZSBwYWdlcyBoYXMgYmVlbiBvZmZsaW5lZCBhbmQgZG9lc24mIzM5O3RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTM1NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhhdCBrZXJuZWwgY29kZSBzZWN0aW9uLCByZWZsZWN0aW5nIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gU3dhcCBDYWNoZSBEZWxpbWluYXRpb24qKgoKUmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgc3dhcCBjYWNoZSBlbnRyaWVzIGFyZSByZW1vdmVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBJJiMzOTttIGZhbWlsaWFyIHdpdGggdGhpcyBhcmVhLCBidXQgbGV0JiMzOTtzIHJlZnJlc2ggYW5kIHNvbGlkaWZ5IHRoZSB1bmRlcnN0YW5kaW5nLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGFzIHdlbGwuIFdlIGtub3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNyaXRpY2FsIGZvciBzd2FwLW91dCBhbmQgcmVjbGFpbSwgc28gSSBuZWVkIHRvIGtub3cgaG93IGl0IGlzIGNvcnJlY3RseSBoYW5kbGVkLiBJ4oCZbGwgc3RhcnQgYnkgcGlucG9pbnRpbmcgdGhvc2UgZnVuY3Rpb25zIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBiZWdpbiB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBmb2xpbyBpcyB1bmxpbmtlZCwgaG93IG1ldGFkYXRhIGlzIHVwZGF0ZWQsIGFuZCB3aGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktQ1BVIGVudmlyb25tZW50LiBJIGtub3cgdGhhdCBmb2xpbyBkZWFsbG9jYXRpb24gY2FuIGJlIGNvbXBsZXggYmVjYXVzZSBvZiBjb25jdXJyZW50IGFjY2VzcyBhbmQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zLiBBbHNvLCBJJiMzOTtsbCBwYXkgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBoYW5kbGluZyBvciBlZGdlIGNhc2VzIHdpdGhpbiB0aGUgZnVuY3Rpb25zLCBsb29raW5nIGZvciBwb3RlbnRpYWwgaXNzdWVzIG9yIG9wdGltaXphdGlvbnMuIFdlJiMzOTtyZSBkaXNjdXNzaW5nIGZpbGUgYmFja2luZyBhbmQgcGFnZSB0YWJsZSBzdHJ1Y3R1cmVzLCByaWdodD8gVGhhdCYjMzk7cyB3aGF0IEkgd2FudCB0byBuYWlsIGRvd24gYXMgcGFydCBvZiB0aGUgbWVudGFsIG1vZGVsIGluIHRoZSBrZXJuZWwgY29kZS4gTGV0JiMzOTtzIHNlZSBob3cgdGhleSB3b3JrIHRvZ2V0aGVyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3N3YXBfc3RhdGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0XHRmb2xpb19jbGVhcl9zd2FwY2FjaGUoZm9saW8pO1xuIDI5MTpcdFxuIDI5MjpcdFx0aWYgKCFmb2xpb19zd2FwcGVkKSB7XG4gMjkzOlx0XHRcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX3N0YXJ0LCBucl9wYWdlcyk7XG4gMjk0Olx0XHR9IGVsc2UgaWYgKG5lZWRfZnJlZSkge1xuIDI5NTpcdFx0XHRjaV9vZmYgPSBjaV9zdGFydDtcbiAyOTY6XHRcdFx0ZG8ge1xuIDI5NzpcdFx0XHRcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxuIDI5ODpcdFx0XHRcdFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcbiAyOTk6XHRcdFx0fSB3aGlsZSAoJiM0MzsmIzQzO2NpX29mZiBcdTAwM2MgY2lfZW5kKTtcbiAzMDA6XHRcdH1cbiAzMDE6XHR9XG4gMzAyOlx0XG4gMzAzOlx0LyoqXG4gMzA0Olx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxuIDMwNTpcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXG4gMzA2Olx0ICogQGZvbGlvOiBUaGUgZm9saW8uXG4gMzA3Olx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAzMDg6XHQgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuIDMwOTpcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gMzEwOlx0ICpcbiAzMTE6XHQgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gMzEyOlx0ICogVGhpcyB3b24mIzM5O3QgcHV0IHRoZSBmb2xpbyYjMzk7cyByZWZjb3VudC4gVGhlIGNhbGxlciBoYXMgdG8gZG8gdGhhdC5cbiAzMTM6XHQgKlxuIDMxNDpcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxuIDMxNTpcdCAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gMzE2Olx0ICovXG4gMzE3Olx0dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gMzE4Olx0XHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbiAzMTk6XHR7XG4gMzIwOlx0XHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIDMyMTpcdFxuIDMyMjpcdFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbiAzMjM6XHRcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xuIDMyNDpcdFxuIDMyNTpcdFx0aWYgKHN3YXBvdXQpXG4gMzI2Olx0XHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbiAzMjc6XHRcbiAzMjg6XHRcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiAzMjk6XHR9XG4gMzMwOlx0XG4gMzMxOlx0LyoqXG4gMzMyOlx0ICogc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cbiAzMzM6XHQgKiBAZm9saW86IFRoZSBmb2xpby5cbiAzMzQ6XHQgKlxuIDMzNTpcdCAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxuIDMzNjpcdCAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcbiAzMzc6XHQgKiBlcXVhbCB0byB6ZXJvLCBvciBpdCBtYXkgY2F1c2UgZGF0YSBsb3NzLlxuIDMzODpcdCAqXG4gMzM5Olx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlLlxuIDM0MDpcdCAqL1xuIDM0MTpcdHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiAzNDI6XHR7XG4gMzQzOlx0XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuIDM0NDpcdFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIDM0NTpcdFxuIDM0NjpcdFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcbiAzNDc6XHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xuIDM0ODpcdFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gMzQ5Olx0XG4gMzUwOlx0XHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuIDM1MTpcdH1cbiAzNTI6XHRcbiAzNTM6XHQvKipcbiAzNTQ6XHQgKiBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyAtIFJlcGxhY2UgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjc5MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgYG1tL3Ztc2Nhbi5jYCBSYWJiaXQgSG9sZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCBzb21lIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3Vlcy4gQSBnb29kIHN0YXJ0aW5nIHBvaW50LCBhbmQgc29tZXRoaW5nIEkgb2Z0ZW4gZG8gd2hlbiB0cmFja2luZyBkb3duIHRoZXNlIHNvcnRzIG9mIHByb2JsZW1zLCBpcyB0byB6ZXJvIGluIG9uIHNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGFjdGlvbnMuIEkgd2FudCB0byBjaGVjayBvdXQgYG1tL3Ztc2Nhbi5jYCBhbmQgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBhcmVhIGFyb3VuZCBgX19yZW1vdmVfbWFwcGluZ2AuIFRoYXQgZnVuY3Rpb24gaXMgYSBrZXkgcGxheWVyLCBhbmQgdHlwaWNhbGx5IHdoZXJlIHlvdSBzZWUgdGhlc2Uga2luZHMgb2YgcHJvYmxlbXMgbWFuaWZlc3QuIEdvaW5nIHRoZXJlIGZpcnN0IHdpbGwgaGVscCBtZSBxdWlja2x5IHplcm8gaW4gb24gdGhlIGFjdGlvbnMgbmVlZGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMzoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzI1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MjU6XHRcdGlmICghZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgcmVmY291bnQpKVxuIDcyNjpcdFx0XHRnb3RvIGNhbm5vdF9mcmVlO1xuIDcyNzpcdFx0Lyogbm90ZTogYXRvbWljX2NtcHhjaGcgaW4gZm9saW9fcmVmX2ZyZWV6ZSBwcm92aWRlcyB0aGUgc21wX3JtYiAqL1xuIDcyODpcdFx0aWYgKHVubGlrZWx5KGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSkge1xuIDcyOTpcdFx0XHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIHJlZmNvdW50KTtcbiA3MzA6XHRcdFx0Z290byBjYW5ub3RfZnJlZTtcbiA3MzE6XHRcdH1cbiA3MzI6XHRcbiA3MzM6XHRcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcbiA3MzQ6XHRcdFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gNzM1Olx0XG4gNzM2Olx0XHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4gNzM3Olx0XHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbiA3Mzg6XHRcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG4gNzM5Olx0XHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiA3NDA6XHRcdH0gZWxzZSB7XG4gNzQxOlx0XHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4gNzQyOlx0XG4gNzQzOlx0XHRcdGZyZWVfZm9saW8gPSBtYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWZyZWVfZm9saW87XG4gNzQ0Olx0XHRcdC8qXG4gNzQ1Olx0XHRcdCAqIFJlbWVtYmVyIGEgc2hhZG93IGVudHJ5IGZvciByZWNsYWltZWQgZmlsZSBjYWNoZSBpblxuIDc0NjpcdFx0XHQgKiBvcmRlciB0byBkZXRlY3QgcmVmYXVsdHMsIHRodXMgdGhyYXNoaW5nLCBsYXRlciBvbi5cbiA3NDc6XHRcdFx0ICpcbiA3NDg6XHRcdFx0ICogQnV0IGRvbiYjMzk7dCBzdG9yZSBzaGFkb3dzIGluIGFuIGFkZHJlc3Mgc3BhY2UgdGhhdCBpc1xuIDc0OTpcdFx0XHQgKiBhbHJlYWR5IGV4aXRpbmcuICBUaGlzIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzQwNQoJCQkJCQkJb3V0cHV0OiAxNzYKCQkJCQkJCXRob3VnaHRzOiA3OTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogVGhpcyBQYXRjaCBpcyBTYWZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTiBjb25jZXJucywgYW5kIEkgdGhpbmsgSSYjMzk7dmUgZ290IGEgc29saWQgY2FzZS4KClRoZSBrZXkgY2hhbmdlIGlzIG1vdmluZyBgX19tZW1jZzFfc3dhcG91dGAgKmluc2lkZSogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLiBUaGlzIGlzIGJlY2F1c2UgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGNsZWFycyB0aGUgYHN3YXBjYWNoZWAgZmxhZywgYW5kIHdlIGhhdmUgYSB3YXJuaW5nIGBWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO2Agd2hpY2ggY291bGQgYmUgdHJpZ2dlcmVkIGlmIHdlIGNsZWFyZWQgdGhlIHN3YXBjYWNoZSBmbGFnIGJlZm9yZSBjYWxsaW5nIGBfX21lbWNnMV9zd2Fwb3V0YCB0byB1cGRhdGUgbWVtY2cgYWNjb3VudGluZy4gSXQgd2FzIHByZXZpb3VzbHkgY2FsbGVkIGJlZm9yZSB0aGUgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIGluIHRoZSBvcmlnaW5hbCBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFuZCBpbiBgX19yZW1vdmVfbWFwcGluZ2AsIGBfX21lbWNnMV9zd2Fwb3V0YCB3YXMgY2FsbGVkIGJlZm9yZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHNvIHRoaXMgcmVhcnJhbmdlbWVudCBhbGlnbnMgdGhlIHNlcXVlbmNlLgoKTm93LCBjb25jZXJuaW5nIEtNU0FOLCBJIG5lZWQgdG8gbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBwb3RlbnRpYWwgcmlza3M6CgoxLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlPyoqIE5vcGUuIFRoaXMgaXNuJiMzOTt0IHRvdWNoaW5nIGFueSBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHBhc3NlZCB0byB1c2VyIHNwYWNlLiBJdCYjMzk7cyBpbnRlcm5hbCBNTSByZWZhY3RvcmluZy4KMi4gICoqVW5pbml0aWFsaXplZCBWYXJpYWJsZS1EZXBlbmRlbnQgTG9naWM/KiogTm8gd2F5LiBUaGUgYHN3YXBvdXRgIHBhcmFtZXRlciBpcyBleHBsaWNpdGx5IHNldCB0byBgdHJ1ZWAgb3IgYGZhbHNlYCDigJMgdGhlcmUmIzM5O3Mgbm8gY29uZGl0aW9uYWwgbG9naWMgYXQgcGxheSB0aGF0IHdvdWxkIGRlcGVuZCBvbiBhbiB1bmluaXRpYWxpemVkIHZhbHVlLgozLiAgKipVbmluaXRpYWxpemVkIENvbXBsZXggRGF0YSBTdHJ1Y3R1cmVzPyoqIE5vLCBub3RoaW5nIGxpa2UgdGhhdCBpcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQgaGVyZS4gSXQmIzM5O3MgYWxsIGFib3V0IGZvbGlvIGxpZmVjeWNsZSBtYW5hZ2VtZW50IGFuZCBtZW1jZyBhY2NvdW50aW5nLgo0LiAgKipCb3VuZHMgQ2hlY2tzL0xlbmd0aCBMb2dpYz8qKiBOby4gVGhpcyBwYXRjaCBpc24mIzM5O3QgbWVzc2luZyB3aXRoIGJvdW5kcyBjaGVja3Mgb3IgaW50cm9kdWNpbmcgbmV3IGxvZ2ljIHRoYXQgbWlnaHQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhyb3VnaCB0aG9zZSBtZWNoYW5pc21zLgo1LiAgKipVbmluaXRpYWxpemVkIE1lbW9yeSBhdCBBbGw/KiogTXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcHVyZWx5IGludm9sdmVzIHJlZmFjdG9yaW5nIHN3YXAgY2FjaGUgbG9naWMgYW5kIG1lbWNnIHN3YXBvdXQsIHNvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzbiYjMzk7dCBhIGZhY3Rvci4KCkZ1cnRoZXJtb3JlLCBhbnkgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGxpa2VseSBiZSByZWxhdGVkIHRvIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBmb2xpbyBsaWZlY3ljbGUgaXNzdWVzLiBCdXQgd2UgaGF2ZSBzYWZlZ3VhcmRzIGluIHBsYWNlLiBLQVNBTiB3b3VsZCBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgcHJvYmxlbXMsIExPQ0tERVAgd291bGQgaGFuZGxlIGxvY2tpbmcgaXNzdWVzLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgbGlrZSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCBhbmQgYFZNX0JVR19PTl9GT0xJT2AgcHJvdmlkZSBhZGRpdGlvbmFsIGRlYnVnZ2luZy4gS01TQU4mIzM5O3MgcHVycG9zZSBpcyB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MsIGFuZCBub25lIG9mIHRoYXQgaXMgaGFwcGVuaW5nIG9yIGV4cG9zZWQgaW4gdGhpcyBwYXRjaC4KClNvLCB0byBzdW1tYXJpemU6IFRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGZ1bmN0aW9uIGJ5IGFkZGluZyBhIGJvb2xlYW4gYW5kIG1vdmluZyB0aGUgY2FsbCB0byBgX19tZW1jZzFfc3dhcG91dCgpYC4gVGhlcmUmIzM5O3Mgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgYHN3YXBvdXRgIGJvb2xlYW4gaXMgaGFyZGNvZGVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBhc3NlcnRpb25zLiBLTVNBTiBpcyBpcnJlbGV2YW50LiBJJiMzOTttIGNvbmZpZGVudCBpbiBjYWxsaW5nIGBOZWVkc0tNU0FOIGZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTM6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVyIGNvcGllcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYm9vbGVhbiBmbGFnIGBzd2Fwb3V0YCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBjb25zdGFudCBsaXRlcmFscyAoYHRydWVgL2BmYWxzZWApLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyB3b3VsZCBpbnZvbHZlIGZvbGlvIGxpZmVjeWNsZSBzdGF0ZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1jZyBhY2NvdW50aW5nLCBvciBsb2NraW5nLCB3aGljaCBhcmUgdHJhY2tlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYXNzZXJ0aW9ucywgTE9DS0RFUCwgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcblxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVyIGNvcGllcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYm9vbGVhbiBmbGFnIGBzd2Fwb3V0YCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBjb25zdGFudCBsaXRlcmFscyAoYHRydWVgL2BmYWxzZWApLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyB3b3VsZCBpbnZvbHZlIGZvbGlvIGxpZmVjeWNsZSBzdGF0ZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1jZyBhY2NvdW50aW5nLCBvciBsb2NraW5nLCB3aGljaCBhcmUgdHJhY2tlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYXNzZXJ0aW9ucywgTE9DS0RFUCwgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowNzo1Ny44MzgxMDY2NDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTg2MjU5MzcxNjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBzd2FwIGNhY2hlIGZvbGlvIGRlbGV0aW9uIGJ5IGludGVncmF0aW5nIGBfX21lbWNnMV9zd2Fwb3V0KClgIGludG8gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oKWAgd2l0aCBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlci4gXFxuXFxuVGhpcyBjaGFuZ2UgZG9lcyBub3QgaW52b2x2ZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHN0YWNrL2hlYXAgYnVmZmVyIGNvcGllcywga2VybmVsLXRvLXVzZXIgaW5mby1sZWFrcywgb3IgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBUaGUgYm9vbGVhbiBmbGFnIGBzd2Fwb3V0YCBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBjb25zdGFudCBsaXRlcmFscyAoYHRydWVgL2BmYWxzZWApLiBBbnkgcG90ZW50aWFsIGlzc3VlcyBhcmlzaW5nIGZyb20gdGhpcyByZWZhY3RvcmluZyB3b3VsZCBpbnZvbHZlIGZvbGlvIGxpZmVjeWNsZSBzdGF0ZSwgcmVmZXJlbmNlIGNvdW50aW5nLCBtZW1jZyBhY2NvdW50aW5nLCBvciBsb2NraW5nLCB3aGljaCBhcmUgdHJhY2tlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGVidWcgYXNzZXJ0aW9ucywgTE9DS0RFUCwgYW5kIEtBU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHN3YXAgY2FjaGUgZGVsZXRpb24gbG9naWMgaW4gX19zd2FwX2NhY2hlX2RlbF9mb2xpbyBhbmQgc3dhcF9jYWNoZV9kZWxfZm9saW8sIHJlcG9zaXRpb25pbmcgdGhlIGNncm91cCB2MSBtZW1zdyBjaGFyZ2UgdHJhbnNmZXIgKF9fbWVtY2cxX3N3YXBvdXQpIGJlZm9yZSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0byBhdm9pZCByZWZlcmVuY2luZyBjbGVhcmVkIHN3YXAgbWV0YWRhdGEuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0cyBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIHN3YXBwaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowNzo1Ny44MzgxMTExOThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTIxNjM2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDcwZmZmMGY0YTYyZmExYjQwMTFiYjZhYzUzY2JmNmE3NjA3MTNkZTdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBTZXAgMiAxMzowNzo1NiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcXG5pbmRleCAwYjVkNTA3NzM5YmNiLi5iM2I1NGMyODkyOWExIDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuaFxcbisrKyBiL21tL3N3YXAuaFxcbkBAIC0zMTksNyArMzE5LDggQEAgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xcbitcXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4rXFx0XFx0XFx0ICAgIGJvb2wgc3dhcG91dCk7XFxuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpvbGQsIHN0cnVjdCBmb2xpbyAqbmV3KTtcXG4gXFxuQEAgLTQ1Miw3ICs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4rXFx0XFx0Ym9vbCBzd2Fwb3V0KVxcbiB7XFxuIH1cXG4gXFxuZGlmZiAtLWdpdCBhL21tL3N3YXBfc3RhdGUuYyBiL21tL3N3YXBfc3RhdGUuY1xcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjk5OTg1MjA4YjUyOWIgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXFxuKysrIGIvbW0vc3dhcF9zdGF0ZS5jXFxuQEAgLTMwNiw2ICszMDYsNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxcbiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxcbisgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxcbiAgKlxcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXFxuICAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbkBAIC0zMTQsMTMgKzMxNSwxNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXFxuICAqL1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXFxuK1xcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFxuLVxcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcXG4gXFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XFxuK1xcbitcXHRpZiAoc3dhcG91dClcXG4rXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbitcXG4rXFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiB9XFxuIFxcbiAvKipcXG5AQCAtMzM5LDcgKzM0NCw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XFxuLVxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCk7XFxuK1xcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gXFxuIFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBiNGM5YjhmM2RmZTk5Li5hZjdkZmE5MDVjYjUwIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNzM1LDggKzczNSw3IEBAIHN0YXRpYyBpbnQgX19yZW1vdmVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFxuIFxcdFxcdGlmIChyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW1hcHBpbmdfZXhpdGluZyhtYXBwaW5nKSlcXG4gXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4tXFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbi1cXHRcXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcXG4rXFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxuIFxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDc6NTguNDE4MDA5MzI1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoyMzgyMzUzODY4NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19zd2FwX2NhY2hlX2RlbF9mb2xpb1wiLFxuICAgIFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBzd2FwIGNhY2hlIGRlbGV0aW9uIGxvZ2ljIGluIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gYW5kIHN3YXBfY2FjaGVfZGVsX2ZvbGlvLCByZXBvc2l0aW9uaW5nIHRoZSBjZ3JvdXAgdjEgbWVtc3cgY2hhcmdlIHRyYW5zZmVyIChfX21lbWNnMV9zd2Fwb3V0KSBiZWZvcmUgcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgdG8gYXZvaWQgcmVmZXJlbmNpbmcgY2xlYXJlZCBzd2FwIG1ldGFkYXRhLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdHMgbWVtb3J5IHJlY2xhbWF0aW9uIGFuZCBzd2FwcGluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNzBmZmYwZjRhNjJmYTFiNDAxMWJiNmFjNTNjYmY2YTc2MDcxM2RlN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTM6MDc6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDBiNWQ1MDc3MzliY2IuLmIzYjU0YzI4OTI5YTEgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMxOSw3ICszMTksOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KTtcbitcdFx0XHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbitcdFx0XHQgICAgYm9vbCBzd2Fwb3V0KTtcbiB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKm9sZCwgc3RydWN0IGZvbGlvICpuZXcpO1xuIFxuQEAgLTQ1Miw3ICs0NTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbi1cdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdylcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcbitcdFx0Ym9vbCBzd2Fwb3V0KVxuIHtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCAzMDU4NzdlMWY0ZDdiLi45OTk4NTIwOGI1MjliIDEwMDY0NFxuLS0tIGEvbW0vc3dhcF9zdGF0ZS5jXG4rKysgYi9tbS9zd2FwX3N0YXRlLmNcbkBAIC0zMDYsNiArMzA2LDcgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIEBmb2xpbzogVGhlIGZvbGlvLlxuICAqIEBlbnRyeTogVGhlIGZpcnN0IHN3YXAgZW50cnkgdGhhdCB0aGUgZm9saW8gY29ycmVzcG9uZHMgdG8uXG4gICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cbisgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxuICAqXG4gICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLlxuICAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxuQEAgLTMxNCwxMyArMzE1LDE3IEBAIHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLlxuICAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcbi1cdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiBcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIC1ucl9wYWdlcyk7XG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgLW5yX3BhZ2VzKTtcbitcbitcdGlmIChzd2Fwb3V0KVxuK1x0XHRfX21lbWNnMV9zd2Fwb3V0KGZvbGlvLCBjaSk7XG4rXG4rXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XG4gfVxuIFxuIC8qKlxuQEAgLTMzOSw3ICszNDQsNyBAQCB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xuLVx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMKTtcbitcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gXG4gXHRmb2xpb19yZWZfc3ViKGZvbGlvLCBmb2xpb19ucl9wYWdlcyhmb2xpbykpO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGI0YzliOGYzZGZlOTkuLmFmN2RmYTkwNWNiNTAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC03MzUsOCArNzM1LDcgQEAgc3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFxuIFx0XHRpZiAocmVjbGFpbWVkIFx1MDAyNlx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxuIFx0XHRcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XG4tXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbi1cdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdyk7XG4rXHRcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xuIFx0XHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XG4gXHR9IGVsc2Uge1xuIFx0XHR2b2lkICgqZnJlZV9mb2xpbykoc3RydWN0IGZvbGlvICopO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDc6NTguNDE4MDEwOTY1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI4MjAwMTY4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIGRpZmZzLCBmb2N1c2luZyBvbiB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFN3YXAgUGF0Y2gqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyB0aGluZy5cIiBJIHNlZSBpdCdzIHRvdWNoaW5nIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBtbS92bXNjYW4uY2AuIFRoYXQgdHJpbyBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBpbXBhY3Qgb24gaG93IHdlIGhhbmRsZSBzd2FwcGluZyBhbmQgcGFnZSByZWNsYW1hdGlvbiwgd2hpY2ggaXMsIG9idmlvdXNseSwgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhlc2Ugc3BlY2lmaWMgZmlsZXMgYXJlIGJlaW5nIHRvdWNoZWQgYW5kIHdoYXQncyBiZWluZyBhbHRlcmVkLiBJJ2xsIG5lZWQgdG8gcmVhZCB0aGVtLlxuXG5TcGVjaWZpY2FsbHksIEkgdGhpbmsgSSdsbCBzdGFydCB3aXRoIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBgbW0vdm1zY2FuLmNgIGZpcnN0LCBiZWNhdXNlIGBtbS9zd2FwLmhgIGlzIGxpa2VseSByZWxhdGVkLCBidXQgdGhlIHJlYWwgbG9naWMgaXMgaW4gdGhlIG90aGVyIHR3by4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDk5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowODo1MS4yMzgwMzAyNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zd2FwX3N0YXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzAwLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzAwOlxcdFxcdH1cXG4gMzAxOlxcdH1cXG4gMzAyOlxcdFxcbiAzMDM6XFx0LyoqXFxuIDMwNDpcXHQgKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMwNTpcXHQgKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbiAzMDY6XFx0ICogQGZvbGlvOiBUaGUgZm9saW8uXFxuIDMwNzpcXHQgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxcbiAzMDg6XFx0ICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzA5OlxcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXFxuIDMxMDpcXHQgKlxcbiAzMTE6XFx0ICogUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGZpbGxzIGEgc2hhZG93IGluIHBsYWNlLlxcbiAzMTI6XFx0ICogVGhpcyB3b24ndCBwdXQgdGhlIGZvbGlvJ3MgcmVmY291bnQuIFRoZSBjYWxsZXIgaGFzIHRvIGRvIHRoYXQuXFxuIDMxMzpcXHQgKlxcbiAzMTQ6XFx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlXFxuIDMxNTpcXHQgKiB1c2luZyB0aGUgaW5kZXggb2YgQGVudHJ5LCBhbmQgbG9jayB0aGUgY2x1c3RlciB0aGF0IGhvbGRzIHRoZSBlbnRyaWVzLlxcbiAzMTY6XFx0ICovXFxuIDMxNzpcXHR2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gMzE4OlxcdFxcdFxcdFxcdCAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LCBib29sIHN3YXBvdXQpXFxuIDMxOTpcXHR7XFxuIDMyMDpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xcbiAzMjE6XFx0XFxuIDMyMjpcXHRcXHRub2RlX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9GSUxFX1BBR0VTLCAtbnJfcGFnZXMpO1xcbiAzMjM6XFx0XFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIC1ucl9wYWdlcyk7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdGlmIChzd2Fwb3V0KVxcbiAzMjY6XFx0XFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbiAzMjc6XFx0XFxuIDMyODpcXHRcXHRfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIHNoYWRvdyk7XFxuIDMyOTpcXHR9XFxuIDMzMDpcXHRcXG4gMzMxOlxcdC8qKlxcbiAzMzI6XFx0ICogc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG4gMzMzOlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAzMzQ6XFx0ICpcXG4gMzM1OlxcdCAqIFNhbWUgYXMgX19zd2FwX2NhY2hlX2RlbF9mb2xpbywgYnV0IGhhbmRsZXMgbG9jayBhbmQgcmVmY291bnQuIFRoZVxcbiAzMzY6XFx0ICogY2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBlaXRoZXIgY2xlYW4gb3IgaGFzIGEgc3dhcCBjb3VudFxcbiAzMzc6XFx0ICogZXF1YWwgdG8gemVybywgb3IgaXQgbWF5IGNhdXNlIGRhdGEgbG9zcy5cXG4gMzM4OlxcdCAqXFxuIDMzOTpcXHQgKiBDb250ZXh0OiBDYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGxvY2tlZCBhbmQgaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDM0MDpcXHQgKi9cXG4gMzQxOlxcdHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4gMzQyOlxcdHtcXG4gMzQzOlxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XFxuIDM0NDpcXHRcXHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiAzNDU6XFx0XFxuIDM0NjpcXHRcXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbiAzNDc6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxuIDM0ODpcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gMzQ5OlxcdFxcbiAzNTA6XFx0XFx0Zm9saW9fcmVmX3N1Yihmb2xpbywgZm9saW9fbnJfcGFnZXMoZm9saW8pKTtcXG4gMzUxOlxcdH1cXG4gMzUyOlxcdFxcbiAzNTM6XFx0LyoqXFxuIDM1NDpcXHQgKiBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyAtIFJlcGxhY2UgYSBmb2xpbyBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzU1OlxcdCAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuIDM1NjpcXHQgKiBAb2xkOiBUaGUgb2xkIGZvbGlvIHRvIGJlIHJlcGxhY2VkLlxcbiAzNTc6XFx0ICogQG5ldzogVGhlIG5ldyBmb2xpby5cXG4gMzU4OlxcdCAqXFxuIDM1OTpcXHQgKiBSZXBsYWNlIGFuIGV4aXN0aW5nIGZvbGlvIGluIHRoZSBzd2FwIGNhY2hlIHdpdGggYSBuZXcgZm9saW8uIFRoZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowODo1MS4yMzgxMjgxODRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDgyODU5OTMzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBNYW5hZ2VtZW50IENvcmUqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgaXNzdWUsIGFuZCBJIHN1c3BlY3QgaXQncyByZWxhdGVkIHRvIGhvdyBtYXBwaW5ncyBhcmUgaGFuZGxlZCBkdXJpbmcgc2Nhbm5pbmcgaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHN1YnN5c3RlbS4gTGV0J3Mgc3RhcnQgYnkgemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIGZ1bmN0aW9uOiBgX19yZW1vdmVfbWFwcGluZ2AuIEkga25vdyB0aGlzIGlzIGxvY2F0ZWQgaW4gYG1tL3Ztc2Nhbi5jYCwgd2hpY2ggaXMgdGhlIGNvcmUgb2YgdGhlIGtlcm5lbCdzIHZpcnR1YWwgbWVtb3J5IHNjYW5uZXIuIFRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IHdoZXJlIG1hcHBpbmdzIGFyZSBhY3R1YWxseSB1bm1hcHBlZCBmcm9tIGEgcHJvY2Vzc+KAmXMgYWRkcmVzcyBzcGFjZSBkdXJpbmcgcGFnZSByZWNsYWltLiBJJ20gZ29pbmcgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgY29kZSBpbiBgX19yZW1vdmVfbWFwcGluZ2AgYW5kIHN1cnJvdW5kaW5nIGZ1bmN0aW9ucyB3aXRoaW4gdGhhdCBmaWxlIHRvIHNlZSBob3cgaXQgb3BlcmF0ZXMuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHRoZSBzZXF1ZW5jZSBvZiBldmVudHMsIGFuZCB3aGVyZSBhbmQgaG93IHRoZSBtYXBwaW5nIHJlbW92YWwgaXMgaGFuZGxlZCB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGlzc3VlLiBJIHdpbGwgYmUgbG9va2luZyBzcGVjaWZpY2FsbHkgZm9yIGFueSByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgaXNzdWVzLCBvciBzdWJ0bGUgbG9naWMgZXJyb3JzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQgdG8gdGhlIHByb2JsZW0gSSdtIHRyeWluZyB0byBzb2x2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM5NywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDk6MDIuMDY2NzMxMDY0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY3NzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcyMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcyMDpcXHRcXHQgKlxcbiA3MjE6XFx0XFx0ICogTm90ZSB0aGF0IGlmIHRoZSBkaXJ0eSBmbGFnIGlzIGFsd2F5cyBzZXQgdmlhIGZvbGlvX21hcmtfZGlydHksXFxuIDcyMjpcXHRcXHQgKiBhbmQgdGh1cyB1bmRlciB0aGUgaV9wYWdlcyBsb2NrLCB0aGVuIHRoaXMgb3JkZXJpbmcgaXMgbm90IHJlcXVpcmVkLlxcbiA3MjM6XFx0XFx0ICovXFxuIDcyNDpcXHRcXHRyZWZjb3VudCA9IDEgKyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIDcyNTpcXHRcXHRpZiAoIWZvbGlvX3JlZl9mcmVlemUoZm9saW8sIHJlZmNvdW50KSlcXG4gNzI2OlxcdFxcdFxcdGdvdG8gY2Fubm90X2ZyZWU7XFxuIDcyNzpcXHRcXHQvKiBub3RlOiBhdG9taWNfY21weGNoZyBpbiBmb2xpb19yZWZfZnJlZXplIHByb3ZpZGVzIHRoZSBzbXBfcm1iICovXFxuIDcyODpcXHRcXHRpZiAodW5saWtlbHkoZm9saW9fdGVzdF9kaXJ0eShmb2xpbykpKSB7XFxuIDcyOTpcXHRcXHRcXHRmb2xpb19yZWZfdW5mcmVlemUoZm9saW8sIHJlZmNvdW50KTtcXG4gNzMwOlxcdFxcdFxcdGdvdG8gY2Fubm90X2ZyZWU7XFxuIDczMTpcXHRcXHR9XFxuIDczMjpcXHRcXG4gNzMzOlxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4gNzM0OlxcdFxcdFxcdHN3cF9lbnRyeV90IHN3YXAgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gNzM1OlxcdFxcbiA3MzY6XFx0XFx0XFx0aWYgKHJlY2xhaW1lZCBcXHUwMDI2XFx1MDAyNiAhbWFwcGluZ19leGl0aW5nKG1hcHBpbmcpKVxcbiA3Mzc6XFx0XFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG4gNzM4OlxcdFxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xcbiA3Mzk6XFx0XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9ja19pcnEoY2kpO1xcbiA3NDA6XFx0XFx0fSBlbHNlIHtcXG4gNzQxOlxcdFxcdFxcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XFxuIDc0MjpcXHRcXG4gNzQzOlxcdFxcdFxcdGZyZWVfZm9saW8gPSBtYXBwaW5nLVxcdTAwM2VhX29wcy1cXHUwMDNlZnJlZV9mb2xpbztcXG4gNzQ0OlxcdFxcdFxcdC8qXFxuIDc0NTpcXHRcXHRcXHQgKiBSZW1lbWJlciBhIHNoYWRvdyBlbnRyeSBmb3IgcmVjbGFpbWVkIGZpbGUgY2FjaGUgaW5cXG4gNzQ2OlxcdFxcdFxcdCAqIG9yZGVyIHRvIGRldGVjdCByZWZhdWx0cywgdGh1cyB0aHJhc2hpbmcsIGxhdGVyIG9uLlxcbiA3NDc6XFx0XFx0XFx0ICpcXG4gNzQ4OlxcdFxcdFxcdCAqIEJ1dCBkb24ndCBzdG9yZSBzaGFkb3dzIGluIGFuIGFkZHJlc3Mgc3BhY2UgdGhhdCBpc1xcbiA3NDk6XFx0XFx0XFx0ICogYWxyZWFkeSBleGl0aW5nLiAgVGhpcyBpcyBub3QganVzdCBhbiBvcHRpbWl6YXRpb24sXFxuIDc1MDpcXHRcXHRcXHQgKiBpbm9kZSByZWNsYWltIG5lZWRzIHRvIGVtcHR5IG91dCB0aGUgcmFkaXggdHJlZSBvclxcbiA3NTE6XFx0XFx0XFx0ICogdGhlIG5vZGVzIGFyZSBsb3N0LiAgRG9uJ3QgcGxhbnQgc2hhZG93cyBiZWhpbmQgaXRzXFxuIDc1MjpcXHRcXHRcXHQgKiBiYWNrLlxcbiA3NTM6XFx0XFx0XFx0ICpcXG4gNzU0OlxcdFxcdFxcdCAqIFdlIGFsc28gZG9uJ3Qgc3RvcmUgc2hhZG93cyBmb3IgREFYIG1hcHBpbmdzIGJlY2F1c2UgdGhlXFxuIDc1NTpcXHRcXHRcXHQgKiBvbmx5IHBhZ2UgY2FjaGUgZm9saW9zIGZvdW5kIGluIHRoZXNlIGFyZSB6ZXJvIHBhZ2VzXFxuIDc1NjpcXHRcXHRcXHQgKiBjb3ZlcmluZyBob2xlcywgYW5kIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBtaXggREFYXFxuIDc1NzpcXHRcXHRcXHQgKiBleGNlcHRpb25hbCBlbnRyaWVzIGFuZCBzaGFkb3cgZXhjZXB0aW9uYWwgZW50cmllcyBpbiB0aGVcXG4gNzU4OlxcdFxcdFxcdCAqIHNhbWUgYWRkcmVzc19zcGFjZS5cXG4gNzU5OlxcdFxcdFxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowOTowMi4wNjcxMDI2NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjI1MDEzMzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyB0aGluayB0aGlzIHRocm91Z2guIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgZnVuY3Rpb24uIFNvLCB0aGUgbG9naWNhbCBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIGl0cyB1c2FnZS4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSBjb2RlYmFzZSB0byBzZWUgd2hlcmUgZWxzZSBpdCdzIGJlaW5nIGNhbGxlZC4gTGV0J3Mgc3RhcnQgd2l0aCBhIGBncmVwYCBmb3IgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgY29udGV4dHMgSSBuZWVkIHRvIGNvbnNpZGVyLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGtleSB0byBmaWd1cmluZyBvdXQgdGhlIG92ZXJhbGwgaW1wYWN0IGFuZCB3aHkgaXQgbWlnaHQgYmUgcHJvYmxlbWF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMjMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjA5OjA1LjY5MjEyNzI4MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDE2NDgyMjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcC5oPTMxOT12b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIwLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XFxubW0vc3dhcC5oOjMyMTp2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtMzIyLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxcbi0tXFxubW0vc3dhcC5oPTQ1MT1zdGF0aWMgaW5saW5lIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXAuaC00NTQtXFxubW0vc3dhcC5oOjQ1NTpzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbm1tL3N3YXAuaC00NTYtXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0yNTc9c3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMwMy0vKipcXG5tbS9zd2FwX3N0YXRlLmM6MzA0OiAqIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8gLSBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZS5cXG5tbS9zd2FwX3N0YXRlLmMtMzA1LSAqIEBjaTogVGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIuXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzE2LSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozMTc6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vc3dhcF9zdGF0ZS5jLTMxOC1cXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMzNC0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzU6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzQxPXZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zNDYtXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG5tbS9zd2FwX3N0YXRlLmM6MzQ3OlxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbm1tL3N3YXBfc3RhdGUuYy0zNDgtXFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE1ODg9c3RhdGljIHZvaWQgc3dhcF9wdXRfZW50cmllc19jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTYxOC1cXHRcXHQgKiBzbG90cyB3aWxsIGJlIGZyZWVkIHdoZW4gZm9saW8gaXMgcmVtb3ZlZCBmcm9tIHN3YXAgY2FjaGVcXG5tbS9zd2FwZmlsZS5jOjE2MTk6XFx0XFx0ICogKF9fc3dhcF9jYWNoZV9kZWxfZm9saW8pLlxcbm1tL3N3YXBmaWxlLmMtMTYyMC1cXHRcXHQgKi9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4Mj1zdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy03MzctXFx0XFx0XFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcXG5tbS92bXNjYW4uYzo3Mzg6XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxubW0vdm1zY2FuLmMtNzM5LVxcdFxcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDk6MDcuNzA4NjE2OTkxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6OTU4ODQ5NTQxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFJlbG9jYXRpb24gb2YgYF9fbWVtY2cxX3N3YXBvdXRgKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBjaGFuZ2UuIE15IGluaXRpYWwgcXVlc3Rpb24gaXM6IHdoYXQgZXhhY3RseSAqaXMqIGBfX21lbWNnMV9zd2Fwb3V0YCwgYW5kIG1vcmUgaW1wb3J0YW50bHksICp3aHkqIHdhcyBpdCBkZWVtZWQgbmVjZXNzYXJ5IHRvIG1vdmUgaXQgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2A/IFRoaXMgaGFzIHRvIGhhdmUgc29tZSBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFNvbWV0aGluZyBjaGFuZ2VkLCBhbmQgSSBuZWVkIHRvIGdyYXNwIHRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYXJjaGl0ZWN0dXJhbCBzaGlmdC4gRmlyc3QsIEkgd2lsbCBsb29rIGZvciBob3cgYF9fbWVtY2cxX3N3YXBvdXRgIGlzIGRlZmluZWQuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggb2YgdGhlIGNvZGViYXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MDk6MTcuMjk3MTE0MzI0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTExODczOTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbWVtY2cxX3N3YXBvdXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTk1MT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NTgtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk1OTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk2MC12b2lkIG1lbWNnMV9zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYzLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NjQ6c3RhdGljIGlubGluZSB2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTY1LVxcdFxcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ1NDk9dm9pZCBkZWZlcnJlZF9zcGxpdF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBib29sIHBhcnRpYWxseV9tYXBwZWQpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ1NjctXFx0ICogRXhjbHVkZSBzd2FwY2FjaGU6IG9yaWdpbmFsbHkgdG8gYXZvaWQgYSBjb3JydXB0IGRlZmVycmVkIHNwbGl0XFxubW0vaHVnZV9tZW1vcnkuYzo0NTY4OlxcdCAqIHF1ZXVlLiBOb3dhZGF5cyB0aGF0IGlzIGZ1bGx5IHByZXZlbnRlZCBieSBfX21lbWNnMV9zd2Fwb3V0KCk7XFxubW0vaHVnZV9tZW1vcnkuYy00NTY5LVxcdCAqIGJ1dCBpZiBwYWdlIHJlY2xhaW0gaXMgYWxyZWFkeSBoYW5kbGluZyB0aGUgc2FtZSBmb2xpbywgaXQgaXNcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0yNDc9dm9pZCBtZW1jZzFfY29tbWl0X2NoYXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjU4LS8qKlxcbm1tL21lbWNvbnRyb2wtdjEuYzoyNTk6ICogX19tZW1jZzFfc3dhcG91dCAtIHRyYW5zZmVyIGEgbWVtc3cgY2hhcmdlIHRvIHN3YXBcXG5tbS9tZW1jb250cm9sLXYxLmMtMjYwLSAqIEBmb2xpbzogZm9saW8gd2hvc2UgbWVtc3cgY2hhcmdlIHRvIHRyYW5zZmVyXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMjY4LSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoyNjk6dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxubW0vbWVtY29udHJvbC12MS5jLTI3MC17XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MzE3PXZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMyNS1cXHRpZiAoc3dhcG91dClcXG5tbS9zd2FwX3N0YXRlLmM6MzI2OlxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG5tbS9zd2FwX3N0YXRlLmMtMzI3LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowOToxOS4yMDg5OTY3NDFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODk4OTcxNTEyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqSW52ZXN0aWdhdGluZyBTd2FwIENhY2hlIERlbGV0aW9uIGFuZCBNZW1vcnkgQ29udHJvbCBHcm91cCBJbnRlcmFjdGlvbnMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGlzIG9yZGVyaW5nLCBsb2NraW5nLCBhbmQgYmVoYXZpb3IgY2hhbmdlIGlzIHBsYXlpbmcgb3V0LiBNeSBmaXJzdCBtb3ZlIGlzIHRvIGRpZyBpbnRvIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYCBhbmQgdGhlbiBgX19tZW1jZzFfc3dhcG91dGAuIEkgd2FudCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhvc2UgdHdvIGZ1bmN0aW9ucy4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgbG9ja2luZyBtZWNoYW5pc21zIGFuZCB0aGUgc3BlY2lmaWMgb3JkZXIgaW4gd2hpY2ggdGhpbmdzIGFyZSBoYXBwZW5pbmcuIFRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLCBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcmVhZGluZyB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcyBvZiB3aGF0J3MgZ29pbmcgb24uIEknbSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVzZSB0d28gZnVuY3Rpb25zIHdpbGwgcmV2ZWFsIGhvdyB0aGUgc3dhcCBjYWNoZSBpbnRlcmFjdHMgd2l0aCB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKG1lbWNnKSBzd2Fwb3V0IHByb2Nlc3MuIEknbSBsb29raW5nIGZvciB0aGUgbml0dHktZ3JpdHR5IGRldGFpbHMgdG8gaWRlbnRpZnkgZXhhY3RseSB3aGVyZSB0aGUgYWx0ZXJhdGlvbiBpbiBiZWhhdmlvciBoYXMgc3VyZmFjZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzowOToyOC4xOTg3MTQ1MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3N3YXBfc3RhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNTA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMjUxOlxcdFxcbiAyNTI6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2FkZF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5KTtcXG4gMjUzOlxcdFxcdG5vZGVfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX0ZJTEVfUEFHRVMsIG5yX3BhZ2VzKTtcXG4gMjU0OlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCBucl9wYWdlcyk7XFxuIDI1NTpcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdHN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gMjU4OlxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDI1OTpcXHRcXHRcXHRcXHRcXHQgICAgICBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxcbiAyNjA6XFx0e1xcbiAyNjE6XFx0XFx0dW5zaWduZWQgbG9uZyBvbGRfdGI7XFxuIDI2MjpcXHRcXHRzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7XFxuIDI2MzpcXHRcXHR1bnNpZ25lZCBpbnQgY2lfc3RhcnQsIGNpX29mZiwgY2lfZW5kO1xcbiAyNjQ6XFx0XFx0Ym9vbCBmb2xpb19zd2FwcGVkID0gZmFsc2UsIG5lZWRfZnJlZSA9IGZhbHNlO1xcbiAyNjU6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMjY2OlxcdFxcbiAyNjc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKF9fc3dhcF9lbnRyeV90b19jbHVzdGVyKGVudHJ5KSAhPSBjaSk7XFxuIDI2ODpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiAyNjk6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gMjcwOlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4gMjcxOlxcdFxcbiAyNzI6XFx0XFx0c2kgPSBfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSk7XFxuIDI3MzpcXHRcXHRjaV9zdGFydCA9IHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSk7XFxuIDI3NDpcXHRcXHRjaV9lbmQgPSBjaV9zdGFydCArIG5yX3BhZ2VzO1xcbiAyNzU6XFx0XFx0Y2lfb2ZmID0gY2lfc3RhcnQ7XFxuIDI3NjpcXHRcXHRkbyB7XFxuIDI3NzpcXHRcXHRcXHRvbGRfdGIgPSBfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpO1xcbiAyNzg6XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFzd3BfdGJfaXNfZm9saW8ob2xkX3RiKSB8fFxcbiAyNzk6XFx0XFx0XFx0XFx0ICAgICBzd3BfdGJfdG9fZm9saW8ob2xkX3RiKSAhPSBmb2xpbyk7XFxuIDI4MDpcXHRcXHRcXHRpZiAoX19zd3BfdGJfZ2V0X2NvdW50KG9sZF90YikpXFxuIDI4MTpcXHRcXHRcXHRcXHRmb2xpb19zd2FwcGVkID0gdHJ1ZTtcXG4gMjgyOlxcdFxcdFxcdGVsc2VcXG4gMjgzOlxcdFxcdFxcdFxcdG5lZWRfZnJlZSA9IHRydWU7XFxuIDI4NDpcXHRcXHRcXHQvKiBJZiBzaGFkb3cgaXMgTlVMTCwgd2Ugc2V0IGFuIGVtcHR5IHNoYWRvdy4gKi9cXG4gMjg1OlxcdFxcdFxcdF9fc3dhcF90YWJsZV9zZXQoY2ksIGNpX29mZiwgc2hhZG93X3RvX3N3cF90YihzaGFkb3csXFxuIDI4NjpcXHRcXHRcXHRcXHRcXHQgX19zd3BfdGJfZ2V0X2ZsYWdzKG9sZF90YikpKTtcXG4gMjg3OlxcdFxcdH0gd2hpbGUgKCsrY2lfb2ZmIFxcdTAwM2MgY2lfZW5kKTtcXG4gMjg4OlxcdFxcbiAyODk6XFx0XFx0Zm9saW8tXFx1MDAzZXN3YXAudmFsID0gMDtcXG4gMjkwOlxcdFxcdGZvbGlvX2NsZWFyX3N3YXBjYWNoZShmb2xpbyk7XFxuIDI5MTpcXHRcXG4gMjkyOlxcdFxcdGlmICghZm9saW9fc3dhcHBlZCkge1xcbiAyOTM6XFx0XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfc3RhcnQsIG5yX3BhZ2VzKTtcXG4gMjk0OlxcdFxcdH0gZWxzZSBpZiAobmVlZF9mcmVlKSB7XFxuIDI5NTpcXHRcXHRcXHRjaV9vZmYgPSBjaV9zdGFydDtcXG4gMjk2OlxcdFxcdFxcdGRvIHtcXG4gMjk3OlxcdFxcdFxcdFxcdGlmICghX19zd3BfdGJfZ2V0X2NvdW50KF9fc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZikpKVxcbiAyOTg6XFx0XFx0XFx0XFx0XFx0X19zd2FwX2NsdXN0ZXJfZnJlZV9lbnRyaWVzKHNpLCBjaSwgY2lfb2ZmLCAxKTtcXG4gMjk5OlxcdFxcdFxcdH0gd2hpbGUgKCsrY2lfb2ZmIFxcdTAwM2MgY2lfZW5kKTtcXG4gMzAwOlxcdFxcdH1cXG4gMzAxOlxcdH1cXG4gMzAyOlxcdFxcbiAzMDM6XFx0LyoqXFxuIDMwNDpcXHQgKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMwNTpcXHQgKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbiAzMDY6XFx0ICogQGZvbGlvOiBUaGUgZm9saW8uXFxuIDMwNzpcXHQgKiBAZW50cnk6IFRoZSBmaXJzdCBzd2FwIGVudHJ5IHRoYXQgdGhlIGZvbGlvIGNvcnJlc3BvbmRzIHRvLlxcbiAzMDg6XFx0ICogQHNoYWRvdzogc2hhZG93IHZhbHVlIHRvIGJlIGZpbGxlZCBpbiB0aGUgc3dhcCBjYWNoZS5cXG4gMzA5OlxcdCAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjA5OjI4LjE5ODgyMzU2OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODM4MzkwMjgzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgLSB2MSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uLiBTZWVtcyBsaWtlIGl0J3MgYSBrZXkgcGFydCBvZiBtZW1vcnkgY29udHJvbCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gc3dhcHBpbmcuIFJpZ2h0LCBsZXQncyBwdWxsIHVwIHRoZSBzb3VyY2UgY29kZSBmb3IgYG1tL21lbWNvbnRyb2wtdjEuY2AuIFRoYXQncyB3aGVyZSB0aGUgbWFnaWMgaXMgbGlrZWx5IGhhcHBlbmluZy4gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIHRoZSBtZW1vcnkgY2dyb3VwcyBhbmQgaG93IGl0J3MgdHJpZ2dlcmluZyB0aGUgc3dhcC1vdXQgYmVoYXZpb3IuIEknbSBndWVzc2luZyB0aGVyZSdzIHNvbWUga2luZCBvZiB0aHJlc2hvbGQgb3IgYWxnb3JpdGhtIGF0IHBsYXkgdGhhdCdzIHB1c2hpbmcgbWVtb3J5IHBhZ2VzIHRvIHN3YXAgd2hlbiBhIGNncm91cCBoaXRzIGEgY2VydGFpbiBsaW1pdCBvciBoYXMgb3RoZXIgbWVtb3J5IHByZXNzdXJlLiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgc3RhcnQgdHJhY2luZyB0aGUgY29kZSBleGVjdXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1NzEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjA5OjQ2LjU4MjcyOTU1NFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC12MS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1NTpcXHR9XFxuIDI1NjpcXHRcXG4gMjU3OlxcdCNpZmRlZiBDT05GSUdfU1dBUFxcbiAyNTg6XFx0LyoqXFxuIDI1OTpcXHQgKiBfX21lbWNnMV9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcFxcbiAyNjA6XFx0ICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcXG4gMjYxOlxcdCAqIEBjaTogdGhlIGxvY2tlZCBzd2FwIGNsdXN0ZXIgaG9sZGluZyB0aGUgc3dhcCBlbnRyaWVzXFxuIDI2MjpcXHQgKlxcbiAyNjM6XFx0ICogVHJhbnNmZXIgdGhlIG1lbXN3IGNoYXJnZSBvZiBAZm9saW8gdG8gdGhlIHN3YXAgZW50cnkgc3RvcmVkIGluXFxuIDI2NDpcXHQgKiBmb2xpby1cXHUwMDNlc3dhcC5cXG4gMjY1OlxcdCAqXFxuIDI2NjpcXHQgKiBDb250ZXh0OiBmb2xpbyBtdXN0IGJlIGlzb2xhdGVkLCB1bm1hcHBlZCwgbG9ja2VkIGFuZCBpcyBqdXN0IGFib3V0IHRvXFxuIDI2NzpcXHQgKiBiZSBmcmVlZCwgYW5kIGNhbGxlciBtdXN0IGRpc2FibGUgSVJRcyBhbmQgaG9sZCB0aGUgc3dhcCBjbHVzdGVyIGxvY2suXFxuIDI2ODpcXHQgKi9cXG4gMjY5OlxcdHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKVxcbiAyNzA6XFx0e1xcbiAyNzE6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCAqc3dhcF9tZW1jZztcXG4gMjcyOlxcdFxcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcXG4gMjczOlxcdFxcdHVuc2lnbmVkIGludCBucl9lbnRyaWVzO1xcbiAyNzQ6XFx0XFxuIDI3NTpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xcbiAyNzY6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X2xvY2tlZChmb2xpbyksIGZvbGlvKTtcXG4gMjc3OlxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcXG4gMjc4OlxcdFxcdFZNX0JVR19PTl9GT0xJTyhmb2xpb19yZWZfY291bnQoZm9saW8pLCBmb2xpbyk7XFxuIDI3OTpcXHRcXG4gMjgwOlxcdFxcdGlmIChtZW1fY2dyb3VwX2Rpc2FibGVkKCkpXFxuIDI4MTpcXHRcXHRcXHRyZXR1cm47XFxuIDI4MjpcXHRcXG4gMjgzOlxcdFxcdGlmICghZG9fbWVtc3dfYWNjb3VudCgpKVxcbiAyODQ6XFx0XFx0XFx0cmV0dXJuO1xcbiAyODU6XFx0XFxuIDI4NjpcXHRcXHRvYmpjZyA9IGZvbGlvX29iamNnKGZvbGlvKTtcXG4gMjg3OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghb2JqY2csIGZvbGlvKTtcXG4gMjg4OlxcdFxcdGlmICghb2JqY2cpXFxuIDI4OTpcXHRcXHRcXHRyZXR1cm47XFxuIDI5MDpcXHRcXG4gMjkxOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMjkyOlxcdFxcdG1lbWNnID0gb2JqX2Nncm91cF9tZW1jZyhvYmpjZyk7XFxuIDI5MzpcXHRcXHQvKlxcbiAyOTQ6XFx0XFx0ICogSW4gY2FzZSB0aGUgbWVtY2cgb3duaW5nIHRoZXNlIHBhZ2VzIGhhcyBiZWVuIG9mZmxpbmVkIGFuZCBkb2Vzbid0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjA5OjQ2LjU4Mjg1Mzc2M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNjIwNzk5OTgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIFN3YXAgQ2FjaGUgUmVtb3ZhbCBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGNoYW5nZSBpbiBob3cgc3dhcCBjYWNoZSBlbnRyaWVzIGFyZSByZW1vdmVkLCBzcGVjaWZpY2FsbHkgaW4gcmVsYXRpb24gdG8gbWVtY2cgYWNjb3VudGluZy4gVGhlIGNvcmUgb2YgbXkgaW50ZXJlc3QgbGllcyBpbiBob3cgYF9fbWVtY2cxX3N3YXBvdXRgIGludGVyYWN0cyB3aXRoIHRoZSBmb2xpbydzIGBzd2FwYCBmaWVsZCBhbmQgdGhlIGBzd2FwY2FjaGVgIHN0YXRlLlxuXG5Jbml0aWFsbHksIEknbSBub3RpbmcgdGhlIHByZXNlbmNlIG9mIGBWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO2Agd2l0aGluIGBfX21lbWNnMV9zd2Fwb3V0YCwgaGlnaGxpZ2h0aW5nIHRoZSBpbXBvcnRhbmNlIG9mIHRoZSBgc3dhcGNhY2hlYCBmbGFnIGJlZm9yZSBpbnZva2luZyBtZW1jZyBzd2Fwb3V0LiBUaGUgYGZvbGlvLVx1MDAzZXN3YXBgIGZpZWxkIGlzIGNsZWFybHkgdXNlZCB3aXRoaW4gYF9fbWVtY2cxX3N3YXBvdXRgLCBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgcG90ZW50aWFsIGluY29uc2lzdGVuY2llcyBpZiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBpc24ndCBjb3JyZWN0LiBJJ20gc2VlaW5nIHRoYXQgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLCB3aGljaCBpcyBjYWxsZWQgd2l0aGluIHRoZSByZW1vdmFsIHByb2Nlc3MsIHplcm9lcyBvdXQgYGZvbGlvLVx1MDAzZXN3YXAudmFsYCBhbmQgY2xlYXJzIHRoZSBzd2FwY2FjaGUgZmxhZywgd2hpY2ggdGVsbHMgbWUgdGhpcyBpcyB3aGVyZSB0aGUgKmFjdHVhbCogcmVtb3ZhbCBvZiB0aGUgc3dhcCBjYWNoZSBlbnRyeSBvY2N1cnMuXG5cblByaW9yIHRvIHRoaXMgY2hhbmdlLCB0aGUgY2FsbCBzZXF1ZW5jZSB3YXMgd2VsbC1kZWZpbmVkOiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgY2FsbGVkIGBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvYC4gQWxzbywgSSdtIHRyYWNpbmcgYmFjayBob3cgdGhpcyBmaXRzIGludG8gdGhlIGJyb2FkZXIgVk0gc2Nhbm5pbmcgcHJvY2Vzcywgc2VlaW5nIHRoYXQgYF9fcmVtb3ZlX21hcHBpbmdgIGNhbGxlZCBib3RoIGBfX21lbWNnMV9zd2Fwb3V0YCBhbmQgdGhlbiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFNwZWNpZmljYWxseSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AgY2FsbGVkIHRoZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AgZnVuY3Rpb24gKmZpcnN0KiwgdGhlbiB0aGUgc3RhdGlzdGljYWwgdXBkYXRlcy5cblxuTm93LCB0aGluZ3MgYXJlIGRpZmZlcmVudC4gYF9fbWVtY2cxX3N3YXBvdXRgIGlzICppbnNpZGUqIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBiZWZvcmUgdGhlIGNvcmUgcmVtb3ZhbCBmdW5jdGlvbiwgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBBbmQgd2hlbiBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIGNhbGxlZCBmcm9tIHRoZSBmb2xpbywgdGhlIGBzd2Fwb3V0YCBmbGFnIGlzIGZhbHNlLiBUaGlzIGlzIHRoZSBjcnV4IG9mIHRoZSBtb2RpZmljYXRpb24uIFRoaXMgcmFpc2VzIHNvbWUgcXVlc3Rpb25zIGFib3V0IHRoZSBtZW1jZyBhY2NvdW50aW5nIGZsb3cgaW4gdGhlIG5ldyBzZXR1cC5cblxuVG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LCBJIG5lZWQgdG8gY2hlY2sgaG93IHRoZSBsb2dpYyBpcyBub3cgdXNlZC4gSSdsbCB1c2UgYGdyZXBgIHRvIGxvb2sgZm9yIG90aGVyIGNhbGwgc2l0ZXMgZm9yIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSwgdG8gc2VlIHdoYXQgaW1wYWN0IHRoZSBjaGFuZ2Ugb2YgZXhlY3V0aW9uIGhhcyBvbiB0aGUgd2hvbGUgc3lzdGVtLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHRocmVhZC1zYWZlIGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgcmFjZSBjb25kaXRpb25zIHdpdGggdGhlIHN3YXAgY2FjaGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0NDYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMDoyMi43OTA4NTY3NjVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDI0ODYyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3dhcF9jYWNoZV9kZWxfZm9saW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtb3J5LWZhaWx1cmUuYz0xMTI1PXN0YXRpYyBpbnQgbWVfc3dhcGNhY2hlX2NsZWFuKHN0cnVjdCBwYWdlX3N0YXRlICpwcywgc3RydWN0IHBhZ2UgKnApXFxuLS1cXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMjktXFxubW0vbWVtb3J5LWZhaWx1cmUuYzoxMTMwOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9tZW1vcnktZmFpbHVyZS5jLTExMzEtXFxuLS1cXG5tbS9tZW1vcnkuYz00ODU3PXZtX2ZhdWx0X3QgZG9fc3dhcF9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vbWVtb3J5LmMtNTA4OS1cXHRcXHRpZiAoIVdBUk5fT05fT05DRShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpXFxubW0vbWVtb3J5LmM6NTA5MDpcXHRcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vbWVtb3J5LmMtNTA5MS1cXHRcXHRnb3RvIG91dF9ub21hcDtcXG4tLVxcbm1tL3NobWVtLmM9MTgwOD1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE5NDAtXFx0XFx0LypcXG5tbS9zaG1lbS5jOjE5NDE6XFx0XFx0ICogVGhlIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKCkgYmVsb3cgY291bGQgYmUgbGVmdCBmb3JcXG5tbS9zaG1lbS5jLTE5NDItXFx0XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSdzIGZvbGlvX2ZyZWVfc3dhcCgpIHRvIGRpc3Bvc2Ugb2Y7XFxuLS1cXG5tbS9zaG1lbS5jLTE5NDYtXFx0XFx0ICovXFxubW0vc2htZW0uYzoxOTQ3OlxcdFxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTE5NDgtXFx0XFx0Z290byByZWRpcnR5O1xcbi0tXFxubW0vc2htZW0uYz0yMzUwPXN0YXRpYyB2b2lkIHNobWVtX3NldF9mb2xpb19zd2FwaW5fZXJyb3Ioc3RydWN0IGlub2RlICppbm9kZSwgcGdvZmZfdCBpbmRleCxcXG4tLVxcbm1tL3NobWVtLmMtMjM2Ny1cXHRmb2xpb19wdXRfc3dhcChmb2xpbywgTlVMTCk7XFxubW0vc2htZW0uYzoyMzY4OlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zaG1lbS5jLTIzNjktXFx0LypcXG4tLVxcbm1tL3NobWVtLmM9MjQ1NT1zdGF0aWMgaW50IHNobWVtX3N3YXBpbl9mb2xpbyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LFxcbi0tXFxubW0vc2htZW0uYy0yNTk3LVxcdGZvbGlvX3B1dF9zd2FwKGZvbGlvLCBOVUxMKTtcXG5tbS9zaG1lbS5jOjI1OTg6XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3NobWVtLmMtMjU5OS1cXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4tLVxcbm1tL3N3YXAuaD0zMTM9dm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcXG5tbS9zd2FwLmg6MzE0OnZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxubW0vc3dhcC5oLTMxNS1zdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ2V0X2VudHJ5LCBnZnBfdCBnZnBfbWFzayxcXG4tLVxcbm1tL3N3YXAuaD0zMTk9dm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMC1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpO1xcbm1tL3N3YXAuaDozMjE6dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxubW0vc3dhcC5oLTMyMi1cXHRcXHRcXHQgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdyxcXG4tLVxcbm1tL3N3YXAuaD00NDY9c3RhdGljIGlubGluZSB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpXFxuLS1cXG5tbS9zd2FwLmgtNDUwLVxcbm1tL3N3YXAuaDo0NTE6c3RhdGljIGlubGluZSB2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vc3dhcC5oLTQ1Mi17XFxuLS1cXG5tbS9zd2FwLmgtNDU0LVxcbm1tL3N3YXAuaDo0NTU6c3RhdGljIGlubGluZSB2b2lkIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG5tbS9zd2FwLmgtNDU2LVxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmM9MjU3PXN0YXRpYyB2b2lkIF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMDMtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMwNDogKiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxubW0vc3dhcF9zdGF0ZS5jLTMwNS0gKiBAY2k6IFRoZSBsb2NrZWQgc3dhcCBjbHVzdGVyLlxcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTMxNi0gKi9cXG5tbS9zd2FwX3N0YXRlLmM6MzE3OnZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbm1tL3N3YXBfc3RhdGUuYy0zMTgtXFx0XFx0XFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYy0zMzEtLyoqXFxubW0vc3dhcF9zdGF0ZS5jOjMzMjogKiBzd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbm1tL3N3YXBfc3RhdGUuYy0zMzMtICogQGZvbGlvOiBUaGUgZm9saW8uXFxubW0vc3dhcF9zdGF0ZS5jLTMzNC0gKlxcbm1tL3N3YXBfc3RhdGUuYzozMzU6ICogU2FtZSBhcyBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvLCBidXQgaGFuZGxlcyBsb2NrIGFuZCByZWZjb3VudC4gVGhlXFxubW0vc3dhcF9zdGF0ZS5jLTMzNi0gKiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIGZvbGlvIGlzIGVpdGhlciBjbGVhbiBvciBoYXMgYSBzd2FwIGNvdW50XFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzQwLSAqL1xcbm1tL3N3YXBfc3RhdGUuYzozNDE6dm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXBfc3RhdGUuYy0zNDIte1xcbi0tXFxubW0vc3dhcF9zdGF0ZS5jLTM0Ni1cXHRjaSA9IHN3YXBfY2x1c3Rlcl9sb2NrKF9fc3dhcF9lbnRyeV90b19pbmZvKGVudHJ5KSwgc3dwX29mZnNldChlbnRyeSkpO1xcbm1tL3N3YXBfc3RhdGUuYzozNDc6XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XFxubW0vc3dhcF9zdGF0ZS5jLTM0OC1cXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MTk4PXN0YXRpYyBpbnQgX190cnlfdG9fcmVjbGFpbV9zd2FwKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjUxLVxcbm1tL3N3YXBmaWxlLmM6MjUyOlxcdHN3YXBfY2FjaGVfZGVsX2ZvbGlvKGZvbGlvKTtcXG5tbS9zd2FwZmlsZS5jLTI1My1cXHRmb2xpb19zZXRfZGlydHkoZm9saW8pO1xcbi0tXFxubW0vc3dhcGZpbGUuYz0xNTg4PXN0YXRpYyB2b2lkIHN3YXBfcHV0X2VudHJpZXNfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTE2MTgtXFx0XFx0ICogc2xvdHMgd2lsbCBiZSBmcmVlZCB3aGVuIGZvbGlvIGlzIHJlbW92ZWQgZnJvbSBzd2FwIGNhY2hlXFxubW0vc3dhcGZpbGUuYzoxNjE5OlxcdFxcdCAqIChfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKS5cXG5tbS9zd2FwZmlsZS5jLTE2MjAtXFx0XFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTE3NDA9aW50IGZvbGlvX2FsbG9jX3N3YXAoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMTc3OC1cXHRpZiAodW5saWtlbHkobWVtX2Nncm91cF90cnlfY2hhcmdlX3N3YXAoZm9saW8pKSlcXG5tbS9zd2FwZmlsZS5jOjE3Nzk6XFx0XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3N3YXBmaWxlLmMtMTc4MC1cXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjEwMj1ib29sIGZvbGlvX2ZyZWVfc3dhcChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0yMTA4LVxcbm1tL3N3YXBmaWxlLmM6MjEwOTpcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxubW0vc3dhcGZpbGUuYy0yMTEwLVxcdGZvbGlvX3NldF9kaXJ0eShmb2xpbyk7XFxuLS1cXG5tbS92bXNjYW4uYz02ODI9c3RhdGljIGludCBfX3JlbW92ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vdm1zY2FuLmMtNzM3LVxcdFxcdFxcdHNoYWRvdyA9IHdvcmtpbmdzZXRfZXZpY3Rpb24oZm9saW8sIHRhcmdldF9tZW1jZyk7XFxubW0vdm1zY2FuLmM6NzM4OlxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBzd2FwLCBzaGFkb3csIHRydWUpO1xcbm1tL3Ztc2Nhbi5jLTczOS1cXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XFxuLS1cXG5tbS96c3dhcC5jPTk3ND1zdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbi0tXFxubW0venN3YXAuYy0xMDQ0LVxcdGlmIChyZXQpIHtcXG5tbS96c3dhcC5jOjEwNDU6XFx0XFx0c3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pO1xcbm1tL3pzd2FwLmMtMTA0Ni1cXHRcXHRmb2xpb191bmxvY2soZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMDoyNC45MzMzNDkyODVaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ0ODg1ODIzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgQ3JpdGljYWwgU3dhcCBDYWNoZSBEZWxldGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBzb21lIGxvdy1sZXZlbCwgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHN3YXAgY2FjaGUgZGVsZXRpb24gbG9naWMgd2l0aGluIHRoZSBNTSBzdWJzeXN0ZW0uIFdlJ3JlIGxvb2tpbmcgYXQgY2hhbmdlcyB0byBmdW5jdGlvbnMgbGlrZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGBzd2FwX2NhY2hlX2RlbF9mb2xpb2AsIGFuZCBgX19yZW1vdmVfbWFwcGluZ2Ag4oCTIGFsbCBjcml0aWNhbCBjb21wb25lbnRzIGludm9sdmVkIGluIG1lbW9yeSByZWNsYWltIGFuZCBzd2FwLW91dCBwcm9jZXNzZXMuXG5cblRoZSBrZXkgdGhpbmcgaXMgdGhlIHJlb3JkZXJpbmcgb2YgdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBjYWxsLiBCZWZvcmUgdGhpcywgb3IgcGVyaGFwcyBhIHJlY2VudCByZWZhY3RvcmluZywgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gIHdhcyBjbGVhcmluZyBgZm9saW8tXHUwMDNlc3dhcC52YWxgIGFuZCBjYWxsaW5nIGBmb2xpb19jbGVhcl9zd2FwY2FjaGUoZm9saW8pYC4gTm93LCBpZiBgX19tZW1jZzFfc3dhcG91dGAgY29tZXMgKmFmdGVyKiB0aG9zZSBjbGVhciBvcGVyYXRpb25zLCBvciBpZiB0aGUgb3JkZXJpbmcgd2FzIHRoZSBvdGhlciB3YXkgYXJvdW5kLCB0aGUgYF9fbWVtY2cxX3N3YXBvdXRgIGZ1bmN0aW9uIHdvdWxkIGhpdCBhIHNuYWcg4oCTIGl0IHJlbGllcyBvbiBgZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pYCBhbmQgb24gcmVhZGluZyBgZm9saW8tXHUwMDNlc3dhcGAgLSBhbmQgd2Uga25vdyB0aGlzIGNvdWxkIGNhdXNlIGEgZmFpbHVyZSwgc3BlY2lmaWNhbGx5IGEgYFZNX1dBUk5fT05fT05DRV9GT0xJT2AuIEFuZCBvZiBjb3Vyc2UsIHRoZSBvcmRlciBvZiBub2RlIHN0YXRzIGFuZCBscnV2ZWMgc3RhdHMgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIGFkanVzdGVkIGFzIHdlbGwuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIGRpcmVjdGx5IGFmZmVjdHMgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBzd2FwIGNhY2hlIGRlbGV0aW9uLCBtZW1vcnkgcmVjbGFpbSwgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG1lbWNnLiBHaXZlbiBpdHMgbG9jYXRpb24gd2l0aGluIE1NLCBpdOKAmXMgZ29pbmcgdG8gYmUgdHJpZ2dlcmVkIGluIGFueSBzdGFuZGFyZCBMaW51eCBlbnZpcm9ubWVudCBleHBlcmllbmNpbmcgc3dhcHBpbmcgb3IgbWVtb3J5IHByZXNzdXJlLiBUaGlzIG1ha2VzIGl0IGEgaGlnaC12YWx1ZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cbk15IG5leHQgc3RlcCBpcyB0byBtYWtlIHN1cmUgd2UndmUgZ290IHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb25zIGFuZCBzeW1ib2xzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGBDT05GSUdfU1dBUGAsIGBDT05GSUdfTUVNQ0dgLCBhbmQgYENPTkZJR19NRU1DR19WMWAsIGFuZCBwZXJoYXBzIGdyZXAgYXJvdW5kIGluIGBtbS9LY29uZmlnYCBvciBgaW5pdC9LY29uZmlnYCB0byBiZSBjZXJ0YWluLiBHaXZlbiB0aGlzIGxldmVsIG9mIGNoYW5nZSwgaXTigJlzIHdvcnRoIHRoZSBlZmZvcnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDIyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEwOjQ5LjQyMTkzODY0MloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MTk2MjI0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJNRU1DR19WMVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI3NjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjc3LVxcdC8qIExlZ2FjeSBjb25zdW1lci1vcmllbnRlZCBjb3VudGVycyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEwLVxcdGludCBzd2FwcGluZXNzO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjMxMTojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMzEyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkwNj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF96c3dhcF93cml0ZWJhY2tfZW5hYmxlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTE1LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5MTY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MTctYm9vbCBtZW1fY2dyb3VwX29vbV9zeW5jaHJvbml6ZShib29sIHdhaXQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTkzMD1zdGF0aWMgaW5saW5lIHZvaWQgbWVtX2Nncm91cF9leGl0X3VzZXJfZmF1bHQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5MzUtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTkzNjojZWxzZSAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTM3LXN0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX2luX21lbWNnX29vbShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1NC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU1OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTU2LVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjE5NTc6I2lmIGRlZmluZWQoQ09ORklHX01FTUNHX1YxKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TV0FQKVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NTgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODM1PXN0cnVjdCB0YXNrX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTAzMC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTAzMTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEwMzItXFx0dW5zaWduZWRcXHRcXHRcXHRpbl91c2VyX2ZhdWx0OjE7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTU2Ny1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTU2ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTE1NjktXFx0c3RydWN0IG1lbV9jZ3JvdXBcXHRcXHQqbWVtY2dfaW5fb29tO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9MTM9c3RydWN0IHZtcHJlc3N1cmUge1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMTgtXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6MTk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTIwLVxcdC8qXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC0yMi1cXHQgKiAobWVtb3J5LnByZXNzdXJlX2xldmVsKS4gRHJhaW5lZCBieSBAd29yay4gdjIgaGFzIG5vIGVxdWl2YWxlbnRcXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDoyMzpcXHQgKiBpbnRlcmZhY2UsIHNvIHRoaXMgc3RhdGUgaXMgb21pdHRlZCBvbiBDT05GSUdfTUVNQ0dfVjE9biBidWlsZHMuXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtMjQtXFx0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD01NT1leHRlcm4gZW51bSB2bXByZXNzdXJlX2xldmVscyB2bXByZXNzdXJlX2NhbGNfbGV2ZWwodW5zaWduZWQgbG9uZyBzY2FubmVkLFxcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtNTctXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg6NTg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTU5LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfcHJpbyhnZnBfdCBnZnAsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IHByaW8pO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmg9NjM9ZXh0ZXJuIHZvaWQgdm1wcmVzc3VyZV91bnJlZ2lzdGVyX2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTY1LVxcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oOjY2Oi8qIHYxIGhvb2tzIGNhbGxlZCBmcm9tIG1tL3ZtcHJlc3N1cmUuYzsgbm8tb3BzIGJlbG93IHdoZW4gIU1FTUNHX1YxLiAqL1xcbmluY2x1ZGUvbGludXgvdm1wcmVzc3VyZS5oLTY3LWV4dGVybiB2b2lkIHZtcHJlc3N1cmVfdjFfaW5pdChzdHJ1Y3Qgdm1wcmVzc3VyZSAqdm1wcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaD03Nz1zdGF0aWMgaW5saW5lIHZvaWQgdm1wcmVzc3VyZV92MV9hY2NvdW50X3RyZWUoc3RydWN0IHZtcHJlc3N1cmUgKnZtcHIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaC03OS1cXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHJlY2xhaW1lZCkge31cXG5pbmNsdWRlL2xpbnV4L3ZtcHJlc3N1cmUuaDo4MDojZW5kaWYgLyogQ09ORklHX01FTUNHX1YxICovXFxuaW5jbHVkZS9saW51eC92bXByZXNzdXJlLmgtODEtXFxuLS1cXG5pbmNsdWRlL25ldC9zb2NrLmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtX2Nncm91cF9za191bmRlcl9tZW1vcnlfcHJlc3N1cmUoY29uc3Qgc3RydWN0IHNvY2sgKnNrKVxcbi0tXFxuaW5jbHVkZS9uZXQvc29jay5oLTI3MDUtXFxuaW5jbHVkZS9uZXQvc29jay5oOjI3MDY6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbmluY2x1ZGUvbmV0L3NvY2suaC0yNzA3LVxcdGlmICghY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcwOC1cXHRcXHRyZXR1cm4gISFtZW1jZy1cXHUwMDNldGNwbWVtX3ByZXNzdXJlO1xcbmluY2x1ZGUvbmV0L3NvY2suaDoyNzA5OiNlbmRpZiAvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5pbmNsdWRlL25ldC9zb2NrLmgtMjcxMC1cXG4tLVxcbmluaXQvS2NvbmZpZz0xMTAxPWNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbi0tXFxuaW5pdC9LY29uZmlnLTExMDctXFxuaW5pdC9LY29uZmlnOjExMDg6Y29uZmlnIE1FTUNHX1YxXFxuaW5pdC9LY29uZmlnLTExMDktXFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG4tLVxcbm1tL01ha2VmaWxlPTEwMz1vYmotJChDT05GSUdfTElWRVVQREFURV9NRU1GRCkgKz0gbWVtZmRfbHVvLm9cXG5tbS9NYWtlZmlsZToxMDQ6b2JqLSQoQ09ORklHX01FTUNHX1YxKSArPSBtZW1jb250cm9sLXYxLm9cXG5tbS9NYWtlZmlsZS0xMDUtb2JqLSQoQ09ORklHX01FTUNHKSArPSBtZW1jb250cm9sLm8gdm1wcmVzc3VyZS5vXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTEyMz12b2lkIG1lbWNnMV9vb21fZmluaXNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBsb2NrZWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTEzMC0gKiBjZ3JvdXAgdjEgdXNlcnNwYWNlIHZtcHJlc3N1cmUgaW50ZXJmYWNlIChtZW1vcnkucHJlc3N1cmVfbGV2ZWwgL1xcbm1tL21lbWNvbnRyb2wtdjEuYzoxMTMxOiAqIGNncm91cC5ldmVudF9jb250cm9sKS4gS2VwdCBoZXJlIHNvIHYyLW9ubHkga2VybmVscyAoQ09ORklHX01FTUNHX1YxPW4pXFxubW0vbWVtY29udHJvbC12MS5jLTExMzItICogZHJvcCB0aGUgd2hvbGUgZXZlbnRmZCBhY2N1bXVsYXRvciwgaXRzIHdvcmsgaXRlbSwgYW5kIHRoZSBwZXItbWVtY2dcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0yNT1zdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTI4LS8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cXG5tbS9tZW1jb250cm9sLXYxLmg6Mjk6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wtdjEuaC0zMC1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD04Nj1leHRlcm4gc3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdO1xcbm1tL21lbWNvbnRyb2wtdjEuaC04Ny1cXG5tbS9tZW1jb250cm9sLXYxLmg6ODg6I2Vsc2VcXHQvKiBDT05GSUdfTUVNQ0dfVjEgKi9cXG5tbS9tZW1jb250cm9sLXYxLmgtODktXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmg9MTE4PXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpIHt9XFxubW0vbWVtY29udHJvbC12MS5oLTExOS1cXG5tbS9tZW1jb250cm9sLXYxLmg6MTIwOiNlbmRpZlxcdC8qIENPTkZJR19NRU1DR19WMSAqL1xcbm1tL21lbWNvbnRyb2wtdjEuaC0xMjEtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MjE1PXN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMzQtXFxubW0vbWVtY29udHJvbC5jOjIzNTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTIzNi1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTA9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTcyLVxcbm1tL21lbWNvbnRyb2wuYzo1NzM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01NzQtc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01OTg9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxubW0vbWVtY29udHJvbC5jOjU5OTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTYwMC1cXHRQR1BHSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9ODMyPXN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy04NDctXFxubW0vbWVtY29udHJvbC5jOjg0ODojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTg0OS0vKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTkxNj12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05MjgtXFxubW0vbWVtY29udHJvbC5jOjkyOTojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTkzMC0vKiBpZHggY2FuIGJlIG9mIHR5cGUgZW51bSBtZW1jZ19zdGF0X2l0ZW0gb3Igbm9kZV9zdGF0X2l0ZW0uICovXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEwND1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTExLVxcbm1tL21lbWNvbnRyb2wuYzoxMTEyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTExMy11bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNjk2PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzAxLVxcbm1tL21lbWNvbnRyb2wuYzoxNzAyOiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTcwMy11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTcyMj1zdGF0aWMgdm9pZCBtZW1jZ19zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE3NjgtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2dfdm1fZXZlbnRfc3RhdCk7IGkrKykge1xcbm1tL21lbWNvbnRyb2wuYzoxNzY5OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtMTc3MC1cXHRcXHRpZiAobWVtY2dfdm1fZXZlbnRfc3RhdFtpXSA9PSBQR1BHSU4gfHxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xODIwPXZvaWQgbWVtX2Nncm91cF9wcmludF9vb21fbWVtaW5mbyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTg0MS1cXHRcXHRcXHRhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c1tNRU1DR19TV0FQX01BWF0pKTtcXG5tbS9tZW1jb250cm9sLmM6MTg0MjojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTE4NDMtXFx0ZWxzZSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDIzNT1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2NzcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00MjU1LVxcdFxcdHBhZ2VfY291bnRlcl9pbml0KFxcdTAwMjZtZW1jZy1cXHUwMDNlc3dhcCwgXFx1MDAyNnBhcmVudC1cXHUwMDNlc3dhcCwgZmFsc2UpO1xcbm1tL21lbWNvbnRyb2wuYzo0MjU2OiNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmMtNDI1Ny1cXHRcXHRXUklURV9PTkNFKG1lbWNnLVxcdTAwM2Vzd2FwcGluZXNzLCBtZW1fY2dyb3VwX3N3YXBwaW5lc3MocGFyZW50KSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDI2OS1cXHRcXHRwYWdlX2NvdW50ZXJfaW5pdChcXHUwMDI2bWVtY2ctXFx1MDAzZXN3YXAsIE5VTEwsIGZhbHNlKTtcXG5tbS9tZW1jb250cm9sLmM6NDI3MDojaWZkZWYgQ09ORklHX01FTUNHX1YxXFxubW0vbWVtY29udHJvbC5jLTQyNzEtXFx0XFx0cGFnZV9jb3VudGVyX2luaXQoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtLCBOVUxMLCBmYWxzZSk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQzNj1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yZXNldChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ0NDYtI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjQ0NDc6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy00NDQ4LVxcdHBhZ2VfY291bnRlcl9zZXRfbWF4KFxcdTAwMjZtZW1jZy1cXHUwMDNla21lbSwgUEFHRV9DT1VOVEVSX01BWCk7XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE3Nj1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1vcnlfY2dycF9zdWJzeXMgPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE4Ny1cXHQuZGZsX2NmdHlwZXMgPSBtZW1vcnlfZmlsZXMsXFxubW0vbWVtY29udHJvbC5jOjUxODg6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy01MTg5LVxcdC5sZWdhY3lfY2Z0eXBlcyA9IG1lbV9jZ3JvdXBfbGVnYWN5X2ZpbGVzLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYxODc9c3RhdGljIGludCBfX2luaXQgbWVtX2Nncm91cF9zd2FwX2luaXQodm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MTkyLVxcdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBzd2FwX2ZpbGVzKSk7XFxubW0vbWVtY29udHJvbC5jOjYxOTM6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYy02MTk0LVxcdFdBUk5fT04oY2dyb3VwX2FkZF9sZWdhY3lfY2Z0eXBlcyhcXHUwMDI2bWVtb3J5X2NncnBfc3Vic3lzLCBtZW1zd19maWxlcykpO1xcbi0tXFxubW0vc3dhcC5oPTg1PXN0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfc3dhcHBpbmVzcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vc3dhcC5oLTg2LXtcXG5tbS9zd2FwLmg6ODc6I2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL3N3YXAuaC04OC1cXHRpZiAoIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykgXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTA6NTEuMjEzOTA3Mzk4WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NjcwODQwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYCwgYW5kIGZvY3VzIG9uIGEgZmV3IGtleSBhcmVhcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZW1vcnkgY29udHJvbCBncm91cHMsIHBhcnRpY3VsYXJseSB2ZXJzaW9uIDEgKGBDT05GSUdfTUVNQ0dfVjFgKSwgdGhlIGdlbmVyYWwgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgKGBDT05GSUdfTUVNQ0dgKSBmZWF0dXJlLCBhbmQgdGhlIHN3YXAgY29uZmlndXJhdGlvbiAoYENPTkZJR19TV0FQYCkgYXJlIGJlaW5nIGRlZmluZWQgYW5kIGludGVycmVsYXRlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgYXNzZXNzaW5nIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgaG93IHRoZXkgaW5mbHVlbmNlIG92ZXJhbGwgbWVtb3J5IGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGVzZSBvcHRpb25zIGFyZSBjb25maWd1cmVkLCBhbnkgZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlbSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgYnJvYWRlciBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUgd2l0aGluIHRoZSBrZXJuZWwuIFRpbWUgdG8gZ28gaHVudGluZyBmb3Igc29tZSBLY29uZmlnIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2OTM4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTA6NTMuMTgwOTk1ODRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMzODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMTAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTExNTpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTExNjpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTc6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTEyMDpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTIxOlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMjI6XFx0XFxuMTEyMzpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTI0OlxcdFxcbjExMjU6XFx0Y29uZmlnIEJMS19DR1JPVVBcXG4xMTI2OlxcdFxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuMTEyNzpcXHRcXHRkZXBlbmRzIG9uIEJMT0NLXFxuMTEyODpcXHRcXHRkZWZhdWx0IG5cXG4xMTI5OlxcdFxcdGhlbHBcXG4xMTMwOlxcdFxcdEdlbmVyaWMgYmxvY2sgSU8gY29udHJvbGxlciBjZ3JvdXAgaW50ZXJmYWNlLiBUaGlzIGlzIHRoZSBjb21tb25cXG4xMTMxOlxcdFxcdGNncm91cCBpbnRlcmZhY2Ugd2hpY2ggc2hvdWxkIGJlIHVzZWQgYnkgdmFyaW91cyBJTyBjb250cm9sbGluZ1xcbjExMzI6XFx0XFx0cG9saWNpZXMuXFxuMTEzMzpcXHRcXG4xMTM0OlxcdFxcdEN1cnJlbnRseSwgQ0ZRIElPIHNjaGVkdWxlciB1c2VzIGl0IHRvIHJlY29nbml6ZSB0YXNrIGdyb3VwcyBhbmRcXG4xMTM1OlxcdFxcdGNvbnRyb2wgZGlzayBiYW5kd2lkdGggYWxsb2NhdGlvbiAocHJvcG9ydGlvbmFsIHRpbWUgc2xpY2UgYWxsb2NhdGlvbilcXG4xMTM2OlxcdFxcdHRvIHN1Y2ggdGFzayBncm91cHMuIEl0IGlzIGFsc28gdXNlZCBieSBiaW8gdGhyb3R0bGluZyBsb2dpYyBpblxcbjExMzc6XFx0XFx0YmxvY2sgbGF5ZXIgdG8gaW1wbGVtZW50IHVwcGVyIGxpbWl0IGluIElPIHJhdGVzIG9uIGEgZGV2aWNlLlxcbjExMzg6XFx0XFxuMTEzOTpcXHRcXHRUaGlzIG9wdGlvbiBvbmx5IGVuYWJsZXMgZ2VuZXJpYyBCbG9jayBJTyBjb250cm9sbGVyIGluZnJhc3RydWN0dXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMDo1My4xODExMzE3NzFaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2Nzk1MDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzd2FwIGNvbmZpZ3VyYXRpb24uIExldCdzIHN0YXJ0IGJ5IGRpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gSSdtIGdvaW5nIHN0cmFpZ2h0IGZvciBgQ09ORklHX1NXQVBgLiBUaGF0J3MgdGhlIGNvcmUgc2V0dGluZywgc28gaXQncyB0aGUgb2J2aW91cyBmaXJzdCBwb2ludCBvZiBpbnZlc3RpZ2F0aW9uLiBIb3BlZnVsbHksIEkgY2FuIGZpbmQgdGhlIGRlcGVuZGVuY3kgZ3JhcGggYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBmaWd1cmUgb3V0IHRoZSBkZWZhdWx0IGJlaGF2aW9yLiBUaGVuLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IG90aGVyIG9wdGlvbnMgYXJlIGltcGFjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzczOCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTA6NTUuMzQ5MDg2MDM4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDYxNjc1Mzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTA6NTcuODEwNzcwOTU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzNDExNDYzMzU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFN3YXAgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIHdlIG5lZWQgdG8gbG9vayBhdCBob3cgc3dhcCBpcyBoYW5kbGVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gTXkgaW5zdGluY3Qgc2F5cyB0byBzdGFydCB3aXRoIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgcHJpbWFyeSBvcHRpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBgQ09ORklHX1NXQVBgIGZlZWxzIGxpa2UgaXQgc2hvdWxkIHJlc2lkZSB3aXRoaW4gdGhhdCBhcmVhLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCByZWdhcmRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygc3dhcCBzcGFjZS4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyBmaWxlIHdpbGwgcmV2ZWFsIG5vdCBvbmx5IHRoZSBgQ09ORklHX1NXQVBgIG9wdGlvbiBpdHNlbGYsIGJ1dCBhbHNvIGl0cyBkZXBlbmRlbmNpZXMsIGFueSByZWxldmFudCBoZWxwIHRleHQsIGFuZCBwb3NzaWJseSByZWxhdGVkIG9wdGlvbnMgdGhhdCBjb250cm9sIHN3YXAgYmVoYXZpb3IuIEknbSBob3BpbmcgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBpcyBlbmFibGVkLCB3aGF0IHRoZSBkZWZhdWx0IGlzLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCdzIGdldCBkaWdnaW5nIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk1OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjIxLjIyMjIzODAyMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUxOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAxMDpcXHRcXHRib29sXFxuICAxMTpcXHRcXG4gIDEyOlxcdG1lbnVjb25maWcgU1dBUFxcbiAgMTM6XFx0XFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgcGFnaW5nIG9mIGFub255bW91cyBtZW1vcnkgKHN3YXApXFxcIlxcbiAgMTQ6XFx0XFx0ZGVwZW5kcyBvbiBNTVUgXFx1MDAyNlxcdTAwMjYgQkxPQ0sgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfTk9fU1dBUFxcbiAgMTU6XFx0XFx0ZGVmYXVsdCB5XFxuICAxNjpcXHRcXHRoZWxwXFxuICAxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XFxuICAxODpcXHRcXHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcXG4gIDE5OlxcdFxcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XFxuICAyMDpcXHRcXHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXFxuICAyMTpcXHRcXG4gIDIyOlxcdGNvbmZpZyBaU1dBUFxcbiAgMjM6XFx0XFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4gIDI0OlxcdFxcdGRlcGVuZHMgb24gU1dBUFxcbiAgMjU6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMjY6XFx0XFx0c2VsZWN0IFpTTUFMTE9DXFxuICAyNzpcXHRcXHRoZWxwXFxuICAyODpcXHRcXHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXFxuICAyOTpcXHRcXHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xcbiAgMzA6XFx0XFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxcbiAgMzE6XFx0XFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcXG4gIDMyOlxcdFxcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxcbiAgMzM6XFx0XFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cXG4gIDM2OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XFxcIlxcbiAgMzc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgMzg6XFx0XFx0aGVscFxcbiAgMzk6XFx0XFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjIxLjIyMjM0NTAyMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzg2MTM2MDMxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipDaGVja2luZyBLZXJuZWwgTWVtb3J5IENvbnRyb2wgR3JvdXAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB2ZXJpZnkgdGhlIHN0YXR1cyBvZiBgQ09ORklHX01FTUNHYC4gVGhpcyBsaWtlbHkgbWVhbnMgSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIGVuYWJsZWQgaW4gdGhlIGN1cnJlbnQga2VybmVsIGNvbmZpZ3VyYXRpb24uIFRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHByb2FjaCBpcyB0byBsb29rIGRpcmVjdGx5IGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuIE15IGZpcnN0IHN0ZXAgaXMgdG8gbG9jYXRlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIGRlZmluaXRpb24uIEdpdmVuIHRoYXQgdGhlc2Ugc2V0dGluZ3MgYXJlIHR5cGljYWxseSBkZWZpbmVkIGluIGBLY29uZmlnYCBmaWxlcywgYW5kIGNvbnNpZGVyaW5nIHRoZSBrZXJuZWwncyBpbml0aWFsaXphdGlvbiBhc3BlY3RzLCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhlIHBsYWNlIHRvIHN0YXJ0IGlzIHdpdGhpbiB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gVGhlcmVmb3JlLCBsZXQncyBmaXJlIG9mZiBhIGBncmVwYCBjb21tYW5kIHRvIHNlYXJjaCBmb3IgaW5zdGFuY2VzIG9mIFwiY29uZmlnIE1FTUNHXCIg4oCTIHNwZWNpZmljYWxseSwgdXNpbmcgdGhlIHdvcmQgYm91bmRhcnkgYFxcYmAgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzIHdpdGggc2ltaWxhciBuYW1lcyDigJMgd2l0aGluIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBUaGlzIHNob3VsZCBxdWlja2x5IHRlbGwgbWUgaWYgdGhlIGBDT05GSUdfTUVNQ0dgIHN5bWJvbCBpcyBkZWZpbmVkLCBhbmQgaWRlYWxseSwgcHJvdmlkZSBpbnNpZ2h0IGludG8gaG93IGl0J3MgZGVmaW5lZCAoZS5nLiwgYXMgYSBib29sLCB0cmlzdGF0ZSwgZXRjLikgYW5kIHdoYXQgaXRzIGRlZmF1bHQgc2V0dGluZyBtaWdodCBiZS4gVGhhdCdzIHRoZSBmaXJzdCBzdGVwIGluIGdldHRpbmcgYSBoYW5kbGUgb24gdGhlIG1lbWNnIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYwNiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTE6MzUuMDgzNzA4OTFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTk0NTU1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXFxcXGJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwNzU9Y29uZmlnIENHUk9VUF9GQVZPUl9EWU5NT0RTXFxuLS1cXG5pbml0L0tjb25maWctMTA4NC1cXG5pbml0L0tjb25maWc6MTA4NTpjb25maWcgTUVNQ0dcXG5pbml0L0tjb25maWctMTA4Ni1cXHRib29sIFxcXCJNZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTE6MzcuOTQzMTcyMTU2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzNDU4MzA0MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpdmluZyBpbnRvIEtjb25maWcgZm9yIE1lbW9yeSBDR3JvdXBzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgemVyb2luZyBpbiBvbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMsIHNwZWNpZmljYWxseSBgaW5pdC9LY29uZmlnYC4gV2UncmUgZGVhbGluZyB3aXRoIG1lbW9yeSBjZ3JvdXBzLCBzbyB0aGF0J3Mgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBpbml0aWFsIGRlZmluaXRpb24gYW5kIGRlcGVuZGVuY3kgaGFuZGxpbmcgZm9yIGBDT05GSUdfTUVNQ0dgLiBUaGlzIGZpbGUgdXN1YWxseSBvdXRsaW5lcyB0aGUgbWFqb3IgZmVhdHVyZSBmbGFncy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIGRlZmluaXRpb24gdG8gdW5kZXJzdGFuZCBob3cgaXQncyBwcmVzZW50ZWQgYW5kIGlmIHRoZXJlIGFyZSBhbnkgcmVsYXRlZCBvciBkZXBlbmRlbnQgb3B0aW9ucyBJIHNob3VsZCBhbHNvIGJlIG1pbmRmdWwgb2YuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODk5NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjQxLjI4OTAwNjMwNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjM3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5pdC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwODA6XFx0XFx0ICBhcyB0YXNrIG1pZ3JhdGlvbnMgYW5kIGNvbnRyb2xsZXIgb24vb2ZmcyBhdCB0aGUgY29zdCBvZiBtYWtpbmdcXG4xMDgxOlxcdFxcdCAgaG90IHBhdGggb3BlcmF0aW9ucyBzdWNoIGFzIGZvcmtzIGFuZCBleGl0cyBtb3JlIGV4cGVuc2l2ZS5cXG4xMDgyOlxcdFxcbjEwODM6XFx0XFx0ICBTYXkgTiBpZiB1bnN1cmUuXFxuMTA4NDpcXHRcXG4xMDg1OlxcdGNvbmZpZyBNRU1DR1xcbjEwODY6XFx0XFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTA4NzpcXHRcXHRzZWxlY3QgUEFHRV9DT1VOVEVSXFxuMTA4ODpcXHRcXHRzZWxlY3QgRVZFTlRGRFxcbjEwODk6XFx0XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbjEwOTA6XFx0XFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXFxuMTA5MTpcXHRcXHRoZWxwXFxuMTA5MjpcXHRcXHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG4xMDk1OlxcdFxcdGJvb2xcXG4xMDk2OlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMDk3OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMDk4OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4xMTAyOlxcdFxcdGJvb2xcXG4xMTAzOlxcdFxcdGRlcGVuZHMgb24gTUVNQ0dcXG4xMTA0OlxcdFxcdGRlcGVuZHMgb24gSEFWRV9OTUlcXG4xMTA1OlxcdFxcdGRlcGVuZHMgb24gIUFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QUyBcXHUwMDI2XFx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xcbjExMDY6XFx0XFx0ZGVmYXVsdCB5XFxuMTEwNzpcXHRcXG4xMTA4OlxcdGNvbmZpZyBNRU1DR19WMVxcbjExMDk6XFx0XFx0Ym9vbCBcXFwiTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTE6NDEuMjg5Mzc3NjM2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE1Mjg0MjYyMjg3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE1lbW9yeSBDb250cm9sIGFuZCBTd2FwIEZ1bmN0aW9uIENoYW5nZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgZm9jdXMgaXMgb24gdGhlIGBfX21lbWNnMV9zd2Fwb3V0YCBmdW5jdGlvbiBhbmQgaXRzIGRlcGVuZGVuY2llcy4gVGhpcyBmdW5jdGlvbiBpcyBzcGVjaWZpY2FsbHkgdGllZCB0byBgQ09ORklHX01FTUNHX1YxYCBhbmQgYENPTkZJR19TV0FQYC4gQSBxdWljayBjaGVjayBjb25maXJtcyB0aGlzIGluIGBpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaGAuIEltcG9ydGFudGx5LCBgQ09ORklHX01FTUNHX1YxYCByZWxpZXMgb24gYENPTkZJR19NRU1DR2AsIGFuZCBgQ09ORklHX1NXQVBgIGhpbmdlcyBvbiBgTU1VYCwgYEJMT0NLYCwgYW5kIHRoZSBhYnNlbmNlIG9mIGBBUkNIX05PX1NXQVBgLiBTbywgaWYgdGhlc2UgY29yZSBjb25maWd1cmF0aW9ucyAoYFNXQVBgLCBgTUVNQ0dgLCBhbmQgYE1FTUNHX1YxYCkgYXJlIGVuYWJsZWQsIHRoZSBjb2RlIHdpbGwgdXNlIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBzd2FwIGNhY2hlIGRlbGV0aW9uIGFuZCBtZW1vcnkgY2dyb3VwIHZlcnNpb24gMSBzd2Fwb3V0IGNoYXJnZSBhY2NvdW50aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzLiBJJ3ZlIGlkZW50aWZpZWQgdGhyZWU6IGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCAoYm90aCBpbiBgbW0vc3dhcF9zdGF0ZS5jYCksIGFuZCBgX19yZW1vdmVfbWFwcGluZ2AgKGluIGBtbS92bXNjYW4uY2AsIGRlY2xhcmVkIGFzIHN0YXRpYykuXG5cbkxldCdzIHZlcmlmeSB0aGUgc3ltYm9scy4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBkZWNsYXJlZCBpbiBgbW0vc3dhcC5oYCBhbmQgZGVmaW5lZCBpbiBgbW0vc3dhcF9zdGF0ZS5jYC4gIGBfX21lbWNnMV9zd2Fwb3V0YCBpcyBkZWNsYXJlZCBpbiBgaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmhgIGFuZCBkZWZpbmVkIGluIGBtbS9tZW1jb250cm9sLXYxLmNgLiBUaGV5IGFyZSBhbGwgbm9uLXN0YXRpYy5cblxuQXJlIHRoZXNlIGZ1bmN0aW9ucywgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBzdWl0YWJsZSBmb3IgbXkgRm9jdXNTeW1ib2xzPyBBYnNvbHV0ZWx5LiBUaGV5J3JlIGludm9sdmVkIGluIHN3YXAgb3BlcmF0aW9ucywgbGlrZSBgc2htZW1fc3dhcGluX2ZvbGlvYCwgYHNobWVtX3dyaXRlb3V0YCwgYGZvbGlvX2FsbG9jX3N3YXBgLCBgZm9saW9fZnJlZV9zd2FwYCwgYGRvX3N3YXBfcGFnZWAsIGBtZV9zd2FwY2FjaGVfY2xlYW5gIGV0Yy4gIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBpcyBjYWxsZWQgYnkgYHN3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fcmVtb3ZlX21hcHBpbmdgLlxuXG5MZXQgbWUgY2hlY2sgdGhlIG90aGVyIGNoYW5nZXMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guIEluIGBtbS9zd2FwLmhgLCB0aGUgZGVjbGFyYXRpb24gb2YgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIG5vdyBpbmNsdWRlcyBhIGBib29sIHN3YXBvdXRgIHBhcmFtZXRlciwgYW5kIHRoZSBpbmxpbmUgZHVtbXkgdmVyc2lvbiAoaWYgYENPTkZJR19TV0FQYCBpc24ndCBlbmFibGVkKSBoYXMgYmVlbiB1cGRhdGVkLiBUaGUgZGVmaW5pdGlvbnMgb2YgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFuZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIGFyZSBpbiBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBfX3JlbW92ZV9tYXBwaW5nYCBpcyBpbiBgbW0vdm1zY2FuLmNgLlxuXG5MZXQncyBzb2xpZGlmeSBteSBGb2N1c1N5bWJvbHMgYW5kIEVuYWJsZUNvbmZpZ3M6XG5cbkZvY3VzU3ltYm9sczogYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gLCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gXG5cbkVuYWJsZUNvbmZpZ3M6IGBTV0FQYCwgYE1FTUNHYCwgYE1FTUNHX1YxYFxuXG5GaW5hbGx5LCBpcyB0aGlzIHBhdGNoIFwiV29ydGhGdXp6aW5nXCI/IFllcywgd2l0aG91dCBhIGRvdWJ0LiBJdCdzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHdpdGhpbiB0aGUgTU0gdGhhdCBkZWFscyB3aXRoIGhvdyB0aGUgc3dhcCBjYWNoZSBpcyBkZWxldGVkLCBhbmQgaXQncyBhbHNvIHRpZWQgdG8gbWVtY2cgdjEgc3dhcG91dCBjaGFyZ2UgYWNjb3VudGluZy4gQSBmaW5hbCByZXZpZXcgY29uZmlybXMgYWxsIGNyaXRlcmlhIGFyZSBtZXQuIEkgYW0gbm93IGNvbmZpZGVudC4gUmVhZHkgZm9yIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjIyLCJPdXRwdXRUb2tlbnMiOjEzOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg3MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjU2LjU3MzY0NDUwM1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5NzQ3NzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvXCIsXG4gICAgXCJzd2FwX2NhY2hlX2RlbF9mb2xpb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHN3YXAgY2FjaGUgZGVsZXRpb24gbG9naWMgaW4gX19zd2FwX2NhY2hlX2RlbF9mb2xpbyBhbmQgc3dhcF9jYWNoZV9kZWxfZm9saW8sIHJlcG9zaXRpb25pbmcgdGhlIGNncm91cCB2MSBtZW1zdyBjaGFyZ2UgdHJhbnNmZXIgKF9fbWVtY2cxX3N3YXBvdXQpIGJlZm9yZSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSB0byBhdm9pZCByZWZlcmVuY2luZyBjbGVhcmVkIHN3YXAgbWV0YWRhdGEuIFRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0cyBtZW1vcnkgcmVjbGFtYXRpb24gYW5kIHN3YXBwaW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJNRU1DR19WMVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fc3dhcF9jYWNoZV9kZWxfZm9saW9cIixcbiAgICBcInN3YXBfY2FjaGVfZGVsX2ZvbGlvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgc3dhcCBjYWNoZSBkZWxldGlvbiBsb2dpYyBpbiBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvIGFuZCBzd2FwX2NhY2hlX2RlbF9mb2xpbywgcmVwb3NpdGlvbmluZyB0aGUgY2dyb3VwIHYxIG1lbXN3IGNoYXJnZSB0cmFuc2ZlciAoX19tZW1jZzFfc3dhcG91dCkgYmVmb3JlIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIHRvIGF2b2lkIHJlZmVyZW5jaW5nIGNsZWFyZWQgc3dhcCBtZXRhZGF0YS4gVGhpcyBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RzIG1lbW9yeSByZWNsYW1hdGlvbiBhbmQgc3dhcHBpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjExOjU2LjY1MzQwMDQxN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5ODEwNjMwMDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTE6NTYuNjUzOTk2ODk3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE5ODEwMDI4NTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgc3dhcCBjYWNoZSBmb2xpbyBkZWxldGlvbiBieSBpbnRlZ3JhdGluZyBgX19tZW1jZzFfc3dhcG91dCgpYCBpbnRvIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKClgIHdpdGggYSBgYm9vbCBzd2Fwb3V0YCBwYXJhbWV0ZXIuIFxcblxcblRoaXMgY2hhbmdlIGRvZXMgbm90IGludm9sdmUgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCBzdGFjay9oZWFwIGJ1ZmZlciBjb3BpZXMsIGtlcm5lbC10by11c2VyIGluZm8tbGVha3MsIG9yIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gVGhlIGJvb2xlYW4gZmxhZyBgc3dhcG91dGAgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgY29uc3RhbnQgbGl0ZXJhbHMgKGB0cnVlYC9gZmFsc2VgKS4gQW55IHBvdGVudGlhbCBpc3N1ZXMgYXJpc2luZyBmcm9tIHRoaXMgcmVmYWN0b3Jpbmcgd291bGQgaW52b2x2ZSBmb2xpbyBsaWZlY3ljbGUgc3RhdGUsIHJlZmVyZW5jZSBjb3VudGluZywgbWVtY2cgYWNjb3VudGluZywgb3IgbG9ja2luZywgd2hpY2ggYXJlIHRyYWNrZWQgYnkgc3RhbmRhcmQga2VybmVsIGRlYnVnIGFzc2VydGlvbnMsIExPQ0tERVAsIGFuZCBLQVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3MGZmZjBmNGE2MmZhMWI0MDExYmI2YWM1M2NiZjZhNzYwNzEzZGU3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMzowNzo1NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxuaW5kZXggMGI1ZDUwNzczOWJjYi4uYjNiNTRjMjg5MjlhMSAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuKysrIGIvbW0vc3dhcC5oXG5AQCAtMzE5LDcgKzMxOSw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLFxuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4tXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpO1xuK1x0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRcdCAgICBib29sIHN3YXBvdXQpO1xuIHZvaWQgX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqb2xkLCBzdHJ1Y3QgZm9saW8gKm5ldyk7XG4gXG5AQCAtNDUyLDcgKzQ1Myw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgX19zd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuLVx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93KVxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSwgdm9pZCAqc2hhZG93LFxuK1x0XHRib29sIHN3YXBvdXQpXG4ge1xuIH1cbiBcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDMwNTg3N2UxZjRkN2IuLjk5OTg1MjA4YjUyOWIgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTMwNiw2ICszMDYsNyBAQCBzdGF0aWMgdm9pZCBfX3N3YXBfY2FjaGVfZG9fZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gICogQGZvbGlvOiBUaGUgZm9saW8uXG4gICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cbiAgKiBAc2hhZG93OiBzaGFkb3cgdmFsdWUgdG8gYmUgZmlsbGVkIGluIHRoZSBzd2FwIGNhY2hlLlxuKyAqIEBzd2Fwb3V0OiB3aGV0aGVyIHRoaXMgb3BlcmF0aW9uIHN3YXBzIG91dCB0aGUgZm9saW8uXG4gICpcbiAgKiBSZW1vdmVzIGEgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQgZmlsbHMgYSBzaGFkb3cgaW4gcGxhY2UuXG4gICogVGhpcyB3b24ndCBwdXQgdGhlIGZvbGlvJ3MgcmVmY291bnQuIFRoZSBjYWxsZXIgaGFzIHRvIGRvIHRoYXQuXG5AQCAtMzE0LDEzICszMTUsMTcgQEAgc3RhdGljIHZvaWQgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuICAqIHVzaW5nIHRoZSBpbmRleCBvZiBAZW50cnksIGFuZCBsb2NrIHRoZSBjbHVzdGVyIHRoYXQgaG9sZHMgdGhlIGVudHJpZXMuXG4gICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3cpXG4rXHRcdFx0ICAgIHN3cF9lbnRyeV90IGVudHJ5LCB2b2lkICpzaGFkb3csIGJvb2wgc3dhcG91dClcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFxuLVx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xuIFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcbiBcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xuK1xuK1x0aWYgKHN3YXBvdXQpXG4rXHRcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcbitcbitcdF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgc2hhZG93KTtcbiB9XG4gXG4gLyoqXG5AQCAtMzM5LDcgKzM0NCw3IEBAIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2xvY2soX19zd2FwX2VudHJ5X3RvX2luZm8oZW50cnkpLCBzd3Bfb2Zmc2V0KGVudHJ5KSk7XG4tXHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgZW50cnksIE5VTEwpO1xuK1x0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBOVUxMLCBmYWxzZSk7XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbiBcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYjRjOWI4ZjNkZmU5OS4uYWY3ZGZhOTA1Y2I1MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTczNSw4ICs3MzUsNyBAQCBzdGF0aWMgaW50IF9fcmVtb3ZlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXG4gXHRcdGlmIChyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXG4gXHRcdFx0c2hhZG93ID0gd29ya2luZ3NldF9ldmljdGlvbihmb2xpbywgdGFyZ2V0X21lbWNnKTtcbi1cdFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xuLVx0XHRfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKGNpLCBmb2xpbywgc3dhcCwgc2hhZG93KTtcbitcdFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XG4gXHRcdHN3YXBfY2x1c3Rlcl91bmxvY2tfaXJxKGNpKTtcbiBcdH0gZWxzZSB7XG4gXHRcdHZvaWQgKCpmcmVlX2ZvbGlvKShzdHJ1Y3QgZm9saW8gKik7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMTo1Ni42NTM5OTg0NzdaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDczMzk1NTE2ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogU3dhcHBpbmcgYW5kIE1lbW9yeSBDZ3JvdXBzKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjb2RlIG1vZGlmaWNhdGlvbnMuIEl0IGxvb2tzIGxpa2UgYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIGlzIG5vdyB0YWtpbmcgYSBib29sZWFuIHBhcmFtZXRlciwgYHN3YXBvdXRgLiBJbnRlcmVzdGluZy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyB0byBiZSB0aGUgbW92ZW1lbnQgb2YgYF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtgIGluc2lkZSBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AsIHJpZ2h0IGJlZm9yZSB0aGUgY2FsbCB0byBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpYC5cblxuU28sIGluIHRoZSBzdGFuZGFyZCBgc3dhcF9jYWNoZV9kZWxfZm9saW9gIHBhdGgsIGBzd2Fwb3V0YCBpcyBwYXNzZWQgYXMgYGZhbHNlYC4gTWFrZXMgc2Vuc2UgZm9yIHRoZSBcIm5vcm1hbFwiIHVuc3dhcHBpbmcuIEJ1dCwgYHN3YXBvdXRgIGlzIHNldCB0byBgdHJ1ZWAgd2hlbiBjYWxsZWQgZnJvbSBgX19yZW1vdmVfbWFwcGluZ2AgaW4gYG1tL3Ztc2Nhbi5jYC4gQWhhLCB0aGF0J3MgdGhlIGtleSBkaWZmZXJlbmNlLiBOb3csIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHRoaXMgcmVvcmRlcmluZyBhbmQgZW5jYXBzdWxhdGlvbiB3aXRoaW4gYF9fc3dhcF9jYWNoZV9kZWxfZm9saW9gIHdhcyBkZWVtZWQgbmVjZXNzYXJ5LlxuXG5UaGUgY29udGV4dCBpcyBjcml0aWNhbCBoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBfX21lbWNnMV9zd2Fwb3V0YCBhY3R1YWxseSBkb2VzIGFuZCBob3cgdGhpcyBjaGFuZ2UgaW50ZXJhY3RzIHdpdGggbWVtb3J5IGNncm91cHMuIElzIHRoaXMgcmVsYXRlZCB0byBhY2NvdW50aW5nIG9yIGEgc3BlY2lmaWMgbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kgZm9yIGNncm91cC1jb250cm9sbGVkIHByb2Nlc3Nlcz8gSSdtIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGluIGBtbS92bXNjYW4uY2AgYW5kIHdpdGhpbiB0aGUgbWVtb3J5IGNncm91cCBjb2RlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgaXQgbWlnaHQgYmUgYWJvdXQgYWNjb3VudGluZyBzd2FwIHVzYWdlIHBlciBtZW1jZyBkdXJpbmcgYWdncmVzc2l2ZSByZWNsYWltLiBJIHN1c3BlY3QgdGhhdCB0aGlzIGNoYW5nZSBpcyBtYWtpbmcgc3VyZSB0aGUgbWVtY2cgYWNjb3VudGluZyBoYXBwZW5zIGNvcnJlY3RseSwgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGluZyBjb250ZXh0LiBMZXQncyBzZWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTYsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMzoxMjo0My45OTM1NjYyOTVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyNDMyMjA1NzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19tZW1jZzFfc3dhcG91dFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xOTUxPXN0YXRpYyBpbmxpbmUgdm9pZCBtZW1fY2dyb3VwX2V4aXRfdXNlcl9mYXVsdCh2b2lkKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTk1OC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxOTU5OnZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpKTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xOTYwLXZvaWQgbWVtY2cxX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjMtXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTk2NDpzdGF0aWMgaW5saW5lIHZvaWQgX19tZW1jZzFfc3dhcG91dChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE5NjUtXFx0XFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDU0OT12b2lkIGRlZmVycmVkX3NwbGl0X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sIGJvb2wgcGFydGlhbGx5X21hcHBlZClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDU2Ny1cXHQgKiBFeGNsdWRlIHN3YXBjYWNoZTogb3JpZ2luYWxseSB0byBhdm9pZCBhIGNvcnJ1cHQgZGVmZXJyZWQgc3BsaXRcXG5tbS9odWdlX21lbW9yeS5jOjQ1Njg6XFx0ICogcXVldWUuIE5vd2FkYXlzIHRoYXQgaXMgZnVsbHkgcHJldmVudGVkIGJ5IF9fbWVtY2cxX3N3YXBvdXQoKTtcXG5tbS9odWdlX21lbW9yeS5jLTQ1NjktXFx0ICogYnV0IGlmIHBhZ2UgcmVjbGFpbSBpcyBhbHJlYWR5IGhhbmRsaW5nIHRoZSBzYW1lIGZvbGlvLCBpdCBpc1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTI0Nz12b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNTgtLyoqXFxubW0vbWVtY29udHJvbC12MS5jOjI1OTogKiBfX21lbWNnMV9zd2Fwb3V0IC0gdHJhbnNmZXIgYSBtZW1zdyBjaGFyZ2UgdG8gc3dhcFxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjAtICogQGZvbGlvOiBmb2xpbyB3aG9zZSBtZW1zdyBjaGFyZ2UgdG8gdHJhbnNmZXJcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yNjgtICovXFxubW0vbWVtY29udHJvbC12MS5jOjI2OTp2b2lkIF9fbWVtY2cxX3N3YXBvdXQoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSlcXG5tbS9tZW1jb250cm9sLXYxLmMtMjcwLXtcXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0zMTc9dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMzI1LVxcdGlmIChzd2Fwb3V0KVxcbm1tL3N3YXBfc3RhdGUuYzozMjY6XFx0XFx0X19tZW1jZzFfc3dhcG91dChmb2xpbywgY2kpO1xcbm1tL3N3YXBfc3RhdGUuYy0zMjctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEyOjQ2LjIzNjc5NTkwN1oiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzYyNTA3NTkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIGNvZGUgbG9jYXRpb25zOlxuXG4qKkRpdmluZyBpbnRvIFN3YXBvdXQgYW5kIE1lbW9yeSBDb250cm9sKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nLCBsZXQncyB6ZXJvIGluIG9uIGBtbS9tZW1jb250cm9sLXYxLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgX19tZW1jZzFfc3dhcG91dGAgZnVuY3Rpb24uIEFuZCB3aGlsZSB3ZSdyZSBhdCBpdCwgbGV0J3Mga2VlcCBgbW0vc3dhcF9zdGF0ZS5jYCBpbiBtaW5kLCBhcyBpdCdzIGJvdW5kIHRvIGhhdmUgcmVsZXZhbnQgY29udGV4dC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIG1lbW9yeSBjb250cm9sIGdyb3VwcyAobWVtY2dzKSBhbmQgaG93IHRoZXkgc3BlY2lmaWNhbGx5IGhhbmRsZSBzd2FwLW91dCBvcGVyYXRpb25zLiBgX19tZW1jZzFfc3dhcG91dGAgc2hvdWxkIGJlIHRoZSBjb3JlIGZ1bmN0aW9uIGZvciBpbml0aWF0aW5nIHRoYXQgcHJvY2VzcywgSSdtIGV4cGVjdGluZy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBpcyBzdHJ1Y3R1cmVkLiBJJ20gaW1hZ2luaW5nIGl0IGRlYWxzIHdpdGggcmVjbGFpbWluZyBwYWdlcywgcG90ZW50aWFsbHkgYmFzZWQgb24gdGhlIGN1cnJlbnQgcHJlc3N1cmUgYW5kIHRoZSBzZXR0aW5ncyBpbXBvc2VkIGJ5IHRoZSBtZW1jZy4gSSdtIGFudGljaXBhdGluZyB0byBlbmNvdW50ZXIgYSBsb3Qgb2YgdGhlIHN0YW5kYXJkIHJlY2xhaW0gcHJvY2VzcywgbGlrZWx5IHNvbWUgcGFnZSBzZWxlY3Rpb24gYmFzZWQgb24gTFJVLCBhbmQgb2YgY291cnNlLCB0aGUgYWN0dWFsIG1lY2hhbmljcyBvZiB3cml0aW5nIHRob3NlIHBhZ2VzIHRvIHN3YXAgc3BhY2UuIEkgc3VzcGVjdCBpdCdsbCBhbHNvIGJlIHJlc3BvbnNpYmxlIGZvciB1cGRhdGluZyBhY2NvdW50aW5nIG1ldHJpY3MuXG5cbkknbGwgYmUgbG9va2luZyBjYXJlZnVsbHkgYXQgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBzd2FwcGluZyBzdGF0ZSBhbmQgdGhlIG92ZXJhbGwgc3dhcCBzeXN0ZW0ncyBkYXRhIHN0cnVjdHVyZXMsIHNwZWNpZmljYWxseSBgc3dhcF9zdGF0ZS5jYCwgd2hpY2ggb3VnaHQgdG8gYmUgdGhlIGNlbnRyYWwgcG9pbnQgb2YgdHJhY2tpbmcgc3dhcHBlZCBwYWdlcyBhbmQgYXZhaWxhYmxlIHN3YXAgc3BhY2UuIEknbGwgYmUgZm9jdXNlZCBvbiB0aGUgbG9naWMgb2Ygc2VsZWN0aW5nIHZpY3RpbXMsIHNldHRpbmcgc3dhcCBlbnRyaWVzLCBhbmQgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBiZXR3ZWVuIG1lbW9yeSBhbmQgc3dhcCBzcGFjZS4gSSdtIHJlYWxseSBjdXJpb3VzIHRvIHNlZSB0aGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlzbXMgdGhleSdyZSB1c2luZyB0byBwcm90ZWN0IHNoYXJlZCBkYXRhIHN0cnVjdHVyZXMuIFRoaXMgaXMgd2hlcmUgSSBzdGFydCB3b25kZXJpbmcgYWJvdXQgbG9ja3MsIGF0b21pYyBvcGVyYXRpb25zLCBhbmQgaG93IHRoZXkgaGFuZGxlIGNvbmN1cnJlbnQgYWNjZXNzIGZyb20gdmFyaW91cyB0aHJlYWRzIGFuZCBwcm9jZXNzZXMuIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBlcnJvciBoYW5kbGluZyB3aXRoaW4gYm90aCBmdW5jdGlvbnMsIGFzIHN3YXBvdXQgaXMgYW4gaW1wb3J0YW50IHByb2Nlc3MsIGFuZCBhIGZhaWx1cmUgY291bGQgc2VyaW91c2x5IGltcGFjdCBzeXN0ZW0gcGVyZm9ybWFuY2Ugb3IgZXZlbiBjYXVzZSBjcmFzaGVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjUzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTM6MjMuODYxODc1NjMzWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzgwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLXYxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjU1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjU1OlxcdH1cXG4gMjU2OlxcdFxcbiAyNTc6XFx0I2lmZGVmIENPTkZJR19TV0FQXFxuIDI1ODpcXHQvKipcXG4gMjU5OlxcdCAqIF9fbWVtY2cxX3N3YXBvdXQgLSB0cmFuc2ZlciBhIG1lbXN3IGNoYXJnZSB0byBzd2FwXFxuIDI2MDpcXHQgKiBAZm9saW86IGZvbGlvIHdob3NlIG1lbXN3IGNoYXJnZSB0byB0cmFuc2ZlclxcbiAyNjE6XFx0ICogQGNpOiB0aGUgbG9ja2VkIHN3YXAgY2x1c3RlciBob2xkaW5nIHRoZSBzd2FwIGVudHJpZXNcXG4gMjYyOlxcdCAqXFxuIDI2MzpcXHQgKiBUcmFuc2ZlciB0aGUgbWVtc3cgY2hhcmdlIG9mIEBmb2xpbyB0byB0aGUgc3dhcCBlbnRyeSBzdG9yZWQgaW5cXG4gMjY0OlxcdCAqIGZvbGlvLVxcdTAwM2Vzd2FwLlxcbiAyNjU6XFx0ICpcXG4gMjY2OlxcdCAqIENvbnRleHQ6IGZvbGlvIG11c3QgYmUgaXNvbGF0ZWQsIHVubWFwcGVkLCBsb2NrZWQgYW5kIGlzIGp1c3QgYWJvdXQgdG9cXG4gMjY3OlxcdCAqIGJlIGZyZWVkLCBhbmQgY2FsbGVyIG11c3QgZGlzYWJsZSBJUlFzIGFuZCBob2xkIHRoZSBzd2FwIGNsdXN0ZXIgbG9jay5cXG4gMjY4OlxcdCAqL1xcbiAyNjk6XFx0dm9pZCBfX21lbWNnMV9zd2Fwb3V0KHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2kpXFxuIDI3MDpcXHR7XFxuIDI3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csICpzd2FwX21lbWNnO1xcbiAyNzI6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAyNzM6XFx0XFx0dW5zaWduZWQgaW50IG5yX2VudHJpZXM7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XFxuIDI3NjpcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3RfbG9ja2VkKGZvbGlvKSwgZm9saW8pO1xcbiAyNzc6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbiAyNzg6XFx0XFx0Vk1fQlVHX09OX0ZPTElPKGZvbGlvX3JlZl9jb3VudChmb2xpbyksIGZvbGlvKTtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0aWYgKG1lbV9jZ3JvdXBfZGlzYWJsZWQoKSlcXG4gMjgxOlxcdFxcdFxcdHJldHVybjtcXG4gMjgyOlxcdFxcbiAyODM6XFx0XFx0aWYgKCFkb19tZW1zd19hY2NvdW50KCkpXFxuIDI4NDpcXHRcXHRcXHRyZXR1cm47XFxuIDI4NTpcXHRcXG4gMjg2OlxcdFxcdG9iamNnID0gZm9saW9fb2JqY2coZm9saW8pO1xcbiAyODc6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFvYmpjZywgZm9saW8pO1xcbiAyODg6XFx0XFx0aWYgKCFvYmpjZylcXG4gMjg5OlxcdFxcdFxcdHJldHVybjtcXG4gMjkwOlxcdFxcbiAyOTE6XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiAyOTI6XFx0XFx0bWVtY2cgPSBvYmpfY2dyb3VwX21lbWNnKG9iamNnKTtcXG4gMjkzOlxcdFxcdC8qXFxuIDI5NDpcXHRcXHQgKiBJbiBjYXNlIHRoZSBtZW1jZyBvd25pbmcgdGhlc2UgcGFnZXMgaGFzIGJlZW4gb2ZmbGluZWQgYW5kIGRvZXNuJ3RcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTM6MjMuODYyMDMxNzgyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjUyMTE2MTE5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgaG93IEknZCBhcHByb2FjaCB0aGF0IGtlcm5lbCBjb2RlIHNlY3Rpb24sIHJlZmxlY3RpbmcgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIFN3YXAgQ2FjaGUgRGVsaW1pbmF0aW9uKipcblxuUmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgc3dhcCBjYWNoZSBlbnRyaWVzIGFyZSByZW1vdmVkLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCBhbmQgYF9fc3dhcF9jYWNoZV9kb19kZWxfZm9saW9gLiBJJ20gZmFtaWxpYXIgd2l0aCB0aGlzIGFyZWEsIGJ1dCBsZXQncyByZWZyZXNoIGFuZCBzb2xpZGlmeSB0aGUgdW5kZXJzdGFuZGluZy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0IGFzIHdlbGwuIFdlIGtub3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNyaXRpY2FsIGZvciBzd2FwLW91dCBhbmQgcmVjbGFpbSwgc28gSSBuZWVkIHRvIGtub3cgaG93IGl0IGlzIGNvcnJlY3RseSBoYW5kbGVkLiBJ4oCZbGwgc3RhcnQgYnkgcGlucG9pbnRpbmcgdGhvc2UgZnVuY3Rpb25zIGluIGBtbS9zd2FwX3N0YXRlLmNgIGFuZCBiZWdpbiB0cmFjaW5nIHRoZSBleGVjdXRpb24gZmxvdy4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgaG93IHRoZSBmb2xpbyBpcyB1bmxpbmtlZCwgaG93IG1ldGFkYXRhIGlzIHVwZGF0ZWQsIGFuZCB3aGF0IGxvY2tpbmcgbWVjaGFuaXNtcyBhcmUgaW4gcGxhY2UgdG8gZW5zdXJlIGNvbnNpc3RlbmN5LCBlc3BlY2lhbGx5IGluIGEgbXVsdGktdGhyZWFkZWQgb3IgbXVsdGktQ1BVIGVudmlyb25tZW50LiBJIGtub3cgdGhhdCBmb2xpbyBkZWFsbG9jYXRpb24gY2FuIGJlIGNvbXBsZXggYmVjYXVzZSBvZiBjb25jdXJyZW50IGFjY2VzcyBhbmQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zLiBBbHNvLCBJJ2xsIHBheSBhdHRlbnRpb24gdG8gYW55IGVycm9yIGhhbmRsaW5nIG9yIGVkZ2UgY2FzZXMgd2l0aGluIHRoZSBmdW5jdGlvbnMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucy4gV2UncmUgZGlzY3Vzc2luZyBmaWxlIGJhY2tpbmcgYW5kIHBhZ2UgdGFibGUgc3RydWN0dXJlcywgcmlnaHQ/IFRoYXQncyB3aGF0IEkgd2FudCB0byBuYWlsIGRvd24gYXMgcGFydCBvZiB0aGUgbWVudGFsIG1vZGVsIGluIHRoZSBrZXJuZWwgY29kZS4gTGV0J3Mgc2VlIGhvdyB0aGV5IHdvcmsgdG9nZXRoZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEzOjI5LjA3MzY0Njk5M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vc3dhcF9zdGF0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRmb2xpb19jbGVhcl9zd2FwY2FjaGUoZm9saW8pO1xcbiAyOTE6XFx0XFxuIDI5MjpcXHRcXHRpZiAoIWZvbGlvX3N3YXBwZWQpIHtcXG4gMjkzOlxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX3N0YXJ0LCBucl9wYWdlcyk7XFxuIDI5NDpcXHRcXHR9IGVsc2UgaWYgKG5lZWRfZnJlZSkge1xcbiAyOTU6XFx0XFx0XFx0Y2lfb2ZmID0gY2lfc3RhcnQ7XFxuIDI5NjpcXHRcXHRcXHRkbyB7XFxuIDI5NzpcXHRcXHRcXHRcXHRpZiAoIV9fc3dwX3RiX2dldF9jb3VudChfX3N3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpKSlcXG4gMjk4OlxcdFxcdFxcdFxcdFxcdF9fc3dhcF9jbHVzdGVyX2ZyZWVfZW50cmllcyhzaSwgY2ksIGNpX29mZiwgMSk7XFxuIDI5OTpcXHRcXHRcXHR9IHdoaWxlICgrK2NpX29mZiBcXHUwMDNjIGNpX2VuZCk7XFxuIDMwMDpcXHRcXHR9XFxuIDMwMTpcXHR9XFxuIDMwMjpcXHRcXG4gMzAzOlxcdC8qKlxcbiAzMDQ6XFx0ICogX19zd2FwX2NhY2hlX2RlbF9mb2xpbyAtIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlLlxcbiAzMDU6XFx0ICogQGNpOiBUaGUgbG9ja2VkIHN3YXAgY2x1c3Rlci5cXG4gMzA2OlxcdCAqIEBmb2xpbzogVGhlIGZvbGlvLlxcbiAzMDc6XFx0ICogQGVudHJ5OiBUaGUgZmlyc3Qgc3dhcCBlbnRyeSB0aGF0IHRoZSBmb2xpbyBjb3JyZXNwb25kcyB0by5cXG4gMzA4OlxcdCAqIEBzaGFkb3c6IHNoYWRvdyB2YWx1ZSB0byBiZSBmaWxsZWQgaW4gdGhlIHN3YXAgY2FjaGUuXFxuIDMwOTpcXHQgKiBAc3dhcG91dDogd2hldGhlciB0aGlzIG9wZXJhdGlvbiBzd2FwcyBvdXQgdGhlIGZvbGlvLlxcbiAzMTA6XFx0ICpcXG4gMzExOlxcdCAqIFJlbW92ZXMgYSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBmaWxscyBhIHNoYWRvdyBpbiBwbGFjZS5cXG4gMzEyOlxcdCAqIFRoaXMgd29uJ3QgcHV0IHRoZSBmb2xpbydzIHJlZmNvdW50LiBUaGUgY2FsbGVyIGhhcyB0byBkbyB0aGF0LlxcbiAzMTM6XFx0ICpcXG4gMzE0OlxcdCAqIENvbnRleHQ6IENhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgbG9ja2VkIGFuZCBpbiB0aGUgc3dhcCBjYWNoZVxcbiAzMTU6XFx0ICogdXNpbmcgdGhlIGluZGV4IG9mIEBlbnRyeSwgYW5kIGxvY2sgdGhlIGNsdXN0ZXIgdGhhdCBob2xkcyB0aGUgZW50cmllcy5cXG4gMzE2OlxcdCAqL1xcbiAzMTc6XFx0dm9pZCBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIDMxODpcXHRcXHRcXHRcXHQgICAgc3dwX2VudHJ5X3QgZW50cnksIHZvaWQgKnNoYWRvdywgYm9vbCBzd2Fwb3V0KVxcbiAzMTk6XFx0e1xcbiAzMjA6XFx0XFx0dW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gMzIxOlxcdFxcbiAzMjI6XFx0XFx0bm9kZV9zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfRklMRV9QQUdFUywgLW5yX3BhZ2VzKTtcXG4gMzIzOlxcdFxcdGxydXZlY19zdGF0X21vZF9mb2xpbyhmb2xpbywgTlJfU1dBUENBQ0hFLCAtbnJfcGFnZXMpO1xcbiAzMjQ6XFx0XFxuIDMyNTpcXHRcXHRpZiAoc3dhcG91dClcXG4gMzI2OlxcdFxcdFxcdF9fbWVtY2cxX3N3YXBvdXQoZm9saW8sIGNpKTtcXG4gMzI3OlxcdFxcbiAzMjg6XFx0XFx0X19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpbyhjaSwgZm9saW8sIGVudHJ5LCBzaGFkb3cpO1xcbiAzMjk6XFx0fVxcbiAzMzA6XFx0XFxuIDMzMTpcXHQvKipcXG4gMzMyOlxcdCAqIHN3YXBfY2FjaGVfZGVsX2ZvbGlvIC0gUmVtb3ZlcyBhIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUuXFxuIDMzMzpcXHQgKiBAZm9saW86IFRoZSBmb2xpby5cXG4gMzM0OlxcdCAqXFxuIDMzNTpcXHQgKiBTYW1lIGFzIF9fc3dhcF9jYWNoZV9kZWxfZm9saW8sIGJ1dCBoYW5kbGVzIGxvY2sgYW5kIHJlZmNvdW50LiBUaGVcXG4gMzM2OlxcdCAqIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgZm9saW8gaXMgZWl0aGVyIGNsZWFuIG9yIGhhcyBhIHN3YXAgY291bnRcXG4gMzM3OlxcdCAqIGVxdWFsIHRvIHplcm8sIG9yIGl0IG1heSBjYXVzZSBkYXRhIGxvc3MuXFxuIDMzODpcXHQgKlxcbiAzMzk6XFx0ICogQ29udGV4dDogQ2FsbGVyIG11c3QgZW5zdXJlIHRoZSBmb2xpbyBpcyBsb2NrZWQgYW5kIGluIHRoZSBzd2FwIGNhY2hlLlxcbiAzNDA6XFx0ICovXFxuIDM0MTpcXHR2b2lkIHN3YXBfY2FjaGVfZGVsX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIDM0MjpcXHR7XFxuIDM0MzpcXHRcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbiAzNDQ6XFx0XFx0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cXHUwMDNlc3dhcDtcXG4gMzQ1OlxcdFxcbiAzNDY6XFx0XFx0Y2kgPSBzd2FwX2NsdXN0ZXJfbG9jayhfX3N3YXBfZW50cnlfdG9faW5mbyhlbnRyeSksIHN3cF9vZmZzZXQoZW50cnkpKTtcXG4gMzQ3OlxcdFxcdF9fc3dhcF9jYWNoZV9kZWxfZm9saW8oY2ksIGZvbGlvLCBlbnRyeSwgTlVMTCwgZmFsc2UpO1xcbiAzNDg6XFx0XFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XFxuIDM0OTpcXHRcXG4gMzUwOlxcdFxcdGZvbGlvX3JlZl9zdWIoZm9saW8sIGZvbGlvX25yX3BhZ2VzKGZvbGlvKSk7XFxuIDM1MTpcXHR9XFxuIDM1MjpcXHRcXG4gMzUzOlxcdC8qKlxcbiAzNTQ6XFx0ICogX19zd2FwX2NhY2hlX3JlcGxhY2VfZm9saW8gLSBSZXBsYWNlIGEgZm9saW8gaW4gdGhlIHN3YXAgY2FjaGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEzOjI5LjA3Mzc5NzY1M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjA5NTA2MjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYG1tL3Ztc2Nhbi5jYCBSYWJiaXQgSG9sZSoqXG5cbk9rYXksIHNvIHdlJ3JlIGxvb2tpbmcgYXQgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMuIEEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIHNvbWV0aGluZyBJIG9mdGVuIGRvIHdoZW4gdHJhY2tpbmcgZG93biB0aGVzZSBzb3J0cyBvZiBwcm9ibGVtcywgaXMgdG8gemVybyBpbiBvbiBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgY29yZSBhY3Rpb25zLiBJIHdhbnQgdG8gY2hlY2sgb3V0IGBtbS92bXNjYW4uY2AgYW5kIHNwZWNpZmljYWxseSBmb2N1cyBvbiB0aGUgYXJlYSBhcm91bmQgYF9fcmVtb3ZlX21hcHBpbmdgLiBUaGF0IGZ1bmN0aW9uIGlzIGEga2V5IHBsYXllciwgYW5kIHR5cGljYWxseSB3aGVyZSB5b3Ugc2VlIHRoZXNlIGtpbmRzIG9mIHByb2JsZW1zIG1hbmlmZXN0LiBHb2luZyB0aGVyZSBmaXJzdCB3aWxsIGhlbHAgbWUgcXVpY2tseSB6ZXJvIGluIG9uIHRoZSBhY3Rpb25zIG5lZWRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc5MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTM6MzEuMjgzMzA5Mjc3WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwODg2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzI1LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzI1OlxcdFxcdGlmICghZm9saW9fcmVmX2ZyZWV6ZShmb2xpbywgcmVmY291bnQpKVxcbiA3MjY6XFx0XFx0XFx0Z290byBjYW5ub3RfZnJlZTtcXG4gNzI3OlxcdFxcdC8qIG5vdGU6IGF0b21pY19jbXB4Y2hnIGluIGZvbGlvX3JlZl9mcmVlemUgcHJvdmlkZXMgdGhlIHNtcF9ybWIgKi9cXG4gNzI4OlxcdFxcdGlmICh1bmxpa2VseShmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkpIHtcXG4gNzI5OlxcdFxcdFxcdGZvbGlvX3JlZl91bmZyZWV6ZShmb2xpbywgcmVmY291bnQpO1xcbiA3MzA6XFx0XFx0XFx0Z290byBjYW5ub3RfZnJlZTtcXG4gNzMxOlxcdFxcdH1cXG4gNzMyOlxcdFxcbiA3MzM6XFx0XFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSkge1xcbiA3MzQ6XFx0XFx0XFx0c3dwX2VudHJ5X3Qgc3dhcCA9IGZvbGlvLVxcdTAwM2Vzd2FwO1xcbiA3MzU6XFx0XFxuIDczNjpcXHRcXHRcXHRpZiAocmVjbGFpbWVkIFxcdTAwMjZcXHUwMDI2ICFtYXBwaW5nX2V4aXRpbmcobWFwcGluZykpXFxuIDczNzpcXHRcXHRcXHRcXHRzaGFkb3cgPSB3b3JraW5nc2V0X2V2aWN0aW9uKGZvbGlvLCB0YXJnZXRfbWVtY2cpO1xcbiA3Mzg6XFx0XFx0XFx0X19zd2FwX2NhY2hlX2RlbF9mb2xpbyhjaSwgZm9saW8sIHN3YXAsIHNoYWRvdywgdHJ1ZSk7XFxuIDczOTpcXHRcXHRcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrX2lycShjaSk7XFxuIDc0MDpcXHRcXHR9IGVsc2Uge1xcbiA3NDE6XFx0XFx0XFx0dm9pZCAoKmZyZWVfZm9saW8pKHN0cnVjdCBmb2xpbyAqKTtcXG4gNzQyOlxcdFxcbiA3NDM6XFx0XFx0XFx0ZnJlZV9mb2xpbyA9IG1hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VmcmVlX2ZvbGlvO1xcbiA3NDQ6XFx0XFx0XFx0LypcXG4gNzQ1OlxcdFxcdFxcdCAqIFJlbWVtYmVyIGEgc2hhZG93IGVudHJ5IGZvciByZWNsYWltZWQgZmlsZSBjYWNoZSBpblxcbiA3NDY6XFx0XFx0XFx0ICogb3JkZXIgdG8gZGV0ZWN0IHJlZmF1bHRzLCB0aHVzIHRocmFzaGluZywgbGF0ZXIgb24uXFxuIDc0NzpcXHRcXHRcXHQgKlxcbiA3NDg6XFx0XFx0XFx0ICogQnV0IGRvbid0IHN0b3JlIHNoYWRvd3MgaW4gYW4gYWRkcmVzcyBzcGFjZSB0aGF0IGlzXFxuIDc0OTpcXHRcXHRcXHQgKiBhbHJlYWR5IGV4aXRpbmcuICBUaGlzIGlzIG5vdCBqdXN0IGFuIG9wdGltaXphdGlvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTM6MTM6MzEuMjg0NDA5MjE3WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MTc5NTg0Mjk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFzc2Vzc21lbnQ6IFRoaXMgUGF0Y2ggaXMgU2FmZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgS01TQU4gY29uY2VybnMsIGFuZCBJIHRoaW5rIEkndmUgZ290IGEgc29saWQgY2FzZS5cblxuVGhlIGtleSBjaGFuZ2UgaXMgbW92aW5nIGBfX21lbWNnMV9zd2Fwb3V0YCAqaW5zaWRlKiBgX19zd2FwX2NhY2hlX2RlbF9mb2xpb2AuIFRoaXMgaXMgYmVjYXVzZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AgY2xlYXJzIHRoZSBgc3dhcGNhY2hlYCBmbGFnLCBhbmQgd2UgaGF2ZSBhIHdhcm5pbmcgYFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7YCB3aGljaCBjb3VsZCBiZSB0cmlnZ2VyZWQgaWYgd2UgY2xlYXJlZCB0aGUgc3dhcGNhY2hlIGZsYWcgYmVmb3JlIGNhbGxpbmcgYF9fbWVtY2cxX3N3YXBvdXRgIHRvIHVwZGF0ZSBtZW1jZyBhY2NvdW50aW5nLiBJdCB3YXMgcHJldmlvdXNseSBjYWxsZWQgYmVmb3JlIHRoZSBgX19zd2FwX2NhY2hlX2RvX2RlbF9mb2xpb2AgaW4gdGhlIG9yaWdpbmFsIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgYW5kIGluIGBfX3JlbW92ZV9tYXBwaW5nYCwgYF9fbWVtY2cxX3N3YXBvdXRgIHdhcyBjYWxsZWQgYmVmb3JlIGBfX3N3YXBfY2FjaGVfZGVsX2ZvbGlvYCwgc28gdGhpcyByZWFycmFuZ2VtZW50IGFsaWducyB0aGUgc2VxdWVuY2UuXG5cbk5vdywgY29uY2VybmluZyBLTVNBTiwgSSBuZWVkIHRvIG1ldGhvZGljYWxseSBjaGVjayBmb3IgcG90ZW50aWFsIHJpc2tzOlxuXG4xLiAgKipLZXJuZWwgU3RydWN0dXJlcyB0byBVc2VyIFNwYWNlPyoqIE5vcGUuIFRoaXMgaXNuJ3QgdG91Y2hpbmcgYW55IHN0cnVjdHVyZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHVzZXIgc3BhY2UuIEl0J3MgaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcuXG4yLiAgKipVbmluaXRpYWxpemVkIFZhcmlhYmxlLURlcGVuZGVudCBMb2dpYz8qKiBObyB3YXkuIFRoZSBgc3dhcG91dGAgcGFyYW1ldGVyIGlzIGV4cGxpY2l0bHkgc2V0IHRvIGB0cnVlYCBvciBgZmFsc2VgIOKAkyB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGF0IHBsYXkgdGhhdCB3b3VsZCBkZXBlbmQgb24gYW4gdW5pbml0aWFsaXplZCB2YWx1ZS5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgQ29tcGxleCBEYXRhIFN0cnVjdHVyZXM/KiogTm8sIG5vdGhpbmcgbGlrZSB0aGF0IGlzIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZCBoZXJlLiBJdCdzIGFsbCBhYm91dCBmb2xpbyBsaWZlY3ljbGUgbWFuYWdlbWVudCBhbmQgbWVtY2cgYWNjb3VudGluZy5cbjQuICAqKkJvdW5kcyBDaGVja3MvTGVuZ3RoIExvZ2ljPyoqIE5vLiBUaGlzIHBhdGNoIGlzbid0IG1lc3Npbmcgd2l0aCBib3VuZHMgY2hlY2tzIG9yIGludHJvZHVjaW5nIG5ldyBsb2dpYyB0aGF0IG1pZ2h0IGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRocm91Z2ggdGhvc2UgbWVjaGFuaXNtcy5cbjUuICAqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IGF0IEFsbD8qKiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwdXJlbHkgaW52b2x2ZXMgcmVmYWN0b3Jpbmcgc3dhcCBjYWNoZSBsb2dpYyBhbmQgbWVtY2cgc3dhcG91dCwgc28gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNuJ3QgYSBmYWN0b3IuXG5cbkZ1cnRoZXJtb3JlLCBhbnkgYnVncyBpbnRyb2R1Y2VkIHdvdWxkIGxpa2VseSBiZSByZWxhdGVkIHRvIHJlZmNvdW50aW5nLCBsb2NraW5nLCBvciBmb2xpbyBsaWZlY3ljbGUgaXNzdWVzLiBCdXQgd2UgaGF2ZSBzYWZlZ3VhcmRzIGluIHBsYWNlLiBLQVNBTiB3b3VsZCBjYXRjaCB1c2UtYWZ0ZXItZnJlZSBhbmQgZG91YmxlLWZyZWUgcHJvYmxlbXMsIExPQ0tERVAgd291bGQgaGFuZGxlIGxvY2tpbmcgaXNzdWVzLCBhbmQgc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMgbGlrZSBgVk1fV0FSTl9PTl9PTkNFX0ZPTElPYCBhbmQgYFZNX0JVR19PTl9GT0xJT2AgcHJvdmlkZSBhZGRpdGlvbmFsIGRlYnVnZ2luZy4gS01TQU4ncyBwdXJwb3NlIGlzIHRvIGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcywgYW5kIG5vbmUgb2YgdGhhdCBpcyBoYXBwZW5pbmcgb3IgZXhwb3NlZCBpbiB0aGlzIHBhdGNoLlxuXG5TbywgdG8gc3VtbWFyaXplOiBUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBmdW5jdGlvbiBieSBhZGRpbmcgYSBib29sZWFuIGFuZCBtb3ZpbmcgdGhlIGNhbGwgdG8gYF9fbWVtY2cxX3N3YXBvdXQoKWAuIFRoZXJlJ3Mgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdXNlci1zcGFjZSBpbnRlcmFjdGlvbnMsIGFuZCB0aGUgYHN3YXBvdXRgIGJvb2xlYW4gaXMgaGFyZGNvZGVkLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBhc3NlcnRpb25zLiBLTVNBTiBpcyBpcnJlbGV2YW50LiBJJ20gY29uZmlkZW50IGluIGNhbGxpbmcgYE5lZWRzS01TQU4gZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDA1LCJPdXRwdXRUb2tlbnMiOjE3NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc5NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEzOjEzOjU2LjQ2Mzk5ODM4NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXIgY29waWVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBib29sZWFuIGZsYWcgYHN3YXBvdXRgIGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGNvbnN0YW50IGxpdGVyYWxzIChgdHJ1ZWAvYGZhbHNlYCkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIGludm9sdmUgZm9saW8gbGlmZWN5Y2xlIHN0YXRlLCByZWZlcmVuY2UgY291bnRpbmcsIG1lbWNnIGFjY291bnRpbmcsIG9yIGxvY2tpbmcsIHdoaWNoIGFyZSB0cmFja2VkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBhc3NlcnRpb25zLCBMT0NLREVQLCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHN3YXAgY2FjaGUgZm9saW8gZGVsZXRpb24gYnkgaW50ZWdyYXRpbmcgYF9fbWVtY2cxX3N3YXBvdXQoKWAgaW50byBgX19zd2FwX2NhY2hlX2RlbF9mb2xpbygpYCB3aXRoIGEgYGJvb2wgc3dhcG91dGAgcGFyYW1ldGVyLiBcXG5cXG5UaGlzIGNoYW5nZSBkb2VzIG5vdCBpbnZvbHZlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgc3RhY2svaGVhcCBidWZmZXIgY29waWVzLCBrZXJuZWwtdG8tdXNlciBpbmZvLWxlYWtzLCBvciBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIGRhdGEuIFRoZSBib29sZWFuIGZsYWcgYHN3YXBvdXRgIGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIGNvbnN0YW50IGxpdGVyYWxzIChgdHJ1ZWAvYGZhbHNlYCkuIEFueSBwb3RlbnRpYWwgaXNzdWVzIGFyaXNpbmcgZnJvbSB0aGlzIHJlZmFjdG9yaW5nIHdvdWxkIGludm9sdmUgZm9saW8gbGlmZWN5Y2xlIHN0YXRlLCByZWZlcmVuY2UgY291bnRpbmcsIG1lbWNnIGFjY291bnRpbmcsIG9yIGxvY2tpbmcsIHdoaWNoIGFyZSB0cmFja2VkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkZWJ1ZyBhc3NlcnRpb25zLCBMT0NLREVQLCBhbmQgS0FTQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhjgk[1] Phase: Succeeded StartedAt: 2026-09-02 13:14:08 +0000 UTC FinishedAt: 2026-09-02 13:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 13:14:08 +0000 UTC FinishedAt: 2026-09-02 13:14:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2] Phase: Succeeded StartedAt: 2026-09-02 13:14:08 +0000 UTC FinishedAt: 2026-09-02 16:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-02 13:14:08 +0000 UTC FinishedAt: 2026-09-02 16:54:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-02 13:14:08 +0000 UTC FinishedAt: 2026-09-02 13:14:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-02 13:14:08 +0000 UTC FinishedAt: 2026-09-02 13:14:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmhjgk/series-workflowmhjgk-convert-artifact-1434611035/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-02 13:14:18 +0000 UTC FinishedAt: 2026-09-02 13:30:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-02 13:14:18 +0000 UTC FinishedAt: 2026-09-02 13:30:13 +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:*4bce978f-d78b-479b-b82c-077f637ac919,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-workflowmhjgk/series-workflowmhjgk-convert-artifact-1434611035/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": "317aae63-c303-467e-b82b-aaa927ceff0c", "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-workflowmhjgk/series-workflowmhjgk-build-action-2607426201/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-02 13:14:18 +0000 UTC FinishedAt: 2026-09-02 13:30:10 +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:*4bce978f-d78b-479b-b82c-077f637ac919,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-workflowmhjgk/series-workflowmhjgk-convert-artifact-1434611035/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": "317aae63-c303-467e-b82b-aaa927ceff0c", "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-workflowmhjgk/series-workflowmhjgk-build-action-2607426201/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-02 13:30:13 +0000 UTC FinishedAt: 2026-09-02 13:30:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-02 13:30:13 +0000 UTC FinishedAt: 2026-09-02 13:30:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-02 13:30:13 +0000 UTC FinishedAt: 2026-09-02 13:30:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-02 13:30:13 +0000 UTC FinishedAt: 2026-09-02 13:30:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowmhjgk/series-workflowmhjgk-convert-artifact-1740337074/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-02 13:30:23 +0000 UTC FinishedAt: 2026-09-02 13:32:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-02 13:30:23 +0000 UTC FinishedAt: 2026-09-02 13:32:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*317aae63-c303-467e-b82b-aaa927ceff0c,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-workflowmhjgk/series-workflowmhjgk-build-action-2607426201/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-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-02 13:32:18 +0000 UTC FinishedAt: 2026-09-02 13:32:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-02 13:32:18 +0000 UTC FinishedAt: 2026-09-02 13:32:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-02 13:32:18 +0000 UTC FinishedAt: 2026-09-02 13:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-02 13:32:18 +0000 UTC FinishedAt: 2026-09-02 13:48:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4bce978f-d78b-479b-b82c-077f637ac919,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-workflowmhjgk/series-workflowmhjgk-convert-artifact-1740337074/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": "e8b41325-d3d8-4b15-b71b-39d34ab4941c", "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-workflowmhjgk/series-workflowmhjgk-build-action-2381865286/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-02 13:32:18 +0000 UTC FinishedAt: 2026-09-02 13:48:29 +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:*4bce978f-d78b-479b-b82c-077f637ac919,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-workflowmhjgk/series-workflowmhjgk-convert-artifact-1740337074/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": "e8b41325-d3d8-4b15-b71b-39d34ab4941c", "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-workflowmhjgk/series-workflowmhjgk-build-action-2381865286/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-02 13:48:39 +0000 UTC FinishedAt: 2026-09-02 13:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-02 13:48:39 +0000 UTC FinishedAt: 2026-09-02 13:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-02 13:48:39 +0000 UTC FinishedAt: 2026-09-02 13:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-02 13:48:39 +0000 UTC FinishedAt: 2026-09-02 13:50:08 +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:*e8b41325-d3d8-4b15-b71b-39d34ab4941c,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-workflowmhjgk/series-workflowmhjgk-build-action-2381865286/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-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-02 13:50:18 +0000 UTC FinishedAt: 2026-09-02 16:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-02 13:50:18 +0000 UTC FinishedAt: 2026-09-02 16:54:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},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:*317aae63-c303-467e-b82b-aaa927ceff0c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8b41325-d3d8-4b15-b71b-39d34ab4941c,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-workflowmhjgk/series-workflowmhjgk-build-action-2607426201/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-workflowmhjgk/series-workflowmhjgk-build-action-2381865286/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-02 13:50:18 +0000 UTC FinishedAt: 2026-09-02 13:50:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-02 13:50:18 +0000 UTC FinishedAt: 2026-09-02 13:50:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},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-workflowmhjgk/series-workflowmhjgk-convert-artifact-3967804167/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-02 13:50:18 +0000 UTC FinishedAt: 2026-09-02 13:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-02 13:50:18 +0000 UTC FinishedAt: 2026-09-02 13:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-02 13:50:18 +0000 UTC FinishedAt: 2026-09-02 13:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-02 13:50:28 +0000 UTC FinishedAt: 2026-09-02 16:54:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmhjgk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__swap_cache_del_folio","swap_cache_del_folio"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88297631d4d42f6004cb39c0ba3da7d2d10a616f","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","MEMCG","MEMCG_V1"],"series_id":"a7e0f517-930a-41c6-b05d-2b21a2ae047d","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-02 13:50:28 +0000 UTC FinishedAt: 2026-09-02 16:54:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*317aae63-c303-467e-b82b-aaa927ceff0c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e8b41325-d3d8-4b15-b71b-39d34ab4941c,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-workflowmhjgk/series-workflowmhjgk-build-action-2607426201/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-workflowmhjgk/series-workflowmhjgk-build-action-2381865286/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-workflowmhjgk/series-workflowmhjgk-convert-artifact-3967804167/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,}