Name: series-workflow5x2xm Phase: Running StartedAt: 2026-08-13 11:59:24 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[0] Phase: Succeeded StartedAt: 2026-08-13 11:59:24 +0000 UTC FinishedAt: 2026-08-13 12:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 11:59:24 +0000 UTC FinishedAt: 2026-08-13 12:20:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3a59f11e0f989bdd637c87151992605a6559a7cb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3a59f11e0f989bdd637c87151992605a6559a7cb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_LSM" ], "series_id": "f2a576c7-abfd-4479-884e-7a5ea562946e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_ksock_create", "bpf_ksock_connect", "bpf_ksock_acquire", "bpf_ksock_release", "bpf_ksock_send", "connect_socket", "bpf_ksock_release_dtor" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7Y29ubmVjdF9zb2NrZXQmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2VfZHRvciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSAoYGJwZl9rc29ja2ApIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzIGZyb20gQlBGIHByb2dyYW1zLiBcblxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgYnBmX2tzb2NrYCwgYHN0cnVjdCBtc2doZHJgLCBgc3RydWN0IGt2ZWNgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gb3IgZGVjbGFyYXRpb24gKGUuZy4sIHVzaW5nIGBremFsbG9jX29iamAgb3IgZGVzaWduYXRlZCBpbml0aWFsaXplcnMpLlxuMi4gVGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgZnJvbSBCUEYgcHJvZ3JhbXMgKGBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCwgYHVuaW9uIGJwZl9rc29ja19hZGRyYCwgYW5kIHRoZSBzZW5kIGJ1ZmZlcikgYXJlIHZhbGlkYXRlZCBmb3Igc2l6ZSBieSB0aGUga2Z1bmMgd3JhcHBlcnMuIFRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciB0aGVzZSBhcmd1bWVudHMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCB0byB0aGUga2Z1bmNzLiBGdXJ0aGVybW9yZSwgS01TQU4gdW5wb2lzb25zIEJQRiBzdGFjayBhbmQgbWFwIG1lbW9yeSBieSBkZXNpZ24gc2luY2UgaXQgY2Fubm90IHRyYWNrIEpJVHRlZCBCUEYgZXhlY3V0aW9uLCBtZWFuaW5nIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgb3JpZ2luYXRpbmcgZnJvbSB0aGUgQlBGIHByb2dyYW0gaXRzZWxmLlxuMy4gVGhlIHJlZmFjdG9yaW5nIG9mIGBjb25uZWN0X3NvY2tldGAgbWVyZWx5IGV4dHJhY3RzIGV4aXN0aW5nIGxvZ2ljIHdpdGhvdXQgY2hhbmdpbmcgaG93IHNvY2tldCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgb3IgY29waWVkLlxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlIGRhdGEgc2VudCBvdmVyIHRoZSBzb2NrZXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBCUEYgcHJvZ3JhbS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIHdoaWNoIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBleHBvc2VkIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiBCUEYga2Z1bmNzIChicGZfa3NvY2tfY3JlYXRlLCBicGZfa3NvY2tfY29ubmVjdCwgYnBmX2tzb2NrX3NlbmQsIGV0Yy4pIHRoYXQgYWxsb3cgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSBhbmQgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgc29ja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgQlBGIHN1YnN5c3RlbSBhbmQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUga2Z1bmNzIGFyZSBhY2Nlc3NpYmxlIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAobGlrZSBTWVNDQUxMIGFuZCBMU00gaG9va3MpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTdjMDhhMTI5NzE1YWY4YjZiMzhmYWY4ZWE0MGJhYTgwOGU4OGQzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE3OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCAmIzQzOzEsMzYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9CUEZfS1NPQ0tfSFxuJiM0MzsjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luNi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAtIEJQRiBrZXJuZWwgc29ja2V0IGNyZWF0aW9uIHBhcmFtZXRlcnNcbiYjNDM7ICogQGZhbWlseTpcdEFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LlxuJiM0MzsgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4mIzQzOyAqIEBwcm90b2NvbDpcdFByb3RvY29sIG51bWJlciAoZS5nLiBJUFBST1RPX1VEUCksIG9yIDAgZm9yIHRoZSBkZWZhdWx0IHByb3RvY29sXG4mIzQzOyAqXHRcdG9mIHRoZSBnaXZlbiB0eXBlLlxuJiM0MzsgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XG4mIzQzO1x0X191OCBmYW1pbHk7XG4mIzQzO1x0X191OCB0eXBlO1xuJiM0MztcdF9fdTggcHJvdG9jb2w7XG4mIzQzO1x0X191OCByZXNlcnZlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB1bmlvbiBicGZfa3NvY2tfYWRkciAtIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzc1xuJiM0MzsgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLlxuJiM0MzsgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbiYjNDM7ICovXG4mIzQzO3VuaW9uIGJwZl9rc29ja19hZGRyIHtcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfQlBGX0tTT0NLX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uNWE1ZWIxMjUwMTAzMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7XG4gZXh0ZXJuIGludCBfX3N5c19iaW5kKGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdW15YWRkciwgaW50IGFkZHJsZW4pO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdFx0ICAgICBpbnQgYWRkcmxlbik7XG4mIzQzO2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcbiYjNDM7XHRcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpO1xuIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcbiBcdFx0XHQgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpO1xuIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkcixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDYxZWY0MzMyNWM2ZjMuLjQzNTc2MGNhMDRjMzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTQzNjksNiAmIzQzOzQzNjksOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcbiAjaWZkZWYgQ09ORklHX0NSWVBUT1xuIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxuICNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0lORVRcbiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuJiM0MzsjZW5kaWZcbiBCVEZfU0VUX0VORChyY3VfcHJvdGVjdGVkX3R5cGVzKVxuIFxuIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZClcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlXG5pbmRleCBiM2ZkY2I0ZTM1NWZhLi5jMjBlNTIwMzU4YjhlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL01ha2VmaWxlXG5AQCAtNDQsNiAmIzQzOzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIub1xuIG9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbiYjNDM7aWZkZWYgQ09ORklHX0lORVRcbiYjNDM7b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2tzb2NrLm9cbiYjNDM7ZW5kaWZcbiBvYmotJChDT05GSUdfT0YpXHQmIzQzOz0gb2ZfbmV0Lm9cbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICYjNDM7PSBuZXRfdGVzdC5vXG4gb2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ub1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9rc29jay5jIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lOTk0M2FlZWFkZDMyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfa3NvY2suY1xuQEAgLTAsMCAmIzQzOzEsMzI4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX2tzb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGJwZl9rc29jayAtIHJlZmNvdW50ZWQgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dFxuJiM0MzsgKiBAc29jazpcdFRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqIEB1c2FnZTpcdFJlZmVyZW5jZSBjb3VudGVyLlxuJiM0MzsgKiBAcndvcms6XHRSQ1Ugd29yayBmb3IgZGVmZXJyZWQgY2xlYW51cCAoc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrIHtcbiYjNDM7XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuJiM0MztcdHJlZmNvdW50X3QgdXNhZ2U7XG4mIzQzO1x0c3RydWN0IHJjdV93b3JrIHJ3b3JrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcbiYjNDM7XHRrcyA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xuJiM0MztcdHNvY2tfcmVsZWFzZShrcy1cdTAwM2Vzb2NrKTtcbiYjNDM7XHRrZnJlZShrcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKVxuJiM0MztcdCAqIGNsZWFyZWQgY3VycmVudC1cdTAwM2Vuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2IGN1cnJlbnQtXHUwMDNlbnNwcm94eTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxuJiM0MzsgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcbiYjNDM7ICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXG4mIzQzOyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrXG4mIzQzOyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzayYjMzk7cyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogQG9wdHM6XHRQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy5cbiYjNDM7ICogQG9wdHNfX3N6Olx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXG4mIzQzOyAqIEBlcnJfX3VuaW5pdDpcdEludGVnZXIgdG8gc3RvcmUgZXJyb3IgY29kZSB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbiYjNDM7YnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXG4mIzQzO1x0XHQgaW50ICplcnJfX3VuaW5pdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogc29ja19jcmVhdGUoKSBkZXJpdmVzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgY3JlZGVudGlhbHMsIGFuZCBjZ3JvdXBcbiYjNDM7XHQgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvXG4mIzQzO1x0ICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHtcbiYjNDM7XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9wdHNfY29weSA9IChzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKXtcbiYjNDM7XHRcdC5mYW1pbHkgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VmYW1pbHkpLFxuJiM0MztcdFx0LnR5cGUgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2V0eXBlKSxcbiYjNDM7XHRcdC5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXByb3RvY29sKSxcbiYjNDM7XHRcdC5yZXNlcnZlZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikge1xuJiM0MztcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7XG4mIzQzO1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wdHNfY29weS5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHtcbiYjNDM7XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrcyA9IGt6YWxsb2Nfb2JqKCprcyk7XG4mIzQzO1x0aWYgKCFrcykge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LFxuJiM0MztcdCAqIHNvY2tldCBsYWJlbHMsIGFuZCB0aGUgYWN0aXZlIG5ldG5zIHJlZmVyZW5jZSBtYXRjaCBhIHNvY2tldCgyKVxuJiM0MztcdCAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJiMzOTtzIGNhbGxlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBzb2NrX2NyZWF0ZShvcHRzX2NvcHkuZmFtaWx5LCBvcHRzX2NvcHkudHlwZSwgb3B0c19jb3B5LnByb3RvY29sLFxuJiM0MztcdFx0XHQgIFx1MDAyNmtzLVx1MDAzZXNvY2spO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcbiYjNDM7XHRrcy1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdmJ1ZiA9IFNPQ0tfTUlOX1JDVkJVRjtcbiYjNDM7XHRrcy1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLO1xuJiM0MztcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2a3MtXHUwMDNldXNhZ2UsIDEpO1xuJiM0MztcdHB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpO1xuJiM0MztcdHJldHVybiBrcztcbiYjNDM7XG4mIzQzO2Vycl9mcmVlOlxuJiM0MztcdGtmcmVlKGtzKTtcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLlxuJiM0MzsgKiBAa3M6XHRcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LlxuJiM0MzsgKiBAYWRkcjpcdFBvaW50ZXIgdG8gYW4gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzLlxuJiM0MzsgKiBAYWRkcl9fc3o6XHRTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIHdoaWxlIGNvbm5lY3RpbmcgdGhlIHNvY2tldCwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxuJiM0MztcdFx0XHRcdCAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG4mIzQzO1x0XHRcdFx0ICB1MzIgYWRkcl9fc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYTtcbiYjNDM7XHRpbnQgYWRkcmxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi9cbiYjNDM7XHRtZW1jcHkoXHUwMDI2c2EsIGFkZHIsIHNpemVvZigqYWRkcikpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNhLnNzX2ZhbWlseSkge1xuJiM0MztcdGNhc2UgQUZfSU5FVDpcbiYjNDM7XHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUZfSU5FVDY6XG4mIzQzO1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVx1MDAzZXNvY2ssIFx1MDAyNnNhLCBhZGRybGVuLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9rc29ja19hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxuJiM0MzsgKlx0dHJ1c3RlZCBwb2ludGVyIChlLmcuIFJDVS1wcm90ZWN0ZWQga3B0ciBmcm9tIGEgbWFwKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbiYjNDM7ICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZrcy1cdTAwM2V1c2FnZSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4ga3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIHRoZSBmaW5hbCByZWZlcmVuY2UgaXMgcmVsZWFzZWQsIHRoZSBzb2NrZXQgaXMgY2xlYW5lZCB1cCB2aWFcbiYjNDM7ICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZrcy1cdTAwM2V1c2FnZSkpIHtcbiYjNDM7XHRcdElOSVRfUkNVX1dPUksoXHUwMDI2a3MtXHUwMDNlcndvcmssIGtzb2NrX3JlbGVhc2Vfd29ya19mbik7XG4mIzQzO1x0XHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZrcy1cdTAwM2Vyd29yayk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpXG4mIzQzO3tcbiYjNDM7XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO31cbiYjNDM7Q0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC5cbiYjNDM7ICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuXG4mIzQzOyAqIEBkYXRhOlx0UG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kLlxuJiM0MzsgKiBAZGF0YV9fc3o6XHRTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQuXG4mIzQzOyAqXG4mIzQzOyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwXG4mIzQzOyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXG4mIzQzO1x0XHRcdCAgICAgICB1MzIgZGF0YV9fc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbiYjNDM7XHRcdC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3Qga3ZlYyBpb3YgPSB7XG4mIzQzO1x0XHQuaW92X2Jhc2UgPSAodm9pZCAqKWRhdGEsXG4mIzQzO1x0XHQuaW92X2xlbiA9IGRhdGFfX3N6LFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4mIzQzO1xuJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcylcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19pbml0X2tmdW5jX3NldCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2UsIEtGX1JFTEVBU0UpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSlcbiYjNDM7QlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1lTQ0FMTClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7XHQuZmlsdGVyID0gYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9JRF9MSVNUKGJwZl9rc29ja19kdG9yX2lkcylcbiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbiYjNDM7XHRcdHtcbiYjNDM7XHRcdFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcbiYjNDM7XHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZrc29ja19pbml0X2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbiYjNDM7XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQVJSQVlfU0laRShicGZfa3NvY2tfZHRvcnMpLFxuJiM0MztcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi41YjAyZTYyMTdjNjgwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgJiM0MzsyMTAzLDIwIEBAIFNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXG4gXHRyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApO1xuIH1cbiBcbiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuJiM0MztcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLFxuJiM0MztcdFx0XHRcdCAgICAgIGFkZHJsZW4pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGFkZHJsZW4sIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqXHRBdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSBzb2NrZXQgd2l0aCB0aGUgc2VydmVyIGFkZHJlc3MuICBUaGUgYWRkcmVzc1xuICAqXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXG5AQCAtMjExOSwyMyAmIzQzOzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbi1cdGludCBlcnI7XG4gXG4gXHRzb2NrID0gc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4tXHRpZiAoIXNvY2spIHtcbi1cdFx0ZXJyID0gLUVOT1RTT0NLO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9XG4tXHQgICAgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFzb2NrKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9UU09DSztcbiBcbi1cdGVyciA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICAgYWRkcmxlbiwgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxuJiM0MztcdFx0XHQgICAgICBzb2NrLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xuIH1cbiBcbiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kZDZiMTY3NjIzZDk0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5AQCAtMCwwICYjNDM7MSwxMzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfcHJvZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtuZXR3b3JrX2hlbHBlcnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19sc20uc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX2xzbV92ZXJpZmllci5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlNfVEVTVCBcJiMzNDtrc29ja19sc21fbnNcJiMzNDtcbiYjNDM7I2RlZmluZSBSRUNWX1BPUlQgNzc3N1xuJiM0MzsjZGVmaW5lIFJFQ1ZfVElNRU9VVF9TRUMgNVxuJiM0MztcbiYjNDM7c3RydWN0IGtzb2NrX3Rlc3RfZW52IHtcbiYjNDM7XHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbjtcbiYjNDM7XHRpbnQgcmZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkciA9IHtcbiYjNDM7XHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuJiM0MztcdFx0LnNpbl9wb3J0ID0gaHRvbnMoUkVDVl9QT1JUKSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG1lbXNldChlbnYsIDAsIHNpemVvZigqZW52KSk7XG4mIzQzO1x0ZW52LVx1MDAzZXJmZCA9IC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhtYWtlX25ldG5zKE5TX1RFU1QpLCBcJiMzNDttYWtlX25ldG5zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihlbnYtXHUwMDNlbnN0b2tlbiwgXCYjMzQ7b3Blbl9uZXRuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGVudi1cdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGVudi1cdTAwM2VyZmQsIFwmIzM0O3JlY2VpdmVyIHNvY2tldFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJpbmQoZW52LVx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtiaW5kIHJlY2VpdmVyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0IHJjdnRpbWVvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIHRyaWdnZXJfYWRkciA9IHtcbiYjNDM7XHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGtzb2NrX2xzbSAqc2tlbDtcbiYjNDM7XHRjaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSldID0ge307XG4mIzQzO1x0c3NpemVfdCBuO1xuJiM0MztcdGludCB0ZmQgPSAtMTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga3NvY2tfbHNtX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICgha3NvY2tfdGVzdF9lbnZfc2V0dXAoXHUwMDI2ZW52KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlbW90ZV9wb3J0ID0gUkVDVl9QT1JUO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2V0dXApLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtrc29ja19zZXR1cCBydW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcJiMzNDtrc29ja19zZXR1cCByZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfYmluZCBmcm9tIHVzZXJzcGFjZSAqL1xuJiM0MztcdHNrZWwtXHUwMDNlbGlua3Mua3NvY2tfc29ja2V0X2JpbmQgPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3Mua3NvY2tfc29ja2V0X2JpbmQsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O2F0dGFjaCBzb2NrZXRfYmluZCBsc21cJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHR0ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKHRmZCwgXCYjMzQ7dHJpZ2dlciBzb2NrZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0ZXJyID0gYmluZCh0ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZ0cmlnZ2VyX2FkZHIsIHNpemVvZih0cmlnZ2VyX2FkZHIpKTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3RyaWdnZXIgYmluZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9yZXQsIHNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtMU00gc2VuZCBieXRlc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdG4gPSByZWN2ZnJvbShlbnYucmZkLCByZWN2X2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLCAwLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRpZiAoQVNTRVJUX0VRKG4sIHNpemVvZihyZWN2X2RhdGEpLCBcJiMzNDtyZWN2ZnJvbSBsZW5cJiMzNDspKVxuJiM0MztcdFx0QVNTRVJUX01FTUVRKHJlY3ZfZGF0YSwgc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7cGF5bG9hZCBtYXRjaFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmICh0ZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UodGZkKTtcbiYjNDM7XHRpZiAoZW52LnJmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShlbnYucmZkKTtcbiYjNDM7XHRpZiAoZW52Lm5zdG9rZW4pXG4mIzQzO1x0XHRjbG9zZV9uZXRucyhlbnYubnN0b2tlbik7XG4mIzQzO1x0cmVtb3ZlX25ldG5zKE5TX1RFU1QpO1xuJiM0MztcdGtzb2NrX2xzbV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2tzb2NrX2xzbV92ZXJpZmllcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0UlVOX1RFU1RTKGtzb2NrX2xzbV92ZXJpZmllcik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2ZGMyMGI4Zjk1YmJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcbkBAIC0wLDAgJiM0MzsxLDQ1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfd3Euc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIENBTExCQUNLX1dBSVRfUkVUUklFUyAxMDAwXG4mIzQzOyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9VUyAxMDAwXG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfd3Eodm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7XG4mIzQzO1x0dTMyIGNhbGxiYWNrX2RvbmU7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2tzb2NrX3dxIG9wZW4gYW5kIGxvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcJiMzNDtrc29ja193cV9zdGFydCByZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExCQUNLX1dBSVRfUkVUUklFUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChfX2F0b21pY19sb2FkX24oXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0dXNsZWVwKENBTExCQUNLX1dBSVRfVVMpO1xuJiM0MztcdH1cbiYjNDM7XHRjYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsXG4mIzQzO1x0XHRcdFx0XHRfX0FUT01JQ19BQ1FVSVJFKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShjYWxsYmFja19kb25lLCAxLCBcJiMzNDt3b3JrcXVldWUgY2FsbGJhY2sgY29tcGxldGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY3JlYXRlX2VyciwgLUVPUE5PVFNVUFAsXG4mIzQzO1x0XHQgIFwmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtzb2NrX3dxX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDFlZGFlYjlmZGQ0YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5AQCAtMCwwICYjNDM7MSw3OCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSFxuJiM0MzsjZGVmaW5lIF9LU09DS19DT01NT05fSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZXJybm8uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBTT0NLX0RHUkFNXHQyXG4mIzQzOyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4mIzQzO2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG4mIzQzO1x0XHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcbiYjNDM7c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xuJiM0MztpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xuJiM0Mzt2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSB7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gX19rc29ja19jdHhfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNl9fa3NvY2tfY3R4X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2tzb2NrICprc29ja19jdHhfZ2V0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3MgPSBOVUxMLCAqdG1wO1xuJiM0MztcbiYjNDM7XHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuJiM0MztcdGlmICghdilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHRtcCA9IHYtXHUwMDNlY3R4O1xuJiM0MztcdGlmICh0bXApXG4mIzQzO1x0XHRrcyA9IGJwZl9rc29ja19hY3F1aXJlKHRtcCk7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKm9sZDtcbiYjNDM7XG4mIzQzO1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbiYjNDM7XHRpZiAoIXYpIHtcbiYjNDM7XHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2di1cdTAwM2VjdHgsIGN0eCk7XG4mIzQzO1x0aWYgKG9sZCkge1xuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfS1NPQ0tfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODA4NDUxMDk4ZWZiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmNcbkBAIC0wLDAgJiM0MzsxLDcyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSBcJiMzNDtoZWxsbyBmcm9tIGJwZiBrc29ja1wmIzM0OztcbiYjNDM7XG4mIzQzO19fYmUzMiBpcHY0X3JlbW90ZTtcbiYjNDM7X191MTYgcmVtb3RlX3BvcnQ7XG4mIzQzO2ludCB0YXJnZXRfcGlkO1xuJiM0MztpbnQgc2VuZF9yZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuJiM0MztcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0Y3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbiYjNDM7XHRjcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQO1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4mIzQzO1x0aWYgKCFrcylcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGFkZHIuc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdGFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTtcbiYjNDM7XHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsIFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGtzb2NrX2N0eF9pbnNlcnQoa3MpO1xuJiM0MztcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL3NvY2tldF9iaW5kXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X2JpbmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyxcbiYjNDM7XHQgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4mIzQzO1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCB8fCBwaWQgIT0gdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGtzID0ga3NvY2tfY3R4X2dldCgpO1xuJiM0MztcdGlmICgha3MpIHtcbiYjNDM7XHRcdHNlbmRfcmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZW5kX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbiYjNDM7XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkMmNjZmRiNTgwMjBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xuQEAgLTAsMCAmIzQzOzEsMzUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfY29tbW9uLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgc2VuZF9kYXRhWzExXSA9IFwmIzM0O2R1bW15IGRhdGFcJiMzNDs7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtLnMvc29ja2V0X3NlbmRtc2dcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7YnBmX2tzb2NrX3NlbmQgaXMgcmVqZWN0ZWQgZnJvbSBzb2NrZXRfc2VuZG1zZyBMU00gaG9va1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9rc29ja19zZW5kIGlzIG5vdCBhbGxvd2VkXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiYjNDM7XHQgICAgIGludCBzaXplLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcbiYjNDM7XHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuJiM0MztcdGlmICghdilcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGtzID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgTlVMTCk7XG4mIzQzO1x0aWYgKCFrcylcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbiYjNDM7XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xuQEAgLTAsMCAmIzQzOzEsNjIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9leHBlcmltZW50YWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlcnJuby5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUge1xuJiM0MztcdHN0cnVjdCBicGZfd3Egd29yaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCB1MzIpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtzb2NrX3dxX3ZhbHVlKTtcbiYjNDM7fSB3b3JrX21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7aW50IGNyZWF0ZV9lcnI7XG4mIzQzO3UzMiBjYWxsYmFja19kb25lO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcbiYjNDM7XHRcdC5mYW1pbHkgPSBBRl9JTkVULFxuJiM0MztcdFx0LnR5cGUgPSBTT0NLX0RHUkFNLFxuJiM0MztcdFx0LnByb3RvY29sID0gSVBQUk9UT19VRFAsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbiYjNDM7XHRpZiAoa3MpXG4mIzQzO1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1x0Y3JlYXRlX2VyciA9IGVycjtcbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZjYWxsYmFja19kb25lLCAxKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBrc29ja193cV9zdGFydCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlO1xuJiM0MztcdHUzMiBrZXkgPSAwO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ3b3JrX21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0ZXJyID0gYnBmX3dxX2luaXQoXHUwMDI2dmFsdWUtXHUwMDNld29yaywgXHUwMDI2d29ya19tYXAsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGVyciA9IGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsdWUtXHUwMDNld29yaywga3NvY2tfd3FfY2FsbGJhY2ssIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBicGZfd3Ffc3RhcnQoXHUwMDI2dmFsdWUtXHUwMDNld29yaywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlX2R0b3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzZXQgb2YgQlBGIGtmdW5jcyAoYnBmX2tzb2NrX2NyZWF0ZSwgYnBmX2tzb2NrX2Nvbm5lY3QsIGJwZl9rc29ja19zZW5kLCBldGMuKSB0aGF0IGFsbG93IEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0gYW5kIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGtmdW5jcyBhcmUgYWNjZXNzaWJsZSBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKGxpa2UgU1lTQ0FMTCBhbmQgTFNNIGhvb2tzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxNzoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmNiMzg3ZmI3NWU0M2IKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oCkBAIC0wLDAgJiM0MzsxLDM2IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9CUEZfS1NPQ0tfSAomIzQzOyNkZWZpbmUgX0JQRl9LU09DS19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzCiYjNDM7ICogQGZhbWlseToJQWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuCiYjNDM7ICogQHR5cGU6CVNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuCiYjNDM7ICogQHByb3RvY29sOglQcm90b2NvbCBudW1iZXIgKGUuZy4gSVBQUk9UT19VRFApLCBvciAwIGZvciB0aGUgZGVmYXVsdCBwcm90b2NvbAomIzQzOyAqCQlvZiB0aGUgZ2l2ZW4gdHlwZS4KJiM0MzsgKiBAcmVzZXJ2ZWQ6CU11c3QgYmUgemVyby4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCiYjNDM7ICovCiYjNDM7c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7CiYjNDM7CV9fdTggZmFtaWx5OwomIzQzOwlfX3U4IHR5cGU7CiYjNDM7CV9fdTggcHJvdG9jb2w7CiYjNDM7CV9fdTggcmVzZXJ2ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB1bmlvbiBicGZfa3NvY2tfYWRkciAtIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcwomIzQzOyAqIEBzaW46IElQdjQgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICogQHNpbjY6IElQdjYgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICovCiYjNDM7dW5pb24gYnBmX2tzb2NrX2FkZHIgewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX0JQRl9LU09DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTQ2MSw2ICYjNDM7NDYxLDggQEAgZXh0ZXJuIHN0cnVjdCBmaWxlICpfX3N5c19zb2NrZXRfZmlsZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsKIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTsKIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsCiAJCQkgICAgIGludCBhZGRybGVuKTsKJiM0MztpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsCiYjNDM7CQkgICBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwKIAkJCSAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7CiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNDM2OSw2ICYjNDM7NDM2OSw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KQogI2lmZGVmIENPTkZJR19DUllQVE8KIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KQogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19JTkVUCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzOyNlbmRpZgogQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcykKIAogc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCBiM2ZkY2I0ZTM1NWZhLi5jMjBlNTIwMzU4YjhlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtNDQsNiAmIzQzOzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIubwogb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm8KIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm8KIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm8KJiM0MztpZmRlZiBDT05GSUdfSU5FVAomIzQzO29iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9rc29jay5vCiYjNDM7ZW5kaWYKIG9iai0kKENPTkZJR19PRikJJiM0Mzs9IG9mX25ldC5vCiBvYmotJChDT05GSUdfTkVUX1RFU1QpICYjNDM7PSBuZXRfdGVzdC5vCiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgJiM0Mzs9IGRldm1lbS5vCmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmU5OTQzYWVlYWRkMzIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfa3NvY2suYwpAQCAtMCwwICYjNDM7MSwzMjggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmX2tzb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idGZfaWRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zb2NrZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQKJiM0MzsgKiBAc29jazoJVGhlIHVuZGVybHlpbmcga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAdXNhZ2U6CVJlZmVyZW5jZSBjb3VudGVyLgomIzQzOyAqIEByd29yazoJUkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLgomIzQzOyAqLwomIzQzO3N0cnVjdCBicGZfa3NvY2sgewomIzQzOwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwomIzQzOwlyZWZjb3VudF90IHVzYWdlOwomIzQzOwlzdHJ1Y3QgcmN1X3dvcmsgcndvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CWtzID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgYnBmX2tzb2NrLCByd29yayk7CiYjNDM7CXNvY2tfcmVsZWFzZShrcy0mZ3Q7c29jayk7CiYjNDM7CWtmcmVlKGtzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKQomIzQzOwkgKiBjbGVhcmVkIGN1cnJlbnQtJmd0O25zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhKGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpICZhbXA7JmFtcDsgY3VycmVudC0mZ3Q7bnNwcm94eTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEga2VybmVsIHNvY2tldC4KJiM0MzsgKgomIzQzOyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yCiYjNDM7ICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZAomIzQzOyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLgomIzQzOyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrCiYjNDM7ICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJiMzOTtzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogQG9wdHM6CVBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLgomIzQzOyAqIEBvcHRzX19zejoJU2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuCiYjNDM7ICogQGVycl9fdW5pbml0OglJbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKgomIzQzO2JwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LAomIzQzOwkJIGludCAqZXJyX191bmluaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHNvY2tfY3JlYXRlKCkgZGVyaXZlcyB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGNyZWRlbnRpYWxzLCBhbmQgY2dyb3VwCiYjNDM7CSAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG8KJiM0MzsJICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uCiYjNDM7CSAqLwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkgewomIzQzOwkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7CiYjNDM7CQkuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtJmd0O2ZhbWlseSksCiYjNDM7CQkudHlwZSA9IFJFQURfT05DRShvcHRzLSZndDt0eXBlKSwKJiM0MzsJCS5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLSZndDtwcm90b2NvbCksCiYjNDM7CQkucmVzZXJ2ZWQgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgJmFtcDsmYW1wOyBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7CiYjNDM7CQllcnIgPSAtRUFGTk9TVVBQT1JUOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7CiYjNDM7CQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkucHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgJmFtcDsmYW1wOyBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlrcyA9IGt6YWxsb2Nfb2JqKCprcyk7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LAomIzQzOwkgKiBzb2NrZXQgbGFiZWxzLCBhbmQgdGhlIGFjdGl2ZSBuZXRucyByZWZlcmVuY2UgbWF0Y2ggYSBzb2NrZXQoMikKJiM0MzsJICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0mIzM5O3MgY2FsbGVyLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCwKJiM0MzsJCQkgICZhbXA7a3MtJmd0O3NvY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsKJiM0MzsJa3MtJmd0O3NvY2stJmd0O3NrLSZndDtza19yY3ZidWYgPSBTT0NLX01JTl9SQ1ZCVUY7CiYjNDM7CWtzLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7CiYjNDM7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2tzLSZndDt1c2FnZSwgMSk7CiYjNDM7CXB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CWtmcmVlKGtzKTsKJiM0MztlcnJfb3V0OgomIzQzOwlwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLgomIzQzOyAqIEBrczoJCVRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LgomIzQzOyAqIEBhZGRyOglQb2ludGVyIHRvIGFuIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcy4KJiM0MzsgKiBAYWRkcl9fc3o6CVNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uCiYjNDM7ICoKJiM0MzsgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWQKJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsCiYjNDM7CQkJCSAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsCiYjNDM7CQkJCSAgdTMyIGFkZHJfX3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7CiYjNDM7CWludCBhZGRybGVuOwomIzQzOwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqLwomIzQzOwltZW1jcHkoJmFtcDtzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7CiYjNDM7CWNhc2UgQUZfSU5FVDoKJiM0MzsJCWFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFGX0lORVQ2OgomIzQzOwkJYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLSZndDtzb2NrLCAmYW1wO3NhLCBhZGRybGVuLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAa3M6CVRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYQomIzQzOyAqCXRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYWNxdWlyZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvcgomIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykKJiM0Mzt7CiYjNDM7CWlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7a3MtJmd0O3VzYWdlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOglUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLgomIzQzOyAqCiYjNDM7ICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhCiYjNDM7ICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykKJiM0Mzt7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtrcy0mZ3Q7dXNhZ2UpKSB7CiYjNDM7CQlJTklUX1JDVV9XT1JLKCZhbXA7a3MtJmd0O3J3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pOwomIzQzOwkJcXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgJmFtcDtrcy0mZ3Q7cndvcmspOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcykKJiM0Mzt7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0Mzt9CiYjNDM7Q0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAa3M6CQlUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuCiYjNDM7ICogQGRhdGE6CVBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC4KJiM0MzsgKiBAZGF0YV9fc3o6CVNpemUgb2YgdGhlIGRhdGEgdG8gc2VuZC4KJiM0MzsgKgomIzQzOyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwCiYjNDM7ICogKGtlcm5lbF9zZW5kbXNnKSwgc28gaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCSAgICAgICB1MzIgZGF0YV9fc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKJiM0MzsJCS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBrdmVjIGlvdiA9IHsKJiM0MzsJCS5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSwKJiM0MzsJCS5pb3ZfbGVuID0gZGF0YV9fc3osCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy0mZ3Q7c29jaywgJmFtcDttc2csICZhbXA7aW92LCAxLCBkYXRhX19zeik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLAomIzQzO307CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzO0JURl9JRF9MSVNUX1NJTkdMRShicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkLCBmdW5jLCBicGZfbHNtX3NvY2tldF9zZW5kbXNnKQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDtrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNCiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNICZhbXA7JmFtcDsKJiM0MzsJICAgIHByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXJldHVybiAtRUFDQ0VTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfa2Z1bmNfYnRmX2lkcywKJiM0MzsJLmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsCiYjNDM7fTsKJiM0MzsKJiM0MztCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzO0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7CiYjNDM7CQl7CiYjNDM7CQkJLmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSwKJiM0MzsJCQkua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLAomIzQzOwkJfSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkmYW1wO2tzb2NrX2luaXRfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLAomIzQzOwkJCQkJICAgICAgICZhbXA7a3NvY2tfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sCiYjNDM7CQkJCQkgICAgICAgJmFtcDtrc29ja19rZnVuY19zZXQpOwomIzQzOwlyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsCiYjNDM7CQkJCQkJICBBUlJBWV9TSVpFKGJwZl9rc29ja19kdG9ycyksCiYjNDM7CQkJCQkJICBUSElTX01PRFVMRSk7CiYjNDM7fQomIzQzOwomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLjViMDJlNjIxN2M2ODAgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIxMDMsNiAmIzQzOzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkciwKIAlyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApOwogfQogCiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAomIzQzOwkJICAgaW50IGFkZHJsZW4sIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLAomIzQzOwkJCQkgICAgICBhZGRybGVuKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAomIzQzOwkJCQkJICAgICBhZGRybGVuLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoKICAqCUF0dGVtcHQgdG8gY29ubmVjdCB0byBhIHNvY2tldCB3aXRoIHRoZSBzZXJ2ZXIgYWRkcmVzcy4gIFRoZSBhZGRyZXNzCiAgKglpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuCkBAIC0yMTE5LDIzICYjNDM7MjEzMywxMyBAQCBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcywKIAkJICAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncykKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCWludCBlcnI7CiAKIAlzb2NrID0gc29ja19mcm9tX2ZpbGUoZmlsZSk7Ci0JaWYgKCFzb2NrKSB7Ci0JCWVyciA9IC1FTk9UU09DSzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0KLQkgICAgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIXNvY2spCiYjNDM7CQlyZXR1cm4gLUVOT1RTT0NLOwogCi0JZXJyID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcywKLQkJCQkJICAgIGFkZHJsZW4sIHNvY2stJmd0O2ZpbGUtJmd0O2ZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTsKLW91dDoKLQlyZXR1cm4gZXJyOwomIzQzOwlyZXR1cm4gY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbiwKJiM0MzsJCQkgICAgICBzb2NrLSZndDtmaWxlLSZndDtmX2ZsYWdzIHwgZmlsZV9mbGFncyk7CiB9CiAKIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRkNmIxNjc2MjNkOTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCkBAIC0wLDAgJiM0MzsxLDEzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXR3b3JrX2hlbHBlcnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja19sc20uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2xzbV92ZXJpZmllci5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfVEVTVCAmIzM0O2tzb2NrX2xzbV9ucyYjMzQ7CiYjNDM7I2RlZmluZSBSRUNWX1BPUlQgNzc3NwomIzQzOyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1CiYjNDM7CiYjNDM7c3RydWN0IGtzb2NrX3Rlc3RfZW52IHsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW47CiYjNDM7CWludCByZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBrc29ja190ZXN0X2Vudl9zZXR1cChzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0gewomIzQzOwkJLnNpbl9mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksCiYjNDM7CQkuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUMgfTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJbWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTsKJiM0MzsJZW52LSZndDtyZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhOU19URVNUKSwgJiMzNDttYWtlX25ldG5zJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllbnYtJmd0O25zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZW52LSZndDtuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7cmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoZW52LSZndDtyZmQsICYjMzQ7cmVjZWl2ZXIgc29ja2V0JiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSBiaW5kKGVudi0mZ3Q7cmZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCBzaXplb2YoYWRkcikpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YmluZCByZWNlaXZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJZXJyID0gc2V0c29ja29wdChlbnYtJmd0O3JmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sICZhbXA7dHYsIHNpemVvZih0dikpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0IHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja19sc20odm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIHRyaWdnZXJfYWRkciA9IHsKJiM0MzsJCS5zaW5fZmFtaWx5ID0gQUZfSU5FVCwKJiM0MzsJCS5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qga3NvY2tfbHNtICpza2VsOwomIzQzOwljaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKV0gPSB7fTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwlpbnQgdGZkID0gLTE7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSBrc29ja19sc21fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKCZhbXA7ZW52KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlbW90ZV9wb3J0ID0gUkVDVl9QT1JUOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5rc29ja19zZXR1cCksCiYjNDM7CQkJCSAgICAgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2tzb2NrX3NldHVwIHJ1biYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7a3NvY2tfc2V0dXAgcmV0dmFsJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfYmluZCBmcm9tIHVzZXJzcGFjZSAqLwomIzQzOwlza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfYmluZCA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsLSZndDtwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfYmluZCwKJiM0MzsJCQkgICAmIzM0O2F0dGFjaCBzb2NrZXRfYmluZCBsc20mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHRmZCwgJiMzNDt0cmlnZ2VyIHNvY2tldCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CWVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDt0cmlnZ2VyX2FkZHIsIHNpemVvZih0cmlnZ2VyX2FkZHIpKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gMDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3RyaWdnZXIgYmluZCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAzOiBWZXJpZnkgdGhlIExTTSBob29rIHNlbnQgdGhlIG5vdGlmaWNhdGlvbiAqLwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtzZW5kX3JldCwgc2l6ZW9mKHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSksCiYjNDM7CQkgICAgICAgJiMzNDtMU00gc2VuZCBieXRlcyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJbiA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoQVNTRVJUX0VRKG4sIHNpemVvZihyZWN2X2RhdGEpLCAmIzM0O3JlY3Zmcm9tIGxlbiYjMzQ7KSkKJiM0MzsJCUFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksCiYjNDM7CQkJICAgICAmIzM0O3BheWxvYWQgbWF0Y2gmIzM0Oyk7CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJaWYgKHRmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UodGZkKTsKJiM0MzsJaWYgKGVudi5yZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGVudi5yZmQpOwomIzQzOwlpZiAoZW52Lm5zdG9rZW4pCiYjNDM7CQljbG9zZV9uZXRucyhlbnYubnN0b2tlbik7CiYjNDM7CXJlbW92ZV9uZXRucyhOU19URVNUKTsKJiM0MzsJa3NvY2tfbHNtX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfbHNtX3ZlcmlmaWVyKHZvaWQpCiYjNDM7ewomIzQzOwlSVU5fVEVTVFMoa3NvY2tfbHNtX3ZlcmlmaWVyKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNmRjMjBiOGY5NWJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYwpAQCAtMCwwICYjNDM7MSw0NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja193cS5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9SRVRSSUVTIDEwMDAKJiM0MzsjZGVmaW5lIENBTExCQUNLX1dBSVRfVVMgMTAwMAomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7CiYjNDM7CXUzMiBjYWxsYmFja19kb25lOwomIzQzOwlpbnQgZXJyLCBpOwomIzQzOwomIzQzOwlza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7a3NvY2tfd3Egb3BlbiBhbmQgbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLAomIzQzOwkJCQkgICAgICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtydW4ga3NvY2tfd3Ffc3RhcnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7a3NvY2tfd3Ffc3RhcnQgcmV0dmFsJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoX19hdG9taWNfbG9hZF9uKCZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtjYWxsYmFja19kb25lLCBfX0FUT01JQ19BQ1FVSVJFKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcChDQUxMQkFDS19XQUlUX1VTKTsKJiM0MzsJfQomIzQzOwljYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKCZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtjYWxsYmFja19kb25lLAomIzQzOwkJCQkJX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGNhbGxiYWNrX2RvbmUsIDEsICYjMzQ7d29ya3F1ZXVlIGNhbGxiYWNrIGNvbXBsZXRlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCwKJiM0MzsJCSAgJiMzNDt3b3JrcXVldWUgY3JlYXRlIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJa3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjAxZWRhZWI5ZmRkNGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgKQEAgLTAsMCAmIzQzOzEsNzggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSAomIzQzOyNkZWZpbmUgX0tTT0NLX0NPTU1PTl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNPQ0tfREdSQU0JMgomIzQzOyNkZWZpbmUgSVBQUk9UT19VRFAJMTcKJiM0MzsKJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsCiYjNDM7CQkJCSAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltOwomIzQzO2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsCiYjNDM7CQkgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTsKJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltOwomIzQzO3ZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTsKJiM0MztpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gX19rc29ja19jdHhfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtfX2tzb2NrX2N0eF9tYXAsICZhbXA7a2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2tzb2NrICprc29ja19jdHhfZ2V0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzID0gTlVMTCwgKnRtcDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXRtcCA9IHYtJmd0O2N0eDsKJiM0MzsJaWYgKHRtcCkKJiM0MzsJCWtzID0gYnBmX2tzb2NrX2FjcXVpcmUodG1wKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2UoY3R4KTsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDt2LSZndDtjdHgsIGN0eCk7CiYjNDM7CWlmIChvbGQpIHsKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKG9sZCk7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MDg0NTEwOThlZmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMKQEAgLTAsMCAmIzQzOzEsNzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSAmIzM0O2hlbGxvIGZyb20gYnBmIGtzb2NrJiMzNDs7CiYjNDM7CiYjNDM7X19iZTMyIGlwdjRfcmVtb3RlOwomIzQzO19fdTE2IHJlbW90ZV9wb3J0OwomIzQzO2ludCB0YXJnZXRfcGlkOwomIzQzO2ludCBzZW5kX3JldCA9IC0xOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9OwomIzQzOwl1bmlvbiBicGZfa3NvY2tfYWRkciBhZGRyID0ge307CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJY3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJY3JlYXRlX29wdHMudHlwZSA9IFNPQ0tfREdSQU07CiYjNDM7CWNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2tzb2NrX2NyZWF0ZSgmYW1wO2NyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlhZGRyLnNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJYWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpOwomIzQzOwlhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsICZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uoa3MpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUVYSVNUKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS5zL3NvY2tldF9iaW5kJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsCiYjNDM7CSAgICAgaW50IGFkZHJsZW4sIGludCByZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprczsKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwomIzQzOwlpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJa3MgPSBrc29ja19jdHhfZ2V0KCk7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCXNlbmRfcmV0ID0gLUVOT0VOVDsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mZDJjY2ZkYjU4MDIwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbV92ZXJpZmllci5jCkBAIC0wLDAgJiM0MzsxLDM1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVsxMV0gPSAmIzM0O2R1bW15IGRhdGEmIzM0OzsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDticGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKJiM0MzsJICAgICBpbnQgc2l6ZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgTlVMTCk7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDYyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3dxIHdvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpOwomIzQzO30gd29ya19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IGNyZWF0ZV9lcnI7CiYjNDM7dTMyIGNhbGxiYWNrX2RvbmU7CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHsKJiM0MzsJCS5mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnR5cGUgPSBTT0NLX0RHUkFNLAomIzQzOwkJLnByb3RvY29sID0gSVBQUk9UT19VRFAsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJa3MgPSBicGZfa3NvY2tfY3JlYXRlKCZhbXA7b3B0cywgc2l6ZW9mKG9wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmIChrcykKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJY3JlYXRlX2VyciA9IGVycjsKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtjYWxsYmFja19kb25lLCAxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dvcmtfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJZXJyID0gYnBmX3dxX2luaXQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgJmFtcDt3b3JrX21hcCwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwllcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsdWUtJmd0O3dvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBicGZfd3Ffc3RhcnQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTI5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBCUEYgS2VybmVsIFNvY2tldCBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCAqbmVlZCogdG8gYmUgZnV6emVkLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgYWRkaXRpb246IG5ldyBCUEYga2Z1bmNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGtlcm5lbCBzb2NrZXRzIOKAkyBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiAgWWVwLCB0aGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE5vIHF1ZXN0aW9uIGFib3V0IGl0LgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoZSBhZmZlY3RlZCBmaWxlcywganVzdCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ6IGBpbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oYCwgYGluY2x1ZGUvbGludXgvc29ja2V0LmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYG5ldC9jb3JlL01ha2VmaWxlYCwgYG5ldC9jb3JlL2JwZl9rc29jay5jYCwgYG5ldC9zb2NrZXQuY2AsIGFuZCBhIGJ1bmNoIG9mIHNlbGZ0ZXN0cy4gU2VlbXMgbGlrZSBhIGZvY3VzZWQgc2V0IG9mIGNoYW5nZXMsIG1vc3RseSBpbiB0aGUgbmV0d29ya2luZy9zb2NrZXQgYXJlYXMuCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgaW4gYG5ldC9jb3JlL2JwZl9rc29jay5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXM6CgpgYGBtYWtlZmlsZQppZmRlZiBDT05GSUdfSU5FVApvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2subwplbmRpZgpgYGAKCll1cCwgdGhlcmUgaXQgaXMuIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSB0aGUga2V5LiAgTm93LCB0aGUga2Z1bmNzIHRoZW1zZWx2ZXM6IGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19hY3F1aXJlYCwgYGJwZl9rc29ja19yZWxlYXNlYCwgYW5kIGBicGZfa3NvY2tfc2VuZGAgYXJlIGNsZWFybHkgdGhlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gIFRoZXNlIGFyZSBnb2luZyB0byBiZSBjYWxsYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBvZiB0eXBlcyBgQlBGX1BST0dfVFlQRV9TWVNDQUxMYCBhbmQgYEJQRl9QUk9HX1RZUEVfTFNNYC4gVGhleSBuZWVkIHRvIGJlIGluIHRoZSBmdXp6aW5nIHNjb3BlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi4gQmVzaWRlcyB0aGUga2Z1bmNzLCBJIHNlZSB0aGF0IGBjb25uZWN0X3NvY2tldGAgZnJvbSBgbmV0L3NvY2tldC5jYCBpcyBhZGRlZCB0byBgaW5jbHVkZS9saW51eC9zb2NrZXQuaGAgYXMgd2VsbC4gVGhpcyBzaG91bGQgYmUgYSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50LiBBbmQgeWVzLCBpdCBpcyBleHBvcnRlZC4KCkkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuICBJJiMzOTt2ZSBnb3QgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBJJiMzOTttIGdvb2QuICBUaGUga2Z1bmNzIGFsc28gc3VwcG9ydCB0aGUgYEJQRl9QUk9HX1RZUEVfTFNNYCBwcm9ncmFtIHR5cGUuIEJ1dCBJIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbiBhcmUgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYmFzZWQgb24gdGhlIE1ha2VmaWxlLgoKRG91YmxlLWNoZWNraW5nIGBuZXQvY29yZS9NYWtlZmlsZWAgYWdhaW4gdG8gbWFrZSBzdXJlOgpgYGBtYWtlZmlsZQpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vCm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm8KaWZkZWYgQ09ORklHX0lORVQKb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2tzb2NrLm8KZW5kaWYKYGBgClllcCwgaXQmIzM5O3MgY29uc2lzdGVudC4KClNvLCB0aGUgZm9jdXMgaXM6IGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19hY3F1aXJlYCwgYGJwZl9rc29ja19yZWxlYXNlYCwgYGJwZl9rc29ja19zZW5kYCwgYW5kIGBjb25uZWN0X3NvY2tldGAgd2l0aCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIFRpbWUgdG8gdXNlIHRoZSB0b29scyB0byBjb25maXJtIGBjb25uZWN0X3NvY2tldGAgYW5kIGBicGZfa3NvY2tfY3JlYXRlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTEtLyoqXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oOjEyOiAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTEzLSAqIEBmYW1pbHk6XHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTE4LSAqL1xuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxOTpzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHtcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMjAtXHRfX3U4IGZhbWlseTtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz00OT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTEtLyoqXG5uZXQvY29yZS9icGZfa3NvY2suYzo1MjogKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC5cbm5ldC9jb3JlL2JwZl9rc29jay5jLTUzLSAqXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjMtICpcbm5ldC9jb3JlL2JwZl9rc29jay5jOjY0OiAqIEBvcHRzOlx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXG5uZXQvY29yZS9icGZfa3NvY2suYy02NS0gKiBAb3B0c19fc3o6XHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz02OD1fX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbm5ldC9jb3JlL2JwZl9rc29jay5jOjY5OmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzAtXHRcdCBpbnQgKmVycl9fdW5pbml0KVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzEte1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6NzI6XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTczLVx0c3RydWN0IGJwZl9rc29jayAqa3M7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtODUtXG5uZXQvY29yZS9icGZfa3NvY2suYzo4NjpcdGlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTg3LVx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTkwLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6OTE6XHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XG5uZXQvY29yZS9icGZfa3NvY2suYy05Mi1cdFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVx1MDAzZWZhbWlseSksXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjYwPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjYxOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNjItQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTExLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjEyOnN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0xMy1cdFx0XHRcdCAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYz0xOT1pbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jLTIwLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYzoyMTpcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYy0yMi1cdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMtMjktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmM6MzA6XHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMtMzEtXHRpZiAoIWtzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jPTI1PXN0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0yNi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYzoyNzpcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTI4LVx0XHQuZmFtaWx5ID0gQUZfSU5FVCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0zNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjM1Olx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM2LVx0aWYgKGtzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjU3CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdW5jdGlvbiBBdmFpbGFiaWxpdHkgQ29uZmlybWVkKioKCkFscmlnaHQsIEkgY2FuIHNlZSB0aGF0IHRoZSBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgYXJlIHByZXNlbnQgd2l0aGluIHRoZSBzY29wZSBhbmQgYWNjZXNzaWJsZSDigJMgdGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIGFuZCB0aGF0JiMzOTtzIGdvb2QuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgY29ubmVjdF9zb2NrZXRgLiBUaGlzIGlzIHRoZSBjcnV4LCBhbmQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgYmVoYXZpb3IgbWV0aWN1bG91c2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmM9MTIwOD1zdGF0aWMgaW50IHZpcnRpb191bWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jLTEyMzYtXHRkbyB7XG5hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jOjEyMzc6XHRcdHJjID0gb3NfY29ubmVjdF9zb2NrZXQocGRhdGEtXHUwMDNlc29ja2V0X3BhdGgpO1xuYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYy0xMjM4LVx0fSB3aGlsZSAocmMgPT0gLUVJTlRSKTtcbi0tXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmg9MTY2PXNzaXplX3Qgb3NfcmN2X2ZkX21zZyhpbnQgZmQsIGludCAqZmRzLCB1bnNpZ25lZCBpbnQgbl9mZHMsXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmgtMTY3LVx0XHQgICAgICB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pO1xuYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oOjE2ODpleHRlcm4gaW50IG9zX2Nvbm5lY3Rfc29ja2V0KGNvbnN0IGNoYXIgKm5hbWUpO1xuYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oLTE2OS1leHRlcm4gaW50IG9zX2ZpbGVfdHlwZShjaGFyICpmaWxlKTtcbi0tXG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jPTMzPUVYUE9SVF9TWU1CT0wob3NfY3JlYXRlX3VuaXhfc29ja2V0KTtcbmFyY2gvdW0va2VybmVsL2tzeW1zLmM6MzQ6RVhQT1JUX1NZTUJPTChvc19jb25uZWN0X3NvY2tldCk7XG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jLTM1LUVYUE9SVF9TWU1CT0wob3NfYWNjZXB0X2Nvbm5lY3Rpb24pO1xuLS1cbmFyY2gvdW0va2VybmVsL3RpbWUuYz02NjY9c3RhdGljIGludCB0aW1lX3RyYXZlbF9jb25uZWN0X2V4dGVybmFsKGNvbnN0IGNoYXIgKnNvY2tldClcbi0tXG5hcmNoL3VtL2tlcm5lbC90aW1lLmMtNjg3LVxuYXJjaC91bS9rZXJuZWwvdGltZS5jOjY4ODpcdHJjID0gb3NfY29ubmVjdF9zb2NrZXQoc29ja2V0KTtcbmFyY2gvdW0va2VybmVsL3RpbWUuYy02ODktXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYz0xNjU9aW50IG9zX29wZW5fZmlsZShjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzLCBpbnQgbW9kZSlcbi0tXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy0yMDAtXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYzoyMDE6aW50IG9zX2Nvbm5lY3Rfc29ja2V0KGNvbnN0IGNoYXIgKm5hbWUpXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy0yMDIte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTI3Nz1zdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM0OS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTM1MDpzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzUxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIzNDc9c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ2Ny1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ2ODpcdFx0XHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ2OS1cdFx0XHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9zb2NrZXQuaD00NjI9ZXh0ZXJuIGludCBfX3N5c19iaW5kX3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbmluY2x1ZGUvbGludXgvc29ja2V0LmgtNDYzLVx0XHRcdCAgICAgaW50IGFkZHJsZW4pO1xuaW5jbHVkZS9saW51eC9zb2NrZXQuaDo0NjQ6aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaC00NjUtXHRcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jPTE2MT1fX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTg3LVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MTg4Olx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVx1MDAzZXNvY2ssIFx1MDAyNnNhLCBhZGRybGVuLCAwKTtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE4OS19XG4tLVxubmV0L3NvY2tldC5jPTIxMDA9U1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcbi0tXG5uZXQvc29ja2V0LmMtMjEwNS1cbm5ldC9zb2NrZXQuYzoyMTA2OmludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbm5ldC9zb2NrZXQuYy0yMTA3LVx0XHQgICBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9zb2NrZXQuYz0yMTMyPWludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuLS1cbm5ldC9zb2NrZXQuYy0yMTQwLVxubmV0L3NvY2tldC5jOjIxNDE6XHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbixcbm5ldC9zb2NrZXQuYy0yMTQyLVx0XHRcdCAgICAgIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYz02Mzg9aW50IGdldF90YWdpbmZvKGludCBkZXZfaWR4LCBpbnQgc2QsIGludCBmaWQsIGludCBwaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYy02OTQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jOjY5NTppbnQgY29ubmVjdF9zb2NrZXQoaW50IGRldl9pZHgsIGludCB0YXJnZXRfaWR4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYy02OTYte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25jaS9uY2lfZGV2LmM9NzE5PWludCBjb25uZWN0X3RhZyhpbnQgZGV2X2lkeCwgaW50IHZpcnR1YWxfZmQsIGludCBzZCwgaW50IGZpZCwgaW50IHBpZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jLTc0MS1cdFx0cmV0dXJuIC0xO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYzo3NDI6XHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoZGV2X2lkeCwgdGFyZ2V0X2lkeCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jLTc0My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9iZW5jaC1sb29rdXBzLmM9MjU2PXN0YXRpYyB2b2lkIGNvbm5lY3RfY2xpZW50KGludCBzaywgdm9pZCAqYXJnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jLTI1OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jOjI2MDpcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHRlc3Rfc2VydmVyX3BvcnQgJiM0MzsgKnApIFx1MDAzYz0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jLTI2MS1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QuYz0zMj1zdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QuYy00Ni1cdHN5bmNocm9uaXplX3RocmVhZHMoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC5jOjQ3Olx0aWYgKHRlc3RfY29ubmVjdF9zb2NrZXQoc2ssIHRoaXNfaXBfZGVzdCwgdGVzdF9zZXJ2ZXJfcG9ydCkgXHUwMDNjPSAwKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LmMtNDgtXHRcdHRlc3RfZXJyb3IoXCYjMzQ7ZmFpbGVkIHRvIGNvbm5lY3QoKVwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9pY21wcy1kaXNjYXJkLmM9NDIxPXN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jLTQzMS1cdHN5bmNocm9uaXplX3RocmVhZHMoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jOjQzMjpcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHRlc3Rfc2VydmVyX3BvcnQpIFx1MDAzYz0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jLTQzMy1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmM9ODUyPXN0YXRpYyBpbnQgcnVuX2NsaWVudChjb25zdCBjaGFyICp0c3RfbmFtZSwgdW5zaWduZWQgaW50IHBvcnQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jLTg3NS1cdHN5bmNocm9uaXplX3RocmVhZHMoKTsgLyogMjogTUtUcyBhZGRlZCA9XHUwMDNlIGNvbm5lY3QoKSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jOjg3NjpcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHBvcnQmIzQzOyYjNDM7KSBcdTAwM2M9IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMtODc3LVx0XHR0ZXN0X2Vycm9yKFwmIzM0O2ZhaWxlZCB0byBjb25uZWN0KClcJiMzNDspO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmg9MjkwPWV4dGVybiBpbnQgdGVzdF93YWl0X2ZkKGludCBzaywgdGltZV90IHNlYywgYm9vbCB3cml0ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjI5MTpleHRlcm4gaW50IF9fdGVzdF9jb25uZWN0X3NvY2tldChpbnQgc2ssIGNvbnN0IGNoYXIgKmRldmljZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgtMjkyLVx0XHRcdFx0IHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCBib29sIGFzeW5jKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oPTI5NT1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2xpc3Rlbl9zb2NrZXQoY29uc3QgdW5pb24gdGNwX2FkZHIgdGFkZHIsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zMzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjM0MDpzdGF0aWMgaW5saW5lIGludCBfdGVzdF9jb25uZWN0X3NvY2tldChpbnQgc2ssIGNvbnN0IHVuaW9uIHRjcF9hZGRyIHRhZGRyLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zNDEtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgYXN5bmMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zNDUtXHR0Y3BfYWRkcl90b19zb2NrYWRkcl9pbihcdTAwMjZhZGRyLCBcdTAwMjZ0YWRkciwgaHRvbnMocG9ydCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaDozNDY6XHRyZXR1cm4gX190ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB2ZXRoX25hbWUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0Ny1cdFx0XHRcdCAgICAgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkciksIGFzeW5jKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmg6MzUwOnN0YXRpYyBpbmxpbmUgaW50IHRlc3RfY29ubmVjdF9zb2NrZXQoaW50IHNrLCBjb25zdCB1bmlvbiB0Y3BfYWRkciB0YWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgtMzUxLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHBvcnQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM1Mi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjM1MzpcdHJldHVybiBfdGVzdF9jb25uZWN0X3NvY2tldChzaywgdGFkZHIsIHBvcnQsIGZhbHNlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgtMzU0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM9OTA9c3RhdGljIGludCBfX3Rlc3Rfc2twYWlyX3BvbGwoaW50IHNrLCBib29sIHdyaXRlLCB1aW50NjRfdCB0aW1lb3V0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYy0xMTItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM6MTEzOmludCBfX3Rlc3RfY29ubmVjdF9zb2NrZXQoaW50IHNrLCBjb25zdCBjaGFyICpkZXZpY2UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMtMTE0LVx0XHRcdCAgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIGJvb2wgYXN5bmMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jPTE2ND1pbnQgX3Rlc3Rfc2twYWlyX2Nvbm5lY3RfcG9sbChpbnQgc2ssIGNvbnN0IGNoYXIgKmRldmljZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMtMTc0LVx0c3luY2hyb25pemVfdGhyZWFkcygpOyAvKiAxOiBpbml0IHNrcGFpciBcdTAwMjYgcmVhZCBuc2NvdW50ZXJzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM6MTc1Olx0cmV0ID0gX190ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCBkZXZpY2UsIGFkZHIsIGFkZHJfc3osIHRydWUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jLTE3Ni1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3Jlc3RvcmUuYz0xMDk9c3RhdGljIHZvaWQgdGVzdF9nZXRfc2tfY2hlY2twb2ludCh1bnNpZ25lZCBpbnQgc2VydmVyX3BvcnQsIHNvY2thZGRyX2FmICpzYWRkcixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3Jlc3RvcmUuYy0xMjItXHRzeW5jaHJvbml6ZV90aHJlYWRzKCk7IC8qIDE6IE1LVCBhZGRlZCA9XHUwMDNlIGNvbm5lY3QoKSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yZXN0b3JlLmM6MTIzOlx0aWYgKHRlc3RfY29ubmVjdF9zb2NrZXQoc2ssIHRoaXNfaXBfZGVzdCwgc2VydmVyX3BvcnQpIFx1MDAzYz0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcmVzdG9yZS5jLTEyNC1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jPTI1Nz1zdGF0aWMgdm9pZCB0ZXN0X2NsaWVudF9hY3RpdmVfcnN0KHVuc2lnbmVkIGludCBwb3J0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmMtMjczLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGFzdDsgaSYjNDM7JiM0MzspIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmM6Mjc0Olx0XHRlcnIgPSBfdGVzdF9jb25uZWN0X3NvY2tldChza1tpXSwgdGhpc19pcF9kZXN0LCBwb3J0LCBpICE9IDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0yNzUtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0yODQtXHQvKiBhc3luYyBjb25uZWN0KCkgd2l0aCB0aGlyZCBzayB0byBnZXQgaW50byByZXF1ZXN0X3NvY2tfcXVldWUgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmM6Mjg1Olx0ZXJyID0gX3Rlc3RfY29ubmVjdF9zb2NrZXQoc2tbbGFzdF0sIHRoaXNfaXBfZGVzdCwgcG9ydCwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jLTI4Ni1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYz0zMjM9c3RhdGljIHZvaWQgdGVzdF9jbGllbnRfcGFzc2l2ZV9yc3QodW5zaWduZWQgaW50IHBvcnQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0zMzgtXHRzeW5jaHJvbml6ZV90aHJlYWRzKCk7IC8qIDE6IE1LVCBhZGRlZCA9XHUwMDNlIGNvbm5lY3QoKSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYzozMzk6XHRpZiAodGVzdF9jb25uZWN0X3NvY2tldChzaywgdGhpc19pcF9kZXN0LCBwb3J0KSBcdTAwM2M9IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jLTM0MC1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3NlbGYtY29ubmVjdC5jPTMzPXN0YXRpYyB2b2lkIHRjcF9zZWxmX2Nvbm5lY3QoY29uc3QgY2hhciAqdHN0LCB1bnNpZ25lZCBpbnQgcG9ydCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3NlbGYtY29ubmVjdC5jLTY4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZWxmLWNvbm5lY3QuYzo2OTpcdGlmIChfX3Rlc3RfY29ubmVjdF9zb2NrZXQoc2ssIFwmIzM0O2xvXCYjMzQ7LCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VsZi1jb25uZWN0LmMtNzAtXHRcdFx0XHQgIHNpemVvZihhZGRyKSwgMCkgXHUwMDNjIDApIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3NlcS1leHQuYz0xNzM9c3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZXEtZXh0LmMtMTg5LVx0c3luY2hyb25pemVfdGhyZWFkcygpOyAvKiAxOiBNS1QgYWRkZWQgPVx1MDAzZSBjb25uZWN0KCkgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VxLWV4dC5jOjE5MDpcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHRlc3Rfc2VydmVyX3BvcnQpIFx1MDAzYz0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VxLWV4dC5jLTE5MS1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgU29ja2V0IENvbm5lY3Rpb24gQVBJKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgY29ubmVjdF9zb2NrZXRgIGZ1bmN0aW9uLiBSaWdodCwgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYG5ldC9zb2NrZXQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBBbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZW50cnkgcG9pbnQsIG5vdCBqdXN0IHNvbWV0aGluZyB0dWNrZWQgYXdheSB3aXRoaW4gdGhlIGZpbGUuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gTm93LCB3aGVyZSBpcyBpdCBkZWNsYXJlZCBhZ2Fpbj8gQWgsIHllcywgaW4gYGluY2x1ZGUvbGludXgvc29ja2V0LmhgLiBUaGF0JiMzOTtzIHRoZSBzdGFuZGFyZCBwbGFjZSBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBCdXQgYSBuaWdnbGluZyBxdWVzdGlvbiBpcyBhcmlzaW5nLi4uIGlzIGl0IGFsc28gYXZhaWxhYmxlIHRvIG1vZHVsZXM/IEkgbmVlZCB0byBrbm93IGlmIG1vZHVsZXMgY2FuIHVzZSB0aGlzIEFQSSwgYmVjYXVzZSB0aGlzIGluZmx1ZW5jZXMgaG93IHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHN0cnVjdHVyZWQgYW5kIGhvdyBtdWNoIGZsZXhpYmlsaXR5IHdlIGhhdmUuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGlmIGl0JiMzOTtzIGV4cGxpY2l0bHkgZXhwb3J0aW5nIGl0c2VsZiB0byBtb2R1bGVzIHVzaW5nIGBFWFBPUlRfU1lNQk9MYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIGluY2x1ZGVkLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qY29ubmVjdF9zb2NrZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC91bS9rZXJuZWwva3N5bXMuYz0zMz1FWFBPUlRfU1lNQk9MKG9zX2NyZWF0ZV91bml4X3NvY2tldCk7XG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jOjM0OkVYUE9SVF9TWU1CT0wob3NfY29ubmVjdF9zb2NrZXQpO1xuYXJjaC91bS9rZXJuZWwva3N5bXMuYy0zNS1FWFBPUlRfU1lNQk9MKG9zX2FjY2VwdF9jb25uZWN0aW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE2NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIHRoaXMgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMgcGFydCBvZiBhIG1vZHVsZSBleHBvcnQsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIGxpa2VseSBhIGdsb2JhbCBmdW5jdGlvbi4gTm93IEkgbmVlZCB0byBjb25maXJtIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBpbnRlbmRlZCB1c2UsIHdoaWNoIHBvaW50cyBtZSB0b3dhcmRzIGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L3NvY2tldC5jYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGF0IGZpbGUgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgZXhwbGljaXQgZXhwb3J0IG9yIHZpc2liaWxpdHkgZGVjbGFyYXRpb25zIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYz0yMTAwPVNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXG4tLVxubmV0L3NvY2tldC5jLTIxMDUtXG5uZXQvc29ja2V0LmM6MjEwNjppbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG5uZXQvc29ja2V0LmMtMjEwNy1cdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncylcbi0tXG5uZXQvc29ja2V0LmM9MjEzMj1pbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbi0tXG5uZXQvc29ja2V0LmMtMjE0MC1cbm5ldC9zb2NrZXQuYzoyMTQxOlx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KHNvY2ssIGFkZHJlc3MsIGFkZHJsZW4sXG5uZXQvc29ja2V0LmMtMjE0Mi1cdFx0XHQgICAgICBzb2NrLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBLc29jayBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfa3NvY2tgIHN0dWZmLiBJdCYjMzk7cyBub3QgYSBzdGFuZGFyZCBleHBvcnRlZCBtb2R1bGUsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbmV0L2NvcmUvYnBmX2tzb2NrLmNgLCB3aGljaCBpcyBzdGF0aWNhbGx5IGNvbXBpbGVkLCBsaWtlbHkgbGlua2VkIGR1ZSB0byBgYnBmX2tzb2NrLm9gIGJlaW5nIGluY2x1ZGVkIGluIGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpYC4gVGhhdCBnaXZlcyBtZSBhIGZldyBrZXkgc3ltYm9scyB0byB6ZXJvIGluIG9uOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGBicGZfa3NvY2tfc2VuZGAsIGFuZCBgY29ubmVjdF9zb2NrZXRgLgoKYGNvbm5lY3Rfc29ja2V0YCBsb29rcyBwcm9taXNpbmcgYXMgYW4gZW50cnkgcG9pbnQ7IGl0IHdyYXBzIGJvdGggYHNlY3VyaXR5X3NvY2tldF9jb25uZWN0YCBhbmQgYHNvY2stJmd0O29wcy0mZ3Q7Y29ubmVjdGAuIEFuZCBob2xkIG9uLCBJJiMzOTt2ZSBnb3QgdG8gcmVtZW1iZXIgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgIGlzIGluIHRoZXJlIHRvby4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyB3ZWxsLgoKTm93LCBjb25maWd1cmF0aW9uLXdpc2UsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCYjMzk7cyByZXF1aXJlZCB0byBtYWtlIHRoaXMgd29yay4gRGVmaW5pdGVseSBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhlIGxhdHRlciBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlLiBDaGVja2luZyBgbmV0L2NvcmUvTWFrZWZpbGVgIGFnYWluIGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5OiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2tzb2NrLm9gIGlzIHVuZGVyIGBpZmRlZiBDT05GSUdfSU5FVGAuIFNvLCBgSU5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIHRoZSBtYWluIG9uZXMuCgpJJiMzOTttIHdvbmRlcmluZyBhYm91dCBgQ09ORklHX0JQRl9MU01gLCB0aG91Z2guIExldCBtZSBsb29rIGF0IHRoaXMgY29kZSBzbmlwcGV0LgoKYGBgYwojaWZkZWYgQ09ORklHX0JQRl9MU00KQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpCiNlbmRpZgoKc3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKQp7CglpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKCZhbXA7a3NvY2tfa2Z1bmNfYnRmX2lkcywga2Z1bmNfaWQpKQoJCXJldHVybiAwOwoKCWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCkKCQlyZXR1cm4gMDsKCiNpZmRlZiBDT05GSUdfQlBGX0xTTQoJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gJmFtcDsmYW1wOwoJICAgIHByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKQoJCXJldHVybiAwOwojZW5kaWYKCglyZXR1cm4gLUVBQ0NFUzsKfQpgYGAKClRoZSBrZnVuY3Mgc2VlbSB0byBiZSBhdmFpbGFibGUgZm9yIGBCUEZfUFJPR19UWVBFX1NZU0NBTExgIHJlZ2FyZGxlc3Mgb2YgYENPTkZJR19CUEZfTFNNYC4gU28sIGZvciAqY29yZSogZnVuY3Rpb25hbGl0eSwgYENPTkZJR19CUEZfTFNNYCBpc24mIzM5O3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBJdCBzZWVtcyBpdCBqdXN0IGVuYWJsZXMgaG9va2luZyBpdCBmcm9tIExTTSBjb250ZXh0cy4gU2luY2UgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29yZSBoZXJlLCBJIHRoaW5rIEkmIzM5O2xsIGxlYXZlIGl0IG91dCBmb3Igbm93LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciBjb25maWcgZmxhZ3MgaGlkaW5nIGluIGBuZXQvY29yZS9icGZfa3NvY2suY2AuIFRoYXQgd2lsbCBjb25maXJtIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX2tzb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX2tzb2NrLmM9Mjc0PUJURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzUtXG5uZXQvY29yZS9icGZfa3NvY2suYzoyNzY6I2lmZGVmIENPTkZJR19CUEZfTFNNXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzctQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjgwPXN0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODctXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODg6I2lmZGVmIENPTkZJR19CUEZfTFNNXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODktXHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI2MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHJ1bmRvd246CgoqKkJQRiBWZXJpZmljYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIGBDT05GSUdfQlBGX0xTTWAgaXMgY2xlYXJseSBlbmFibGVkLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGdpdmVuIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIGlzIGFjdGl2ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdmVyaWZpZXIgaW50ZXJhY3RzIHdpdGggaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBjaGVja3Mgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZSB0aGF0IGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgYENPTkZJR19CUEZfTFNNYCBzZXR0aW5nLCBwcm9iYWJseSBhcm91bmQgc2VjdXJpdHkgb3IgcG9saWN5IGVuZm9yY2VtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTI3MjM9aW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjczOS1cdFx0aWYgKCFidGZfdm1saW51eCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjI3NDA6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEZcXG5cJiMzNDspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTI3NDEtXHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDM1OD1CVEZfU0VUX1NUQVJUKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDM1OTojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjAtQlRGX0lEKHN0cnVjdCwgcHJvZ190ZXN0X3JlZl9rZnVuYylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MzYxLSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjQzNjI6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM2My1CVEZfSUQoc3RydWN0LCBjZ3JvdXApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM2NC0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MzY1OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjYtQlRGX0lEKHN0cnVjdCwgYnBmX2NwdW1hc2spXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQzNjg9QlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDM2OTojaWZkZWYgQ09ORklHX0NSWVBUT1xua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNzAtQlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM3MS0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MzcyOiNpZmRlZiBDT05GSUdfSU5FVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNzMtQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODcwPXN0YXRpYyB1MzIgKnJlZzJidGZfaWRzW19fQlBGX1JFR19UWVBFX01BWF0gPSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDg3MTojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4NzItXHRbUFRSX1RPX1NPQ0tFVF0gPSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDkyNT1zdGF0aWMgaW50IGNoZWNrX3BrdF9wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ5MzYtXHQvKiBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IGhhdmUgYSBLY29uZmlnIGVuYWJsaW5nXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDkzNzpcdCAqIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIHRoZSB2YWx1ZSBvZlxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ5MzgtXHQgKiBORVRfSVBfQUxJR04gaXMgdW5pdmVyc2FsbHkgc2V0IHRvICYjMzk7MiYjMzk7LiAgQW5kIG9uIHBsYXRmb3Jtc1xua2VybmVsL2JwZi92ZXJpZmllci5jOjQ5Mzk6XHQgKiB0aGF0IGRvIHNldCBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUywgd2UgZ2V0XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDk0MC1cdCAqIHRvIHRoaXMgY29kZSBvbmx5IGluIHN0cmljdCBtb2RlIHdoZXJlIHdlIHdhbnQgdG8gZW11bGF0ZVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MDkxPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTEzNS1cdHN1YnByb2dfZGVwdGggPSByb3VuZF91cF9zdGFja19kZXB0aChlbnYsIHN1YnByb2dbaWR4XS5zdGFja19kZXB0aCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTEzNjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19YODZfNjQpIFx1MDAyNlx1MDAyNiBzdWJwcm9nW2lkeF0uc3RhY2tfYXJnX2NudCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTUxMzctXHRcdC8qIHg4Ni02NCB1c2VzIFI5IGZvciBib3RoIHByaXZhdGUgc3RhY2sgZnJhbWUgcG9pbnRlciBhbmQgYXJnNi4gKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTY0OD1CVEZfVFlQRV9TQUZFX1JDVV9PUl9OVUxMKHN0cnVjdCBtbV9zdHJ1Y3QpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjQ5LVx0c3RydWN0IGZpbGUgX19yY3UgKmV4ZV9maWxlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjU2NTA6I2lmZGVmIENPTkZJR19NRU1DR1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NTEtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19yY3UgKm93bmVyO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTA4PXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkyMi1cdGlmICghYnRmX3ZtbGludXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTIzOlx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkyNC1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzE3Mz1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTc1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTc2Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzE3Ny1cdFx0dmVyYm9zZShlbnYsIFwmIzM0O2JwZl90aW1lciBjYW5ub3QgYmUgdXNlZCBmb3IgUFJFRU1QVF9SVC5cXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NzQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBzb2NrX3R5cGVzID0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzQ5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc3NTA6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBidGZfaWRfc29ja19jb21tb25fdHlwZXMgPSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzICpjb21wYXRpYmxlX3JlZ190eXBlc1tfX0JQRl9BUkdfVFlQRV9NQVhdID0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODMyLVx0W0FSR19QVFJfVE9fU09DS19DT01NT05dXHQ9IFx1MDAyNnNvY2tfdHlwZXMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzgzMzojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MzQtXHRbQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT05dXHQ9IFx1MDAyNmJ0Zl9pZF9zb2NrX2NvbW1vbl90eXBlcyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxOTk9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjM5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNjQwOiNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDY0MS1cdFx0ZXJyID0gZ2V0X2NhbGxjaGFpbl9idWZmZXJzKHN5c2N0bF9wZXJmX2V2ZW50X21heF9zdGFjayk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjQ0LVx0XHRlcnIgPSAtRU5PVFNVUFA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA2NDU6XHRcdGVycl9zdHIgPSBcJiMzNDtmdW5jICVzIyVkIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfUEVSRl9FVkVOVFNcXG5cJiMzNDs7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2NDYtI2VuZGlmXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI1PUJURl9JRChmdW5jLCBicGZfcmJ0cmVlX3JpZ2h0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTI2OiNpZmRlZiBDT05GSUdfTkVUXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjctQlRGX0lEKGZ1bmMsIGJwZl9keW5wdHJfZnJvbV9za2IpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTQ3PUJURl9JRChmdW5jLCBicGZfcHJlZW1wdF9lbmFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNDg6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNDktQlRGX0lEKGZ1bmMsIGJwZl9pdGVyX2Nzc190YXNrX25ldylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExNTE9QlRGX0lEX1VOVVNFRFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTUyLSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTUzOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU0LUJURl9JRChmdW5jLCBicGZfc2Vzc2lvbl9jb29raWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTYzPUJURl9JRChmdW5jLCBicGZfaXRlcl9udW1fZGVzdHJveSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE2NDojaWZkZWYgQ09ORklHX0JQRl9MU01cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE2NS1CVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTgyPUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE4MzojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE4NC1CVEZfSUQoZnVuYywgYnBmX3Nlc3Npb25faXNfcmV0dXJuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDQ3Mj1zdGF0aWMgdm9pZCBzY2FsYXJfYnl0ZV9zd2FwKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDg3LVx0Ym9vbCBpc19iaWdfZW5kaWFuO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NDg4OiNpZmRlZiBDT05GSUdfQ1BVX0JJR19FTkRJQU5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDQ4OS1cdGlzX2JpZ19lbmRpYW4gPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjY1Mj1ib29sIGJwZl92ZXJpZmllcl9pbmxpbmVzX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHMzMiBpbW0pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjU0LVx0c3dpdGNoIChpbW0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY1NTojaWZkZWYgQ09ORklHX1g4Nl82NFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjU2LVx0Y2FzZSBCUEZfRlVOQ19nZXRfc21wX3Byb2Nlc3Nvcl9pZDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY1NzojaWZkZWYgQ09ORklHX1NNUFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjU4LVx0Y2FzZSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrX2J0Zjpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc2ODY9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzAyLVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3MDM6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3MDQtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4Njc4PXN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4MDI6I2lmZGVmIENPTkZJR19GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT05cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgwMy1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4MTE9QlRGX0lEKGZ1bmMsIF9fZmlsZW1hcF9hZGRfZm9saW8pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4MTI6I2lmZGVmIENPTkZJR19GQUlMX1BBR0VfQUxMT0Ncbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxMy1CVEZfSUQoZnVuYywgc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxNC0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgxNTojaWZkZWYgQ09ORklHX0ZBSUxTTEFCXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTYtQlRGX0lEKGZ1bmMsIHNob3VsZF9mYWlsc2xhYilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4ODM9c3RhdGljIGludCBjaGVja19hdHRhY2hfbW9kaWZ5X3JldHVybih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4OTEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4OTI6I2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT04gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg5My1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzNTc9QlRGX0lEX1VOVVNFRFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzU4OiNpZmRlZiBDT05GSUdfU01QXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNTktQlRGX0lEKGZ1bmMsIF9fX21pZ3JhdGVfZW5hYmxlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM2MT1CVEZfSUQoZnVuYywgbWlncmF0ZV9lbmFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjItI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNjM6I2lmICFkZWZpbmVkIENPTkZJR19QUkVFTVBUX1JDVSBcdTAwMjZcdTAwMjYgIWRlZmluZWQgQ09ORklHX1RJTllfUkNVXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjQtQlRGX0lEKGZ1bmMsIHJjdV9yZWFkX3VubG9ja19zdHJpY3QpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjUtI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNjY6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1BSRUVNUFQpIHx8IGRlZmluZWQoQ09ORklHX1RSQUNFX1BSRUVNUFRfVE9HR0xFKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY3LUJURl9JRChmdW5jLCBwcmVlbXB0X2NvdW50X2FkZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM2OD1CVEZfSUQoZnVuYywgcHJlZW1wdF9jb3VudF9zdWIpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjktI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNzA6I2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzcxLUJURl9JRChmdW5jLCBfX3JjdV9yZWFkX2xvY2spXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MzgwPUJURl9TRVRfU1RBUlQobm9yZXR1cm5fZGVueSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM4MTojaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzODItQlRGX0lEKGZ1bmMsIF9faWEzMl9zeXNfZXhpdClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM4Mz1CVEZfSUQoZnVuYywgX19pYTMyX3N5c19leGl0X2dyb3VwKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Mzg0LSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Mzg1OiNpZmRlZiBDT05GSUdfS1VOSVRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM4Ni1CVEZfSUQoZnVuYywgX19rdW5pdF9hYm9ydClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM4Nz1CVEZfSUQoZnVuYywga3VuaXRfdHJ5X2NhdGNoX3Rocm93KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Mzg4LSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Mzg5OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzkwLUJURl9JRChmdW5jLCBfX21vZHVsZV9wdXRfYW5kX2t0aHJlYWRfZXhpdClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM5MS0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM5MjojaWZkZWYgQ09ORklHX1g4Nl82NFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzkzLUJURl9JRChmdW5jLCBfX3g2NF9zeXNfZXhpdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk1ODY9c3RydWN0IGJ0ZiAqYnBmX2dldF9idGZfdm1saW51eCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU5MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU5MTpcdGlmICghYnRmIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU5Mi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZidGZfdm1saW51eF9sb2NrKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAxMDI9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTg5LVx0ZW52LVx1MDAzZXN0cmljdF9hbGlnbm1lbnQgPSAhIShhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IEJQRl9GX1NUUklDVF9BTElHTk1FTlQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTkwOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5MS1cdFx0ZW52LVx1MDAzZXN0cmljdF9hbGlnbm1lbnQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUxNgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSBmb3IgYnBmX2tzb2NrIFN1cHBvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBicGZfa3NvY2tgIGFuZCBgcmN1X3Byb3RlY3RlZF90eXBlc2AuIEdpdmVuIHRoYXQsIGBDT05GSUdfSU5FVGAgaXMgYSBkZWZpbml0ZSByZXF1aXJlbWVudCDigJMgbm8gcXVlc3Rpb24gdGhlcmUuIEFuZCwgb2YgY291cnNlLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsLgoKTm93LCByZWdhcmRpbmcgZGVidWcgaW5mb3JtYXRpb24gZm9yIEJURiwgYENPTkZJR19ERUJVR19JTkZPX0JURmAgc2VlbXMgaGlnaGx5IGxpa2VseSwgZXNwZWNpYWxseSBzaW5jZSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIEJQRiBrZnVuY3MuIEl0JiMzOTtzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBmb3IgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHksIHNvIEkmIzM5O2xsIGluY2x1ZGUgdGhhdC4gRmluYWxseSwgZm9yIGBDT05GSUdfQlBGX0xTTWAsIHRoZSB0ZXN0cyBsZXZlcmFnZSBgQlBGX1BST0dfVFlQRV9MU01gIGZvciB0aGUgYGJwZl9rc29ja19zZW5kYCBmdW5jdGlvbmFsaXR5IHZpYSBhbiBMU00gaG9vay4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgaW5jbHVkZSB0aGlzIGNvbmZpZ3VyYXRpb24gYXMgd2VsbC4KClNvLCBoZXJlJiMzOTtzIHRoZSBjb25maWcgY2hlY2tsaXN0OgoKKiAgIGBJTkVUYAoqICAgYEJQRl9TWVNDQUxMYAoqICAgYERFQlVHX0lORk9fQlRGYAoqICAgYEJQRl9MU01gCgpBbmQsIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29yZSBzeW1ib2xzIGluIGZvY3VzOgoKKiAgIGBicGZfa3NvY2tfY3JlYXRlYAoqICAgYGJwZl9rc29ja19jb25uZWN0YAoqICAgYGJwZl9rc29ja19hY3F1aXJlYAoqICAgYGJwZl9rc29ja19yZWxlYXNlYAoqICAgYGJwZl9rc29ja19zZW5kYAoqICAgYGNvbm5lY3Rfc29ja2V0YAoqICAgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgCgpRdWljayB0aG91Z2h0IG9uIGBicGZfa3NvY2tfcmVsZWFzZV9kdG9yYDogaXQmIzM5O3MganVzdCBhIHN0cmFpZ2h0Zm9yd2FyZCB3cmFwcGVyIGFyb3VuZCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBzbyBpdCYjMzk7cyBub3QgYSBjb25jZXJuIGZyb20gYSBjb25maWd1cmF0aW9uIHBvaW50IG9mIHZpZXcuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcmAgaXMgbm9uLXN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2VfZHRvciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfa3NvY2suYz0yMTM9X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjAtXG5uZXQvY29yZS9icGZfa3NvY2suYzoyMjE6X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjIyLXtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjQtfVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI1OkNGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjYtXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA0PUJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNTpCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2VybmVsIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGNoYW5nZSDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aHkuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgc3VpdGUgb2YgQlBGIGtmdW5jczogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCB0aGUgYGJwZl9rc29ja19zZW5kYCBmYW1pbHksIGFuZCBzbyBvbi4gVGhlc2Ugd2lsbCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8sIGZ1bmRhbWVudGFsbHksIGNyZWF0ZSBhbmQgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgc29ja2V0cywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0uIFRoaXMgb3BlbnMgdXAgZW50aXJlbHkgbmV3IGNvZGUgcGF0aHMgdGhhdCBhcmUgbm93IHJlYWNoYWJsZSB2aWEgQlBGLCBhbmQgdGhhdCBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQmIzM0OyB0byBtZS4gU3BlY2lmaWNhbGx5LCB0aGVzZSBrZnVuY3MgYXJlIGFjY2Vzc2libGUgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zIGxpa2UgdGhlIFNZU0NBTEwgYW5kIExTTSBob29rcywgd2hpY2ggaW1tZWRpYXRlbHkgZXhwYW5kcyB0aGUgYXR0YWNrIHN1cmZhY2UgdG8gY29uc2lkZXIuCgpGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBJTkVUYCwgYEJQRl9TWVNDQUxMYCwgYERFQlVHX0lORk9fQlRGYCwgYW5kIGBCUEZfTFNNYCBhcmUgZW5hYmxlZCBkdXJpbmcgdGVzdGluZy4gVGhhdCBjb3ZlcnMgdGhlIGJhc2ljIGRlcGVuZGVuY2llcyB0byBlbmFibGUgdGhlIGtzb2NrIEJQRiBmdW5jdGlvbmFsaXR5LgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGUgY3JpdGljYWwgc3ltYm9sczogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX2FjcXVpcmVgLCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBgYnBmX2tzb2NrX3NlbmRgLCB0aGUgYGNvbm5lY3Rfc29ja2V0YCBoZWxwZXIsIGFuZCBgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcmAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgYW5kIGNsZWFudXAgcm91dGluZXMgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgYW5hbHlzaXMgYW5kIHZ1bG5lcmFiaWxpdHkgYXNzZXNzbWVudC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGNvdmVyaW5nIGFsbCB0aGUga2Z1bmNzLgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbmV3IGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGJlc2lkZXMgdGhlIG9uZXMgSSYjMzk7dmUgbGlzdGVkLiBJdCYjMzk7cyBlYXN5IHRvIG1pc3MgYW4gaW1wb3J0YW50IG9uZSwgc28gSSYjMzk7bGwgcmV2aWV3IGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljLiogYnBmX2tzb2NrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9rc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9rc29jay5jPTMxPXN0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzktXG5uZXQvY29yZS9icGZfa3NvY2suYzo0MDpzdGF0aWMgYm9vbCBicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KHZvaWQpXG5uZXQvY29yZS9icGZfa3NvY2suYy00MS17XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9Mjc3PUJURl9JRF9MSVNUX1NJTkdMRShicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkLCBmdW5jLCBicGZfbHNtX3NvY2tldF9zZW5kbXNnKVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3OS1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4MDpzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODEte1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jPTMwNT1CVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwNi1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNzpzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NDEKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUHJpb3JpdGl6aW5nIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gYGtzb2NrX3JlbGVhc2Vfd29ya19mbmAgKmlzKiBhIHdvcmtxdWV1ZSBjYWxsYmFjayBhbmQgdGhlcmVmb3JlIGZ1enphYmxlLCB3aGljaCBpcyBnb29kLiBCdXQgaXQmIzM5O3MgYWxzbyBzdGF0aWMsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdpdmVzIG1lIHBhdXNlLiBUaGUgZ3VpZGFuY2UgaXMgcHJldHR5IGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgZm9yIGdvb2QgcmVhc29uLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBtYXhpbWl6aW5nIGNvdmVyYWdlIGFuZCBlYXNlIG9mIGZ1enppbmcuIEdpdmVuIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IG15IHNpZ2h0cyBvbiB0aGUgbm9uLXN0YXRpYyBjYW5kaWRhdGVzIGluc3RlYWQuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBleHBsb3JlIHRob3NlIGZpcnN0LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlX2R0b3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzZXQgb2YgQlBGIGtmdW5jcyAoYnBmX2tzb2NrX2NyZWF0ZSwgYnBmX2tzb2NrX2Nvbm5lY3QsIGJwZl9rc29ja19zZW5kLCBldGMuKSB0aGF0IGFsbG93IEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0gYW5kIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGtmdW5jcyBhcmUgYWNjZXNzaWJsZSBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKGxpa2UgU1lTQ0FMTCBhbmQgTFNNIGhvb2tzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2tzb2NrX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfYWNxdWlyZSYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfc2VuZCYjMzQ7LAogICAgJiMzNDtjb25uZWN0X3NvY2tldCYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfcmVsZWFzZV9kdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc2V0IG9mIEJQRiBrZnVuY3MgKGJwZl9rc29ja19jcmVhdGUsIGJwZl9rc29ja19jb25uZWN0LCBicGZfa3NvY2tfc2VuZCwgZXRjLikgdGhhdCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlIGFuZCBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBCUEYgc3Vic3lzdGVtIGFuZCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBrZnVuY3MgYXJlIGFjY2Vzc2libGUgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChsaWtlIFNZU0NBTEwgYW5kIExTTSBob29rcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIChgYnBmX2tzb2NrYCkgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMgZnJvbSBCUEYgcHJvZ3JhbXMuIFxuXG4xLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBrZXJuZWwgc3RydWN0dXJlcyAoYHN0cnVjdCBicGZfa3NvY2tgLCBgc3RydWN0IG1zZ2hkcmAsIGBzdHJ1Y3Qga3ZlY2ApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBvciBkZWNsYXJhdGlvbiAoZS5nLiwgdXNpbmcgYGt6YWxsb2Nfb2JqYCBvciBkZXNpZ25hdGVkIGluaXRpYWxpemVycykuXG4yLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCBmcm9tIEJQRiBwcm9ncmFtcyAoYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgLCBhbmQgdGhlIHNlbmQgYnVmZmVyKSBhcmUgdmFsaWRhdGVkIGZvciBzaXplIGJ5IHRoZSBrZnVuYyB3cmFwcGVycy4gVGhlIEJQRiB2ZXJpZmllciBlbmZvcmNlcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZXNlIGFyZ3VtZW50cyBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIHRvIHRoZSBrZnVuY3MuIEZ1cnRoZXJtb3JlLCBLTVNBTiB1bnBvaXNvbnMgQlBGIHN0YWNrIGFuZCBtYXAgbWVtb3J5IGJ5IGRlc2lnbiBzaW5jZSBpdCBjYW5ub3QgdHJhY2sgSklUdGVkIEJQRiBleGVjdXRpb24sIG1lYW5pbmcgS01TQU4gd291bGQgbm90IGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvcmlnaW5hdGluZyBmcm9tIHRoZSBCUEYgcHJvZ3JhbSBpdHNlbGYuXG4zLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYGNvbm5lY3Rfc29ja2V0YCBtZXJlbHkgZXh0cmFjdHMgZXhpc3RpbmcgbG9naWMgd2l0aG91dCBjaGFuZ2luZyBob3cgc29ja2V0IGFkZHJlc3NlcyBhcmUgaGFuZGxlZCBvciBjb3BpZWQuXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGUgZGF0YSBzZW50IG92ZXIgdGhlIHNvY2tldCBvcmlnaW5hdGVzIGZyb20gdGhlIEJQRiBwcm9ncmFtLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3Vlcywgd2hpY2ggYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGV4cG9zZWQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxNzoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmNiMzg3ZmI3NWU0M2IKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oCkBAIC0wLDAgJiM0MzsxLDM2IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9CUEZfS1NPQ0tfSAomIzQzOyNkZWZpbmUgX0JQRl9LU09DS19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzCiYjNDM7ICogQGZhbWlseToJQWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuCiYjNDM7ICogQHR5cGU6CVNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuCiYjNDM7ICogQHByb3RvY29sOglQcm90b2NvbCBudW1iZXIgKGUuZy4gSVBQUk9UT19VRFApLCBvciAwIGZvciB0aGUgZGVmYXVsdCBwcm90b2NvbAomIzQzOyAqCQlvZiB0aGUgZ2l2ZW4gdHlwZS4KJiM0MzsgKiBAcmVzZXJ2ZWQ6CU11c3QgYmUgemVyby4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCiYjNDM7ICovCiYjNDM7c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7CiYjNDM7CV9fdTggZmFtaWx5OwomIzQzOwlfX3U4IHR5cGU7CiYjNDM7CV9fdTggcHJvdG9jb2w7CiYjNDM7CV9fdTggcmVzZXJ2ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB1bmlvbiBicGZfa3NvY2tfYWRkciAtIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcwomIzQzOyAqIEBzaW46IElQdjQgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICogQHNpbjY6IElQdjYgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICovCiYjNDM7dW5pb24gYnBmX2tzb2NrX2FkZHIgewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX0JQRl9LU09DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTQ2MSw2ICYjNDM7NDYxLDggQEAgZXh0ZXJuIHN0cnVjdCBmaWxlICpfX3N5c19zb2NrZXRfZmlsZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsKIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTsKIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsCiAJCQkgICAgIGludCBhZGRybGVuKTsKJiM0MztpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsCiYjNDM7CQkgICBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwKIAkJCSAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7CiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNDM2OSw2ICYjNDM7NDM2OSw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KQogI2lmZGVmIENPTkZJR19DUllQVE8KIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KQogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19JTkVUCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzOyNlbmRpZgogQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcykKIAogc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCBiM2ZkY2I0ZTM1NWZhLi5jMjBlNTIwMzU4YjhlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtNDQsNiAmIzQzOzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIubwogb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm8KIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm8KIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm8KJiM0MztpZmRlZiBDT05GSUdfSU5FVAomIzQzO29iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9rc29jay5vCiYjNDM7ZW5kaWYKIG9iai0kKENPTkZJR19PRikJJiM0Mzs9IG9mX25ldC5vCiBvYmotJChDT05GSUdfTkVUX1RFU1QpICYjNDM7PSBuZXRfdGVzdC5vCiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgJiM0Mzs9IGRldm1lbS5vCmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmU5OTQzYWVlYWRkMzIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfa3NvY2suYwpAQCAtMCwwICYjNDM7MSwzMjggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmX2tzb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idGZfaWRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zb2NrZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQKJiM0MzsgKiBAc29jazoJVGhlIHVuZGVybHlpbmcga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAdXNhZ2U6CVJlZmVyZW5jZSBjb3VudGVyLgomIzQzOyAqIEByd29yazoJUkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLgomIzQzOyAqLwomIzQzO3N0cnVjdCBicGZfa3NvY2sgewomIzQzOwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwomIzQzOwlyZWZjb3VudF90IHVzYWdlOwomIzQzOwlzdHJ1Y3QgcmN1X3dvcmsgcndvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CWtzID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgYnBmX2tzb2NrLCByd29yayk7CiYjNDM7CXNvY2tfcmVsZWFzZShrcy0mZ3Q7c29jayk7CiYjNDM7CWtmcmVlKGtzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKQomIzQzOwkgKiBjbGVhcmVkIGN1cnJlbnQtJmd0O25zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhKGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpICZhbXA7JmFtcDsgY3VycmVudC0mZ3Q7bnNwcm94eTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEga2VybmVsIHNvY2tldC4KJiM0MzsgKgomIzQzOyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yCiYjNDM7ICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZAomIzQzOyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLgomIzQzOyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrCiYjNDM7ICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJiMzOTtzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogQG9wdHM6CVBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLgomIzQzOyAqIEBvcHRzX19zejoJU2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuCiYjNDM7ICogQGVycl9fdW5pbml0OglJbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKgomIzQzO2JwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LAomIzQzOwkJIGludCAqZXJyX191bmluaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHNvY2tfY3JlYXRlKCkgZGVyaXZlcyB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGNyZWRlbnRpYWxzLCBhbmQgY2dyb3VwCiYjNDM7CSAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG8KJiM0MzsJICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uCiYjNDM7CSAqLwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkgewomIzQzOwkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7CiYjNDM7CQkuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtJmd0O2ZhbWlseSksCiYjNDM7CQkudHlwZSA9IFJFQURfT05DRShvcHRzLSZndDt0eXBlKSwKJiM0MzsJCS5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLSZndDtwcm90b2NvbCksCiYjNDM7CQkucmVzZXJ2ZWQgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgJmFtcDsmYW1wOyBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7CiYjNDM7CQllcnIgPSAtRUFGTk9TVVBQT1JUOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7CiYjNDM7CQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkucHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgJmFtcDsmYW1wOyBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlrcyA9IGt6YWxsb2Nfb2JqKCprcyk7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LAomIzQzOwkgKiBzb2NrZXQgbGFiZWxzLCBhbmQgdGhlIGFjdGl2ZSBuZXRucyByZWZlcmVuY2UgbWF0Y2ggYSBzb2NrZXQoMikKJiM0MzsJICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0mIzM5O3MgY2FsbGVyLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCwKJiM0MzsJCQkgICZhbXA7a3MtJmd0O3NvY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsKJiM0MzsJa3MtJmd0O3NvY2stJmd0O3NrLSZndDtza19yY3ZidWYgPSBTT0NLX01JTl9SQ1ZCVUY7CiYjNDM7CWtzLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7CiYjNDM7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2tzLSZndDt1c2FnZSwgMSk7CiYjNDM7CXB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CWtmcmVlKGtzKTsKJiM0MztlcnJfb3V0OgomIzQzOwlwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLgomIzQzOyAqIEBrczoJCVRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LgomIzQzOyAqIEBhZGRyOglQb2ludGVyIHRvIGFuIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcy4KJiM0MzsgKiBAYWRkcl9fc3o6CVNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uCiYjNDM7ICoKJiM0MzsgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWQKJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsCiYjNDM7CQkJCSAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsCiYjNDM7CQkJCSAgdTMyIGFkZHJfX3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7CiYjNDM7CWludCBhZGRybGVuOwomIzQzOwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqLwomIzQzOwltZW1jcHkoJmFtcDtzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7CiYjNDM7CWNhc2UgQUZfSU5FVDoKJiM0MzsJCWFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFGX0lORVQ2OgomIzQzOwkJYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLSZndDtzb2NrLCAmYW1wO3NhLCBhZGRybGVuLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAa3M6CVRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYQomIzQzOyAqCXRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYWNxdWlyZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvcgomIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykKJiM0Mzt7CiYjNDM7CWlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7a3MtJmd0O3VzYWdlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOglUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLgomIzQzOyAqCiYjNDM7ICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhCiYjNDM7ICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykKJiM0Mzt7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtrcy0mZ3Q7dXNhZ2UpKSB7CiYjNDM7CQlJTklUX1JDVV9XT1JLKCZhbXA7a3MtJmd0O3J3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pOwomIzQzOwkJcXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgJmFtcDtrcy0mZ3Q7cndvcmspOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcykKJiM0Mzt7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0Mzt9CiYjNDM7Q0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAa3M6CQlUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuCiYjNDM7ICogQGRhdGE6CVBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC4KJiM0MzsgKiBAZGF0YV9fc3o6CVNpemUgb2YgdGhlIGRhdGEgdG8gc2VuZC4KJiM0MzsgKgomIzQzOyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwCiYjNDM7ICogKGtlcm5lbF9zZW5kbXNnKSwgc28gaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCSAgICAgICB1MzIgZGF0YV9fc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKJiM0MzsJCS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBrdmVjIGlvdiA9IHsKJiM0MzsJCS5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSwKJiM0MzsJCS5pb3ZfbGVuID0gZGF0YV9fc3osCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy0mZ3Q7c29jaywgJmFtcDttc2csICZhbXA7aW92LCAxLCBkYXRhX19zeik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLAomIzQzO307CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzO0JURl9JRF9MSVNUX1NJTkdMRShicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkLCBmdW5jLCBicGZfbHNtX3NvY2tldF9zZW5kbXNnKQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDtrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNCiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNICZhbXA7JmFtcDsKJiM0MzsJICAgIHByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXJldHVybiAtRUFDQ0VTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfa2Z1bmNfYnRmX2lkcywKJiM0MzsJLmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsCiYjNDM7fTsKJiM0MzsKJiM0MztCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzO0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7CiYjNDM7CQl7CiYjNDM7CQkJLmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSwKJiM0MzsJCQkua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLAomIzQzOwkJfSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkmYW1wO2tzb2NrX2luaXRfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLAomIzQzOwkJCQkJICAgICAgICZhbXA7a3NvY2tfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sCiYjNDM7CQkJCQkgICAgICAgJmFtcDtrc29ja19rZnVuY19zZXQpOwomIzQzOwlyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsCiYjNDM7CQkJCQkJICBBUlJBWV9TSVpFKGJwZl9rc29ja19kdG9ycyksCiYjNDM7CQkJCQkJICBUSElTX01PRFVMRSk7CiYjNDM7fQomIzQzOwomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLjViMDJlNjIxN2M2ODAgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIxMDMsNiAmIzQzOzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkciwKIAlyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApOwogfQogCiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAomIzQzOwkJICAgaW50IGFkZHJsZW4sIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLAomIzQzOwkJCQkgICAgICBhZGRybGVuKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAomIzQzOwkJCQkJICAgICBhZGRybGVuLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoKICAqCUF0dGVtcHQgdG8gY29ubmVjdCB0byBhIHNvY2tldCB3aXRoIHRoZSBzZXJ2ZXIgYWRkcmVzcy4gIFRoZSBhZGRyZXNzCiAgKglpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuCkBAIC0yMTE5LDIzICYjNDM7MjEzMywxMyBAQCBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcywKIAkJICAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncykKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCWludCBlcnI7CiAKIAlzb2NrID0gc29ja19mcm9tX2ZpbGUoZmlsZSk7Ci0JaWYgKCFzb2NrKSB7Ci0JCWVyciA9IC1FTk9UU09DSzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0KLQkgICAgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIXNvY2spCiYjNDM7CQlyZXR1cm4gLUVOT1RTT0NLOwogCi0JZXJyID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcywKLQkJCQkJICAgIGFkZHJsZW4sIHNvY2stJmd0O2ZpbGUtJmd0O2ZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTsKLW91dDoKLQlyZXR1cm4gZXJyOwomIzQzOwlyZXR1cm4gY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbiwKJiM0MzsJCQkgICAgICBzb2NrLSZndDtmaWxlLSZndDtmX2ZsYWdzIHwgZmlsZV9mbGFncyk7CiB9CiAKIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRkNmIxNjc2MjNkOTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCkBAIC0wLDAgJiM0MzsxLDEzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXR3b3JrX2hlbHBlcnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja19sc20uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2xzbV92ZXJpZmllci5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfVEVTVCAmIzM0O2tzb2NrX2xzbV9ucyYjMzQ7CiYjNDM7I2RlZmluZSBSRUNWX1BPUlQgNzc3NwomIzQzOyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1CiYjNDM7CiYjNDM7c3RydWN0IGtzb2NrX3Rlc3RfZW52IHsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW47CiYjNDM7CWludCByZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBrc29ja190ZXN0X2Vudl9zZXR1cChzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0gewomIzQzOwkJLnNpbl9mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksCiYjNDM7CQkuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUMgfTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJbWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTsKJiM0MzsJZW52LSZndDtyZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhOU19URVNUKSwgJiMzNDttYWtlX25ldG5zJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllbnYtJmd0O25zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZW52LSZndDtuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7cmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoZW52LSZndDtyZmQsICYjMzQ7cmVjZWl2ZXIgc29ja2V0JiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSBiaW5kKGVudi0mZ3Q7cmZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCBzaXplb2YoYWRkcikpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YmluZCByZWNlaXZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJZXJyID0gc2V0c29ja29wdChlbnYtJmd0O3JmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sICZhbXA7dHYsIHNpemVvZih0dikpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0IHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja19sc20odm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIHRyaWdnZXJfYWRkciA9IHsKJiM0MzsJCS5zaW5fZmFtaWx5ID0gQUZfSU5FVCwKJiM0MzsJCS5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qga3NvY2tfbHNtICpza2VsOwomIzQzOwljaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKV0gPSB7fTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwlpbnQgdGZkID0gLTE7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSBrc29ja19sc21fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKCZhbXA7ZW52KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlbW90ZV9wb3J0ID0gUkVDVl9QT1JUOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5rc29ja19zZXR1cCksCiYjNDM7CQkJCSAgICAgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2tzb2NrX3NldHVwIHJ1biYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7a3NvY2tfc2V0dXAgcmV0dmFsJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfYmluZCBmcm9tIHVzZXJzcGFjZSAqLwomIzQzOwlza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfYmluZCA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsLSZndDtwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfYmluZCwKJiM0MzsJCQkgICAmIzM0O2F0dGFjaCBzb2NrZXRfYmluZCBsc20mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHRmZCwgJiMzNDt0cmlnZ2VyIHNvY2tldCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CWVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDt0cmlnZ2VyX2FkZHIsIHNpemVvZih0cmlnZ2VyX2FkZHIpKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gMDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3RyaWdnZXIgYmluZCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAzOiBWZXJpZnkgdGhlIExTTSBob29rIHNlbnQgdGhlIG5vdGlmaWNhdGlvbiAqLwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtzZW5kX3JldCwgc2l6ZW9mKHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSksCiYjNDM7CQkgICAgICAgJiMzNDtMU00gc2VuZCBieXRlcyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJbiA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoQVNTRVJUX0VRKG4sIHNpemVvZihyZWN2X2RhdGEpLCAmIzM0O3JlY3Zmcm9tIGxlbiYjMzQ7KSkKJiM0MzsJCUFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksCiYjNDM7CQkJICAgICAmIzM0O3BheWxvYWQgbWF0Y2gmIzM0Oyk7CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJaWYgKHRmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UodGZkKTsKJiM0MzsJaWYgKGVudi5yZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGVudi5yZmQpOwomIzQzOwlpZiAoZW52Lm5zdG9rZW4pCiYjNDM7CQljbG9zZV9uZXRucyhlbnYubnN0b2tlbik7CiYjNDM7CXJlbW92ZV9uZXRucyhOU19URVNUKTsKJiM0MzsJa3NvY2tfbHNtX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfbHNtX3ZlcmlmaWVyKHZvaWQpCiYjNDM7ewomIzQzOwlSVU5fVEVTVFMoa3NvY2tfbHNtX3ZlcmlmaWVyKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNmRjMjBiOGY5NWJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYwpAQCAtMCwwICYjNDM7MSw0NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja193cS5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9SRVRSSUVTIDEwMDAKJiM0MzsjZGVmaW5lIENBTExCQUNLX1dBSVRfVVMgMTAwMAomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7CiYjNDM7CXUzMiBjYWxsYmFja19kb25lOwomIzQzOwlpbnQgZXJyLCBpOwomIzQzOwomIzQzOwlza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7a3NvY2tfd3Egb3BlbiBhbmQgbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLAomIzQzOwkJCQkgICAgICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtydW4ga3NvY2tfd3Ffc3RhcnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7a3NvY2tfd3Ffc3RhcnQgcmV0dmFsJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoX19hdG9taWNfbG9hZF9uKCZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtjYWxsYmFja19kb25lLCBfX0FUT01JQ19BQ1FVSVJFKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcChDQUxMQkFDS19XQUlUX1VTKTsKJiM0MzsJfQomIzQzOwljYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKCZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtjYWxsYmFja19kb25lLAomIzQzOwkJCQkJX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGNhbGxiYWNrX2RvbmUsIDEsICYjMzQ7d29ya3F1ZXVlIGNhbGxiYWNrIGNvbXBsZXRlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCwKJiM0MzsJCSAgJiMzNDt3b3JrcXVldWUgY3JlYXRlIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJa3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjAxZWRhZWI5ZmRkNGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgKQEAgLTAsMCAmIzQzOzEsNzggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSAomIzQzOyNkZWZpbmUgX0tTT0NLX0NPTU1PTl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNPQ0tfREdSQU0JMgomIzQzOyNkZWZpbmUgSVBQUk9UT19VRFAJMTcKJiM0MzsKJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsCiYjNDM7CQkJCSAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltOwomIzQzO2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsCiYjNDM7CQkgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTsKJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltOwomIzQzO3ZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTsKJiM0MztpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gX19rc29ja19jdHhfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtfX2tzb2NrX2N0eF9tYXAsICZhbXA7a2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2tzb2NrICprc29ja19jdHhfZ2V0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzID0gTlVMTCwgKnRtcDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXRtcCA9IHYtJmd0O2N0eDsKJiM0MzsJaWYgKHRtcCkKJiM0MzsJCWtzID0gYnBmX2tzb2NrX2FjcXVpcmUodG1wKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2UoY3R4KTsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDt2LSZndDtjdHgsIGN0eCk7CiYjNDM7CWlmIChvbGQpIHsKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKG9sZCk7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MDg0NTEwOThlZmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMKQEAgLTAsMCAmIzQzOzEsNzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSAmIzM0O2hlbGxvIGZyb20gYnBmIGtzb2NrJiMzNDs7CiYjNDM7CiYjNDM7X19iZTMyIGlwdjRfcmVtb3RlOwomIzQzO19fdTE2IHJlbW90ZV9wb3J0OwomIzQzO2ludCB0YXJnZXRfcGlkOwomIzQzO2ludCBzZW5kX3JldCA9IC0xOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9OwomIzQzOwl1bmlvbiBicGZfa3NvY2tfYWRkciBhZGRyID0ge307CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJY3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJY3JlYXRlX29wdHMudHlwZSA9IFNPQ0tfREdSQU07CiYjNDM7CWNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2tzb2NrX2NyZWF0ZSgmYW1wO2NyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlhZGRyLnNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJYWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpOwomIzQzOwlhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsICZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uoa3MpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUVYSVNUKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS5zL3NvY2tldF9iaW5kJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsCiYjNDM7CSAgICAgaW50IGFkZHJsZW4sIGludCByZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprczsKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwomIzQzOwlpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJa3MgPSBrc29ja19jdHhfZ2V0KCk7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCXNlbmRfcmV0ID0gLUVOT0VOVDsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mZDJjY2ZkYjU4MDIwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbV92ZXJpZmllci5jCkBAIC0wLDAgJiM0MzsxLDM1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVsxMV0gPSAmIzM0O2R1bW15IGRhdGEmIzM0OzsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDticGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKJiM0MzsJICAgICBpbnQgc2l6ZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgTlVMTCk7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDYyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3dxIHdvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpOwomIzQzO30gd29ya19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IGNyZWF0ZV9lcnI7CiYjNDM7dTMyIGNhbGxiYWNrX2RvbmU7CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHsKJiM0MzsJCS5mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnR5cGUgPSBTT0NLX0RHUkFNLAomIzQzOwkJLnByb3RvY29sID0gSVBQUk9UT19VRFAsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJa3MgPSBicGZfa3NvY2tfY3JlYXRlKCZhbXA7b3B0cywgc2l6ZW9mKG9wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmIChrcykKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJY3JlYXRlX2VyciA9IGVycjsKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtjYWxsYmFja19kb25lLCAxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dvcmtfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJZXJyID0gYnBmX3dxX2luaXQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgJmFtcDt3b3JrX21hcCwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwllcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsdWUtJmd0O3dvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBicGZfd3Ffc3RhcnQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI5MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb246IGJwZl9rc29jayBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIG5ldyBgYnBmX2tzb2NrYCBmZWF0dXJlIHRoYXQgaW50cm9kdWNlcyBzZXZlcmFsIGtlcm5lbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBEb2VzIHRoaXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlzIGl0IGNvdmVyZWQgYnkgZXhpc3RpbmcgQlBGIGFuZCBuZXR3b3JrIGZ1enppbmc/CgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBrZnVuY3MgYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX3NlbmRgLCB3aGljaCBhbGwgdGFrZSBhcmd1bWVudHMgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiAgVGhlIGNvcmUgY29uY2VybiByZXZvbHZlcyBhcm91bmQgd2hldGhlciB1bmluaXRpYWxpemVkIGRhdGEsIHN1cHBsaWVkIGJ5IGEgQlBGIHByb2dyYW0sIGNvdWxkIGJlIHJlYWQgYnkga2VybmVsIGZ1bmN0aW9ucyBvciBzZW50IHRvIGEgbmV0d29yayBzb2NrZXQuCgpUaGUgdmVyaWZpZXIgaXMgc3VwcG9zZWQgdG8gcHJldmVudCB0aGlzLiBJdCBjaGVja3MgdGhhdCBtZW1vcnkgcGFzc2VkIHRvIGtmdW5jcyBpcyBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIGluaXRpYWwgdGhvdWdodCBpcywgZG9lcyB0aGUgdmVyaWZpZXIgX3JlYWxseV8gY2F0Y2ggYWxsIGNhc2VzLCBlc3BlY2lhbGx5IHdpdGggbmV3IGNvZGU/ICBXZSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBlYWNoIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBpdCByZWNlaXZlcy4KCmBicGZfa3NvY2tfc2VuZGAgaXMgdGhlIG1vc3Qgb2J2aW91cyBjYW5kaWRhdGUgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zOiBpdCB0YWtlcyBgY29uc3Qgdm9pZCAqZGF0YWAgYW5kIGB1MzIgZGF0YV9fc3pgLiAgSWYgYGRhdGFgIGlzIHVuaW5pdGlhbGl6ZWQsIHRoZSBrZXJuZWwgY291bGQgcG90ZW50aWFsbHkgbGVhayB0aGF0IGRhdGEuIEhvd2V2ZXIsIHRoZSB2ZXJpZmllciAqc2hvdWxkKiBiZSBjaGVja2luZyBgZGF0YWAgaXMgaW5pdGlhbGl6ZWQgdXAgdG8gYGRhdGFfX3N6YC4gS01TQU4gd2lsbCBkZXRlY3QgaWYgYGtlcm5lbF9zZW5kbXNnYCByZWNlaXZlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGEgYnVnIGluIHRoZSB2ZXJpZmllciBjb3VsZCBhbGxvdyB0aGlzLCBidXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIHZlcmlmaWVyLgoKYGJwZl9rc29ja19jcmVhdGVgIHRha2VzIGEgYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLiBUaGUgY29kZSBjb3BpZXMgdGhlIGZpZWxkcyBvbmUgYnkgb25lIHVzaW5nIGBSRUFEX09OQ0VgLiBObyBpc3N1ZSBoZXJlLCB0aGUgdmVyaWZpZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQuCgpgYnBmX2tzb2NrX2Nvbm5lY3RgIHRha2VzIGBzdHJ1Y3QgYnBmX2tzb2NrYCBhbmQgYHVuaW9uIGJwZl9rc29ja19hZGRyYC4gIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAgd29ycmllcyBtZSwgYmVjYXVzZSBpdCBoYXMgcGFkZGluZy4gYG1lbWNweWAgY29waWVzIHRoZSB3aG9sZSB1bmlvbiwgYnV0IGlmIG9ubHkgcGFydCBpcyBpbml0aWFsaXplZCwgS01TQU4gY291bGQgZmxhZyB0aGlzIGFzIGFuIGlzc3VlLiBIb3dldmVyLCB0aGUgdmVyaWZpZXIgcmVxdWlyZXMgdGhhdCB0aGUgZW50aXJlIGBhZGRyX19zemAgYnl0ZXMgKDI4IGJ5dGVzIGluIHRoaXMgY2FzZSkgcGFzc2VkIHRvIGBicGZfa3NvY2tfY29ubmVjdGAgYXJlIGluaXRpYWxpemVkLCBzbyBgbWVtY3B5YCBzaG91bGQgYmUgZmluZS4gIElmIHRoZSBCUEYgcHJvZ3JhbSBwcm92aWRlcyBhbiB1bmluaXRpYWxpemVkIHVuaW9uLCB0aGUgdmVyaWZpZXIgKnNob3VsZCogcmVqZWN0IGl0LiBJZiBub3QsIEtNU0FOIHdpbGwgdHJpZ2dlciBhbmQgaXQmIzM5O3MgYSBidWcgdGhhdCBuZWVkcyBmaXhpbmcuCgpUaGUgdmVyaWZpZXIgcGxheXMgdGhlIGtleSByb2xlOiBpdOKAmXMgcmVzcG9uc2libGUgZm9yIHRyYWNraW5nIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBzdGFjayBhbmQgbWFwIG1lbW9yeSB1c2VkIGJ5IEJQRiBwcm9ncmFtcy4gQlBGIHByb2dyYW1zIGFyZSBub3QgS01TQU4gaW5zdHJ1bWVudGVkLCBiZWNhdXNlIHRoZXkgYXJlIEpJVHRlZC4gVGhlIHZlcmlmaWVyIHRyYWNrcyBpbml0aWFsaXphdGlvbiwgYW5kIHRoZW4gdGhlIEJQRiBKSVQsIG9yIHRoZSB2ZXJpZmllciBpdHNlbGYsIGluamVjdHMgdW5wb2lzb25pbmcgY2FsbHMsIGZvciBleGFtcGxlIGZvciBzdGFjayBvciBtYXAgbWVtb3J5LgoKSW4gdGVybXMgb2YgYGNvbm5lY3Rfc29ja2V0YCwgdGhhdCYjMzk7cyBqdXN0IHJlZmFjdG9yaW5nLiBUaGVyZSBpcyBhIHBvdGVudGlhbCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gYHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhYCBpbiBgY29ubmVjdF9zb2NrZXRgIGlmIGFuIHVuaW5pdGlhbGl6ZWQgYWRkcmVzcyBpcyBwYXNzZWQsIGJ1dCB0aGUgY29kZSBpbiBgYnBmX2tzb2NrX2Nvbm5lY3RgIGNvcGllcyBldmVyeXRoaW5nIHRvIHRoZSBzb2NrZXQgc3RydWN0dXJlIGFuZCBhbGwgdGhlIGZpZWxkcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQsIGJlY2F1c2UgdGhlIHZlcmlmaWVyIGVuc3VyZXMgbWVtb3J5IGlzIGluaXRpYWxpemVkLgoKUmVnYXJkaW5nIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2U6IHRoZXJlIGFyZSBub25lIGhlcmUgc2luY2Ugbm90aGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgZXhjZXB0IHdoYXQgdGhlIG5ldHdvcmsgc2VuZHMuCgpOb3csIHRoZSBjZW50cmFsIHF1ZXN0aW9uczogRG9lcyB0aGlzICppbnRyb2R1Y2UqIGEgbmV3IHdheSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZD8gTXkgY29uY2x1c2lvbiBpcyBubywgYmFzZWQgb24gd2hhdCB0aGUgdmVyaWZpZXIgZG9lcy4gVGhlcmUgaXMgbm90aGluZyBuZXcgaGVyZS4KCiogICBBcmUgdGhlcmUgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZD8gSSBzZWUgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggbG9va3Mgc3VzcGljaW91cywgYnV0IGl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIG1hY3JvLiBXYWl0LCBsZXQgbWUgY2hlY2sgdGhlIGNvZGUuIE9rYXksIGl0JiMzOTtzIGp1c3QgYGt6YWxsb2Moc2l6ZW9mKCprcyksIEdGUF9LRVJORUwpYC4KCioqVmVyZGljdDoqKiBUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgbmV3IGtmdW5jcywgYnV0IHRoZSAqcmlzayogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgaXMgbm90IG5ldy4gVGhlIGV4aXN0aW5nIEJQRiB2ZXJpZmllciwgYW5kIHRoZSB1bnBvaXNvbmluZyBvZiBtZW1vcnkgd2hlbiB0aGUga2VybmVsIGFjY2Vzc2VzIEJQRiBzdGFjayBvciBtYXAgbWVtb3J5LCBhcmUgc3VwcG9zZWQgdG8gaGFuZGxlIHRoZXNlLiBUaGVyZWZvcmUsIEkgZG9uJiMzOTt0IHNlZSBhICpzdHJvbmcqIGNhc2UgZm9yIGEgKmRlZGljYXRlZCogS01TQU4gZnV6emluZyBzZXNzaW9uLCBhbHRob3VnaCBpdCB3b3VsZG4mIzM5O3QgaHVydCB0byBpbmNsdWRlIHRoZXNlIG5ldyBmdW5jdGlvbnMgaW4gZXhpc3RpbmcgZnV6emluZyBjYW1wYWlnbnMuIEhvd2V2ZXIsIGlmIHRoZSB2ZXJpZmllciBoYXMgYSBidWcsIEtNU0FOICp3aWxsKiBjYXRjaCBpdCwgYmVjYXVzZSBpdCBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHBhc3NlZCB0byB0aGUgc2VuZCBzb2NrZXQsIHZpYSBga2VybmVsX3NlbmRtc2dgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkxNTAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcdFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcdFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcdFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVx0bnN5bXMgPSBzeW10YWItXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXHRpZiAoIWNoYWlucykge1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcdFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVx0XHRpZiAoIXApXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXHRpZiAoY3R4LVx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XHRcdGN0eC1cdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlaml0X2RhdGEpO1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXHRcdGlmICghY3R4LVx1MDAzZWppdF9kYXRhKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1Olx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cdGlmICghbGNoaXApXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4Olx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXHRpZiAoIWRldnB0cilcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcdFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXHRpZiAoIXJlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cdGlmICghcG11X21tZGMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcdFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcdFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVx0XHRwLVx1MDAzZW5hbWUgPSBrc3RyZHVwKFwmIzM0O2FybSxpby1jb2hlcmVudFwmIzM0OywgR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3Olx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4Olx0XHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVx0XHRpZiAoIXBkYXRhKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cdGlmICghaHdtb2RzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1Olx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXHRpZiAoIXN5c2MpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9oLVx1MDAzZXNsYXZlX3BvcnRzKSkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcdFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cdFx0aWYgKCFvaSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVx0aWYgKCFvaCkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcdFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cdFx0aWYgKCFvaClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcdFx0b2gtXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXHUwMDNlY2xhc3MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cdFx0aWYgKCFvaC1cdTAwM2VjbGFzcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cdGlmICghaWRsZV9zdGF0ZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cdGlmICghbnZhbHVlX3RhYmxlKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1Olx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVx0aWYgKCFlYykge1xuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XHRjZmctXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVx1MDAzZWluaXRfZGF0YSk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVx0aWYgKCFjZmctXHUwMDNlaW5pdF9kYXRhKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcdFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVx0XHRpZiAoIXF1aXJrKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3Rlcilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXHRpZiAoIW9wcHMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVx0aW50IHJldDtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXHRpZiAoIWluZm8pXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4Olx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXHRpZiAoIXNwYylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXHRpZiAoIW5ld3Byb3ApXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXHRpZiAoIWwyeDBfcG11KSB7XG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cdGlmICghZGF0YSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XHRidWYgPSBremFsbG9jX29iaigqYnVmLFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXHRcdFx0ICBnZnAgXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3Olx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXHRpZiAoIW1hcHBpbmcpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0Olx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXHRpZiAoIXJlZ3MpIHtcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcdFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXHRcdGlmICghdG1wX3Jlcykge1xuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXHRpZiAoIXAybV9lbnRyeSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0Olx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXHRpZiAoIXRoaXMpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cdGlmICghcGd0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXHRpZiAoIW1jLVx1MDAzZW1hcHBpbmcpIHtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XHRcdG1jLVx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0Olx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cdGlmICghaHlwX3BndGFibGUpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cdGlmICghdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSB7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0Olx0XHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYixcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlx0a3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXHRpZiAoIXN0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXHRkaXN0LVx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XHRkaXN0LVx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXHRpZiAoIWRpc3QtXHUwMDNlc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXHRcdFx0XHRcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cdGlmICghZW50cmllcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cdGlmICghaXJxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3Olx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cdGlmICghY29sbGVjdGlvbilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXHRpZiAoIWl0ZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4Olx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVx0aWYgKCFkZXZpY2UpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVx0aWYgKCFpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cdGlmICghcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcdGRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMTE0PXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEzNS1cdGlmICghaml0X2RhdGEpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMzY6XHRcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMzctXHRcdGlmICghaml0X2RhdGEpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXHR2ZHNvX3BhZ2VsaXN0ID1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVx0aWYgKCFyYW5nZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXHRpZiAoIXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cdGlmICghcylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM1NAoJCQkJCQkJb3V0cHV0OiAzNDUKCQkJCQkJCXRob3VnaHRzOiA0NzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBCUEYgS3NvY2sgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gTWVtb3J5IEluaXRpYWxpemF0aW9uIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gY2FyZWZ1bGx5IGRpc3NlY3RpbmcgdGhpcyBCUEYga3NvY2sgcGF0Y2gsIHRyeWluZyB0byB1bmRlcnN0YW5kIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgS01TQU4gbWlnaHQgZXhwb3NlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcga2Z1bmMgQVBJIGZvciBCUEYgcHJvZ3JhbXMgdG8gbWFuYWdlIHNvY2tldHM6IGNyZWF0aW5nLCBjb25uZWN0aW5nLCBhbmQgc2VuZGluZyBkYXRhLiBNeSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgZXZlcnkgYWxsb2NhdGlvbiBhbmQgbWVtb3J5IHRyYW5zZmVyIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeS4mIzM0OwoKSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCBga3phbGxvY19vYmpgLCB3aGljaCBzZWVtcyBsaWtlIGEgbWFjcm8gZm9yIGBremFsbG9jYC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlcywgbGlrZSBga3NgICh0aGUgYGJwZl9rc29ja2Agc3RydWN0KSwgYXJlIHplcm8taW5pdGlhbGl6ZWQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGluY2x1ZGVzIHRoZSBzb2NrZXQgaXRzZWxmIChga3MtJmd0O3NvY2tgKSwgdXNhZ2UgY291bnRlciwgYW5kIHJlbGVhc2Ugd29yaywgbWVhbmluZyBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiBpbml0aWFsaXphdGlvbiBhcmUgbW9zdGx5IGVsaW1pbmF0ZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gYGJwZl9rc29ja19jcmVhdGVfb3B0c2AgYW5kIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAgc3RydWN0dXJlcywgbWFraW5nIHN1cmUgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHBhcnRzLgoKV2l0aCBgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0c2AsIGEgcXVpY2sgc2l6ZSBjaGVjayBhbmQgZGlyZWN0IGluaXRpYWxpemF0aW9uIG1ha2UgaXQgc3RyYWlnaHRmb3J3YXJkIGFuZCBzYWZlLiBUaGVuIEkgd2VudCBkZWVwZXIgaW50byB0aGUgYGJwZl9rc29ja19hZGRyYCB1bmlvbi4gVGhlIHBvdGVudGlhbCBpcyB0aGF0IHRoZSB1c2VyIG9ubHkgaW5pdGlhbGl6ZXMgcGFydCBvZiB0aGUgdW5pb24gKGUuZy4sIHRoZSBgc29ja2FkZHJfaW5gIHBvcnRpb24pLCBsZWF2aW5nIHRoZSBvdGhlciBwYXJ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYW4gaW1tZWRpYXRlIHJlZCBmbGFnIGZvciBLTVNBTi4gVGhlIGNvZGUgdXNlcyBgbWVtY3B5YCB0byBjb3B5IHRoZSBwcm92aWRlZCBhZGRyZXNzIGludG8gYSBrZXJuZWwgc3RydWN0LiBOb3csIHRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgdGhhdCBhbGwgMjggYnl0ZXMgb2YgYHVuaW9uIGJwZl9rc29ja19hZGRyYCBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGtmdW5jIGNhbGxzLiBTbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBzaG91bGQgYmUgYSBwcm9ibGVtIHRoZXJlLgoKQnV0IHdhaXQuIFdoYXQgaWYgbWVtb3J5IGNvbWVzIGZyb20gYSBCUEYgbWFwIG9yIHJpbmcgYnVmZmVyPyBUaGUgdmVyaWZpZXIgZG9lc24mIzM5O3QgKmR5bmFtaWNhbGx5KiB0cmFjayB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmluZyBidWZmZXIgbWVtb3J5LiBUaGVuLCBJIG5lZWRlZCB0byBjaGVjayB3aGF0IGhhcHBlbnMgaWYgdW5pbml0aWFsaXplZCByaW5nIGJ1ZmZlciBtZW1vcnkgaXMgcGFzc2VkIHRvIGBicGZfa3NvY2tfY29ubmVjdGAuIGBtZW1jcHlgIGNvcGllcyB1bmluaXRpYWxpemVkIGRhdGEsIHdoaWNoIGlzIG5vdyBhbiBpbnRlcmVzdGluZyBzY2VuYXJpbyB0aGF0IHNob3VsZCBjYXVzZSBhIEtNU0FOIHJlcG9ydCwgYnV0IGBjb25uZWN0X3NvY2tldGAgaXMgb25seSBnb2luZyB0byByZWFkIHRoZSBpbml0aWFsaXplZCBwYXJ0LCB3aGljaCBpcyB3aHkgS01TQU4gd29uJiMzOTt0IGNvbXBsYWluLiBUaGUgbW9zdCBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB0aGUgQlBGIHByb2dyYW0gbmVlZHMgdG8gaGF2ZSBwcm9wZXJseSBpbml0aWFsaXplZCBtZW1vcnkuIElmIGBzYS5zc19mYW1pbHlgIGlzIHVuaW5pdGlhbGl6ZWQsIHRoZW4gd2UgZ2V0IGFuIGVycm9yLCBidXQgdGhpcyBpcyBhIHVzZXIgZXJyb3IuCgpUaGlua2luZyBjYXJlZnVsbHksIGFuZCBjb25maXJtaW5nLCBLTVNBTiAqc2hvdWxkKiBiZSByZXBvcnRpbmcgYSBidWcgd2hlbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB1c2VkLiBLTVNBTiBpbnN0cnVtZW50cyBgbWVtY3B5YCBhbmQgd2lsbCByZXBvcnQgYSBidWcgd2hlbiB0aGUgc291cmNlIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCAqdW5sZXNzKiB0aGUgbWVtb3J5IGlzIHVucG9pc29uZWQuIFNpbmNlIEJQRiBtYXBzIGFuZCByaW5nIGJ1ZmZlcnMgYXJlIHVucG9pc29uZWQgYnkgS01TQU4sIHRoaXMgYmVjb21lcyBzYWZlLCBiZWNhdXNlIEtNU0FOIGRvZXMgbm90IHRyYWNrIEJQRiBleGVjdXRpb24gKGUuZy4sIHdyaXRlcyB0byB0aGUgc3RhY2spLiBLTVNBTiBvbmx5IGNoZWNrcyBtZW1vcnkgdXNhZ2Ugd2hlbiBpdCYjMzk7cyBhY2Nlc3NlZCwgc3VjaCBhcyB0aHJvdWdoIGBtZW1jcHlgLiBJZiBhIEJQRiBwcm9ncmFtIGRvZXNuJiMzOTt0IGluaXRpYWxpemUgaXQsIEtNU0FOIHdpbGwgbm90IHNlZSBpdCwgYmVjYXVzZSBLTVNBTiBoYXMgdGhlIG1lbW9yeSBtYXJrZWQgYXMgaW5pdGlhbGl6ZWQgYnkgZGVzaWduLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGJwZl9rc29ja19zZW5kYCwgd2hpY2ggY2FsbHMgYGtlcm5lbF9zZW5kbXNnYC4gYHN0cnVjdCBtc2doZHJgIGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGFuZCB0aGUgYHN0cnVjdCBrdmVjYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKSSB0aGVuIGNoZWNrIGBjb25uZWN0X3NvY2tldGAsIHdoaWNoIGlzIGEgcmVmYWN0b3JpbmcuIFRoZSBleGlzdGluZyBsb2dpYyBjb3BpZXMgZGF0YSBmcm9tIHVzZXJzcGFjZSB3aXRoIGBtb3ZlX2FkZHJfdG9fa2VybmVsYC4gU28gaXQmIzM5O3Mgc2FmZS4gVGhlcmUmIzM5O3Mgbm8gbmV3IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCkZpbmFsbHksIEkgZGlkIGFub3RoZXIgY2hlY2sgb2YgYGJwZl9rc29ja19jcmVhdGVfb3B0c2AgYW5kIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAgc3RydWN0dXJlcyBhZ2FpbiwgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgc2FmZS4gSSYjMzk7dmUgcmVjb25maXJtZWQgbXkgcmVhc29uaW5nLiBJdCYjMzk7cyBzYWZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBCUEYgbWVtb3J5IGlzIGhhbmRsZWQgYnkgdGhlIHZlcmlmaWVyIGFuZCB1bnBvaXNvbmVkIGJ5IEtNU0FOLiBObyBuZXcgZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4KCktBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgQlBGIGtmdW5jIEFQSSBmb3Igc29ja2V0cy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGNvbXBsZXgga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBwYXJzaW5nIG9mIHVzZXJzcGFjZSBkYXRhIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHVzZWQuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBuZXcgbmV0d29yayBwcm90b2NvbHMuIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0JiMzOTtzIGFsbCBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgKGBicGZfa3NvY2tgKSB0byBjcmVhdGUsIGNvbm5lY3QsIGFuZCBzZW5kIGRhdGEgdGhyb3VnaCBrZXJuZWwgc29ja2V0cyBmcm9tIEJQRiBwcm9ncmFtcy4gXG5cbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGJwZl9rc29ja2AsIGBzdHJ1Y3QgbXNnaGRyYCwgYHN0cnVjdCBrdmVjYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIG9yIGRlY2xhcmF0aW9uIChlLmcuLCB1c2luZyBga3phbGxvY19vYmpgIG9yIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzKS5cbjIuIFRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIGZyb20gQlBGIHByb2dyYW1zIChgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0c2AsIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAsIGFuZCB0aGUgc2VuZCBidWZmZXIpIGFyZSB2YWxpZGF0ZWQgZm9yIHNpemUgYnkgdGhlIGtmdW5jIHdyYXBwZXJzLiBUaGUgQlBGIHZlcmlmaWVyIGVuZm9yY2VzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBmb3IgdGhlc2UgYXJndW1lbnRzIGJlZm9yZSB0aGV5IGFyZSBwYXNzZWQgdG8gdGhlIGtmdW5jcy4gRnVydGhlcm1vcmUsIEtNU0FOIHVucG9pc29ucyBCUEYgc3RhY2sgYW5kIG1hcCBtZW1vcnkgYnkgZGVzaWduIHNpbmNlIGl0IGNhbm5vdCB0cmFjayBKSVR0ZWQgQlBGIGV4ZWN1dGlvbiwgbWVhbmluZyBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yaWdpbmF0aW5nIGZyb20gdGhlIEJQRiBwcm9ncmFtIGl0c2VsZi5cbjMuIFRoZSByZWZhY3RvcmluZyBvZiBgY29ubmVjdF9zb2NrZXRgIG1lcmVseSBleHRyYWN0cyBleGlzdGluZyBsb2dpYyB3aXRob3V0IGNoYW5naW5nIGhvdyBzb2NrZXQgYWRkcmVzc2VzIGFyZSBoYW5kbGVkIG9yIGNvcGllZC5cbjQuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZSBkYXRhIHNlbnQgb3ZlciB0aGUgc29ja2V0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgQlBGIHByb2dyYW0uXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCB3aGljaCBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gZXhwb3NlZCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSAoYGJwZl9rc29ja2ApIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzIGZyb20gQlBGIHByb2dyYW1zLiBcblxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgYnBmX2tzb2NrYCwgYHN0cnVjdCBtc2doZHJgLCBgc3RydWN0IGt2ZWNgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gb3IgZGVjbGFyYXRpb24gKGUuZy4sIHVzaW5nIGBremFsbG9jX29iamAgb3IgZGVzaWduYXRlZCBpbml0aWFsaXplcnMpLlxuMi4gVGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgZnJvbSBCUEYgcHJvZ3JhbXMgKGBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCwgYHVuaW9uIGJwZl9rc29ja19hZGRyYCwgYW5kIHRoZSBzZW5kIGJ1ZmZlcikgYXJlIHZhbGlkYXRlZCBmb3Igc2l6ZSBieSB0aGUga2Z1bmMgd3JhcHBlcnMuIFRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciB0aGVzZSBhcmd1bWVudHMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCB0byB0aGUga2Z1bmNzLiBGdXJ0aGVybW9yZSwgS01TQU4gdW5wb2lzb25zIEJQRiBzdGFjayBhbmQgbWFwIG1lbW9yeSBieSBkZXNpZ24gc2luY2UgaXQgY2Fubm90IHRyYWNrIEpJVHRlZCBCUEYgZXhlY3V0aW9uLCBtZWFuaW5nIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgb3JpZ2luYXRpbmcgZnJvbSB0aGUgQlBGIHByb2dyYW0gaXRzZWxmLlxuMy4gVGhlIHJlZmFjdG9yaW5nIG9mIGBjb25uZWN0X3NvY2tldGAgbWVyZWx5IGV4dHJhY3RzIGV4aXN0aW5nIGxvZ2ljIHdpdGhvdXQgY2hhbmdpbmcgaG93IHNvY2tldCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgb3IgY29waWVkLlxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlIGRhdGEgc2VudCBvdmVyIHRoZSBzb2NrZXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBCUEYgcHJvZ3JhbS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIHdoaWNoIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBleHBvc2VkIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzoyMy42OTY1NzA3MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyMzU5NjY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2tzb2NrX2NyZWF0ZVwiLFxuICAgIFwiYnBmX2tzb2NrX2Nvbm5lY3RcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImNvbm5lY3Rfc29ja2V0XCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZV9kdG9yXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgKGBicGZfa3NvY2tgKSB0byBjcmVhdGUsIGNvbm5lY3QsIGFuZCBzZW5kIGRhdGEgdGhyb3VnaCBrZXJuZWwgc29ja2V0cyBmcm9tIEJQRiBwcm9ncmFtcy4gXFxuXFxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgYnBmX2tzb2NrYCwgYHN0cnVjdCBtc2doZHJgLCBgc3RydWN0IGt2ZWNgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gb3IgZGVjbGFyYXRpb24gKGUuZy4sIHVzaW5nIGBremFsbG9jX29iamAgb3IgZGVzaWduYXRlZCBpbml0aWFsaXplcnMpLlxcbjIuIFRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIGZyb20gQlBGIHByb2dyYW1zIChgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0c2AsIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAsIGFuZCB0aGUgc2VuZCBidWZmZXIpIGFyZSB2YWxpZGF0ZWQgZm9yIHNpemUgYnkgdGhlIGtmdW5jIHdyYXBwZXJzLiBUaGUgQlBGIHZlcmlmaWVyIGVuZm9yY2VzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBmb3IgdGhlc2UgYXJndW1lbnRzIGJlZm9yZSB0aGV5IGFyZSBwYXNzZWQgdG8gdGhlIGtmdW5jcy4gRnVydGhlcm1vcmUsIEtNU0FOIHVucG9pc29ucyBCUEYgc3RhY2sgYW5kIG1hcCBtZW1vcnkgYnkgZGVzaWduIHNpbmNlIGl0IGNhbm5vdCB0cmFjayBKSVR0ZWQgQlBGIGV4ZWN1dGlvbiwgbWVhbmluZyBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yaWdpbmF0aW5nIGZyb20gdGhlIEJQRiBwcm9ncmFtIGl0c2VsZi5cXG4zLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYGNvbm5lY3Rfc29ja2V0YCBtZXJlbHkgZXh0cmFjdHMgZXhpc3RpbmcgbG9naWMgd2l0aG91dCBjaGFuZ2luZyBob3cgc29ja2V0IGFkZHJlc3NlcyBhcmUgaGFuZGxlZCBvciBjb3BpZWQuXFxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlIGRhdGEgc2VudCBvdmVyIHRoZSBzb2NrZXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBCUEYgcHJvZ3JhbS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3Vlcywgd2hpY2ggYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGV4cG9zZWQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzZXQgb2YgQlBGIGtmdW5jcyAoYnBmX2tzb2NrX2NyZWF0ZSwgYnBmX2tzb2NrX2Nvbm5lY3QsIGJwZl9rc29ja19zZW5kLCBldGMuKSB0aGF0IGFsbG93IEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgQlBGIHN1YnN5c3RlbSBhbmQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUga2Z1bmNzIGFyZSBhY2Nlc3NpYmxlIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAobGlrZSBTWVNDQUxMIGFuZCBMU00gaG9va3MpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzoyMy42OTY1NzcxNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTA0NDAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MTc6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaCBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNiMzg3ZmI3NWU0M2JcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxcbkBAIC0wLDAgKzEsMzYgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaWZuZGVmIF9CUEZfS1NPQ0tfSFxcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW42LmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAtIEJQRiBrZXJuZWwgc29ja2V0IGNyZWF0aW9uIHBhcmFtZXRlcnNcXG4rICogQGZhbWlseTpcXHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cXG4rICogQHR5cGU6XFx0U29ja2V0IHR5cGU6IG9ubHkgU09DS19ER1JBTSBzdXBwb3J0ZWQgZm9yIG5vdy5cXG4rICogQHByb3RvY29sOlxcdFByb3RvY29sIG51bWJlciAoZS5nLiBJUFBST1RPX1VEUCksIG9yIDAgZm9yIHRoZSBkZWZhdWx0IHByb3RvY29sXFxuKyAqXFx0XFx0b2YgdGhlIGdpdmVuIHR5cGUuXFxuKyAqIEByZXNlcnZlZDpcXHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxcbisgKi9cXG4rc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XFxuK1xcdF9fdTggZmFtaWx5O1xcbitcXHRfX3U4IHR5cGU7XFxuK1xcdF9fdTggcHJvdG9jb2w7XFxuK1xcdF9fdTggcmVzZXJ2ZWQ7XFxuK307XFxuK1xcbisvKipcXG4rICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3NcXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cXG4rICogQHNpbjY6IElQdjYgc29ja2V0IGFkZHJlc3MuXFxuKyAqL1xcbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjtcXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfQlBGX0tTT0NLX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcXG5pbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xcbiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7XFxuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdFxcdCAgICAgaW50IGFkZHJsZW4pO1xcbitpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXFxuK1xcdFxcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpO1xcbiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXFxuIFxcdFxcdFxcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XFxuIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkcixcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNDM2OSw2ICs0MzY5LDkgQEAgQlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXFxuICNpZmRlZiBDT05GSUdfQ1JZUFRPXFxuIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19JTkVUXFxuK0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG4rI2VuZGlmXFxuIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXFxuIFxcbiBzdGF0aWMgYm9vbCByY3VfcHJvdGVjdGVkX29iamVjdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcXG5pbmRleCBiM2ZkY2I0ZTM1NWZhLi5jMjBlNTIwMzU4YjhlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXFxuKysrIGIvbmV0L2NvcmUvTWFrZWZpbGVcXG5AQCAtNDQsNiArNDQsOSBAQCBvYmotJChDT05GSUdfRkFJTE9WRVIpICs9IGZhaWxvdmVyLm9cXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxuK2lmZGVmIENPTkZJR19JTkVUXFxuK29iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2tzb2NrLm9cXG4rZW5kaWZcXG4gb2JqLSQoQ09ORklHX09GKVxcdCs9IG9mX25ldC5vXFxuIG9iai0kKENPTkZJR19ORVRfVEVTVCkgKz0gbmV0X3Rlc3Qub1xcbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTk5NDNhZWVhZGQzMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9uZXQvY29yZS9icGZfa3NvY2suY1xcbkBAIC0wLDAgKzEsMzI4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX2tzb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcXG4rICogQHNvY2s6XFx0VGhlIHVuZGVybHlpbmcga2VybmVsIHNvY2tldC5cXG4rICogQHVzYWdlOlxcdFJlZmVyZW5jZSBjb3VudGVyLlxcbisgKiBAcndvcms6XFx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxcbisgKi9cXG4rc3RydWN0IGJwZl9rc29jayB7XFxuK1xcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuK1xcdHJlZmNvdW50X3QgdXNhZ2U7XFxuK1xcdHN0cnVjdCByY3Vfd29yayByd29yaztcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcbitcXHRrcyA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xcbitcXHRzb2NrX3JlbGVhc2Uoa3MtXFx1MDAzZXNvY2spO1xcbitcXHRrZnJlZShrcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXFxuK1xcdCAqIGNsZWFyZWQgY3VycmVudC1cXHUwMDNlbnNwcm94eSwgd2hpbGUgY3VycmVudCBpcyBzdGlsbCBub3QgYSBrdGhyZWFkLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuICEoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LVEhSRUFEKSBcXHUwMDI2XFx1MDAyNiBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5O1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuK1xcbisvKipcXG4rICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXFxuKyAqXFxuKyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuXFxuKyAqXFxuKyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXFxuKyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cXG4rICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcXG4rICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJ3MgbmFtZXNwYWNlIG9yIHNlY3VyaXR5IGNvbnRleHQuXFxuKyAqXFxuKyAqIEBvcHRzOlxcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxcbisgKiBAb3B0c19fc3o6XFx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXFxuKyAqIEBlcnJfX3VuaW5pdDpcXHRJbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqXFxuK2JwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LFxcbitcXHRcXHQgaW50ICplcnJfX3VuaW5pdClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cFxcbitcXHQgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvXFxuK1xcdCAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHtcXG4rXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG9wdHNfY29weSA9IChzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKXtcXG4rXFx0XFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VmYW1pbHkpLFxcbitcXHRcXHQudHlwZSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2V0eXBlKSxcXG4rXFx0XFx0LnByb3RvY29sID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXByb3RvY29sKSxcXG4rXFx0XFx0LnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXJlc2VydmVkKSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChvcHRzX2NvcHkucmVzZXJ2ZWQpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2IG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcXG4rXFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3B0c19jb3B5LnR5cGUgIT0gU09DS19ER1JBTSkge1xcbitcXHRcXHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcHRzX2NvcHkucHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgXFx1MDAyNlxcdTAwMjYgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHtcXG4rXFx0XFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRrcyA9IGt6YWxsb2Nfb2JqKCprcyk7XFxuK1xcdGlmICgha3MpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBVc2UgdGhlIG5vcm1hbCBjdXJyZW50LXRhc2sgc29ja2V0IHBhdGggc28gTFNNL2Nncm91cCBwb2xpY3ksXFxuK1xcdCAqIHNvY2tldCBsYWJlbHMsIGFuZCB0aGUgYWN0aXZlIG5ldG5zIHJlZmVyZW5jZSBtYXRjaCBhIHNvY2tldCgyKVxcbitcXHQgKiBjcmVhdGVkIGJ5IHRoZSBCUEYgcHJvZ3JhbSdzIGNhbGxlci5cXG4rXFx0ICovXFxuK1xcdGVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmtzLVxcdTAwM2Vzb2NrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFxuK1xcdGtzLVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xcbitcXHRrcy1cXHUwMDNlc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLO1xcbitcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZrcy1cXHUwMDNldXNhZ2UsIDEpO1xcbitcXHRwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTtcXG4rXFx0cmV0dXJuIGtzO1xcbitcXG4rZXJyX2ZyZWU6XFxuK1xcdGtmcmVlKGtzKTtcXG4rZXJyX291dDpcXG4rXFx0cHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXFxuKyAqIEBrczpcXHRcXHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC5cXG4rICogQGFkZHI6XFx0UG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuXFxuKyAqIEBhZGRyX19zejpcXHRTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLlxcbisgKlxcbisgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIHdoaWxlIGNvbm5lY3RpbmcgdGhlIHNvY2tldCwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBhZGRyX19zeilcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYTtcXG4rXFx0aW50IGFkZHJsZW47XFxuK1xcbitcXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqL1xcbitcXHRtZW1jcHkoXFx1MDAyNnNhLCBhZGRyLCBzaXplb2YoKmFkZHIpKTtcXG4rXFxuK1xcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XFxuK1xcdGNhc2UgQUZfSU5FVDpcXG4rXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBRl9JTkVUNjpcXG4rXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoa3MtXFx1MDAzZXNvY2ssIFxcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gYWNxdWlyZS4gTXVzdCBiZSBhXFxuKyAqXFx0dHJ1c3RlZCBwb2ludGVyIChlLmcuIFJDVS1wcm90ZWN0ZWQga3B0ciBmcm9tIGEgbWFwKS5cXG4rICpcXG4rICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXFxuK3tcXG4rXFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmtzLVxcdTAwM2V1c2FnZSkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4ga3M7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cXG4rICpcXG4rICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXFxuKyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcXG4re1xcbitcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZrcy1cXHUwMDNldXNhZ2UpKSB7XFxuK1xcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNmtzLVxcdTAwM2Vyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTtcXG4rXFx0XFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNmtzLVxcdTAwM2Vyd29yayk7XFxuK1xcdH1cXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxcbit7XFxuK1xcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rfVxcbitDRklfTk9TRUFMKGJwZl9rc29ja19yZWxlYXNlX2R0b3IpO1xcbitcXG4rLyoqXFxuKyAqIGJwZl9rc29ja19zZW5kKCkgLSBTZW5kIGRhdGEgdGhyb3VnaCBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxcbisgKiBAZGF0YTpcXHRQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuXFxuKyAqIEBkYXRhX19zejpcXHRTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQuXFxuKyAqXFxuKyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwXFxuKyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXFxuKyAqXFxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXFxuK1xcdFxcdFxcdCAgICAgICB1MzIgZGF0YV9fc3opXFxuK3tcXG4rXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuK1xcdFxcdC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBrdmVjIGlvdiA9IHtcXG4rXFx0XFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxcbitcXHRcXHQuaW92X2xlbiA9IGRhdGFfX3N6LFxcbitcXHR9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2bXNnLCBcXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbitcXG4rQlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQuc2V0ID0gXFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcXG4rfTtcXG4rXFxuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxuK1xcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cXG4rQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpXFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbit7XFxuK1xcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXFxuK1xcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQgIT0gYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZFswXSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuKyNlbmRpZlxcbitcXG4rXFx0cmV0dXJuIC1FQUNDRVM7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQuc2V0ID0gXFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsXFxuK1xcdC5maWx0ZXIgPSBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyLFxcbit9O1xcbitcXG4rQlRGX0lEX0xJU1QoYnBmX2tzb2NrX2R0b3JfaWRzKVxcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXFxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgYnBmX2tzb2NrX2tmdW5jX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7XFxuK1xcdFxcdHtcXG4rXFx0XFx0XFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcXG4rXFx0XFx0XFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xcbitcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4rXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4rXFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX2tzb2NrX2R0b3JzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuK31cXG4rXFxuK2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpO1xcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcXG5pbmRleCA2M2M2OWEwZmE3NGUxLi41YjAyZTYyMTdjNjgwIDEwMDY0NFxcbi0tLSBhL25ldC9zb2NrZXQuY1xcbisrKyBiL25ldC9zb2NrZXQuY1xcbkBAIC0yMTAzLDYgKzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcXG4gXFx0cmV0dXJuIF9fc3lzX2FjY2VwdDQoZmQsIHVwZWVyX3NvY2thZGRyLCB1cGVlcl9hZGRybGVuLCAwKTtcXG4gfVxcbiBcXG4raW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxcbitcXHRcXHQgICBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgYWRkcmxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyktXFx1MDAzZWNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBhZGRybGVuLCBmbGFncyk7XFxuK31cXG4rXFxuIC8qXFxuICAqXFx0QXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgc29ja2V0IHdpdGggdGhlIHNlcnZlciBhZGRyZXNzLiAgVGhlIGFkZHJlc3NcXG4gICpcXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXFxuQEAgLTIxMTksMjMgKzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tXFx0aW50IGVycjtcXG4gXFxuIFxcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4tXFx0aWYgKCFzb2NrKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9UU09DSztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGVyciA9XFxuLVxcdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIXNvY2spXFxuK1xcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuIFxcbi1cXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWRkcmxlbiwgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbi1vdXQ6XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbitcXHRcXHRcXHQgICAgICBzb2NrLVxcdTAwM2VmaWxlLVxcdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XFxuIH1cXG4gXFxuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRkNmIxNjc2MjNkOTRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xcbkBAIC0wLDAgKzEsMTMwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3Byb2dzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJuZXR3b3JrX2hlbHBlcnMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2xzbS5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19sc21fdmVyaWZpZXIuc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBOU19URVNUIFxcXCJrc29ja19sc21fbnNcXFwiXFxuKyNkZWZpbmUgUkVDVl9QT1JUIDc3NzdcXG4rI2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcXG4rXFxuK3N0cnVjdCBrc29ja190ZXN0X2VudiB7XFxuK1xcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xcbitcXHRpbnQgcmZkO1xcbit9O1xcbitcXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7XFxuK1xcdFxcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXFxuK1xcdFxcdC5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcXG4rXFx0ZW52LVxcdTAwM2VyZmQgPSAtMTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoTlNfVEVTVCksIFxcXCJtYWtlX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVudi1cXHUwMDNlbnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVEVTVCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihlbnYtXFx1MDAzZW5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVudi1cXHUwMDNlcmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVxcdTAwM2VyZmQsIFxcXCJyZWNlaXZlciBzb2NrZXRcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZXJyID0gYmluZChlbnYtXFx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJiaW5kIHJlY2VpdmVyXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVyciA9IHNldHNvY2tvcHQoZW52LVxcdTAwM2VyZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcXHUwMDI2dHYsIHNpemVvZih0dikpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzZXQgcmN2dGltZW9cXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK1xcbitmYWlsOlxcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9rc29ja19sc20odm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiB0cmlnZ2VyX2FkZHIgPSB7XFxuK1xcdFxcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XFxuK1xcdGNoYXIgcmVjdl9kYXRhW3NpemVvZihza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VzZW5kX2RhdGEpXSA9IHt9O1xcbitcXHRzc2l6ZV90IG47XFxuK1xcdGludCB0ZmQgPSAtMTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSBrc29ja19sc21fX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cChcXHUwMDI2ZW52KSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlbW90ZV9wb3J0ID0gUkVDVl9QT1JUO1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5rc29ja19zZXR1cCksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJrc29ja19zZXR1cCBydW5cXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcImtzb2NrX3NldHVwIHJldHZhbFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfYmluZCBmcm9tIHVzZXJzcGFjZSAqL1xcbitcXHRza2VsLVxcdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfYmluZCA9XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3NvY2tldF9iaW5kKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXFx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kLFxcbitcXHRcXHRcXHQgICBcXFwiYXR0YWNoIHNvY2tldF9iaW5kIGxzbVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHR0ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFxcXCJ0cmlnZ2VyIHNvY2tldFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0ZXJyID0gYmluZCh0ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGFyZ2V0X3BpZCA9IDA7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRyaWdnZXIgYmluZFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDM6IFZlcmlmeSB0aGUgTFNNIGhvb2sgc2VudCB0aGUgbm90aWZpY2F0aW9uICovXFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfcmV0LCBzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJMU00gc2VuZCBieXRlc1xcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRuID0gcmVjdmZyb20oZW52LnJmZCwgcmVjdl9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSwgMCwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmIChBU1NFUlRfRVEobiwgc2l6ZW9mKHJlY3ZfZGF0YSksIFxcXCJyZWN2ZnJvbSBsZW5cXFwiKSlcXG4rXFx0XFx0QVNTRVJUX01FTUVRKHJlY3ZfZGF0YSwgc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSxcXG4rXFx0XFx0XFx0ICAgICBcXFwicGF5bG9hZCBtYXRjaFxcXCIpO1xcbitcXG4rZmFpbDpcXG4rXFx0aWYgKHRmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZSh0ZmQpO1xcbitcXHRpZiAoZW52LnJmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShlbnYucmZkKTtcXG4rXFx0aWYgKGVudi5uc3Rva2VuKVxcbitcXHRcXHRjbG9zZV9uZXRucyhlbnYubnN0b2tlbik7XFxuK1xcdHJlbW92ZV9uZXRucyhOU19URVNUKTtcXG4rXFx0a3NvY2tfbHNtX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbit2b2lkIHRlc3Rfa3NvY2tfbHNtX3ZlcmlmaWVyKHZvaWQpXFxuK3tcXG4rXFx0UlVOX1RFU1RTKGtzb2NrX2xzbV92ZXJpZmllcik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2ZGMyMGI4Zjk1YmJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xcbkBAIC0wLDAgKzEsNDUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInRlc3RfcHJvZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX3dxLnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9SRVRSSUVTIDEwMDBcXG4rI2RlZmluZSBDQUxMQkFDS19XQUlUX1VTIDEwMDBcXG4rXFxuK3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcXG4rXFx0c3RydWN0IGtzb2NrX3dxICpza2VsO1xcbitcXHR1MzIgY2FsbGJhY2tfZG9uZTtcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdHNrZWwgPSBrc29ja193cV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImtzb2NrX3dxIG9wZW4gYW5kIGxvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwicnVuIGtzb2NrX3dxX3N0YXJ0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkrKykge1xcbitcXHRcXHRpZiAoX19hdG9taWNfbG9hZF9uKFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0dXNsZWVwKENBTExCQUNLX1dBSVRfVVMpO1xcbitcXHR9XFxuK1xcdGNhbGxiYWNrX2RvbmUgPSBfX2F0b21pY19sb2FkX24oXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY2FsbGJhY2tfZG9uZSxcXG4rXFx0XFx0XFx0XFx0XFx0X19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdGlmICghQVNTRVJUX0VRKGNhbGxiYWNrX2RvbmUsIDEsIFxcXCJ3b3JrcXVldWUgY2FsbGJhY2sgY29tcGxldGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY3JlYXRlX2VyciwgLUVPUE5PVFNVUFAsXFxuK1xcdFxcdCAgXFxcIndvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0a3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wMWVkYWViOWZkZDRhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxcbkBAIC0wLDAgKzEsNzggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2lmbmRlZiBfS1NPQ0tfQ09NTU9OX0hcXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcXG4rXFxuKyNpbmNsdWRlIFxcXCJlcnJuby5oXFxcIlxcbitcXG4rI2RlZmluZSBTT0NLX0RHUkFNXFx0MlxcbisjZGVmaW5lIElQUFJPVE9fVURQXFx0MTdcXG4rXFxuK3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XFxuK2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXFxuK1xcdFxcdCAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltO1xcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xcbit2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XFxuK2ludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07XFxuK3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xcbitcXG4rc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IF9fa3NvY2tfY3R4X21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxcbit7XFxuK1xcdHUzMiBrZXkgPSAwO1xcbitcXG4rXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNl9fa3NvY2tfY3R4X21hcCwgXFx1MDAyNmtleSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9rc29jayAqa3NvY2tfY3R4X2dldCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3MgPSBOVUxMLCAqdG1wO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHRtcCA9IHYtXFx1MDAzZWN0eDtcXG4rXFx0aWYgKHRtcClcXG4rXFx0XFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4ga3M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqb2xkO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KSB7XFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHR9XFxuK1xcbitcXHRvbGQgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIGN0eCk7XFxuK1xcdGlmIChvbGQpIHtcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgwODQ1MTA5OGVmYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmNcXG5AQCAtMCwwICsxLDcyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfY29tbW9uLmhcXFwiXFxuK1xcbitjaGFyIHNlbmRfZGF0YVszMl0gPSBcXFwiaGVsbG8gZnJvbSBicGYga3NvY2tcXFwiO1xcbitcXG4rX19iZTMyIGlwdjRfcmVtb3RlO1xcbitfX3UxNiByZW1vdGVfcG9ydDtcXG4raW50IHRhcmdldF9waWQ7XFxuK2ludCBzZW5kX3JldCA9IC0xO1xcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGtzb2NrX3NldHVwKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIGNyZWF0ZV9vcHRzID0ge307XFxuK1xcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0Y3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0Y3JlYXRlX29wdHMudHlwZSA9IFNPQ0tfREdSQU07XFxuK1xcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XFxuK1xcbitcXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcXHUwMDI2ZXJyKTtcXG4rXFx0aWYgKCFrcylcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGFkZHIuc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRhZGRyLnNpbi5zaW5fcG9ydCA9IGJwZl9odG9ucyhyZW1vdGVfcG9ydCk7XFxuK1xcdGFkZHIuc2luLnNpbl9hZGRyLnNfYWRkciA9IGlwdjRfcmVtb3RlO1xcbitcXG4rXFx0ZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsIFxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7XFxuK1xcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FRVhJU1QpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS5zL3NvY2tldF9iaW5kXFxcIilcXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsXFxuK1xcdCAgICAgaW50IGFkZHJsZW4sIGludCByZXQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMjtcXG4rXFxuK1xcdGlmIChyZXQgfHwgcGlkICE9IHRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRrcyA9IGtzb2NrX2N0eF9nZXQoKTtcXG4rXFx0aWYgKCFrcykge1xcbitcXHRcXHRzZW5kX3JldCA9IC1FTk9FTlQ7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNlbmRfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xcbitcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmQyY2NmZGI1ODAyMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcXG5AQCAtMCwwICsxLDM1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2NvbW1vbi5oXFxcIlxcbitcXG4rY2hhciBzZW5kX2RhdGFbMTFdID0gXFxcImR1bW15IGRhdGFcXFwiO1xcbitcXG4rU0VDKFxcXCJsc20ucy9zb2NrZXRfc2VuZG1zZ1xcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcImJwZl9rc29ja19zZW5kIGlzIHJlamVjdGVkIGZyb20gc29ja2V0X3NlbmRtc2cgTFNNIGhvb2tcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9rc29ja19zZW5kIGlzIG5vdCBhbGxvd2VkXFxcIilcXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuK1xcdCAgICAgaW50IHNpemUsIGludCByZXQpXFxuK3tcXG4rXFx0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG4rXFxuK1xcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XFxuK1xcdGlmICghdilcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGtzID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2di1cXHUwMDNlY3R4LCBOVUxMKTtcXG4rXFx0aWYgKCFrcylcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcXG4rXFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXFxuQEAgLTAsMCArMSw2MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfZXhwZXJpbWVudGFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfdHJhY2luZ19uZXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVycm5vLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19jb21tb24uaFxcXCJcXG4rXFxuK3N0cnVjdCBrc29ja193cV92YWx1ZSB7XFxuK1xcdHN0cnVjdCBicGZfd3Egd29yaztcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCB1MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7XFxuK30gd29ya19tYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4raW50IGNyZWF0ZV9lcnI7XFxuK3UzMiBjYWxsYmFja19kb25lO1xcbitcXG4rc3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHMgPSB7XFxuK1xcdFxcdC5mYW1pbHkgPSBBRl9JTkVULFxcbitcXHRcXHQudHlwZSA9IFNPQ0tfREdSQU0sXFxuK1xcdFxcdC5wcm90b2NvbCA9IElQUFJPVE9fVURQLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXFx1MDAyNmVycik7XFxuK1xcdGlmIChrcylcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbitcXHRjcmVhdGVfZXJyID0gZXJyO1xcbitcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2Y2FsbGJhY2tfZG9uZSwgMSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBrc29ja193cV92YWx1ZSAqdmFsdWU7XFxuK1xcdHUzMiBrZXkgPSAwO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ3b3JrX21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRlcnIgPSBicGZfd3FfaW5pdChcXHUwMDI2dmFsdWUtXFx1MDAzZXdvcmssIFxcdTAwMjZ3b3JrX21hcCwgMCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdGVyciA9IGJwZl93cV9zZXRfY2FsbGJhY2soXFx1MDAyNnZhbHVlLVxcdTAwM2V3b3JrLCBrc29ja193cV9jYWxsYmFjaywgMCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBicGZfd3Ffc3RhcnQoXFx1MDAyNnZhbHVlLVxcdTAwM2V3b3JrLCAwKTtcXG4rfVxcbitcXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzoyNC4yNDIyMTk2NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2Njg3ODE3MDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX2FjcXVpcmVcIixcbiAgICBcImJwZl9rc29ja19yZWxlYXNlXCIsXG4gICAgXCJicGZfa3NvY2tfc2VuZFwiLFxuICAgIFwiY29ubmVjdF9zb2NrZXRcIixcbiAgICBcImJwZl9rc29ja19yZWxlYXNlX2R0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiBCUEYga2Z1bmNzIChicGZfa3NvY2tfY3JlYXRlLCBicGZfa3NvY2tfY29ubmVjdCwgYnBmX2tzb2NrX3NlbmQsIGV0Yy4pIHRoYXQgYWxsb3cgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSBhbmQgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgc29ja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBCUEYgc3Vic3lzdGVtIGFuZCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBrZnVuY3MgYXJlIGFjY2Vzc2libGUgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChsaWtlIFNZU0NBTEwgYW5kIExTTSBob29rcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxNzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCArMSwzNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2lmbmRlZiBfQlBGX0tTT0NLX0hcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbitcbisvKipcbisgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuKyAqIEBmYW1pbHk6XHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cbisgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4rICogQHByb3RvY29sOlx0UHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2xcbisgKlx0XHRvZiB0aGUgZ2l2ZW4gdHlwZS5cbisgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMge1xuK1x0X191OCBmYW1pbHk7XG4rXHRfX3U4IHR5cGU7XG4rXHRfX3U4IHByb3RvY29sO1xuK1x0X191OCByZXNlcnZlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cbisgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbisgKi9cbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBzaW42O1xuK307XG4rXG4rI2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXG5pbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTtcbiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHRcdCAgICAgaW50IGFkZHJsZW4pO1xuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcbitcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDM2OSw2ICs0MzY5LDkgQEAgQlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXG4gI2lmZGVmIENPTkZJR19DUllQVE9cbiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0lORVRcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4rI2VuZGlmXG4gQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcbiBcbiBzdGF0aWMgYm9vbCByY3VfcHJvdGVjdGVkX29iamVjdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZVxuaW5kZXggYjNmZGNiNGUzNTVmYS4uYzIwZTUyMDM1OGI4ZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTQ0LDYgKzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xuK2lmZGVmIENPTkZJR19JTkVUXG4rb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuK2VuZGlmXG4gb2JqLSQoQ09ORklHX09GKVx0Kz0gb2ZfbmV0Lm9cbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTk5NDNhZWVhZGQzMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbkBAIC0wLDAgKzEsMzI4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9rc29jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbisgKiBAc29jazpcdFRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuXG4rICogQHVzYWdlOlx0UmVmZXJlbmNlIGNvdW50ZXIuXG4rICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2sge1xuK1x0c3RydWN0IHNvY2tldCAqc29jaztcbitcdHJlZmNvdW50X3QgdXNhZ2U7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1xuK1x0a3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcbitcdHNvY2tfcmVsZWFzZShrcy1cdTAwM2Vzb2NrKTtcbitcdGtmcmVlKGtzKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXG4rXHQgKiBjbGVhcmVkIGN1cnJlbnQtXHUwMDNlbnNwcm94eSwgd2hpbGUgY3VycmVudCBpcyBzdGlsbCBub3QgYSBrdGhyZWFkLlxuK1x0ICovXG4rXHRyZXR1cm4gIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2Vuc3Byb3h5O1xuK31cbitcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICpcbisgKiBBbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBrZXJuZWwgc29ja2V0LlxuKyAqXG4rICogVGhlIHJldHVybmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCAoc29ja19jcmVhdGUpLCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXG4rICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcbisgKiBkb2VzIG5vdCByZXRhaW4gdGhlIGludm9raW5nIHRhc2sncyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC5cbisgKlxuKyAqIEBvcHRzOlx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXG4rICogQG9wdHNfX3N6Olx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXG4rICogQGVycl9fdW5pbml0Olx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbisgKi9cbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbiticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcbitcdFx0IGludCAqZXJyX191bmluaXQpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbitcdGludCBlcnI7XG4rXG4rXHQvKlxuK1x0ICogc29ja19jcmVhdGUoKSBkZXJpdmVzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgY3JlZGVudGlhbHMsIGFuZCBjZ3JvdXBcbitcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cbitcdCAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLlxuK1x0ICovXG4rXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XG4rXHRcdC5mYW1pbHkgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VmYW1pbHkpLFxuK1x0XHQudHlwZSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXR5cGUpLFxuK1x0XHQucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2Vwcm90b2NvbCksXG4rXHRcdC5yZXNlcnZlZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkKSxcbitcdH07XG4rXG4rXHRpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgXHUwMDI2XHUwMDI2IG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbitcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0a3MgPSBremFsbG9jX29iaigqa3MpO1xuK1x0aWYgKCFrcykge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LFxuK1x0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXG4rXHQgKiBjcmVhdGVkIGJ5IHRoZSBCUEYgcHJvZ3JhbSdzIGNhbGxlci5cbitcdCAqL1xuK1x0ZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCxcbitcdFx0XHQgIFx1MDAyNmtzLVx1MDAzZXNvY2spO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZTtcbitcbitcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xuK1x0a3MtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza191c2VybG9ja3MgfD0gU09DS19SQ1ZCVUZfTE9DSztcbitcbitcdHJlZmNvdW50X3NldChcdTAwMjZrcy1cdTAwM2V1c2FnZSwgMSk7XG4rXHRwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTtcbitcdHJldHVybiBrcztcbitcbitlcnJfZnJlZTpcbitcdGtmcmVlKGtzKTtcbitlcnJfb3V0OlxuK1x0cHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXG4rICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC5cbisgKiBAYWRkcjpcdFBvaW50ZXIgdG8gYW4gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzLlxuKyAqIEBhZGRyX19zejpcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXG4rICpcbisgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4rXHRcdFx0XHQgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxuK1x0XHRcdFx0ICB1MzIgYWRkcl9fc3opXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7XG4rXHRpbnQgYWRkcmxlbjtcbitcbitcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoIWFkZHIgfHwgYWRkcl9fc3ogIT0gc2l6ZW9mKCphZGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBLZnVuYyBtZW1vcnkgYXJndW1lbnRzIG1heSBiZSB1bmFsaWduZWQuICovXG4rXHRtZW1jcHkoXHUwMDI2c2EsIGFkZHIsIHNpemVvZigqYWRkcikpO1xuK1xuK1x0c3dpdGNoIChzYS5zc19mYW1pbHkpIHtcbitcdGNhc2UgQUZfSU5FVDpcbitcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUZfSU5FVDY6XG4rXHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoa3MtXHUwMDNlc29jaywgXHUwMDI2c2EsIGFkZHJsZW4sIDApO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxuKyAqXHR0cnVzdGVkIHBvaW50ZXIgKGUuZy4gUkNVLXByb3RlY3RlZCBrcHRyIGZyb20gYSBtYXApLlxuKyAqXG4rICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4rICovXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXG4re1xuK1x0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3MtXHUwMDNldXNhZ2UpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBrcztcbit9XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cbisgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLlxuKyAqXG4rICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXG4rICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXG4rICovXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbit7XG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmtzLVx1MDAzZXVzYWdlKSkge1xuK1x0XHRJTklUX1JDVV9XT1JLKFx1MDAyNmtzLVx1MDAzZXJ3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pO1xuK1x0XHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZrcy1cdTAwM2Vyd29yayk7XG4rXHR9XG4rfVxuK1xuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcbit7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rfVxuK0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuXG4rICogQGRhdGE6XHRQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuXG4rICogQGRhdGFfX3N6Olx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kLlxuKyAqXG4rICogU2VuZHMgZGF0YSBvbiBhIGNvbm5lY3RlZCBzb2NrZXQsIGJlc3QtZWZmb3J0IGFuZCBub25ibG9ja2luZy4gVGhpcyBtYXkgc2xlZXBcbisgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuKyAqXG4rICogUmV0dXJuOiBOdW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXG4rXHRcdFx0ICAgICAgIHUzMiBkYXRhX19zeilcbit7XG4rXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbitcdFx0Lm1zZ19mbGFncyA9IE1TR19ET05UV0FJVCxcbitcdH07XG4rXHRzdHJ1Y3Qga3ZlYyBpb3YgPSB7XG4rXHRcdC5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSxcbitcdFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19pbml0X2tmdW5jX3NldCA9IHtcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbit9O1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2UsIEtGX1JFTEVBU0UpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbisjZW5kaWZcbitcbitzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4re1xuK1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkICE9IGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWRbMF0pXG4rXHRcdHJldHVybiAwO1xuKyNlbmRpZlxuK1xuK1x0cmV0dXJuIC1FQUNDRVM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLFxuK1x0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXG4rfTtcbitcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbitcdFx0e1xuK1x0XHRcdC5idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMF0sXG4rXHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbitcdFx0fSxcbitcdH07XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbitcdFx0XHRcdFx0XHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbitcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbitcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbit9XG4rXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi41YjAyZTYyMTdjNjgwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgKzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcbiBcdHJldHVybiBfX3N5c19hY2NlcHQ0KGZkLCB1cGVlcl9zb2NrYWRkciwgdXBlZXJfYWRkcmxlbiwgMCk7XG4gfVxuIFxuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbitcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsXG4rXHRcdFx0XHQgICAgICBhZGRybGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXG4rXHRcdFx0XHRcdCAgICAgYWRkcmxlbiwgZmxhZ3MpO1xuK31cbitcbiAvKlxuICAqXHRBdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSBzb2NrZXQgd2l0aCB0aGUgc2VydmVyIGFkZHJlc3MuICBUaGUgYWRkcmVzc1xuICAqXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXG5AQCAtMjExOSwyMyArMjEzMywxMyBAQCBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbiBcdFx0ICAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuLVx0aW50IGVycjtcbiBcbiBcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcbi1cdGlmICghc29jaykge1xuLVx0XHRlcnIgPSAtRU5PVFNPQ0s7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0ZXJyID1cbi1cdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghc29jaylcbitcdFx0cmV0dXJuIC1FTk9UU09DSztcbiBcbi1cdGVyciA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICAgYWRkcmxlbiwgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KHNvY2ssIGFkZHJlc3MsIGFkZHJsZW4sXG4rXHRcdFx0ICAgICAgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbiB9XG4gXG4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsIGludCBhZGRybGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGQ2YjE2NzYyM2Q5NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xuQEAgLTAsMCArMSwxMzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NhcnBhL2luZXQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcIm5ldHdvcmtfaGVscGVycy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2xzbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfbHNtX3ZlcmlmaWVyLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBOU19URVNUIFwia3NvY2tfbHNtX25zXCJcbisjZGVmaW5lIFJFQ1ZfUE9SVCA3Nzc3XG4rI2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcbitcbitzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYge1xuK1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW47XG4rXHRpbnQgcmZkO1xuK307XG4rXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7XG4rXHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXG4rXHRcdC5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksXG4rXHR9O1xuK1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl9zZWMgPSBSRUNWX1RJTUVPVVRfU0VDIH07XG4rXHRpbnQgZXJyO1xuK1xuK1x0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcbitcdGVudi1cdTAwM2VyZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoTlNfVEVTVCksIFwibWFrZV9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGVudi1cdTAwM2Vuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVudi1cdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVx1MDAzZXJmZCwgXCJyZWNlaXZlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVyciA9IGJpbmQoZW52LVx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYmluZCByZWNlaXZlclwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldCByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rXG4rZmFpbDpcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gdHJpZ2dlcl9hZGRyID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0fTtcbitcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XG4rXHRjaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSldID0ge307XG4rXHRzc2l6ZV90IG47XG4rXHRpbnQgdGZkID0gLTE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2V0dXAgcnVuXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja19zZXR1cCByZXR2YWxcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovXG4rXHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfYmluZCxcbitcdFx0XHQgICBcImF0dGFjaCBzb2NrZXRfYmluZCBsc21cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwidHJpZ2dlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcbitcdGVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0cmlnZ2VyIGJpbmRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX3JldCwgc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpLFxuK1x0XHQgICAgICAgXCJMU00gc2VuZCBieXRlc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0biA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXCJyZWN2ZnJvbSBsZW5cIikpXG4rXHRcdEFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxuK1x0XHRcdCAgICAgXCJwYXlsb2FkIG1hdGNoXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAodGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGZkKTtcbitcdGlmIChlbnYucmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZW52LnJmZCk7XG4rXHRpZiAoZW52Lm5zdG9rZW4pXG4rXHRcdGNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTtcbitcdHJlbW92ZV9uZXRucyhOU19URVNUKTtcbitcdGtzb2NrX2xzbV9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV92ZXJpZmllcih2b2lkKVxuK3tcbitcdFJVTl9URVNUUyhrc29ja19sc21fdmVyaWZpZXIpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2ZGMyMGI4Zjk1YmJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcbkBAIC0wLDAgKzEsNDUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX3dxLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBDQUxMQkFDS19XQUlUX1JFVFJJRVMgMTAwMFxuKyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9VUyAxMDAwXG4rXG4rdm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IGtzb2NrX3dxICpza2VsO1xuK1x0dTMyIGNhbGxiYWNrX2RvbmU7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0c2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrc29ja193cSBvcGVuIGFuZCBsb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicnVuIGtzb2NrX3dxX3N0YXJ0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkrKykge1xuK1x0XHRpZiAoX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoQ0FMTEJBQ0tfV0FJVF9VUyk7XG4rXHR9XG4rXHRjYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsXG4rXHRcdFx0XHRcdF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0aWYgKCFBU1NFUlRfRVEoY2FsbGJhY2tfZG9uZSwgMSwgXCJ3b3JrcXVldWUgY2FsbGJhY2sgY29tcGxldGVkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCxcbitcdFx0ICBcIndvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcIik7XG4rXG4rb3V0OlxuK1x0a3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjAxZWRhZWI5ZmRkNGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxuQEAgLTAsMCArMSw3OCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9IXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcbitcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuK1xuKyNkZWZpbmUgU09DS19ER1JBTVx0MlxuKyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4rXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxuK1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4raW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbitcdFx0ICAgICAgdTMyIGFkZHJfX3N6KSBfX2tzeW07XG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbit2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG4raW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLCB1MzIgZGF0YV9fc3opIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuK1xuK3N0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gX19rc29ja19jdHhfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpXG4re1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZfX2tzb2NrX2N0eF9tYXAsIFx1MDAyNmtleSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9rc29jayAqa3NvY2tfY3R4X2dldCh2b2lkKVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzID0gTlVMTCwgKnRtcDtcbitcbitcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4rXHRpZiAoIXYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdHRtcCA9IHYtXHUwMDNlY3R4O1xuK1x0aWYgKHRtcClcbitcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGtzO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcbit7XG4rXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KSB7XG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgY3R4KTtcbitcdGlmIChvbGQpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MDg0NTEwOThlZmJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xuQEAgLTAsMCArMSw3MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK2NoYXIgc2VuZF9kYXRhWzMyXSA9IFwiaGVsbG8gZnJvbSBicGYga3NvY2tcIjtcbitcbitfX2JlMzIgaXB2NF9yZW1vdGU7XG4rX191MTYgcmVtb3RlX3BvcnQ7XG4raW50IHRhcmdldF9waWQ7XG4raW50IHNlbmRfcmV0ID0gLTE7XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuK1x0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7XG4rXHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbitcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XG4rXG4rXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoIWtzKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbi5zaW5fcG9ydCA9IGJwZl9odG9ucyhyZW1vdGVfcG9ydCk7XG4rXHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbitcbitcdGVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCBcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xuK1x0aWYgKGVycikge1xuK1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTtcbitcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImxzbS5zL3NvY2tldF9iaW5kXCIpXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsXG4rXHQgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdGlmIChyZXQgfHwgcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRrcyA9IGtzb2NrX2N0eF9nZXQoKTtcbitcdGlmICgha3MpIHtcbitcdFx0c2VuZF9yZXQgPSAtRU5PRU5UO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0c2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkMmNjZmRiNTgwMjBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xuQEAgLTAsMCArMSwzNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbitjaGFyIHNlbmRfZGF0YVsxMV0gPSBcImR1bW15IGRhdGFcIjtcbitcbitTRUMoXCJsc20ucy9zb2NrZXRfc2VuZG1zZ1wiKVxuK19fZGVzY3JpcHRpb24oXCJicGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWRcIilcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbitcdCAgICAgaW50IHNpemUsIGludCByZXQpXG4re1xuK1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0a3MgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBOVUxMKTtcbitcdGlmICgha3MpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xuQEAgLTAsMCArMSw2MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK3N0cnVjdCBrc29ja193cV92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX3dxIHdvcms7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtzb2NrX3dxX3ZhbHVlKTtcbit9IHdvcmtfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK2ludCBjcmVhdGVfZXJyO1xuK3UzMiBjYWxsYmFja19kb25lO1xuK1xuK3N0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0ge1xuK1x0XHQuZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnR5cGUgPSBTT0NLX0RHUkFNLFxuK1x0XHQucHJvdG9jb2wgPSBJUFBST1RPX1VEUCxcbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbitcdGlmIChrcylcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1x0Y3JlYXRlX2VyciA9IGVycjtcbitcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmNhbGxiYWNrX2RvbmUsIDEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBrc29ja193cV92YWx1ZSAqdmFsdWU7XG4rXHR1MzIga2V5ID0gMDtcbitcdGludCBlcnI7XG4rXG4rXHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d29ya19tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbHVlKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdGVyciA9IGJwZl93cV9pbml0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIFx1MDAyNndvcmtfbWFwLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRlcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gYnBmX3dxX3N0YXJ0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIDApO1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTc6MjQuMjQyMjIwNzQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyODEyNDEyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEJQRiBLZXJuZWwgU29ja2V0IEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCAqbmVlZCogdG8gYmUgZnV6emVkLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgYWRkaXRpb246IG5ldyBCUEYga2Z1bmNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGtlcm5lbCBzb2NrZXRzIOKAkyBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiAgWWVwLCB0aGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gTm8gcXVlc3Rpb24gYWJvdXQgaXQuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHRoZSBhZmZlY3RlZCBmaWxlcywganVzdCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ6IGBpbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oYCwgYGluY2x1ZGUvbGludXgvc29ja2V0LmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYG5ldC9jb3JlL01ha2VmaWxlYCwgYG5ldC9jb3JlL2JwZl9rc29jay5jYCwgYG5ldC9zb2NrZXQuY2AsIGFuZCBhIGJ1bmNoIG9mIHNlbGZ0ZXN0cy4gU2VlbXMgbGlrZSBhIGZvY3VzZWQgc2V0IG9mIGNoYW5nZXMsIG1vc3RseSBpbiB0aGUgbmV0d29ya2luZy9zb2NrZXQgYXJlYXMuXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiBgbmV0L2NvcmUvYnBmX2tzb2NrLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuICBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXM6XG5cbmBgYG1ha2VmaWxlXG5pZmRlZiBDT05GSUdfSU5FVFxub2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuZW5kaWZcbmBgYFxuXG5ZdXAsIHRoZXJlIGl0IGlzLiBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgdGhlIGtleS4gIE5vdywgdGhlIGtmdW5jcyB0aGVtc2VsdmVzOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgIGFyZSBjbGVhcmx5IHRoZSBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuICBUaGVzZSBhcmUgZ29pbmcgdG8gYmUgY2FsbGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgb2YgdHlwZXMgYEJQRl9QUk9HX1RZUEVfU1lTQ0FMTGAgYW5kIGBCUEZfUFJPR19UWVBFX0xTTWAuIFRoZXkgbmVlZCB0byBiZSBpbiB0aGUgZnV6emluZyBzY29wZS5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBCZXNpZGVzIHRoZSBrZnVuY3MsIEkgc2VlIHRoYXQgYGNvbm5lY3Rfc29ja2V0YCBmcm9tIGBuZXQvc29ja2V0LmNgIGlzIGFkZGVkIHRvIGBpbmNsdWRlL2xpbnV4L3NvY2tldC5oYCBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQuIEFuZCB5ZXMsIGl0IGlzIGV4cG9ydGVkLlxuXG5JIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuICBJJ3ZlIGdvdCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEknbSBnb29kLiAgVGhlIGtmdW5jcyBhbHNvIHN1cHBvcnQgdGhlIGBCUEZfUFJPR19UWVBFX0xTTWAgcHJvZ3JhbSB0eXBlLiBCdXQgSSBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IHRoZSBjb21waWxhdGlvbiBjb25kaXRpb24gYXJlIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGJhc2VkIG9uIHRoZSBNYWtlZmlsZS5cblxuRG91YmxlLWNoZWNraW5nIGBuZXQvY29yZS9NYWtlZmlsZWAgYWdhaW4gdG8gbWFrZSBzdXJlOlxuYGBgbWFrZWZpbGVcbm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xub2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXG5pZmRlZiBDT05GSUdfSU5FVFxub2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuZW5kaWZcbmBgYFxuWWVwLCBpdCdzIGNvbnNpc3RlbnQuXG5cblNvLCB0aGUgZm9jdXMgaXM6IGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19hY3F1aXJlYCwgYGJwZl9rc29ja19yZWxlYXNlYCwgYGJwZl9rc29ja19zZW5kYCwgYW5kIGBjb25uZWN0X3NvY2tldGAgd2l0aCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIFRpbWUgdG8gdXNlIHRoZSB0b29scyB0byBjb25maXJtIGBjb25uZWN0X3NvY2tldGAgYW5kIGBicGZfa3NvY2tfY3JlYXRlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzozNS41MjM0NjM4NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMjM4MDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfa3NvY2tfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTEtLyoqXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxMjogKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTMtICogQGZhbWlseTpcXHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTgtICovXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxOTpzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTIwLVxcdF9fdTggZmFtaWx5O1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9NDk9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTEtLyoqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NTI6ICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTMtICpcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTYzLSAqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NjQ6ICogQG9wdHM6XFx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjUtICogQG9wdHNfX3N6OlxcdFNpemUgb2YgdGhlIG9wdHMgc3RydWN0Llxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9Njg9X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Njk6YnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzAtXFx0XFx0IGludCAqZXJyX191bmluaXQpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzEte1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjcyOlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTczLVxcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtODUtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6ODY6XFx0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTg3LVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy05MC1cXG5uZXQvY29yZS9icGZfa3NvY2suYzo5MTpcXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtOTItXFx0XFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VmYW1pbHkpLFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjYwPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI2MTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI2Mi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0xMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MTI6c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0xMy1cXHRcXHRcXHRcXHQgICB1MzIgb3B0c19fc3osIGludCAqZXJyX191bmluaXQpIF9fa3N5bTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYz0xOT1pbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYy0yMC17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jOjIxOlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMtMjItXFx0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jLTI5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYzozMDpcXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcXHUwMDI2ZXJyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMtMzEtXFx0aWYgKCFrcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jPTI1PXN0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjI3OlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0yOC1cXHRcXHQuZmFtaWx5ID0gQUZfSU5FVCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjM1OlxcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcXHUwMDI2b3B0cywgc2l6ZW9mKG9wdHMpLCBcXHUwMDI2ZXJyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0zNi1cXHRpZiAoa3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE3OjM4LjAzNTg1MTkwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDgzMDAwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRnVuY3Rpb24gQXZhaWxhYmlsaXR5IENvbmZpcm1lZCoqXG5cbkFscmlnaHQsIEkgY2FuIHNlZSB0aGF0IHRoZSBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgYXJlIHByZXNlbnQgd2l0aGluIHRoZSBzY29wZSBhbmQgYWNjZXNzaWJsZSDigJMgdGhhdCdzIHRoZSBiYXNlbGluZSwgYW5kIHRoYXQncyBnb29kLiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgY29ubmVjdF9zb2NrZXRgLiBUaGlzIGlzIHRoZSBjcnV4LCBhbmQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgYmVoYXZpb3IgbWV0aWN1bG91c2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1NywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE3OjQxLjM0NDE1Mzk0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3NDgxMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbm5lY3Rfc29ja2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmM9MTIwOD1zdGF0aWMgaW50IHZpcnRpb191bWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMtMTIzNi1cXHRkbyB7XFxuYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYzoxMjM3OlxcdFxcdHJjID0gb3NfY29ubmVjdF9zb2NrZXQocGRhdGEtXFx1MDAzZXNvY2tldF9wYXRoKTtcXG5hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jLTEyMzgtXFx0fSB3aGlsZSAocmMgPT0gLUVJTlRSKTtcXG4tLVxcbmFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvb3MuaD0xNjY9c3NpemVfdCBvc19yY3ZfZmRfbXNnKGludCBmZCwgaW50ICpmZHMsIHVuc2lnbmVkIGludCBuX2ZkcyxcXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmgtMTY3LVxcdFxcdCAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbik7XFxuYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oOjE2ODpleHRlcm4gaW50IG9zX2Nvbm5lY3Rfc29ja2V0KGNvbnN0IGNoYXIgKm5hbWUpO1xcbmFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvb3MuaC0xNjktZXh0ZXJuIGludCBvc19maWxlX3R5cGUoY2hhciAqZmlsZSk7XFxuLS1cXG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jPTMzPUVYUE9SVF9TWU1CT0wob3NfY3JlYXRlX3VuaXhfc29ja2V0KTtcXG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jOjM0OkVYUE9SVF9TWU1CT0wob3NfY29ubmVjdF9zb2NrZXQpO1xcbmFyY2gvdW0va2VybmVsL2tzeW1zLmMtMzUtRVhQT1JUX1NZTUJPTChvc19hY2NlcHRfY29ubmVjdGlvbik7XFxuLS1cXG5hcmNoL3VtL2tlcm5lbC90aW1lLmM9NjY2PXN0YXRpYyBpbnQgdGltZV90cmF2ZWxfY29ubmVjdF9leHRlcm5hbChjb25zdCBjaGFyICpzb2NrZXQpXFxuLS1cXG5hcmNoL3VtL2tlcm5lbC90aW1lLmMtNjg3LVxcbmFyY2gvdW0va2VybmVsL3RpbWUuYzo2ODg6XFx0cmMgPSBvc19jb25uZWN0X3NvY2tldChzb2NrZXQpO1xcbmFyY2gvdW0va2VybmVsL3RpbWUuYy02ODktXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM9MTY1PWludCBvc19vcGVuX2ZpbGUoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IG9wZW5mbGFncyBmbGFncywgaW50IG1vZGUpXFxuLS1cXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy0yMDAtXFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM6MjAxOmludCBvc19jb25uZWN0X3NvY2tldChjb25zdCBjaGFyICpuYW1lKVxcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jLTIwMi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzc9c3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM0OS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEzNTA6c3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNTEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yMzQ3PXN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ2Ny1cXHRcXHRcXHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI0Njg6XFx0XFx0XFx0cmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDY5LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc29ja2V0Lmg9NDYyPWV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaC00NjMtXFx0XFx0XFx0ICAgICBpbnQgYWRkcmxlbik7XFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaDo0NjQ6aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxcbmluY2x1ZGUvbGludXgvc29ja2V0LmgtNDY1LVxcdFxcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MTYxPV9fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE4Ny1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoxODg6XFx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2c2EsIGFkZHJsZW4sIDApO1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE4OS19XFxuLS1cXG5uZXQvc29ja2V0LmM9MjEwMD1TWVNDQUxMX0RFRklORTMoYWNjZXB0LCBpbnQsIGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIHVwZWVyX3NvY2thZGRyLFxcbi0tXFxubmV0L3NvY2tldC5jLTIxMDUtXFxubmV0L3NvY2tldC5jOjIxMDY6aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxcbm5ldC9zb2NrZXQuYy0yMTA3LVxcdFxcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc29ja2V0LmM9MjEzMj1pbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yMTQwLVxcbm5ldC9zb2NrZXQuYzoyMTQxOlxcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbm5ldC9zb2NrZXQuYy0yMTQyLVxcdFxcdFxcdCAgICAgIHNvY2stXFx1MDAzZWZpbGUtXFx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25jaS9uY2lfZGV2LmM9NjM4PWludCBnZXRfdGFnaW5mbyhpbnQgZGV2X2lkeCwgaW50IHNkLCBpbnQgZmlkLCBpbnQgcGlkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYy02OTQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYzo2OTU6aW50IGNvbm5lY3Rfc29ja2V0KGludCBkZXZfaWR4LCBpbnQgdGFyZ2V0X2lkeClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jLTY5Ni17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jPTcxOT1pbnQgY29ubmVjdF90YWcoaW50IGRldl9pZHgsIGludCB2aXJ0dWFsX2ZkLCBpbnQgc2QsIGludCBmaWQsIGludCBwaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jLTc0MS1cXHRcXHRyZXR1cm4gLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYzo3NDI6XFx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGRldl9pZHgsIHRhcmdldF9pZHgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25jaS9uY2lfZGV2LmMtNzQzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jPTI1Nj1zdGF0aWMgdm9pZCBjb25uZWN0X2NsaWVudChpbnQgc2ssIHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jLTI1OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2JlbmNoLWxvb2t1cHMuYzoyNjA6XFx0aWYgKHRlc3RfY29ubmVjdF9zb2NrZXQoc2ssIHRoaXNfaXBfZGVzdCwgdGVzdF9zZXJ2ZXJfcG9ydCArICpwKSBcXHUwMDNjPSAwKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jLTI2MS1cXHRcXHR0ZXN0X2Vycm9yKFxcXCJmYWlsZWQgdG8gY29ubmVjdCgpXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QuYz0zMj1zdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC5jLTQ2LVxcdHN5bmNocm9uaXplX3RocmVhZHMoKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QuYzo0NzpcXHRpZiAodGVzdF9jb25uZWN0X3NvY2tldChzaywgdGhpc19pcF9kZXN0LCB0ZXN0X3NlcnZlcl9wb3J0KSBcXHUwMDNjPSAwKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC5jLTQ4LVxcdFxcdHRlc3RfZXJyb3IoXFxcImZhaWxlZCB0byBjb25uZWN0KClcXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jPTQyMT1zdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jLTQzMS1cXHRzeW5jaHJvbml6ZV90aHJlYWRzKCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9pY21wcy1kaXNjYXJkLmM6NDMyOlxcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHRlc3Rfc2VydmVyX3BvcnQpIFxcdTAwM2M9IDApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9pY21wcy1kaXNjYXJkLmMtNDMzLVxcdFxcdHRlc3RfZXJyb3IoXFxcImZhaWxlZCB0byBjb25uZWN0KClcXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYz04NTI9c3RhdGljIGludCBydW5fY2xpZW50KGNvbnN0IGNoYXIgKnRzdF9uYW1lLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYy04NzUtXFx0c3luY2hyb25pemVfdGhyZWFkcygpOyAvKiAyOiBNS1RzIGFkZGVkID1cXHUwMDNlIGNvbm5lY3QoKSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYzo4NzY6XFx0aWYgKHRlc3RfY29ubmVjdF9zb2NrZXQoc2ssIHRoaXNfaXBfZGVzdCwgcG9ydCsrKSBcXHUwMDNjPSAwKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYy04NzctXFx0XFx0dGVzdF9lcnJvcihcXFwiZmFpbGVkIHRvIGNvbm5lY3QoKVxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaD0yOTA9ZXh0ZXJuIGludCB0ZXN0X3dhaXRfZmQoaW50IHNrLCB0aW1lX3Qgc2VjLCBib29sIHdyaXRlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjI5MTpleHRlcm4gaW50IF9fdGVzdF9jb25uZWN0X3NvY2tldChpbnQgc2ssIGNvbnN0IGNoYXIgKmRldmljZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTI5Mi1cXHRcXHRcXHRcXHQgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIGJvb2wgYXN5bmMpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaD0yOTU9c3RhdGljIGlubGluZSBpbnQgdGVzdF9saXN0ZW5fc29ja2V0KGNvbnN0IHVuaW9uIHRjcF9hZGRyIHRhZGRyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zMzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaDozNDA6c3RhdGljIGlubGluZSBpbnQgX3Rlc3RfY29ubmVjdF9zb2NrZXQoaW50IHNrLCBjb25zdCB1bmlvbiB0Y3BfYWRkciB0YWRkcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0MS1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgYXN5bmMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0NS1cXHR0Y3BfYWRkcl90b19zb2NrYWRkcl9pbihcXHUwMDI2YWRkciwgXFx1MDAyNnRhZGRyLCBodG9ucyhwb3J0KSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaDozNDY6XFx0cmV0dXJuIF9fdGVzdF9jb25uZWN0X3NvY2tldChzaywgdmV0aF9uYW1lLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgtMzQ3LVxcdFxcdFxcdFxcdCAgICAgKHZvaWQgKilcXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpLCBhc3luYyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjM1MDpzdGF0aWMgaW5saW5lIGludCB0ZXN0X2Nvbm5lY3Rfc29ja2V0KGludCBzaywgY29uc3QgdW5pb24gdGNwX2FkZHIgdGFkZHIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zNTEtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHBvcnQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zNTIte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmg6MzUzOlxcdHJldHVybiBfdGVzdF9jb25uZWN0X3NvY2tldChzaywgdGFkZHIsIHBvcnQsIGZhbHNlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM1NC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM9OTA9c3RhdGljIGludCBfX3Rlc3Rfc2twYWlyX3BvbGwoaW50IHNrLCBib29sIHdyaXRlLCB1aW50NjRfdCB0aW1lb3V0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jLTExMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM6MTEzOmludCBfX3Rlc3RfY29ubmVjdF9zb2NrZXQoaW50IHNrLCBjb25zdCBjaGFyICpkZXZpY2UsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jLTExNC1cXHRcXHRcXHQgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCBib29sIGFzeW5jKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jPTE2ND1pbnQgX3Rlc3Rfc2twYWlyX2Nvbm5lY3RfcG9sbChpbnQgc2ssIGNvbnN0IGNoYXIgKmRldmljZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYy0xNzQtXFx0c3luY2hyb25pemVfdGhyZWFkcygpOyAvKiAxOiBpbml0IHNrcGFpciBcXHUwMDI2IHJlYWQgbnNjb3VudGVycyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYzoxNzU6XFx0cmV0ID0gX190ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCBkZXZpY2UsIGFkZHIsIGFkZHJfc3osIHRydWUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYy0xNzYtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcmVzdG9yZS5jPTEwOT1zdGF0aWMgdm9pZCB0ZXN0X2dldF9za19jaGVja3BvaW50KHVuc2lnbmVkIGludCBzZXJ2ZXJfcG9ydCwgc29ja2FkZHJfYWYgKnNhZGRyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yZXN0b3JlLmMtMTIyLVxcdHN5bmNocm9uaXplX3RocmVhZHMoKTsgLyogMTogTUtUIGFkZGVkID1cXHUwMDNlIGNvbm5lY3QoKSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcmVzdG9yZS5jOjEyMzpcXHRpZiAodGVzdF9jb25uZWN0X3NvY2tldChzaywgdGhpc19pcF9kZXN0LCBzZXJ2ZXJfcG9ydCkgXFx1MDAzYz0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3Jlc3RvcmUuYy0xMjQtXFx0XFx0dGVzdF9lcnJvcihcXFwiZmFpbGVkIHRvIGNvbm5lY3QoKVxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYz0yNTc9c3RhdGljIHZvaWQgdGVzdF9jbGllbnRfYWN0aXZlX3JzdCh1bnNpZ25lZCBpbnQgcG9ydClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmMtMjczLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsYXN0OyBpKyspIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jOjI3NDpcXHRcXHRlcnIgPSBfdGVzdF9jb25uZWN0X3NvY2tldChza1tpXSwgdGhpc19pcF9kZXN0LCBwb3J0LCBpICE9IDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmMtMjc1LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0yODQtXFx0LyogYXN5bmMgY29ubmVjdCgpIHdpdGggdGhpcmQgc2sgdG8gZ2V0IGludG8gcmVxdWVzdF9zb2NrX3F1ZXVlICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYzoyODU6XFx0ZXJyID0gX3Rlc3RfY29ubmVjdF9zb2NrZXQoc2tbbGFzdF0sIHRoaXNfaXBfZGVzdCwgcG9ydCwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0yODYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jPTMyMz1zdGF0aWMgdm9pZCB0ZXN0X2NsaWVudF9wYXNzaXZlX3JzdCh1bnNpZ25lZCBpbnQgcG9ydClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmMtMzM4LVxcdHN5bmNocm9uaXplX3RocmVhZHMoKTsgLyogMTogTUtUIGFkZGVkID1cXHUwMDNlIGNvbm5lY3QoKSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmM6MzM5OlxcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHBvcnQpIFxcdTAwM2M9IDApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0zNDAtXFx0XFx0dGVzdF9lcnJvcihcXFwiZmFpbGVkIHRvIGNvbm5lY3QoKVxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZWxmLWNvbm5lY3QuYz0zMz1zdGF0aWMgdm9pZCB0Y3Bfc2VsZl9jb25uZWN0KGNvbnN0IGNoYXIgKnRzdCwgdW5zaWduZWQgaW50IHBvcnQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3NlbGYtY29ubmVjdC5jLTY4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VsZi1jb25uZWN0LmM6Njk6XFx0aWYgKF9fdGVzdF9jb25uZWN0X3NvY2tldChzaywgXFxcImxvXFxcIiwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhZGRyLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VsZi1jb25uZWN0LmMtNzAtXFx0XFx0XFx0XFx0ICBzaXplb2YoYWRkciksIDApIFxcdTAwM2MgMCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZXEtZXh0LmM9MTczPXN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZXEtZXh0LmMtMTg5LVxcdHN5bmNocm9uaXplX3RocmVhZHMoKTsgLyogMTogTUtUIGFkZGVkID1cXHUwMDNlIGNvbm5lY3QoKSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VxLWV4dC5jOjE5MDpcXHRpZiAodGVzdF9jb25uZWN0X3NvY2tldChzaywgdGhpc19pcF9kZXN0LCB0ZXN0X3NlcnZlcl9wb3J0KSBcXHUwMDNjPSAwKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VxLWV4dC5jLTE5MS1cXHRcXHR0ZXN0X2Vycm9yKFxcXCJmYWlsZWQgdG8gY29ubmVjdCgpXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE3OjQ0LjE1MTY0MDQ0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODgyNjk4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTb2NrZXQgQ29ubmVjdGlvbiBBUEkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgY29ubmVjdF9zb2NrZXRgIGZ1bmN0aW9uLiBSaWdodCwgaXQncyBkZWZpbmVkIHdpdGhpbiBgbmV0L3NvY2tldC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIGVudHJ5IHBvaW50LCBub3QganVzdCBzb21ldGhpbmcgdHVja2VkIGF3YXkgd2l0aGluIHRoZSBmaWxlLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gTm93LCB3aGVyZSBpcyBpdCBkZWNsYXJlZCBhZ2Fpbj8gQWgsIHllcywgaW4gYGluY2x1ZGUvbGludXgvc29ja2V0LmhgLiBUaGF0J3MgdGhlIHN0YW5kYXJkIHBsYWNlIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcuIEJ1dCBhIG5pZ2dsaW5nIHF1ZXN0aW9uIGlzIGFyaXNpbmcuLi4gaXMgaXQgYWxzbyBhdmFpbGFibGUgdG8gbW9kdWxlcz8gSSBuZWVkIHRvIGtub3cgaWYgbW9kdWxlcyBjYW4gdXNlIHRoaXMgQVBJLCBiZWNhdXNlIHRoaXMgaW5mbHVlbmNlcyBob3cgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgc3RydWN0dXJlZCBhbmQgaG93IG11Y2ggZmxleGliaWxpdHkgd2UgaGF2ZS4gVGltZSB0byBkb3VibGUtY2hlY2sgaWYgaXQncyBleHBsaWNpdGx5IGV4cG9ydGluZyBpdHNlbGYgdG8gbW9kdWxlcyB1c2luZyBgRVhQT1JUX1NZTUJPTGAuIExldCdzIHNlZSBpZiB0aGF0J3MgaW5jbHVkZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzo0Ny42Mzk5MTI1NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5OTM1MTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipjb25uZWN0X3NvY2tldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3VtL2tlcm5lbC9rc3ltcy5jPTMzPUVYUE9SVF9TWU1CT0wob3NfY3JlYXRlX3VuaXhfc29ja2V0KTtcXG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jOjM0OkVYUE9SVF9TWU1CT0wob3NfY29ubmVjdF9zb2NrZXQpO1xcbmFyY2gvdW0va2VybmVsL2tzeW1zLmMtMzUtRVhQT1JUX1NZTUJPTChvc19hY2NlcHRfY29ubmVjdGlvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE3OjUwLjEzOTI2NzQ0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Mzc0NzE2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIHRoaXMgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBpdCdzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIHBhcnQgb2YgYSBtb2R1bGUgZXhwb3J0LCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBpdCdzIGxpa2VseSBhIGdsb2JhbCBmdW5jdGlvbi4gTm93IEkgbmVlZCB0byBjb25maXJtIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBpbnRlbmRlZCB1c2UsIHdoaWNoIHBvaW50cyBtZSB0b3dhcmRzIGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L3NvY2tldC5jYC4gSSdsbCBkZWx2ZSBpbnRvIHRoYXQgZmlsZSB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgaWYgdGhlcmUncyBhbnkgZXhwbGljaXQgZXhwb3J0IG9yIHZpc2liaWxpdHkgZGVjbGFyYXRpb25zIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTY1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTc6NTMuMDc2NzUwODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTcxNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbm5lY3Rfc29ja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc29ja2V0LmM9MjEwMD1TWVNDQUxMX0RFRklORTMoYWNjZXB0LCBpbnQsIGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIHVwZWVyX3NvY2thZGRyLFxcbi0tXFxubmV0L3NvY2tldC5jLTIxMDUtXFxubmV0L3NvY2tldC5jOjIxMDY6aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxcbm5ldC9zb2NrZXQuYy0yMTA3LVxcdFxcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc29ja2V0LmM9MjEzMj1pbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yMTQwLVxcbm5ldC9zb2NrZXQuYzoyMTQxOlxcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbm5ldC9zb2NrZXQuYy0yMTQyLVxcdFxcdFxcdCAgICAgIHNvY2stXFx1MDAzZWZpbGUtXFx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTc6NTMuMTM3MzI5ODk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjE4MDY3MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEtzb2NrIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfa3NvY2tgIHN0dWZmLiBJdCdzIG5vdCBhIHN0YW5kYXJkIGV4cG9ydGVkIG1vZHVsZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgYSBnbG9iYWwgZnVuY3Rpb24gY2FsbGVkIGZyb20gYG5ldC9jb3JlL2JwZl9rc29jay5jYCwgd2hpY2ggaXMgc3RhdGljYWxseSBjb21waWxlZCwgbGlrZWx5IGxpbmtlZCBkdWUgdG8gYGJwZl9rc29jay5vYCBiZWluZyBpbmNsdWRlZCBpbiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKWAuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcga2V5IHN5bWJvbHMgdG8gemVybyBpbiBvbjogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX2FjcXVpcmVgLCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBgYnBmX2tzb2NrX3NlbmRgLCBhbmQgYGNvbm5lY3Rfc29ja2V0YC5cblxuYGNvbm5lY3Rfc29ja2V0YCBsb29rcyBwcm9taXNpbmcgYXMgYW4gZW50cnkgcG9pbnQ7IGl0IHdyYXBzIGJvdGggYHNlY3VyaXR5X3NvY2tldF9jb25uZWN0YCBhbmQgYHNvY2stXHUwMDNlb3BzLVx1MDAzZWNvbm5lY3RgLiBBbmQgaG9sZCBvbiwgSSd2ZSBnb3QgdG8gcmVtZW1iZXIgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgIGlzIGluIHRoZXJlIHRvby4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuXG5cbk5vdywgY29uZmlndXJhdGlvbi13aXNlLCBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQncyByZXF1aXJlZCB0byBtYWtlIHRoaXMgd29yay4gRGVmaW5pdGVseSBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhlIGxhdHRlciBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGJ1dCBsZXQncyBtYWtlIHN1cmUuIENoZWNraW5nIGBuZXQvY29yZS9NYWtlZmlsZWAgYWdhaW4gY29uZmlybXMgdGhlIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9rc29jay5vYCBpcyB1bmRlciBgaWZkZWYgQ09ORklHX0lORVRgLiBTbywgYElORVRgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSB0aGUgbWFpbiBvbmVzLlxuXG5JJ20gd29uZGVyaW5nIGFib3V0IGBDT05GSUdfQlBGX0xTTWAsIHRob3VnaC4gTGV0IG1lIGxvb2sgYXQgdGhpcyBjb2RlIHNuaXBwZXQuXG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfQlBGX0xTTVxuQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpXG4jZW5kaWZcblxuc3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxue1xuXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSlcblx0XHRyZXR1cm4gMDtcblxuXHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1lTQ0FMTClcblx0XHRyZXR1cm4gMDtcblxuI2lmZGVmIENPTkZJR19CUEZfTFNNXG5cdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG5cdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkICE9IGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWRbMF0pXG5cdFx0cmV0dXJuIDA7XG4jZW5kaWZcblxuXHRyZXR1cm4gLUVBQ0NFUztcbn1cbmBgYFxuXG5UaGUga2Z1bmNzIHNlZW0gdG8gYmUgYXZhaWxhYmxlIGZvciBgQlBGX1BST0dfVFlQRV9TWVNDQUxMYCByZWdhcmRsZXNzIG9mIGBDT05GSUdfQlBGX0xTTWAuIFNvLCBmb3IgKmNvcmUqIGZ1bmN0aW9uYWxpdHksIGBDT05GSUdfQlBGX0xTTWAgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBJdCBzZWVtcyBpdCBqdXN0IGVuYWJsZXMgaG9va2luZyBpdCBmcm9tIExTTSBjb250ZXh0cy4gU2luY2UgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGhlcmUsIEkgdGhpbmsgSSdsbCBsZWF2ZSBpdCBvdXQgZm9yIG5vdy4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55IG90aGVyIGNvbmZpZyBmbGFncyBoaWRpbmcgaW4gYG5ldC9jb3JlL2JwZl9rc29jay5jYC4gVGhhdCB3aWxsIGNvbmZpcm0gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjAzLjM1NTQwMDIwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4OTI1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfa3NvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfa3NvY2suYz0yNzQ9QlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzUtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Mjc2OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3Ny1CVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTI4MD1zdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODctXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Mjg4OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI4OS1cXHRpZiAocHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODowMy40MzMyOTY1NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkwNjY1NTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIHJ1bmRvd246XG5cbioqQlBGIFZlcmlmaWNhdGlvbjogQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyBgQ09ORklHX0JQRl9MU01gIGlzIGNsZWFybHkgZW5hYmxlZC4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGdpdmVuIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIGlzIGFjdGl2ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdmVyaWZpZXIgaW50ZXJhY3RzIHdpdGggaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBjaGVja3Mgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZSB0aGF0IGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgYENPTkZJR19CUEZfTFNNYCBzZXR0aW5nLCBwcm9iYWJseSBhcm91bmQgc2VjdXJpdHkgb3IgcG9saWN5IGVuZm9yY2VtZW50LiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNjAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODowOS4zMzk5NTQ2MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDM3MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yNzIzPWludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjczOS1cXHRcXHRpZiAoIWJ0Zl92bWxpbnV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjI3NDA6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgQ09ORklHX0RFQlVHX0lORk9fQlRGXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjc0MS1cXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQzNTg9QlRGX1NFVF9TVEFSVChyY3VfcHJvdGVjdGVkX3R5cGVzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MzU5OiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjAtQlRGX0lEKHN0cnVjdCwgcHJvZ190ZXN0X3JlZl9rZnVuYylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM2MS0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDM2MjojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM2My1CVEZfSUQoc3RydWN0LCBjZ3JvdXApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjQtI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQzNjU6I2lmZGVmIENPTkZJR19CUEZfSklUXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjYtQlRGX0lEKHN0cnVjdCwgYnBmX2NwdW1hc2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDM2OD1CVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDM2OTojaWZkZWYgQ09ORklHX0NSWVBUT1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MzcwLUJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MzcxLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MzcyOiNpZmRlZiBDT05GSUdfSU5FVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MzczLUJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODcwPXN0YXRpYyB1MzIgKnJlZzJidGZfaWRzW19fQlBGX1JFR19UWVBFX01BWF0gPSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4NzE6I2lmZGVmIENPTkZJR19ORVRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDg3Mi1cXHRbUFRSX1RPX1NPQ0tFVF0gPSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS10sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDkyNT1zdGF0aWMgaW50IGNoZWNrX3BrdF9wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDkzNi1cXHQvKiBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IGhhdmUgYSBLY29uZmlnIGVuYWJsaW5nXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ5Mzc6XFx0ICogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgdGhlIHZhbHVlIG9mXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ5MzgtXFx0ICogTkVUX0lQX0FMSUdOIGlzIHVuaXZlcnNhbGx5IHNldCB0byAnMicuICBBbmQgb24gcGxhdGZvcm1zXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ5Mzk6XFx0ICogdGhhdCBkbyBzZXQgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MsIHdlIGdldFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00OTQwLVxcdCAqIHRvIHRoaXMgY29kZSBvbmx5IGluIHN0cmljdCBtb2RlIHdoZXJlIHdlIHdhbnQgdG8gZW11bGF0ZVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUwOTE9c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUxMzUtXFx0c3VicHJvZ19kZXB0aCA9IHJvdW5kX3VwX3N0YWNrX2RlcHRoKGVudiwgc3VicHJvZ1tpZHhdLnN0YWNrX2RlcHRoKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTEzNjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSBcXHUwMDI2XFx1MDAyNiBzdWJwcm9nW2lkeF0uc3RhY2tfYXJnX2NudCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MTM3LVxcdFxcdC8qIHg4Ni02NCB1c2VzIFI5IGZvciBib3RoIHByaXZhdGUgc3RhY2sgZnJhbWUgcG9pbnRlciBhbmQgYXJnNi4gKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NjQ4PUJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjQ5LVxcdHN0cnVjdCBmaWxlIF9fcmN1ICpleGVfZmlsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTY1MDojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NTEtXFx0c3RydWN0IHRhc2tfc3RydWN0IF9fcmN1ICpvd25lcjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTA4PXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTIyLVxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkyMzpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1hcF9wdHIgYWNjZXNzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEZcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTI0LVxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzE3Mz1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxNzUte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTc2OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTc3LVxcdFxcdHZlcmJvc2UoZW52LCBcXFwiYnBmX3RpbWVyIGNhbm5vdCBiZSB1c2VkIGZvciBQUkVFTVBUX1JULlxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzc0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgc29ja190eXBlcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzQ5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NzUwOiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc3NTEtc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzIGJ0Zl9pZF9zb2NrX2NvbW1vbl90eXBlcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyAqY29tcGF0aWJsZV9yZWdfdHlwZXNbX19CUEZfQVJHX1RZUEVfTUFYXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODMyLVxcdFtBUkdfUFRSX1RPX1NPQ0tfQ09NTU9OXVxcdD0gXFx1MDAyNnNvY2tfdHlwZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4MzM6I2lmZGVmIENPTkZJR19ORVRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgzNC1cXHRbQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT05dXFx0PSBcXHUwMDI2YnRmX2lkX3NvY2tfY29tbW9uX3R5cGVzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTk5PXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjM5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDY0MDojaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjQxLVxcdFxcdGVyciA9IGdldF9jYWxsY2hhaW5fYnVmZmVycyhzeXNjdGxfcGVyZl9ldmVudF9tYXhfc3RhY2spO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjQ0LVxcdFxcdGVyciA9IC1FTk9UU1VQUDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA2NDU6XFx0XFx0ZXJyX3N0ciA9IFxcXCJmdW5jICVzIyVkIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfUEVSRl9FVkVOVFNcXFxcblxcXCI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjQ2LSNlbmRpZlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI1PUJURl9JRChmdW5jLCBicGZfcmJ0cmVlX3JpZ2h0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEyNjojaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEyNy1CVEZfSUQoZnVuYywgYnBmX2R5bnB0cl9mcm9tX3NrYilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE0Nz1CVEZfSUQoZnVuYywgYnBmX3ByZWVtcHRfZW5hYmxlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE0ODojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNDktQlRGX0lEKGZ1bmMsIGJwZl9pdGVyX2Nzc190YXNrX25ldylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE1MT1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTUyLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE1MzojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNTQtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2Nvb2tpZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE2Mz1CVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTY0OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE2NS1CVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExODI9QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE4MzojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExODQtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2lzX3JldHVybilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDQ3Mj1zdGF0aWMgdm9pZCBzY2FsYXJfYnl0ZV9zd2FwKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ0ODctXFx0Ym9vbCBpc19iaWdfZW5kaWFuO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDQ4ODojaWZkZWYgQ09ORklHX0NQVV9CSUdfRU5ESUFOXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDg5LVxcdGlzX2JpZ19lbmRpYW4gPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NjUyPWJvb2wgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgczMyIGltbSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY1NC1cXHRzd2l0Y2ggKGltbSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY1NTojaWZkZWYgQ09ORklHX1g4Nl82NFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY1Ni1cXHRjYXNlIEJQRl9GVU5DX2dldF9zbXBfcHJvY2Vzc29yX2lkOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY1NzojaWZkZWYgQ09ORklHX1NNUFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY1OC1cXHRjYXNlIEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2tfYnRmOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Njg2PXN0YXRpYyBpbnQgY2hlY2tfcHNldWRvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzAyLVxcdFxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3MDM6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJrZXJuZWwgaXMgbWlzc2luZyBCVEYsIG1ha2Ugc3VyZSBDT05GSUdfREVCVUdfSU5GT19CVEY9eSBpcyBzcGVjaWZpZWQgaW4gS2NvbmZpZy5cXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzcwNC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODY3OD1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODAyOiNpZmRlZiBDT05GSUdfRlVOQ1RJT05fRVJST1JfSU5KRUNUSU9OXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODAzLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODExPUJURl9JRChmdW5jLCBfX2ZpbGVtYXBfYWRkX2ZvbGlvKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgxMjojaWZkZWYgQ09ORklHX0ZBSUxfUEFHRV9BTExPQ1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxMy1CVEZfSUQoZnVuYywgc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTQtI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODE1OiNpZmRlZiBDT05GSUdfRkFJTFNMQUJcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTYtQlRGX0lEKGZ1bmMsIHNob3VsZF9mYWlsc2xhYilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg4Mz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9tb2RpZnlfcmV0dXJuKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3QgY2hhciAqZnVuY19uYW1lKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODkxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg5MjojZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0VSUk9SX0lOSkVDVElPTiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg5My1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM1Nz1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzU4OiNpZmRlZiBDT05GSUdfU01QXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzU5LUJURl9JRChmdW5jLCBfX19taWdyYXRlX2VuYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM2MT1CVEZfSUQoZnVuYywgbWlncmF0ZV9lbmFibGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzYyLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM2MzojaWYgIWRlZmluZWQgQ09ORklHX1BSRUVNUFRfUkNVIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkIENPTkZJR19USU5ZX1JDVVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM2NC1CVEZfSUQoZnVuYywgcmN1X3JlYWRfdW5sb2NrX3N0cmljdClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjUtI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzY2OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19QUkVFTVBUKSB8fCBkZWZpbmVkKENPTkZJR19UUkFDRV9QUkVFTVBUX1RPR0dMRSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjctQlRGX0lEKGZ1bmMsIHByZWVtcHRfY291bnRfYWRkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM2OD1CVEZfSUQoZnVuYywgcHJlZW1wdF9jb3VudF9zdWIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY5LSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM3MDojaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzcxLUJURl9JRChmdW5jLCBfX3JjdV9yZWFkX2xvY2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzODA9QlRGX1NFVF9TVEFSVChub3JldHVybl9kZW55KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM4MTojaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzgyLUJURl9JRChmdW5jLCBfX2lhMzJfc3lzX2V4aXQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MzgzPUJURl9JRChmdW5jLCBfX2lhMzJfc3lzX2V4aXRfZ3JvdXApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Mzg0LSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM4NTojaWZkZWYgQ09ORklHX0tVTklUXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Mzg2LUJURl9JRChmdW5jLCBfX2t1bml0X2Fib3J0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM4Nz1CVEZfSUQoZnVuYywga3VuaXRfdHJ5X2NhdGNoX3Rocm93KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM4OC0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzODk6I2lmZGVmIENPTkZJR19NT0RVTEVTXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzkwLUJURl9JRChmdW5jLCBfX21vZHVsZV9wdXRfYW5kX2t0aHJlYWRfZXhpdClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzOTEtI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzkyOiNpZmRlZiBDT05GSUdfWDg2XzY0XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzkzLUJURl9JRChmdW5jLCBfX3g2NF9zeXNfZXhpdClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU4Nj1zdHJ1Y3QgYnRmICpicGZfZ2V0X2J0Zl92bWxpbnV4KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1OTAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTkxOlxcdGlmICghYnRmIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU5Mi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZidGZfdm1saW51eF9sb2NrKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDEwMj1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE4OS1cXHRlbnYtXFx1MDAzZXN0cmljdF9hbGlnbm1lbnQgPSAhIShhdHRyLVxcdTAwM2Vwcm9nX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU1RSSUNUX0FMSUdOTUVOVCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTkwOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTkxLVxcdFxcdGVudi1cXHUwMDNlc3RyaWN0X2FsaWdubWVudCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjA5LjQzMTk5NTM0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk3MDI4NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlIGZvciBicGZfa3NvY2sgU3VwcG9ydCoqXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGJwZl9rc29ja2AgYW5kIGByY3VfcHJvdGVjdGVkX3R5cGVzYC4gR2l2ZW4gdGhhdCwgYENPTkZJR19JTkVUYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50IOKAkyBubyBxdWVzdGlvbiB0aGVyZS4gQW5kLCBvZiBjb3Vyc2UsIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbC5cblxuTm93LCByZWdhcmRpbmcgZGVidWcgaW5mb3JtYXRpb24gZm9yIEJURiwgYENPTkZJR19ERUJVR19JTkZPX0JURmAgc2VlbXMgaGlnaGx5IGxpa2VseSwgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSB3b3JraW5nIHdpdGggQlBGIGtmdW5jcy4gSXQncyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5LCBzbyBJJ2xsIGluY2x1ZGUgdGhhdC4gRmluYWxseSwgZm9yIGBDT05GSUdfQlBGX0xTTWAsIHRoZSB0ZXN0cyBsZXZlcmFnZSBgQlBGX1BST0dfVFlQRV9MU01gIGZvciB0aGUgYGJwZl9rc29ja19zZW5kYCBmdW5jdGlvbmFsaXR5IHZpYSBhbiBMU00gaG9vay4gVGhlcmVmb3JlLCBsZXQncyBpbmNsdWRlIHRoaXMgY29uZmlndXJhdGlvbiBhcyB3ZWxsLlxuXG5TbywgaGVyZSdzIHRoZSBjb25maWcgY2hlY2tsaXN0OlxuXG4qICAgYElORVRgXG4qICAgYEJQRl9TWVNDQUxMYFxuKiAgIGBERUJVR19JTkZPX0JURmBcbiogICBgQlBGX0xTTWBcblxuQW5kLCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29yZSBzeW1ib2xzIGluIGZvY3VzOlxuXG4qICAgYGJwZl9rc29ja19jcmVhdGVgXG4qICAgYGJwZl9rc29ja19jb25uZWN0YFxuKiAgIGBicGZfa3NvY2tfYWNxdWlyZWBcbiogICBgYnBmX2tzb2NrX3JlbGVhc2VgXG4qICAgYGJwZl9rc29ja19zZW5kYFxuKiAgIGBjb25uZWN0X3NvY2tldGBcbiogICBgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcmBcblxuUXVpY2sgdGhvdWdodCBvbiBgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcmA6IGl0J3MganVzdCBhIHN0cmFpZ2h0Zm9yd2FyZCB3cmFwcGVyIGFyb3VuZCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBzbyBpdCdzIG5vdCBhIGNvbmNlcm4gZnJvbSBhIGNvbmZpZ3VyYXRpb24gcG9pbnQgb2Ygdmlldy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgIGlzIG5vbi1zdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTE2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjE3LjQyOTAyNjAzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMzU3Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfa3NvY2tfcmVsZWFzZV9kdG9yXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9rc29jay5jPTIxMz1fX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjIwLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIyMTpfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjIyLXtcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIyNC19XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI1OkNGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjI2LVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA0PUJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMDU6QlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODoxOS43NjI2MDk0MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzOTM3OTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBjaGFuZ2Ug4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gTGV0J3MgYnJlYWsgZG93biB3aHkuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgc3VpdGUgb2YgQlBGIGtmdW5jczogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCB0aGUgYGJwZl9rc29ja19zZW5kYCBmYW1pbHksIGFuZCBzbyBvbi4gVGhlc2Ugd2lsbCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8sIGZ1bmRhbWVudGFsbHksIGNyZWF0ZSBhbmQgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgc29ja2V0cywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IHdpdGhpbiB0aGUga2VybmVsJ3MgQlBGIHN1YnN5c3RlbS4gVGhpcyBvcGVucyB1cCBlbnRpcmVseSBuZXcgY29kZSBwYXRocyB0aGF0IGFyZSBub3cgcmVhY2hhYmxlIHZpYSBCUEYsIGFuZCB0aGF0IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldFwiIHRvIG1lLiBTcGVjaWZpY2FsbHksIHRoZXNlIGtmdW5jcyBhcmUgYWNjZXNzaWJsZSBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgbGlrZSB0aGUgU1lTQ0FMTCBhbmQgTFNNIGhvb2tzLCB3aGljaCBpbW1lZGlhdGVseSBleHBhbmRzIHRoZSBhdHRhY2sgc3VyZmFjZSB0byBjb25zaWRlci5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgSU5FVGAsIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0xTTWAgYXJlIGVuYWJsZWQgZHVyaW5nIHRlc3RpbmcuIFRoYXQgY292ZXJzIHRoZSBiYXNpYyBkZXBlbmRlbmNpZXMgdG8gZW5hYmxlIHRoZSBrc29jayBCUEYgZnVuY3Rpb25hbGl0eS5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZSBjcml0aWNhbCBzeW1ib2xzOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGBicGZfa3NvY2tfc2VuZGAsIHRoZSBgY29ubmVjdF9zb2NrZXRgIGhlbHBlciwgYW5kIGBicGZfa3NvY2tfcmVsZWFzZV9kdG9yYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBhbmQgY2xlYW51cCByb3V0aW5lcyBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIGFuYWx5c2lzIGFuZCB2dWxuZXJhYmlsaXR5IGFzc2Vzc21lbnQuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBhbSBjb3ZlcmluZyBhbGwgdGhlIGtmdW5jcy5cblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbmV3IGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGJlc2lkZXMgdGhlIG9uZXMgSSd2ZSBsaXN0ZWQuIEl0J3MgZWFzeSB0byBtaXNzIGFuIGltcG9ydGFudCBvbmUsIHNvIEknbGwgcmV2aWV3IGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYwOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODoyNi4zMDE5OTE2OTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDczNzMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLiogYnBmX2tzb2NrX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfa3NvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfa3NvY2suYz0zMT1zdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzktXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NDA6c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTQxLXtcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTI3Nz1CVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3OS1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODA6c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI4MS17XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz0zMDU9QlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA2LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNzpzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjI2LjQyMjczNjkyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY1OTU3Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQcmlvcml0aXppbmcgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIGBrc29ja19yZWxlYXNlX3dvcmtfZm5gICppcyogYSB3b3JrcXVldWUgY2FsbGJhY2sgYW5kIHRoZXJlZm9yZSBmdXp6YWJsZSwgd2hpY2ggaXMgZ29vZC4gQnV0IGl0J3MgYWxzbyBzdGF0aWMsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdpdmVzIG1lIHBhdXNlLiBUaGUgZ3VpZGFuY2UgaXMgcHJldHR5IGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgZm9yIGdvb2QgcmVhc29uLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBtYXhpbWl6aW5nIGNvdmVyYWdlIGFuZCBlYXNlIG9mIGZ1enppbmcuIEdpdmVuIHRoaXMsIEknbSBnb2luZyB0byBzZXQgbXkgc2lnaHRzIG9uIHRoZSBub24tc3RhdGljIGNhbmRpZGF0ZXMgaW5zdGVhZC4gSSdsbCBtYWtlIHN1cmUgdG8gZXhwbG9yZSB0aG9zZSBmaXJzdC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjQxLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjMwLjk4ODY5ODk5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY4NzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2tzb2NrX2NyZWF0ZVwiLFxuICAgIFwiYnBmX2tzb2NrX2Nvbm5lY3RcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImNvbm5lY3Rfc29ja2V0XCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZV9kdG9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzZXQgb2YgQlBGIGtmdW5jcyAoYnBmX2tzb2NrX2NyZWF0ZSwgYnBmX2tzb2NrX2Nvbm5lY3QsIGJwZl9rc29ja19zZW5kLCBldGMuKSB0aGF0IGFsbG93IEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgQlBGIHN1YnN5c3RlbSBhbmQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUga2Z1bmNzIGFyZSBhY2Nlc3NpYmxlIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAobGlrZSBTWVNDQUxMIGFuZCBMU00gaG9va3MpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9rc29ja19jcmVhdGVcIixcbiAgICBcImJwZl9rc29ja19jb25uZWN0XCIsXG4gICAgXCJicGZfa3NvY2tfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VcIixcbiAgICBcImJwZl9rc29ja19zZW5kXCIsXG4gICAgXCJjb25uZWN0X3NvY2tldFwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VfZHRvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc2V0IG9mIEJQRiBrZnVuY3MgKGJwZl9rc29ja19jcmVhdGUsIGJwZl9rc29ja19jb25uZWN0LCBicGZfa3NvY2tfc2VuZCwgZXRjLikgdGhhdCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlIGFuZCBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIEJQRiBzdWJzeXN0ZW0gYW5kIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGtmdW5jcyBhcmUgYWNjZXNzaWJsZSBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKGxpa2UgU1lTQ0FMTCBhbmQgTFNNIGhvb2tzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzEuMTIwMzk0MjY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgxMjEzNDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjMxLjEyMDk1MDkzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzgxMTU3NTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIChgYnBmX2tzb2NrYCkgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMgZnJvbSBCUEYgcHJvZ3JhbXMuIFxcblxcbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGJwZl9rc29ja2AsIGBzdHJ1Y3QgbXNnaGRyYCwgYHN0cnVjdCBrdmVjYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIG9yIGRlY2xhcmF0aW9uIChlLmcuLCB1c2luZyBga3phbGxvY19vYmpgIG9yIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzKS5cXG4yLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCBmcm9tIEJQRiBwcm9ncmFtcyAoYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgLCBhbmQgdGhlIHNlbmQgYnVmZmVyKSBhcmUgdmFsaWRhdGVkIGZvciBzaXplIGJ5IHRoZSBrZnVuYyB3cmFwcGVycy4gVGhlIEJQRiB2ZXJpZmllciBlbmZvcmNlcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZXNlIGFyZ3VtZW50cyBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIHRvIHRoZSBrZnVuY3MuIEZ1cnRoZXJtb3JlLCBLTVNBTiB1bnBvaXNvbnMgQlBGIHN0YWNrIGFuZCBtYXAgbWVtb3J5IGJ5IGRlc2lnbiBzaW5jZSBpdCBjYW5ub3QgdHJhY2sgSklUdGVkIEJQRiBleGVjdXRpb24sIG1lYW5pbmcgS01TQU4gd291bGQgbm90IGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvcmlnaW5hdGluZyBmcm9tIHRoZSBCUEYgcHJvZ3JhbSBpdHNlbGYuXFxuMy4gVGhlIHJlZmFjdG9yaW5nIG9mIGBjb25uZWN0X3NvY2tldGAgbWVyZWx5IGV4dHJhY3RzIGV4aXN0aW5nIGxvZ2ljIHdpdGhvdXQgY2hhbmdpbmcgaG93IHNvY2tldCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgb3IgY29waWVkLlxcbjQuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZSBkYXRhIHNlbnQgb3ZlciB0aGUgc29ja2V0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgQlBGIHByb2dyYW0uXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIHdoaWNoIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBleHBvc2VkIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxNzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCArMSwzNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2lmbmRlZiBfQlBGX0tTT0NLX0hcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbitcbisvKipcbisgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuKyAqIEBmYW1pbHk6XHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cbisgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4rICogQHByb3RvY29sOlx0UHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2xcbisgKlx0XHRvZiB0aGUgZ2l2ZW4gdHlwZS5cbisgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMge1xuK1x0X191OCBmYW1pbHk7XG4rXHRfX3U4IHR5cGU7XG4rXHRfX3U4IHByb3RvY29sO1xuK1x0X191OCByZXNlcnZlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cbisgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbisgKi9cbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBzaW42O1xuK307XG4rXG4rI2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXG5pbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTtcbiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHRcdCAgICAgaW50IGFkZHJsZW4pO1xuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcbitcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDM2OSw2ICs0MzY5LDkgQEAgQlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXG4gI2lmZGVmIENPTkZJR19DUllQVE9cbiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0lORVRcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4rI2VuZGlmXG4gQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcbiBcbiBzdGF0aWMgYm9vbCByY3VfcHJvdGVjdGVkX29iamVjdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZVxuaW5kZXggYjNmZGNiNGUzNTVmYS4uYzIwZTUyMDM1OGI4ZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTQ0LDYgKzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xuK2lmZGVmIENPTkZJR19JTkVUXG4rb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuK2VuZGlmXG4gb2JqLSQoQ09ORklHX09GKVx0Kz0gb2ZfbmV0Lm9cbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTk5NDNhZWVhZGQzMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbkBAIC0wLDAgKzEsMzI4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9rc29jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbisgKiBAc29jazpcdFRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuXG4rICogQHVzYWdlOlx0UmVmZXJlbmNlIGNvdW50ZXIuXG4rICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2sge1xuK1x0c3RydWN0IHNvY2tldCAqc29jaztcbitcdHJlZmNvdW50X3QgdXNhZ2U7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1xuK1x0a3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcbitcdHNvY2tfcmVsZWFzZShrcy1cdTAwM2Vzb2NrKTtcbitcdGtmcmVlKGtzKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXG4rXHQgKiBjbGVhcmVkIGN1cnJlbnQtXHUwMDNlbnNwcm94eSwgd2hpbGUgY3VycmVudCBpcyBzdGlsbCBub3QgYSBrdGhyZWFkLlxuK1x0ICovXG4rXHRyZXR1cm4gIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2Vuc3Byb3h5O1xuK31cbitcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICpcbisgKiBBbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBrZXJuZWwgc29ja2V0LlxuKyAqXG4rICogVGhlIHJldHVybmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCAoc29ja19jcmVhdGUpLCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXG4rICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcbisgKiBkb2VzIG5vdCByZXRhaW4gdGhlIGludm9raW5nIHRhc2sncyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC5cbisgKlxuKyAqIEBvcHRzOlx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXG4rICogQG9wdHNfX3N6Olx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXG4rICogQGVycl9fdW5pbml0Olx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbisgKi9cbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbiticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcbitcdFx0IGludCAqZXJyX191bmluaXQpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbitcdGludCBlcnI7XG4rXG4rXHQvKlxuK1x0ICogc29ja19jcmVhdGUoKSBkZXJpdmVzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgY3JlZGVudGlhbHMsIGFuZCBjZ3JvdXBcbitcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cbitcdCAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLlxuK1x0ICovXG4rXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XG4rXHRcdC5mYW1pbHkgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VmYW1pbHkpLFxuK1x0XHQudHlwZSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXR5cGUpLFxuK1x0XHQucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2Vwcm90b2NvbCksXG4rXHRcdC5yZXNlcnZlZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkKSxcbitcdH07XG4rXG4rXHRpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgXHUwMDI2XHUwMDI2IG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbitcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0a3MgPSBremFsbG9jX29iaigqa3MpO1xuK1x0aWYgKCFrcykge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LFxuK1x0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXG4rXHQgKiBjcmVhdGVkIGJ5IHRoZSBCUEYgcHJvZ3JhbSdzIGNhbGxlci5cbitcdCAqL1xuK1x0ZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCxcbitcdFx0XHQgIFx1MDAyNmtzLVx1MDAzZXNvY2spO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZTtcbitcbitcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xuK1x0a3MtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza191c2VybG9ja3MgfD0gU09DS19SQ1ZCVUZfTE9DSztcbitcbitcdHJlZmNvdW50X3NldChcdTAwMjZrcy1cdTAwM2V1c2FnZSwgMSk7XG4rXHRwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTtcbitcdHJldHVybiBrcztcbitcbitlcnJfZnJlZTpcbitcdGtmcmVlKGtzKTtcbitlcnJfb3V0OlxuK1x0cHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXG4rICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC5cbisgKiBAYWRkcjpcdFBvaW50ZXIgdG8gYW4gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzLlxuKyAqIEBhZGRyX19zejpcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXG4rICpcbisgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4rXHRcdFx0XHQgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxuK1x0XHRcdFx0ICB1MzIgYWRkcl9fc3opXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7XG4rXHRpbnQgYWRkcmxlbjtcbitcbitcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoIWFkZHIgfHwgYWRkcl9fc3ogIT0gc2l6ZW9mKCphZGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBLZnVuYyBtZW1vcnkgYXJndW1lbnRzIG1heSBiZSB1bmFsaWduZWQuICovXG4rXHRtZW1jcHkoXHUwMDI2c2EsIGFkZHIsIHNpemVvZigqYWRkcikpO1xuK1xuK1x0c3dpdGNoIChzYS5zc19mYW1pbHkpIHtcbitcdGNhc2UgQUZfSU5FVDpcbitcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUZfSU5FVDY6XG4rXHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoa3MtXHUwMDNlc29jaywgXHUwMDI2c2EsIGFkZHJsZW4sIDApO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxuKyAqXHR0cnVzdGVkIHBvaW50ZXIgKGUuZy4gUkNVLXByb3RlY3RlZCBrcHRyIGZyb20gYSBtYXApLlxuKyAqXG4rICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4rICovXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXG4re1xuK1x0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3MtXHUwMDNldXNhZ2UpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBrcztcbit9XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cbisgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLlxuKyAqXG4rICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXG4rICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXG4rICovXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbit7XG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmtzLVx1MDAzZXVzYWdlKSkge1xuK1x0XHRJTklUX1JDVV9XT1JLKFx1MDAyNmtzLVx1MDAzZXJ3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pO1xuK1x0XHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZrcy1cdTAwM2Vyd29yayk7XG4rXHR9XG4rfVxuK1xuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcbit7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rfVxuK0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuXG4rICogQGRhdGE6XHRQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuXG4rICogQGRhdGFfX3N6Olx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kLlxuKyAqXG4rICogU2VuZHMgZGF0YSBvbiBhIGNvbm5lY3RlZCBzb2NrZXQsIGJlc3QtZWZmb3J0IGFuZCBub25ibG9ja2luZy4gVGhpcyBtYXkgc2xlZXBcbisgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuKyAqXG4rICogUmV0dXJuOiBOdW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXG4rXHRcdFx0ICAgICAgIHUzMiBkYXRhX19zeilcbit7XG4rXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbitcdFx0Lm1zZ19mbGFncyA9IE1TR19ET05UV0FJVCxcbitcdH07XG4rXHRzdHJ1Y3Qga3ZlYyBpb3YgPSB7XG4rXHRcdC5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSxcbitcdFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19pbml0X2tmdW5jX3NldCA9IHtcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbit9O1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2UsIEtGX1JFTEVBU0UpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbisjZW5kaWZcbitcbitzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4re1xuK1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkICE9IGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWRbMF0pXG4rXHRcdHJldHVybiAwO1xuKyNlbmRpZlxuK1xuK1x0cmV0dXJuIC1FQUNDRVM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLFxuK1x0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXG4rfTtcbitcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbitcdFx0e1xuK1x0XHRcdC5idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMF0sXG4rXHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbitcdFx0fSxcbitcdH07XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbitcdFx0XHRcdFx0XHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbitcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbitcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbit9XG4rXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi41YjAyZTYyMTdjNjgwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgKzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcbiBcdHJldHVybiBfX3N5c19hY2NlcHQ0KGZkLCB1cGVlcl9zb2NrYWRkciwgdXBlZXJfYWRkcmxlbiwgMCk7XG4gfVxuIFxuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbitcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsXG4rXHRcdFx0XHQgICAgICBhZGRybGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXG4rXHRcdFx0XHRcdCAgICAgYWRkcmxlbiwgZmxhZ3MpO1xuK31cbitcbiAvKlxuICAqXHRBdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSBzb2NrZXQgd2l0aCB0aGUgc2VydmVyIGFkZHJlc3MuICBUaGUgYWRkcmVzc1xuICAqXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXG5AQCAtMjExOSwyMyArMjEzMywxMyBAQCBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbiBcdFx0ICAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuLVx0aW50IGVycjtcbiBcbiBcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcbi1cdGlmICghc29jaykge1xuLVx0XHRlcnIgPSAtRU5PVFNPQ0s7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0ZXJyID1cbi1cdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghc29jaylcbitcdFx0cmV0dXJuIC1FTk9UU09DSztcbiBcbi1cdGVyciA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICAgYWRkcmxlbiwgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KHNvY2ssIGFkZHJlc3MsIGFkZHJsZW4sXG4rXHRcdFx0ICAgICAgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbiB9XG4gXG4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsIGludCBhZGRybGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGQ2YjE2NzYyM2Q5NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xuQEAgLTAsMCArMSwxMzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NhcnBhL2luZXQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcIm5ldHdvcmtfaGVscGVycy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2xzbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfbHNtX3ZlcmlmaWVyLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBOU19URVNUIFwia3NvY2tfbHNtX25zXCJcbisjZGVmaW5lIFJFQ1ZfUE9SVCA3Nzc3XG4rI2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcbitcbitzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYge1xuK1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW47XG4rXHRpbnQgcmZkO1xuK307XG4rXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7XG4rXHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXG4rXHRcdC5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksXG4rXHR9O1xuK1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl9zZWMgPSBSRUNWX1RJTUVPVVRfU0VDIH07XG4rXHRpbnQgZXJyO1xuK1xuK1x0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcbitcdGVudi1cdTAwM2VyZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoTlNfVEVTVCksIFwibWFrZV9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGVudi1cdTAwM2Vuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVudi1cdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVx1MDAzZXJmZCwgXCJyZWNlaXZlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVyciA9IGJpbmQoZW52LVx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYmluZCByZWNlaXZlclwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldCByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rXG4rZmFpbDpcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gdHJpZ2dlcl9hZGRyID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0fTtcbitcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XG4rXHRjaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSldID0ge307XG4rXHRzc2l6ZV90IG47XG4rXHRpbnQgdGZkID0gLTE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2V0dXAgcnVuXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja19zZXR1cCByZXR2YWxcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovXG4rXHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfYmluZCxcbitcdFx0XHQgICBcImF0dGFjaCBzb2NrZXRfYmluZCBsc21cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwidHJpZ2dlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcbitcdGVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0cmlnZ2VyIGJpbmRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX3JldCwgc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpLFxuK1x0XHQgICAgICAgXCJMU00gc2VuZCBieXRlc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0biA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXCJyZWN2ZnJvbSBsZW5cIikpXG4rXHRcdEFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxuK1x0XHRcdCAgICAgXCJwYXlsb2FkIG1hdGNoXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAodGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGZkKTtcbitcdGlmIChlbnYucmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZW52LnJmZCk7XG4rXHRpZiAoZW52Lm5zdG9rZW4pXG4rXHRcdGNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTtcbitcdHJlbW92ZV9uZXRucyhOU19URVNUKTtcbitcdGtzb2NrX2xzbV9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV92ZXJpZmllcih2b2lkKVxuK3tcbitcdFJVTl9URVNUUyhrc29ja19sc21fdmVyaWZpZXIpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2ZGMyMGI4Zjk1YmJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcbkBAIC0wLDAgKzEsNDUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX3dxLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBDQUxMQkFDS19XQUlUX1JFVFJJRVMgMTAwMFxuKyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9VUyAxMDAwXG4rXG4rdm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IGtzb2NrX3dxICpza2VsO1xuK1x0dTMyIGNhbGxiYWNrX2RvbmU7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0c2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrc29ja193cSBvcGVuIGFuZCBsb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicnVuIGtzb2NrX3dxX3N0YXJ0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkrKykge1xuK1x0XHRpZiAoX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoQ0FMTEJBQ0tfV0FJVF9VUyk7XG4rXHR9XG4rXHRjYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsXG4rXHRcdFx0XHRcdF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0aWYgKCFBU1NFUlRfRVEoY2FsbGJhY2tfZG9uZSwgMSwgXCJ3b3JrcXVldWUgY2FsbGJhY2sgY29tcGxldGVkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCxcbitcdFx0ICBcIndvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcIik7XG4rXG4rb3V0OlxuK1x0a3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjAxZWRhZWI5ZmRkNGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxuQEAgLTAsMCArMSw3OCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9IXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcbitcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuK1xuKyNkZWZpbmUgU09DS19ER1JBTVx0MlxuKyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4rXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxuK1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4raW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbitcdFx0ICAgICAgdTMyIGFkZHJfX3N6KSBfX2tzeW07XG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbit2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG4raW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLCB1MzIgZGF0YV9fc3opIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuK1xuK3N0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gX19rc29ja19jdHhfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpXG4re1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZfX2tzb2NrX2N0eF9tYXAsIFx1MDAyNmtleSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9rc29jayAqa3NvY2tfY3R4X2dldCh2b2lkKVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzID0gTlVMTCwgKnRtcDtcbitcbitcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4rXHRpZiAoIXYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdHRtcCA9IHYtXHUwMDNlY3R4O1xuK1x0aWYgKHRtcClcbitcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGtzO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcbit7XG4rXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KSB7XG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgY3R4KTtcbitcdGlmIChvbGQpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MDg0NTEwOThlZmJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xuQEAgLTAsMCArMSw3MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK2NoYXIgc2VuZF9kYXRhWzMyXSA9IFwiaGVsbG8gZnJvbSBicGYga3NvY2tcIjtcbitcbitfX2JlMzIgaXB2NF9yZW1vdGU7XG4rX191MTYgcmVtb3RlX3BvcnQ7XG4raW50IHRhcmdldF9waWQ7XG4raW50IHNlbmRfcmV0ID0gLTE7XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuK1x0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7XG4rXHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbitcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XG4rXG4rXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoIWtzKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbi5zaW5fcG9ydCA9IGJwZl9odG9ucyhyZW1vdGVfcG9ydCk7XG4rXHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbitcbitcdGVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCBcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xuK1x0aWYgKGVycikge1xuK1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTtcbitcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImxzbS5zL3NvY2tldF9iaW5kXCIpXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsXG4rXHQgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdGlmIChyZXQgfHwgcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRrcyA9IGtzb2NrX2N0eF9nZXQoKTtcbitcdGlmICgha3MpIHtcbitcdFx0c2VuZF9yZXQgPSAtRU5PRU5UO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0c2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkMmNjZmRiNTgwMjBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xuQEAgLTAsMCArMSwzNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbitjaGFyIHNlbmRfZGF0YVsxMV0gPSBcImR1bW15IGRhdGFcIjtcbitcbitTRUMoXCJsc20ucy9zb2NrZXRfc2VuZG1zZ1wiKVxuK19fZGVzY3JpcHRpb24oXCJicGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWRcIilcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbitcdCAgICAgaW50IHNpemUsIGludCByZXQpXG4re1xuK1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0a3MgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBOVUxMKTtcbitcdGlmICgha3MpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xuQEAgLTAsMCArMSw2MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK3N0cnVjdCBrc29ja193cV92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX3dxIHdvcms7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtzb2NrX3dxX3ZhbHVlKTtcbit9IHdvcmtfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK2ludCBjcmVhdGVfZXJyO1xuK3UzMiBjYWxsYmFja19kb25lO1xuK1xuK3N0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0ge1xuK1x0XHQuZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnR5cGUgPSBTT0NLX0RHUkFNLFxuK1x0XHQucHJvdG9jb2wgPSBJUFBST1RPX1VEUCxcbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbitcdGlmIChrcylcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1x0Y3JlYXRlX2VyciA9IGVycjtcbitcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmNhbGxiYWNrX2RvbmUsIDEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBrc29ja193cV92YWx1ZSAqdmFsdWU7XG4rXHR1MzIga2V5ID0gMDtcbitcdGludCBlcnI7XG4rXG4rXHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d29ya19tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbHVlKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdGVyciA9IGJwZl93cV9pbml0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIFx1MDAyNndvcmtfbWFwLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRlcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gYnBmX3dxX3N0YXJ0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIDApO1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzEuMTIwOTUxODk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODg4MDg1OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBicGZfa3NvY2sgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgbmV3IGBicGZfa3NvY2tgIGZlYXR1cmUgdGhhdCBpbnRyb2R1Y2VzIHNldmVyYWwga2VybmVsIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IERvZXMgdGhpcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgb3IgaXMgaXQgY292ZXJlZCBieSBleGlzdGluZyBCUEYgYW5kIG5ldHdvcmsgZnV6emluZz9cblxuVGhlIHBhdGNoIGludHJvZHVjZXMga2Z1bmNzIGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19zZW5kYCwgd2hpY2ggYWxsIHRha2UgYXJndW1lbnRzIGZyb20gQlBGIHByb2dyYW1zLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gIFRoZSBjb3JlIGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIHdoZXRoZXIgdW5pbml0aWFsaXplZCBkYXRhLCBzdXBwbGllZCBieSBhIEJQRiBwcm9ncmFtLCBjb3VsZCBiZSByZWFkIGJ5IGtlcm5lbCBmdW5jdGlvbnMgb3Igc2VudCB0byBhIG5ldHdvcmsgc29ja2V0LlxuXG5UaGUgdmVyaWZpZXIgaXMgc3VwcG9zZWQgdG8gcHJldmVudCB0aGlzLiBJdCBjaGVja3MgdGhhdCBtZW1vcnkgcGFzc2VkIHRvIGtmdW5jcyBpcyBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIGluaXRpYWwgdGhvdWdodCBpcywgZG9lcyB0aGUgdmVyaWZpZXIgX3JlYWxseV8gY2F0Y2ggYWxsIGNhc2VzLCBlc3BlY2lhbGx5IHdpdGggbmV3IGNvZGU/ICBXZSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBlYWNoIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBpdCByZWNlaXZlcy5cblxuYGJwZl9rc29ja19zZW5kYCBpcyB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnM6IGl0IHRha2VzIGBjb25zdCB2b2lkICpkYXRhYCBhbmQgYHUzMiBkYXRhX19zemAuICBJZiBgZGF0YWAgaXMgdW5pbml0aWFsaXplZCwgdGhlIGtlcm5lbCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHRoYXQgZGF0YS4gSG93ZXZlciwgdGhlIHZlcmlmaWVyICpzaG91bGQqIGJlIGNoZWNraW5nIGBkYXRhYCBpcyBpbml0aWFsaXplZCB1cCB0byBgZGF0YV9fc3pgLiBLTVNBTiB3aWxsIGRldGVjdCBpZiBga2VybmVsX3NlbmRtc2dgIHJlY2VpdmVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgYSBidWcgaW4gdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IHRoaXMsIGJ1dCB0aGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIHRoZSB2ZXJpZmllci5cblxuYGJwZl9rc29ja19jcmVhdGVgIHRha2VzIGEgYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLiBUaGUgY29kZSBjb3BpZXMgdGhlIGZpZWxkcyBvbmUgYnkgb25lIHVzaW5nIGBSRUFEX09OQ0VgLiBObyBpc3N1ZSBoZXJlLCB0aGUgdmVyaWZpZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQuXG5cbmBicGZfa3NvY2tfY29ubmVjdGAgdGFrZXMgYHN0cnVjdCBicGZfa3NvY2tgIGFuZCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgLiAgYHVuaW9uIGJwZl9rc29ja19hZGRyYCB3b3JyaWVzIG1lLCBiZWNhdXNlIGl0IGhhcyBwYWRkaW5nLiBgbWVtY3B5YCBjb3BpZXMgdGhlIHdob2xlIHVuaW9uLCBidXQgaWYgb25seSBwYXJ0IGlzIGluaXRpYWxpemVkLCBLTVNBTiBjb3VsZCBmbGFnIHRoaXMgYXMgYW4gaXNzdWUuIEhvd2V2ZXIsIHRoZSB2ZXJpZmllciByZXF1aXJlcyB0aGF0IHRoZSBlbnRpcmUgYGFkZHJfX3N6YCBieXRlcyAoMjggYnl0ZXMgaW4gdGhpcyBjYXNlKSBwYXNzZWQgdG8gYGJwZl9rc29ja19jb25uZWN0YCBhcmUgaW5pdGlhbGl6ZWQsIHNvIGBtZW1jcHlgIHNob3VsZCBiZSBmaW5lLiAgSWYgdGhlIEJQRiBwcm9ncmFtIHByb3ZpZGVzIGFuIHVuaW5pdGlhbGl6ZWQgdW5pb24sIHRoZSB2ZXJpZmllciAqc2hvdWxkKiByZWplY3QgaXQuIElmIG5vdCwgS01TQU4gd2lsbCB0cmlnZ2VyIGFuZCBpdCdzIGEgYnVnIHRoYXQgbmVlZHMgZml4aW5nLlxuXG5UaGUgdmVyaWZpZXIgcGxheXMgdGhlIGtleSByb2xlOiBpdOKAmXMgcmVzcG9uc2libGUgZm9yIHRyYWNraW5nIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBzdGFjayBhbmQgbWFwIG1lbW9yeSB1c2VkIGJ5IEJQRiBwcm9ncmFtcy4gQlBGIHByb2dyYW1zIGFyZSBub3QgS01TQU4gaW5zdHJ1bWVudGVkLCBiZWNhdXNlIHRoZXkgYXJlIEpJVHRlZC4gVGhlIHZlcmlmaWVyIHRyYWNrcyBpbml0aWFsaXphdGlvbiwgYW5kIHRoZW4gdGhlIEJQRiBKSVQsIG9yIHRoZSB2ZXJpZmllciBpdHNlbGYsIGluamVjdHMgdW5wb2lzb25pbmcgY2FsbHMsIGZvciBleGFtcGxlIGZvciBzdGFjayBvciBtYXAgbWVtb3J5LlxuXG5JbiB0ZXJtcyBvZiBgY29ubmVjdF9zb2NrZXRgLCB0aGF0J3MganVzdCByZWZhY3RvcmluZy4gVGhlcmUgaXMgYSBwb3RlbnRpYWwgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYWAgaW4gYGNvbm5lY3Rfc29ja2V0YCBpZiBhbiB1bmluaXRpYWxpemVkIGFkZHJlc3MgaXMgcGFzc2VkLCBidXQgdGhlIGNvZGUgaW4gYGJwZl9rc29ja19jb25uZWN0YCBjb3BpZXMgZXZlcnl0aGluZyB0byB0aGUgc29ja2V0IHN0cnVjdHVyZSBhbmQgYWxsIHRoZSBmaWVsZHMgc2hvdWxkIGJlIGluaXRpYWxpemVkLCBiZWNhdXNlIHRoZSB2ZXJpZmllciBlbnN1cmVzIG1lbW9yeSBpcyBpbml0aWFsaXplZC5cblxuUmVnYXJkaW5nIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2U6IHRoZXJlIGFyZSBub25lIGhlcmUgc2luY2Ugbm90aGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgZXhjZXB0IHdoYXQgdGhlIG5ldHdvcmsgc2VuZHMuXG5cbk5vdywgdGhlIGNlbnRyYWwgcXVlc3Rpb25zOiBEb2VzIHRoaXMgKmludHJvZHVjZSogYSBuZXcgd2F5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkPyBNeSBjb25jbHVzaW9uIGlzIG5vLCBiYXNlZCBvbiB3aGF0IHRoZSB2ZXJpZmllciBkb2VzLiBUaGVyZSBpcyBub3RoaW5nIG5ldyBoZXJlLlxuXG4qICAgQXJlIHRoZXJlIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQ/IEkgc2VlIGBremFsbG9jX29iamAsIHdoaWNoIGxvb2tzIHN1c3BpY2lvdXMsIGJ1dCBpdCdzIG5vdCBhIHN0YW5kYXJkIG1hY3JvLiBXYWl0LCBsZXQgbWUgY2hlY2sgdGhlIGNvZGUuIE9rYXksIGl0J3MganVzdCBga3phbGxvYyhzaXplb2YoKmtzKSwgR0ZQX0tFUk5FTClgLlxuXG4qKlZlcmRpY3Q6KiogVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIG5ldyBrZnVuY3MsIGJ1dCB0aGUgKnJpc2sqIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGlzIG5vdCBuZXcuIFRoZSBleGlzdGluZyBCUEYgdmVyaWZpZXIsIGFuZCB0aGUgdW5wb2lzb25pbmcgb2YgbWVtb3J5IHdoZW4gdGhlIGtlcm5lbCBhY2Nlc3NlcyBCUEYgc3RhY2sgb3IgbWFwIG1lbW9yeSwgYXJlIHN1cHBvc2VkIHRvIGhhbmRsZSB0aGVzZS4gVGhlcmVmb3JlLCBJIGRvbid0IHNlZSBhICpzdHJvbmcqIGNhc2UgZm9yIGEgKmRlZGljYXRlZCogS01TQU4gZnV6emluZyBzZXNzaW9uLCBhbHRob3VnaCBpdCB3b3VsZG4ndCBodXJ0IHRvIGluY2x1ZGUgdGhlc2UgbmV3IGZ1bmN0aW9ucyBpbiBleGlzdGluZyBmdXp6aW5nIGNhbXBhaWducy4gSG93ZXZlciwgaWYgdGhlIHZlcmlmaWVyIGhhcyBhIGJ1ZywgS01TQU4gKndpbGwqIGNhdGNoIGl0LCBiZWNhdXNlIGl0IGNoZWNrcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcGFzc2VkIHRvIHRoZSBzZW5kIHNvY2tldCwgdmlhIGBrZXJuZWxfc2VuZG1zZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTI2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjA0LjAwOTA0MjgwMloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MjUzNzU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jX29ialwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc5MTUwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0PTEwMz1saXN0Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMTU6ICAgICAgICAgIGdyb2NrID0ga3phbGxvY19vYmooKmdyb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNi0gICAgICAgICAgaWYgKCFncm9jaylcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI1LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTI2OiAgICAgICAgICBkaW1pdHJpID0ga3phbGxvY19vYmooKmRpbWl0cmkpO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q9NDU9YSBtZXNzYWdlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBBUEkgYW5kIHJldHVybiBpbW1lZGlhdGVseSkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtODktXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkwOlxcdFxcdGRjX3N5bmMgPSBremFsbG9jX29iaigqZGNfc3luYyk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkxOlxcdFxcdGRjX2FzeW5jID0ga3phbGxvY19vYmooKmRjX2FzeW5jKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtOTItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q9MjY9RXhhbXBsZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q6NDU6XFx0XFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00Ni1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NjQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGEgemVyb2VkIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTY4OlxcdHAgPSBremFsbG9jX29ianMoKnAsIG4sIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAwLVxcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XFx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMi1cXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDM6XFx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVxcdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjY4LSAgICAgICAgICAgICAgLyogYWxsb2NhdGUgYSBjaGlwLXNwZWNpZmljIGRhdGEgd2l0aCB6ZXJvIGZpbGxlZCAqL1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNzAtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMwLSAgLi4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzQ5LVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NTEtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKSB7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM1LSAgICAgICAgICAuLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzctICAgICAgICAgIC4uLi5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDMtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz02ND1tb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkciwgRWxmNjRfU2hkciAqc2VjaGRycyxcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVxcdG5zeW1zID0gc3ltdGFiLVxcdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZjY0X1N5bSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XFx0Y2hhaW5zID0ga3phbGxvY19vYmpzKHN0cnVjdCBnb3RfZW50cnksIG5zeW1zKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05Ny1cXHRpZiAoIWNoYWlucykge1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYz0zOTA9cmVnaXN0ZXJfY3B1cyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTQtXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcXHRcXHRzdHJ1Y3QgY3B1ICpwID0ga3phbGxvY19vYmooKnApO1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVxcdFxcdGlmICghcClcXG4tLVxcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYz0xMTIwPXN0YXRpYyBpbnQgaml0X3ByZXBhcmVfZmluYWxfbWVtX2FsbG9jKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxcbi0tXFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXFx0aWYgKGN0eC1cXHUwMDNlbmVlZF9leHRyYV9wYXNzKSB7XFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XFx0XFx0Y3R4LVxcdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXFx1MDAzZWppdF9kYXRhKTtcXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMy1cXHRcXHRpZiAoIWN0eC1cXHUwMDNlaml0X2RhdGEpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MjIwPWxvY29tb19pbml0X29uZV9jaGlsZChzdHJ1Y3QgbG9jb21vICpsY2hpcCwgc3RydWN0IGxvY29tb19kZXZfaW5mbyAqaW5mbylcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjIyNTpcXHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cXHRpZiAoIWRldikge1xcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzYyLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XFx0bGNoaXAgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vKTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzY0LVxcdGlmICghbGNoaXApXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9NzMzPXNhMTExMV9pbml0X29uZV9jaGlsZChzdHJ1Y3Qgc2ExMTExICpzYWNoaXAsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LFxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTczOS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6NzQwOlxcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzQxLVxcdGlmICghZGV2KSB7XFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYz0xNzg9c3RhdGljIGludCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jOjE4ODpcXHRkZXZwdHIgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2Nvb3BfZGV2KTtcXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXFx0aWYgKCFkZXZwdHIpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEwLVxcdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYzoxMTE6XFx0XFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XFxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMi1cXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODEtXFx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM6MTgyOlxcdHZkc29fdGV4dF9wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB0ZXh0X3BhZ2VzKTtcXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cXHRpZiAodmRzb190ZXh0X3BhZ2VsaXN0ID09IE5VTEwpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2NC1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcXHRyZXMgPSBremFsbG9jX29ianMoc3RydWN0IHJlc291cmNlLCAyKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2Ni1cXHRpZiAoIXJlcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYz02OT1zdGF0aWMgaW50IF9faW5pdCBlYnNhMjg1X2xlZHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04Ni1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jOjg3OlxcdFxcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODgtXFx0XFx0aWYgKCFsZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MjktXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcXHRcXHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVxcdFxcdGlmICghbGVkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jPTQ3Mz1zdGF0aWMgaW50IGlteF9tbWRjX3BlcmZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkIF9faW9tZW0gKm1tZGNfYmFzZSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jOjQ4MDpcXHRwbXVfbW1kYyA9IGt6YWxsb2Nfb2JqKCpwbXVfbW1kYyk7XFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cXHRpZiAoIXBtdV9tbWRjKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMjktXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcXHRcXHRuZXdfY29tcGF0ID0ga3phbGxvY19vYmooKm5ld19jb21wYXQpO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jPTE2Mz1zdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3NV8zODBfY29oZXJlbmN5X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg3LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM6MTg4OlxcdFxcdHAgPSBremFsbG9jX29iaigqcCk7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODktXFx0XFx0cC1cXHUwMDNlbmFtZSA9IGtzdHJkdXAoXFxcImFybSxpby1jb2hlcmVudFxcXCIsIEdGUF9LRVJORUwpO1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTYtXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTgtXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgbXhzX21hY2hpbmVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zODktXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYzozOTA6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zOTEtXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jPTI5ND1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9zeXN0ZW1fZG1hX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM6MzIyOlxcdGQgPSBremFsbG9jX29iaigqZCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXFx0aWYgKCFkKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5Ni1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3OlxcdG9tYXBfbWNic3BfZGV2aWNlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHNpemUpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTgtXFx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYz01MT1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9kbV90aW1lcl9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI3LVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYzoxMjg6XFx0XFx0cGRhdGEgPSBremFsbG9jX29iaigqcGRhdGEpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjktXFx0XFx0aWYgKCFwZGF0YSkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjM5LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjQxLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM9Nzg2PXZvaWQgX19pbml0IG9tYXBfc29jX2RldmljZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkwLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYzo3OTE6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5Mi1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYz0xMzE9c3RhdGljIGludCBvbWFwX2RldmljZV9idWlsZF9mcm9tX2R0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYzoxNTk6XFx0aHdtb2RzID0ga3phbGxvY19vYmpzKHN0cnVjdCBvbWFwX2h3bW9kICosIG9oX2NudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cXHRpZiAoIWh3bW9kcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5NC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1OlxcdHN5c2MgPSBremFsbG9jX29iaigqc3lzYyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5Ni1cXHRpZiAoIXN5c2MpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI0LVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZvaC1cXHUwMDNlc2xhdmVfcG9ydHMpKSB7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcXHRcXHRvaSA9IGt6YWxsb2Nfb2JqKCpvaSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cXHRcXHRpZiAoIW9pKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzUxMz1pbnQgb21hcF9od21vZF9pbml0X21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVxcdGlmICghb2gpIHtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTI4OlxcdFxcdG9oID0ga3phbGxvY19vYmooKm9oKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI5LVxcdFxcdGlmICghb2gpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mzk6XFx0XFx0b2gtXFx1MDAzZWNsYXNzID0ga3phbGxvY19vYmooKm9oLVxcdTAwM2VjbGFzcyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cXHRcXHRpZiAoIW9oLVxcdTAwM2VjbGFzcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jPTM3OT1zdGF0aWMgaW50IF9faW5pdCBhbXgzX2lkbGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlLCBpbnQgY3B1KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxMi1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM6NDEzOlxcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTQtXFx0aWYgKCFpZGxlX3N0YXRlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM9MzA9c3RhdGljIHZvaWQgX19pbml0IHNyX3NldF9udmFsdWVzKHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jOjQyOlxcdG52YWx1ZV90YWJsZSA9IGt6YWxsb2Nfb2JqcygqbnZhbHVlX3RhYmxlLCBjb3VudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cXHRpZiAoIW52YWx1ZV90YWJsZSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTcxLVxcdCAqL1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzoxNzI6XFx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVxcdGlmICghcmVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5Mi1cXHQgKi9cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6NDkzOlxcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cXHRpZiAoIXJlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcXG4tLVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk0LVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1OlxcdGVjID0ga3phbGxvY19vYmooZWNhcmRfdCk7XFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTYtXFx0aWYgKCFlYykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYz05Mz1pbnQgX19pbml0IHNhMTF4eF9jbGtfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMDktXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMTA6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTExLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjEzMjpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzMtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYz0zMTc9aW50IF9faW5pdCBzYTExeDBfcmVnaXN0ZXJfZml4ZWRfcmVndWxhdG9yKGludCBuLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM6MzI0OlxcdGNmZy1cXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVxcdTAwM2Vpbml0X2RhdGEpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjUtXFx0aWYgKCFjZmctXFx1MDAzZWluaXRfZGF0YSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yNzgtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XFx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI4MC1cXHRpZiAoIWQpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jPTE0MT1zdGF0aWMgaW50IF9faW5pdCByY2FyX2dlbjJfcmVndWxhdG9yX3F1aXJrKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjYtXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM6MTY3OlxcdFxcdHF1aXJrID0ga3phbGxvY19vYmooKnF1aXJrKTtcXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjgtXFx0XFx0aWYgKCFxdWlyaykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3RlcilcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5Ny1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XFx0b3BwcyA9IGt6YWxsb2Nfb2Jqcygqb3BwcywgTUFYX09QUFMpO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5OS1cXHRpZiAoIW9wcHMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz00NDI9aW50IF9faW5pdCB2ZV9zcGNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2VhZGRyLCB1MzIgYTE1X2NsdXNpZCwgaW50IGlycSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0NC1cXHRpbnQgcmV0O1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcXHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0Ni1cXHRpZiAoIWluZm8pXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz01MjM9c3RhdGljIHN0cnVjdCBjbGsgKnZlX3NwY19jbGtfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqY3B1X2RldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyNy1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo1Mjg6XFx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI5LVxcdGlmICghc3BjKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM9MTIzPXN0YXRpYyB2b2lkIF9faW5pdCB2ZXJzYXRpbGVfZHRfcGNpX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYzoxNDU6XFx0bmV3cHJvcCA9IGt6YWxsb2Nfb2JqKCpuZXdwcm9wKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXFx0aWYgKCFuZXdwcm9wKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTAtXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEyLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYz01MDM9c3RhdGljIF9faW5pdCBpbnQgbDJ4MF9wbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MDktXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYzo1MTA6XFx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTExLVxcdGlmICghbDJ4MF9wbXUpIHtcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM9MzE1PXN0YXRpYyBpbnQgX19pbml0IF9fdW5pcGhpZXJfY2FjaGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYzozNDU6XFx0ZGF0YSA9IGt6YWxsb2Nfb2JqKCpkYXRhKTtcXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cXHRpZiAoIWRhdGEpXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjAtXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XFx0YnVmID0ga3phbGxvY19vYmooKmJ1ZixcXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2Mi1cXHRcXHRcXHQgIGdmcCBcXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTE0ODc9YXJtX2lvbW11X2NyZWF0ZV9tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBiYXNlLCB1NjQgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwNi1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjE1MDc6XFx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA4LVxcdGlmICghbWFwcGluZylcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYz0zMTY9aW50IF9faW5pdCBhcmNoX3hlbl91bnBvcHVsYXRlZF9pbml0KHN0cnVjdCByZXNvdXJjZSAqKnJlcylcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM0NDpcXHRyZWdzID0ga3phbGxvY19vYmpzKCpyZWdzLCBucl9yZWcpO1xcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXFx0aWYgKCFyZWdzKSB7XFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozODg6XFx0XFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg5LVxcdFxcdGlmICghdG1wX3Jlcykge1xcbi0tXFxuYXJjaC9hcm0veGVuL3AybS5jPTE1MD1ib29sIF9fc2V0X3BoeXNfdG9fbWFjaGluZV9tdWx0aSh1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbmFyY2gvYXJtL3hlbi9wMm0uYy0xNzgtXFxuYXJjaC9hcm0veGVuL3AybS5jOjE3OTpcXHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcXG5hcmNoL2FybS94ZW4vcDJtLmMtMTgwLVxcdGlmICghcDJtX2VudHJ5KVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jPTY4PXN0YXRpYyBpbnQgX19pbml0IF9fdmRzb19pbml0KGVudW0gdmRzb19hYmkgYWJpKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYzo4NDpcXHR2ZHNvX3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mb1thYmldLnZkc29fcGFnZXMpO1xcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cXHRpZiAodmRzb19wYWdlbGlzdCA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDkyLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcXHR0aGlzID0ga3phbGxvY19vYmooKnRoaXMpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5NC1cXHRpZiAoIXRoaXMpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDctXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTAwODpcXHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDktXFx0aWYgKCFwZ3QpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMTgwPWludCB0b3B1cF9oeXBfbWVtY2FjaGUoc3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgKm1jLCB1bnNpZ25lZCBsb25nIG1pbl9wYWdlcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXFx0aWYgKCFtYy1cXHUwMDNlbWFwcGluZykge1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XFx0XFx0bWMtXFx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODctXFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjUxMD1pbnQgX19pbml0IGt2bV9tbXVfaW5pdCh1MzIgaHlwX3ZhX2JpdHMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQzLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI1NDQ6XFx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDUtXFx0aWYgKCFoeXBfcGd0YWJsZSkge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTMyOD1pbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIpIHtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0OlxcdFxcdHN0cnVjdCB2bmNyX3RsYiAqdnQgPSBremFsbG9jX29iaigqdmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYixcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzM1LVxcdFxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMi1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlxcdGt2bS1cXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MgPSBremFsbG9jX29iaigqKGt2bS1cXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDQtXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM9MTE2PXN0YXRpYyBzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSAqa3ZtX3B0ZHVtcF9wYXJzZXJfY3JlYXRlKHN0cnVjdCBrdm1fczJfbW11ICptbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjEtXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MTIyOlxcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIzLVxcdGlmICghc3QpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTIwNz1zdGF0aWMgaW50IGt2bV92Z2ljX2Rpc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucl9zcGlzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXFx0ZGlzdC1cXHUwMDNlYWN0aXZlX3NwaXMgPSAoYXRvbWljX3QpQVRPTUlDX0lOSVQoMCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XFx0ZGlzdC1cXHUwMDNlc3BpcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsIG5yX3NwaXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXFx0aWYgKCFkaXN0LVxcdTAwM2VzcGlzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zMTY9c3RhdGljIGludCB2Z2ljX2FsbG9jYXRlX3ByaXZhdGVfaXJxc19sb2NrZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MzMyOlxcdHZnaWNfY3B1LVxcdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMzLVxcdFxcdFxcdFxcdFxcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYz0xNDI9aW50IGt2bV92Z2ljX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTQ4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjE0OTpcXHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNTAtXFx0aWYgKCFlbnRyaWVzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTc2PXN0YXRpYyBzdHJ1Y3QgdmdpY19pcnEgKnZnaWNfYWRkX2xwaShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbnRpZCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6ODg6XFx0aXJxID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXJxLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cXHRpZiAoIWlycSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3Ni1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3OlxcdGNvbGxlY3Rpb24gPSBremFsbG9jX29iaigqY29sbGVjdGlvbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTc4LVxcdGlmICghY29sbGVjdGlvbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMDE1PXN0YXRpYyBzdHJ1Y3QgaXRzX2l0ZSAqdmdpY19pdHNfYWxsb2NfaXRlKHN0cnVjdCBpdHNfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTAyMTpcXHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIyLVxcdGlmICghaXRlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTExNDI9c3RhdGljIHN0cnVjdCBpdHNfZGV2aWNlICp2Z2ljX2l0c19hbGxvY19kZXZpY2Uoc3RydWN0IHZnaWNfaXRzICppdHMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTE0ODpcXHRkZXZpY2UgPSBremFsbG9jX29iaigqZGV2aWNlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVxcdGlmICghZGV2aWNlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg2Mi1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcXHRpdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjQtXFx0aWYgKCFpdHMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTg4Nj1zdGF0aWMgaW50IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHVpbnQzMl90IGluZGV4LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzEtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzo5MzI6XFx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzMtXFx0aWYgKCFyZHJlZylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jPTI0Mj1pbnQgdmdpY192NF9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYzoyNTk6XFx0ZGlzdC1cXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXFx1MDAzZWl0c192bS52cGVzLCBucl92Y3B1cyxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNjAtXFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMTE0PXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTM1LVxcdGlmICghaml0X2RhdGEpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMTM2OlxcdFxcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTM3LVxcdFxcdGlmICghaml0X2RhdGEpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYz0xNz1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTIyLVxcdHZkc29fcGFnZWxpc3QgPVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlxcdFxcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX3BhZ2VzKTtcXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cXHRpZiAodW5saWtlbHkodmRzb19wYWdlbGlzdCA9PSBOVUxMKSkge1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzItXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlxcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBHRlBfQVRPTUlDKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzQtXFx0aWYgKCFyYW5nZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM9NDU9c3RhdGljIGludCBfX2luaXQgaW5pdF92ZHNvKHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU1LVxcdHZkc29faW5mby5jb2RlX21hcHBpbmcucGFnZXMgPVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XFx0XFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mby5zaXplIC8gUEFHRV9TSVpFKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTYxND1zdGF0aWMgaW50IGt2bV9laW9pbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjQtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjYyNTpcXHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI2LVxcdGlmICghcylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jPTM5ND1zdGF0aWMgaW50IGt2bV9pcGlfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jOjQxMjpcXHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9pcGkpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cXHRpZiAoIXMpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjA2Ljg1MTU4OTI2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjA4MDkxOTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQlBGIEtzb2NrIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBJbml0aWFsaXphdGlvbiBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBjYXJlZnVsbHkgZGlzc2VjdGluZyB0aGlzIEJQRiBrc29jayBwYXRjaCwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBrZnVuYyBBUEkgZm9yIEJQRiBwcm9ncmFtcyB0byBtYW5hZ2Ugc29ja2V0czogY3JlYXRpbmcsIGNvbm5lY3RpbmcsIGFuZCBzZW5kaW5nIGRhdGEuIE15IGZpcnN0IHRob3VnaHQgd2FzLCBcIkxldCdzIGNoZWNrIGV2ZXJ5IGFsbG9jYXRpb24gYW5kIG1lbW9yeSB0cmFuc2ZlciBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkuXCJcblxuSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCBga3phbGxvY19vYmpgLCB3aGljaCBzZWVtcyBsaWtlIGEgbWFjcm8gZm9yIGBremFsbG9jYC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlcywgbGlrZSBga3NgICh0aGUgYGJwZl9rc29ja2Agc3RydWN0KSwgYXJlIHplcm8taW5pdGlhbGl6ZWQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGluY2x1ZGVzIHRoZSBzb2NrZXQgaXRzZWxmIChga3MtXHUwMDNlc29ja2ApLCB1c2FnZSBjb3VudGVyLCBhbmQgcmVsZWFzZSB3b3JrLCBtZWFuaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIGluaXRpYWxpemF0aW9uIGFyZSBtb3N0bHkgZWxpbWluYXRlZC4gSSdtIGZvY3VzaW5nIG9uIGBicGZfa3NvY2tfY3JlYXRlX29wdHNgIGFuZCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgIHN0cnVjdHVyZXMsIG1ha2luZyBzdXJlIHRoZXJlJ3Mgbm8gcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHBhcnRzLlxuXG5XaXRoIGBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCwgYSBxdWljayBzaXplIGNoZWNrIGFuZCBkaXJlY3QgaW5pdGlhbGl6YXRpb24gbWFrZSBpdCBzdHJhaWdodGZvcndhcmQgYW5kIHNhZmUuIFRoZW4gSSB3ZW50IGRlZXBlciBpbnRvIHRoZSBgYnBmX2tzb2NrX2FkZHJgIHVuaW9uLiBUaGUgcG90ZW50aWFsIGlzIHRoYXQgdGhlIHVzZXIgb25seSBpbml0aWFsaXplcyBwYXJ0IG9mIHRoZSB1bmlvbiAoZS5nLiwgdGhlIGBzb2NrYWRkcl9pbmAgcG9ydGlvbiksIGxlYXZpbmcgdGhlIG90aGVyIHBhcnQgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBhbiBpbW1lZGlhdGUgcmVkIGZsYWcgZm9yIEtNU0FOLiBUaGUgY29kZSB1c2VzIGBtZW1jcHlgIHRvIGNvcHkgdGhlIHByb3ZpZGVkIGFkZHJlc3MgaW50byBhIGtlcm5lbCBzdHJ1Y3QuIE5vdywgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhlIEJQRiB2ZXJpZmllciBlbmZvcmNlcyB0aGF0IGFsbCAyOCBieXRlcyBvZiBgdW5pb24gYnBmX2tzb2NrX2FkZHJgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUga2Z1bmMgY2FsbHMuIFNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNob3VsZCBiZSBhIHByb2JsZW0gdGhlcmUuXG5cbkJ1dCB3YWl0LiBXaGF0IGlmIG1lbW9yeSBjb21lcyBmcm9tIGEgQlBGIG1hcCBvciByaW5nIGJ1ZmZlcj8gVGhlIHZlcmlmaWVyIGRvZXNuJ3QgKmR5bmFtaWNhbGx5KiB0cmFjayB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmluZyBidWZmZXIgbWVtb3J5LiBUaGVuLCBJIG5lZWRlZCB0byBjaGVjayB3aGF0IGhhcHBlbnMgaWYgdW5pbml0aWFsaXplZCByaW5nIGJ1ZmZlciBtZW1vcnkgaXMgcGFzc2VkIHRvIGBicGZfa3NvY2tfY29ubmVjdGAuIGBtZW1jcHlgIGNvcGllcyB1bmluaXRpYWxpemVkIGRhdGEsIHdoaWNoIGlzIG5vdyBhbiBpbnRlcmVzdGluZyBzY2VuYXJpbyB0aGF0IHNob3VsZCBjYXVzZSBhIEtNU0FOIHJlcG9ydCwgYnV0IGBjb25uZWN0X3NvY2tldGAgaXMgb25seSBnb2luZyB0byByZWFkIHRoZSBpbml0aWFsaXplZCBwYXJ0LCB3aGljaCBpcyB3aHkgS01TQU4gd29uJ3QgY29tcGxhaW4uIFRoZSBtb3N0IGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBuZWVkcyB0byBoYXZlIHByb3Blcmx5IGluaXRpYWxpemVkIG1lbW9yeS4gSWYgYHNhLnNzX2ZhbWlseWAgaXMgdW5pbml0aWFsaXplZCwgdGhlbiB3ZSBnZXQgYW4gZXJyb3IsIGJ1dCB0aGlzIGlzIGEgdXNlciBlcnJvci5cblxuVGhpbmtpbmcgY2FyZWZ1bGx5LCBhbmQgY29uZmlybWluZywgS01TQU4gKnNob3VsZCogYmUgcmVwb3J0aW5nIGEgYnVnIHdoZW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZC4gS01TQU4gaW5zdHJ1bWVudHMgYG1lbWNweWAgYW5kIHdpbGwgcmVwb3J0IGEgYnVnIHdoZW4gdGhlIHNvdXJjZSBjb250YWlucyB1bmluaXRpYWxpemVkIG1lbW9yeSwgKnVubGVzcyogdGhlIG1lbW9yeSBpcyB1bnBvaXNvbmVkLiBTaW5jZSBCUEYgbWFwcyBhbmQgcmluZyBidWZmZXJzIGFyZSB1bnBvaXNvbmVkIGJ5IEtNU0FOLCB0aGlzIGJlY29tZXMgc2FmZSwgYmVjYXVzZSBLTVNBTiBkb2VzIG5vdCB0cmFjayBCUEYgZXhlY3V0aW9uIChlLmcuLCB3cml0ZXMgdG8gdGhlIHN0YWNrKS4gS01TQU4gb25seSBjaGVja3MgbWVtb3J5IHVzYWdlIHdoZW4gaXQncyBhY2Nlc3NlZCwgc3VjaCBhcyB0aHJvdWdoIGBtZW1jcHlgLiBJZiBhIEJQRiBwcm9ncmFtIGRvZXNuJ3QgaW5pdGlhbGl6ZSBpdCwgS01TQU4gd2lsbCBub3Qgc2VlIGl0LCBiZWNhdXNlIEtNU0FOIGhhcyB0aGUgbWVtb3J5IG1hcmtlZCBhcyBpbml0aWFsaXplZCBieSBkZXNpZ24uXG5cblRoZW4sIHRoZXJlJ3MgYGJwZl9rc29ja19zZW5kYCwgd2hpY2ggY2FsbHMgYGtlcm5lbF9zZW5kbXNnYC4gYHN0cnVjdCBtc2doZHJgIGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGFuZCB0aGUgYHN0cnVjdCBrdmVjYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5JIHRoZW4gY2hlY2sgYGNvbm5lY3Rfc29ja2V0YCwgd2hpY2ggaXMgYSByZWZhY3RvcmluZy4gVGhlIGV4aXN0aW5nIGxvZ2ljIGNvcGllcyBkYXRhIGZyb20gdXNlcnNwYWNlIHdpdGggYG1vdmVfYWRkcl90b19rZXJuZWxgLiBTbyBpdCdzIHNhZmUuIFRoZXJlJ3Mgbm8gbmV3IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuRmluYWxseSwgSSBkaWQgYW5vdGhlciBjaGVjayBvZiBgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCBhbmQgYHVuaW9uIGJwZl9rc29ja19hZGRyYCBzdHJ1Y3R1cmVzIGFnYWluLCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyBzYWZlLiBJJ3ZlIHJlY29uZmlybWVkIG15IHJlYXNvbmluZy4gSXQncyBzYWZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBCUEYgbWVtb3J5IGlzIGhhbmRsZWQgYnkgdGhlIHZlcmlmaWVyIGFuZCB1bnBvaXNvbmVkIGJ5IEtNU0FOLiBObyBuZXcgZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuS0FTQU4gaXMgc3VmZmljaWVudC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBCUEYga2Z1bmMgQVBJIGZvciBzb2NrZXRzLiBJdCBkb2Vzbid0IGludHJvZHVjZSBjb21wbGV4IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBwYXJzaW5nIG9mIHVzZXJzcGFjZSBkYXRhIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHVzZWQuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBuZXR3b3JrIHByb3RvY29scy4gSSdtIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCdzIGFsbCBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM1NCwiT3V0cHV0VG9rZW5zIjozNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjU4LjkzMjUxMTMzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIChgYnBmX2tzb2NrYCkgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMgZnJvbSBCUEYgcHJvZ3JhbXMuIFxcblxcbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGJwZl9rc29ja2AsIGBzdHJ1Y3QgbXNnaGRyYCwgYHN0cnVjdCBrdmVjYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIG9yIGRlY2xhcmF0aW9uIChlLmcuLCB1c2luZyBga3phbGxvY19vYmpgIG9yIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzKS5cXG4yLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCBmcm9tIEJQRiBwcm9ncmFtcyAoYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgLCBhbmQgdGhlIHNlbmQgYnVmZmVyKSBhcmUgdmFsaWRhdGVkIGZvciBzaXplIGJ5IHRoZSBrZnVuYyB3cmFwcGVycy4gVGhlIEJQRiB2ZXJpZmllciBlbmZvcmNlcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZXNlIGFyZ3VtZW50cyBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIHRvIHRoZSBrZnVuY3MuIEZ1cnRoZXJtb3JlLCBLTVNBTiB1bnBvaXNvbnMgQlBGIHN0YWNrIGFuZCBtYXAgbWVtb3J5IGJ5IGRlc2lnbiBzaW5jZSBpdCBjYW5ub3QgdHJhY2sgSklUdGVkIEJQRiBleGVjdXRpb24sIG1lYW5pbmcgS01TQU4gd291bGQgbm90IGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvcmlnaW5hdGluZyBmcm9tIHRoZSBCUEYgcHJvZ3JhbSBpdHNlbGYuXFxuMy4gVGhlIHJlZmFjdG9yaW5nIG9mIGBjb25uZWN0X3NvY2tldGAgbWVyZWx5IGV4dHJhY3RzIGV4aXN0aW5nIGxvZ2ljIHdpdGhvdXQgY2hhbmdpbmcgaG93IHNvY2tldCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgb3IgY29waWVkLlxcbjQuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZSBkYXRhIHNlbnQgb3ZlciB0aGUgc29ja2V0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgQlBGIHByb2dyYW0uXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIHdoaWNoIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBleHBvc2VkIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSAoYGJwZl9rc29ja2ApIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzIGZyb20gQlBGIHByb2dyYW1zLiBcXG5cXG4xLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBrZXJuZWwgc3RydWN0dXJlcyAoYHN0cnVjdCBicGZfa3NvY2tgLCBgc3RydWN0IG1zZ2hkcmAsIGBzdHJ1Y3Qga3ZlY2ApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBvciBkZWNsYXJhdGlvbiAoZS5nLiwgdXNpbmcgYGt6YWxsb2Nfb2JqYCBvciBkZXNpZ25hdGVkIGluaXRpYWxpemVycykuXFxuMi4gVGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgZnJvbSBCUEYgcHJvZ3JhbXMgKGBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCwgYHVuaW9uIGJwZl9rc29ja19hZGRyYCwgYW5kIHRoZSBzZW5kIGJ1ZmZlcikgYXJlIHZhbGlkYXRlZCBmb3Igc2l6ZSBieSB0aGUga2Z1bmMgd3JhcHBlcnMuIFRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciB0aGVzZSBhcmd1bWVudHMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCB0byB0aGUga2Z1bmNzLiBGdXJ0aGVybW9yZSwgS01TQU4gdW5wb2lzb25zIEJQRiBzdGFjayBhbmQgbWFwIG1lbW9yeSBieSBkZXNpZ24gc2luY2UgaXQgY2Fubm90IHRyYWNrIEpJVHRlZCBCUEYgZXhlY3V0aW9uLCBtZWFuaW5nIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgb3JpZ2luYXRpbmcgZnJvbSB0aGUgQlBGIHByb2dyYW0gaXRzZWxmLlxcbjMuIFRoZSByZWZhY3RvcmluZyBvZiBgY29ubmVjdF9zb2NrZXRgIG1lcmVseSBleHRyYWN0cyBleGlzdGluZyBsb2dpYyB3aXRob3V0IGNoYW5naW5nIGhvdyBzb2NrZXQgYWRkcmVzc2VzIGFyZSBoYW5kbGVkIG9yIGNvcGllZC5cXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGUgZGF0YSBzZW50IG92ZXIgdGhlIHNvY2tldCBvcmlnaW5hdGVzIGZyb20gdGhlIEJQRiBwcm9ncmFtLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCB3aGljaCBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gZXhwb3NlZCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow5x2xm[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 11:59:24 +0000 UTC FinishedAt: 2026-08-13 12:20:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3a59f11e0f989bdd637c87151992605a6559a7cb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_LSM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "3a59f11e0f989bdd637c87151992605a6559a7cb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "INET", "BPF_SYSCALL", "DEBUG_INFO_BTF", "BPF_LSM" ], "series_id": "f2a576c7-abfd-4479-884e-7a5ea562946e" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "net" ], "focus_symbols": [ "bpf_ksock_create", "bpf_ksock_connect", "bpf_ksock_acquire", "bpf_ksock_release", "bpf_ksock_send", "connect_socket", "bpf_ksock_release_dtor" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lORVQmIzM0OywKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OywKICAgICYjMzQ7REVCVUdfSU5GT19CVEYmIzM0OywKICAgICYjMzQ7QlBGX0xTTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9rc29ja19jcmVhdGUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2Nvbm5lY3QmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX2FjcXVpcmUmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3NlbmQmIzM0OywKICAgICYjMzQ7Y29ubmVjdF9zb2NrZXQmIzM0OywKICAgICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2VfZHRvciYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSAoYGJwZl9rc29ja2ApIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzIGZyb20gQlBGIHByb2dyYW1zLiBcblxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgYnBmX2tzb2NrYCwgYHN0cnVjdCBtc2doZHJgLCBgc3RydWN0IGt2ZWNgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gb3IgZGVjbGFyYXRpb24gKGUuZy4sIHVzaW5nIGBremFsbG9jX29iamAgb3IgZGVzaWduYXRlZCBpbml0aWFsaXplcnMpLlxuMi4gVGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgZnJvbSBCUEYgcHJvZ3JhbXMgKGBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCwgYHVuaW9uIGJwZl9rc29ja19hZGRyYCwgYW5kIHRoZSBzZW5kIGJ1ZmZlcikgYXJlIHZhbGlkYXRlZCBmb3Igc2l6ZSBieSB0aGUga2Z1bmMgd3JhcHBlcnMuIFRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciB0aGVzZSBhcmd1bWVudHMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCB0byB0aGUga2Z1bmNzLiBGdXJ0aGVybW9yZSwgS01TQU4gdW5wb2lzb25zIEJQRiBzdGFjayBhbmQgbWFwIG1lbW9yeSBieSBkZXNpZ24gc2luY2UgaXQgY2Fubm90IHRyYWNrIEpJVHRlZCBCUEYgZXhlY3V0aW9uLCBtZWFuaW5nIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgb3JpZ2luYXRpbmcgZnJvbSB0aGUgQlBGIHByb2dyYW0gaXRzZWxmLlxuMy4gVGhlIHJlZmFjdG9yaW5nIG9mIGBjb25uZWN0X3NvY2tldGAgbWVyZWx5IGV4dHJhY3RzIGV4aXN0aW5nIGxvZ2ljIHdpdGhvdXQgY2hhbmdpbmcgaG93IHNvY2tldCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgb3IgY29waWVkLlxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlIGRhdGEgc2VudCBvdmVyIHRoZSBzb2NrZXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBCUEYgcHJvZ3JhbS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIHdoaWNoIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBleHBvc2VkIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiBCUEYga2Z1bmNzIChicGZfa3NvY2tfY3JlYXRlLCBicGZfa3NvY2tfY29ubmVjdCwgYnBmX2tzb2NrX3NlbmQsIGV0Yy4pIHRoYXQgYWxsb3cgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSBhbmQgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgc29ja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwmIzM5O3MgQlBGIHN1YnN5c3RlbSBhbmQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUga2Z1bmNzIGFyZSBhY2Nlc3NpYmxlIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAobGlrZSBTWVNDQUxMIGFuZCBMU00gaG9va3MpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOTdjMDhhMTI5NzE1YWY4YjZiMzhmYWY4ZWE0MGJhYTgwOGU4OGQzY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDEzIDEyOjE3OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCAmIzQzOzEsMzYgQEBcbiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9CUEZfS1NPQ0tfSFxuJiM0MzsjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luNi5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAtIEJQRiBrZXJuZWwgc29ja2V0IGNyZWF0aW9uIHBhcmFtZXRlcnNcbiYjNDM7ICogQGZhbWlseTpcdEFkZHJlc3MgZmFtaWx5OiBBRl9JTkVUIG9yIEFGX0lORVQ2LlxuJiM0MzsgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4mIzQzOyAqIEBwcm90b2NvbDpcdFByb3RvY29sIG51bWJlciAoZS5nLiBJUFBST1RPX1VEUCksIG9yIDAgZm9yIHRoZSBkZWZhdWx0IHByb3RvY29sXG4mIzQzOyAqXHRcdG9mIHRoZSBnaXZlbiB0eXBlLlxuJiM0MzsgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XG4mIzQzO1x0X191OCBmYW1pbHk7XG4mIzQzO1x0X191OCB0eXBlO1xuJiM0MztcdF9fdTggcHJvdG9jb2w7XG4mIzQzO1x0X191OCByZXNlcnZlZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB1bmlvbiBicGZfa3NvY2tfYWRkciAtIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzc1xuJiM0MzsgKiBAc2luOiBJUHY0IHNvY2tldCBhZGRyZXNzLlxuJiM0MzsgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbiYjNDM7ICovXG4mIzQzO3VuaW9uIGJwZl9rc29ja19hZGRyIHtcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuJiM0MztcdHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfQlBGX0tTT0NLX0ggKi9cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuaW5kZXggMmE4ZDdiMTRmMWQxMS4uNWE1ZWIxMjUwMTAzMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcbkBAIC00NjEsNiAmIzQzOzQ2MSw4IEBAIGV4dGVybiBzdHJ1Y3QgZmlsZSAqX19zeXNfc29ja2V0X2ZpbGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGludCBwcm90b2NvbCk7XG4gZXh0ZXJuIGludCBfX3N5c19iaW5kKGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdW15YWRkciwgaW50IGFkZHJsZW4pO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdFx0ICAgICBpbnQgYWRkcmxlbik7XG4mIzQzO2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcbiYjNDM7XHRcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpO1xuIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcbiBcdFx0XHQgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpO1xuIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkcixcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IDYxZWY0MzMyNWM2ZjMuLjQzNTc2MGNhMDRjMzYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTQzNjksNiAmIzQzOzQzNjksOSBAQCBCVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcbiAjaWZkZWYgQ09ORklHX0NSWVBUT1xuIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxuICNlbmRpZlxuJiM0MzsjaWZkZWYgQ09ORklHX0lORVRcbiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuJiM0MzsjZW5kaWZcbiBCVEZfU0VUX0VORChyY3VfcHJvdGVjdGVkX3R5cGVzKVxuIFxuIHN0YXRpYyBib29sIHJjdV9wcm90ZWN0ZWRfb2JqZWN0KGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIGJ0Zl9pZClcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9NYWtlZmlsZSBiL25ldC9jb3JlL01ha2VmaWxlXG5pbmRleCBiM2ZkY2I0ZTM1NWZhLi5jMjBlNTIwMzU4YjhlIDEwMDY0NFxuLS0tIGEvbmV0L2NvcmUvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9jb3JlL01ha2VmaWxlXG5AQCAtNDQsNiAmIzQzOzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIub1xuIG9iai0kKENPTkZJR19ORVRfU09DS19NU0cpICYjNDM7PSBza21zZy5vXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gc29ja19tYXAub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm9cbiYjNDM7aWZkZWYgQ09ORklHX0lORVRcbiYjNDM7b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2tzb2NrLm9cbiYjNDM7ZW5kaWZcbiBvYmotJChDT05GSUdfT0YpXHQmIzQzOz0gb2ZfbmV0Lm9cbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICYjNDM7PSBuZXRfdGVzdC5vXG4gb2JqLSQoQ09ORklHX05FVF9ERVZNRU0pICYjNDM7PSBkZXZtZW0ub1xuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2JwZl9rc29jay5jIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5lOTk0M2FlZWFkZDMyXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfa3NvY2suY1xuQEAgLTAsMCAmIzQzOzEsMzI4IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX2tzb2NrLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvYnRmX2lkcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcmVmY291bnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zb2NrZXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvc29jay5oXHUwMDNlXG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IGJwZl9rc29jayAtIHJlZmNvdW50ZWQgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dFxuJiM0MzsgKiBAc29jazpcdFRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqIEB1c2FnZTpcdFJlZmVyZW5jZSBjb3VudGVyLlxuJiM0MzsgKiBAcndvcms6XHRSQ1Ugd29yayBmb3IgZGVmZXJyZWQgY2xlYW51cCAoc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXG4mIzQzOyAqL1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrIHtcbiYjNDM7XHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuJiM0MztcdHJlZmNvdW50X3QgdXNhZ2U7XG4mIzQzO1x0c3RydWN0IHJjdV93b3JrIHJ3b3JrO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQga3NvY2tfcmVsZWFzZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcbiYjNDM7XHRrcyA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xuJiM0MztcdHNvY2tfcmVsZWFzZShrcy1cdTAwM2Vzb2NrKTtcbiYjNDM7XHRrZnJlZShrcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKVxuJiM0MztcdCAqIGNsZWFyZWQgY3VycmVudC1cdTAwM2Vuc3Byb3h5LCB3aGlsZSBjdXJyZW50IGlzIHN0aWxsIG5vdCBhIGt0aHJlYWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0dXJuICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfS1RIUkVBRCkgXHUwMDI2XHUwMDI2IGN1cnJlbnQtXHUwMDNlbnNwcm94eTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKlxuJiM0MzsgKiBBbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgcmV0dXJuZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvclxuJiM0MzsgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIChzb2NrX2NyZWF0ZSksIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcbiYjNDM7ICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXG4mIzQzOyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrXG4mIzQzOyAqIGRvZXMgbm90IHJldGFpbiB0aGUgaW52b2tpbmcgdGFzayYjMzk7cyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC5cbiYjNDM7ICpcbiYjNDM7ICogQG9wdHM6XHRQb2ludGVyIHRvIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgd2l0aCBzb2NrZXQgcGFyYW1ldGVycy5cbiYjNDM7ICogQG9wdHNfX3N6Olx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXG4mIzQzOyAqIEBlcnJfX3VuaW5pdDpcdEludGVnZXIgdG8gc3RvcmUgZXJyb3IgY29kZSB3aGVuIE5VTEwgaXMgcmV0dXJuZWQuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbiYjNDM7YnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXG4mIzQzO1x0XHQgaW50ICplcnJfX3VuaW5pdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogc29ja19jcmVhdGUoKSBkZXJpdmVzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgY3JlZGVudGlhbHMsIGFuZCBjZ3JvdXBcbiYjNDM7XHQgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvXG4mIzQzO1x0ICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHtcbiYjNDM7XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xuJiM0MztcdFx0ZXJyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9wdHNfY29weSA9IChzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKXtcbiYjNDM7XHRcdC5mYW1pbHkgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VmYW1pbHkpLFxuJiM0MztcdFx0LnR5cGUgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2V0eXBlKSxcbiYjNDM7XHRcdC5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXByb3RvY29sKSxcbiYjNDM7XHRcdC5yZXNlcnZlZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkKSxcbiYjNDM7XHR9O1xuJiM0MztcbiYjNDM7XHRpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUNikge1xuJiM0MztcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7XG4mIzQzO1x0XHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xuJiM0MztcdFx0Z290byBlcnJfb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG9wdHNfY29weS5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHtcbiYjNDM7XHRcdGVyciA9IC1FUFJPVE9OT1NVUFBPUlQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRrcyA9IGt6YWxsb2Nfb2JqKCprcyk7XG4mIzQzO1x0aWYgKCFrcykge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LFxuJiM0MztcdCAqIHNvY2tldCBsYWJlbHMsIGFuZCB0aGUgYWN0aXZlIG5ldG5zIHJlZmVyZW5jZSBtYXRjaCBhIHNvY2tldCgyKVxuJiM0MztcdCAqIGNyZWF0ZWQgYnkgdGhlIEJQRiBwcm9ncmFtJiMzOTtzIGNhbGxlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRlcnIgPSBzb2NrX2NyZWF0ZShvcHRzX2NvcHkuZmFtaWx5LCBvcHRzX2NvcHkudHlwZSwgb3B0c19jb3B5LnByb3RvY29sLFxuJiM0MztcdFx0XHQgIFx1MDAyNmtzLVx1MDAzZXNvY2spO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcbiYjNDM7XHRrcy1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3JjdmJ1ZiA9IFNPQ0tfTUlOX1JDVkJVRjtcbiYjNDM7XHRrcy1cdTAwM2Vzb2NrLVx1MDAzZXNrLVx1MDAzZXNrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLO1xuJiM0MztcbiYjNDM7XHRyZWZjb3VudF9zZXQoXHUwMDI2a3MtXHUwMDNldXNhZ2UsIDEpO1xuJiM0MztcdHB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpO1xuJiM0MztcdHJldHVybiBrcztcbiYjNDM7XG4mIzQzO2Vycl9mcmVlOlxuJiM0MztcdGtmcmVlKGtzKTtcbiYjNDM7ZXJyX291dDpcbiYjNDM7XHRwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLlxuJiM0MzsgKiBAa3M6XHRcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LlxuJiM0MzsgKiBAYWRkcjpcdFBvaW50ZXIgdG8gYW4gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzLlxuJiM0MzsgKiBAYWRkcl9fc3o6XHRTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLlxuJiM0MzsgKlxuJiM0MzsgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIHdoaWxlIGNvbm5lY3RpbmcgdGhlIHNvY2tldCwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxuJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxuJiM0MztcdFx0XHRcdCAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG4mIzQzO1x0XHRcdFx0ICB1MzIgYWRkcl9fc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYTtcbiYjNDM7XHRpbnQgYWRkcmxlbjtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdGlmICghYWRkciB8fCBhZGRyX19zeiAhPSBzaXplb2YoKmFkZHIpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdC8qIEtmdW5jIG1lbW9yeSBhcmd1bWVudHMgbWF5IGJlIHVuYWxpZ25lZC4gKi9cbiYjNDM7XHRtZW1jcHkoXHUwMDI2c2EsIGFkZHIsIHNpemVvZigqYWRkcikpO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNhLnNzX2ZhbWlseSkge1xuJiM0MztcdGNhc2UgQUZfSU5FVDpcbiYjNDM7XHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgQUZfSU5FVDY6XG4mIzQzO1x0XHRhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVx1MDAzZXNvY2ssIFx1MDAyNnNhLCBhZGRybGVuLCAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9rc29ja19hY3F1aXJlKCkgLSBBY3F1aXJlIGEgcmVmZXJlbmNlIHRvIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4mIzQzOyAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxuJiM0MzsgKlx0dHJ1c3RlZCBwb2ludGVyIChlLmcuIFJDVS1wcm90ZWN0ZWQga3B0ciBmcm9tIGEgbWFwKS5cbiYjNDM7ICpcbiYjNDM7ICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbiYjNDM7ICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxuJiM0MzsgKi9cbiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXJlZmNvdW50X2luY19ub3RfemVybyhcdTAwMjZrcy1cdTAwM2V1c2FnZSkpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRyZXR1cm4ga3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxuJiM0MzsgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIHRoZSBmaW5hbCByZWZlcmVuY2UgaXMgcmVsZWFzZWQsIHRoZSBzb2NrZXQgaXMgY2xlYW5lZCB1cCB2aWFcbiYjNDM7ICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZrcy1cdTAwM2V1c2FnZSkpIHtcbiYjNDM7XHRcdElOSVRfUkNVX1dPUksoXHUwMDI2a3MtXHUwMDNlcndvcmssIGtzb2NrX3JlbGVhc2Vfd29ya19mbik7XG4mIzQzO1x0XHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZrcy1cdTAwM2Vyd29yayk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpXG4mIzQzO3tcbiYjNDM7XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO31cbiYjNDM7Q0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC5cbiYjNDM7ICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuXG4mIzQzOyAqIEBkYXRhOlx0UG9pbnRlciB0byB0aGUgZGF0YSB0byBzZW5kLlxuJiM0MzsgKiBAZGF0YV9fc3o6XHRTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQuXG4mIzQzOyAqXG4mIzQzOyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwXG4mIzQzOyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXG4mIzQzO1x0XHRcdCAgICAgICB1MzIgZGF0YV9fc3opXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbiYjNDM7XHRcdC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3Qga3ZlYyBpb3YgPSB7XG4mIzQzO1x0XHQuaW92X2Jhc2UgPSAodm9pZCAqKWRhdGEsXG4mIzQzO1x0XHQuaW92X2xlbiA9IGRhdGFfX3N6LFxuJiM0MztcdH07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1xuJiM0MztcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4mIzQzO1xuJiM0MztCVEZfS0ZVTkNTX1NUQVJUKGtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSlcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4mIzQzO0JURl9LRlVOQ1NfRU5EKGtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcylcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19pbml0X2tmdW5jX3NldCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2UsIEtGX1JFTEVBU0UpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfYWNxdWlyZSwgS0ZfQUNRVUlSRSB8IEtGX1JDVSB8IEtGX1JFVF9OVUxMKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSlcbiYjNDM7QlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbiYjNDM7XG4mIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuJiM0MztCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbiYjNDM7I2VuZGlmXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1lTQ0FMTClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNXG4mIzQzO1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcHJvZy1cdTAwM2VhdXgtXHUwMDNlYXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVBQ0NFUztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2tmdW5jX3NldCA9IHtcbiYjNDM7XHQub3duZXIgPSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0ID0gXHUwMDI2a3NvY2tfa2Z1bmNfYnRmX2lkcyxcbiYjNDM7XHQuZmlsdGVyID0gYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0JURl9JRF9MSVNUKGJwZl9rc29ja19kdG9yX2lkcylcbiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbiYjNDM7XHRcdHtcbiYjNDM7XHRcdFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcbiYjNDM7XHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbiYjNDM7XHRcdH0sXG4mIzQzO1x0fTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXG4mIzQzO1x0XHRcdFx0XHRcdTAwMjZrc29ja19pbml0X2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIFx1MDAyNmtzb2NrX2tmdW5jX3NldCk7XG4mIzQzO1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbiYjNDM7XHRyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgQVJSQVlfU0laRShicGZfa3NvY2tfZHRvcnMpLFxuJiM0MztcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7bGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi41YjAyZTYyMTdjNjgwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgJiM0MzsyMTAzLDIwIEBAIFNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXG4gXHRyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApO1xuIH1cbiBcbiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuJiM0MztcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncylcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLFxuJiM0MztcdFx0XHRcdCAgICAgIGFkZHJsZW4pO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGFkZHJsZW4sIGZsYWdzKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqXHRBdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSBzb2NrZXQgd2l0aCB0aGUgc2VydmVyIGFkZHJlc3MuICBUaGUgYWRkcmVzc1xuICAqXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXG5AQCAtMjExOSwyMyAmIzQzOzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG4gXHRcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXG4ge1xuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbi1cdGludCBlcnI7XG4gXG4gXHRzb2NrID0gc29ja19mcm9tX2ZpbGUoZmlsZSk7XG4tXHRpZiAoIXNvY2spIHtcbi1cdFx0ZXJyID0gLUVOT1RTT0NLO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbi1cbi1cdGVyciA9XG4tXHQgICAgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pO1xuLVx0aWYgKGVycilcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0aWYgKCFzb2NrKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9UU09DSztcbiBcbi1cdGVyciA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICAgYWRkcmxlbiwgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxuJiM0MztcdFx0XHQgICAgICBzb2NrLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xuIH1cbiBcbiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkciwgaW50IGFkZHJsZW4pXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5kZDZiMTY3NjIzZDk0XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5AQCAtMCwwICYjNDM7MSwxMzAgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXJwYS9pbmV0LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3Rlc3RfcHJvZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtuZXR3b3JrX2hlbHBlcnMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtrc29ja19sc20uc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX2xzbV92ZXJpZmllci5za2VsLmhcJiMzNDtcbiYjNDM7XG4mIzQzOyNkZWZpbmUgTlNfVEVTVCBcJiMzNDtrc29ja19sc21fbnNcJiMzNDtcbiYjNDM7I2RlZmluZSBSRUNWX1BPUlQgNzc3N1xuJiM0MzsjZGVmaW5lIFJFQ1ZfVElNRU9VVF9TRUMgNVxuJiM0MztcbiYjNDM7c3RydWN0IGtzb2NrX3Rlc3RfZW52IHtcbiYjNDM7XHRzdHJ1Y3QgbnN0b2tlbiAqbnN0b2tlbjtcbiYjNDM7XHRpbnQgcmZkO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkciA9IHtcbiYjNDM7XHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuJiM0MztcdFx0LnNpbl9wb3J0ID0gaHRvbnMoUkVDVl9QT1JUKSxcbiYjNDM7XHR9O1xuJiM0MztcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9O1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdG1lbXNldChlbnYsIDAsIHNpemVvZigqZW52KSk7XG4mIzQzO1x0ZW52LVx1MDAzZXJmZCA9IC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhtYWtlX25ldG5zKE5TX1RFU1QpLCBcJiMzNDttYWtlX25ldG5zXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuJiM0MztcdGlmICghQVNTRVJUX09LX1BUUihlbnYtXHUwMDNlbnN0b2tlbiwgXCYjMzQ7b3Blbl9uZXRuc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGVudi1cdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKGVudi1cdTAwM2VyZmQsIFwmIzM0O3JlY2VpdmVyIHNvY2tldFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdGVyciA9IGJpbmQoZW52LVx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtiaW5kIHJlY2VpdmVyXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7c2V0IHJjdnRpbWVvXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuJiM0MztcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4mIzQzO1x0c3RydWN0IHNvY2thZGRyX2luIHRyaWdnZXJfYWRkciA9IHtcbiYjNDM7XHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbiYjNDM7XHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGtzb2NrX2xzbSAqc2tlbDtcbiYjNDM7XHRjaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSldID0ge307XG4mIzQzO1x0c3NpemVfdCBuO1xuJiM0MztcdGludCB0ZmQgPSAtMTtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRza2VsID0ga3NvY2tfbHNtX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O3NrZWwgb3Blbl9hbmRfbG9hZFwmIzM0OykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmICgha3NvY2tfdGVzdF9lbnZfc2V0dXAoXHUwMDI2ZW52KSlcbiYjNDM7XHRcdGdvdG8gZmFpbDtcbiYjNDM7XG4mIzQzO1x0LyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovXG4mIzQzO1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuJiM0MztcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXJlbW90ZV9wb3J0ID0gUkVDVl9QT1JUO1xuJiM0MztcdGVyciA9IGJwZl9wcm9nX3Rlc3RfcnVuX29wdHMoYnBmX3Byb2dyYW1fX2ZkKHNrZWwtXHUwMDNlcHJvZ3Mua3NvY2tfc2V0dXApLFxuJiM0MztcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcJiMzNDtrc29ja19zZXR1cCBydW5cJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcJiMzNDtrc29ja19zZXR1cCByZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfYmluZCBmcm9tIHVzZXJzcGFjZSAqL1xuJiM0MztcdHNrZWwtXHUwMDNlbGlua3Mua3NvY2tfc29ja2V0X2JpbmQgPVxuJiM0MztcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXHUwMDNlbGlua3Mua3NvY2tfc29ja2V0X2JpbmQsXG4mIzQzO1x0XHRcdCAgIFwmIzM0O2F0dGFjaCBzb2NrZXRfYmluZCBsc21cJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHR0ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuJiM0MztcdGlmICghQVNTRVJUX09LX0ZEKHRmZCwgXCYjMzQ7dHJpZ2dlciBzb2NrZXRcJiMzNDspKVxuJiM0MztcdFx0Z290byBmYWlsO1xuJiM0MztcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gZ2V0cGlkKCk7XG4mIzQzO1x0ZXJyID0gYmluZCh0ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcdTAwMjZ0cmlnZ2VyX2FkZHIsIHNpemVvZih0cmlnZ2VyX2FkZHIpKTtcbiYjNDM7XHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbiYjNDM7XHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwmIzM0O3RyaWdnZXIgYmluZFwmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9yZXQsIHNpemVvZihza2VsLVx1MDAzZWRhdGEtXHUwMDNlc2VuZF9kYXRhKSxcbiYjNDM7XHRcdCAgICAgICBcJiMzNDtMU00gc2VuZCBieXRlc1wmIzM0OykpXG4mIzQzO1x0XHRnb3RvIGZhaWw7XG4mIzQzO1xuJiM0MztcdG4gPSByZWN2ZnJvbShlbnYucmZkLCByZWN2X2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLCAwLCBOVUxMLCBOVUxMKTtcbiYjNDM7XHRpZiAoQVNTRVJUX0VRKG4sIHNpemVvZihyZWN2X2RhdGEpLCBcJiMzNDtyZWN2ZnJvbSBsZW5cJiMzNDspKVxuJiM0MztcdFx0QVNTRVJUX01FTUVRKHJlY3ZfZGF0YSwgc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksXG4mIzQzO1x0XHRcdCAgICAgXCYjMzQ7cGF5bG9hZCBtYXRjaFwmIzM0Oyk7XG4mIzQzO1xuJiM0MztmYWlsOlxuJiM0MztcdGlmICh0ZmQgXHUwMDNlPSAwKVxuJiM0MztcdFx0Y2xvc2UodGZkKTtcbiYjNDM7XHRpZiAoZW52LnJmZCBcdTAwM2U9IDApXG4mIzQzO1x0XHRjbG9zZShlbnYucmZkKTtcbiYjNDM7XHRpZiAoZW52Lm5zdG9rZW4pXG4mIzQzO1x0XHRjbG9zZV9uZXRucyhlbnYubnN0b2tlbik7XG4mIzQzO1x0cmVtb3ZlX25ldG5zKE5TX1RFU1QpO1xuJiM0MztcdGtzb2NrX2xzbV9fZGVzdHJveShza2VsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCB0ZXN0X2tzb2NrX2xzbV92ZXJpZmllcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0UlVOX1RFU1RTKGtzb2NrX2xzbV92ZXJpZmllcik7XG4mIzQzO31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2ZGMyMGI4Zjk1YmJcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcbkBAIC0wLDAgJiM0MzsxLDQ1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcJiMzNDt0ZXN0X3Byb2dzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfd3Euc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIENBTExCQUNLX1dBSVRfUkVUUklFUyAxMDAwXG4mIzQzOyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9VUyAxMDAwXG4mIzQzO1xuJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfd3Eodm9pZClcbiYjNDM7e1xuJiM0MztcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbiYjNDM7XHRzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7XG4mIzQzO1x0dTMyIGNhbGxiYWNrX2RvbmU7XG4mIzQzO1x0aW50IGVyciwgaTtcbiYjNDM7XG4mIzQzO1x0c2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7XG4mIzQzO1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwmIzM0O2tzb2NrX3dxIG9wZW4gYW5kIGxvYWRcJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSxcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNm9wdHMpO1xuJiM0MztcdGlmICghQVNTRVJUX09LKGVyciwgXCYjMzQ7cnVuIGtzb2NrX3dxX3N0YXJ0XCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcJiMzNDtrc29ja193cV9zdGFydCByZXR2YWxcJiMzNDspKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIENBTExCQUNLX1dBSVRfUkVUUklFUzsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGlmIChfX2F0b21pY19sb2FkX24oXHUwMDI2c2tlbC1cdTAwM2Vic3MtXHUwMDNlY2FsbGJhY2tfZG9uZSwgX19BVE9NSUNfQUNRVUlSRSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0dXNsZWVwKENBTExCQUNLX1dBSVRfVVMpO1xuJiM0MztcdH1cbiYjNDM7XHRjYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsXG4mIzQzO1x0XHRcdFx0XHRfX0FUT01JQ19BQ1FVSVJFKTtcbiYjNDM7XHRpZiAoIUFTU0VSVF9FUShjYWxsYmFja19kb25lLCAxLCBcJiMzNDt3b3JrcXVldWUgY2FsbGJhY2sgY29tcGxldGVkXCYjMzQ7KSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfRVEoc2tlbC1cdTAwM2Vic3MtXHUwMDNlY3JlYXRlX2VyciwgLUVPUE5PVFNVUFAsXG4mIzQzO1x0XHQgIFwmIzM0O3dvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcJiMzNDspO1xuJiM0MztcbiYjNDM7b3V0OlxuJiM0MztcdGtzb2NrX3dxX19kZXN0cm95KHNrZWwpO1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMDFlZGFlYjlmZGQ0YVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXG5AQCAtMCwwICYjNDM7MSw3OCBAQFxuJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSFxuJiM0MzsjZGVmaW5lIF9LU09DS19DT01NT05fSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZXJybm8uaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBTT0NLX0RHUkFNXHQyXG4mIzQzOyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4mIzQzO1xuJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsXG4mIzQzO1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4mIzQzO2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXG4mIzQzO1x0XHQgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTtcbiYjNDM7c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xuJiM0MztpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltO1xuJiM0Mzt2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbiYjNDM7dm9pZCBicGZfcmN1X3JlYWRfdW5sb2NrKHZvaWQpIF9fa3N5bTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSB7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3Qge1xuJiM0MztcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xuJiM0MztcdF9fdHlwZShrZXksIGludCk7XG4mIzQzO1x0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xuJiM0MztcdF9fdWludChtYXhfZW50cmllcywgMSk7XG4mIzQzO30gX19rc29ja19jdHhfbWFwIFNFQyhcJiMzNDsubWFwc1wmIzM0Oyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGtleSA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKFx1MDAyNl9fa3NvY2tfY3R4X21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2tzb2NrICprc29ja19jdHhfZ2V0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3MgPSBOVUxMLCAqdG1wO1xuJiM0MztcbiYjNDM7XHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuJiM0MztcdGlmICghdilcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRicGZfcmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHRtcCA9IHYtXHUwMDNlY3R4O1xuJiM0MztcdGlmICh0bXApXG4mIzQzO1x0XHRrcyA9IGJwZl9rc29ja19hY3F1aXJlKHRtcCk7XG4mIzQzO1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4ga3M7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKm9sZDtcbiYjNDM7XG4mIzQzO1x0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcbiYjNDM7XHRpZiAoIXYpIHtcbiYjNDM7XHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZCA9IGJwZl9rcHRyX3hjaGcoXHUwMDI2di1cdTAwM2VjdHgsIGN0eCk7XG4mIzQzO1x0aWYgKG9sZCkge1xuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfS1NPQ0tfQ09NTU9OX0ggKi9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45ODA4NDUxMDk4ZWZiXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmNcbkBAIC0wLDAgJiM0MzsxLDcyIEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4mIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O3ZtbGludXguaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX3RyYWNpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2VuZGlhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl90cmFjaW5nX25ldC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSBcJiMzNDtoZWxsbyBmcm9tIGJwZiBrc29ja1wmIzM0OztcbiYjNDM7XG4mIzQzO19fYmUzMiBpcHY0X3JlbW90ZTtcbiYjNDM7X191MTYgcmVtb3RlX3BvcnQ7XG4mIzQzO2ludCB0YXJnZXRfcGlkO1xuJiM0MztpbnQgc2VuZF9yZXQgPSAtMTtcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzeXNjYWxsXCYjMzQ7KVxuJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuJiM0MztcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0Y3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDtcbiYjNDM7XHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbiYjNDM7XHRjcmVhdGVfb3B0cy5wcm90b2NvbCA9IElQUFJPVE9fVURQO1xuJiM0MztcbiYjNDM7XHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4mIzQzO1x0aWYgKCFrcylcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdGFkZHIuc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xuJiM0MztcdGFkZHIuc2luLnNpbl9wb3J0ID0gYnBmX2h0b25zKHJlbW90ZV9wb3J0KTtcbiYjNDM7XHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsIFx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGtzb2NrX2N0eF9pbnNlcnQoa3MpO1xuJiM0MztcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O2xzbS5zL3NvY2tldF9iaW5kXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X2JpbmQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcyxcbiYjNDM7XHQgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4mIzQzO1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCB8fCBwaWQgIT0gdGFyZ2V0X3BpZClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGtzID0ga3NvY2tfY3R4X2dldCgpO1xuJiM0MztcdGlmICgha3MpIHtcbiYjNDM7XHRcdHNlbmRfcmV0ID0gLUVOT0VOVDtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzZW5kX3JldCA9IGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbiYjNDM7XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkMmNjZmRiNTgwMjBcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xuQEAgLTAsMCAmIzQzOzEsMzUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7a3NvY2tfY29tbW9uLmhcJiMzNDtcbiYjNDM7XG4mIzQzO2NoYXIgc2VuZF9kYXRhWzExXSA9IFwmIzM0O2R1bW15IGRhdGFcJiMzNDs7XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7bHNtLnMvc29ja2V0X3NlbmRtc2dcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7YnBmX2tzb2NrX3NlbmQgaXMgcmVqZWN0ZWQgZnJvbSBzb2NrZXRfc2VuZG1zZyBMU00gaG9va1wmIzM0OylcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9rc29ja19zZW5kIGlzIG5vdCBhbGxvd2VkXCYjMzQ7KVxuJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbiYjNDM7XHQgICAgIGludCBzaXplLCBpbnQgcmV0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuJiM0MztcbiYjNDM7XHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuJiM0MztcdGlmICghdilcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGtzID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgTlVMTCk7XG4mIzQzO1x0aWYgKCFrcylcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcbiYjNDM7XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xuQEAgLTAsMCAmIzQzOzEsNjIgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7dm1saW51eC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9leHBlcmltZW50YWwuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDticGZfdHJhY2luZ19uZXQuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlcnJuby5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2tzb2NrX2NvbW1vbi5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUge1xuJiM0MztcdHN0cnVjdCBicGZfd3Egd29yaztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB7XG4mIzQzO1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAxKTtcbiYjNDM7XHRfX3R5cGUoa2V5LCB1MzIpO1xuJiM0MztcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtzb2NrX3dxX3ZhbHVlKTtcbiYjNDM7fSB3b3JrX21hcCBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7aW50IGNyZWF0ZV9lcnI7XG4mIzQzO3UzMiBjYWxsYmFja19kb25lO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcbiYjNDM7XHRcdC5mYW1pbHkgPSBBRl9JTkVULFxuJiM0MztcdFx0LnR5cGUgPSBTT0NLX0RHUkFNLFxuJiM0MztcdFx0LnByb3RvY29sID0gSVBQUk9UT19VRFAsXG4mIzQzO1x0fTtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbiYjNDM7XHRpbnQgZXJyID0gMDtcbiYjNDM7XG4mIzQzO1x0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbiYjNDM7XHRpZiAoa3MpXG4mIzQzO1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4mIzQzO1x0Y3JlYXRlX2VyciA9IGVycjtcbiYjNDM7XHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcdTAwMjZjYWxsYmFja19kb25lLCAxKTtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO2ludCBrc29ja193cV9zdGFydCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgKnZhbHVlO1xuJiM0MztcdHUzMiBrZXkgPSAwO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZ3b3JrX21hcCwgXHUwMDI2a2V5KTtcbiYjNDM7XHRpZiAoIXZhbHVlKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0ZXJyID0gYnBmX3dxX2luaXQoXHUwMDI2dmFsdWUtXHUwMDNld29yaywgXHUwMDI2d29ya19tYXAsIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdGVyciA9IGJwZl93cV9zZXRfY2FsbGJhY2soXHUwMDI2dmFsdWUtXHUwMDNld29yaywga3NvY2tfd3FfY2FsbGJhY2ssIDApO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRyZXR1cm4gZXJyO1xuJiM0MztcdHJldHVybiBicGZfd3Ffc3RhcnQoXHUwMDI2dmFsdWUtXHUwMDNld29yaywgMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlX2R0b3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzZXQgb2YgQlBGIGtmdW5jcyAoYnBmX2tzb2NrX2NyZWF0ZSwgYnBmX2tzb2NrX2Nvbm5lY3QsIGJwZl9rc29ja19zZW5kLCBldGMuKSB0aGF0IGFsbG93IEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0gYW5kIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGtmdW5jcyBhcmUgYWNjZXNzaWJsZSBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKGxpa2UgU1lTQ0FMTCBhbmQgTFNNIGhvb2tzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxNzoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmNiMzg3ZmI3NWU0M2IKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oCkBAIC0wLDAgJiM0MzsxLDM2IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9CUEZfS1NPQ0tfSAomIzQzOyNkZWZpbmUgX0JQRl9LU09DS19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzCiYjNDM7ICogQGZhbWlseToJQWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuCiYjNDM7ICogQHR5cGU6CVNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuCiYjNDM7ICogQHByb3RvY29sOglQcm90b2NvbCBudW1iZXIgKGUuZy4gSVBQUk9UT19VRFApLCBvciAwIGZvciB0aGUgZGVmYXVsdCBwcm90b2NvbAomIzQzOyAqCQlvZiB0aGUgZ2l2ZW4gdHlwZS4KJiM0MzsgKiBAcmVzZXJ2ZWQ6CU11c3QgYmUgemVyby4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCiYjNDM7ICovCiYjNDM7c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7CiYjNDM7CV9fdTggZmFtaWx5OwomIzQzOwlfX3U4IHR5cGU7CiYjNDM7CV9fdTggcHJvdG9jb2w7CiYjNDM7CV9fdTggcmVzZXJ2ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB1bmlvbiBicGZfa3NvY2tfYWRkciAtIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcwomIzQzOyAqIEBzaW46IElQdjQgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICogQHNpbjY6IElQdjYgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICovCiYjNDM7dW5pb24gYnBmX2tzb2NrX2FkZHIgewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX0JQRl9LU09DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTQ2MSw2ICYjNDM7NDYxLDggQEAgZXh0ZXJuIHN0cnVjdCBmaWxlICpfX3N5c19zb2NrZXRfZmlsZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsKIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTsKIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsCiAJCQkgICAgIGludCBhZGRybGVuKTsKJiM0MztpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsCiYjNDM7CQkgICBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwKIAkJCSAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7CiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNDM2OSw2ICYjNDM7NDM2OSw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KQogI2lmZGVmIENPTkZJR19DUllQVE8KIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KQogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19JTkVUCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzOyNlbmRpZgogQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcykKIAogc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCBiM2ZkY2I0ZTM1NWZhLi5jMjBlNTIwMzU4YjhlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtNDQsNiAmIzQzOzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIubwogb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm8KIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm8KIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm8KJiM0MztpZmRlZiBDT05GSUdfSU5FVAomIzQzO29iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9rc29jay5vCiYjNDM7ZW5kaWYKIG9iai0kKENPTkZJR19PRikJJiM0Mzs9IG9mX25ldC5vCiBvYmotJChDT05GSUdfTkVUX1RFU1QpICYjNDM7PSBuZXRfdGVzdC5vCiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgJiM0Mzs9IGRldm1lbS5vCmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmU5OTQzYWVlYWRkMzIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfa3NvY2suYwpAQCAtMCwwICYjNDM7MSwzMjggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmX2tzb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idGZfaWRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zb2NrZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQKJiM0MzsgKiBAc29jazoJVGhlIHVuZGVybHlpbmcga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAdXNhZ2U6CVJlZmVyZW5jZSBjb3VudGVyLgomIzQzOyAqIEByd29yazoJUkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLgomIzQzOyAqLwomIzQzO3N0cnVjdCBicGZfa3NvY2sgewomIzQzOwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwomIzQzOwlyZWZjb3VudF90IHVzYWdlOwomIzQzOwlzdHJ1Y3QgcmN1X3dvcmsgcndvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CWtzID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgYnBmX2tzb2NrLCByd29yayk7CiYjNDM7CXNvY2tfcmVsZWFzZShrcy0mZ3Q7c29jayk7CiYjNDM7CWtmcmVlKGtzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKQomIzQzOwkgKiBjbGVhcmVkIGN1cnJlbnQtJmd0O25zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhKGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpICZhbXA7JmFtcDsgY3VycmVudC0mZ3Q7bnNwcm94eTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEga2VybmVsIHNvY2tldC4KJiM0MzsgKgomIzQzOyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yCiYjNDM7ICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZAomIzQzOyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLgomIzQzOyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrCiYjNDM7ICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJiMzOTtzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogQG9wdHM6CVBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLgomIzQzOyAqIEBvcHRzX19zejoJU2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuCiYjNDM7ICogQGVycl9fdW5pbml0OglJbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKgomIzQzO2JwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LAomIzQzOwkJIGludCAqZXJyX191bmluaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHNvY2tfY3JlYXRlKCkgZGVyaXZlcyB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGNyZWRlbnRpYWxzLCBhbmQgY2dyb3VwCiYjNDM7CSAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG8KJiM0MzsJICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uCiYjNDM7CSAqLwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkgewomIzQzOwkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7CiYjNDM7CQkuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtJmd0O2ZhbWlseSksCiYjNDM7CQkudHlwZSA9IFJFQURfT05DRShvcHRzLSZndDt0eXBlKSwKJiM0MzsJCS5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLSZndDtwcm90b2NvbCksCiYjNDM7CQkucmVzZXJ2ZWQgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgJmFtcDsmYW1wOyBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7CiYjNDM7CQllcnIgPSAtRUFGTk9TVVBQT1JUOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7CiYjNDM7CQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkucHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgJmFtcDsmYW1wOyBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlrcyA9IGt6YWxsb2Nfb2JqKCprcyk7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LAomIzQzOwkgKiBzb2NrZXQgbGFiZWxzLCBhbmQgdGhlIGFjdGl2ZSBuZXRucyByZWZlcmVuY2UgbWF0Y2ggYSBzb2NrZXQoMikKJiM0MzsJICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0mIzM5O3MgY2FsbGVyLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCwKJiM0MzsJCQkgICZhbXA7a3MtJmd0O3NvY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsKJiM0MzsJa3MtJmd0O3NvY2stJmd0O3NrLSZndDtza19yY3ZidWYgPSBTT0NLX01JTl9SQ1ZCVUY7CiYjNDM7CWtzLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7CiYjNDM7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2tzLSZndDt1c2FnZSwgMSk7CiYjNDM7CXB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CWtmcmVlKGtzKTsKJiM0MztlcnJfb3V0OgomIzQzOwlwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLgomIzQzOyAqIEBrczoJCVRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LgomIzQzOyAqIEBhZGRyOglQb2ludGVyIHRvIGFuIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcy4KJiM0MzsgKiBAYWRkcl9fc3o6CVNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uCiYjNDM7ICoKJiM0MzsgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWQKJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsCiYjNDM7CQkJCSAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsCiYjNDM7CQkJCSAgdTMyIGFkZHJfX3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7CiYjNDM7CWludCBhZGRybGVuOwomIzQzOwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqLwomIzQzOwltZW1jcHkoJmFtcDtzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7CiYjNDM7CWNhc2UgQUZfSU5FVDoKJiM0MzsJCWFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFGX0lORVQ2OgomIzQzOwkJYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLSZndDtzb2NrLCAmYW1wO3NhLCBhZGRybGVuLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAa3M6CVRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYQomIzQzOyAqCXRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYWNxdWlyZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvcgomIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykKJiM0Mzt7CiYjNDM7CWlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7a3MtJmd0O3VzYWdlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOglUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLgomIzQzOyAqCiYjNDM7ICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhCiYjNDM7ICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykKJiM0Mzt7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtrcy0mZ3Q7dXNhZ2UpKSB7CiYjNDM7CQlJTklUX1JDVV9XT1JLKCZhbXA7a3MtJmd0O3J3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pOwomIzQzOwkJcXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgJmFtcDtrcy0mZ3Q7cndvcmspOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcykKJiM0Mzt7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0Mzt9CiYjNDM7Q0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAa3M6CQlUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuCiYjNDM7ICogQGRhdGE6CVBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC4KJiM0MzsgKiBAZGF0YV9fc3o6CVNpemUgb2YgdGhlIGRhdGEgdG8gc2VuZC4KJiM0MzsgKgomIzQzOyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwCiYjNDM7ICogKGtlcm5lbF9zZW5kbXNnKSwgc28gaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCSAgICAgICB1MzIgZGF0YV9fc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKJiM0MzsJCS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBrdmVjIGlvdiA9IHsKJiM0MzsJCS5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSwKJiM0MzsJCS5pb3ZfbGVuID0gZGF0YV9fc3osCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy0mZ3Q7c29jaywgJmFtcDttc2csICZhbXA7aW92LCAxLCBkYXRhX19zeik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLAomIzQzO307CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzO0JURl9JRF9MSVNUX1NJTkdMRShicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkLCBmdW5jLCBicGZfbHNtX3NvY2tldF9zZW5kbXNnKQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDtrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNCiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNICZhbXA7JmFtcDsKJiM0MzsJICAgIHByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXJldHVybiAtRUFDQ0VTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfa2Z1bmNfYnRmX2lkcywKJiM0MzsJLmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsCiYjNDM7fTsKJiM0MzsKJiM0MztCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzO0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7CiYjNDM7CQl7CiYjNDM7CQkJLmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSwKJiM0MzsJCQkua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLAomIzQzOwkJfSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkmYW1wO2tzb2NrX2luaXRfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLAomIzQzOwkJCQkJICAgICAgICZhbXA7a3NvY2tfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sCiYjNDM7CQkJCQkgICAgICAgJmFtcDtrc29ja19rZnVuY19zZXQpOwomIzQzOwlyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsCiYjNDM7CQkJCQkJICBBUlJBWV9TSVpFKGJwZl9rc29ja19kdG9ycyksCiYjNDM7CQkJCQkJICBUSElTX01PRFVMRSk7CiYjNDM7fQomIzQzOwomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLjViMDJlNjIxN2M2ODAgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIxMDMsNiAmIzQzOzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkciwKIAlyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApOwogfQogCiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAomIzQzOwkJICAgaW50IGFkZHJsZW4sIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLAomIzQzOwkJCQkgICAgICBhZGRybGVuKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAomIzQzOwkJCQkJICAgICBhZGRybGVuLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoKICAqCUF0dGVtcHQgdG8gY29ubmVjdCB0byBhIHNvY2tldCB3aXRoIHRoZSBzZXJ2ZXIgYWRkcmVzcy4gIFRoZSBhZGRyZXNzCiAgKglpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuCkBAIC0yMTE5LDIzICYjNDM7MjEzMywxMyBAQCBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcywKIAkJICAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncykKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCWludCBlcnI7CiAKIAlzb2NrID0gc29ja19mcm9tX2ZpbGUoZmlsZSk7Ci0JaWYgKCFzb2NrKSB7Ci0JCWVyciA9IC1FTk9UU09DSzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0KLQkgICAgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIXNvY2spCiYjNDM7CQlyZXR1cm4gLUVOT1RTT0NLOwogCi0JZXJyID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcywKLQkJCQkJICAgIGFkZHJsZW4sIHNvY2stJmd0O2ZpbGUtJmd0O2ZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTsKLW91dDoKLQlyZXR1cm4gZXJyOwomIzQzOwlyZXR1cm4gY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbiwKJiM0MzsJCQkgICAgICBzb2NrLSZndDtmaWxlLSZndDtmX2ZsYWdzIHwgZmlsZV9mbGFncyk7CiB9CiAKIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRkNmIxNjc2MjNkOTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCkBAIC0wLDAgJiM0MzsxLDEzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXR3b3JrX2hlbHBlcnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja19sc20uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2xzbV92ZXJpZmllci5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfVEVTVCAmIzM0O2tzb2NrX2xzbV9ucyYjMzQ7CiYjNDM7I2RlZmluZSBSRUNWX1BPUlQgNzc3NwomIzQzOyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1CiYjNDM7CiYjNDM7c3RydWN0IGtzb2NrX3Rlc3RfZW52IHsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW47CiYjNDM7CWludCByZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBrc29ja190ZXN0X2Vudl9zZXR1cChzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0gewomIzQzOwkJLnNpbl9mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksCiYjNDM7CQkuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUMgfTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJbWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTsKJiM0MzsJZW52LSZndDtyZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhOU19URVNUKSwgJiMzNDttYWtlX25ldG5zJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllbnYtJmd0O25zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZW52LSZndDtuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7cmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoZW52LSZndDtyZmQsICYjMzQ7cmVjZWl2ZXIgc29ja2V0JiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSBiaW5kKGVudi0mZ3Q7cmZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCBzaXplb2YoYWRkcikpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YmluZCByZWNlaXZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJZXJyID0gc2V0c29ja29wdChlbnYtJmd0O3JmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sICZhbXA7dHYsIHNpemVvZih0dikpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0IHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja19sc20odm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIHRyaWdnZXJfYWRkciA9IHsKJiM0MzsJCS5zaW5fZmFtaWx5ID0gQUZfSU5FVCwKJiM0MzsJCS5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qga3NvY2tfbHNtICpza2VsOwomIzQzOwljaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKV0gPSB7fTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwlpbnQgdGZkID0gLTE7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSBrc29ja19sc21fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKCZhbXA7ZW52KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlbW90ZV9wb3J0ID0gUkVDVl9QT1JUOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5rc29ja19zZXR1cCksCiYjNDM7CQkJCSAgICAgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2tzb2NrX3NldHVwIHJ1biYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7a3NvY2tfc2V0dXAgcmV0dmFsJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfYmluZCBmcm9tIHVzZXJzcGFjZSAqLwomIzQzOwlza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfYmluZCA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsLSZndDtwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfYmluZCwKJiM0MzsJCQkgICAmIzM0O2F0dGFjaCBzb2NrZXRfYmluZCBsc20mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHRmZCwgJiMzNDt0cmlnZ2VyIHNvY2tldCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CWVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDt0cmlnZ2VyX2FkZHIsIHNpemVvZih0cmlnZ2VyX2FkZHIpKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gMDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3RyaWdnZXIgYmluZCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAzOiBWZXJpZnkgdGhlIExTTSBob29rIHNlbnQgdGhlIG5vdGlmaWNhdGlvbiAqLwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtzZW5kX3JldCwgc2l6ZW9mKHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSksCiYjNDM7CQkgICAgICAgJiMzNDtMU00gc2VuZCBieXRlcyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJbiA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoQVNTRVJUX0VRKG4sIHNpemVvZihyZWN2X2RhdGEpLCAmIzM0O3JlY3Zmcm9tIGxlbiYjMzQ7KSkKJiM0MzsJCUFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksCiYjNDM7CQkJICAgICAmIzM0O3BheWxvYWQgbWF0Y2gmIzM0Oyk7CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJaWYgKHRmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UodGZkKTsKJiM0MzsJaWYgKGVudi5yZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGVudi5yZmQpOwomIzQzOwlpZiAoZW52Lm5zdG9rZW4pCiYjNDM7CQljbG9zZV9uZXRucyhlbnYubnN0b2tlbik7CiYjNDM7CXJlbW92ZV9uZXRucyhOU19URVNUKTsKJiM0MzsJa3NvY2tfbHNtX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfbHNtX3ZlcmlmaWVyKHZvaWQpCiYjNDM7ewomIzQzOwlSVU5fVEVTVFMoa3NvY2tfbHNtX3ZlcmlmaWVyKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNmRjMjBiOGY5NWJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYwpAQCAtMCwwICYjNDM7MSw0NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja193cS5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9SRVRSSUVTIDEwMDAKJiM0MzsjZGVmaW5lIENBTExCQUNLX1dBSVRfVVMgMTAwMAomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7CiYjNDM7CXUzMiBjYWxsYmFja19kb25lOwomIzQzOwlpbnQgZXJyLCBpOwomIzQzOwomIzQzOwlza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7a3NvY2tfd3Egb3BlbiBhbmQgbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLAomIzQzOwkJCQkgICAgICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtydW4ga3NvY2tfd3Ffc3RhcnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7a3NvY2tfd3Ffc3RhcnQgcmV0dmFsJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoX19hdG9taWNfbG9hZF9uKCZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtjYWxsYmFja19kb25lLCBfX0FUT01JQ19BQ1FVSVJFKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcChDQUxMQkFDS19XQUlUX1VTKTsKJiM0MzsJfQomIzQzOwljYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKCZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtjYWxsYmFja19kb25lLAomIzQzOwkJCQkJX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGNhbGxiYWNrX2RvbmUsIDEsICYjMzQ7d29ya3F1ZXVlIGNhbGxiYWNrIGNvbXBsZXRlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCwKJiM0MzsJCSAgJiMzNDt3b3JrcXVldWUgY3JlYXRlIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJa3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjAxZWRhZWI5ZmRkNGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgKQEAgLTAsMCAmIzQzOzEsNzggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSAomIzQzOyNkZWZpbmUgX0tTT0NLX0NPTU1PTl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNPQ0tfREdSQU0JMgomIzQzOyNkZWZpbmUgSVBQUk9UT19VRFAJMTcKJiM0MzsKJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsCiYjNDM7CQkJCSAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltOwomIzQzO2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsCiYjNDM7CQkgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTsKJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltOwomIzQzO3ZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTsKJiM0MztpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gX19rc29ja19jdHhfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtfX2tzb2NrX2N0eF9tYXAsICZhbXA7a2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2tzb2NrICprc29ja19jdHhfZ2V0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzID0gTlVMTCwgKnRtcDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXRtcCA9IHYtJmd0O2N0eDsKJiM0MzsJaWYgKHRtcCkKJiM0MzsJCWtzID0gYnBmX2tzb2NrX2FjcXVpcmUodG1wKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2UoY3R4KTsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDt2LSZndDtjdHgsIGN0eCk7CiYjNDM7CWlmIChvbGQpIHsKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKG9sZCk7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MDg0NTEwOThlZmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMKQEAgLTAsMCAmIzQzOzEsNzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSAmIzM0O2hlbGxvIGZyb20gYnBmIGtzb2NrJiMzNDs7CiYjNDM7CiYjNDM7X19iZTMyIGlwdjRfcmVtb3RlOwomIzQzO19fdTE2IHJlbW90ZV9wb3J0OwomIzQzO2ludCB0YXJnZXRfcGlkOwomIzQzO2ludCBzZW5kX3JldCA9IC0xOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9OwomIzQzOwl1bmlvbiBicGZfa3NvY2tfYWRkciBhZGRyID0ge307CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJY3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJY3JlYXRlX29wdHMudHlwZSA9IFNPQ0tfREdSQU07CiYjNDM7CWNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2tzb2NrX2NyZWF0ZSgmYW1wO2NyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlhZGRyLnNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJYWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpOwomIzQzOwlhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsICZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uoa3MpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUVYSVNUKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS5zL3NvY2tldF9iaW5kJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsCiYjNDM7CSAgICAgaW50IGFkZHJsZW4sIGludCByZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprczsKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwomIzQzOwlpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJa3MgPSBrc29ja19jdHhfZ2V0KCk7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCXNlbmRfcmV0ID0gLUVOT0VOVDsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mZDJjY2ZkYjU4MDIwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbV92ZXJpZmllci5jCkBAIC0wLDAgJiM0MzsxLDM1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVsxMV0gPSAmIzM0O2R1bW15IGRhdGEmIzM0OzsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDticGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKJiM0MzsJICAgICBpbnQgc2l6ZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgTlVMTCk7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDYyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3dxIHdvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpOwomIzQzO30gd29ya19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IGNyZWF0ZV9lcnI7CiYjNDM7dTMyIGNhbGxiYWNrX2RvbmU7CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHsKJiM0MzsJCS5mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnR5cGUgPSBTT0NLX0RHUkFNLAomIzQzOwkJLnByb3RvY29sID0gSVBQUk9UT19VRFAsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJa3MgPSBicGZfa3NvY2tfY3JlYXRlKCZhbXA7b3B0cywgc2l6ZW9mKG9wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmIChrcykKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJY3JlYXRlX2VyciA9IGVycjsKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtjYWxsYmFja19kb25lLCAxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dvcmtfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJZXJyID0gYnBmX3dxX2luaXQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgJmFtcDt3b3JrX21hcCwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwllcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsdWUtJmd0O3dvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBicGZfd3Ffc3RhcnQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNTI5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogODE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBCUEYgS2VybmVsIFNvY2tldCBJbnRlcmFjdGlvbioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCAqbmVlZCogdG8gYmUgZnV6emVkLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgYWRkaXRpb246IG5ldyBCUEYga2Z1bmNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGtlcm5lbCBzb2NrZXRzIOKAkyBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiAgWWVwLCB0aGF0JiMzOTtzIGEgZGVmaW5pdGUgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIE5vIHF1ZXN0aW9uIGFib3V0IGl0LgoKTGV0JiMzOTtzIHF1aWNrbHkgdmVyaWZ5IHRoZSBhZmZlY3RlZCBmaWxlcywganVzdCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ6IGBpbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oYCwgYGluY2x1ZGUvbGludXgvc29ja2V0LmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYG5ldC9jb3JlL01ha2VmaWxlYCwgYG5ldC9jb3JlL2JwZl9rc29jay5jYCwgYG5ldC9zb2NrZXQuY2AsIGFuZCBhIGJ1bmNoIG9mIHNlbGZ0ZXN0cy4gU2VlbXMgbGlrZSBhIGZvY3VzZWQgc2V0IG9mIGNoYW5nZXMsIG1vc3RseSBpbiB0aGUgbmV0d29ya2luZy9zb2NrZXQgYXJlYXMuCgpBbHJpZ2h0LCB0aGUgY29yZSBvZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgaW4gYG5ldC9jb3JlL2JwZl9rc29jay5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCBiYXNlZCBvbiBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIEkmIzM5O2xsIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXM6CgpgYGBtYWtlZmlsZQppZmRlZiBDT05GSUdfSU5FVApvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBicGZfa3NvY2subwplbmRpZgpgYGAKCll1cCwgdGhlcmUgaXQgaXMuIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSB0aGUga2V5LiAgTm93LCB0aGUga2Z1bmNzIHRoZW1zZWx2ZXM6IGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19hY3F1aXJlYCwgYGJwZl9rc29ja19yZWxlYXNlYCwgYW5kIGBicGZfa3NvY2tfc2VuZGAgYXJlIGNsZWFybHkgdGhlIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4gIFRoZXNlIGFyZSBnb2luZyB0byBiZSBjYWxsYWJsZSBmcm9tIEJQRiBwcm9ncmFtcyBvZiB0eXBlcyBgQlBGX1BST0dfVFlQRV9TWVNDQUxMYCBhbmQgYEJQRl9QUk9HX1RZUEVfTFNNYC4gVGhleSBuZWVkIHRvIGJlIGluIHRoZSBmdXp6aW5nIHNjb3BlLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIHN5bWJvbHMgd2UgbmVlZCB0byBmb2N1cyBvbi4gQmVzaWRlcyB0aGUga2Z1bmNzLCBJIHNlZSB0aGF0IGBjb25uZWN0X3NvY2tldGAgZnJvbSBgbmV0L3NvY2tldC5jYCBpcyBhZGRlZCB0byBgaW5jbHVkZS9saW51eC9zb2NrZXQuaGAgYXMgd2VsbC4gVGhpcyBzaG91bGQgYmUgYSBub24tc3RhdGljIEFQSSBlbnRyeXBvaW50LiBBbmQgeWVzLCBpdCBpcyBleHBvcnRlZC4KCkkgd2FudCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuICBJJiMzOTt2ZSBnb3QgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAsIGFuZCBJJiMzOTttIGdvb2QuICBUaGUga2Z1bmNzIGFsc28gc3VwcG9ydCB0aGUgYEJQRl9QUk9HX1RZUEVfTFNNYCBwcm9ncmFtIHR5cGUuIEJ1dCBJIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbiBhcmUgYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAgYmFzZWQgb24gdGhlIE1ha2VmaWxlLgoKRG91YmxlLWNoZWNraW5nIGBuZXQvY29yZS9NYWtlZmlsZWAgYWdhaW4gdG8gbWFrZSBzdXJlOgpgYGBtYWtlZmlsZQpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBzb2NrX21hcC5vCm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm8KaWZkZWYgQ09ORklHX0lORVQKb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2tzb2NrLm8KZW5kaWYKYGBgClllcCwgaXQmIzM5O3MgY29uc2lzdGVudC4KClNvLCB0aGUgZm9jdXMgaXM6IGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19hY3F1aXJlYCwgYGJwZl9rc29ja19yZWxlYXNlYCwgYGJwZl9rc29ja19zZW5kYCwgYW5kIGBjb25uZWN0X3NvY2tldGAgd2l0aCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIFRpbWUgdG8gdXNlIHRoZSB0b29scyB0byBjb25maXJtIGBjb25uZWN0X3NvY2tldGAgYW5kIGBicGZfa3NvY2tfY3JlYXRlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTEtLyoqXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oOjEyOiAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTEzLSAqIEBmYW1pbHk6XHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cbi0tXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTE4LSAqL1xuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxOTpzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHtcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMjAtXHRfX3U4IGZhbWlseTtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz00OT1fX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTEtLyoqXG5uZXQvY29yZS9icGZfa3NvY2suYzo1MjogKiBicGZfa3NvY2tfY3JlYXRlKCkgLSBDcmVhdGUgYSBCUEYga2VybmVsIHNvY2tldC5cbm5ldC9jb3JlL2JwZl9rc29jay5jLTUzLSAqXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjMtICpcbm5ldC9jb3JlL2JwZl9rc29jay5jOjY0OiAqIEBvcHRzOlx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXG5uZXQvY29yZS9icGZfa3NvY2suYy02NS0gKiBAb3B0c19fc3o6XHRTaXplIG9mIHRoZSBvcHRzIHN0cnVjdC5cbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYz02OD1fX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbm5ldC9jb3JlL2JwZl9rc29jay5jOjY5OmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzAtXHRcdCBpbnQgKmVycl9fdW5pbml0KVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzEte1xubmV0L2NvcmUvYnBmX2tzb2NrLmM6NzI6XHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTczLVx0c3RydWN0IGJwZl9rc29jayAqa3M7XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtODUtXG5uZXQvY29yZS9icGZfa3NvY2suYzo4NjpcdGlmICghb3B0cyB8fCBvcHRzX19zeiAhPSBzaXplb2Yoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cykpIHtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTg3LVx0XHRlcnIgPSAtRUlOVkFMO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTkwLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6OTE6XHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XG5uZXQvY29yZS9icGZfa3NvY2suYy05Mi1cdFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVx1MDAzZWZhbWlseSksXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjYwPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjYxOkJURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNjItQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oLTExLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oOjEyOnN0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cyxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0xMy1cdFx0XHRcdCAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYz0xOT1pbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jLTIwLXtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYzoyMTpcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYy0yMi1cdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMtMjktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmM6MzA6XHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMtMzEtXHRpZiAoIWtzKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jPTI1PXN0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0yNi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYzoyNzpcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTI4LVx0XHQuZmFtaWx5ID0gQUZfSU5FVCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0zNC1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjM1Olx0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM2LVx0aWYgKGtzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NjU3CgkJCQkJCQlvdXRwdXQ6IDE3CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBGdW5jdGlvbiBBdmFpbGFiaWxpdHkgQ29uZmlybWVkKioKCkFscmlnaHQsIEkgY2FuIHNlZSB0aGF0IHRoZSBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgYXJlIHByZXNlbnQgd2l0aGluIHRoZSBzY29wZSBhbmQgYWNjZXNzaWJsZSDigJMgdGhhdCYjMzk7cyB0aGUgYmFzZWxpbmUsIGFuZCB0aGF0JiMzOTtzIGdvb2QuIE5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBgY29ubmVjdF9zb2NrZXRgLiBUaGlzIGlzIHRoZSBjcnV4LCBhbmQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgYmVoYXZpb3IgbWV0aWN1bG91c2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmM9MTIwOD1zdGF0aWMgaW50IHZpcnRpb191bWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jLTEyMzYtXHRkbyB7XG5hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jOjEyMzc6XHRcdHJjID0gb3NfY29ubmVjdF9zb2NrZXQocGRhdGEtXHUwMDNlc29ja2V0X3BhdGgpO1xuYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYy0xMjM4LVx0fSB3aGlsZSAocmMgPT0gLUVJTlRSKTtcbi0tXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmg9MTY2PXNzaXplX3Qgb3NfcmN2X2ZkX21zZyhpbnQgZmQsIGludCAqZmRzLCB1bnNpZ25lZCBpbnQgbl9mZHMsXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmgtMTY3LVx0XHQgICAgICB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pO1xuYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oOjE2ODpleHRlcm4gaW50IG9zX2Nvbm5lY3Rfc29ja2V0KGNvbnN0IGNoYXIgKm5hbWUpO1xuYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oLTE2OS1leHRlcm4gaW50IG9zX2ZpbGVfdHlwZShjaGFyICpmaWxlKTtcbi0tXG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jPTMzPUVYUE9SVF9TWU1CT0wob3NfY3JlYXRlX3VuaXhfc29ja2V0KTtcbmFyY2gvdW0va2VybmVsL2tzeW1zLmM6MzQ6RVhQT1JUX1NZTUJPTChvc19jb25uZWN0X3NvY2tldCk7XG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jLTM1LUVYUE9SVF9TWU1CT0wob3NfYWNjZXB0X2Nvbm5lY3Rpb24pO1xuLS1cbmFyY2gvdW0va2VybmVsL3RpbWUuYz02NjY9c3RhdGljIGludCB0aW1lX3RyYXZlbF9jb25uZWN0X2V4dGVybmFsKGNvbnN0IGNoYXIgKnNvY2tldClcbi0tXG5hcmNoL3VtL2tlcm5lbC90aW1lLmMtNjg3LVxuYXJjaC91bS9rZXJuZWwvdGltZS5jOjY4ODpcdHJjID0gb3NfY29ubmVjdF9zb2NrZXQoc29ja2V0KTtcbmFyY2gvdW0va2VybmVsL3RpbWUuYy02ODktXHRpZiAocmMgXHUwMDNjIDApIHtcbi0tXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYz0xNjU9aW50IG9zX29wZW5fZmlsZShjb25zdCBjaGFyICpmaWxlLCBzdHJ1Y3Qgb3BlbmZsYWdzIGZsYWdzLCBpbnQgbW9kZSlcbi0tXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy0yMDAtXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYzoyMDE6aW50IG9zX2Nvbm5lY3Rfc29ja2V0KGNvbnN0IGNoYXIgKm5hbWUpXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy0yMDIte1xuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmM9MTI3Nz1zdGF0aWMgaW50IG5iZF9hZGRfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnLFxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM0OS1cbmRyaXZlcnMvYmxvY2svbmJkLmM6MTM1MDpzdGF0aWMgaW50IG5iZF9yZWNvbm5lY3Rfc29ja2V0KHN0cnVjdCBuYmRfZGV2aWNlICpuYmQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuZHJpdmVycy9ibG9jay9uYmQuYy0xMzUxLXtcbi0tXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTIzNDc9c3RhdGljIGludCBuYmRfZ2VubF9yZWNvbmZpZ3VyZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ2Ny1cdFx0XHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcbmRyaXZlcnMvYmxvY2svbmJkLmM6MjQ2ODpcdFx0XHRyZXQgPSBuYmRfcmVjb25uZWN0X3NvY2tldChuYmQsIGZkKTtcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ2OS1cdFx0XHRpZiAocmV0KSB7XG4tLVxuaW5jbHVkZS9saW51eC9zb2NrZXQuaD00NjI9ZXh0ZXJuIGludCBfX3N5c19iaW5kX3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbmluY2x1ZGUvbGludXgvc29ja2V0LmgtNDYzLVx0XHRcdCAgICAgaW50IGFkZHJsZW4pO1xuaW5jbHVkZS9saW51eC9zb2NrZXQuaDo0NjQ6aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaC00NjUtXHRcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpO1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jPTE2MT1fX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMTg3LVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MTg4Olx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVx1MDAzZXNvY2ssIFx1MDAyNnNhLCBhZGRybGVuLCAwKTtcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE4OS19XG4tLVxubmV0L3NvY2tldC5jPTIxMDA9U1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcbi0tXG5uZXQvc29ja2V0LmMtMjEwNS1cbm5ldC9zb2NrZXQuYzoyMTA2OmludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbm5ldC9zb2NrZXQuYy0yMTA3LVx0XHQgICBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKVxuLS1cbm5ldC9zb2NrZXQuYz0yMTMyPWludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuLS1cbm5ldC9zb2NrZXQuYy0yMTQwLVxubmV0L3NvY2tldC5jOjIxNDE6XHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbixcbm5ldC9zb2NrZXQuYy0yMTQyLVx0XHRcdCAgICAgIHNvY2stXHUwMDNlZmlsZS1cdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYz02Mzg9aW50IGdldF90YWdpbmZvKGludCBkZXZfaWR4LCBpbnQgc2QsIGludCBmaWQsIGludCBwaWQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYy02OTQtXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jOjY5NTppbnQgY29ubmVjdF9zb2NrZXQoaW50IGRldl9pZHgsIGludCB0YXJnZXRfaWR4KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYy02OTYte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25jaS9uY2lfZGV2LmM9NzE5PWludCBjb25uZWN0X3RhZyhpbnQgZGV2X2lkeCwgaW50IHZpcnR1YWxfZmQsIGludCBzZCwgaW50IGZpZCwgaW50IHBpZClcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jLTc0MS1cdFx0cmV0dXJuIC0xO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYzo3NDI6XHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoZGV2X2lkeCwgdGFyZ2V0X2lkeCk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jLTc0My19XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9iZW5jaC1sb29rdXBzLmM9MjU2PXN0YXRpYyB2b2lkIGNvbm5lY3RfY2xpZW50KGludCBzaywgdm9pZCAqYXJnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jLTI1OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jOjI2MDpcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHRlc3Rfc2VydmVyX3BvcnQgJiM0MzsgKnApIFx1MDAzYz0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jLTI2MS1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QuYz0zMj1zdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QuYy00Ni1cdHN5bmNocm9uaXplX3RocmVhZHMoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC5jOjQ3Olx0aWYgKHRlc3RfY29ubmVjdF9zb2NrZXQoc2ssIHRoaXNfaXBfZGVzdCwgdGVzdF9zZXJ2ZXJfcG9ydCkgXHUwMDNjPSAwKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9jb25uZWN0LmMtNDgtXHRcdHRlc3RfZXJyb3IoXCYjMzQ7ZmFpbGVkIHRvIGNvbm5lY3QoKVwmIzM0Oyk7XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9pY21wcy1kaXNjYXJkLmM9NDIxPXN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jLTQzMS1cdHN5bmNocm9uaXplX3RocmVhZHMoKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jOjQzMjpcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHRlc3Rfc2VydmVyX3BvcnQpIFx1MDAzYz0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jLTQzMy1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmM9ODUyPXN0YXRpYyBpbnQgcnVuX2NsaWVudChjb25zdCBjaGFyICp0c3RfbmFtZSwgdW5zaWduZWQgaW50IHBvcnQsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jLTg3NS1cdHN5bmNocm9uaXplX3RocmVhZHMoKTsgLyogMjogTUtUcyBhZGRlZCA9XHUwMDNlIGNvbm5lY3QoKSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9rZXktbWFuYWdlbWVudC5jOjg3NjpcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHBvcnQmIzQzOyYjNDM7KSBcdTAwM2M9IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2tleS1tYW5hZ2VtZW50LmMtODc3LVx0XHR0ZXN0X2Vycm9yKFwmIzM0O2ZhaWxlZCB0byBjb25uZWN0KClcJiMzNDspO1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmg9MjkwPWV4dGVybiBpbnQgdGVzdF93YWl0X2ZkKGludCBzaywgdGltZV90IHNlYywgYm9vbCB3cml0ZSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjI5MTpleHRlcm4gaW50IF9fdGVzdF9jb25uZWN0X3NvY2tldChpbnQgc2ssIGNvbnN0IGNoYXIgKmRldmljZSxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgtMjkyLVx0XHRcdFx0IHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCBib29sIGFzeW5jKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oPTI5NT1zdGF0aWMgaW5saW5lIGludCB0ZXN0X2xpc3Rlbl9zb2NrZXQoY29uc3QgdW5pb24gdGNwX2FkZHIgdGFkZHIsXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zMzktXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjM0MDpzdGF0aWMgaW5saW5lIGludCBfdGVzdF9jb25uZWN0X3NvY2tldChpbnQgc2ssIGNvbnN0IHVuaW9uIHRjcF9hZGRyIHRhZGRyLFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zNDEtXHRcdFx0XHQgICAgICAgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgYXN5bmMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zNDUtXHR0Y3BfYWRkcl90b19zb2NrYWRkcl9pbihcdTAwMjZhZGRyLCBcdTAwMjZ0YWRkciwgaHRvbnMocG9ydCkpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaDozNDY6XHRyZXR1cm4gX190ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB2ZXRoX25hbWUsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0Ny1cdFx0XHRcdCAgICAgKHZvaWQgKilcdTAwMjZhZGRyLCBzaXplb2YoYWRkciksIGFzeW5jKTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0OS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmg6MzUwOnN0YXRpYyBpbmxpbmUgaW50IHRlc3RfY29ubmVjdF9zb2NrZXQoaW50IHNrLCBjb25zdCB1bmlvbiB0Y3BfYWRkciB0YWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgtMzUxLVx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHBvcnQpXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM1Mi17XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjM1MzpcdHJldHVybiBfdGVzdF9jb25uZWN0X3NvY2tldChzaywgdGFkZHIsIHBvcnQsIGZhbHNlKTtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgtMzU0LX1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM9OTA9c3RhdGljIGludCBfX3Rlc3Rfc2twYWlyX3BvbGwoaW50IHNrLCBib29sIHdyaXRlLCB1aW50NjRfdCB0aW1lb3V0LFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYy0xMTItXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM6MTEzOmludCBfX3Rlc3RfY29ubmVjdF9zb2NrZXQoaW50IHNrLCBjb25zdCBjaGFyICpkZXZpY2UsXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMtMTE0LVx0XHRcdCAgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIGJvb2wgYXN5bmMpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jPTE2ND1pbnQgX3Rlc3Rfc2twYWlyX2Nvbm5lY3RfcG9sbChpbnQgc2ssIGNvbnN0IGNoYXIgKmRldmljZSxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmMtMTc0LVx0c3luY2hyb25pemVfdGhyZWFkcygpOyAvKiAxOiBpbml0IHNrcGFpciBcdTAwMjYgcmVhZCBuc2NvdW50ZXJzICovXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM6MTc1Olx0cmV0ID0gX190ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCBkZXZpY2UsIGFkZHIsIGFkZHJfc3osIHRydWUpO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jLTE3Ni1cdGlmIChyZXQgXHUwMDNjIDApIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3Jlc3RvcmUuYz0xMDk9c3RhdGljIHZvaWQgdGVzdF9nZXRfc2tfY2hlY2twb2ludCh1bnNpZ25lZCBpbnQgc2VydmVyX3BvcnQsIHNvY2thZGRyX2FmICpzYWRkcixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3Jlc3RvcmUuYy0xMjItXHRzeW5jaHJvbml6ZV90aHJlYWRzKCk7IC8qIDE6IE1LVCBhZGRlZCA9XHUwMDNlIGNvbm5lY3QoKSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yZXN0b3JlLmM6MTIzOlx0aWYgKHRlc3RfY29ubmVjdF9zb2NrZXQoc2ssIHRoaXNfaXBfZGVzdCwgc2VydmVyX3BvcnQpIFx1MDAzYz0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcmVzdG9yZS5jLTEyNC1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jPTI1Nz1zdGF0aWMgdm9pZCB0ZXN0X2NsaWVudF9hY3RpdmVfcnN0KHVuc2lnbmVkIGludCBwb3J0KVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmMtMjczLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbGFzdDsgaSYjNDM7JiM0MzspIHtcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmM6Mjc0Olx0XHRlcnIgPSBfdGVzdF9jb25uZWN0X3NvY2tldChza1tpXSwgdGhpc19pcF9kZXN0LCBwb3J0LCBpICE9IDApO1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0yNzUtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0yODQtXHQvKiBhc3luYyBjb25uZWN0KCkgd2l0aCB0aGlyZCBzayB0byBnZXQgaW50byByZXF1ZXN0X3NvY2tfcXVldWUgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmM6Mjg1Olx0ZXJyID0gX3Rlc3RfY29ubmVjdF9zb2NrZXQoc2tbbGFzdF0sIHRoaXNfaXBfZGVzdCwgcG9ydCwgMSk7XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jLTI4Ni1cdGlmIChlcnIgXHUwMDNjIDApXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYz0zMjM9c3RhdGljIHZvaWQgdGVzdF9jbGllbnRfcGFzc2l2ZV9yc3QodW5zaWduZWQgaW50IHBvcnQpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0zMzgtXHRzeW5jaHJvbml6ZV90aHJlYWRzKCk7IC8qIDE6IE1LVCBhZGRlZCA9XHUwMDNlIGNvbm5lY3QoKSAqL1xudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYzozMzk6XHRpZiAodGVzdF9jb25uZWN0X3NvY2tldChzaywgdGhpc19pcF9kZXN0LCBwb3J0KSBcdTAwM2M9IDApXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jLTM0MC1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3NlbGYtY29ubmVjdC5jPTMzPXN0YXRpYyB2b2lkIHRjcF9zZWxmX2Nvbm5lY3QoY29uc3QgY2hhciAqdHN0LCB1bnNpZ25lZCBpbnQgcG9ydCxcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3NlbGYtY29ubmVjdC5jLTY4LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZWxmLWNvbm5lY3QuYzo2OTpcdGlmIChfX3Rlc3RfY29ubmVjdF9zb2NrZXQoc2ssIFwmIzM0O2xvXCYjMzQ7LCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2YWRkcixcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VsZi1jb25uZWN0LmMtNzAtXHRcdFx0XHQgIHNpemVvZihhZGRyKSwgMCkgXHUwMDNjIDApIHtcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3NlcS1leHQuYz0xNzM9c3RhdGljIHZvaWQgKmNsaWVudF9mbih2b2lkICphcmcpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZXEtZXh0LmMtMTg5LVx0c3luY2hyb25pemVfdGhyZWFkcygpOyAvKiAxOiBNS1QgYWRkZWQgPVx1MDAzZSBjb25uZWN0KCkgKi9cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VxLWV4dC5jOjE5MDpcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHRlc3Rfc2VydmVyX3BvcnQpIFx1MDAzYz0gMClcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VxLWV4dC5jLTE5MS1cdFx0dGVzdF9lcnJvcihcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCgpXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgwNwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgU29ja2V0IENvbm5lY3Rpb24gQVBJKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgY29ubmVjdF9zb2NrZXRgIGZ1bmN0aW9uLiBSaWdodCwgaXQmIzM5O3MgZGVmaW5lZCB3aXRoaW4gYG5ldC9zb2NrZXQuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBBbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZW50cnkgcG9pbnQsIG5vdCBqdXN0IHNvbWV0aGluZyB0dWNrZWQgYXdheSB3aXRoaW4gdGhlIGZpbGUuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gTm93LCB3aGVyZSBpcyBpdCBkZWNsYXJlZCBhZ2Fpbj8gQWgsIHllcywgaW4gYGluY2x1ZGUvbGludXgvc29ja2V0LmhgLiBUaGF0JiMzOTtzIHRoZSBzdGFuZGFyZCBwbGFjZSBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBCdXQgYSBuaWdnbGluZyBxdWVzdGlvbiBpcyBhcmlzaW5nLi4uIGlzIGl0IGFsc28gYXZhaWxhYmxlIHRvIG1vZHVsZXM/IEkgbmVlZCB0byBrbm93IGlmIG1vZHVsZXMgY2FuIHVzZSB0aGlzIEFQSSwgYmVjYXVzZSB0aGlzIGluZmx1ZW5jZXMgaG93IHRoZSBuZXR3b3JraW5nIHN0YWNrIGlzIHN0cnVjdHVyZWQgYW5kIGhvdyBtdWNoIGZsZXhpYmlsaXR5IHdlIGhhdmUuIFRpbWUgdG8gZG91YmxlLWNoZWNrIGlmIGl0JiMzOTtzIGV4cGxpY2l0bHkgZXhwb3J0aW5nIGl0c2VsZiB0byBtb2R1bGVzIHVzaW5nIGBFWFBPUlRfU1lNQk9MYC4gTGV0JiMzOTtzIHNlZSBpZiB0aGF0JiMzOTtzIGluY2x1ZGVkLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qY29ubmVjdF9zb2NrZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC91bS9rZXJuZWwva3N5bXMuYz0zMz1FWFBPUlRfU1lNQk9MKG9zX2NyZWF0ZV91bml4X3NvY2tldCk7XG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jOjM0OkVYUE9SVF9TWU1CT0wob3NfY29ubmVjdF9zb2NrZXQpO1xuYXJjaC91bS9rZXJuZWwva3N5bXMuYy0zNS1FWFBPUlRfU1lNQk9MKG9zX2FjY2VwdF9jb25uZWN0aW9uKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDE2NQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIHRoaXMgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gaXQmIzM5O3Mgbm90IGV4cGxpY2l0bHkgZGVjbGFyZWQgYXMgcGFydCBvZiBhIG1vZHVsZSBleHBvcnQsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGl0JiMzOTtzIGxpa2VseSBhIGdsb2JhbCBmdW5jdGlvbi4gTm93IEkgbmVlZCB0byBjb25maXJtIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBpbnRlbmRlZCB1c2UsIHdoaWNoIHBvaW50cyBtZSB0b3dhcmRzIGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L3NvY2tldC5jYC4gSSYjMzk7bGwgZGVsdmUgaW50byB0aGF0IGZpbGUgdG8gc2VlIGhvdyBpdCYjMzk7cyBkZWZpbmVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgZXhwbGljaXQgZXhwb3J0IG9yIHZpc2liaWxpdHkgZGVjbGFyYXRpb25zIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NvY2tldC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zb2NrZXQuYz0yMTAwPVNZU0NBTExfREVGSU5FMyhhY2NlcHQsIGludCwgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKiwgdXBlZXJfc29ja2FkZHIsXG4tLVxubmV0L3NvY2tldC5jLTIxMDUtXG5uZXQvc29ja2V0LmM6MjEwNjppbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXG5uZXQvc29ja2V0LmMtMjEwNy1cdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncylcbi0tXG5uZXQvc29ja2V0LmM9MjEzMj1pbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbi0tXG5uZXQvc29ja2V0LmMtMjE0MC1cbm5ldC9zb2NrZXQuYzoyMTQxOlx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KHNvY2ssIGFkZHJlc3MsIGFkZHJsZW4sXG5uZXQvc29ja2V0LmMtMjE0Mi1cdFx0XHQgICAgICBzb2NrLVx1MDAzZWZpbGUtXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDU1OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJQRiBLc29jayBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfa3NvY2tgIHN0dWZmLiBJdCYjMzk7cyBub3QgYSBzdGFuZGFyZCBleHBvcnRlZCBtb2R1bGUsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbiBjYWxsZWQgZnJvbSBgbmV0L2NvcmUvYnBmX2tzb2NrLmNgLCB3aGljaCBpcyBzdGF0aWNhbGx5IGNvbXBpbGVkLCBsaWtlbHkgbGlua2VkIGR1ZSB0byBgYnBmX2tzb2NrLm9gIGJlaW5nIGluY2x1ZGVkIGluIGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpYC4gVGhhdCBnaXZlcyBtZSBhIGZldyBrZXkgc3ltYm9scyB0byB6ZXJvIGluIG9uOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGBicGZfa3NvY2tfc2VuZGAsIGFuZCBgY29ubmVjdF9zb2NrZXRgLgoKYGNvbm5lY3Rfc29ja2V0YCBsb29rcyBwcm9taXNpbmcgYXMgYW4gZW50cnkgcG9pbnQ7IGl0IHdyYXBzIGJvdGggYHNlY3VyaXR5X3NvY2tldF9jb25uZWN0YCBhbmQgYHNvY2stJmd0O29wcy0mZ3Q7Y29ubmVjdGAuIEFuZCBob2xkIG9uLCBJJiMzOTt2ZSBnb3QgdG8gcmVtZW1iZXIgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgIGlzIGluIHRoZXJlIHRvby4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyB3ZWxsLgoKTm93LCBjb25maWd1cmF0aW9uLXdpc2UsIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCYjMzk7cyByZXF1aXJlZCB0byBtYWtlIHRoaXMgd29yay4gRGVmaW5pdGVseSBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhlIGxhdHRlciBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlLiBDaGVja2luZyBgbmV0L2NvcmUvTWFrZWZpbGVgIGFnYWluIGNvbmZpcm1zIHRoZSBkZXBlbmRlbmN5OiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSAmIzQzOz0gYnBmX2tzb2NrLm9gIGlzIHVuZGVyIGBpZmRlZiBDT05GSUdfSU5FVGAuIFNvLCBgSU5FVGAgYW5kIGBCUEZfU1lTQ0FMTGAgYXJlIHRoZSBtYWluIG9uZXMuCgpJJiMzOTttIHdvbmRlcmluZyBhYm91dCBgQ09ORklHX0JQRl9MU01gLCB0aG91Z2guIExldCBtZSBsb29rIGF0IHRoaXMgY29kZSBzbmlwcGV0LgoKYGBgYwojaWZkZWYgQ09ORklHX0JQRl9MU00KQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpCiNlbmRpZgoKc3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKQp7CglpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKCZhbXA7a3NvY2tfa2Z1bmNfYnRmX2lkcywga2Z1bmNfaWQpKQoJCXJldHVybiAwOwoKCWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCkKCQlyZXR1cm4gMDsKCiNpZmRlZiBDT05GSUdfQlBGX0xTTQoJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gJmFtcDsmYW1wOwoJICAgIHByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKQoJCXJldHVybiAwOwojZW5kaWYKCglyZXR1cm4gLUVBQ0NFUzsKfQpgYGAKClRoZSBrZnVuY3Mgc2VlbSB0byBiZSBhdmFpbGFibGUgZm9yIGBCUEZfUFJPR19UWVBFX1NZU0NBTExgIHJlZ2FyZGxlc3Mgb2YgYENPTkZJR19CUEZfTFNNYC4gU28sIGZvciAqY29yZSogZnVuY3Rpb25hbGl0eSwgYENPTkZJR19CUEZfTFNNYCBpc24mIzM5O3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBJdCBzZWVtcyBpdCBqdXN0IGVuYWJsZXMgaG9va2luZyBpdCBmcm9tIExTTSBjb250ZXh0cy4gU2luY2UgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgY29yZSBoZXJlLCBJIHRoaW5rIEkmIzM5O2xsIGxlYXZlIGl0IG91dCBmb3Igbm93LiBMZXQmIzM5O3Mgc2VlIGlmIHRoZXJlJiMzOTtzIGFueSBvdGhlciBjb25maWcgZmxhZ3MgaGlkaW5nIGluIGBuZXQvY29yZS9icGZfa3NvY2suY2AuIFRoYXQgd2lsbCBjb25maXJtIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX2tzb2NrLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvYnBmX2tzb2NrLmM9Mjc0PUJURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzUtXG5uZXQvY29yZS9icGZfa3NvY2suYzoyNzY6I2lmZGVmIENPTkZJR19CUEZfTFNNXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzctQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjgwPXN0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODctXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODg6I2lmZGVmIENPTkZJR19CUEZfTFNNXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODktXHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNIFx1MDAyNlx1MDAyNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjI2MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHF1aWNrIHJ1bmRvd246CgoqKkJQRiBWZXJpZmljYXRpb246IEEgUXVpY2sgQ2hlY2sqKgoKUmlnaHQsIHNvIGBDT05GSUdfQlBGX0xTTWAgaXMgY2xlYXJseSBlbmFibGVkLiBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGdpdmVuIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIGlzIGFjdGl2ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdmVyaWZpZXIgaW50ZXJhY3RzIHdpdGggaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBjaGVja3Mgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZSB0aGF0IGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgYENPTkZJR19CUEZfTFNNYCBzZXR0aW5nLCBwcm9iYWJseSBhcm91bmQgc2VjdXJpdHkgb3IgcG9saWN5IGVuZm9yY2VtZW50LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIHNvdXJjZSBjb2RlIGhhcyB0byBzYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL3ZlcmlmaWVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi92ZXJpZmllci5jPTI3MjM9aW50IGJwZl9hZGRfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgZnVuY19pZCwgdTE2IG9mZnNldClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjczOS1cdFx0aWYgKCFidGZfdm1saW51eCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jOjI3NDA6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2NhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEZcXG5cJiMzNDspO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTI3NDEtXHRcdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDM1OD1CVEZfU0VUX1NUQVJUKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDM1OTojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjAtQlRGX0lEKHN0cnVjdCwgcHJvZ190ZXN0X3JlZl9rZnVuYylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MzYxLSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjQzNjI6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM2My1CVEZfSUQoc3RydWN0LCBjZ3JvdXApXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM2NC0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MzY1OiNpZmRlZiBDT05GSUdfQlBGX0pJVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjYtQlRGX0lEKHN0cnVjdCwgYnBmX2NwdW1hc2spXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTQzNjg9QlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDM2OTojaWZkZWYgQ09ORklHX0NSWVBUT1xua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNzAtQlRGX0lEKHN0cnVjdCwgYnBmX2NyeXB0b19jdHgpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM3MS0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MzcyOiNpZmRlZiBDT05GSUdfSU5FVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNzMtQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODcwPXN0YXRpYyB1MzIgKnJlZzJidGZfaWRzW19fQlBGX1JFR19UWVBFX01BWF0gPSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDg3MTojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ4NzItXHRbUFRSX1RPX1NPQ0tFVF0gPSBcdTAwMjZidGZfc29ja19pZHNbQlRGX1NPQ0tfVFlQRV9TT0NLXSxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDkyNT1zdGF0aWMgaW50IGNoZWNrX3BrdF9wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ5MzYtXHQvKiBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IGhhdmUgYSBLY29uZmlnIGVuYWJsaW5nXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDkzNzpcdCAqIENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTIHRoZSB2YWx1ZSBvZlxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ5MzgtXHQgKiBORVRfSVBfQUxJR04gaXMgdW5pdmVyc2FsbHkgc2V0IHRvICYjMzk7MiYjMzk7LiAgQW5kIG9uIHBsYXRmb3Jtc1xua2VybmVsL2JwZi92ZXJpZmllci5jOjQ5Mzk6XHQgKiB0aGF0IGRvIHNldCBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUywgd2UgZ2V0XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDk0MC1cdCAqIHRvIHRoaXMgY29kZSBvbmx5IGluIHN0cmljdCBtb2RlIHdoZXJlIHdlIHdhbnQgdG8gZW11bGF0ZVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01MDkxPXN0YXRpYyBpbnQgY2hlY2tfbWF4X3N0YWNrX2RlcHRoX3N1YnByb2coc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IGlkeCxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTEzNS1cdHN1YnByb2dfZGVwdGggPSByb3VuZF91cF9zdGFja19kZXB0aChlbnYsIHN1YnByb2dbaWR4XS5zdGFja19kZXB0aCk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTEzNjpcdGlmIChJU19FTkFCTEVEKENPTkZJR19YODZfNjQpIFx1MDAyNlx1MDAyNiBzdWJwcm9nW2lkeF0uc3RhY2tfYXJnX2NudCkge1xua2VybmVsL2JwZi92ZXJpZmllci5jLTUxMzctXHRcdC8qIHg4Ni02NCB1c2VzIFI5IGZvciBib3RoIHByaXZhdGUgc3RhY2sgZnJhbWUgcG9pbnRlciBhbmQgYXJnNi4gKi9cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NTY0OD1CVEZfVFlQRV9TQUZFX1JDVV9PUl9OVUxMKHN0cnVjdCBtbV9zdHJ1Y3QpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjQ5LVx0c3RydWN0IGZpbGUgX19yY3UgKmV4ZV9maWxlO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjU2NTA6I2lmZGVmIENPTkZJR19NRU1DR1xua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NTEtXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgX19yY3UgKm93bmVyO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTA4PXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkyMi1cdGlmICghYnRmX3ZtbGludXgpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo1OTIzOlx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7bWFwX3B0ciBhY2Nlc3Mgbm90IHN1cHBvcnRlZCB3aXRob3V0IENPTkZJR19ERUJVR19JTkZPX0JURlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNTkyNC1cdFx0cmV0dXJuIC1FTk9UU1VQUDtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzE3Mz1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTc1LXtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTc2Olx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BSRUVNUFRfUlQpKSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzE3Ny1cdFx0dmVyYm9zZShlbnYsIFwmIzM0O2JwZl90aW1lciBjYW5ub3QgYmUgdXNlZCBmb3IgUFJFRU1QVF9SVC5cXG5cJiMzNDspO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03NzQxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBzb2NrX3R5cGVzID0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzQ5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjc3NTA6I2lmZGVmIENPTkZJR19ORVRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzUxLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyBidGZfaWRfc29ja19jb21tb25fdHlwZXMgPSB7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTc4MjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzICpjb21wYXRpYmxlX3JlZ190eXBlc1tfX0JQRl9BUkdfVFlQRV9NQVhdID0ge1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODMyLVx0W0FSR19QVFJfVE9fU09DS19DT01NT05dXHQ9IFx1MDAyNnNvY2tfdHlwZXMsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NzgzMzojaWZkZWYgQ09ORklHX05FVFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc4MzQtXHRbQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT05dXHQ9IFx1MDAyNmJ0Zl9pZF9zb2NrX2NvbW1vbl90eXBlcyxcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTAxOTk9c3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjM5LVxua2VybmVsL2JwZi92ZXJpZmllci5jOjEwNjQwOiNpZmRlZiBDT05GSUdfUEVSRl9FVkVOVFNcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMDY0MS1cdFx0ZXJyID0gZ2V0X2NhbGxjaGFpbl9idWZmZXJzKHN5c2N0bF9wZXJmX2V2ZW50X21heF9zdGFjayk7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjQ0LVx0XHRlcnIgPSAtRU5PVFNVUFA7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA2NDU6XHRcdGVycl9zdHIgPSBcJiMzNDtmdW5jICVzIyVkIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfUEVSRl9FVkVOVFNcXG5cJiMzNDs7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTA2NDYtI2VuZGlmXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI1PUJURl9JRChmdW5jLCBicGZfcmJ0cmVlX3JpZ2h0KVxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTI2OiNpZmRlZiBDT05GSUdfTkVUXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExMjctQlRGX0lEKGZ1bmMsIGJwZl9keW5wdHJfZnJvbV9za2IpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTQ3PUJURl9JRChmdW5jLCBicGZfcHJlZW1wdF9lbmFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTExNDg6I2lmZGVmIENPTkZJR19DR1JPVVBTXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNDktQlRGX0lEKGZ1bmMsIGJwZl9pdGVyX2Nzc190YXNrX25ldylcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExNTE9QlRGX0lEX1VOVVNFRFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTUyLSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTUzOiNpZmRlZiBDT05GSUdfQlBGX0VWRU5UU1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTU0LUJURl9JRChmdW5jLCBicGZfc2Vzc2lvbl9jb29raWUpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTYzPUJURl9JRChmdW5jLCBicGZfaXRlcl9udW1fZGVzdHJveSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE2NDojaWZkZWYgQ09ORklHX0JQRl9MU01cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE2NS1CVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTgyPUJURl9JRChmdW5jLCBicGZfYXJlbmFfcmVzZXJ2ZV9wYWdlcylcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE4MzojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE4NC1CVEZfSUQoZnVuYywgYnBmX3Nlc3Npb25faXNfcmV0dXJuKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDQ3Mj1zdGF0aWMgdm9pZCBzY2FsYXJfYnl0ZV9zd2FwKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDg3LVx0Ym9vbCBpc19iaWdfZW5kaWFuO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjE0NDg4OiNpZmRlZiBDT05GSUdfQ1BVX0JJR19FTkRJQU5cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNDQ4OS1cdGlzX2JpZ19lbmRpYW4gPSB0cnVlO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNjY1Mj1ib29sIGJwZl92ZXJpZmllcl9pbmxpbmVzX2hlbHBlcl9jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHMzMiBpbW0pXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjU0LVx0c3dpdGNoIChpbW0pIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY1NTojaWZkZWYgQ09ORklHX1g4Nl82NFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjU2LVx0Y2FzZSBCUEZfRlVOQ19nZXRfc21wX3Byb2Nlc3Nvcl9pZDpcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY1NzojaWZkZWYgQ09ORklHX1NNUFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE2NjU4LVx0Y2FzZSBCUEZfRlVOQ19nZXRfY3VycmVudF90YXNrX2J0Zjpcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTc2ODY9c3RhdGljIGludCBjaGVja19wc2V1ZG9fYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzAyLVx0XHRpZiAoIWJ0Zl92bWxpbnV4KSB7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3MDM6XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O2tlcm5lbCBpcyBtaXNzaW5nIEJURiwgbWFrZSBzdXJlIENPTkZJR19ERUJVR19JTkZPX0JURj15IGlzIHNwZWNpZmllZCBpbiBLY29uZmlnLlxcblwmIzM0Oyk7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTc3MDQtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4Njc4PXN0YXRpYyBpbnQgY2hlY2tfc3RydWN0X29wc19idGZfaWQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4MDI6I2lmZGVmIENPTkZJR19GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT05cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgwMy1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4MTE9QlRGX0lEKGZ1bmMsIF9fZmlsZW1hcF9hZGRfZm9saW8pXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4MTI6I2lmZGVmIENPTkZJR19GQUlMX1BBR0VfQUxMT0Ncbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxMy1CVEZfSUQoZnVuYywgc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxNC0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgxNTojaWZkZWYgQ09ORklHX0ZBSUxTTEFCXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTYtQlRGX0lEKGZ1bmMsIHNob3VsZF9mYWlsc2xhYilcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTg4ODM9c3RhdGljIGludCBjaGVja19hdHRhY2hfbW9kaWZ5X3JldHVybih1bnNpZ25lZCBsb25nIGFkZHIsIGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSlcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4OTEtXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTg4OTI6I2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9FUlJPUl9JTkpFQ1RJT04gKi9cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg5My1cbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzNTc9QlRGX0lEX1VOVVNFRFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzU4OiNpZmRlZiBDT05GSUdfU01QXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNTktQlRGX0lEKGZ1bmMsIF9fX21pZ3JhdGVfZW5hYmxlKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM2MT1CVEZfSUQoZnVuYywgbWlncmF0ZV9lbmFibGUpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjItI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNjM6I2lmICFkZWZpbmVkIENPTkZJR19QUkVFTVBUX1JDVSBcdTAwMjZcdTAwMjYgIWRlZmluZWQgQ09ORklHX1RJTllfUkNVXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjQtQlRGX0lEKGZ1bmMsIHJjdV9yZWFkX3VubG9ja19zdHJpY3QpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjUtI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNjY6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX1BSRUVNUFQpIHx8IGRlZmluZWQoQ09ORklHX1RSQUNFX1BSRUVNUFRfVE9HR0xFKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY3LUJURl9JRChmdW5jLCBwcmVlbXB0X2NvdW50X2FkZClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM2OD1CVEZfSUQoZnVuYywgcHJlZW1wdF9jb3VudF9zdWIpXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjktI2VuZGlmXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzNzA6I2lmZGVmIENPTkZJR19QUkVFTVBUX1JDVVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzcxLUJURl9JRChmdW5jLCBfX3JjdV9yZWFkX2xvY2spXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MzgwPUJURl9TRVRfU1RBUlQobm9yZXR1cm5fZGVueSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM4MTojaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzODItQlRGX0lEKGZ1bmMsIF9faWEzMl9zeXNfZXhpdClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM4Mz1CVEZfSUQoZnVuYywgX19pYTMyX3N5c19leGl0X2dyb3VwKVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Mzg0LSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Mzg1OiNpZmRlZiBDT05GSUdfS1VOSVRcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM4Ni1CVEZfSUQoZnVuYywgX19rdW5pdF9hYm9ydClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM4Nz1CVEZfSUQoZnVuYywga3VuaXRfdHJ5X2NhdGNoX3Rocm93KVxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Mzg4LSNlbmRpZlxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5Mzg5OiNpZmRlZiBDT05GSUdfTU9EVUxFU1xua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzkwLUJURl9JRChmdW5jLCBfX21vZHVsZV9wdXRfYW5kX2t0aHJlYWRfZXhpdClcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM5MS0jZW5kaWZcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM5MjojaWZkZWYgQ09ORklHX1g4Nl82NFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzkzLUJURl9JRChmdW5jLCBfX3g2NF9zeXNfZXhpdClcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTk1ODY9c3RydWN0IGJ0ZiAqYnBmX2dldF9idGZfdm1saW51eCh2b2lkKVxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU5MC1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTU5MTpcdGlmICghYnRmIFx1MDAyNlx1MDAyNiBJU19FTkFCTEVEKENPTkZJR19ERUJVR19JTkZPX0JURikpIHtcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU5Mi1cdFx0bXV0ZXhfbG9jayhcdTAwMjZidGZfdm1saW51eF9sb2NrKTtcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MjAxMDI9aW50IGJwZl9jaGVjayhzdHJ1Y3QgYnBmX3Byb2cgKipwcm9nLCB1bmlvbiBicGZfYXR0ciAqYXR0ciwgYnBmcHRyX3QgdWF0dHIsXG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTg5LVx0ZW52LVx1MDAzZXN0cmljdF9hbGlnbm1lbnQgPSAhIShhdHRyLVx1MDAzZXByb2dfZmxhZ3MgXHUwMDI2IEJQRl9GX1NUUklDVF9BTElHTk1FTlQpO1xua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTkwOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE5MS1cdFx0ZW52LVx1MDAzZXN0cmljdF9hbGlnbm1lbnQgPSB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjUxNgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSBmb3IgYnBmX2tzb2NrIFN1cHBvcnQqKgoKQWxyaWdodCwgbGV0JiMzOTtzIG5haWwgZG93biB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkmIzM5O20gbG9va2luZyBhdCBga2VybmVsL2JwZi92ZXJpZmllci5jYCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIGBicGZfa3NvY2tgIGFuZCBgcmN1X3Byb3RlY3RlZF90eXBlc2AuIEdpdmVuIHRoYXQsIGBDT05GSUdfSU5FVGAgaXMgYSBkZWZpbml0ZSByZXF1aXJlbWVudCDigJMgbm8gcXVlc3Rpb24gdGhlcmUuIEFuZCwgb2YgY291cnNlLCBzaW5jZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIEJQRiwgYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZXNzZW50aWFsLgoKTm93LCByZWdhcmRpbmcgZGVidWcgaW5mb3JtYXRpb24gZm9yIEJURiwgYENPTkZJR19ERUJVR19JTkZPX0JURmAgc2VlbXMgaGlnaGx5IGxpa2VseSwgZXNwZWNpYWxseSBzaW5jZSB3ZSYjMzk7cmUgd29ya2luZyB3aXRoIEJQRiBrZnVuY3MuIEl0JiMzOTtzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBmb3IgdGhpcyBraW5kIG9mIGZ1bmN0aW9uYWxpdHksIHNvIEkmIzM5O2xsIGluY2x1ZGUgdGhhdC4gRmluYWxseSwgZm9yIGBDT05GSUdfQlBGX0xTTWAsIHRoZSB0ZXN0cyBsZXZlcmFnZSBgQlBGX1BST0dfVFlQRV9MU01gIGZvciB0aGUgYGJwZl9rc29ja19zZW5kYCBmdW5jdGlvbmFsaXR5IHZpYSBhbiBMU00gaG9vay4gVGhlcmVmb3JlLCBsZXQmIzM5O3MgaW5jbHVkZSB0aGlzIGNvbmZpZ3VyYXRpb24gYXMgd2VsbC4KClNvLCBoZXJlJiMzOTtzIHRoZSBjb25maWcgY2hlY2tsaXN0OgoKKiAgIGBJTkVUYAoqICAgYEJQRl9TWVNDQUxMYAoqICAgYERFQlVHX0lORk9fQlRGYAoqICAgYEJQRl9MU01gCgpBbmQsIGxldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29yZSBzeW1ib2xzIGluIGZvY3VzOgoKKiAgIGBicGZfa3NvY2tfY3JlYXRlYAoqICAgYGJwZl9rc29ja19jb25uZWN0YAoqICAgYGJwZl9rc29ja19hY3F1aXJlYAoqICAgYGJwZl9rc29ja19yZWxlYXNlYAoqICAgYGJwZl9rc29ja19zZW5kYAoqICAgYGNvbm5lY3Rfc29ja2V0YAoqICAgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgCgpRdWljayB0aG91Z2h0IG9uIGBicGZfa3NvY2tfcmVsZWFzZV9kdG9yYDogaXQmIzM5O3MganVzdCBhIHN0cmFpZ2h0Zm9yd2FyZCB3cmFwcGVyIGFyb3VuZCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBzbyBpdCYjMzk7cyBub3QgYSBjb25jZXJuIGZyb20gYSBjb25maWd1cmF0aW9uIHBvaW50IG9mIHZpZXcuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcmAgaXMgbm9uLXN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnBmX2tzb2NrX3JlbGVhc2VfZHRvciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvY29yZS9icGZfa3NvY2suYz0yMTM9X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjAtXG5uZXQvY29yZS9icGZfa3NvY2suYzoyMjE6X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjIyLXtcbi0tXG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjQtfVxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI1OkNGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG5uZXQvY29yZS9icGZfa3NvY2suYy0yMjYtXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA0PUJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNTpCVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc2MDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgS2VybmVsIEJQRiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGNoYW5nZSDigJMgdGhhdCBtdWNoIGlzIGNsZWFyLiBMZXQmIzM5O3MgYnJlYWsgZG93biB3aHkuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgc3VpdGUgb2YgQlBGIGtmdW5jczogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCB0aGUgYGJwZl9rc29ja19zZW5kYCBmYW1pbHksIGFuZCBzbyBvbi4gVGhlc2Ugd2lsbCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8sIGZ1bmRhbWVudGFsbHksIGNyZWF0ZSBhbmQgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgc29ja2V0cywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0uIFRoaXMgb3BlbnMgdXAgZW50aXJlbHkgbmV3IGNvZGUgcGF0aHMgdGhhdCBhcmUgbm93IHJlYWNoYWJsZSB2aWEgQlBGLCBhbmQgdGhhdCBzY3JlYW1zICYjMzQ7ZnV6emluZyB0YXJnZXQmIzM0OyB0byBtZS4gU3BlY2lmaWNhbGx5LCB0aGVzZSBrZnVuY3MgYXJlIGFjY2Vzc2libGUgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zIGxpa2UgdGhlIFNZU0NBTEwgYW5kIExTTSBob29rcywgd2hpY2ggaW1tZWRpYXRlbHkgZXhwYW5kcyB0aGUgYXR0YWNrIHN1cmZhY2UgdG8gY29uc2lkZXIuCgpGcm9tIGEgY29uZmlndXJhdGlvbiBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGBJTkVUYCwgYEJQRl9TWVNDQUxMYCwgYERFQlVHX0lORk9fQlRGYCwgYW5kIGBCUEZfTFNNYCBhcmUgZW5hYmxlZCBkdXJpbmcgdGVzdGluZy4gVGhhdCBjb3ZlcnMgdGhlIGJhc2ljIGRlcGVuZGVuY2llcyB0byBlbmFibGUgdGhlIGtzb2NrIEJQRiBmdW5jdGlvbmFsaXR5LgoKSSYjMzk7bSBtYWtpbmcgYSBtZW50YWwgbm90ZSBvZiB0aGUgY3JpdGljYWwgc3ltYm9sczogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX2FjcXVpcmVgLCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBgYnBmX2tzb2NrX3NlbmRgLCB0aGUgYGNvbm5lY3Rfc29ja2V0YCBoZWxwZXIsIGFuZCBgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcmAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgYW5kIGNsZWFudXAgcm91dGluZXMgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgYW5hbHlzaXMgYW5kIHZ1bG5lcmFiaWxpdHkgYXNzZXNzbWVudC4gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGNvdmVyaW5nIGFsbCB0aGUga2Z1bmNzLgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbmV3IGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGJlc2lkZXMgdGhlIG9uZXMgSSYjMzk7dmUgbGlzdGVkLiBJdCYjMzk7cyBlYXN5IHRvIG1pc3MgYW4gaW1wb3J0YW50IG9uZSwgc28gSSYjMzk7bGwgcmV2aWV3IGFnYWluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljLiogYnBmX2tzb2NrXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9rc29jay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9jb3JlL2JwZl9rc29jay5jPTMxPXN0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzktXG5uZXQvY29yZS9icGZfa3NvY2suYzo0MDpzdGF0aWMgYm9vbCBicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KHZvaWQpXG5uZXQvY29yZS9icGZfa3NvY2suYy00MS17XG4tLVxubmV0L2NvcmUvYnBmX2tzb2NrLmM9Mjc3PUJURl9JRF9MSVNUX1NJTkdMRShicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkLCBmdW5jLCBicGZfbHNtX3NvY2tldF9zZW5kbXNnKVxuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3OS1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjI4MDpzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODEte1xuLS1cbm5ldC9jb3JlL2JwZl9rc29jay5jPTMwNT1CVEZfSUQoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcilcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwNi1cbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNzpzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg2NDEKCQkJCQkJCW91dHB1dDogMjI1CgkJCQkJCQl0aG91Z2h0czogODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqUHJpb3JpdGl6aW5nIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gYGtzb2NrX3JlbGVhc2Vfd29ya19mbmAgKmlzKiBhIHdvcmtxdWV1ZSBjYWxsYmFjayBhbmQgdGhlcmVmb3JlIGZ1enphYmxlLCB3aGljaCBpcyBnb29kLiBCdXQgaXQmIzM5O3MgYWxzbyBzdGF0aWMsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdpdmVzIG1lIHBhdXNlLiBUaGUgZ3VpZGFuY2UgaXMgcHJldHR5IGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgZm9yIGdvb2QgcmVhc29uLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBtYXhpbWl6aW5nIGNvdmVyYWdlIGFuZCBlYXNlIG9mIGZ1enppbmcuIEdpdmVuIHRoaXMsIEkmIzM5O20gZ29pbmcgdG8gc2V0IG15IHNpZ2h0cyBvbiB0aGUgbm9uLXN0YXRpYyBjYW5kaWRhdGVzIGluc3RlYWQuIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBleHBsb3JlIHRob3NlIGZpcnN0LiBMZXQmIzM5O3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJTkVUJiMzNDssCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDssCiAgICAmIzM0O0RFQlVHX0lORk9fQlRGJiMzNDssCiAgICAmIzM0O0JQRl9MU00mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDticGZfa3NvY2tfY3JlYXRlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19jb25uZWN0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19hY3F1aXJlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlJiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19zZW5kJiMzNDssCiAgICAmIzM0O2Nvbm5lY3Rfc29ja2V0JiMzNDssCiAgICAmIzM0O2JwZl9rc29ja19yZWxlYXNlX2R0b3ImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzZXQgb2YgQlBGIGtmdW5jcyAoYnBmX2tzb2NrX2NyZWF0ZSwgYnBmX2tzb2NrX2Nvbm5lY3QsIGJwZl9rc29ja19zZW5kLCBldGMuKSB0aGF0IGFsbG93IEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJiMzOTtzIEJQRiBzdWJzeXN0ZW0gYW5kIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGtmdW5jcyBhcmUgYWNjZXNzaWJsZSBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKGxpa2UgU1lTQ0FMTCBhbmQgTFNNIGhvb2tzKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU5FVCYjMzQ7LAogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7LAogICAgJiMzNDtERUJVR19JTkZPX0JURiYjMzQ7LAogICAgJiMzNDtCUEZfTFNNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2tzb2NrX2NyZWF0ZSYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfY29ubmVjdCYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfYWNxdWlyZSYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfc2VuZCYjMzQ7LAogICAgJiMzNDtjb25uZWN0X3NvY2tldCYjMzQ7LAogICAgJiMzNDticGZfa3NvY2tfcmVsZWFzZV9kdG9yJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc2V0IG9mIEJQRiBrZnVuY3MgKGJwZl9rc29ja19jcmVhdGUsIGJwZl9rc29ja19jb25uZWN0LCBicGZfa3NvY2tfc2VuZCwgZXRjLikgdGhhdCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlIGFuZCBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCYjMzk7cyBCUEYgc3Vic3lzdGVtIGFuZCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBrZnVuY3MgYXJlIGFjY2Vzc2libGUgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChsaWtlIFNZU0NBTEwgYW5kIExTTSBob29rcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEyOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTI6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIChgYnBmX2tzb2NrYCkgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMgZnJvbSBCUEYgcHJvZ3JhbXMuIFxuXG4xLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBrZXJuZWwgc3RydWN0dXJlcyAoYHN0cnVjdCBicGZfa3NvY2tgLCBgc3RydWN0IG1zZ2hkcmAsIGBzdHJ1Y3Qga3ZlY2ApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBvciBkZWNsYXJhdGlvbiAoZS5nLiwgdXNpbmcgYGt6YWxsb2Nfb2JqYCBvciBkZXNpZ25hdGVkIGluaXRpYWxpemVycykuXG4yLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCBmcm9tIEJQRiBwcm9ncmFtcyAoYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgLCBhbmQgdGhlIHNlbmQgYnVmZmVyKSBhcmUgdmFsaWRhdGVkIGZvciBzaXplIGJ5IHRoZSBrZnVuYyB3cmFwcGVycy4gVGhlIEJQRiB2ZXJpZmllciBlbmZvcmNlcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZXNlIGFyZ3VtZW50cyBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIHRvIHRoZSBrZnVuY3MuIEZ1cnRoZXJtb3JlLCBLTVNBTiB1bnBvaXNvbnMgQlBGIHN0YWNrIGFuZCBtYXAgbWVtb3J5IGJ5IGRlc2lnbiBzaW5jZSBpdCBjYW5ub3QgdHJhY2sgSklUdGVkIEJQRiBleGVjdXRpb24sIG1lYW5pbmcgS01TQU4gd291bGQgbm90IGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvcmlnaW5hdGluZyBmcm9tIHRoZSBCUEYgcHJvZ3JhbSBpdHNlbGYuXG4zLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYGNvbm5lY3Rfc29ja2V0YCBtZXJlbHkgZXh0cmFjdHMgZXhpc3RpbmcgbG9naWMgd2l0aG91dCBjaGFuZ2luZyBob3cgc29ja2V0IGFkZHJlc3NlcyBhcmUgaGFuZGxlZCBvciBjb3BpZWQuXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGUgZGF0YSBzZW50IG92ZXIgdGhlIHNvY2tldCBvcmlnaW5hdGVzIGZyb20gdGhlIEJQRiBwcm9ncmFtLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3Vlcywgd2hpY2ggYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGV4cG9zZWQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2MKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxNzoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmNiMzg3ZmI3NWU0M2IKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oCkBAIC0wLDAgJiM0MzsxLDM2IEBACiYjNDM7LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9CUEZfS1NPQ0tfSAomIzQzOyNkZWZpbmUgX0JQRl9LU09DS19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgLSBCUEYga2VybmVsIHNvY2tldCBjcmVhdGlvbiBwYXJhbWV0ZXJzCiYjNDM7ICogQGZhbWlseToJQWRkcmVzcyBmYW1pbHk6IEFGX0lORVQgb3IgQUZfSU5FVDYuCiYjNDM7ICogQHR5cGU6CVNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuCiYjNDM7ICogQHByb3RvY29sOglQcm90b2NvbCBudW1iZXIgKGUuZy4gSVBQUk9UT19VRFApLCBvciAwIGZvciB0aGUgZGVmYXVsdCBwcm90b2NvbAomIzQzOyAqCQlvZiB0aGUgZ2l2ZW4gdHlwZS4KJiM0MzsgKiBAcmVzZXJ2ZWQ6CU11c3QgYmUgemVyby4gUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuCiYjNDM7ICovCiYjNDM7c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7CiYjNDM7CV9fdTggZmFtaWx5OwomIzQzOwlfX3U4IHR5cGU7CiYjNDM7CV9fdTggcHJvdG9jb2w7CiYjNDM7CV9fdTggcmVzZXJ2ZWQ7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB1bmlvbiBicGZfa3NvY2tfYWRkciAtIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcwomIzQzOyAqIEBzaW46IElQdjQgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICogQHNpbjY6IElQdjYgc29ja2V0IGFkZHJlc3MuCiYjNDM7ICovCiYjNDM7dW5pb24gYnBmX2tzb2NrX2FkZHIgewomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwomIzQzOwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CiYjNDM7fTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX0JQRl9LU09DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaAppbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc29ja2V0LmgKQEAgLTQ2MSw2ICYjNDM7NDYxLDggQEAgZXh0ZXJuIHN0cnVjdCBmaWxlICpfX3N5c19zb2NrZXRfZmlsZShpbnQgZmFtaWx5LCBpbnQgdHlwZSwgaW50IHByb3RvY29sKTsKIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTsKIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsCiAJCQkgICAgIGludCBhZGRybGVuKTsKJiM0MztpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsCiYjNDM7CQkgICBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKTsKIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkciwKIAkJCSAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7CiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtNDM2OSw2ICYjNDM7NDM2OSw5IEBAIEJURl9JRChzdHJ1Y3QsIHRhc2tfc3RydWN0KQogI2lmZGVmIENPTkZJR19DUllQVE8KIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KQogI2VuZGlmCiYjNDM7I2lmZGVmIENPTkZJR19JTkVUCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzOyNlbmRpZgogQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcykKIAogc3RhdGljIGJvb2wgcmN1X3Byb3RlY3RlZF9vYmplY3QoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgYnRmX2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCBiM2ZkY2I0ZTM1NWZhLi5jMjBlNTIwMzU4YjhlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtNDQsNiAmIzQzOzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSAmIzQzOz0gZmFpbG92ZXIubwogb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgJiM0Mzs9IHNrbXNnLm8KIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IHNvY2tfbWFwLm8KIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9za19zdG9yYWdlLm8KJiM0MztpZmRlZiBDT05GSUdfSU5FVAomIzQzO29iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9rc29jay5vCiYjNDM7ZW5kaWYKIG9iai0kKENPTkZJR19PRikJJiM0Mzs9IG9mX25ldC5vCiBvYmotJChDT05GSUdfTkVUX1RFU1QpICYjNDM7PSBuZXRfdGVzdC5vCiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgJiM0Mzs9IGRldm1lbS5vCmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmU5OTQzYWVlYWRkMzIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9icGZfa3NvY2suYwpAQCAtMCwwICYjNDM7MSwzMjggQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnBmX2tzb2NrLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9idGZfaWRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luNi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcmVmY291bnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zb2NrZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdW5hbGlnbmVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvc29jay5oJmd0OwomIzQzOwomIzQzOy8qKgomIzQzOyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQKJiM0MzsgKiBAc29jazoJVGhlIHVuZGVybHlpbmcga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAdXNhZ2U6CVJlZmVyZW5jZSBjb3VudGVyLgomIzQzOyAqIEByd29yazoJUkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLgomIzQzOyAqLwomIzQzO3N0cnVjdCBicGZfa3NvY2sgewomIzQzOwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwomIzQzOwlyZWZjb3VudF90IHVzYWdlOwomIzQzOwlzdHJ1Y3QgcmN1X3dvcmsgcndvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CWtzID0gY29udGFpbmVyX29mKHRvX3JjdV93b3JrKHdvcmspLCBzdHJ1Y3QgYnBmX2tzb2NrLCByd29yayk7CiYjNDM7CXNvY2tfcmVsZWFzZShrcy0mZ3Q7c29jayk7CiYjNDM7CWtmcmVlKGtzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGFzayB3b3JrIGNhbiBydW4gZnJvbSBkb19leGl0KCkgYWZ0ZXIgZXhpdF9uc3Byb3h5X25hbWVzcGFjZXMoKQomIzQzOwkgKiBjbGVhcmVkIGN1cnJlbnQtJmd0O25zcHJveHksIHdoaWxlIGN1cnJlbnQgaXMgc3RpbGwgbm90IGEga3RocmVhZC4KJiM0MzsJICovCiYjNDM7CXJldHVybiAhKGN1cnJlbnQtJmd0O2ZsYWdzICZhbXA7IFBGX0tUSFJFQUQpICZhbXA7JmFtcDsgY3VycmVudC0mZ3Q7bnNwcm94eTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19jcmVhdGUoKSAtIENyZWF0ZSBhIEJQRiBrZXJuZWwgc29ja2V0LgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGVzIGFuZCBjcmVhdGVzIGEga2VybmVsIHNvY2tldC4KJiM0MzsgKgomIzQzOyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yCiYjNDM7ICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLgomIzQzOyAqCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZAomIzQzOyAqIGluIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKFNZU0NBTEwpLgomIzQzOyAqIEl0IGNhbm5vdCBiZSBjYWxsZWQgZnJvbSBhIEJQRiB3b3JrcXVldWUgY2FsbGJhY2sgYmVjYXVzZSB0aGF0IGNhbGxiYWNrCiYjNDM7ICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJiMzOTtzIG5hbWVzcGFjZSBvciBzZWN1cml0eSBjb250ZXh0LgomIzQzOyAqCiYjNDM7ICogQG9wdHM6CVBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLgomIzQzOyAqIEBvcHRzX19zejoJU2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuCiYjNDM7ICogQGVycl9fdW5pbml0OglJbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLgomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBicGZfa3NvY2sgKgomIzQzO2JwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LAomIzQzOwkJIGludCAqZXJyX191bmluaXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIHNvY2tfY3JlYXRlKCkgZGVyaXZlcyB0aGUgbmV0d29yayBuYW1lc3BhY2UsIGNyZWRlbnRpYWxzLCBhbmQgY2dyb3VwCiYjNDM7CSAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG8KJiM0MzsJICogbm90IGNhcnJ5IHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHRoYXQgaW52b2tlZCB0aGUgQlBGIHByb2dyYW0uCiYjNDM7CSAqLwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkgewomIzQzOwkJZXJyID0gLUVPUE5PVFNVUFA7CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkgewomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7CiYjNDM7CQkuZmFtaWx5ID0gUkVBRF9PTkNFKG9wdHMtJmd0O2ZhbWlseSksCiYjNDM7CQkudHlwZSA9IFJFQURfT05DRShvcHRzLSZndDt0eXBlKSwKJiM0MzsJCS5wcm90b2NvbCA9IFJFQURfT05DRShvcHRzLSZndDtwcm90b2NvbCksCiYjNDM7CQkucmVzZXJ2ZWQgPSBSRUFEX09OQ0Uob3B0cy0mZ3Q7cmVzZXJ2ZWQpLAomIzQzOwl9OwomIzQzOwomIzQzOwlpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7CiYjNDM7CQllcnIgPSAtRUlOVkFMOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgJmFtcDsmYW1wOyBvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQ2KSB7CiYjNDM7CQllcnIgPSAtRUFGTk9TVVBQT1JUOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkudHlwZSAhPSBTT0NLX0RHUkFNKSB7CiYjNDM7CQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChvcHRzX2NvcHkucHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgJmFtcDsmYW1wOyBvcHRzX2NvcHkucHJvdG9jb2wgIT0gMCkgewomIzQzOwkJZXJyID0gLUVQUk9UT05PU1VQUE9SVDsKJiM0MzsJCWdvdG8gZXJyX291dDsKJiM0MzsJfQomIzQzOwomIzQzOwlrcyA9IGt6YWxsb2Nfb2JqKCprcyk7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIGVycl9vdXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LAomIzQzOwkgKiBzb2NrZXQgbGFiZWxzLCBhbmQgdGhlIGFjdGl2ZSBuZXRucyByZWZlcmVuY2UgbWF0Y2ggYSBzb2NrZXQoMikKJiM0MzsJICogY3JlYXRlZCBieSB0aGUgQlBGIHByb2dyYW0mIzM5O3MgY2FsbGVyLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCwKJiM0MzsJCQkgICZhbXA7a3MtJmd0O3NvY2spOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsKJiM0MzsJa3MtJmd0O3NvY2stJmd0O3NrLSZndDtza19yY3ZidWYgPSBTT0NLX01JTl9SQ1ZCVUY7CiYjNDM7CWtzLSZndDtzb2NrLSZndDtzay0mZ3Q7c2tfdXNlcmxvY2tzIHw9IFNPQ0tfUkNWQlVGX0xPQ0s7CiYjNDM7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2tzLSZndDt1c2FnZSwgMSk7CiYjNDM7CXB1dF91bmFsaWduZWQoMCwgZXJyX191bmluaXQpOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CWtmcmVlKGtzKTsKJiM0MztlcnJfb3V0OgomIzQzOwlwdXRfdW5hbGlnbmVkKGVyciwgZXJyX191bmluaXQpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX2Nvbm5lY3QoKSAtIENvbm5lY3QgYSBCUEYga2VybmVsIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLgomIzQzOyAqIEBrczoJCVRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0LgomIzQzOyAqIEBhZGRyOglQb2ludGVyIHRvIGFuIElQdjQgb3IgSVB2NiBzb2NrZXQgYWRkcmVzcy4KJiM0MzsgKiBAYWRkcl9fc3o6CVNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uCiYjNDM7ICoKJiM0MzsgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWQKJiM0MzsgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsCiYjNDM7CQkJCSAgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsCiYjNDM7CQkJCSAgdTMyIGFkZHJfX3N6KQomIzQzO3sKJiM0MzsJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7CiYjNDM7CWludCBhZGRybGVuOwomIzQzOwomIzQzOwlpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJaWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJLyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqLwomIzQzOwltZW1jcHkoJmFtcDtzYSwgYWRkciwgc2l6ZW9mKCphZGRyKSk7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7CiYjNDM7CWNhc2UgQUZfSU5FVDoKJiM0MzsJCWFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEFGX0lORVQ2OgomIzQzOwkJYWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLSZndDtzb2NrLCAmYW1wO3NhLCBhZGRybGVuLCAwKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogYnBmX2tzb2NrX2FjcXVpcmUoKSAtIEFjcXVpcmUgYSByZWZlcmVuY2UgdG8gYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAa3M6CVRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYQomIzQzOyAqCXRydXN0ZWQgcG9pbnRlciAoZS5nLiBSQ1UtcHJvdGVjdGVkIGtwdHIgZnJvbSBhIG1hcCkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgYWNxdWlyZWQgY29udGV4dCBtdXN0IGVpdGhlciBiZSBzdG9yZWQgaW4gYSBtYXAgYXMgYSBrcHRyLCBvcgomIzQzOyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS4KJiM0MzsgKi8KJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykKJiM0Mzt7CiYjNDM7CWlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKCZhbXA7a3MtJmd0O3VzYWdlKSkKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJwZl9rc29ja19yZWxlYXNlKCkgLSBSZWxlYXNlIGEgQlBGIGtlcm5lbCBzb2NrZXQuCiYjNDM7ICogQGtzOglUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLgomIzQzOyAqCiYjNDM7ICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhCiYjNDM7ICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcykKJiM0Mzt7CiYjNDM7CWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtrcy0mZ3Q7dXNhZ2UpKSB7CiYjNDM7CQlJTklUX1JDVV9XT1JLKCZhbXA7a3MtJmd0O3J3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pOwomIzQzOwkJcXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgJmFtcDtrcy0mZ3Q7cndvcmspOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcykKJiM0Mzt7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0Mzt9CiYjNDM7Q0ZJX05PU0VBTChicGZfa3NvY2tfcmVsZWFzZV9kdG9yKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfa3NvY2tfc2VuZCgpIC0gU2VuZCBkYXRhIHRocm91Z2ggYSBCUEYga2VybmVsIHNvY2tldC4KJiM0MzsgKiBAa3M6CQlUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuCiYjNDM7ICogQGRhdGE6CVBvaW50ZXIgdG8gdGhlIGRhdGEgdG8gc2VuZC4KJiM0MzsgKiBAZGF0YV9fc3o6CVNpemUgb2YgdGhlIGRhdGEgdG8gc2VuZC4KJiM0MzsgKgomIzQzOyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwCiYjNDM7ICogKGtlcm5lbF9zZW5kbXNnKSwgc28gaXQgY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcy4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuCiYjNDM7ICovCiYjNDM7X19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLAomIzQzOwkJCSAgICAgICB1MzIgZGF0YV9fc3opCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKJiM0MzsJCS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBrdmVjIGlvdiA9IHsKJiM0MzsJCS5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSwKJiM0MzsJCS5pb3ZfbGVuID0gZGF0YV9fc3osCiYjNDM7CX07CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKQomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwomIzQzOwlyZXQgPSBrZXJuZWxfc2VuZG1zZyhrcy0mZ3Q7c29jaywgJmFtcDttc2csICZhbXA7aW92LCAxLCBkYXRhX19zeik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jcmVhdGUsIEtGX0FDUVVJUkUgfCBLRl9SRVRfTlVMTCB8IEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpCiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGtzb2NrX2luaXRfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfaW5pdF9rZnVuY19idGZfaWRzLAomIzQzO307CiYjNDM7CiYjNDM7QlRGX0tGVU5DU19TVEFSVChrc29ja19rZnVuY19idGZfaWRzKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfcmVsZWFzZSwgS0ZfUkVMRUFTRSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTCkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3NlbmQsIEtGX1NMRUVQQUJMRSkKJiM0MztCVEZfS0ZVTkNTX0VORChrc29ja19rZnVuY19idGZfaWRzKQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfQlBGX0xTTQomIzQzO0JURl9JRF9MSVNUX1NJTkdMRShicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkLCBmdW5jLCBicGZfbHNtX3NvY2tldF9zZW5kbXNnKQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgYnBmX2tzb2NrX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDtrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJaWYgKHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9TWVNDQUxMKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19CUEZfTFNNCiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNICZhbXA7JmFtcDsKJiM0MzsJICAgIHByb2ctJmd0O2F1eC0mZ3Q7YXR0YWNoX2J0Zl9pZCAhPSBicGZfbHNtX3NvY2tldF9zZW5kbXNnX2lkWzBdKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXJldHVybiAtRUFDQ0VTOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIgPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldCA9ICZhbXA7a3NvY2tfa2Z1bmNfYnRmX2lkcywKJiM0MzsJLmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsCiYjNDM7fTsKJiM0MzsKJiM0MztCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpCiYjNDM7QlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKQomIzQzO0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKQomIzQzOwomIzQzO3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7CiYjNDM7CQl7CiYjNDM7CQkJLmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSwKJiM0MzsJCQkua2Z1bmNfYnRmX2lkID0gYnBmX2tzb2NrX2R0b3JfaWRzWzFdLAomIzQzOwkJfSwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0ID0gcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsCiYjNDM7CQkJCQkmYW1wO2tzb2NrX2luaXRfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLAomIzQzOwkJCQkJICAgICAgICZhbXA7a3NvY2tfa2Z1bmNfc2V0KTsKJiM0MzsJcmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sCiYjNDM7CQkJCQkgICAgICAgJmFtcDtrc29ja19rZnVuY19zZXQpOwomIzQzOwlyZXR1cm4gcmV0ID86IHJlZ2lzdGVyX2J0Zl9pZF9kdG9yX2tmdW5jcyhicGZfa3NvY2tfZHRvcnMsCiYjNDM7CQkJCQkJICBBUlJBWV9TSVpFKGJwZl9rc29ja19kdG9ycyksCiYjNDM7CQkJCQkJICBUSElTX01PRFVMRSk7CiYjNDM7fQomIzQzOwomIzQzO2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jCmluZGV4IDYzYzY5YTBmYTc0ZTEuLjViMDJlNjIxN2M2ODAgMTAwNjQ0Ci0tLSBhL25ldC9zb2NrZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvc29ja2V0LmMKQEAgLTIxMDMsNiAmIzQzOzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkciwKIAlyZXR1cm4gX19zeXNfYWNjZXB0NChmZCwgdXBlZXJfc29ja2FkZHIsIHVwZWVyX2FkZHJsZW4sIDApOwogfQogCiYjNDM7aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLAomIzQzOwkJICAgaW50IGFkZHJsZW4sIGludCBmbGFncykKJiM0Mzt7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWVyciA9IHNlY3VyaXR5X3NvY2tldF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyZXNzLAomIzQzOwkJCQkgICAgICBhZGRybGVuKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CXJldHVybiBSRUFEX09OQ0Uoc29jay0mZ3Q7b3BzKS0mZ3Q7Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLAomIzQzOwkJCQkJICAgICBhZGRybGVuLCBmbGFncyk7CiYjNDM7fQomIzQzOwogLyoKICAqCUF0dGVtcHQgdG8gY29ubmVjdCB0byBhIHNvY2tldCB3aXRoIHRoZSBzZXJ2ZXIgYWRkcmVzcy4gIFRoZSBhZGRyZXNzCiAgKglpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuCkBAIC0yMTE5LDIzICYjNDM7MjEzMywxMyBAQCBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcywKIAkJICAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncykKIHsKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCWludCBlcnI7CiAKIAlzb2NrID0gc29ja19mcm9tX2ZpbGUoZmlsZSk7Ci0JaWYgKCFzb2NrKSB7Ci0JCWVyciA9IC1FTk9UU09DSzsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0KLQkgICAgc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsIGFkZHJsZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwomIzQzOwlpZiAoIXNvY2spCiYjNDM7CQlyZXR1cm4gLUVOT1RTT0NLOwogCi0JZXJyID0gUkVBRF9PTkNFKHNvY2stJmd0O29wcyktJmd0O2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcywKLQkJCQkJICAgIGFkZHJsZW4sIHNvY2stJmd0O2ZpbGUtJmd0O2ZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTsKLW91dDoKLQlyZXR1cm4gZXJyOwomIzQzOwlyZXR1cm4gY29ubmVjdF9zb2NrZXQoc29jaywgYWRkcmVzcywgYWRkcmxlbiwKJiM0MzsJCQkgICAgICBzb2NrLSZndDtmaWxlLSZndDtmX2ZsYWdzIHwgZmlsZV9mbGFncyk7CiB9CiAKIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbikKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmRkNmIxNjc2MjNkOTQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jCkBAIC0wLDAgJiM0MzsxLDEzMCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDthcnBhL2luZXQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtuZXR3b3JrX2hlbHBlcnMuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja19sc20uc2tlbC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2xzbV92ZXJpZmllci5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgTlNfVEVTVCAmIzM0O2tzb2NrX2xzbV9ucyYjMzQ7CiYjNDM7I2RlZmluZSBSRUNWX1BPUlQgNzc3NwomIzQzOyNkZWZpbmUgUkVDVl9USU1FT1VUX1NFQyA1CiYjNDM7CiYjNDM7c3RydWN0IGtzb2NrX3Rlc3RfZW52IHsKJiM0MzsJc3RydWN0IG5zdG9rZW4gKm5zdG9rZW47CiYjNDM7CWludCByZmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBrc29ja190ZXN0X2Vudl9zZXR1cChzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYgKmVudikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyID0gewomIzQzOwkJLnNpbl9mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksCiYjNDM7CQkuc2luX3BvcnQgPSBodG9ucyhSRUNWX1BPUlQpLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgdGltZXZhbCB0diA9IHsgLnR2X3NlYyA9IFJFQ1ZfVElNRU9VVF9TRUMgfTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJbWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTsKJiM0MzsJZW52LSZndDtyZmQgPSAtMTsKJiM0MzsKJiM0MzsJaWYgKCFBU1NFUlRfT0sobWFrZV9uZXRucyhOU19URVNUKSwgJiMzNDttYWtlX25ldG5zJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllbnYtJmd0O25zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpOwomIzQzOwlpZiAoIUFTU0VSVF9PS19QVFIoZW52LSZndDtuc3Rva2VuLCAmIzM0O29wZW5fbmV0bnMmIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CWVudi0mZ3Q7cmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfRkQoZW52LSZndDtyZmQsICYjMzQ7cmVjZWl2ZXIgc29ja2V0JiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwllcnIgPSBiaW5kKGVudi0mZ3Q7cmZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDthZGRyLCBzaXplb2YoYWRkcikpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7YmluZCByZWNlaXZlciYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJZXJyID0gc2V0c29ja29wdChlbnYtJmd0O3JmZCwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sICZhbXA7dHYsIHNpemVvZih0dikpOwomIzQzOwlpZiAoIUFTU0VSVF9PSyhlcnIsICYjMzQ7c2V0IHJjdnRpbWVvJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0MzsKJiM0MztmYWlsOgomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja19sc20odm9pZCkKJiM0Mzt7CiYjNDM7CUxJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTsKJiM0MzsJc3RydWN0IGtzb2NrX3Rlc3RfZW52IGVudjsKJiM0MzsJc3RydWN0IHNvY2thZGRyX2luIHRyaWdnZXJfYWRkciA9IHsKJiM0MzsJCS5zaW5fZmFtaWx5ID0gQUZfSU5FVCwKJiM0MzsJCS5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3Qga3NvY2tfbHNtICpza2VsOwomIzQzOwljaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC0mZ3Q7ZGF0YS0mZ3Q7c2VuZF9kYXRhKV0gPSB7fTsKJiM0MzsJc3NpemVfdCBuOwomIzQzOwlpbnQgdGZkID0gLTE7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNrZWwgPSBrc29ja19sc21fX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7c2tlbCBvcGVuX2FuZF9sb2FkJiMzNDspKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKCZhbXA7ZW52KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovCiYjNDM7CXNrZWwtJmd0O2Jzcy0mZ3Q7aXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spOwomIzQzOwlza2VsLSZndDtic3MtJmd0O3JlbW90ZV9wb3J0ID0gUkVDVl9QT1JUOwomIzQzOwllcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLSZndDtwcm9ncy5rc29ja19zZXR1cCksCiYjNDM7CQkJCSAgICAgJmFtcDtvcHRzKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O2tzb2NrX3NldHVwIHJ1biYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7a3NvY2tfc2V0dXAgcmV0dmFsJiMzNDspKQomIzQzOwkJZ290byBmYWlsOwomIzQzOwomIzQzOwkvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfYmluZCBmcm9tIHVzZXJzcGFjZSAqLwomIzQzOwlza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfYmluZCA9CiYjNDM7CQlicGZfcHJvZ3JhbV9fYXR0YWNoX2xzbShza2VsLSZndDtwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7CiYjNDM7CWlmICghQVNTRVJUX09LX1BUUihza2VsLSZndDtsaW5rcy5rc29ja19zb2NrZXRfYmluZCwKJiM0MzsJCQkgICAmIzM0O2F0dGFjaCBzb2NrZXRfYmluZCBsc20mIzM0OykpCiYjNDM7CQlnb3RvIGZhaWw7CiYjNDM7CiYjNDM7CXRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7CiYjNDM7CWlmICghQVNTRVJUX09LX0ZEKHRmZCwgJiMzNDt0cmlnZ2VyIHNvY2tldCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gZ2V0cGlkKCk7CiYjNDM7CWVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopJmFtcDt0cmlnZ2VyX2FkZHIsIHNpemVvZih0cmlnZ2VyX2FkZHIpKTsKJiM0MzsJc2tlbC0mZ3Q7YnNzLSZndDt0YXJnZXRfcGlkID0gMDsKJiM0MzsJaWYgKCFBU1NFUlRfT0soZXJyLCAmIzM0O3RyaWdnZXIgYmluZCYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJLyogU3RlcCAzOiBWZXJpZnkgdGhlIExTTSBob29rIHNlbnQgdGhlIG5vdGlmaWNhdGlvbiAqLwomIzQzOwlpZiAoIUFTU0VSVF9FUShza2VsLSZndDtkYXRhLSZndDtzZW5kX3JldCwgc2l6ZW9mKHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSksCiYjNDM7CQkgICAgICAgJiMzNDtMU00gc2VuZCBieXRlcyYjMzQ7KSkKJiM0MzsJCWdvdG8gZmFpbDsKJiM0MzsKJiM0MzsJbiA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpOwomIzQzOwlpZiAoQVNTRVJUX0VRKG4sIHNpemVvZihyZWN2X2RhdGEpLCAmIzM0O3JlY3Zmcm9tIGxlbiYjMzQ7KSkKJiM0MzsJCUFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtJmd0O2RhdGEtJmd0O3NlbmRfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksCiYjNDM7CQkJICAgICAmIzM0O3BheWxvYWQgbWF0Y2gmIzM0Oyk7CiYjNDM7CiYjNDM7ZmFpbDoKJiM0MzsJaWYgKHRmZCAmZ3Q7PSAwKQomIzQzOwkJY2xvc2UodGZkKTsKJiM0MzsJaWYgKGVudi5yZmQgJmd0Oz0gMCkKJiM0MzsJCWNsb3NlKGVudi5yZmQpOwomIzQzOwlpZiAoZW52Lm5zdG9rZW4pCiYjNDM7CQljbG9zZV9uZXRucyhlbnYubnN0b2tlbik7CiYjNDM7CXJlbW92ZV9uZXRucyhOU19URVNUKTsKJiM0MzsJa3NvY2tfbHNtX19kZXN0cm95KHNrZWwpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIHRlc3Rfa3NvY2tfbHNtX3ZlcmlmaWVyKHZvaWQpCiYjNDM7ewomIzQzOwlSVU5fVEVTVFMoa3NvY2tfbHNtX3ZlcmlmaWVyKTsKJiM0Mzt9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5kNmRjMjBiOGY5NWJiCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYwpAQCAtMCwwICYjNDM7MSw0NSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDt1bmlzdGQuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3Rlc3RfcHJvZ3MuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtrc29ja193cS5za2VsLmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9SRVRSSUVTIDEwMDAKJiM0MzsjZGVmaW5lIENBTExCQUNLX1dBSVRfVVMgMTAwMAomIzQzOwomIzQzO3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKQomIzQzO3sKJiM0MzsJTElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpOwomIzQzOwlzdHJ1Y3Qga3NvY2tfd3EgKnNrZWw7CiYjNDM7CXUzMiBjYWxsYmFja19kb25lOwomIzQzOwlpbnQgZXJyLCBpOwomIzQzOwomIzQzOwlza2VsID0ga3NvY2tfd3FfX29wZW5fYW5kX2xvYWQoKTsKJiM0MzsJaWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsICYjMzQ7a3NvY2tfd3Egb3BlbiBhbmQgbG9hZCYjMzQ7KSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC0mZ3Q7cHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLAomIzQzOwkJCQkgICAgICZhbXA7b3B0cyk7CiYjNDM7CWlmICghQVNTRVJUX09LKGVyciwgJiMzNDtydW4ga3NvY2tfd3Ffc3RhcnQmIzM0OykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJaWYgKCFBU1NFUlRfT0sob3B0cy5yZXR2YWwsICYjMzQ7a3NvY2tfd3Ffc3RhcnQgcmV0dmFsJiMzNDspKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpZiAoX19hdG9taWNfbG9hZF9uKCZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtjYWxsYmFja19kb25lLCBfX0FUT01JQ19BQ1FVSVJFKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcChDQUxMQkFDS19XQUlUX1VTKTsKJiM0MzsJfQomIzQzOwljYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKCZhbXA7c2tlbC0mZ3Q7YnNzLSZndDtjYWxsYmFja19kb25lLAomIzQzOwkJCQkJX19BVE9NSUNfQUNRVUlSRSk7CiYjNDM7CWlmICghQVNTRVJUX0VRKGNhbGxiYWNrX2RvbmUsIDEsICYjMzQ7d29ya3F1ZXVlIGNhbGxiYWNrIGNvbXBsZXRlZCYjMzQ7KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwlBU1NFUlRfRVEoc2tlbC0mZ3Q7YnNzLSZndDtjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCwKJiM0MzsJCSAgJiMzNDt3b3JrcXVldWUgY3JlYXRlIHJlamVjdGVkJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJa3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjAxZWRhZWI5ZmRkNGEKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmgKQEAgLTAsMCAmIzQzOzEsNzggQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaWZuZGVmIF9LU09DS19DT01NT05fSAomIzQzOyNkZWZpbmUgX0tTT0NLX0NPTU1PTl9ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsKJiM0MzsjZGVmaW5lIFNPQ0tfREdSQU0JMgomIzQzOyNkZWZpbmUgSVBQUk9UT19VRFAJMTcKJiM0MzsKJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsCiYjNDM7CQkJCSAgIHUzMiBvcHRzX19zeiwgaW50ICplcnJfX3VuaW5pdCkgX19rc3ltOwomIzQzO2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsCiYjNDM7CQkgICAgICB1MzIgYWRkcl9fc3opIF9fa3N5bTsKJiM0MztzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltOwomIzQzO3ZvaWQgYnBmX2tzb2NrX3JlbGVhc2Uoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTsKJiM0MztpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsIHUzMiBkYXRhX19zeikgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltOwomIzQzO3ZvaWQgYnBmX3JjdV9yZWFkX3VubG9jayh2b2lkKSBfX2tzeW07CiYjNDM7CiYjNDM7c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHsKJiM0MzsJc3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX190eXBlKGtleSwgaW50KTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpOwomIzQzOwlfX3VpbnQobWF4X2VudHJpZXMsIDEpOwomIzQzO30gX19rc29ja19jdHhfbWFwIFNFQygmIzM0Oy5tYXBzJiMzNDspOwomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpCiYjNDM7ewomIzQzOwl1MzIga2V5ID0gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oJmFtcDtfX2tzb2NrX2N0eF9tYXAsICZhbXA7a2V5KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2tzb2NrICprc29ja19jdHhfZ2V0KHZvaWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzID0gTlVMTCwgKnRtcDsKJiM0MzsKJiM0MzsJdiA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTsKJiM0MzsJaWYgKCF2KQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWJwZl9yY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXRtcCA9IHYtJmd0O2N0eDsKJiM0MzsJaWYgKHRtcCkKJiM0MzsJCWtzID0gYnBmX2tzb2NrX2FjcXVpcmUodG1wKTsKJiM0MzsJYnBmX3JjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlyZXR1cm4ga3M7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2OwomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2UoY3R4KTsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwl9CiYjNDM7CiYjNDM7CW9sZCA9IGJwZl9rcHRyX3hjaGcoJmFtcDt2LSZndDtjdHgsIGN0eCk7CiYjNDM7CWlmIChvbGQpIHsKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKG9sZCk7CiYjNDM7CQlyZXR1cm4gLUVFWElTVDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MDg0NTEwOThlZmIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMKQEAgLTAsMCAmIzQzOzEsNzIgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAomIzQzOy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O3ZtbGludXguaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX3RyYWNpbmcuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl9lbmRpYW4uaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl90cmFjaW5nX25ldC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVszMl0gPSAmIzM0O2hlbGxvIGZyb20gYnBmIGtzb2NrJiMzNDs7CiYjNDM7CiYjNDM7X19iZTMyIGlwdjRfcmVtb3RlOwomIzQzO19fdTE2IHJlbW90ZV9wb3J0OwomIzQzO2ludCB0YXJnZXRfcGlkOwomIzQzO2ludCBzZW5kX3JldCA9IC0xOwomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9OwomIzQzOwl1bmlvbiBicGZfa3NvY2tfYWRkciBhZGRyID0ge307CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJY3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJY3JlYXRlX29wdHMudHlwZSA9IFNPQ0tfREdSQU07CiYjNDM7CWNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2tzb2NrX2NyZWF0ZSgmYW1wO2NyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlhZGRyLnNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKJiM0MzsJYWRkci5zaW4uc2luX3BvcnQgPSBicGZfaHRvbnMocmVtb3RlX3BvcnQpOwomIzQzOwlhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTsKJiM0MzsKJiM0MzsJZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsICZhbXA7YWRkciwgc2l6ZW9mKGFkZHIpKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJYnBmX2tzb2NrX3JlbGVhc2Uoa3MpOwomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7IGVyciAhPSAtRUVYSVNUKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O2xzbS5zL3NvY2tldF9iaW5kJiMzNDspCiYjNDM7aW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsCiYjNDM7CSAgICAgaW50IGFkZHJsZW4sIGludCByZXQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYnBmX2tzb2NrICprczsKJiM0MzsJdTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpICZndDsmZ3Q7IDMyOwomIzQzOwomIzQzOwlpZiAocmV0IHx8IHBpZCAhPSB0YXJnZXRfcGlkKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJa3MgPSBrc29ja19jdHhfZ2V0KCk7CiYjNDM7CWlmICgha3MpIHsKJiM0MzsJCXNlbmRfcmV0ID0gLUVOT0VOVDsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJc2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi5mZDJjY2ZkYjU4MDIwCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbV92ZXJpZmllci5jCkBAIC0wLDAgJiM0MzsxLDM1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmL2JwZl90cmFjaW5nLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztjaGFyIHNlbmRfZGF0YVsxMV0gPSAmIzM0O2R1bW15IGRhdGEmIzM0OzsKJiM0MzsKJiM0MztTRUMoJiMzNDtsc20ucy9zb2NrZXRfc2VuZG1zZyYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDticGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rJiMzNDspCiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7Y2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWQmIzM0OykKJiM0MztpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywKJiM0MzsJICAgICBpbnQgc2l6ZSwgaW50IHJldCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjsKJiM0MzsJc3RydWN0IGJwZl9rc29jayAqa3M7CiYjNDM7CiYjNDM7CXYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7CiYjNDM7CWlmICghdikKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CWtzID0gYnBmX2twdHJfeGNoZygmYW1wO3YtJmd0O2N0eCwgTlVMTCk7CiYjNDM7CWlmICgha3MpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7CiYjNDM7CWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7Y2hhciBfX2xpY2Vuc2VbXSBTRUMoJiMzNDtsaWNlbnNlJiMzNDspID0gJiMzNDtHUEwmIzM0OzsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMTZhMTg3M2QxMzJlZAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jCkBAIC0wLDAgJiM0MzsxLDYyIEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDt2bWxpbnV4LmgmIzM0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmIzM0O2JwZl9leHBlcmltZW50YWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfdHJhY2luZ19uZXQuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtlcnJuby5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2tzb2NrX2NvbW1vbi5oJiMzNDsKJiM0MzsKJiM0MztzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUgewomIzQzOwlzdHJ1Y3QgYnBmX3dxIHdvcms7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgewomIzQzOwlfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTsKJiM0MzsJX191aW50KG1heF9lbnRyaWVzLCAxKTsKJiM0MzsJX190eXBlKGtleSwgdTMyKTsKJiM0MzsJX190eXBlKHZhbHVlLCBzdHJ1Y3Qga3NvY2tfd3FfdmFsdWUpOwomIzQzO30gd29ya19tYXAgU0VDKCYjMzQ7Lm1hcHMmIzM0Oyk7CiYjNDM7CiYjNDM7aW50IGNyZWF0ZV9lcnI7CiYjNDM7dTMyIGNhbGxiYWNrX2RvbmU7CiYjNDM7CiYjNDM7c3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHsKJiM0MzsJCS5mYW1pbHkgPSBBRl9JTkVULAomIzQzOwkJLnR5cGUgPSBTT0NLX0RHUkFNLAomIzQzOwkJLnByb3RvY29sID0gSVBQUk9UT19VRFAsCiYjNDM7CX07CiYjNDM7CXN0cnVjdCBicGZfa3NvY2sgKmtzOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJa3MgPSBicGZfa3NvY2tfY3JlYXRlKCZhbXA7b3B0cywgc2l6ZW9mKG9wdHMpLCAmYW1wO2Vycik7CiYjNDM7CWlmIChrcykKJiM0MzsJCWJwZl9rc29ja19yZWxlYXNlKGtzKTsKJiM0MzsJY3JlYXRlX2VyciA9IGVycjsKJiM0MzsJX19zeW5jX2ZldGNoX2FuZF9hZGQoJmFtcDtjYWxsYmFja19kb25lLCAxKTsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGtzb2NrX3dxX3ZhbHVlICp2YWx1ZTsKJiM0MzsJdTMyIGtleSA9IDA7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXZhbHVlID0gYnBmX21hcF9sb29rdXBfZWxlbSgmYW1wO3dvcmtfbWFwLCAmYW1wO2tleSk7CiYjNDM7CWlmICghdmFsdWUpCiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJZXJyID0gYnBmX3dxX2luaXQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgJmFtcDt3b3JrX21hcCwgMCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwllcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKCZhbXA7dmFsdWUtJmd0O3dvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBlcnI7CiYjNDM7CXJldHVybiBicGZfd3Ffc3RhcnQoJmFtcDt2YWx1ZS0mZ3Q7d29yaywgMCk7CiYjNDM7fQomIzQzOwomIzQzO2NoYXIgX19saWNlbnNlW10gU0VDKCYjMzQ7bGljZW5zZSYjMzQ7KSA9ICYjMzQ7R1BMJiMzNDs7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjUyNgoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI5MTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBTZXNzaW9uIEp1c3RpZmljYXRpb246IGJwZl9rc29jayBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UgaGF2ZSBhIG5ldyBgYnBmX2tzb2NrYCBmZWF0dXJlIHRoYXQgaW50cm9kdWNlcyBzZXZlcmFsIGtlcm5lbCBmdW5jdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzOiBEb2VzIHRoaXMgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24sIG9yIGlzIGl0IGNvdmVyZWQgYnkgZXhpc3RpbmcgQlBGIGFuZCBuZXR3b3JrIGZ1enppbmc/CgpUaGUgcGF0Y2ggaW50cm9kdWNlcyBrZnVuY3MgYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX3NlbmRgLCB3aGljaCBhbGwgdGFrZSBhcmd1bWVudHMgZnJvbSBCUEYgcHJvZ3JhbXMuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBoZXJlIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBwb3RlbnRpYWwga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiAgVGhlIGNvcmUgY29uY2VybiByZXZvbHZlcyBhcm91bmQgd2hldGhlciB1bmluaXRpYWxpemVkIGRhdGEsIHN1cHBsaWVkIGJ5IGEgQlBGIHByb2dyYW0sIGNvdWxkIGJlIHJlYWQgYnkga2VybmVsIGZ1bmN0aW9ucyBvciBzZW50IHRvIGEgbmV0d29yayBzb2NrZXQuCgpUaGUgdmVyaWZpZXIgaXMgc3VwcG9zZWQgdG8gcHJldmVudCB0aGlzLiBJdCBjaGVja3MgdGhhdCBtZW1vcnkgcGFzc2VkIHRvIGtmdW5jcyBpcyBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIGluaXRpYWwgdGhvdWdodCBpcywgZG9lcyB0aGUgdmVyaWZpZXIgX3JlYWxseV8gY2F0Y2ggYWxsIGNhc2VzLCBlc3BlY2lhbGx5IHdpdGggbmV3IGNvZGU/ICBXZSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBlYWNoIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBpdCByZWNlaXZlcy4KCmBicGZfa3NvY2tfc2VuZGAgaXMgdGhlIG1vc3Qgb2J2aW91cyBjYW5kaWRhdGUgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zOiBpdCB0YWtlcyBgY29uc3Qgdm9pZCAqZGF0YWAgYW5kIGB1MzIgZGF0YV9fc3pgLiAgSWYgYGRhdGFgIGlzIHVuaW5pdGlhbGl6ZWQsIHRoZSBrZXJuZWwgY291bGQgcG90ZW50aWFsbHkgbGVhayB0aGF0IGRhdGEuIEhvd2V2ZXIsIHRoZSB2ZXJpZmllciAqc2hvdWxkKiBiZSBjaGVja2luZyBgZGF0YWAgaXMgaW5pdGlhbGl6ZWQgdXAgdG8gYGRhdGFfX3N6YC4gS01TQU4gd2lsbCBkZXRlY3QgaWYgYGtlcm5lbF9zZW5kbXNnYCByZWNlaXZlcyB1bmluaXRpYWxpemVkIG1lbW9yeS4gQnV0IGEgYnVnIGluIHRoZSB2ZXJpZmllciBjb3VsZCBhbGxvdyB0aGlzLCBidXQgdGhpcyBwYXRjaCBkb2VzbiYjMzk7dCBjaGFuZ2UgdGhlIHZlcmlmaWVyLgoKYGJwZl9rc29ja19jcmVhdGVgIHRha2VzIGEgYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLiBUaGUgY29kZSBjb3BpZXMgdGhlIGZpZWxkcyBvbmUgYnkgb25lIHVzaW5nIGBSRUFEX09OQ0VgLiBObyBpc3N1ZSBoZXJlLCB0aGUgdmVyaWZpZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQuCgpgYnBmX2tzb2NrX2Nvbm5lY3RgIHRha2VzIGBzdHJ1Y3QgYnBmX2tzb2NrYCBhbmQgYHVuaW9uIGJwZl9rc29ja19hZGRyYC4gIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAgd29ycmllcyBtZSwgYmVjYXVzZSBpdCBoYXMgcGFkZGluZy4gYG1lbWNweWAgY29waWVzIHRoZSB3aG9sZSB1bmlvbiwgYnV0IGlmIG9ubHkgcGFydCBpcyBpbml0aWFsaXplZCwgS01TQU4gY291bGQgZmxhZyB0aGlzIGFzIGFuIGlzc3VlLiBIb3dldmVyLCB0aGUgdmVyaWZpZXIgcmVxdWlyZXMgdGhhdCB0aGUgZW50aXJlIGBhZGRyX19zemAgYnl0ZXMgKDI4IGJ5dGVzIGluIHRoaXMgY2FzZSkgcGFzc2VkIHRvIGBicGZfa3NvY2tfY29ubmVjdGAgYXJlIGluaXRpYWxpemVkLCBzbyBgbWVtY3B5YCBzaG91bGQgYmUgZmluZS4gIElmIHRoZSBCUEYgcHJvZ3JhbSBwcm92aWRlcyBhbiB1bmluaXRpYWxpemVkIHVuaW9uLCB0aGUgdmVyaWZpZXIgKnNob3VsZCogcmVqZWN0IGl0LiBJZiBub3QsIEtNU0FOIHdpbGwgdHJpZ2dlciBhbmQgaXQmIzM5O3MgYSBidWcgdGhhdCBuZWVkcyBmaXhpbmcuCgpUaGUgdmVyaWZpZXIgcGxheXMgdGhlIGtleSByb2xlOiBpdOKAmXMgcmVzcG9uc2libGUgZm9yIHRyYWNraW5nIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBzdGFjayBhbmQgbWFwIG1lbW9yeSB1c2VkIGJ5IEJQRiBwcm9ncmFtcy4gQlBGIHByb2dyYW1zIGFyZSBub3QgS01TQU4gaW5zdHJ1bWVudGVkLCBiZWNhdXNlIHRoZXkgYXJlIEpJVHRlZC4gVGhlIHZlcmlmaWVyIHRyYWNrcyBpbml0aWFsaXphdGlvbiwgYW5kIHRoZW4gdGhlIEJQRiBKSVQsIG9yIHRoZSB2ZXJpZmllciBpdHNlbGYsIGluamVjdHMgdW5wb2lzb25pbmcgY2FsbHMsIGZvciBleGFtcGxlIGZvciBzdGFjayBvciBtYXAgbWVtb3J5LgoKSW4gdGVybXMgb2YgYGNvbm5lY3Rfc29ja2V0YCwgdGhhdCYjMzk7cyBqdXN0IHJlZmFjdG9yaW5nLiBUaGVyZSBpcyBhIHBvdGVudGlhbCB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gYHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNhYCBpbiBgY29ubmVjdF9zb2NrZXRgIGlmIGFuIHVuaW5pdGlhbGl6ZWQgYWRkcmVzcyBpcyBwYXNzZWQsIGJ1dCB0aGUgY29kZSBpbiBgYnBmX2tzb2NrX2Nvbm5lY3RgIGNvcGllcyBldmVyeXRoaW5nIHRvIHRoZSBzb2NrZXQgc3RydWN0dXJlIGFuZCBhbGwgdGhlIGZpZWxkcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQsIGJlY2F1c2UgdGhlIHZlcmlmaWVyIGVuc3VyZXMgbWVtb3J5IGlzIGluaXRpYWxpemVkLgoKUmVnYXJkaW5nIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2U6IHRoZXJlIGFyZSBub25lIGhlcmUgc2luY2Ugbm90aGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgZXhjZXB0IHdoYXQgdGhlIG5ldHdvcmsgc2VuZHMuCgpOb3csIHRoZSBjZW50cmFsIHF1ZXN0aW9uczogRG9lcyB0aGlzICppbnRyb2R1Y2UqIGEgbmV3IHdheSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gYmUgcmVhZD8gTXkgY29uY2x1c2lvbiBpcyBubywgYmFzZWQgb24gd2hhdCB0aGUgdmVyaWZpZXIgZG9lcy4gVGhlcmUgaXMgbm90aGluZyBuZXcgaGVyZS4KCiogICBBcmUgdGhlcmUgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGFsbG9jYXRlZD8gSSBzZWUgYGt6YWxsb2Nfb2JqYCwgd2hpY2ggbG9va3Mgc3VzcGljaW91cywgYnV0IGl0JiMzOTtzIG5vdCBhIHN0YW5kYXJkIG1hY3JvLiBXYWl0LCBsZXQgbWUgY2hlY2sgdGhlIGNvZGUuIE9rYXksIGl0JiMzOTtzIGp1c3QgYGt6YWxsb2Moc2l6ZW9mKCprcyksIEdGUF9LRVJORUwpYC4KCioqVmVyZGljdDoqKiBUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgbmV3IGtmdW5jcywgYnV0IHRoZSAqcmlzayogb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUgaXMgbm90IG5ldy4gVGhlIGV4aXN0aW5nIEJQRiB2ZXJpZmllciwgYW5kIHRoZSB1bnBvaXNvbmluZyBvZiBtZW1vcnkgd2hlbiB0aGUga2VybmVsIGFjY2Vzc2VzIEJQRiBzdGFjayBvciBtYXAgbWVtb3J5LCBhcmUgc3VwcG9zZWQgdG8gaGFuZGxlIHRoZXNlLiBUaGVyZWZvcmUsIEkgZG9uJiMzOTt0IHNlZSBhICpzdHJvbmcqIGNhc2UgZm9yIGEgKmRlZGljYXRlZCogS01TQU4gZnV6emluZyBzZXNzaW9uLCBhbHRob3VnaCBpdCB3b3VsZG4mIzM5O3QgaHVydCB0byBpbmNsdWRlIHRoZXNlIG5ldyBmdW5jdGlvbnMgaW4gZXhpc3RpbmcgZnV6emluZyBjYW1wYWlnbnMuIEhvd2V2ZXIsIGlmIHRoZSB2ZXJpZmllciBoYXMgYSBidWcsIEtNU0FOICp3aWxsKiBjYXRjaCBpdCwgYmVjYXVzZSBpdCBjaGVja3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHBhc3NlZCB0byB0aGUgc2VuZCBzb2NrZXQsIHZpYSBga2VybmVsX3NlbmRtc2dgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtremFsbG9jX29iaiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNzkxNTAgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q9MTAzPWxpc3Q6XG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjExNTogICAgICAgICAgZ3JvY2sgPSBremFsbG9jX29iaigqZ3JvY2spO1xuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTYtICAgICAgICAgIGlmICghZ3JvY2spXG4tLVxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMjUtXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0OjEyNjogICAgICAgICAgZGltaXRyaSA9IGt6YWxsb2Nfb2JqKCpkaW1pdHJpKTtcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXG4tLVxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0PTQ1PWEgbWVzc2FnZSBhbmQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgQVBJIGFuZCByZXR1cm4gaW1tZWRpYXRlbHkpLlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdC04OS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MDpcdFx0ZGNfc3luYyA9IGt6YWxsb2Nfb2JqKCpkY19zeW5jKTtcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tYWlsYm94LnJzdDo5MTpcdFx0ZGNfYXN5bmMgPSBremFsbG9jX29iaigqZGNfYXN5bmMpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0LTkyLVxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdD0yNj1FeGFtcGxlOlxuLS1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdDo0NTpcdFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21lZGlhL3Y0bDItZmgucnN0LTQ2LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTM5OmttYWxsb2MoKSwga3phbGxvYygpLCBrbWFsbG9jX29ianMoKSwga3phbGxvY19vYmpzKCksIHZtYWxsb2MoKSwgYW5kXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NDAtdnphbGxvYygpLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgZnVydGhlciBpbmZvcm1hdGlvblxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTk2ND1UaGUgcHJlZmVycmVkIGZvcm0gZm9yIGFsbG9jYXRpbmcgYSB6ZXJvZWQgYXJyYXkgaXMgdGhlIGZvbGxvd2luZzpcbi0tXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdDo5Njg6XHRwID0ga3phbGxvY19vYmpzKCpwLCBuLCAuLi4pO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdD0zOTg9YmVjb21lLCByZXNwZWN0aXZlbHk6OlxuLS1cbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDAtXHRwdHIgPSBrbWFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XHRwdHIgPSBremFsbG9jX29iaigqcHRyIFssIGdmcF0gKTtcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdC00MDItXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0OjQwMzpcdHB0ciA9IGt6YWxsb2Nfb2JqcygqcHRyLCBjb3VudCBbLCBnZnBdICk7XG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVx0cHRyID0ga21hbGxvY19mbGV4KCpwdHIsIGZsZXhfbWVtYmVyLCBjb3VudCBbLCBnZnBdICk7XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI2OC0gICAgICAgICAgICAgIC8qIGFsbG9jYXRlIGEgY2hpcC1zcGVjaWZpYyBkYXRhIHdpdGggemVybyBmaWxsZWQgKi9cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTI3MC0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTYzMC0gIC4uLi4uXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC02MzItXG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XG4tLVxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc0OS1cbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTc1MS0gICAgICAgICAgICAgIGlmIChjaGlwID09IE5VTEwpIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5Ojpcbi0tXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNS0gICAgICAgICAgLi4uLlxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMzgzNy0gICAgICAgICAgLi4uLlxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0LTgwMS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XHRteV9maCA9IGt6YWxsb2Nfb2JqKCpteV9maCk7XG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAzLVxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jPTY0PW1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmNjRfRWhkciAqaGRyLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuLS1cbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVx0bnN5bXMgPSBzeW10YWItXHUwMDNlc2hfc2l6ZSAvIHNpemVvZihFbGY2NF9TeW0pO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XHRjaGFpbnMgPSBremFsbG9jX29ianMoc3RydWN0IGdvdF9lbnRyeSwgbnN5bXMpO1xuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmMtOTctXHRpZiAoIWNoYWlucykge1xuLS1cbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmM9MzkwPXJlZ2lzdGVyX2NwdXModm9pZClcbi0tXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jLTM5NC1cdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7XG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcdFx0c3RydWN0IGNwdSAqcCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVx0XHRpZiAoIXApXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jPTExMjA9c3RhdGljIGludCBqaXRfcHJlcGFyZV9maW5hbF9tZW1fYWxsb2Moc3RydWN0IGppdF9jb250ZXh0ICpjdHgpXG4tLVxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXHRpZiAoY3R4LVx1MDAzZW5lZWRfZXh0cmFfcGFzcykge1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XHRcdGN0eC1cdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXHUwMDNlaml0X2RhdGEpO1xuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzMtXHRcdGlmICghY3R4LVx1MDAzZWppdF9kYXRhKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYz0yMjA9bG9jb21vX2luaXRfb25lX2NoaWxkKHN0cnVjdCBsb2NvbW8gKmxjaGlwLCBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvICppbmZvKVxuLS1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM6MjI1Olx0ZGV2ID0ga3phbGxvY19vYmooc3RydWN0IGxvY29tb19kZXYpO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cdGlmICghZGV2KSB7XG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2Mi1cbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XHRsY2hpcCA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb2NvbW8pO1xuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTM2NC1cdGlmICghbGNoaXApXG4tLVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jPTczMz1zYTExMTFfaW5pdF9vbmVfY2hpbGQoc3RydWN0IHNhMTExMSAqc2FjaGlwLCBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCxcbi0tXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzM5LVxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jOjc0MDpcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcbmFyY2gvYXJtL2NvbW1vbi9zYTExMTEuYy03NDEtXHRpZiAoIWRldikge1xuLS1cbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jPTE3OD1zdGF0aWMgaW50IHNjb29wX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmM6MTg4Olx0ZGV2cHRyID0ga3phbGxvY19vYmooc3RydWN0IHNjb29wX2Rldik7XG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXHRpZiAoIWRldnB0cilcbi0tXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXG4tLVxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMC1cdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxuYXJjaC9hcm0va2VybmVsL3NtcC5jOjExMTpcdFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEyLVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmMtMTgxLVx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xuYXJjaC9hcm0va2VybmVsL3Zkc28uYzoxODI6XHR2ZHNvX3RleHRfcGFnZWxpc3QgPSBremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdGV4dF9wYWdlcyk7XG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cdGlmICh2ZHNvX3RleHRfcGFnZWxpc3QgPT0gTlVMTClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjQtXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcdHJlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcmVzb3VyY2UsIDIpO1xuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYy0yNjYtXHRpZiAoIXJlcykge1xuLS1cbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmM9Njk9c3RhdGljIGludCBfX2luaXQgZWJzYTI4NV9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg2LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYzo4NzpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jLTg4LVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzI5LVxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcdFx0bGVkID0ga3phbGxvY19vYmooKmxlZCk7XG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVx0XHRpZiAoIWxlZClcbi0tXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM9NDczPXN0YXRpYyBpbnQgaW14X21tZGNfcGVyZl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHZvaWQgX19pb21lbSAqbW1kY19iYXNlLFxuLS1cbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXG5hcmNoL2FybS9tYWNoLWlteC9tbWRjLmM6NDgwOlx0cG11X21tZGMgPSBremFsbG9jX29iaigqcG11X21tZGMpO1xuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cdGlmICghcG11X21tZGMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmMtMTI5LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcdFx0bmV3X2NvbXBhdCA9IGt6YWxsb2Nfb2JqKCpuZXdfY29tcGF0KTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYz0xNjM9c3RhdGljIHZvaWQgX19pbml0IGFybWFkYV8zNzVfMzgwX2NvaGVyZW5jeV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODctXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jOjE4ODpcdFx0cCA9IGt6YWxsb2Nfb2JqKCpwKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg5LVx0XHRwLVx1MDAzZW5hbWUgPSBrc3RyZHVwKFwmIzM0O2FybSxpby1jb2hlcmVudFwmIzM0OywgR0ZQX0tFUk5FTCk7XG4tLVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU2LVxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcbmFyY2gvYXJtL21hY2gtbXZlYnUvbXZlYnUtc29jLWlkLmMtMTU4LVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYz0zODA9c3RhdGljIHZvaWQgX19pbml0IG14c19tYWNoaW5lX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM4OS1cbmFyY2gvYXJtL21hY2gtbXhzL21hY2gtbXhzLmM6MzkwOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jLTM5MS1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM9Mjk0PXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX3N5c3RlbV9kbWFfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYzozMjI6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTYtXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3Olx0b21hcF9tY2JzcF9kZXZpY2VzID0ga3phbGxvY19vYmpzKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgc2l6ZSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMtMjk4LVx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM9NTE9c3RhdGljIGludCBfX2luaXQgb21hcDFfZG1fdGltZXJfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjctXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmM6MTI4Olx0XHRwZGF0YSA9IGt6YWxsb2Nfb2JqKCpwZGF0YSk7XG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI5LVx0XHRpZiAoIXBkYXRhKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTIzOS1cbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcdGh3ID0ga3phbGxvY19vYmooKmh3KTtcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jLTI0MS1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jPTc4Nj12b2lkIF9faW5pdCBvbWFwX3NvY19kZXZpY2VfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYy03OTAtXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM6NzkxOlx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkyLVx0aWYgKCFzb2NfZGV2X2F0dHIpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jPTEzMT1zdGF0aWMgaW50IG9tYXBfZGV2aWNlX2J1aWxkX2Zyb21fZHQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jOjE1OTpcdGh3bW9kcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3Qgb21hcF9od21vZCAqLCBvaF9jbnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cdGlmICghaHdtb2RzKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTQtXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1Olx0c3lzYyA9IGt6YWxsb2Nfb2JqKCpzeXNjKTtcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jLTMzOTYtXHRpZiAoIXN5c2MpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNC1cdGlmIChsaXN0X2VtcHR5KFx1MDAyNm9oLVx1MDAzZXNsYXZlX3BvcnRzKSkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcdFx0b2kgPSBremFsbG9jX29iaigqb2kpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cdFx0aWYgKCFvaSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYz0zNTEzPWludCBvbWFwX2h3bW9kX2luaXRfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVx0aWYgKCFvaCkge1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUyODpcdFx0b2ggPSBremFsbG9jX29iaigqb2gpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzUyOS1cdFx0aWYgKCFvaClcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzUzOTpcdFx0b2gtXHUwMDNlY2xhc3MgPSBremFsbG9jX29iaigqb2gtXHUwMDNlY2xhc3MpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cdFx0aWYgKCFvaC1cdTAwM2VjbGFzcykge1xuLS1cbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYz0zNzk9c3RhdGljIGludCBfX2luaXQgYW14M19pZGxlX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpjcHVfbm9kZSwgaW50IGNwdSlcbi0tXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmMtNDEyLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jOjQxMzpcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxNC1cdGlmICghaWRsZV9zdGF0ZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYz0zMD1zdGF0aWMgdm9pZCBfX2luaXQgc3Jfc2V0X252YWx1ZXMoc3RydWN0IG9tYXBfdm9sdF9kYXRhICp2b2x0X2RhdGEsXG4tLVxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM6NDI6XHRudmFsdWVfdGFibGUgPSBremFsbG9jX29ianMoKm52YWx1ZV90YWJsZSwgY291bnQpO1xuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cdGlmICghbnZhbHVlX3RhYmxlKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTE3MS1cdCAqL1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jOjE3MjpcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVx0aWYgKCFyZXMpXG4tLVxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxuLS1cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYy00OTItXHQgKi9cbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzo0OTM6XHRyZXMgPSBremFsbG9jX29iaihzdHJ1Y3QgcmVzb3VyY2UpO1xuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cdGlmICghcmVzKVxuLS1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcbi0tXG5hcmNoL2FybS9tYWNoLXJwYy9lY2FyZC5jLTY5NC1cbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1Olx0ZWMgPSBremFsbG9jX29iaihlY2FyZF90KTtcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk2LVx0aWYgKCFlYykge1xuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM9OTM9aW50IF9faW5pdCBzYTExeHhfY2xrX2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEwOS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmM6MTEwOlx0aHcgPSBremFsbG9jX29iaigqaHcpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMTEtXHRpZiAoIWh3KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTMxLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMzI6XHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMy1cdGlmICghaHcpXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jPTMxNz1pbnQgX19pbml0IHNhMTF4MF9yZWdpc3Rlcl9maXhlZF9yZWd1bGF0b3IoaW50IG4sXG4tLVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYzozMjQ6XHRjZmctXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVx1MDAzZWluaXRfZGF0YSk7XG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmMtMzI1LVx0aWYgKCFjZmctXHUwMDNlaW5pdF9kYXRhKVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxuLS1cbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMtMjc4LVxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XHRkID0ga3phbGxvY19vYmooKmQpO1xuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yODAtXHRpZiAoIWQpIHtcbi0tXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYz0xNDE9c3RhdGljIGludCBfX2luaXQgcmNhcl9nZW4yX3JlZ3VsYXRvcl9xdWlyayh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jLTE2Ni1cbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jOjE2NzpcdFx0cXVpcmsgPSBremFsbG9jX29iaigqcXVpcmspO1xuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmMtMTY4LVx0XHRpZiAoIXF1aXJrKSB7XG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3Rlcilcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTctXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XHRvcHBzID0ga3phbGxvY19vYmpzKCpvcHBzLCBNQVhfT1BQUyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy0zOTktXHRpZiAoIW9wcHMpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NDQyPWludCBfX2luaXQgdmVfc3BjX2luaXQodm9pZCBfX2lvbWVtICpiYXNlYWRkciwgdTMyIGExNV9jbHVzaWQsIGludCBpcnEpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNDQ0LVx0aW50IHJldDtcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy00NDYtXHRpZiAoIWluZm8pXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9NTIzPXN0YXRpYyBzdHJ1Y3QgY2xrICp2ZV9zcGNfY2xrX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmNwdV9kZXYpXG4tLVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI3LVxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM6NTI4Olx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYy01MjktXHRpZiAoIXNwYylcbi0tXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYz0xMjM9c3RhdGljIHZvaWQgX19pbml0IHZlcnNhdGlsZV9kdF9wY2lfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jOjE0NTpcdG5ld3Byb3AgPSBremFsbG9jX29iaigqbmV3cHJvcCk7XG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXHRpZiAoIW5ld3Byb3ApXG4tLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcbi0tXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEwLVxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcdHNvY19kZXZfYXR0ciA9IGt6YWxsb2Nfb2JqKCpzb2NfZGV2X2F0dHIpO1xuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jLTExMi1cdGlmICghc29jX2Rldl9hdHRyKVxuLS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM9NTAzPXN0YXRpYyBfX2luaXQgaW50IGwyeDBfcG11X2luaXQodm9pZClcbi0tXG5hcmNoL2FybS9tbS9jYWNoZS1sMngwLXBtdS5jLTUwOS1cbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmM6NTEwOlx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MTEtXHRpZiAoIWwyeDBfcG11KSB7XG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYz0zMTU9c3RhdGljIGludCBfX2luaXQgX191bmlwaGllcl9jYWNoZV9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsXG4tLVxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jOjM0NTpcdGRhdGEgPSBremFsbG9jX29iaigqZGF0YSk7XG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cdGlmICghZGF0YSlcbi0tXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxuLS1cbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtNTYwLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XHRidWYgPSBremFsbG9jX29iaigqYnVmLFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjItXHRcdFx0ICBnZnAgXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYz0xNDg3PWFybV9pb21tdV9jcmVhdGVfbWFwcGluZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYmFzZSwgdTY0IHNpemUpXG4tLVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA2LVxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzoxNTA3Olx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTE1MDgtXHRpZiAoIW1hcHBpbmcpXG4tLVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jPTMxNj1pbnQgX19pbml0IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IHJlc291cmNlICoqcmVzKVxuLS1cbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmM6MzQ0Olx0cmVncyA9IGt6YWxsb2Nfb2JqcygqcmVncywgbnJfcmVnKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXHRpZiAoIXJlZ3MpIHtcbi0tXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM4ODpcdFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zODktXHRcdGlmICghdG1wX3Jlcykge1xuLS1cbmFyY2gvYXJtL3hlbi9wMm0uYz0xNTA9Ym9vbCBfX3NldF9waHlzX3RvX21hY2hpbmVfbXVsdGkodW5zaWduZWQgbG9uZyBwZm4sXG4tLVxuYXJjaC9hcm0veGVuL3AybS5jLTE3OC1cbmFyY2gvYXJtL3hlbi9wMm0uYzoxNzk6XHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcbmFyY2gvYXJtL3hlbi9wMm0uYy0xODAtXHRpZiAoIXAybV9lbnRyeSlcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC92ZHNvLmM9Njg9c3RhdGljIGludCBfX2luaXQgX192ZHNvX2luaXQoZW51bSB2ZHNvX2FiaSBhYmkpXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jOjg0Olx0dmRzb19wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm9bYWJpXS52ZHNvX3BhZ2VzKTtcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cdGlmICh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5Mi1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcdHRoaXMgPSBremFsbG9jX29iaigqdGhpcyk7XG5hcmNoL2FybTY0L2t2bS9tbXUuYy00OTQtXHRpZiAoIXRoaXMpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9tbXUuYz05ODE9aW50IGt2bV9pbml0X3N0YWdlMl9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11LCB1bnNpZ25lZCBsb25nIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwNy1cbmFyY2gvYXJtNjQva3ZtL21tdS5jOjEwMDg6XHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMTAwOS1cdGlmICghcGd0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTExODA9aW50IHRvcHVwX2h5cF9tZW1jYWNoZShzdHJ1Y3Qga3ZtX2h5cF9tZW1jYWNoZSAqbWMsIHVuc2lnbmVkIGxvbmcgbWluX3BhZ2VzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXHRpZiAoIW1jLVx1MDAzZW1hcHBpbmcpIHtcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XHRcdG1jLVx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxuYXJjaC9hcm02NC9rdm0vbW11LmMtMTE4Ny1cdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jPTI1MTA9aW50IF9faW5pdCBrdm1fbW11X2luaXQodTMyIGh5cF92YV9iaXRzKVxuLS1cbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDMtXG5hcmNoL2FybTY0L2t2bS9tbXUuYzoyNTQ0Olx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xuYXJjaC9hcm02NC9rdm0vbW11LmMtMjU0NS1cdGlmICghaHlwX3BndGFibGUpIHtcbi0tXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYz0xMzI4PWludCBrdm1fdmNwdV9hbGxvY2F0ZV92bmNyX3RsYihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cdGlmICghdmNwdS1cdTAwM2VhcmNoLnZuY3JfdGxiKSB7XG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0Olx0XHRzdHJ1Y3Qgdm5jcl90bGIgKnZ0ID0ga3phbGxvY19vYmooKnZjcHUtXHUwMDNlYXJjaC52bmNyX3RsYixcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTEzMzUtXHRcdFx0XHRcdFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDItXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlx0a3ZtLVx1MDAzZWFyY2guc3lzcmVnX21hc2tzID0ga3phbGxvY19vYmooKihrdm0tXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwNC1cdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jPTExNj1zdGF0aWMgc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUgKmt2bV9wdGR1bXBfcGFyc2VyX2NyZWF0ZShzdHJ1Y3Qga3ZtX3MyX21tdSAqbW11KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jLTEyMS1cbmFyY2gvYXJtNjQva3ZtL3B0ZHVtcC5jOjEyMjpcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjMtXHRpZiAoIXN0KVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM9MjA3PXN0YXRpYyBpbnQga3ZtX3ZnaWNfZGlzdF9pbml0KHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgaW50IG5yX3NwaXMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXHRkaXN0LVx1MDAzZWFjdGl2ZV9zcGlzID0gKGF0b21pY190KUFUT01JQ19JTklUKDApO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XHRkaXN0LVx1MDAzZXNwaXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLCBucl9zcGlzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXHRpZiAoIWRpc3QtXHUwMDNlc3Bpcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTMxNj1zdGF0aWMgaW50IHZnaWNfYWxsb2NhdGVfcHJpdmF0ZV9pcnFzX2xvY2tlZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB0eXBlKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzozMzI6XHR2Z2ljX2NwdS1cdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0zMzMtXHRcdFx0XHRcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmM9MTQyPWludCBrdm1fdmdpY19zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNDgtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYzoxNDk6XHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jLTE1MC1cdGlmICghZW50cmllcylcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9NzY9c3RhdGljIHN0cnVjdCB2Z2ljX2lycSAqdmdpY19hZGRfbHBpKHN0cnVjdCBrdm0gKmt2bSwgdTMyIGludGlkLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzo4ODpcdGlycSA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2lycSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cdGlmICghaXJxKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy05NzYtXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3Olx0Y29sbGVjdGlvbiA9IGt6YWxsb2Nfb2JqKCpjb2xsZWN0aW9uLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3OC1cdGlmICghY29sbGVjdGlvbilcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTAxNT1zdGF0aWMgc3RydWN0IGl0c19pdGUgKnZnaWNfaXRzX2FsbG9jX2l0ZShzdHJ1Y3QgaXRzX2RldmljZSAqZGV2aWNlLFxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIwLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jOjEwMjE6XHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTEwMjItXHRpZiAoIWl0ZSlcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM9MTE0Mj1zdGF0aWMgc3RydWN0IGl0c19kZXZpY2UgKnZnaWNfaXRzX2FsbG9jX2RldmljZShzdHJ1Y3QgdmdpY19pdHMgKml0cyxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYzoxMTQ4Olx0ZGV2aWNlID0ga3phbGxvY19vYmooKmRldmljZSwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVx0aWYgKCFkZXZpY2UpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjItXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcdGl0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCB2Z2ljX2l0cywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xODY0LVx0aWYgKCFpdHMpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYz04ODY9c3RhdGljIGludCB2Z2ljX3YzX2FsbG9jX3JlZGlzdF9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLCB1aW50MzJfdCBpbmRleCxcbi0tXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1tbWlvLXYzLmM6OTMyOlx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jLTkzMy1cdGlmICghcmRyZWcpXG4tLVxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmM9MjQyPWludCB2Z2ljX3Y0X2luaXQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jOjI1OTpcdGRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXHUwMDNlaXRzX3ZtLnZwZXMsIG5yX3ZjcHVzLFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLXY0LmMtMjYwLVx0XHRcdFx0XHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbi0tXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMTE0PXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4tLVxuYXJjaC9hcm02NC9uZXQvYnBmX2ppdF9jb21wLmMtMjEzNS1cdGlmICghaml0X2RhdGEpIHtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jOjIxMzY6XHRcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcbmFyY2gvYXJtNjQvbmV0L2JwZl9qaXRfY29tcC5jLTIxMzctXHRcdGlmICghaml0X2RhdGEpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmM9MTc9c3RhdGljIGludCBfX2luaXQgdmRzb19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC92ZHNvLmMtMjItXHR2ZHNvX3BhZ2VsaXN0ID1cbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlx0XHRremFsbG9jX29ianMoc3RydWN0IHBhZ2UgKiwgdmRzb19wYWdlcyk7XG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cdGlmICh1bmxpa2VseSh2ZHNvX3BhZ2VsaXN0ID09IE5VTEwpKSB7XG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDcyLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlx0cmFuZ2UgPSBremFsbG9jX29iaigqcmFuZ2UsIEdGUF9BVE9NSUMpO1xuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtNDc0LVx0aWYgKCFyYW5nZSlcbi0tXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jPTQ1PXN0YXRpYyBpbnQgX19pbml0IGluaXRfdmRzbyh2b2lkKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmMtNTUtXHR2ZHNvX2luZm8uY29kZV9tYXBwaW5nLnBhZ2VzID1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XHRcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX2luZm8uc2l6ZSAvIFBBR0VfU0laRSk7XG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxuLS1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYz02MTQ9c3RhdGljIGludCBrdm1fZWlvaW50Y19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jLTYyNC1cbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYzo2MjU6XHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjYtXHRpZiAoIXMpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM9Mzk0PXN0YXRpYyBpbnQga3ZtX2lwaV9jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmM6NDEyOlx0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBsb29uZ2FyY2hfaXBpKTtcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cdGlmICghcylcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzM1NAoJCQkJCQkJb3V0cHV0OiAzNDUKCQkJCQkJCXRob3VnaHRzOiA0NzEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBCUEYgS3NvY2sgUGF0Y2g6IEEgRGVlcCBEaXZlIGludG8gTWVtb3J5IEluaXRpYWxpemF0aW9uIGFuZCBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gY2FyZWZ1bGx5IGRpc3NlY3RpbmcgdGhpcyBCUEYga3NvY2sgcGF0Y2gsIHRyeWluZyB0byB1bmRlcnN0YW5kIHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcywgcGFydGljdWxhcmx5IHRob3NlIHRoYXQgS01TQU4gbWlnaHQgZXhwb3NlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcga2Z1bmMgQVBJIGZvciBCUEYgcHJvZ3JhbXMgdG8gbWFuYWdlIHNvY2tldHM6IGNyZWF0aW5nLCBjb25uZWN0aW5nLCBhbmQgc2VuZGluZyBkYXRhLiBNeSBmaXJzdCB0aG91Z2h0IHdhcywgJiMzNDtMZXQmIzM5O3MgY2hlY2sgZXZlcnkgYWxsb2NhdGlvbiBhbmQgbWVtb3J5IHRyYW5zZmVyIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeS4mIzM0OwoKSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCBga3phbGxvY19vYmpgLCB3aGljaCBzZWVtcyBsaWtlIGEgbWFjcm8gZm9yIGBremFsbG9jYC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlcywgbGlrZSBga3NgICh0aGUgYGJwZl9rc29ja2Agc3RydWN0KSwgYXJlIHplcm8taW5pdGlhbGl6ZWQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGluY2x1ZGVzIHRoZSBzb2NrZXQgaXRzZWxmIChga3MtJmd0O3NvY2tgKSwgdXNhZ2UgY291bnRlciwgYW5kIHJlbGVhc2Ugd29yaywgbWVhbmluZyBhbnkgcG90ZW50aWFsIGlzc3VlcyBpbiBpbml0aWFsaXphdGlvbiBhcmUgbW9zdGx5IGVsaW1pbmF0ZWQuIEkmIzM5O20gZm9jdXNpbmcgb24gYGJwZl9rc29ja19jcmVhdGVfb3B0c2AgYW5kIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAgc3RydWN0dXJlcywgbWFraW5nIHN1cmUgdGhlcmUmIzM5O3Mgbm8gcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHBhcnRzLgoKV2l0aCBgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0c2AsIGEgcXVpY2sgc2l6ZSBjaGVjayBhbmQgZGlyZWN0IGluaXRpYWxpemF0aW9uIG1ha2UgaXQgc3RyYWlnaHRmb3J3YXJkIGFuZCBzYWZlLiBUaGVuIEkgd2VudCBkZWVwZXIgaW50byB0aGUgYGJwZl9rc29ja19hZGRyYCB1bmlvbi4gVGhlIHBvdGVudGlhbCBpcyB0aGF0IHRoZSB1c2VyIG9ubHkgaW5pdGlhbGl6ZXMgcGFydCBvZiB0aGUgdW5pb24gKGUuZy4sIHRoZSBgc29ja2FkZHJfaW5gIHBvcnRpb24pLCBsZWF2aW5nIHRoZSBvdGhlciBwYXJ0IHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYW4gaW1tZWRpYXRlIHJlZCBmbGFnIGZvciBLTVNBTi4gVGhlIGNvZGUgdXNlcyBgbWVtY3B5YCB0byBjb3B5IHRoZSBwcm92aWRlZCBhZGRyZXNzIGludG8gYSBrZXJuZWwgc3RydWN0LiBOb3csIHRoZSBjcml0aWNhbCBwb2ludCBpcyB0aGF0IHRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgdGhhdCBhbGwgMjggYnl0ZXMgb2YgYHVuaW9uIGJwZl9rc29ja19hZGRyYCBhcmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGtmdW5jIGNhbGxzLiBTbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBzaG91bGQgYmUgYSBwcm9ibGVtIHRoZXJlLgoKQnV0IHdhaXQuIFdoYXQgaWYgbWVtb3J5IGNvbWVzIGZyb20gYSBCUEYgbWFwIG9yIHJpbmcgYnVmZmVyPyBUaGUgdmVyaWZpZXIgZG9lc24mIzM5O3QgKmR5bmFtaWNhbGx5KiB0cmFjayB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmluZyBidWZmZXIgbWVtb3J5LiBUaGVuLCBJIG5lZWRlZCB0byBjaGVjayB3aGF0IGhhcHBlbnMgaWYgdW5pbml0aWFsaXplZCByaW5nIGJ1ZmZlciBtZW1vcnkgaXMgcGFzc2VkIHRvIGBicGZfa3NvY2tfY29ubmVjdGAuIGBtZW1jcHlgIGNvcGllcyB1bmluaXRpYWxpemVkIGRhdGEsIHdoaWNoIGlzIG5vdyBhbiBpbnRlcmVzdGluZyBzY2VuYXJpbyB0aGF0IHNob3VsZCBjYXVzZSBhIEtNU0FOIHJlcG9ydCwgYnV0IGBjb25uZWN0X3NvY2tldGAgaXMgb25seSBnb2luZyB0byByZWFkIHRoZSBpbml0aWFsaXplZCBwYXJ0LCB3aGljaCBpcyB3aHkgS01TQU4gd29uJiMzOTt0IGNvbXBsYWluLiBUaGUgbW9zdCBpbXBvcnRhbnQgcG9pbnQgaXMgdGhhdCB0aGUgQlBGIHByb2dyYW0gbmVlZHMgdG8gaGF2ZSBwcm9wZXJseSBpbml0aWFsaXplZCBtZW1vcnkuIElmIGBzYS5zc19mYW1pbHlgIGlzIHVuaW5pdGlhbGl6ZWQsIHRoZW4gd2UgZ2V0IGFuIGVycm9yLCBidXQgdGhpcyBpcyBhIHVzZXIgZXJyb3IuCgpUaGlua2luZyBjYXJlZnVsbHksIGFuZCBjb25maXJtaW5nLCBLTVNBTiAqc2hvdWxkKiBiZSByZXBvcnRpbmcgYSBidWcgd2hlbiB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyB1c2VkLiBLTVNBTiBpbnN0cnVtZW50cyBgbWVtY3B5YCBhbmQgd2lsbCByZXBvcnQgYSBidWcgd2hlbiB0aGUgc291cmNlIGNvbnRhaW5zIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCAqdW5sZXNzKiB0aGUgbWVtb3J5IGlzIHVucG9pc29uZWQuIFNpbmNlIEJQRiBtYXBzIGFuZCByaW5nIGJ1ZmZlcnMgYXJlIHVucG9pc29uZWQgYnkgS01TQU4sIHRoaXMgYmVjb21lcyBzYWZlLCBiZWNhdXNlIEtNU0FOIGRvZXMgbm90IHRyYWNrIEJQRiBleGVjdXRpb24gKGUuZy4sIHdyaXRlcyB0byB0aGUgc3RhY2spLiBLTVNBTiBvbmx5IGNoZWNrcyBtZW1vcnkgdXNhZ2Ugd2hlbiBpdCYjMzk7cyBhY2Nlc3NlZCwgc3VjaCBhcyB0aHJvdWdoIGBtZW1jcHlgLiBJZiBhIEJQRiBwcm9ncmFtIGRvZXNuJiMzOTt0IGluaXRpYWxpemUgaXQsIEtNU0FOIHdpbGwgbm90IHNlZSBpdCwgYmVjYXVzZSBLTVNBTiBoYXMgdGhlIG1lbW9yeSBtYXJrZWQgYXMgaW5pdGlhbGl6ZWQgYnkgZGVzaWduLgoKVGhlbiwgdGhlcmUmIzM5O3MgYGJwZl9rc29ja19zZW5kYCwgd2hpY2ggY2FsbHMgYGtlcm5lbF9zZW5kbXNnYC4gYHN0cnVjdCBtc2doZHJgIGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGFuZCB0aGUgYHN0cnVjdCBrdmVjYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLgoKSSB0aGVuIGNoZWNrIGBjb25uZWN0X3NvY2tldGAsIHdoaWNoIGlzIGEgcmVmYWN0b3JpbmcuIFRoZSBleGlzdGluZyBsb2dpYyBjb3BpZXMgZGF0YSBmcm9tIHVzZXJzcGFjZSB3aXRoIGBtb3ZlX2FkZHJfdG9fa2VybmVsYC4gU28gaXQmIzM5O3Mgc2FmZS4gVGhlcmUmIzM5O3Mgbm8gbmV3IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgTmVlZHNLTVNBTiA9IGZhbHNlYC4KCkZpbmFsbHksIEkgZGlkIGFub3RoZXIgY2hlY2sgb2YgYGJwZl9rc29ja19jcmVhdGVfb3B0c2AgYW5kIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAgc3RydWN0dXJlcyBhZ2FpbiwgdG8gZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgc2FmZS4gSSYjMzk7dmUgcmVjb25maXJtZWQgbXkgcmVhc29uaW5nLiBJdCYjMzk7cyBzYWZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBCUEYgbWVtb3J5IGlzIGhhbmRsZWQgYnkgdGhlIHZlcmlmaWVyIGFuZCB1bnBvaXNvbmVkIGJ5IEtNU0FOLiBObyBuZXcgZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS4KCktBU0FOIGlzIHN1ZmZpY2llbnQuIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgQlBGIGtmdW5jIEFQSSBmb3Igc29ja2V0cy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGNvbXBsZXgga2VybmVsIHN0cnVjdHVyZXMgdGhhdCBhcmUgY29waWVkIHRvIHVzZXJzcGFjZS4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIG5ldyBwYXJzaW5nIG9mIHVzZXJzcGFjZSBkYXRhIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHVzZWQuIEl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBuZXcgbmV0d29yayBwcm90b2NvbHMuIEkmIzM5O20gc2V0dGluZyBgTmVlZHNLTVNBTj1mYWxzZWAuIEl0JiMzOTtzIGFsbCBnb29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMjoxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgKGBicGZfa3NvY2tgKSB0byBjcmVhdGUsIGNvbm5lY3QsIGFuZCBzZW5kIGRhdGEgdGhyb3VnaCBrZXJuZWwgc29ja2V0cyBmcm9tIEJQRiBwcm9ncmFtcy4gXG5cbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGJwZl9rc29ja2AsIGBzdHJ1Y3QgbXNnaGRyYCwgYHN0cnVjdCBrdmVjYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIG9yIGRlY2xhcmF0aW9uIChlLmcuLCB1c2luZyBga3phbGxvY19vYmpgIG9yIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzKS5cbjIuIFRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIGZyb20gQlBGIHByb2dyYW1zIChgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0c2AsIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAsIGFuZCB0aGUgc2VuZCBidWZmZXIpIGFyZSB2YWxpZGF0ZWQgZm9yIHNpemUgYnkgdGhlIGtmdW5jIHdyYXBwZXJzLiBUaGUgQlBGIHZlcmlmaWVyIGVuZm9yY2VzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBmb3IgdGhlc2UgYXJndW1lbnRzIGJlZm9yZSB0aGV5IGFyZSBwYXNzZWQgdG8gdGhlIGtmdW5jcy4gRnVydGhlcm1vcmUsIEtNU0FOIHVucG9pc29ucyBCUEYgc3RhY2sgYW5kIG1hcCBtZW1vcnkgYnkgZGVzaWduIHNpbmNlIGl0IGNhbm5vdCB0cmFjayBKSVR0ZWQgQlBGIGV4ZWN1dGlvbiwgbWVhbmluZyBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yaWdpbmF0aW5nIGZyb20gdGhlIEJQRiBwcm9ncmFtIGl0c2VsZi5cbjMuIFRoZSByZWZhY3RvcmluZyBvZiBgY29ubmVjdF9zb2NrZXRgIG1lcmVseSBleHRyYWN0cyBleGlzdGluZyBsb2dpYyB3aXRob3V0IGNoYW5naW5nIGhvdyBzb2NrZXQgYWRkcmVzc2VzIGFyZSBoYW5kbGVkIG9yIGNvcGllZC5cbjQuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZSBkYXRhIHNlbnQgb3ZlciB0aGUgc29ja2V0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgQlBGIHByb2dyYW0uXG5cbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCB3aGljaCBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gZXhwb3NlZCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSAoYGJwZl9rc29ja2ApIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzIGZyb20gQlBGIHByb2dyYW1zLiBcblxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgYnBmX2tzb2NrYCwgYHN0cnVjdCBtc2doZHJgLCBgc3RydWN0IGt2ZWNgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gb3IgZGVjbGFyYXRpb24gKGUuZy4sIHVzaW5nIGBremFsbG9jX29iamAgb3IgZGVzaWduYXRlZCBpbml0aWFsaXplcnMpLlxuMi4gVGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgZnJvbSBCUEYgcHJvZ3JhbXMgKGBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCwgYHVuaW9uIGJwZl9rc29ja19hZGRyYCwgYW5kIHRoZSBzZW5kIGJ1ZmZlcikgYXJlIHZhbGlkYXRlZCBmb3Igc2l6ZSBieSB0aGUga2Z1bmMgd3JhcHBlcnMuIFRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciB0aGVzZSBhcmd1bWVudHMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCB0byB0aGUga2Z1bmNzLiBGdXJ0aGVybW9yZSwgS01TQU4gdW5wb2lzb25zIEJQRiBzdGFjayBhbmQgbWFwIG1lbW9yeSBieSBkZXNpZ24gc2luY2UgaXQgY2Fubm90IHRyYWNrIEpJVHRlZCBCUEYgZXhlY3V0aW9uLCBtZWFuaW5nIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgb3JpZ2luYXRpbmcgZnJvbSB0aGUgQlBGIHByb2dyYW0gaXRzZWxmLlxuMy4gVGhlIHJlZmFjdG9yaW5nIG9mIGBjb25uZWN0X3NvY2tldGAgbWVyZWx5IGV4dHJhY3RzIGV4aXN0aW5nIGxvZ2ljIHdpdGhvdXQgY2hhbmdpbmcgaG93IHNvY2tldCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgb3IgY29waWVkLlxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlIGRhdGEgc2VudCBvdmVyIHRoZSBzb2NrZXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBCUEYgcHJvZ3JhbS5cblxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIHdoaWNoIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBleHBvc2VkIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzoyMy42OTY1NzA3MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTUyMzU5NjY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2tzb2NrX2NyZWF0ZVwiLFxuICAgIFwiYnBmX2tzb2NrX2Nvbm5lY3RcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImNvbm5lY3Rfc29ja2V0XCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZV9kdG9yXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEJQRiBrZnVuYyBBUEkgKGBicGZfa3NvY2tgKSB0byBjcmVhdGUsIGNvbm5lY3QsIGFuZCBzZW5kIGRhdGEgdGhyb3VnaCBrZXJuZWwgc29ja2V0cyBmcm9tIEJQRiBwcm9ncmFtcy4gXFxuXFxuMS4gQWxsIG5ld2x5IGludHJvZHVjZWQga2VybmVsIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgYnBmX2tzb2NrYCwgYHN0cnVjdCBtc2doZHJgLCBgc3RydWN0IGt2ZWNgKSBhcmUgZnVsbHkgemVyby1pbml0aWFsaXplZCB1cG9uIGFsbG9jYXRpb24gb3IgZGVjbGFyYXRpb24gKGUuZy4sIHVzaW5nIGBremFsbG9jX29iamAgb3IgZGVzaWduYXRlZCBpbml0aWFsaXplcnMpLlxcbjIuIFRoZSBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIGZyb20gQlBGIHByb2dyYW1zIChgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0c2AsIGB1bmlvbiBicGZfa3NvY2tfYWRkcmAsIGFuZCB0aGUgc2VuZCBidWZmZXIpIGFyZSB2YWxpZGF0ZWQgZm9yIHNpemUgYnkgdGhlIGtmdW5jIHdyYXBwZXJzLiBUaGUgQlBGIHZlcmlmaWVyIGVuZm9yY2VzIG1lbW9yeSBpbml0aWFsaXphdGlvbiBmb3IgdGhlc2UgYXJndW1lbnRzIGJlZm9yZSB0aGV5IGFyZSBwYXNzZWQgdG8gdGhlIGtmdW5jcy4gRnVydGhlcm1vcmUsIEtNU0FOIHVucG9pc29ucyBCUEYgc3RhY2sgYW5kIG1hcCBtZW1vcnkgYnkgZGVzaWduIHNpbmNlIGl0IGNhbm5vdCB0cmFjayBKSVR0ZWQgQlBGIGV4ZWN1dGlvbiwgbWVhbmluZyBLTVNBTiB3b3VsZCBub3QgZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yaWdpbmF0aW5nIGZyb20gdGhlIEJQRiBwcm9ncmFtIGl0c2VsZi5cXG4zLiBUaGUgcmVmYWN0b3Jpbmcgb2YgYGNvbm5lY3Rfc29ja2V0YCBtZXJlbHkgZXh0cmFjdHMgZXhpc3RpbmcgbG9naWMgd2l0aG91dCBjaGFuZ2luZyBob3cgc29ja2V0IGFkZHJlc3NlcyBhcmUgaGFuZGxlZCBvciBjb3BpZWQuXFxuNC4gTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgdGhlIGRhdGEgc2VudCBvdmVyIHRoZSBzb2NrZXQgb3JpZ2luYXRlcyBmcm9tIHRoZSBCUEYgcHJvZ3JhbS5cXG5cXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3Vlcywgd2hpY2ggYXJlIGZ1bGx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMuIFRoZXJlIGlzIG5vIGV4cG9zZWQgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzZXQgb2YgQlBGIGtmdW5jcyAoYnBmX2tzb2NrX2NyZWF0ZSwgYnBmX2tzb2NrX2Nvbm5lY3QsIGJwZl9rc29ja19zZW5kLCBldGMuKSB0aGF0IGFsbG93IEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgQlBGIHN1YnN5c3RlbSBhbmQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUga2Z1bmNzIGFyZSBhY2Nlc3NpYmxlIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAobGlrZSBTWVNDQUxMIGFuZCBMU00gaG9va3MpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzoyMy42OTY1NzcxNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU0NTA0NDAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2NcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTI6MTc6MjIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaCBiL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmNiMzg3ZmI3NWU0M2JcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxcbkBAIC0wLDAgKzEsMzYgQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqL1xcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaWZuZGVmIF9CUEZfS1NPQ0tfSFxcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW42LmhcXHUwMDNlXFxuK1xcbisvKipcXG4rICogc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAtIEJQRiBrZXJuZWwgc29ja2V0IGNyZWF0aW9uIHBhcmFtZXRlcnNcXG4rICogQGZhbWlseTpcXHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cXG4rICogQHR5cGU6XFx0U29ja2V0IHR5cGU6IG9ubHkgU09DS19ER1JBTSBzdXBwb3J0ZWQgZm9yIG5vdy5cXG4rICogQHByb3RvY29sOlxcdFByb3RvY29sIG51bWJlciAoZS5nLiBJUFBST1RPX1VEUCksIG9yIDAgZm9yIHRoZSBkZWZhdWx0IHByb3RvY29sXFxuKyAqXFx0XFx0b2YgdGhlIGdpdmVuIHR5cGUuXFxuKyAqIEByZXNlcnZlZDpcXHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxcbisgKi9cXG4rc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB7XFxuK1xcdF9fdTggZmFtaWx5O1xcbitcXHRfX3U4IHR5cGU7XFxuK1xcdF9fdTggcHJvdG9jb2w7XFxuK1xcdF9fdTggcmVzZXJ2ZWQ7XFxuK307XFxuK1xcbisvKipcXG4rICogdW5pb24gYnBmX2tzb2NrX2FkZHIgLSBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3NcXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cXG4rICogQHNpbjY6IElQdjYgc29ja2V0IGFkZHJlc3MuXFxuKyAqL1xcbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjtcXG4rfTtcXG4rXFxuKyNlbmRpZiAvKiBfQlBGX0tTT0NLX0ggKi9cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCBiL2luY2x1ZGUvbGludXgvc29ja2V0LmhcXG5pbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc29ja2V0LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xcbiBleHRlcm4gaW50IF9fc3lzX2JpbmQoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1bXlhZGRyLCBpbnQgYWRkcmxlbik7XFxuIGV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdFxcdCAgICAgaW50IGFkZHJsZW4pO1xcbitpbnQgY29ubmVjdF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXFxuK1xcdFxcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpO1xcbiBleHRlcm4gaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHIsXFxuIFxcdFxcdFxcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XFxuIGV4dGVybiBpbnQgX19zeXNfY29ubmVjdChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVzZXJ2YWRkcixcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXFxuaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5AQCAtNDM2OSw2ICs0MzY5LDkgQEAgQlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXFxuICNpZmRlZiBDT05GSUdfQ1JZUFRPXFxuIEJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxcbiAjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19JTkVUXFxuK0JURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG4rI2VuZGlmXFxuIEJURl9TRVRfRU5EKHJjdV9wcm90ZWN0ZWRfdHlwZXMpXFxuIFxcbiBzdGF0aWMgYm9vbCByY3VfcHJvdGVjdGVkX29iamVjdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpXFxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL01ha2VmaWxlIGIvbmV0L2NvcmUvTWFrZWZpbGVcXG5pbmRleCBiM2ZkY2I0ZTM1NWZhLi5jMjBlNTIwMzU4YjhlIDEwMDY0NFxcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXFxuKysrIGIvbmV0L2NvcmUvTWFrZWZpbGVcXG5AQCAtNDQsNiArNDQsOSBAQCBvYmotJChDT05GSUdfRkFJTE9WRVIpICs9IGZhaWxvdmVyLm9cXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xcbiBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IHNvY2tfbWFwLm9cXG4gb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXFxuK2lmZGVmIENPTkZJR19JTkVUXFxuK29iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2tzb2NrLm9cXG4rZW5kaWZcXG4gb2JqLSQoQ09ORklHX09GKVxcdCs9IG9mX25ldC5vXFxuIG9iai0kKENPTkZJR19ORVRfVEVTVCkgKz0gbmV0X3Rlc3Qub1xcbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvYnBmX2tzb2NrLmMgYi9uZXQvY29yZS9icGZfa3NvY2suY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTk5NDNhZWVhZGQzMlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9uZXQvY29yZS9icGZfa3NvY2suY1xcbkBAIC0wLDAgKzEsMzI4IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmX2tzb2NrLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbjYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25ldC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcmVmY291bnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zb2NrZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvc29jay5oXFx1MDAzZVxcbitcXG4rLyoqXFxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcXG4rICogQHNvY2s6XFx0VGhlIHVuZGVybHlpbmcga2VybmVsIHNvY2tldC5cXG4rICogQHVzYWdlOlxcdFJlZmVyZW5jZSBjb3VudGVyLlxcbisgKiBAcndvcms6XFx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxcbisgKi9cXG4rc3RydWN0IGJwZl9rc29jayB7XFxuK1xcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XFxuK1xcdHJlZmNvdW50X3QgdXNhZ2U7XFxuK1xcdHN0cnVjdCByY3Vfd29yayByd29yaztcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIGtzb2NrX3JlbGVhc2Vfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcbitcXHRrcyA9IGNvbnRhaW5lcl9vZih0b19yY3Vfd29yayh3b3JrKSwgc3RydWN0IGJwZl9rc29jaywgcndvcmspO1xcbitcXHRzb2NrX3JlbGVhc2Uoa3MtXFx1MDAzZXNvY2spO1xcbitcXHRrZnJlZShrcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIGJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQodm9pZClcXG4re1xcbitcXHQvKlxcbitcXHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXFxuK1xcdCAqIGNsZWFyZWQgY3VycmVudC1cXHUwMDNlbnNwcm94eSwgd2hpbGUgY3VycmVudCBpcyBzdGlsbCBub3QgYSBrdGhyZWFkLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuICEoY3VycmVudC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBQRl9LVEhSRUFEKSBcXHUwMDI2XFx1MDAyNiBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5O1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuK1xcbisvKipcXG4rICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXFxuKyAqXFxuKyAqIEFsbG9jYXRlcyBhbmQgY3JlYXRlcyBhIGtlcm5lbCBzb2NrZXQuXFxuKyAqXFxuKyAqIFRoZSByZXR1cm5lZCBjb250ZXh0IG11c3QgZWl0aGVyIGJlIHN0b3JlZCBpbiBhIG1hcCBhcyBhIGtwdHIsIG9yXFxuKyAqIGZyZWVkIHdpdGggYnBmX2tzb2NrX3JlbGVhc2UoKS5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBtYXkgc2xlZXAgKHNvY2tfY3JlYXRlKSwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cXG4rICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcXG4rICogZG9lcyBub3QgcmV0YWluIHRoZSBpbnZva2luZyB0YXNrJ3MgbmFtZXNwYWNlIG9yIHNlY3VyaXR5IGNvbnRleHQuXFxuKyAqXFxuKyAqIEBvcHRzOlxcdFBvaW50ZXIgdG8gc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyB3aXRoIHNvY2tldCBwYXJhbWV0ZXJzLlxcbisgKiBAb3B0c19fc3o6XFx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXFxuKyAqIEBlcnJfX3VuaW5pdDpcXHRJbnRlZ2VyIHRvIHN0b3JlIGVycm9yIGNvZGUgd2hlbiBOVUxMIGlzIHJldHVybmVkLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqXFxuK2JwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cywgdTMyIG9wdHNfX3N6LFxcbitcXHRcXHQgaW50ICplcnJfX3VuaW5pdClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHNfY29weTtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBzb2NrX2NyZWF0ZSgpIGRlcml2ZXMgdGhlIG5ldHdvcmsgbmFtZXNwYWNlLCBjcmVkZW50aWFscywgYW5kIGNncm91cFxcbitcXHQgKiBmcm9tIGN1cnJlbnQuIEtlcm5lbCB0aHJlYWRzLCBpbmNsdWRpbmcgQlBGIHdvcmtxdWV1ZSBjYWxsYmFja3MsIGRvXFxuK1xcdCAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpIHtcXG4rXFx0XFx0ZXJyID0gLUVPUE5PVFNVUFA7XFxuK1xcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xcbitcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdG9wdHNfY29weSA9IChzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKXtcXG4rXFx0XFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VmYW1pbHkpLFxcbitcXHRcXHQudHlwZSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2V0eXBlKSxcXG4rXFx0XFx0LnByb3RvY29sID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXByb3RvY29sKSxcXG4rXFx0XFx0LnJlc2VydmVkID0gUkVBRF9PTkNFKG9wdHMtXFx1MDAzZXJlc2VydmVkKSxcXG4rXFx0fTtcXG4rXFxuK1xcdGlmIChvcHRzX2NvcHkucmVzZXJ2ZWQpIHtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3B0c19jb3B5LmZhbWlseSAhPSBBRl9JTkVUIFxcdTAwMjZcXHUwMDI2IG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcXG4rXFx0XFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3B0c19jb3B5LnR5cGUgIT0gU09DS19ER1JBTSkge1xcbitcXHRcXHRlcnIgPSAtRVBST1RPTk9TVVBQT1JUO1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChvcHRzX2NvcHkucHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgXFx1MDAyNlxcdTAwMjYgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHtcXG4rXFx0XFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHRrcyA9IGt6YWxsb2Nfb2JqKCprcyk7XFxuK1xcdGlmICgha3MpIHtcXG4rXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuK1xcbitcXHQvKlxcbitcXHQgKiBVc2UgdGhlIG5vcm1hbCBjdXJyZW50LXRhc2sgc29ja2V0IHBhdGggc28gTFNNL2Nncm91cCBwb2xpY3ksXFxuK1xcdCAqIHNvY2tldCBsYWJlbHMsIGFuZCB0aGUgYWN0aXZlIG5ldG5zIHJlZmVyZW5jZSBtYXRjaCBhIHNvY2tldCgyKVxcbitcXHQgKiBjcmVhdGVkIGJ5IHRoZSBCUEYgcHJvZ3JhbSdzIGNhbGxlci5cXG4rXFx0ICovXFxuK1xcdGVyciA9IHNvY2tfY3JlYXRlKG9wdHNfY29weS5mYW1pbHksIG9wdHNfY29weS50eXBlLCBvcHRzX2NvcHkucHJvdG9jb2wsXFxuK1xcdFxcdFxcdCAgXFx1MDAyNmtzLVxcdTAwM2Vzb2NrKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFxuK1xcdGtzLVxcdTAwM2Vzb2NrLVxcdTAwM2Vzay1cXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xcbitcXHRrcy1cXHUwMDNlc29jay1cXHUwMDNlc2stXFx1MDAzZXNrX3VzZXJsb2NrcyB8PSBTT0NLX1JDVkJVRl9MT0NLO1xcbitcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZrcy1cXHUwMDNldXNhZ2UsIDEpO1xcbitcXHRwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTtcXG4rXFx0cmV0dXJuIGtzO1xcbitcXG4rZXJyX2ZyZWU6XFxuK1xcdGtmcmVlKGtzKTtcXG4rZXJyX291dDpcXG4rXFx0cHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTtcXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXFxuKyAqIEBrczpcXHRcXHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC5cXG4rICogQGFkZHI6XFx0UG9pbnRlciB0byBhbiBJUHY0IG9yIElQdjYgc29ja2V0IGFkZHJlc3MuXFxuKyAqIEBhZGRyX19zejpcXHRTaXplIG9mIHRoZSBhZGRyZXNzIHVuaW9uLlxcbisgKlxcbisgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuXFxuKyAqXFxuKyAqIFRoaXMgZnVuY3Rpb24gbWF5IHNsZWVwIHdoaWxlIGNvbm5lY3RpbmcgdGhlIHNvY2tldCwgc28gaXQgY2FuIG9ubHkgYmUgdXNlZFxcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgaW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBhZGRyX19zeilcXG4re1xcbitcXHRzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYTtcXG4rXFx0aW50IGFkZHJsZW47XFxuK1xcbitcXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSlcXG4rXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXG4rXFx0aWYgKCFhZGRyIHx8IGFkZHJfX3N6ICE9IHNpemVvZigqYWRkcikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0LyogS2Z1bmMgbWVtb3J5IGFyZ3VtZW50cyBtYXkgYmUgdW5hbGlnbmVkLiAqL1xcbitcXHRtZW1jcHkoXFx1MDAyNnNhLCBhZGRyLCBzaXplb2YoKmFkZHIpKTtcXG4rXFxuK1xcdHN3aXRjaCAoc2Euc3NfZmFtaWx5KSB7XFxuK1xcdGNhc2UgQUZfSU5FVDpcXG4rXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBBRl9JTkVUNjpcXG4rXFx0XFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUFGTk9TVVBQT1JUO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoa3MtXFx1MDAzZXNvY2ssIFxcdTAwMjZzYSwgYWRkcmxlbiwgMCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gYWNxdWlyZS4gTXVzdCBiZSBhXFxuKyAqXFx0dHJ1c3RlZCBwb2ludGVyIChlLmcuIFJDVS1wcm90ZWN0ZWQga3B0ciBmcm9tIGEgbWFwKS5cXG4rICpcXG4rICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcXG4rICogZnJlZWQgd2l0aCBicGZfa3NvY2tfcmVsZWFzZSgpLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXFxuK3tcXG4rXFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmtzLVxcdTAwM2V1c2FnZSkpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHRyZXR1cm4ga3M7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBicGZfa3NvY2tfcmVsZWFzZSgpIC0gUmVsZWFzZSBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQgdG8gcmVsZWFzZS5cXG4rICpcXG4rICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXFxuKyAqIHF1ZXVlX3JjdV93b3JrKCkgKHNpbmNlIHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxcbisgKi9cXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcXG4re1xcbitcXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZrcy1cXHUwMDNldXNhZ2UpKSB7XFxuK1xcdFxcdElOSVRfUkNVX1dPUksoXFx1MDAyNmtzLVxcdTAwM2Vyd29yaywga3NvY2tfcmVsZWFzZV93b3JrX2ZuKTtcXG4rXFx0XFx0cXVldWVfcmN1X3dvcmsoc3lzdGVtX2RmbF93cSwgXFx1MDAyNmtzLVxcdTAwM2Vyd29yayk7XFxuK1xcdH1cXG4rfVxcbitcXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKHZvaWQgKmtzKVxcbit7XFxuK1xcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rfVxcbitDRklfTk9TRUFMKGJwZl9rc29ja19yZWxlYXNlX2R0b3IpO1xcbitcXG4rLyoqXFxuKyAqIGJwZl9rc29ja19zZW5kKCkgLSBTZW5kIGRhdGEgdGhyb3VnaCBhIEJQRiBrZXJuZWwgc29ja2V0LlxcbisgKiBAa3M6XFx0XFx0VGhlIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHQuIE11c3QgYmUgYW4gYWNxdWlyZWQgcmVmZXJlbmNlLlxcbisgKiBAZGF0YTpcXHRQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuXFxuKyAqIEBkYXRhX19zejpcXHRTaXplIG9mIHRoZSBkYXRhIHRvIHNlbmQuXFxuKyAqXFxuKyAqIFNlbmRzIGRhdGEgb24gYSBjb25uZWN0ZWQgc29ja2V0LCBiZXN0LWVmZm9ydCBhbmQgbm9uYmxvY2tpbmcuIFRoaXMgbWF5IHNsZWVwXFxuKyAqIChrZXJuZWxfc2VuZG1zZyksIHNvIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMuXFxuKyAqXFxuKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHNlbnQgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJybm8gb24gZXJyb3IuXFxuKyAqL1xcbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXFxuK1xcdFxcdFxcdCAgICAgICB1MzIgZGF0YV9fc3opXFxuK3tcXG4rXFx0c3RydWN0IG1zZ2hkciBtc2cgPSB7XFxuK1xcdFxcdC5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBrdmVjIGlvdiA9IHtcXG4rXFx0XFx0Lmlvdl9iYXNlID0gKHZvaWQgKilkYXRhLFxcbitcXHRcXHQuaW92X2xlbiA9IGRhdGFfX3N6LFxcbitcXHR9O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2bXNnLCBcXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbitcXG4rQlRGX0tGVU5DU19TVEFSVChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY29ubmVjdCwgS0ZfU0xFRVBBQkxFKVxcbitCVEZfS0ZVTkNTX0VORChrc29ja19pbml0X2tmdW5jX2J0Zl9pZHMpXFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQga3NvY2tfaW5pdF9rZnVuY19zZXQgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQuc2V0ID0gXFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcXG4rfTtcXG4rXFxuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlLCBLRl9SRUxFQVNFKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2FjcXVpcmUsIEtGX0FDUVVJUkUgfCBLRl9SQ1UgfCBLRl9SRVRfTlVMTClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9LRlVOQ1NfRU5EKGtzb2NrX2tmdW5jX2J0Zl9pZHMpXFxuK1xcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cXG4rQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpXFxuKyNlbmRpZlxcbitcXG4rc3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbit7XFxuK1xcdGlmICghYnRmX2lkX3NldDhfY29udGFpbnMoXFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRpZiAocHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rI2lmZGVmIENPTkZJR19CUEZfTFNNXFxuK1xcdGlmIChwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwcm9nLVxcdTAwM2VhdXgtXFx1MDAzZWF0dGFjaF9idGZfaWQgIT0gYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZFswXSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuKyNlbmRpZlxcbitcXG4rXFx0cmV0dXJuIC1FQUNDRVM7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XFxuK1xcdC5vd25lciA9IFRISVNfTU9EVUxFLFxcbitcXHQuc2V0ID0gXFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsXFxuK1xcdC5maWx0ZXIgPSBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyLFxcbit9O1xcbitcXG4rQlRGX0lEX0xJU1QoYnBmX2tzb2NrX2R0b3JfaWRzKVxcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXFxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxcbitcXG4rc3RhdGljIGludCBfX2luaXQgYnBmX2tzb2NrX2tmdW5jX2luaXQodm9pZClcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXHRjb25zdCBzdHJ1Y3QgYnRmX2lkX2R0b3Jfa2Z1bmMgYnBmX2tzb2NrX2R0b3JzW10gPSB7XFxuK1xcdFxcdHtcXG4rXFx0XFx0XFx0LmJ0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1swXSxcXG4rXFx0XFx0XFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcXG4rXFx0XFx0fSxcXG4rXFx0fTtcXG4rXFxuK1xcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xcbitcXHRyZXQgPSByZXQgPzogcmVnaXN0ZXJfYnRmX2tmdW5jX2lkX3NldChCUEZfUFJPR19UWVBFX1NZU0NBTEwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4rXFx0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBcXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcXG4rXFx0cmV0dXJuIHJldCA/OiByZWdpc3Rlcl9idGZfaWRfZHRvcl9rZnVuY3MoYnBmX2tzb2NrX2R0b3JzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBUSElTX01PRFVMRSk7XFxuK31cXG4rXFxuK2xhdGVfaW5pdGNhbGwoYnBmX2tzb2NrX2tmdW5jX2luaXQpO1xcbmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmNcXG5pbmRleCA2M2M2OWEwZmE3NGUxLi41YjAyZTYyMTdjNjgwIDEwMDY0NFxcbi0tLSBhL25ldC9zb2NrZXQuY1xcbisrKyBiL25ldC9zb2NrZXQuY1xcbkBAIC0yMTAzLDYgKzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcXG4gXFx0cmV0dXJuIF9fc3lzX2FjY2VwdDQoZmQsIHVwZWVyX3NvY2thZGRyLCB1cGVlcl9hZGRybGVuLCAwKTtcXG4gfVxcbiBcXG4raW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxcbitcXHRcXHQgICBpbnQgYWRkcmxlbiwgaW50IGZsYWdzKVxcbit7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRlcnIgPSBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgYWRkcmxlbik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXFx1MDAzZW9wcyktXFx1MDAzZWNvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICopYWRkcmVzcyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBhZGRybGVuLCBmbGFncyk7XFxuK31cXG4rXFxuIC8qXFxuICAqXFx0QXR0ZW1wdCB0byBjb25uZWN0IHRvIGEgc29ja2V0IHdpdGggdGhlIHNlcnZlciBhZGRyZXNzLiAgVGhlIGFkZHJlc3NcXG4gICpcXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXFxuQEAgLTIxMTksMjMgKzIxMzMsMTMgQEAgaW50IF9fc3lzX2Nvbm5lY3RfZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuIFxcdFxcdCAgICAgICBpbnQgYWRkcmxlbiwgaW50IGZpbGVfZmxhZ3MpXFxuIHtcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4tXFx0aW50IGVycjtcXG4gXFxuIFxcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcXG4tXFx0aWYgKCFzb2NrKSB7XFxuLVxcdFxcdGVyciA9IC1FTk9UU09DSztcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuLVxcdGVyciA9XFxuLVxcdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIXNvY2spXFxuK1xcdFxcdHJldHVybiAtRU5PVFNPQ0s7XFxuIFxcbi1cXHRlcnIgPSBSRUFEX09OQ0Uoc29jay1cXHUwMDNlb3BzKS1cXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgYWRkcmxlbiwgc29jay1cXHUwMDNlZmlsZS1cXHUwMDNlZl9mbGFncyB8IGZpbGVfZmxhZ3MpO1xcbi1vdXQ6XFxuLVxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbitcXHRcXHRcXHQgICAgICBzb2NrLVxcdTAwM2VmaWxlLVxcdTAwM2VmX2ZsYWdzIHwgZmlsZV9mbGFncyk7XFxuIH1cXG4gXFxuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLCBpbnQgYWRkcmxlbilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmRkNmIxNjc2MjNkOTRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xcbkBAIC0wLDAgKzEsMTMwIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NhcnBhL2luZXQuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJ0ZXN0X3Byb2dzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJuZXR3b3JrX2hlbHBlcnMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2xzbS5za2VsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19sc21fdmVyaWZpZXIuc2tlbC5oXFxcIlxcbitcXG4rI2RlZmluZSBOU19URVNUIFxcXCJrc29ja19sc21fbnNcXFwiXFxuKyNkZWZpbmUgUkVDVl9QT1JUIDc3NzdcXG4rI2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcXG4rXFxuK3N0cnVjdCBrc29ja190ZXN0X2VudiB7XFxuK1xcdHN0cnVjdCBuc3Rva2VuICpuc3Rva2VuO1xcbitcXHRpbnQgcmZkO1xcbit9O1xcbitcXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXFxuK3tcXG4rXFx0c3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7XFxuK1xcdFxcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXFxuK1xcdFxcdC5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCB0aW1ldmFsIHR2ID0geyAudHZfc2VjID0gUkVDVl9USU1FT1VUX1NFQyB9O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcXG4rXFx0ZW52LVxcdTAwM2VyZmQgPSAtMTtcXG4rXFxuK1xcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoTlNfVEVTVCksIFxcXCJtYWtlX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVudi1cXHUwMDNlbnN0b2tlbiA9IG9wZW5fbmV0bnMoTlNfVEVTVCk7XFxuK1xcdGlmICghQVNTRVJUX09LX1BUUihlbnYtXFx1MDAzZW5zdG9rZW4sIFxcXCJvcGVuX25ldG5zXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVudi1cXHUwMDNlcmZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVxcdTAwM2VyZmQsIFxcXCJyZWNlaXZlciBzb2NrZXRcXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0ZXJyID0gYmluZChlbnYtXFx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJiaW5kIHJlY2VpdmVyXFxcIikpXFxuK1xcdFxcdGdvdG8gZmFpbDtcXG4rXFxuK1xcdGVyciA9IHNldHNvY2tvcHQoZW52LVxcdTAwM2VyZmQsIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCBcXHUwMDI2dHYsIHNpemVvZih0dikpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJzZXQgcmN2dGltZW9cXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK1xcbitmYWlsOlxcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3ZvaWQgdGVzdF9rc29ja19sc20odm9pZClcXG4re1xcbitcXHRMSUJCUEZfT1BUUyhicGZfdGVzdF9ydW5fb3B0cywgb3B0cyk7XFxuK1xcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XFxuK1xcdHN0cnVjdCBzb2NrYWRkcl9pbiB0cmlnZ2VyX2FkZHIgPSB7XFxuK1xcdFxcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcXG4rXFx0XFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXFxuK1xcdH07XFxuK1xcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XFxuK1xcdGNoYXIgcmVjdl9kYXRhW3NpemVvZihza2VsLVxcdTAwM2VkYXRhLVxcdTAwM2VzZW5kX2RhdGEpXSA9IHt9O1xcbitcXHRzc2l6ZV90IG47XFxuK1xcdGludCB0ZmQgPSAtMTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHNrZWwgPSBrc29ja19sc21fX29wZW5fYW5kX2xvYWQoKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFxcXCJza2VsIG9wZW5fYW5kX2xvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFrc29ja190ZXN0X2Vudl9zZXR1cChcXHUwMDI2ZW52KSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXG4rXFx0LyogU3RlcCAxOiBSdW4gdGhlIHNldHVwIFNZU0NBTEwgcHJvZyB0byBjcmVhdGUgdGhlIGtzb2NrICovXFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXJlbW90ZV9wb3J0ID0gUkVDVl9QT1JUO1xcbitcXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVxcdTAwM2Vwcm9ncy5rc29ja19zZXR1cCksXFxuK1xcdFxcdFxcdFxcdCAgICAgXFx1MDAyNm9wdHMpO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFxcXCJrc29ja19zZXR1cCBydW5cXFwiKSlcXG4rXFx0XFx0Z290byBmYWlsO1xcbitcXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcImtzb2NrX3NldHVwIHJldHZhbFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDI6IEF0dGFjaCBMU00gcHJvZyBhbmQgdHJpZ2dlciBzb2NrZXRfYmluZCBmcm9tIHVzZXJzcGFjZSAqL1xcbitcXHRza2VsLVxcdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfYmluZCA9XFxuK1xcdFxcdGJwZl9wcm9ncmFtX19hdHRhY2hfbHNtKHNrZWwtXFx1MDAzZXByb2dzLmtzb2NrX3NvY2tldF9iaW5kKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwtXFx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kLFxcbitcXHRcXHRcXHQgICBcXFwiYXR0YWNoIHNvY2tldF9iaW5kIGxzbVxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHR0ZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xcbitcXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFxcXCJ0cmlnZ2VyIHNvY2tldFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRza2VsLVxcdTAwM2Vic3MtXFx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcXG4rXFx0ZXJyID0gYmluZCh0ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKilcXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XFxuK1xcdHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNldGFyZ2V0X3BpZCA9IDA7XFxuK1xcdGlmICghQVNTRVJUX09LKGVyciwgXFxcInRyaWdnZXIgYmluZFxcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHQvKiBTdGVwIDM6IFZlcmlmeSB0aGUgTFNNIGhvb2sgc2VudCB0aGUgbm90aWZpY2F0aW9uICovXFxuK1xcdGlmICghQVNTRVJUX0VRKHNrZWwtXFx1MDAzZWRhdGEtXFx1MDAzZXNlbmRfcmV0LCBzaXplb2Yoc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhKSxcXG4rXFx0XFx0ICAgICAgIFxcXCJMU00gc2VuZCBieXRlc1xcXCIpKVxcbitcXHRcXHRnb3RvIGZhaWw7XFxuK1xcbitcXHRuID0gcmVjdmZyb20oZW52LnJmZCwgcmVjdl9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSwgMCwgTlVMTCwgTlVMTCk7XFxuK1xcdGlmIChBU1NFUlRfRVEobiwgc2l6ZW9mKHJlY3ZfZGF0YSksIFxcXCJyZWN2ZnJvbSBsZW5cXFwiKSlcXG4rXFx0XFx0QVNTRVJUX01FTUVRKHJlY3ZfZGF0YSwgc2tlbC1cXHUwMDNlZGF0YS1cXHUwMDNlc2VuZF9kYXRhLCBzaXplb2YocmVjdl9kYXRhKSxcXG4rXFx0XFx0XFx0ICAgICBcXFwicGF5bG9hZCBtYXRjaFxcXCIpO1xcbitcXG4rZmFpbDpcXG4rXFx0aWYgKHRmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZSh0ZmQpO1xcbitcXHRpZiAoZW52LnJmZCBcXHUwMDNlPSAwKVxcbitcXHRcXHRjbG9zZShlbnYucmZkKTtcXG4rXFx0aWYgKGVudi5uc3Rva2VuKVxcbitcXHRcXHRjbG9zZV9uZXRucyhlbnYubnN0b2tlbik7XFxuK1xcdHJlbW92ZV9uZXRucyhOU19URVNUKTtcXG4rXFx0a3NvY2tfbHNtX19kZXN0cm95KHNrZWwpO1xcbit9XFxuK1xcbit2b2lkIHRlc3Rfa3NvY2tfbHNtX3ZlcmlmaWVyKHZvaWQpXFxuK3tcXG4rXFx0UlVOX1RFU1RTKGtzb2NrX2xzbV92ZXJpZmllcik7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2ZGMyMGI4Zjk1YmJcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xcbkBAIC0wLDAgKzEsNDUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcInRlc3RfcHJvZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX3dxLnNrZWwuaFxcXCJcXG4rXFxuKyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9SRVRSSUVTIDEwMDBcXG4rI2RlZmluZSBDQUxMQkFDS19XQUlUX1VTIDEwMDBcXG4rXFxuK3ZvaWQgdGVzdF9rc29ja193cSh2b2lkKVxcbit7XFxuK1xcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcXG4rXFx0c3RydWN0IGtzb2NrX3dxICpza2VsO1xcbitcXHR1MzIgY2FsbGJhY2tfZG9uZTtcXG4rXFx0aW50IGVyciwgaTtcXG4rXFxuK1xcdHNrZWwgPSBrc29ja193cV9fb3Blbl9hbmRfbG9hZCgpO1xcbitcXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXFxcImtzb2NrX3dxIG9wZW4gYW5kIGxvYWRcXFwiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZXJyID0gYnBmX3Byb2dfdGVzdF9ydW5fb3B0cyhicGZfcHJvZ3JhbV9fZmQoc2tlbC1cXHUwMDNlcHJvZ3Mua3NvY2tfd3Ffc3RhcnQpLFxcbitcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZvcHRzKTtcXG4rXFx0aWYgKCFBU1NFUlRfT0soZXJyLCBcXFwicnVuIGtzb2NrX3dxX3N0YXJ0XFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXFxcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFxcXCIpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkrKykge1xcbitcXHRcXHRpZiAoX19hdG9taWNfbG9hZF9uKFxcdTAwMjZza2VsLVxcdTAwM2Vic3MtXFx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0dXNsZWVwKENBTExCQUNLX1dBSVRfVVMpO1xcbitcXHR9XFxuK1xcdGNhbGxiYWNrX2RvbmUgPSBfX2F0b21pY19sb2FkX24oXFx1MDAyNnNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY2FsbGJhY2tfZG9uZSxcXG4rXFx0XFx0XFx0XFx0XFx0X19BVE9NSUNfQUNRVUlSRSk7XFxuK1xcdGlmICghQVNTRVJUX0VRKGNhbGxiYWNrX2RvbmUsIDEsIFxcXCJ3b3JrcXVldWUgY2FsbGJhY2sgY29tcGxldGVkXFxcIikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0QVNTRVJUX0VRKHNrZWwtXFx1MDAzZWJzcy1cXHUwMDNlY3JlYXRlX2VyciwgLUVPUE5PVFNVUFAsXFxuK1xcdFxcdCAgXFxcIndvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0a3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7XFxuK31cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2NvbW1vbi5oXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4wMWVkYWViOWZkZDRhXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxcbkBAIC0wLDAgKzEsNzggQEBcXG4rLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xcbitcXG4rI2lmbmRlZiBfS1NPQ0tfQ09NTU9OX0hcXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcXG4rXFxuKyNpbmNsdWRlIFxcXCJlcnJuby5oXFxcIlxcbitcXG4rI2RlZmluZSBTT0NLX0RHUkFNXFx0MlxcbisjZGVmaW5lIElQUFJPVE9fVURQXFx0MTdcXG4rXFxuK3N0cnVjdCBicGZfa3NvY2sgKmJwZl9rc29ja19jcmVhdGUoY29uc3Qgc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyAqb3B0cyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XFxuK2ludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3QgdW5pb24gYnBmX2tzb2NrX2FkZHIgKmFkZHIsXFxuK1xcdFxcdCAgICAgIHUzMiBhZGRyX19zeikgX19rc3ltO1xcbitzdHJ1Y3QgYnBmX2tzb2NrICpicGZfa3NvY2tfYWNxdWlyZShzdHJ1Y3QgYnBmX2tzb2NrICprcykgX19rc3ltO1xcbit2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XFxuK2ludCBicGZfa3NvY2tfc2VuZChzdHJ1Y3QgYnBmX2tzb2NrICprcywgY29uc3Qgdm9pZCAqZGF0YSwgdTMyIGRhdGFfX3N6KSBfX2tzeW07XFxuK3ZvaWQgYnBmX3JjdV9yZWFkX2xvY2sodm9pZCkgX19rc3ltO1xcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xcbitcXG4rc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlIHtcXG4rXFx0c3RydWN0IGJwZl9rc29jayBfX2twdHIgKiBjdHg7XFxuK307XFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcXG4rXFx0X190eXBlKGtleSwgaW50KTtcXG4rXFx0X190eXBlKHZhbHVlLCBzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbit9IF9fa3NvY2tfY3R4X21hcCBTRUMoXFxcIi5tYXBzXFxcIik7XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqa3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCh2b2lkKVxcbit7XFxuK1xcdHUzMiBrZXkgPSAwO1xcbitcXG4rXFx0cmV0dXJuIGJwZl9tYXBfbG9va3VwX2VsZW0oXFx1MDAyNl9fa3NvY2tfY3R4X21hcCwgXFx1MDAyNmtleSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9rc29jayAqa3NvY2tfY3R4X2dldCh2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3MgPSBOVUxMLCAqdG1wO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KVxcbitcXHRcXHRyZXR1cm4gTlVMTDtcXG4rXFxuK1xcdGJwZl9yY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHRtcCA9IHYtXFx1MDAzZWN0eDtcXG4rXFx0aWYgKHRtcClcXG4rXFx0XFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xcbitcXHRicGZfcmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcbitcXHRyZXR1cm4ga3M7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IGtzb2NrX2N0eF9pbnNlcnQoc3RydWN0IGJwZl9rc29jayAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqb2xkO1xcbitcXG4rXFx0diA9IGtzb2NrX2N0eF92YWx1ZV9sb29rdXAoKTtcXG4rXFx0aWYgKCF2KSB7XFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHR9XFxuK1xcbitcXHRvbGQgPSBicGZfa3B0cl94Y2hnKFxcdTAwMjZ2LVxcdTAwM2VjdHgsIGN0eCk7XFxuK1xcdGlmIChvbGQpIHtcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcXG4rXFx0XFx0cmV0dXJuIC1FRVhJU1Q7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWYgLyogX0tTT0NLX0NPTU1PTl9IICovXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTgwODQ1MTA5OGVmYlxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmNcXG5AQCAtMCwwICsxLDcyIEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFxcImJwZl90cmFjaW5nX25ldC5oXFxcIlxcbisjaW5jbHVkZSBcXFwia3NvY2tfY29tbW9uLmhcXFwiXFxuK1xcbitjaGFyIHNlbmRfZGF0YVszMl0gPSBcXFwiaGVsbG8gZnJvbSBicGYga3NvY2tcXFwiO1xcbitcXG4rX19iZTMyIGlwdjRfcmVtb3RlO1xcbitfX3UxNiByZW1vdGVfcG9ydDtcXG4raW50IHRhcmdldF9waWQ7XFxuK2ludCBzZW5kX3JldCA9IC0xO1xcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4raW50IGtzb2NrX3NldHVwKHZvaWQgKmN0eClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIGNyZWF0ZV9vcHRzID0ge307XFxuK1xcdHVuaW9uIGJwZl9rc29ja19hZGRyIGFkZHIgPSB7fTtcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0Y3JlYXRlX29wdHMuZmFtaWx5ID0gQUZfSU5FVDtcXG4rXFx0Y3JlYXRlX29wdHMudHlwZSA9IFNPQ0tfREdSQU07XFxuK1xcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XFxuK1xcbitcXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcXHUwMDI2ZXJyKTtcXG4rXFx0aWYgKCFrcylcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdGFkZHIuc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUO1xcbitcXHRhZGRyLnNpbi5zaW5fcG9ydCA9IGJwZl9odG9ucyhyZW1vdGVfcG9ydCk7XFxuK1xcdGFkZHIuc2luLnNpbl9hZGRyLnNfYWRkciA9IGlwdjRfcmVtb3RlO1xcbitcXG4rXFx0ZXJyID0gYnBmX2tzb2NrX2Nvbm5lY3Qoa3MsIFxcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGJwZl9rc29ja19yZWxlYXNlKGtzKTtcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0ga3NvY2tfY3R4X2luc2VydChrcyk7XFxuK1xcdGlmIChlcnIgXFx1MDAyNlxcdTAwMjYgZXJyICE9IC1FRVhJU1QpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcImxzbS5zL3NvY2tldF9iaW5kXFxcIilcXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsXFxuK1xcdCAgICAgaW50IGFkZHJsZW4sIGludCByZXQpXFxuK3tcXG4rXFx0c3RydWN0IGJwZl9rc29jayAqa3M7XFxuK1xcdHUzMiBwaWQgPSBicGZfZ2V0X2N1cnJlbnRfcGlkX3RnaWQoKSBcXHUwMDNlXFx1MDAzZSAzMjtcXG4rXFxuK1xcdGlmIChyZXQgfHwgcGlkICE9IHRhcmdldF9waWQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRrcyA9IGtzb2NrX2N0eF9nZXQoKTtcXG4rXFx0aWYgKCFrcykge1xcbitcXHRcXHRzZW5kX3JldCA9IC1FTk9FTlQ7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHNlbmRfcmV0ID0gYnBmX2tzb2NrX3NlbmQoa3MsIHNlbmRfZGF0YSwgc2l6ZW9mKHNlbmRfZGF0YSkpO1xcbitcXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmQyY2NmZGI1ODAyMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtX3ZlcmlmaWVyLmNcXG5AQCAtMCwwICsxLDM1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cXG4rXFxuKyNpbmNsdWRlIFxcXCJ2bWxpbnV4LmhcXFwiXFxuKyNpbmNsdWRlIFxcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImtzb2NrX2NvbW1vbi5oXFxcIlxcbitcXG4rY2hhciBzZW5kX2RhdGFbMTFdID0gXFxcImR1bW15IGRhdGFcXFwiO1xcbitcXG4rU0VDKFxcXCJsc20ucy9zb2NrZXRfc2VuZG1zZ1xcXCIpXFxuK19fZGVzY3JpcHRpb24oXFxcImJwZl9rc29ja19zZW5kIGlzIHJlamVjdGVkIGZyb20gc29ja2V0X3NlbmRtc2cgTFNNIGhvb2tcXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcImNhbGxpbmcga2VybmVsIGZ1bmN0aW9uIGJwZl9rc29ja19zZW5kIGlzIG5vdCBhbGxvd2VkXFxcIilcXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9zZW5kbXNnLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csXFxuK1xcdCAgICAgaW50IHNpemUsIGludCByZXQpXFxuK3tcXG4rXFx0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG4rXFxuK1xcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XFxuK1xcdGlmICghdilcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGtzID0gYnBmX2twdHJfeGNoZyhcXHUwMDI2di1cXHUwMDNlY3R4LCBOVUxMKTtcXG4rXFx0aWYgKCFrcylcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGJwZl9rc29ja19zZW5kKGtzLCBzZW5kX2RhdGEsIHNpemVvZihzZW5kX2RhdGEpKTtcXG4rXFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jXFxuQEAgLTAsMCArMSw2MiBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXFxuK1xcbisjaW5jbHVkZSBcXFwidm1saW51eC5oXFxcIlxcbisjaW5jbHVkZSBcXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcXCJicGZfZXhwZXJpbWVudGFsLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJicGZfdHJhY2luZ19uZXQuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImVycm5vLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJrc29ja19jb21tb24uaFxcXCJcXG4rXFxuK3N0cnVjdCBrc29ja193cV92YWx1ZSB7XFxuK1xcdHN0cnVjdCBicGZfd3Egd29yaztcXG4rfTtcXG4rXFxuK3N0cnVjdCB7XFxuK1xcdF9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJSQVkpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xcbitcXHRfX3R5cGUoa2V5LCB1MzIpO1xcbitcXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBrc29ja193cV92YWx1ZSk7XFxuK30gd29ya19tYXAgU0VDKFxcXCIubWFwc1xcXCIpO1xcbitcXG4raW50IGNyZWF0ZV9lcnI7XFxuK3UzMiBjYWxsYmFja19kb25lO1xcbitcXG4rc3RhdGljIGludCBrc29ja193cV9jYWxsYmFjayh2b2lkICptYXAsIGludCAqa2V5LCB2b2lkICp2YWx1ZSlcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIG9wdHMgPSB7XFxuK1xcdFxcdC5mYW1pbHkgPSBBRl9JTkVULFxcbitcXHRcXHQudHlwZSA9IFNPQ0tfREdSQU0sXFxuK1xcdFxcdC5wcm90b2NvbCA9IElQUFJPVE9fVURQLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXFx1MDAyNmVycik7XFxuK1xcdGlmIChrcylcXG4rXFx0XFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xcbitcXHRjcmVhdGVfZXJyID0gZXJyO1xcbitcXHRfX3N5bmNfZmV0Y2hfYW5kX2FkZChcXHUwMDI2Y2FsbGJhY2tfZG9uZSwgMSk7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBrc29ja193cV92YWx1ZSAqdmFsdWU7XFxuK1xcdHUzMiBrZXkgPSAwO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0dmFsdWUgPSBicGZfbWFwX2xvb2t1cF9lbGVtKFxcdTAwMjZ3b3JrX21hcCwgXFx1MDAyNmtleSk7XFxuK1xcdGlmICghdmFsdWUpXFxuK1xcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRlcnIgPSBicGZfd3FfaW5pdChcXHUwMDI2dmFsdWUtXFx1MDAzZXdvcmssIFxcdTAwMjZ3b3JrX21hcCwgMCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdGVyciA9IGJwZl93cV9zZXRfY2FsbGJhY2soXFx1MDAyNnZhbHVlLVxcdTAwM2V3b3JrLCBrc29ja193cV9jYWxsYmFjaywgMCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdHJldHVybiBlcnI7XFxuK1xcdHJldHVybiBicGZfd3Ffc3RhcnQoXFx1MDAyNnZhbHVlLVxcdTAwM2V3b3JrLCAwKTtcXG4rfVxcbitcXG4rY2hhciBfX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzoyNC4yNDIyMTk2NjFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2Njg3ODE3MDU2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJTkVUXCIsXG4gICAgXCJCUEZfU1lTQ0FMTFwiLFxuICAgIFwiREVCVUdfSU5GT19CVEZcIixcbiAgICBcIkJQRl9MU01cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfa3NvY2tfY3JlYXRlXCIsXG4gICAgXCJicGZfa3NvY2tfY29ubmVjdFwiLFxuICAgIFwiYnBmX2tzb2NrX2FjcXVpcmVcIixcbiAgICBcImJwZl9rc29ja19yZWxlYXNlXCIsXG4gICAgXCJicGZfa3NvY2tfc2VuZFwiLFxuICAgIFwiY29ubmVjdF9zb2NrZXRcIixcbiAgICBcImJwZl9rc29ja19yZWxlYXNlX2R0b3JcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHNldCBvZiBCUEYga2Z1bmNzIChicGZfa3NvY2tfY3JlYXRlLCBicGZfa3NvY2tfY29ubmVjdCwgYnBmX2tzb2NrX3NlbmQsIGV0Yy4pIHRoYXQgYWxsb3cgQlBGIHByb2dyYW1zIHRvIGNyZWF0ZSBhbmQgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgc29ja2V0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBrZXJuZWwncyBCUEYgc3Vic3lzdGVtIGFuZCBpbnRyb2R1Y2VzIG5ldyByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuIFRoZSBrZnVuY3MgYXJlIGFjY2Vzc2libGUgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChsaWtlIFNZU0NBTEwgYW5kIExTTSBob29rcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxNzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCArMSwzNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2lmbmRlZiBfQlBGX0tTT0NLX0hcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbitcbisvKipcbisgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuKyAqIEBmYW1pbHk6XHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cbisgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4rICogQHByb3RvY29sOlx0UHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2xcbisgKlx0XHRvZiB0aGUgZ2l2ZW4gdHlwZS5cbisgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMge1xuK1x0X191OCBmYW1pbHk7XG4rXHRfX3U4IHR5cGU7XG4rXHRfX3U4IHByb3RvY29sO1xuK1x0X191OCByZXNlcnZlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cbisgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbisgKi9cbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBzaW42O1xuK307XG4rXG4rI2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXG5pbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTtcbiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHRcdCAgICAgaW50IGFkZHJsZW4pO1xuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcbitcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDM2OSw2ICs0MzY5LDkgQEAgQlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXG4gI2lmZGVmIENPTkZJR19DUllQVE9cbiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0lORVRcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4rI2VuZGlmXG4gQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcbiBcbiBzdGF0aWMgYm9vbCByY3VfcHJvdGVjdGVkX29iamVjdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZVxuaW5kZXggYjNmZGNiNGUzNTVmYS4uYzIwZTUyMDM1OGI4ZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTQ0LDYgKzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xuK2lmZGVmIENPTkZJR19JTkVUXG4rb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuK2VuZGlmXG4gb2JqLSQoQ09ORklHX09GKVx0Kz0gb2ZfbmV0Lm9cbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTk5NDNhZWVhZGQzMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbkBAIC0wLDAgKzEsMzI4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9rc29jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbisgKiBAc29jazpcdFRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuXG4rICogQHVzYWdlOlx0UmVmZXJlbmNlIGNvdW50ZXIuXG4rICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2sge1xuK1x0c3RydWN0IHNvY2tldCAqc29jaztcbitcdHJlZmNvdW50X3QgdXNhZ2U7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1xuK1x0a3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcbitcdHNvY2tfcmVsZWFzZShrcy1cdTAwM2Vzb2NrKTtcbitcdGtmcmVlKGtzKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXG4rXHQgKiBjbGVhcmVkIGN1cnJlbnQtXHUwMDNlbnNwcm94eSwgd2hpbGUgY3VycmVudCBpcyBzdGlsbCBub3QgYSBrdGhyZWFkLlxuK1x0ICovXG4rXHRyZXR1cm4gIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2Vuc3Byb3h5O1xuK31cbitcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICpcbisgKiBBbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBrZXJuZWwgc29ja2V0LlxuKyAqXG4rICogVGhlIHJldHVybmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCAoc29ja19jcmVhdGUpLCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXG4rICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcbisgKiBkb2VzIG5vdCByZXRhaW4gdGhlIGludm9raW5nIHRhc2sncyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC5cbisgKlxuKyAqIEBvcHRzOlx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXG4rICogQG9wdHNfX3N6Olx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXG4rICogQGVycl9fdW5pbml0Olx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbisgKi9cbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbiticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcbitcdFx0IGludCAqZXJyX191bmluaXQpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbitcdGludCBlcnI7XG4rXG4rXHQvKlxuK1x0ICogc29ja19jcmVhdGUoKSBkZXJpdmVzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgY3JlZGVudGlhbHMsIGFuZCBjZ3JvdXBcbitcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cbitcdCAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLlxuK1x0ICovXG4rXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XG4rXHRcdC5mYW1pbHkgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VmYW1pbHkpLFxuK1x0XHQudHlwZSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXR5cGUpLFxuK1x0XHQucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2Vwcm90b2NvbCksXG4rXHRcdC5yZXNlcnZlZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkKSxcbitcdH07XG4rXG4rXHRpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgXHUwMDI2XHUwMDI2IG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbitcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0a3MgPSBremFsbG9jX29iaigqa3MpO1xuK1x0aWYgKCFrcykge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LFxuK1x0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXG4rXHQgKiBjcmVhdGVkIGJ5IHRoZSBCUEYgcHJvZ3JhbSdzIGNhbGxlci5cbitcdCAqL1xuK1x0ZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCxcbitcdFx0XHQgIFx1MDAyNmtzLVx1MDAzZXNvY2spO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZTtcbitcbitcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xuK1x0a3MtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza191c2VybG9ja3MgfD0gU09DS19SQ1ZCVUZfTE9DSztcbitcbitcdHJlZmNvdW50X3NldChcdTAwMjZrcy1cdTAwM2V1c2FnZSwgMSk7XG4rXHRwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTtcbitcdHJldHVybiBrcztcbitcbitlcnJfZnJlZTpcbitcdGtmcmVlKGtzKTtcbitlcnJfb3V0OlxuK1x0cHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXG4rICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC5cbisgKiBAYWRkcjpcdFBvaW50ZXIgdG8gYW4gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzLlxuKyAqIEBhZGRyX19zejpcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXG4rICpcbisgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4rXHRcdFx0XHQgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxuK1x0XHRcdFx0ICB1MzIgYWRkcl9fc3opXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7XG4rXHRpbnQgYWRkcmxlbjtcbitcbitcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoIWFkZHIgfHwgYWRkcl9fc3ogIT0gc2l6ZW9mKCphZGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBLZnVuYyBtZW1vcnkgYXJndW1lbnRzIG1heSBiZSB1bmFsaWduZWQuICovXG4rXHRtZW1jcHkoXHUwMDI2c2EsIGFkZHIsIHNpemVvZigqYWRkcikpO1xuK1xuK1x0c3dpdGNoIChzYS5zc19mYW1pbHkpIHtcbitcdGNhc2UgQUZfSU5FVDpcbitcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUZfSU5FVDY6XG4rXHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoa3MtXHUwMDNlc29jaywgXHUwMDI2c2EsIGFkZHJsZW4sIDApO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxuKyAqXHR0cnVzdGVkIHBvaW50ZXIgKGUuZy4gUkNVLXByb3RlY3RlZCBrcHRyIGZyb20gYSBtYXApLlxuKyAqXG4rICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4rICovXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXG4re1xuK1x0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3MtXHUwMDNldXNhZ2UpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBrcztcbit9XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cbisgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLlxuKyAqXG4rICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXG4rICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXG4rICovXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbit7XG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmtzLVx1MDAzZXVzYWdlKSkge1xuK1x0XHRJTklUX1JDVV9XT1JLKFx1MDAyNmtzLVx1MDAzZXJ3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pO1xuK1x0XHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZrcy1cdTAwM2Vyd29yayk7XG4rXHR9XG4rfVxuK1xuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcbit7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rfVxuK0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuXG4rICogQGRhdGE6XHRQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuXG4rICogQGRhdGFfX3N6Olx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kLlxuKyAqXG4rICogU2VuZHMgZGF0YSBvbiBhIGNvbm5lY3RlZCBzb2NrZXQsIGJlc3QtZWZmb3J0IGFuZCBub25ibG9ja2luZy4gVGhpcyBtYXkgc2xlZXBcbisgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuKyAqXG4rICogUmV0dXJuOiBOdW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXG4rXHRcdFx0ICAgICAgIHUzMiBkYXRhX19zeilcbit7XG4rXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbitcdFx0Lm1zZ19mbGFncyA9IE1TR19ET05UV0FJVCxcbitcdH07XG4rXHRzdHJ1Y3Qga3ZlYyBpb3YgPSB7XG4rXHRcdC5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSxcbitcdFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19pbml0X2tmdW5jX3NldCA9IHtcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbit9O1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2UsIEtGX1JFTEVBU0UpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbisjZW5kaWZcbitcbitzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4re1xuK1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkICE9IGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWRbMF0pXG4rXHRcdHJldHVybiAwO1xuKyNlbmRpZlxuK1xuK1x0cmV0dXJuIC1FQUNDRVM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLFxuK1x0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXG4rfTtcbitcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbitcdFx0e1xuK1x0XHRcdC5idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMF0sXG4rXHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbitcdFx0fSxcbitcdH07XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbitcdFx0XHRcdFx0XHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbitcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbitcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbit9XG4rXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi41YjAyZTYyMTdjNjgwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgKzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcbiBcdHJldHVybiBfX3N5c19hY2NlcHQ0KGZkLCB1cGVlcl9zb2NrYWRkciwgdXBlZXJfYWRkcmxlbiwgMCk7XG4gfVxuIFxuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbitcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsXG4rXHRcdFx0XHQgICAgICBhZGRybGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXG4rXHRcdFx0XHRcdCAgICAgYWRkcmxlbiwgZmxhZ3MpO1xuK31cbitcbiAvKlxuICAqXHRBdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSBzb2NrZXQgd2l0aCB0aGUgc2VydmVyIGFkZHJlc3MuICBUaGUgYWRkcmVzc1xuICAqXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXG5AQCAtMjExOSwyMyArMjEzMywxMyBAQCBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbiBcdFx0ICAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuLVx0aW50IGVycjtcbiBcbiBcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcbi1cdGlmICghc29jaykge1xuLVx0XHRlcnIgPSAtRU5PVFNPQ0s7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0ZXJyID1cbi1cdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghc29jaylcbitcdFx0cmV0dXJuIC1FTk9UU09DSztcbiBcbi1cdGVyciA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICAgYWRkcmxlbiwgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KHNvY2ssIGFkZHJlc3MsIGFkZHJsZW4sXG4rXHRcdFx0ICAgICAgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbiB9XG4gXG4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsIGludCBhZGRybGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGQ2YjE2NzYyM2Q5NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xuQEAgLTAsMCArMSwxMzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NhcnBhL2luZXQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcIm5ldHdvcmtfaGVscGVycy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2xzbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfbHNtX3ZlcmlmaWVyLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBOU19URVNUIFwia3NvY2tfbHNtX25zXCJcbisjZGVmaW5lIFJFQ1ZfUE9SVCA3Nzc3XG4rI2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcbitcbitzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYge1xuK1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW47XG4rXHRpbnQgcmZkO1xuK307XG4rXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7XG4rXHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXG4rXHRcdC5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksXG4rXHR9O1xuK1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl9zZWMgPSBSRUNWX1RJTUVPVVRfU0VDIH07XG4rXHRpbnQgZXJyO1xuK1xuK1x0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcbitcdGVudi1cdTAwM2VyZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoTlNfVEVTVCksIFwibWFrZV9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGVudi1cdTAwM2Vuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVudi1cdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVx1MDAzZXJmZCwgXCJyZWNlaXZlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVyciA9IGJpbmQoZW52LVx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYmluZCByZWNlaXZlclwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldCByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rXG4rZmFpbDpcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gdHJpZ2dlcl9hZGRyID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0fTtcbitcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XG4rXHRjaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSldID0ge307XG4rXHRzc2l6ZV90IG47XG4rXHRpbnQgdGZkID0gLTE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2V0dXAgcnVuXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja19zZXR1cCByZXR2YWxcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovXG4rXHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfYmluZCxcbitcdFx0XHQgICBcImF0dGFjaCBzb2NrZXRfYmluZCBsc21cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwidHJpZ2dlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcbitcdGVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0cmlnZ2VyIGJpbmRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX3JldCwgc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpLFxuK1x0XHQgICAgICAgXCJMU00gc2VuZCBieXRlc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0biA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXCJyZWN2ZnJvbSBsZW5cIikpXG4rXHRcdEFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxuK1x0XHRcdCAgICAgXCJwYXlsb2FkIG1hdGNoXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAodGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGZkKTtcbitcdGlmIChlbnYucmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZW52LnJmZCk7XG4rXHRpZiAoZW52Lm5zdG9rZW4pXG4rXHRcdGNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTtcbitcdHJlbW92ZV9uZXRucyhOU19URVNUKTtcbitcdGtzb2NrX2xzbV9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV92ZXJpZmllcih2b2lkKVxuK3tcbitcdFJVTl9URVNUUyhrc29ja19sc21fdmVyaWZpZXIpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2ZGMyMGI4Zjk1YmJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcbkBAIC0wLDAgKzEsNDUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX3dxLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBDQUxMQkFDS19XQUlUX1JFVFJJRVMgMTAwMFxuKyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9VUyAxMDAwXG4rXG4rdm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IGtzb2NrX3dxICpza2VsO1xuK1x0dTMyIGNhbGxiYWNrX2RvbmU7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0c2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrc29ja193cSBvcGVuIGFuZCBsb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicnVuIGtzb2NrX3dxX3N0YXJ0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkrKykge1xuK1x0XHRpZiAoX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoQ0FMTEJBQ0tfV0FJVF9VUyk7XG4rXHR9XG4rXHRjYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsXG4rXHRcdFx0XHRcdF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0aWYgKCFBU1NFUlRfRVEoY2FsbGJhY2tfZG9uZSwgMSwgXCJ3b3JrcXVldWUgY2FsbGJhY2sgY29tcGxldGVkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCxcbitcdFx0ICBcIndvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcIik7XG4rXG4rb3V0OlxuK1x0a3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjAxZWRhZWI5ZmRkNGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxuQEAgLTAsMCArMSw3OCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9IXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcbitcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuK1xuKyNkZWZpbmUgU09DS19ER1JBTVx0MlxuKyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4rXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxuK1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4raW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbitcdFx0ICAgICAgdTMyIGFkZHJfX3N6KSBfX2tzeW07XG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbit2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG4raW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLCB1MzIgZGF0YV9fc3opIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuK1xuK3N0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gX19rc29ja19jdHhfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpXG4re1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZfX2tzb2NrX2N0eF9tYXAsIFx1MDAyNmtleSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9rc29jayAqa3NvY2tfY3R4X2dldCh2b2lkKVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzID0gTlVMTCwgKnRtcDtcbitcbitcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4rXHRpZiAoIXYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdHRtcCA9IHYtXHUwMDNlY3R4O1xuK1x0aWYgKHRtcClcbitcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGtzO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcbit7XG4rXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KSB7XG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgY3R4KTtcbitcdGlmIChvbGQpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MDg0NTEwOThlZmJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xuQEAgLTAsMCArMSw3MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK2NoYXIgc2VuZF9kYXRhWzMyXSA9IFwiaGVsbG8gZnJvbSBicGYga3NvY2tcIjtcbitcbitfX2JlMzIgaXB2NF9yZW1vdGU7XG4rX191MTYgcmVtb3RlX3BvcnQ7XG4raW50IHRhcmdldF9waWQ7XG4raW50IHNlbmRfcmV0ID0gLTE7XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuK1x0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7XG4rXHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbitcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XG4rXG4rXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoIWtzKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbi5zaW5fcG9ydCA9IGJwZl9odG9ucyhyZW1vdGVfcG9ydCk7XG4rXHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbitcbitcdGVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCBcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xuK1x0aWYgKGVycikge1xuK1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTtcbitcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImxzbS5zL3NvY2tldF9iaW5kXCIpXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsXG4rXHQgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdGlmIChyZXQgfHwgcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRrcyA9IGtzb2NrX2N0eF9nZXQoKTtcbitcdGlmICgha3MpIHtcbitcdFx0c2VuZF9yZXQgPSAtRU5PRU5UO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0c2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkMmNjZmRiNTgwMjBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xuQEAgLTAsMCArMSwzNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbitjaGFyIHNlbmRfZGF0YVsxMV0gPSBcImR1bW15IGRhdGFcIjtcbitcbitTRUMoXCJsc20ucy9zb2NrZXRfc2VuZG1zZ1wiKVxuK19fZGVzY3JpcHRpb24oXCJicGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWRcIilcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbitcdCAgICAgaW50IHNpemUsIGludCByZXQpXG4re1xuK1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0a3MgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBOVUxMKTtcbitcdGlmICgha3MpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xuQEAgLTAsMCArMSw2MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK3N0cnVjdCBrc29ja193cV92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX3dxIHdvcms7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtzb2NrX3dxX3ZhbHVlKTtcbit9IHdvcmtfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK2ludCBjcmVhdGVfZXJyO1xuK3UzMiBjYWxsYmFja19kb25lO1xuK1xuK3N0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0ge1xuK1x0XHQuZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnR5cGUgPSBTT0NLX0RHUkFNLFxuK1x0XHQucHJvdG9jb2wgPSBJUFBST1RPX1VEUCxcbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbitcdGlmIChrcylcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1x0Y3JlYXRlX2VyciA9IGVycjtcbitcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmNhbGxiYWNrX2RvbmUsIDEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBrc29ja193cV92YWx1ZSAqdmFsdWU7XG4rXHR1MzIga2V5ID0gMDtcbitcdGludCBlcnI7XG4rXG4rXHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d29ya19tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbHVlKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdGVyciA9IGJwZl93cV9pbml0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIFx1MDAyNndvcmtfbWFwLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRlcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gYnBmX3dxX3N0YXJ0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIDApO1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTc6MjQuMjQyMjIwNzQxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEyODEyNDEyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IEJQRiBLZXJuZWwgU29ja2V0IEludGVyYWN0aW9uKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbW1lZGlhdGUgY29uY2VybiBpcyB3aGV0aGVyIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCAqbmVlZCogdG8gYmUgZnV6emVkLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgc2lnbmlmaWNhbnQgYWRkaXRpb246IG5ldyBCUEYga2Z1bmNzIGZvciBpbnRlcmFjdGluZyB3aXRoIGtlcm5lbCBzb2NrZXRzIOKAkyBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgLiAgWWVwLCB0aGF0J3MgYSBkZWZpbml0ZSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gTm8gcXVlc3Rpb24gYWJvdXQgaXQuXG5cbkxldCdzIHF1aWNrbHkgdmVyaWZ5IHRoZSBhZmZlY3RlZCBmaWxlcywganVzdCB0byBnZXQgYSBsYXkgb2YgdGhlIGxhbmQ6IGBpbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oYCwgYGluY2x1ZGUvbGludXgvc29ja2V0LmhgLCBga2VybmVsL2JwZi92ZXJpZmllci5jYCwgYG5ldC9jb3JlL01ha2VmaWxlYCwgYG5ldC9jb3JlL2JwZl9rc29jay5jYCwgYG5ldC9zb2NrZXQuY2AsIGFuZCBhIGJ1bmNoIG9mIHNlbGZ0ZXN0cy4gU2VlbXMgbGlrZSBhIGZvY3VzZWQgc2V0IG9mIGNoYW5nZXMsIG1vc3RseSBpbiB0aGUgbmV0d29ya2luZy9zb2NrZXQgYXJlYXMuXG5cbkFscmlnaHQsIHRoZSBjb3JlIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBpbiBgbmV0L2NvcmUvYnBmX2tzb2NrLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19CUEZfU1lTQ0FMTGAuICBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgYG5ldC9jb3JlL01ha2VmaWxlYCB0byBjb25maXJtIHRoZSBkZXBlbmRlbmNpZXM6XG5cbmBgYG1ha2VmaWxlXG5pZmRlZiBDT05GSUdfSU5FVFxub2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuZW5kaWZcbmBgYFxuXG5ZdXAsIHRoZXJlIGl0IGlzLiBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgdGhlIGtleS4gIE5vdywgdGhlIGtmdW5jcyB0aGVtc2VsdmVzOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGFuZCBgYnBmX2tzb2NrX3NlbmRgIGFyZSBjbGVhcmx5IHRoZSBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuICBUaGVzZSBhcmUgZ29pbmcgdG8gYmUgY2FsbGFibGUgZnJvbSBCUEYgcHJvZ3JhbXMgb2YgdHlwZXMgYEJQRl9QUk9HX1RZUEVfU1lTQ0FMTGAgYW5kIGBCUEZfUFJPR19UWVBFX0xTTWAuIFRoZXkgbmVlZCB0byBiZSBpbiB0aGUgZnV6emluZyBzY29wZS5cblxuTm93LCBsZXQncyBpZGVudGlmeSB0aGUgc3BlY2lmaWMgc3ltYm9scyB3ZSBuZWVkIHRvIGZvY3VzIG9uLiBCZXNpZGVzIHRoZSBrZnVuY3MsIEkgc2VlIHRoYXQgYGNvbm5lY3Rfc29ja2V0YCBmcm9tIGBuZXQvc29ja2V0LmNgIGlzIGFkZGVkIHRvIGBpbmNsdWRlL2xpbnV4L3NvY2tldC5oYCBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSBhIG5vbi1zdGF0aWMgQVBJIGVudHJ5cG9pbnQuIEFuZCB5ZXMsIGl0IGlzIGV4cG9ydGVkLlxuXG5JIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZyBkZXBlbmRlbmNpZXMuICBJJ3ZlIGdvdCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCwgYW5kIEknbSBnb29kLiAgVGhlIGtmdW5jcyBhbHNvIHN1cHBvcnQgdGhlIGBCUEZfUFJPR19UWVBFX0xTTWAgcHJvZ3JhbSB0eXBlLiBCdXQgSSBjYW4gc2FmZWx5IGFzc3VtZSB0aGF0IHRoZSBjb21waWxhdGlvbiBjb25kaXRpb24gYXJlIGBDT05GSUdfSU5FVGAgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGJhc2VkIG9uIHRoZSBNYWtlZmlsZS5cblxuRG91YmxlLWNoZWNraW5nIGBuZXQvY29yZS9NYWtlZmlsZWAgYWdhaW4gdG8gbWFrZSBzdXJlOlxuYGBgbWFrZWZpbGVcbm9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xub2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfc2tfc3RvcmFnZS5vXG5pZmRlZiBDT05GSUdfSU5FVFxub2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuZW5kaWZcbmBgYFxuWWVwLCBpdCdzIGNvbnNpc3RlbnQuXG5cblNvLCB0aGUgZm9jdXMgaXM6IGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19hY3F1aXJlYCwgYGJwZl9rc29ja19yZWxlYXNlYCwgYGJwZl9rc29ja19zZW5kYCwgYW5kIGBjb25uZWN0X3NvY2tldGAgd2l0aCBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gIFRpbWUgdG8gdXNlIHRoZSB0b29scyB0byBjb25maXJtIGBjb25uZWN0X3NvY2tldGAgYW5kIGBicGZfa3NvY2tfY3JlYXRlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI1MjksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzozNS41MjM0NjM4NjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUxMjM4MDM1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfa3NvY2tfY3JlYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTEtLyoqXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxMjogKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTMtICogQGZhbWlseTpcXHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cXG4tLVxcbmluY2x1ZGUvbGludXgvYnBmX2tzb2NrLmgtMTgtICovXFxuaW5jbHVkZS9saW51eC9icGZfa3NvY2suaDoxOTpzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHtcXG5pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oLTIwLVxcdF9fdTggZmFtaWx5O1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9NDk9X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTEtLyoqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NTI6ICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNTMtICpcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTYzLSAqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NjQ6ICogQG9wdHM6XFx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNjUtICogQG9wdHNfX3N6OlxcdFNpemUgb2YgdGhlIG9wdHMgc3RydWN0Llxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9Njg9X19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Njk6YnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLCB1MzIgb3B0c19fc3osXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzAtXFx0XFx0IGludCAqZXJyX191bmluaXQpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtNzEte1xcbm5ldC9jb3JlL2JwZl9rc29jay5jOjcyOlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0c19jb3B5O1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTczLVxcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtODUtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6ODY6XFx0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTg3LVxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy05MC1cXG5uZXQvY29yZS9icGZfa3NvY2suYzo5MTpcXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtOTItXFx0XFx0LmZhbWlseSA9IFJFQURfT05DRShvcHRzLVxcdTAwM2VmYW1pbHkpLFxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MjYwPUJURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjI2MTpCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2NyZWF0ZSwgS0ZfQUNRVUlSRSB8IEtGX1JFVF9OVUxMIHwgS0ZfU0xFRVBBQkxFKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI2Mi1CVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX2Nvbm5lY3QsIEtGX1NMRUVQQUJMRSlcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0xMS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfY29tbW9uLmg6MTI6c3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaC0xMy1cXHRcXHRcXHRcXHQgICB1MzIgb3B0c19fc3osIGludCAqZXJyX191bmluaXQpIF9fa3N5bTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYz0xOT1pbnQga3NvY2tfc2V0dXAodm9pZCAqY3R4KVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYy0yMC17XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jOjIxOlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgY3JlYXRlX29wdHMgPSB7fTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMtMjItXFx0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX2xzbS5jLTI5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYzozMDpcXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXFx1MDAyNmNyZWF0ZV9vcHRzLCBzaXplb2YoY3JlYXRlX29wdHMpLCBcXHUwMDI2ZXJyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfbHNtLmMtMzEtXFx0aWYgKCFrcylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jPTI1PXN0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmMtMjYte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjI3OlxcdHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgb3B0cyA9IHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0yOC1cXHRcXHQuZmFtaWx5ID0gQUZfSU5FVCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jLTM0LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jOjM1OlxcdGtzID0gYnBmX2tzb2NrX2NyZWF0ZShcXHUwMDI2b3B0cywgc2l6ZW9mKG9wdHMpLCBcXHUwMDI2ZXJyKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuYy0zNi1cXHRpZiAoa3MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE3OjM4LjAzNTg1MTkwMVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMDgzMDAwMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogRnVuY3Rpb24gQXZhaWxhYmlsaXR5IENvbmZpcm1lZCoqXG5cbkFscmlnaHQsIEkgY2FuIHNlZSB0aGF0IHRoZSBmdW5kYW1lbnRhbCBmdW5jdGlvbnMgYXJlIHByZXNlbnQgd2l0aGluIHRoZSBzY29wZSBhbmQgYWNjZXNzaWJsZSDigJMgdGhhdCdzIHRoZSBiYXNlbGluZSwgYW5kIHRoYXQncyBnb29kLiBOb3csIGxldCdzIGRyaWxsIGRvd24gaW50byBgY29ubmVjdF9zb2NrZXRgLiBUaGlzIGlzIHRoZSBjcnV4LCBhbmQgdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIHZlcmlmeSBpdHMgYmVoYXZpb3IgbWV0aWN1bG91c2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTY1NywiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE3OjQxLjM0NDE1Mzk0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODA3NDgxMzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbm5lY3Rfc29ja2V0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmM9MTIwOD1zdGF0aWMgaW50IHZpcnRpb191bWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmFyY2gvdW0vZHJpdmVycy92aXJ0aW9fdW1sLmMtMTIzNi1cXHRkbyB7XFxuYXJjaC91bS9kcml2ZXJzL3ZpcnRpb191bWwuYzoxMjM3OlxcdFxcdHJjID0gb3NfY29ubmVjdF9zb2NrZXQocGRhdGEtXFx1MDAzZXNvY2tldF9wYXRoKTtcXG5hcmNoL3VtL2RyaXZlcnMvdmlydGlvX3VtbC5jLTEyMzgtXFx0fSB3aGlsZSAocmMgPT0gLUVJTlRSKTtcXG4tLVxcbmFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvb3MuaD0xNjY9c3NpemVfdCBvc19yY3ZfZmRfbXNnKGludCBmZCwgaW50ICpmZHMsIHVuc2lnbmVkIGludCBuX2ZkcyxcXG5hcmNoL3VtL2luY2x1ZGUvc2hhcmVkL29zLmgtMTY3LVxcdFxcdCAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX2xlbik7XFxuYXJjaC91bS9pbmNsdWRlL3NoYXJlZC9vcy5oOjE2ODpleHRlcm4gaW50IG9zX2Nvbm5lY3Rfc29ja2V0KGNvbnN0IGNoYXIgKm5hbWUpO1xcbmFyY2gvdW0vaW5jbHVkZS9zaGFyZWQvb3MuaC0xNjktZXh0ZXJuIGludCBvc19maWxlX3R5cGUoY2hhciAqZmlsZSk7XFxuLS1cXG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jPTMzPUVYUE9SVF9TWU1CT0wob3NfY3JlYXRlX3VuaXhfc29ja2V0KTtcXG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jOjM0OkVYUE9SVF9TWU1CT0wob3NfY29ubmVjdF9zb2NrZXQpO1xcbmFyY2gvdW0va2VybmVsL2tzeW1zLmMtMzUtRVhQT1JUX1NZTUJPTChvc19hY2NlcHRfY29ubmVjdGlvbik7XFxuLS1cXG5hcmNoL3VtL2tlcm5lbC90aW1lLmM9NjY2PXN0YXRpYyBpbnQgdGltZV90cmF2ZWxfY29ubmVjdF9leHRlcm5hbChjb25zdCBjaGFyICpzb2NrZXQpXFxuLS1cXG5hcmNoL3VtL2tlcm5lbC90aW1lLmMtNjg3LVxcbmFyY2gvdW0va2VybmVsL3RpbWUuYzo2ODg6XFx0cmMgPSBvc19jb25uZWN0X3NvY2tldChzb2NrZXQpO1xcbmFyY2gvdW0va2VybmVsL3RpbWUuYy02ODktXFx0aWYgKHJjIFxcdTAwM2MgMCkge1xcbi0tXFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM9MTY1PWludCBvc19vcGVuX2ZpbGUoY29uc3QgY2hhciAqZmlsZSwgc3RydWN0IG9wZW5mbGFncyBmbGFncywgaW50IG1vZGUpXFxuLS1cXG5hcmNoL3VtL29zLUxpbnV4L2ZpbGUuYy0yMDAtXFxuYXJjaC91bS9vcy1MaW51eC9maWxlLmM6MjAxOmludCBvc19jb25uZWN0X3NvY2tldChjb25zdCBjaGFyICpuYW1lKVxcbmFyY2gvdW0vb3MtTGludXgvZmlsZS5jLTIwMi17XFxuLS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jPTEyNzc9c3RhdGljIGludCBuYmRfYWRkX3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMTM0OS1cXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjEzNTA6c3RhdGljIGludCBuYmRfcmVjb25uZWN0X3NvY2tldChzdHJ1Y3QgbmJkX2RldmljZSAqbmJkLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL2Jsb2NrL25iZC5jLTEzNTEte1xcbi0tXFxuZHJpdmVycy9ibG9jay9uYmQuYz0yMzQ3PXN0YXRpYyBpbnQgbmJkX2dlbmxfcmVjb25maWd1cmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvYmxvY2svbmJkLmMtMjQ2Ny1cXHRcXHRcXHRmZCA9IChpbnQpbmxhX2dldF91MzIoc29ja3NbTkJEX1NPQ0tfRkRdKTtcXG5kcml2ZXJzL2Jsb2NrL25iZC5jOjI0Njg6XFx0XFx0XFx0cmV0ID0gbmJkX3JlY29ubmVjdF9zb2NrZXQobmJkLCBmZCk7XFxuZHJpdmVycy9ibG9jay9uYmQuYy0yNDY5LVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc29ja2V0Lmg9NDYyPWV4dGVybiBpbnQgX19zeXNfYmluZF9zb2NrZXQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmFkZHJlc3MsXFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaC00NjMtXFx0XFx0XFx0ICAgICBpbnQgYWRkcmxlbik7XFxuaW5jbHVkZS9saW51eC9zb2NrZXQuaDo0NjQ6aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxcbmluY2x1ZGUvbGludXgvc29ja2V0LmgtNDY1LVxcdFxcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpO1xcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MTYxPV9fYnBmX2tmdW5jIGludCBicGZfa3NvY2tfY29ubmVjdChzdHJ1Y3QgYnBmX2tzb2NrICprcyxcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE4Ny1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoxODg6XFx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGtzLVxcdTAwM2Vzb2NrLCBcXHUwMDI2c2EsIGFkZHJsZW4sIDApO1xcbm5ldC9jb3JlL2JwZl9rc29jay5jLTE4OS19XFxuLS1cXG5uZXQvc29ja2V0LmM9MjEwMD1TWVNDQUxMX0RFRklORTMoYWNjZXB0LCBpbnQsIGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIHVwZWVyX3NvY2thZGRyLFxcbi0tXFxubmV0L3NvY2tldC5jLTIxMDUtXFxubmV0L3NvY2tldC5jOjIxMDY6aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxcbm5ldC9zb2NrZXQuYy0yMTA3LVxcdFxcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc29ja2V0LmM9MjEzMj1pbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yMTQwLVxcbm5ldC9zb2NrZXQuYzoyMTQxOlxcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbm5ldC9zb2NrZXQuYy0yMTQyLVxcdFxcdFxcdCAgICAgIHNvY2stXFx1MDAzZWZpbGUtXFx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25jaS9uY2lfZGV2LmM9NjM4PWludCBnZXRfdGFnaW5mbyhpbnQgZGV2X2lkeCwgaW50IHNkLCBpbnQgZmlkLCBpbnQgcGlkKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYy02OTQtXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYzo2OTU6aW50IGNvbm5lY3Rfc29ja2V0KGludCBkZXZfaWR4LCBpbnQgdGFyZ2V0X2lkeClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jLTY5Ni17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jPTcxOT1pbnQgY29ubmVjdF90YWcoaW50IGRldl9pZHgsIGludCB2aXJ0dWFsX2ZkLCBpbnQgc2QsIGludCBmaWQsIGludCBwaWQpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uY2kvbmNpX2Rldi5jLTc0MS1cXHRcXHRyZXR1cm4gLTE7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmNpL25jaV9kZXYuYzo3NDI6XFx0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KGRldl9pZHgsIHRhcmdldF9pZHgpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25jaS9uY2lfZGV2LmMtNzQzLX1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jPTI1Nj1zdGF0aWMgdm9pZCBjb25uZWN0X2NsaWVudChpbnQgc2ssIHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jLTI1OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2JlbmNoLWxvb2t1cHMuYzoyNjA6XFx0aWYgKHRlc3RfY29ubmVjdF9zb2NrZXQoc2ssIHRoaXNfaXBfZGVzdCwgdGVzdF9zZXJ2ZXJfcG9ydCArICpwKSBcXHUwMDNjPSAwKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vYmVuY2gtbG9va3Vwcy5jLTI2MS1cXHRcXHR0ZXN0X2Vycm9yKFxcXCJmYWlsZWQgdG8gY29ubmVjdCgpXFxcIik7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QuYz0zMj1zdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC5jLTQ2LVxcdHN5bmNocm9uaXplX3RocmVhZHMoKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2Nvbm5lY3QuYzo0NzpcXHRpZiAodGVzdF9jb25uZWN0X3NvY2tldChzaywgdGhpc19pcF9kZXN0LCB0ZXN0X3NlcnZlcl9wb3J0KSBcXHUwMDNjPSAwKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vY29ubmVjdC5jLTQ4LVxcdFxcdHRlc3RfZXJyb3IoXFxcImZhaWxlZCB0byBjb25uZWN0KClcXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jPTQyMT1zdGF0aWMgdm9pZCAqY2xpZW50X2ZuKHZvaWQgKmFyZylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vaWNtcHMtZGlzY2FyZC5jLTQzMS1cXHRzeW5jaHJvbml6ZV90aHJlYWRzKCk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9pY21wcy1kaXNjYXJkLmM6NDMyOlxcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHRlc3Rfc2VydmVyX3BvcnQpIFxcdTAwM2M9IDApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9pY21wcy1kaXNjYXJkLmMtNDMzLVxcdFxcdHRlc3RfZXJyb3IoXFxcImZhaWxlZCB0byBjb25uZWN0KClcXFwiKTtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYz04NTI9c3RhdGljIGludCBydW5fY2xpZW50KGNvbnN0IGNoYXIgKnRzdF9uYW1lLCB1bnNpZ25lZCBpbnQgcG9ydCxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYy04NzUtXFx0c3luY2hyb25pemVfdGhyZWFkcygpOyAvKiAyOiBNS1RzIGFkZGVkID1cXHUwMDNlIGNvbm5lY3QoKSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYzo4NzY6XFx0aWYgKHRlc3RfY29ubmVjdF9zb2NrZXQoc2ssIHRoaXNfaXBfZGVzdCwgcG9ydCsrKSBcXHUwMDNjPSAwKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8va2V5LW1hbmFnZW1lbnQuYy04NzctXFx0XFx0dGVzdF9lcnJvcihcXFwiZmFpbGVkIHRvIGNvbm5lY3QoKVxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaD0yOTA9ZXh0ZXJuIGludCB0ZXN0X3dhaXRfZmQoaW50IHNrLCB0aW1lX3Qgc2VjLCBib29sIHdyaXRlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjI5MTpleHRlcm4gaW50IF9fdGVzdF9jb25uZWN0X3NvY2tldChpbnQgc2ssIGNvbnN0IGNoYXIgKmRldmljZSxcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTI5Mi1cXHRcXHRcXHRcXHQgdm9pZCAqYWRkciwgc2l6ZV90IGFkZHJfc3osIGJvb2wgYXN5bmMpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaD0yOTU9c3RhdGljIGlubGluZSBpbnQgdGVzdF9saXN0ZW5fc29ja2V0KGNvbnN0IHVuaW9uIHRjcF9hZGRyIHRhZGRyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zMzktXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaDozNDA6c3RhdGljIGlubGluZSBpbnQgX3Rlc3RfY29ubmVjdF9zb2NrZXQoaW50IHNrLCBjb25zdCB1bmlvbiB0Y3BfYWRkciB0YWRkcixcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0MS1cXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHBvcnQsIGJvb2wgYXN5bmMpXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0NS1cXHR0Y3BfYWRkcl90b19zb2NrYWRkcl9pbihcXHUwMDI2YWRkciwgXFx1MDAyNnRhZGRyLCBodG9ucyhwb3J0KSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaDozNDY6XFx0cmV0dXJuIF9fdGVzdF9jb25uZWN0X3NvY2tldChzaywgdmV0aF9uYW1lLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmgtMzQ3LVxcdFxcdFxcdFxcdCAgICAgKHZvaWQgKilcXHUwMDI2YWRkciwgc2l6ZW9mKGFkZHIpLCBhc3luYyk7XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM0OS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oOjM1MDpzdGF0aWMgaW5saW5lIGludCB0ZXN0X2Nvbm5lY3Rfc29ja2V0KGludCBzaywgY29uc3QgdW5pb24gdGNwX2FkZHIgdGFkZHIsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zNTEtXFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHBvcnQpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvYW9saWIuaC0zNTIte1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL2FvbGliLmg6MzUzOlxcdHJldHVybiBfdGVzdF9jb25uZWN0X3NvY2tldChzaywgdGFkZHIsIHBvcnQsIGZhbHNlKTtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9hb2xpYi5oLTM1NC19XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM9OTA9c3RhdGljIGludCBfX3Rlc3Rfc2twYWlyX3BvbGwoaW50IHNrLCBib29sIHdyaXRlLCB1aW50NjRfdCB0aW1lb3V0LFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jLTExMi1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL2xpYi9zb2NrLmM6MTEzOmludCBfX3Rlc3RfY29ubmVjdF9zb2NrZXQoaW50IHNrLCBjb25zdCBjaGFyICpkZXZpY2UsXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jLTExNC1cXHRcXHRcXHQgIHZvaWQgKmFkZHIsIHNpemVfdCBhZGRyX3N6LCBib29sIGFzeW5jKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9saWIvc29jay5jPTE2ND1pbnQgX3Rlc3Rfc2twYWlyX2Nvbm5lY3RfcG9sbChpbnQgc2ssIGNvbnN0IGNoYXIgKmRldmljZSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYy0xNzQtXFx0c3luY2hyb25pemVfdGhyZWFkcygpOyAvKiAxOiBpbml0IHNrcGFpciBcXHUwMDI2IHJlYWQgbnNjb3VudGVycyAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYzoxNzU6XFx0cmV0ID0gX190ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCBkZXZpY2UsIGFkZHIsIGFkZHJfc3osIHRydWUpO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vbGliL3NvY2suYy0xNzYtXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcmVzdG9yZS5jPTEwOT1zdGF0aWMgdm9pZCB0ZXN0X2dldF9za19jaGVja3BvaW50KHVuc2lnbmVkIGludCBzZXJ2ZXJfcG9ydCwgc29ja2FkZHJfYWYgKnNhZGRyLFxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yZXN0b3JlLmMtMTIyLVxcdHN5bmNocm9uaXplX3RocmVhZHMoKTsgLyogMTogTUtUIGFkZGVkID1cXHUwMDNlIGNvbm5lY3QoKSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcmVzdG9yZS5jOjEyMzpcXHRpZiAodGVzdF9jb25uZWN0X3NvY2tldChzaywgdGhpc19pcF9kZXN0LCBzZXJ2ZXJfcG9ydCkgXFx1MDAzYz0gMClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3Jlc3RvcmUuYy0xMjQtXFx0XFx0dGVzdF9lcnJvcihcXFwiZmFpbGVkIHRvIGNvbm5lY3QoKVxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYz0yNTc9c3RhdGljIHZvaWQgdGVzdF9jbGllbnRfYWN0aXZlX3JzdCh1bnNpZ25lZCBpbnQgcG9ydClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmMtMjczLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBsYXN0OyBpKyspIHtcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jOjI3NDpcXHRcXHRlcnIgPSBfdGVzdF9jb25uZWN0X3NvY2tldChza1tpXSwgdGhpc19pcF9kZXN0LCBwb3J0LCBpICE9IDApO1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmMtMjc1LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0yODQtXFx0LyogYXN5bmMgY29ubmVjdCgpIHdpdGggdGhpcmQgc2sgdG8gZ2V0IGludG8gcmVxdWVzdF9zb2NrX3F1ZXVlICovXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYzoyODU6XFx0ZXJyID0gX3Rlc3RfY29ubmVjdF9zb2NrZXQoc2tbbGFzdF0sIHRoaXNfaXBfZGVzdCwgcG9ydCwgMSk7XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0yODYtXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3JzdC5jPTMyMz1zdGF0aWMgdm9pZCB0ZXN0X2NsaWVudF9wYXNzaXZlX3JzdCh1bnNpZ25lZCBpbnQgcG9ydClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmMtMzM4LVxcdHN5bmNocm9uaXplX3RocmVhZHMoKTsgLyogMTogTUtUIGFkZGVkID1cXHUwMDNlIGNvbm5lY3QoKSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vcnN0LmM6MzM5OlxcdGlmICh0ZXN0X2Nvbm5lY3Rfc29ja2V0KHNrLCB0aGlzX2lwX2Rlc3QsIHBvcnQpIFxcdTAwM2M9IDApXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9yc3QuYy0zNDAtXFx0XFx0dGVzdF9lcnJvcihcXFwiZmFpbGVkIHRvIGNvbm5lY3QoKVxcXCIpO1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZWxmLWNvbm5lY3QuYz0zMz1zdGF0aWMgdm9pZCB0Y3Bfc2VsZl9jb25uZWN0KGNvbnN0IGNoYXIgKnRzdCwgdW5zaWduZWQgaW50IHBvcnQsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvdGNwX2FvL3NlbGYtY29ubmVjdC5jLTY4LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VsZi1jb25uZWN0LmM6Njk6XFx0aWYgKF9fdGVzdF9jb25uZWN0X3NvY2tldChzaywgXFxcImxvXFxcIiwgKHN0cnVjdCBzb2NrYWRkciAqKVxcdTAwMjZhZGRyLFxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VsZi1jb25uZWN0LmMtNzAtXFx0XFx0XFx0XFx0ICBzaXplb2YoYWRkciksIDApIFxcdTAwM2MgMCkge1xcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZXEtZXh0LmM9MTczPXN0YXRpYyB2b2lkICpjbGllbnRfZm4odm9pZCAqYXJnKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3RjcF9hby9zZXEtZXh0LmMtMTg5LVxcdHN5bmNocm9uaXplX3RocmVhZHMoKTsgLyogMTogTUtUIGFkZGVkID1cXHUwMDNlIGNvbm5lY3QoKSAqL1xcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VxLWV4dC5jOjE5MDpcXHRpZiAodGVzdF9jb25uZWN0X3NvY2tldChzaywgdGhpc19pcF9kZXN0LCB0ZXN0X3NlcnZlcl9wb3J0KSBcXHUwMDNjPSAwKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC90Y3BfYW8vc2VxLWV4dC5jLTE5MS1cXHRcXHR0ZXN0X2Vycm9yKFxcXCJmYWlsZWQgdG8gY29ubmVjdCgpXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE3OjQ0LjE1MTY0MDQ0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODgyNjk4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXhhbWluaW5nIHRoZSBTb2NrZXQgQ29ubmVjdGlvbiBBUEkqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgY29ubmVjdF9zb2NrZXRgIGZ1bmN0aW9uLiBSaWdodCwgaXQncyBkZWZpbmVkIHdpdGhpbiBgbmV0L3NvY2tldC5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEFuZCBpdCBsb29rcyBsaWtlIGl0J3MgYSBwdWJsaWNseSBhY2Nlc3NpYmxlIGVudHJ5IHBvaW50LCBub3QganVzdCBzb21ldGhpbmcgdHVja2VkIGF3YXkgd2l0aGluIHRoZSBmaWxlLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gTm93LCB3aGVyZSBpcyBpdCBkZWNsYXJlZCBhZ2Fpbj8gQWgsIHllcywgaW4gYGluY2x1ZGUvbGludXgvc29ja2V0LmhgLiBUaGF0J3MgdGhlIHN0YW5kYXJkIHBsYWNlIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcuIEJ1dCBhIG5pZ2dsaW5nIHF1ZXN0aW9uIGlzIGFyaXNpbmcuLi4gaXMgaXQgYWxzbyBhdmFpbGFibGUgdG8gbW9kdWxlcz8gSSBuZWVkIHRvIGtub3cgaWYgbW9kdWxlcyBjYW4gdXNlIHRoaXMgQVBJLCBiZWNhdXNlIHRoaXMgaW5mbHVlbmNlcyBob3cgdGhlIG5ldHdvcmtpbmcgc3RhY2sgaXMgc3RydWN0dXJlZCBhbmQgaG93IG11Y2ggZmxleGliaWxpdHkgd2UgaGF2ZS4gVGltZSB0byBkb3VibGUtY2hlY2sgaWYgaXQncyBleHBsaWNpdGx5IGV4cG9ydGluZyBpdHNlbGYgdG8gbW9kdWxlcyB1c2luZyBgRVhQT1JUX1NZTUJPTGAuIExldCdzIHNlZSBpZiB0aGF0J3MgaW5jbHVkZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MDcsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxNzo0Ny42Mzk5MTI1NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5OTM1MTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MLipjb25uZWN0X3NvY2tldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3VtL2tlcm5lbC9rc3ltcy5jPTMzPUVYUE9SVF9TWU1CT0wob3NfY3JlYXRlX3VuaXhfc29ja2V0KTtcXG5hcmNoL3VtL2tlcm5lbC9rc3ltcy5jOjM0OkVYUE9SVF9TWU1CT0wob3NfY29ubmVjdF9zb2NrZXQpO1xcbmFyY2gvdW0va2VybmVsL2tzeW1zLmMtMzUtRVhQT1JUX1NZTUJPTChvc19hY2NlcHRfY29ubmVjdGlvbik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE3OjUwLjEzOTI2NzQ0N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5Mzc0NzE2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIFNjb3BlIG9mIHRoaXMgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBpdCdzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIHBhcnQgb2YgYSBtb2R1bGUgZXhwb3J0LCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBpdCdzIGxpa2VseSBhIGdsb2JhbCBmdW5jdGlvbi4gTm93IEkgbmVlZCB0byBjb25maXJtIGl0cyBhY2Nlc3NpYmlsaXR5IGFuZCBpbnRlbmRlZCB1c2UsIHdoaWNoIHBvaW50cyBtZSB0b3dhcmRzIGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUsIHNwZWNpZmljYWxseSBgbmV0L3NvY2tldC5jYC4gSSdsbCBkZWx2ZSBpbnRvIHRoYXQgZmlsZSB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgaWYgdGhlcmUncyBhbnkgZXhwbGljaXQgZXhwb3J0IG9yIHZpc2liaWxpdHkgZGVjbGFyYXRpb25zIHRoYXQgbWlnaHQgc2hlZCBsaWdodCBvbiBpdHMgc2NvcGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMTY1LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTc6NTMuMDc2NzUwODhaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwNTcxNDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbm5lY3Rfc29ja2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zb2NrZXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc29ja2V0LmM9MjEwMD1TWVNDQUxMX0RFRklORTMoYWNjZXB0LCBpbnQsIGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICosIHVwZWVyX3NvY2thZGRyLFxcbi0tXFxubmV0L3NvY2tldC5jLTIxMDUtXFxubmV0L3NvY2tldC5jOjIxMDY6aW50IGNvbm5lY3Rfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxcbm5ldC9zb2NrZXQuYy0yMTA3LVxcdFxcdCAgIGludCBhZGRybGVuLCBpbnQgZmxhZ3MpXFxuLS1cXG5uZXQvc29ja2V0LmM9MjEzMj1pbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcXG4tLVxcbm5ldC9zb2NrZXQuYy0yMTQwLVxcbm5ldC9zb2NrZXQuYzoyMTQxOlxcdHJldHVybiBjb25uZWN0X3NvY2tldChzb2NrLCBhZGRyZXNzLCBhZGRybGVuLFxcbm5ldC9zb2NrZXQuYy0yMTQyLVxcdFxcdFxcdCAgICAgIHNvY2stXFx1MDAzZWZpbGUtXFx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTc6NTMuMTM3MzI5ODk0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjE4MDY3MTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQlBGIEtzb2NrIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBicGZfa3NvY2tgIHN0dWZmLiBJdCdzIG5vdCBhIHN0YW5kYXJkIGV4cG9ydGVkIG1vZHVsZSwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEl0J3MgYSBnbG9iYWwgZnVuY3Rpb24gY2FsbGVkIGZyb20gYG5ldC9jb3JlL2JwZl9rc29jay5jYCwgd2hpY2ggaXMgc3RhdGljYWxseSBjb21waWxlZCwgbGlrZWx5IGxpbmtlZCBkdWUgdG8gYGJwZl9rc29jay5vYCBiZWluZyBpbmNsdWRlZCBpbiBgb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKWAuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcga2V5IHN5bWJvbHMgdG8gemVybyBpbiBvbjogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCBgYnBmX2tzb2NrX2FjcXVpcmVgLCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBgYnBmX2tzb2NrX3NlbmRgLCBhbmQgYGNvbm5lY3Rfc29ja2V0YC5cblxuYGNvbm5lY3Rfc29ja2V0YCBsb29rcyBwcm9taXNpbmcgYXMgYW4gZW50cnkgcG9pbnQ7IGl0IHdyYXBzIGJvdGggYHNlY3VyaXR5X3NvY2tldF9jb25uZWN0YCBhbmQgYHNvY2stXHUwMDNlb3BzLVx1MDAzZWNvbm5lY3RgLiBBbmQgaG9sZCBvbiwgSSd2ZSBnb3QgdG8gcmVtZW1iZXIgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgIGlzIGluIHRoZXJlIHRvby4gSSdsbCBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kIGFzIHdlbGwuXG5cbk5vdywgY29uZmlndXJhdGlvbi13aXNlLCBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQncyByZXF1aXJlZCB0byBtYWtlIHRoaXMgd29yay4gRGVmaW5pdGVseSBgQ09ORklHX0lORVRgIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYC4gVGhlIGxhdHRlciBpcyB1c3VhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiBtb3N0IGtlcm5lbHMsIGJ1dCBsZXQncyBtYWtlIHN1cmUuIENoZWNraW5nIGBuZXQvY29yZS9NYWtlZmlsZWAgYWdhaW4gY29uZmlybXMgdGhlIGRlcGVuZGVuY3k6IGBvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGJwZl9rc29jay5vYCBpcyB1bmRlciBgaWZkZWYgQ09ORklHX0lORVRgLiBTbywgYElORVRgIGFuZCBgQlBGX1NZU0NBTExgIGFyZSB0aGUgbWFpbiBvbmVzLlxuXG5JJ20gd29uZGVyaW5nIGFib3V0IGBDT05GSUdfQlBGX0xTTWAsIHRob3VnaC4gTGV0IG1lIGxvb2sgYXQgdGhpcyBjb2RlIHNuaXBwZXQuXG5cbmBgYGNcbiNpZmRlZiBDT05GSUdfQlBGX0xTTVxuQlRGX0lEX0xJU1RfU0lOR0xFKGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWQsIGZ1bmMsIGJwZl9sc21fc29ja2V0X3NlbmRtc2cpXG4jZW5kaWZcblxuc3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxue1xuXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmtzb2NrX2tmdW5jX2J0Zl9pZHMsIGtmdW5jX2lkKSlcblx0XHRyZXR1cm4gMDtcblxuXHRpZiAocHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1lTQ0FMTClcblx0XHRyZXR1cm4gMDtcblxuI2lmZGVmIENPTkZJR19CUEZfTFNNXG5cdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00gXHUwMDI2XHUwMDI2XG5cdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkICE9IGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWRbMF0pXG5cdFx0cmV0dXJuIDA7XG4jZW5kaWZcblxuXHRyZXR1cm4gLUVBQ0NFUztcbn1cbmBgYFxuXG5UaGUga2Z1bmNzIHNlZW0gdG8gYmUgYXZhaWxhYmxlIGZvciBgQlBGX1BST0dfVFlQRV9TWVNDQUxMYCByZWdhcmRsZXNzIG9mIGBDT05GSUdfQlBGX0xTTWAuIFNvLCBmb3IgKmNvcmUqIGZ1bmN0aW9uYWxpdHksIGBDT05GSUdfQlBGX0xTTWAgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBJdCBzZWVtcyBpdCBqdXN0IGVuYWJsZXMgaG9va2luZyBpdCBmcm9tIExTTSBjb250ZXh0cy4gU2luY2UgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGhlcmUsIEkgdGhpbmsgSSdsbCBsZWF2ZSBpdCBvdXQgZm9yIG5vdy4gTGV0J3Mgc2VlIGlmIHRoZXJlJ3MgYW55IG90aGVyIGNvbmZpZyBmbGFncyBoaWRpbmcgaW4gYG5ldC9jb3JlL2JwZl9rc29jay5jYC4gVGhhdCB3aWxsIGNvbmZpcm0gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTU5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Njc4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjAzLjM1NTQwMDIwN1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4OTI1NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfa3NvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfa3NvY2suYz0yNzQ9QlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcXG5uZXQvY29yZS9icGZfa3NvY2suYy0yNzUtXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Mjc2OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3Ny1CVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTI4MD1zdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYy0yODctXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6Mjg4OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI4OS1cXHRpZiAocHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcXHUwMDI2XFx1MDAyNlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODowMy40MzMyOTY1NTlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTkwNjY1NTA3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHF1aWNrIHJ1bmRvd246XG5cbioqQlBGIFZlcmlmaWNhdGlvbjogQSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCBzbyBgQ09ORklHX0JQRl9MU01gIGlzIGNsZWFybHkgZW5hYmxlZC4gVGhhdCdzIG15IHN0YXJ0aW5nIHBvaW50LiBOb3csIGdpdmVuIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIGlzIGFjdGl2ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBCUEYgdmVyaWZpZXIgaW50ZXJhY3RzIHdpdGggaXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBjaGVja3Mgb3IgbW9kaWZpY2F0aW9ucyB0aGVyZSB0aGF0IGRpcmVjdGx5IHJlbGF0ZSB0byB0aGUgYENPTkZJR19CUEZfTFNNYCBzZXR0aW5nLCBwcm9iYWJseSBhcm91bmQgc2VjdXJpdHkgb3IgcG9saWN5IGVuZm9yY2VtZW50LiBMZXQncyBzZWUgd2hhdCB0aGUgc291cmNlIGNvZGUgaGFzIHRvIHNheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyNjAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODowOS4zMzk5NTQ2MDJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkyMDM3MDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi92ZXJpZmllci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvdmVyaWZpZXIuYz0yNzIzPWludCBicGZfYWRkX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGZ1bmNfaWQsIHUxNiBvZmZzZXQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjczOS1cXHRcXHRpZiAoIWJ0Zl92bWxpbnV4KSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjI3NDA6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJjYWxsaW5nIGtlcm5lbCBmdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkIHdpdGhvdXQgQ09ORklHX0RFQlVHX0lORk9fQlRGXFxcXG5cXFwiKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMjc0MS1cXHRcXHRcXHRyZXR1cm4gLUVOT1RTVVBQO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTQzNTg9QlRGX1NFVF9TVEFSVChyY3VfcHJvdGVjdGVkX3R5cGVzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MzU5OiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjAtQlRGX0lEKHN0cnVjdCwgcHJvZ190ZXN0X3JlZl9rZnVuYylcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM2MS0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDM2MjojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDM2My1CVEZfSUQoc3RydWN0LCBjZ3JvdXApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjQtI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQzNjU6I2lmZGVmIENPTkZJR19CUEZfSklUXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQzNjYtQlRGX0lEKHN0cnVjdCwgYnBmX2NwdW1hc2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDM2OD1CVEZfSUQoc3RydWN0LCB0YXNrX3N0cnVjdClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NDM2OTojaWZkZWYgQ09ORklHX0NSWVBUT1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MzcwLUJURl9JRChzdHJ1Y3QsIGJwZl9jcnlwdG9fY3R4KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MzcxLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo0MzcyOiNpZmRlZiBDT05GSUdfSU5FVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00MzczLUJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz00ODcwPXN0YXRpYyB1MzIgKnJlZzJidGZfaWRzW19fQlBGX1JFR19UWVBFX01BWF0gPSB7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ4NzE6I2lmZGVmIENPTkZJR19ORVRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDg3Mi1cXHRbUFRSX1RPX1NPQ0tFVF0gPSBcXHUwMDI2YnRmX3NvY2tfaWRzW0JURl9TT0NLX1RZUEVfU09DS10sXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NDkyNT1zdGF0aWMgaW50IGNoZWNrX3BrdF9wdHJfYWxpZ25tZW50KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNDkzNi1cXHQvKiBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IGhhdmUgYSBLY29uZmlnIGVuYWJsaW5nXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ5Mzc6XFx0ICogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgdGhlIHZhbHVlIG9mXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTQ5MzgtXFx0ICogTkVUX0lQX0FMSUdOIGlzIHVuaXZlcnNhbGx5IHNldCB0byAnMicuICBBbmQgb24gcGxhdGZvcm1zXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjQ5Mzk6XFx0ICogdGhhdCBkbyBzZXQgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MsIHdlIGdldFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy00OTQwLVxcdCAqIHRvIHRoaXMgY29kZSBvbmx5IGluIHN0cmljdCBtb2RlIHdoZXJlIHdlIHdhbnQgdG8gZW11bGF0ZVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTUwOTE9c3RhdGljIGludCBjaGVja19tYXhfc3RhY2tfZGVwdGhfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgaWR4LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTUxMzUtXFx0c3VicHJvZ19kZXB0aCA9IHJvdW5kX3VwX3N0YWNrX2RlcHRoKGVudiwgc3VicHJvZ1tpZHhdLnN0YWNrX2RlcHRoKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTEzNjpcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfWDg2XzY0KSBcXHUwMDI2XFx1MDAyNiBzdWJwcm9nW2lkeF0uc3RhY2tfYXJnX2NudCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01MTM3LVxcdFxcdC8qIHg4Ni02NCB1c2VzIFI5IGZvciBib3RoIHByaXZhdGUgc3RhY2sgZnJhbWUgcG9pbnRlciBhbmQgYXJnNi4gKi9cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01NjQ4PUJURl9UWVBFX1NBRkVfUkNVX09SX05VTEwoc3RydWN0IG1tX3N0cnVjdCkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01NjQ5LVxcdHN0cnVjdCBmaWxlIF9fcmN1ICpleGVfZmlsZTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTY1MDojaWZkZWYgQ09ORklHX01FTUNHXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTU2NTEtXFx0c3RydWN0IHRhc2tfc3RydWN0IF9fcmN1ICpvd25lcjtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz01OTA4PXN0YXRpYyBpbnQgY2hlY2tfcHRyX3RvX21hcF9hY2Nlc3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTIyLVxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6NTkyMzpcXHRcXHR2ZXJib3NlKGVudiwgXFxcIm1hcF9wdHIgYWNjZXNzIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfREVCVUdfSU5GT19CVEZcXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy01OTI0LVxcdFxcdHJldHVybiAtRU5PVFNVUFA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9NzE3Mz1zdGF0aWMgaW50IHByb2Nlc3NfdGltZXJfZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVnLCBhcmdub190IGFyZ25vLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTcxNzUte1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3MTc2OlxcdGlmIChJU19FTkFCTEVEKENPTkZJR19QUkVFTVBUX1JUKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03MTc3LVxcdFxcdHZlcmJvc2UoZW52LCBcXFwiYnBmX3RpbWVyIGNhbm5vdCBiZSB1c2VkIGZvciBQUkVFTVBUX1JULlxcXFxuXFxcIik7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9Nzc0MT1zdGF0aWMgY29uc3Qgc3RydWN0IGJwZl9yZWdfdHlwZXMgc29ja190eXBlcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03NzQ5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzo3NzUwOiNpZmRlZiBDT05GSUdfTkVUXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTc3NTEtc3RhdGljIGNvbnN0IHN0cnVjdCBicGZfcmVnX3R5cGVzIGJ0Zl9pZF9zb2NrX2NvbW1vbl90eXBlcyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz03ODI0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3JlZ190eXBlcyAqY29tcGF0aWJsZV9yZWdfdHlwZXNbX19CUEZfQVJHX1RZUEVfTUFYXSA9IHtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy03ODMyLVxcdFtBUkdfUFRSX1RPX1NPQ0tfQ09NTU9OXVxcdD0gXFx1MDAyNnNvY2tfdHlwZXMsXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjc4MzM6I2lmZGVmIENPTkZJR19ORVRcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtNzgzNC1cXHRbQVJHX1BUUl9UT19CVEZfSURfU09DS19DT01NT05dXFx0PSBcXHUwMDI2YnRmX2lkX3NvY2tfY29tbW9uX3R5cGVzLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTEwMTk5PXN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjM5LVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMDY0MDojaWZkZWYgQ09ORklHX1BFUkZfRVZFTlRTXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjQxLVxcdFxcdGVyciA9IGdldF9jYWxsY2hhaW5fYnVmZmVycyhzeXNjdGxfcGVyZl9ldmVudF9tYXhfc3RhY2spO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjQ0LVxcdFxcdGVyciA9IC1FTk9UU1VQUDtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTA2NDU6XFx0XFx0ZXJyX3N0ciA9IFxcXCJmdW5jICVzIyVkIG5vdCBzdXBwb3J0ZWQgd2l0aG91dCBDT05GSUdfUEVSRl9FVkVOVFNcXFxcblxcXCI7XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTEwNjQ2LSNlbmRpZlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTExMTI1PUJURl9JRChmdW5jLCBicGZfcmJ0cmVlX3JpZ2h0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTEyNjojaWZkZWYgQ09ORklHX05FVFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTEyNy1CVEZfSUQoZnVuYywgYnBmX2R5bnB0cl9mcm9tX3NrYilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE0Nz1CVEZfSUQoZnVuYywgYnBmX3ByZWVtcHRfZW5hYmxlKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE0ODojaWZkZWYgQ09ORklHX0NHUk9VUFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNDktQlRGX0lEKGZ1bmMsIGJwZl9pdGVyX2Nzc190YXNrX25ldylcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE1MT1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExMTUyLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE1MzojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExNTQtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2Nvb2tpZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTE2Mz1CVEZfSUQoZnVuYywgYnBmX2l0ZXJfbnVtX2Rlc3Ryb3kpXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExMTY0OiNpZmRlZiBDT05GSUdfQlBGX0xTTVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTE2NS1CVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTExODI9QlRGX0lEKGZ1bmMsIGJwZl9hcmVuYV9yZXNlcnZlX3BhZ2VzKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxMTE4MzojaWZkZWYgQ09ORklHX0JQRl9FVkVOVFNcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTExODQtQlRGX0lEKGZ1bmMsIGJwZl9zZXNzaW9uX2lzX3JldHVybilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xNDQ3Mj1zdGF0aWMgdm9pZCBzY2FsYXJfYnl0ZV9zd2FwKHN0cnVjdCBicGZfcmVnX3N0YXRlICpkc3RfcmVnLCBzdHJ1Y3QgYnBmX2luc24gKmluc24pXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTQ0ODctXFx0Ym9vbCBpc19iaWdfZW5kaWFuO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNDQ4ODojaWZkZWYgQ09ORklHX0NQVV9CSUdfRU5ESUFOXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE0NDg5LVxcdGlzX2JpZ19lbmRpYW4gPSB0cnVlO1xcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE2NjUyPWJvb2wgYnBmX3ZlcmlmaWVyX2lubGluZXNfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgczMyIGltbSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY1NC1cXHRzd2l0Y2ggKGltbSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY1NTojaWZkZWYgQ09ORklHX1g4Nl82NFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY1Ni1cXHRjYXNlIEJQRl9GVU5DX2dldF9zbXBfcHJvY2Vzc29yX2lkOlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxNjY1NzojaWZkZWYgQ09ORklHX1NNUFxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNjY1OC1cXHRjYXNlIEJQRl9GVU5DX2dldF9jdXJyZW50X3Rhc2tfYnRmOlxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE3Njg2PXN0YXRpYyBpbnQgY2hlY2tfcHNldWRvX2J0Zl9pZChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE3NzAyLVxcdFxcdGlmICghYnRmX3ZtbGludXgpIHtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTc3MDM6XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJrZXJuZWwgaXMgbWlzc2luZyBCVEYsIG1ha2Ugc3VyZSBDT05GSUdfREVCVUdfSU5GT19CVEY9eSBpcyBzcGVjaWZpZWQgaW4gS2NvbmZpZy5cXFxcblxcXCIpO1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xNzcwNC1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODY3OD1zdGF0aWMgaW50IGNoZWNrX3N0cnVjdF9vcHNfYnRmX2lkKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MDEtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODAyOiNpZmRlZiBDT05GSUdfRlVOQ1RJT05fRVJST1JfSU5KRUNUSU9OXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODAzLVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE4ODExPUJURl9JRChmdW5jLCBfX2ZpbGVtYXBfYWRkX2ZvbGlvKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODgxMjojaWZkZWYgQ09ORklHX0ZBSUxfUEFHRV9BTExPQ1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODgxMy1CVEZfSUQoZnVuYywgc2hvdWxkX2ZhaWxfYWxsb2NfcGFnZSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTQtI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE4ODE1OiNpZmRlZiBDT05GSUdfRkFJTFNMQUJcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTg4MTYtQlRGX0lEKGZ1bmMsIHNob3VsZF9mYWlsc2xhYilcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xODg4Mz1zdGF0aWMgaW50IGNoZWNrX2F0dGFjaF9tb2RpZnlfcmV0dXJuKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3QgY2hhciAqZnVuY19uYW1lKVxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE4ODkxLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxODg5MjojZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0VSUk9SX0lOSkVDVElPTiAqL1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xODg5My1cXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM1Nz1CVEZfSURfVU5VU0VEXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzU4OiNpZmRlZiBDT05GSUdfU01QXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzU5LUJURl9JRChmdW5jLCBfX19taWdyYXRlX2VuYWJsZSlcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM2MT1CVEZfSUQoZnVuYywgbWlncmF0ZV9lbmFibGUpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzYyLSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM2MzojaWYgIWRlZmluZWQgQ09ORklHX1BSRUVNUFRfUkNVIFxcdTAwMjZcXHUwMDI2ICFkZWZpbmVkIENPTkZJR19USU5ZX1JDVVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM2NC1CVEZfSUQoZnVuYywgcmN1X3JlYWRfdW5sb2NrX3N0cmljdClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjUtI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzY2OiNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19QUkVFTVBUKSB8fCBkZWZpbmVkKENPTkZJR19UUkFDRV9QUkVFTVBUX1RPR0dMRSlcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzNjctQlRGX0lEKGZ1bmMsIHByZWVtcHRfY291bnRfYWRkKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM2OD1CVEZfSUQoZnVuYywgcHJlZW1wdF9jb3VudF9zdWIpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzY5LSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM3MDojaWZkZWYgQ09ORklHX1BSRUVNUFRfUkNVXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzcxLUJURl9JRChmdW5jLCBfX3JjdV9yZWFkX2xvY2spXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTkzODA9QlRGX1NFVF9TVEFSVChub3JldHVybl9kZW55KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM4MTojaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzgyLUJURl9JRChmdW5jLCBfX2lhMzJfc3lzX2V4aXQpXFxua2VybmVsL2JwZi92ZXJpZmllci5jPTE5MzgzPUJURl9JRChmdW5jLCBfX2lhMzJfc3lzX2V4aXRfZ3JvdXApXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Mzg0LSNlbmRpZlxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYzoxOTM4NTojaWZkZWYgQ09ORklHX0tVTklUXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5Mzg2LUJURl9JRChmdW5jLCBfX2t1bml0X2Fib3J0KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTM4Nz1CVEZfSUQoZnVuYywga3VuaXRfdHJ5X2NhdGNoX3Rocm93KVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTM4OC0jZW5kaWZcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTkzODk6I2lmZGVmIENPTkZJR19NT0RVTEVTXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzkwLUJURl9JRChmdW5jLCBfX21vZHVsZV9wdXRfYW5kX2t0aHJlYWRfZXhpdClcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTkzOTEtI2VuZGlmXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5MzkyOiNpZmRlZiBDT05GSUdfWDg2XzY0XFxua2VybmVsL2JwZi92ZXJpZmllci5jLTE5MzkzLUJURl9JRChmdW5jLCBfX3g2NF9zeXNfZXhpdClcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xOTU4Nj1zdHJ1Y3QgYnRmICpicGZfZ2V0X2J0Zl92bWxpbnV4KHZvaWQpXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTk1OTAtXFxua2VybmVsL2JwZi92ZXJpZmllci5jOjE5NTkxOlxcdGlmICghYnRmIFxcdTAwMjZcXHUwMDI2IElTX0VOQUJMRUQoQ09ORklHX0RFQlVHX0lORk9fQlRGKSkge1xcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xOTU5Mi1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZidGZfdm1saW51eF9sb2NrKTtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0yMDEwMj1pbnQgYnBmX2NoZWNrKHN0cnVjdCBicGZfcHJvZyAqKnByb2csIHVuaW9uIGJwZl9hdHRyICphdHRyLCBicGZwdHJfdCB1YXR0cixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0yMDE4OS1cXHRlbnYtXFx1MDAzZXN0cmljdF9hbGlnbm1lbnQgPSAhIShhdHRyLVxcdTAwM2Vwcm9nX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfU1RSSUNUX0FMSUdOTUVOVCk7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjIwMTkwOlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUykpXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTIwMTkxLVxcdFxcdGVudi1cXHUwMDNlc3RyaWN0X2FsaWdubWVudCA9IHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjA5LjQzMTk5NTM0M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTk3MDI4NDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlIGZvciBicGZfa3NvY2sgU3VwcG9ydCoqXG5cbkFscmlnaHQsIGxldCdzIG5haWwgZG93biB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEknbSBsb29raW5nIGF0IGBrZXJuZWwvYnBmL3ZlcmlmaWVyLmNgIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggYGJwZl9rc29ja2AgYW5kIGByY3VfcHJvdGVjdGVkX3R5cGVzYC4gR2l2ZW4gdGhhdCwgYENPTkZJR19JTkVUYCBpcyBhIGRlZmluaXRlIHJlcXVpcmVtZW50IOKAkyBubyBxdWVzdGlvbiB0aGVyZS4gQW5kLCBvZiBjb3Vyc2UsIHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBCUEYsIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVzc2VudGlhbC5cblxuTm93LCByZWdhcmRpbmcgZGVidWcgaW5mb3JtYXRpb24gZm9yIEJURiwgYENPTkZJR19ERUJVR19JTkZPX0JURmAgc2VlbXMgaGlnaGx5IGxpa2VseSwgZXNwZWNpYWxseSBzaW5jZSB3ZSdyZSB3b3JraW5nIHdpdGggQlBGIGtmdW5jcy4gSXQncyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgZm9yIHRoaXMga2luZCBvZiBmdW5jdGlvbmFsaXR5LCBzbyBJJ2xsIGluY2x1ZGUgdGhhdC4gRmluYWxseSwgZm9yIGBDT05GSUdfQlBGX0xTTWAsIHRoZSB0ZXN0cyBsZXZlcmFnZSBgQlBGX1BST0dfVFlQRV9MU01gIGZvciB0aGUgYGJwZl9rc29ja19zZW5kYCBmdW5jdGlvbmFsaXR5IHZpYSBhbiBMU00gaG9vay4gVGhlcmVmb3JlLCBsZXQncyBpbmNsdWRlIHRoaXMgY29uZmlndXJhdGlvbiBhcyB3ZWxsLlxuXG5TbywgaGVyZSdzIHRoZSBjb25maWcgY2hlY2tsaXN0OlxuXG4qICAgYElORVRgXG4qICAgYEJQRl9TWVNDQUxMYFxuKiAgIGBERUJVR19JTkZPX0JURmBcbiogICBgQlBGX0xTTWBcblxuQW5kLCBsZXQncyBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29yZSBzeW1ib2xzIGluIGZvY3VzOlxuXG4qICAgYGJwZl9rc29ja19jcmVhdGVgXG4qICAgYGJwZl9rc29ja19jb25uZWN0YFxuKiAgIGBicGZfa3NvY2tfYWNxdWlyZWBcbiogICBgYnBmX2tzb2NrX3JlbGVhc2VgXG4qICAgYGJwZl9rc29ja19zZW5kYFxuKiAgIGBjb25uZWN0X3NvY2tldGBcbiogICBgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcmBcblxuUXVpY2sgdGhvdWdodCBvbiBgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcmA6IGl0J3MganVzdCBhIHN0cmFpZ2h0Zm9yd2FyZCB3cmFwcGVyIGFyb3VuZCBgYnBmX2tzb2NrX3JlbGVhc2VgLCBzbyBpdCdzIG5vdCBhIGNvbmNlcm4gZnJvbSBhIGNvbmZpZ3VyYXRpb24gcG9pbnQgb2Ygdmlldy4gTGV0J3MgbWFrZSBzdXJlIHRoYXQgYGJwZl9rc29ja19yZWxlYXNlX2R0b3JgIGlzIG5vbi1zdGF0aWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2NTE2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjE3LjQyOTAyNjAzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMzU3Nzg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJicGZfa3NvY2tfcmVsZWFzZV9kdG9yXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL2JwZl9rc29jay5jPTIxMz1fX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjIwLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjIyMTpfX2JwZl9rZnVuYyB2b2lkIGJwZl9rc29ja19yZWxlYXNlX2R0b3Iodm9pZCAqa3MpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjIyLXtcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTIyNC19XFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6MjI1OkNGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMjI2LVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM9MzA0PUJURl9JRChzdHJ1Y3QsIGJwZl9rc29jaylcXG5uZXQvY29yZS9icGZfa3NvY2suYzozMDU6QlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODoxOS43NjI2MDk0MDRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjUzOTM3OTAyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLZXJuZWwgQlBGIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IG5vdCBhIHN0YXRpYyBjaGFuZ2Ug4oCTIHRoYXQgbXVjaCBpcyBjbGVhci4gTGV0J3MgYnJlYWsgZG93biB3aHkuIFRoaXMgcGF0Y2ggaXMgaW50cm9kdWNpbmcgYSBuZXcgc3VpdGUgb2YgQlBGIGtmdW5jczogYGJwZl9rc29ja19jcmVhdGVgLCBgYnBmX2tzb2NrX2Nvbm5lY3RgLCB0aGUgYGJwZl9rc29ja19zZW5kYCBmYW1pbHksIGFuZCBzbyBvbi4gVGhlc2Ugd2lsbCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8sIGZ1bmRhbWVudGFsbHksIGNyZWF0ZSBhbmQgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgc29ja2V0cywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIHNoaWZ0IHdpdGhpbiB0aGUga2VybmVsJ3MgQlBGIHN1YnN5c3RlbS4gVGhpcyBvcGVucyB1cCBlbnRpcmVseSBuZXcgY29kZSBwYXRocyB0aGF0IGFyZSBub3cgcmVhY2hhYmxlIHZpYSBCUEYsIGFuZCB0aGF0IHNjcmVhbXMgXCJmdXp6aW5nIHRhcmdldFwiIHRvIG1lLiBTcGVjaWZpY2FsbHksIHRoZXNlIGtmdW5jcyBhcmUgYWNjZXNzaWJsZSBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgbGlrZSB0aGUgU1lTQ0FMTCBhbmQgTFNNIGhvb2tzLCB3aGljaCBpbW1lZGlhdGVseSBleHBhbmRzIHRoZSBhdHRhY2sgc3VyZmFjZSB0byBjb25zaWRlci5cblxuRnJvbSBhIGNvbmZpZ3VyYXRpb24gcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgSU5FVGAsIGBCUEZfU1lTQ0FMTGAsIGBERUJVR19JTkZPX0JURmAsIGFuZCBgQlBGX0xTTWAgYXJlIGVuYWJsZWQgZHVyaW5nIHRlc3RpbmcuIFRoYXQgY292ZXJzIHRoZSBiYXNpYyBkZXBlbmRlbmNpZXMgdG8gZW5hYmxlIHRoZSBrc29jayBCUEYgZnVuY3Rpb25hbGl0eS5cblxuSSdtIG1ha2luZyBhIG1lbnRhbCBub3RlIG9mIHRoZSBjcml0aWNhbCBzeW1ib2xzOiBgYnBmX2tzb2NrX2NyZWF0ZWAsIGBicGZfa3NvY2tfY29ubmVjdGAsIGBicGZfa3NvY2tfYWNxdWlyZWAsIGBicGZfa3NvY2tfcmVsZWFzZWAsIGBicGZfa3NvY2tfc2VuZGAsIHRoZSBgY29ubmVjdF9zb2NrZXRgIGhlbHBlciwgYW5kIGBicGZfa3NvY2tfcmVsZWFzZV9kdG9yYC4gVGhlc2UgYXJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBhbmQgY2xlYW51cCByb3V0aW5lcyBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIGFuYWx5c2lzIGFuZCB2dWxuZXJhYmlsaXR5IGFzc2Vzc21lbnQuIEkgd2FudCB0byBtYWtlIHN1cmUgSSBhbSBjb3ZlcmluZyBhbGwgdGhlIGtmdW5jcy5cblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgbmV3IGZ1bmN0aW9ucyBpbnRyb2R1Y2VkIGJlc2lkZXMgdGhlIG9uZXMgSSd2ZSBsaXN0ZWQuIEl0J3MgZWFzeSB0byBtaXNzIGFuIGltcG9ydGFudCBvbmUsIHNvIEknbGwgcmV2aWV3IGFnYWluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzYwOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMjoxODoyNi4zMDE5OTE2OTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMDczNzMwNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJec3RhdGljLiogYnBmX2tzb2NrX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvY29yZS9icGZfa3NvY2suY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9icGZfa3NvY2suYz0zMT1zdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzktXFxubmV0L2NvcmUvYnBmX2tzb2NrLmM6NDA6c3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTQxLXtcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jPTI3Nz1CVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcXG4tLVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI3OS1cXG5uZXQvY29yZS9icGZfa3NvY2suYzoyODA6c3RhdGljIGludCBicGZfa3NvY2tfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTI4MS17XFxuLS1cXG5uZXQvY29yZS9icGZfa3NvY2suYz0zMDU9QlRGX0lEKGZ1bmMsIGJwZl9rc29ja19yZWxlYXNlX2R0b3IpXFxubmV0L2NvcmUvYnBmX2tzb2NrLmMtMzA2LVxcbm5ldC9jb3JlL2JwZl9rc29jay5jOjMwNzpzdGF0aWMgaW50IF9faW5pdCBicGZfa3NvY2tfa2Z1bmNfaW5pdCh2b2lkKVxcbm5ldC9jb3JlL2JwZl9rc29jay5jLTMwOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjI2LjQyMjczNjkyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTY1OTU3Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipQcmlvcml0aXppbmcgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIGBrc29ja19yZWxlYXNlX3dvcmtfZm5gICppcyogYSB3b3JrcXVldWUgY2FsbGJhY2sgYW5kIHRoZXJlZm9yZSBmdXp6YWJsZSwgd2hpY2ggaXMgZ29vZC4gQnV0IGl0J3MgYWxzbyBzdGF0aWMsIGFuZCB0aGF0IGltbWVkaWF0ZWx5IGdpdmVzIG1lIHBhdXNlLiBUaGUgZ3VpZGFuY2UgaXMgcHJldHR5IGNsZWFyOiBmYXZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zLCBhbmQgZm9yIGdvb2QgcmVhc29uLiBNeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBtYXhpbWl6aW5nIGNvdmVyYWdlIGFuZCBlYXNlIG9mIGZ1enppbmcuIEdpdmVuIHRoaXMsIEknbSBnb2luZyB0byBzZXQgbXkgc2lnaHRzIG9uIHRoZSBub24tc3RhdGljIGNhbmRpZGF0ZXMgaW5zdGVhZC4gSSdsbCBtYWtlIHN1cmUgdG8gZXhwbG9yZSB0aG9zZSBmaXJzdC4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIGZvcndhcmQgd2l0aCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NjQxLCJPdXRwdXRUb2tlbnMiOjIyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjMwLjk4ODY5ODk5M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTY4NzQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU5FVFwiLFxuICAgIFwiQlBGX1NZU0NBTExcIixcbiAgICBcIkRFQlVHX0lORk9fQlRGXCIsXG4gICAgXCJCUEZfTFNNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2tzb2NrX2NyZWF0ZVwiLFxuICAgIFwiYnBmX2tzb2NrX2Nvbm5lY3RcIixcbiAgICBcImJwZl9rc29ja19hY3F1aXJlXCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZVwiLFxuICAgIFwiYnBmX2tzb2NrX3NlbmRcIixcbiAgICBcImNvbm5lY3Rfc29ja2V0XCIsXG4gICAgXCJicGZfa3NvY2tfcmVsZWFzZV9kdG9yXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBzZXQgb2YgQlBGIGtmdW5jcyAoYnBmX2tzb2NrX2NyZWF0ZSwgYnBmX2tzb2NrX2Nvbm5lY3QsIGJwZl9rc29ja19zZW5kLCBldGMuKSB0aGF0IGFsbG93IEJQRiBwcm9ncmFtcyB0byBjcmVhdGUgYW5kIGludGVyYWN0IHdpdGgga2VybmVsIHNvY2tldHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsJ3MgQlBGIHN1YnN5c3RlbSBhbmQgaW50cm9kdWNlcyBuZXcgcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLiBUaGUga2Z1bmNzIGFyZSBhY2Nlc3NpYmxlIGZyb20gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAobGlrZSBTWVNDQUxMIGFuZCBMU00gaG9va3MpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklORVRcIixcbiAgICBcIkJQRl9TWVNDQUxMXCIsXG4gICAgXCJERUJVR19JTkZPX0JURlwiLFxuICAgIFwiQlBGX0xTTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9rc29ja19jcmVhdGVcIixcbiAgICBcImJwZl9rc29ja19jb25uZWN0XCIsXG4gICAgXCJicGZfa3NvY2tfYWNxdWlyZVwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VcIixcbiAgICBcImJwZl9rc29ja19zZW5kXCIsXG4gICAgXCJjb25uZWN0X3NvY2tldFwiLFxuICAgIFwiYnBmX2tzb2NrX3JlbGVhc2VfZHRvclwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgc2V0IG9mIEJQRiBrZnVuY3MgKGJwZl9rc29ja19jcmVhdGUsIGJwZl9rc29ja19jb25uZWN0LCBicGZfa3NvY2tfc2VuZCwgZXRjLikgdGhhdCBhbGxvdyBCUEYgcHJvZ3JhbXMgdG8gY3JlYXRlIGFuZCBpbnRlcmFjdCB3aXRoIGtlcm5lbCBzb2NrZXRzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCdzIEJQRiBzdWJzeXN0ZW0gYW5kIGludHJvZHVjZXMgbmV3IHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4gVGhlIGtmdW5jcyBhcmUgYWNjZXNzaWJsZSBmcm9tIHNsZWVwYWJsZSBCUEYgcHJvZ3JhbXMgKGxpa2UgU1lTQ0FMTCBhbmQgTFNNIGhvb2tzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzEuMTIwMzk0MjY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzgxMjEzNDYwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE4OjMxLjEyMDk1MDkzOVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NzgxMTU3NTExNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIChgYnBmX2tzb2NrYCkgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMgZnJvbSBCUEYgcHJvZ3JhbXMuIFxcblxcbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGJwZl9rc29ja2AsIGBzdHJ1Y3QgbXNnaGRyYCwgYHN0cnVjdCBrdmVjYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIG9yIGRlY2xhcmF0aW9uIChlLmcuLCB1c2luZyBga3phbGxvY19vYmpgIG9yIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzKS5cXG4yLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCBmcm9tIEJQRiBwcm9ncmFtcyAoYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgLCBhbmQgdGhlIHNlbmQgYnVmZmVyKSBhcmUgdmFsaWRhdGVkIGZvciBzaXplIGJ5IHRoZSBrZnVuYyB3cmFwcGVycy4gVGhlIEJQRiB2ZXJpZmllciBlbmZvcmNlcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZXNlIGFyZ3VtZW50cyBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIHRvIHRoZSBrZnVuY3MuIEZ1cnRoZXJtb3JlLCBLTVNBTiB1bnBvaXNvbnMgQlBGIHN0YWNrIGFuZCBtYXAgbWVtb3J5IGJ5IGRlc2lnbiBzaW5jZSBpdCBjYW5ub3QgdHJhY2sgSklUdGVkIEJQRiBleGVjdXRpb24sIG1lYW5pbmcgS01TQU4gd291bGQgbm90IGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvcmlnaW5hdGluZyBmcm9tIHRoZSBCUEYgcHJvZ3JhbSBpdHNlbGYuXFxuMy4gVGhlIHJlZmFjdG9yaW5nIG9mIGBjb25uZWN0X3NvY2tldGAgbWVyZWx5IGV4dHJhY3RzIGV4aXN0aW5nIGxvZ2ljIHdpdGhvdXQgY2hhbmdpbmcgaG93IHNvY2tldCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgb3IgY29waWVkLlxcbjQuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZSBkYXRhIHNlbnQgb3ZlciB0aGUgc29ja2V0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgQlBGIHByb2dyYW0uXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIHdoaWNoIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBleHBvc2VkIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDk3YzA4YTEyOTcxNWFmOGI2YjM4ZmFmOGVhNDBiYWE4MDhlODhkM2NcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMjoxNzoyMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX2tzb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JwZl9rc29jay5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uY2IzODdmYjc1ZTQzYlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfa3NvY2suaFxuQEAgLTAsMCArMSwzNiBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi9cbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgSXNvdmFsZW50ICovXG4rXG4rI2lmbmRlZiBfQlBGX0tTT0NLX0hcbisjZGVmaW5lIF9CUEZfS1NPQ0tfSFxuK1xuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3R5cGVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbitcbisvKipcbisgKiBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIC0gQlBGIGtlcm5lbCBzb2NrZXQgY3JlYXRpb24gcGFyYW1ldGVyc1xuKyAqIEBmYW1pbHk6XHRBZGRyZXNzIGZhbWlseTogQUZfSU5FVCBvciBBRl9JTkVUNi5cbisgKiBAdHlwZTpcdFNvY2tldCB0eXBlOiBvbmx5IFNPQ0tfREdSQU0gc3VwcG9ydGVkIGZvciBub3cuXG4rICogQHByb3RvY29sOlx0UHJvdG9jb2wgbnVtYmVyIChlLmcuIElQUFJPVE9fVURQKSwgb3IgMCBmb3IgdGhlIGRlZmF1bHQgcHJvdG9jb2xcbisgKlx0XHRvZiB0aGUgZ2l2ZW4gdHlwZS5cbisgKiBAcmVzZXJ2ZWQ6XHRNdXN0IGJlIHplcm8uIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMge1xuK1x0X191OCBmYW1pbHk7XG4rXHRfX3U4IHR5cGU7XG4rXHRfX3U4IHByb3RvY29sO1xuK1x0X191OCByZXNlcnZlZDtcbit9O1xuK1xuKy8qKlxuKyAqIHVuaW9uIGJwZl9rc29ja19hZGRyIC0gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzXG4rICogQHNpbjogSVB2NCBzb2NrZXQgYWRkcmVzcy5cbisgKiBAc2luNjogSVB2NiBzb2NrZXQgYWRkcmVzcy5cbisgKi9cbit1bmlvbiBicGZfa3NvY2tfYWRkciB7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luO1xuK1x0c3RydWN0IHNvY2thZGRyX2luNiBzaW42O1xuK307XG4rXG4rI2VuZGlmIC8qIF9CUEZfS1NPQ0tfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc29ja2V0LmggYi9pbmNsdWRlL2xpbnV4L3NvY2tldC5oXG5pbmRleCAyYThkN2IxNGYxZDExLi41YTVlYjEyNTAxMDMyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zb2NrZXQuaFxuQEAgLTQ2MSw2ICs0NjEsOCBAQCBleHRlcm4gc3RydWN0IGZpbGUgKl9fc3lzX3NvY2tldF9maWxlKGludCBmYW1pbHksIGludCB0eXBlLCBpbnQgcHJvdG9jb2wpO1xuIGV4dGVybiBpbnQgX19zeXNfYmluZChpbnQgZmQsIHN0cnVjdCBzb2NrYWRkciBfX3VzZXIgKnVteWFkZHIsIGludCBhZGRybGVuKTtcbiBleHRlcm4gaW50IF9fc3lzX2JpbmRfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyZXNzLFxuIFx0XHRcdCAgICAgaW50IGFkZHJsZW4pO1xuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcixcbitcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0X2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICphZGRyLFxuIFx0XHRcdCAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncyk7XG4gZXh0ZXJuIGludCBfX3N5c19jb25uZWN0KGludCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqdXNlcnZhZGRyLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvdmVyaWZpZXIuYyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuaW5kZXggNjFlZjQzMzI1YzZmMy4uNDM1NzYwY2EwNGMzNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuKysrIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5AQCAtNDM2OSw2ICs0MzY5LDkgQEAgQlRGX0lEKHN0cnVjdCwgdGFza19zdHJ1Y3QpXG4gI2lmZGVmIENPTkZJR19DUllQVE9cbiBCVEZfSUQoc3RydWN0LCBicGZfY3J5cHRvX2N0eClcbiAjZW5kaWZcbisjaWZkZWYgQ09ORklHX0lORVRcbitCVEZfSUQoc3RydWN0LCBicGZfa3NvY2spXG4rI2VuZGlmXG4gQlRGX1NFVF9FTkQocmN1X3Byb3RlY3RlZF90eXBlcylcbiBcbiBzdGF0aWMgYm9vbCByY3VfcHJvdGVjdGVkX29iamVjdChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiBidGZfaWQpXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZVxuaW5kZXggYjNmZGNiNGUzNTVmYS4uYzIwZTUyMDM1OGI4ZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL01ha2VmaWxlXG4rKysgYi9uZXQvY29yZS9NYWtlZmlsZVxuQEAgLTQ0LDYgKzQ0LDkgQEAgb2JqLSQoQ09ORklHX0ZBSUxPVkVSKSArPSBmYWlsb3Zlci5vXG4gb2JqLSQoQ09ORklHX05FVF9TT0NLX01TRykgKz0gc2ttc2cub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gc29ja19tYXAub1xuIG9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX3NrX3N0b3JhZ2Uub1xuK2lmZGVmIENPTkZJR19JTkVUXG4rb2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBicGZfa3NvY2sub1xuK2VuZGlmXG4gb2JqLSQoQ09ORklHX09GKVx0Kz0gb2ZfbmV0Lm9cbiBvYmotJChDT05GSUdfTkVUX1RFU1QpICs9IG5ldF90ZXN0Lm9cbiBvYmotJChDT05GSUdfTkVUX0RFVk1FTSkgKz0gZGV2bWVtLm9cbmRpZmYgLS1naXQgYS9uZXQvY29yZS9icGZfa3NvY2suYyBiL25ldC9jb3JlL2JwZl9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZTk5NDNhZWVhZGQzMlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvbmV0L2NvcmUvYnBmX2tzb2NrLmNcbkBAIC0wLDAgKzEsMzI4IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9rc29jay5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW42LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZmNvdW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc29ja2V0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3NvY2suaFx1MDAzZVxuK1xuKy8qKlxuKyAqIHN0cnVjdCBicGZfa3NvY2sgLSByZWZjb3VudGVkIEJQRiBrZXJuZWwgc29ja2V0IGNvbnRleHRcbisgKiBAc29jazpcdFRoZSB1bmRlcmx5aW5nIGtlcm5lbCBzb2NrZXQuXG4rICogQHVzYWdlOlx0UmVmZXJlbmNlIGNvdW50ZXIuXG4rICogQHJ3b3JrOlx0UkNVIHdvcmsgZm9yIGRlZmVycmVkIGNsZWFudXAgKHNvY2tfcmVsZWFzZSBtYXkgc2xlZXApLlxuKyAqL1xuK3N0cnVjdCBicGZfa3NvY2sge1xuK1x0c3RydWN0IHNvY2tldCAqc29jaztcbitcdHJlZmNvdW50X3QgdXNhZ2U7XG4rXHRzdHJ1Y3QgcmN1X3dvcmsgcndvcms7XG4rfTtcbitcbitzdGF0aWMgdm9pZCBrc29ja19yZWxlYXNlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1xuK1x0a3MgPSBjb250YWluZXJfb2YodG9fcmN1X3dvcmsod29yayksIHN0cnVjdCBicGZfa3NvY2ssIHJ3b3JrKTtcbitcdHNvY2tfcmVsZWFzZShrcy1cdTAwM2Vzb2NrKTtcbitcdGtmcmVlKGtzKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCh2b2lkKVxuK3tcbitcdC8qXG4rXHQgKiBUYXNrIHdvcmsgY2FuIHJ1biBmcm9tIGRvX2V4aXQoKSBhZnRlciBleGl0X25zcHJveHlfbmFtZXNwYWNlcygpXG4rXHQgKiBjbGVhcmVkIGN1cnJlbnQtXHUwMDNlbnNwcm94eSwgd2hpbGUgY3VycmVudCBpcyBzdGlsbCBub3QgYSBrdGhyZWFkLlxuK1x0ICovXG4rXHRyZXR1cm4gIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9LVEhSRUFEKSBcdTAwMjZcdTAwMjYgY3VycmVudC1cdTAwM2Vuc3Byb3h5O1xuK31cbitcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX2NyZWF0ZSgpIC0gQ3JlYXRlIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICpcbisgKiBBbGxvY2F0ZXMgYW5kIGNyZWF0ZXMgYSBrZXJuZWwgc29ja2V0LlxuKyAqXG4rICogVGhlIHJldHVybmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCAoc29ja19jcmVhdGUpLCBzbyBpdCBjYW4gb25seSBiZSB1c2VkXG4rICogaW4gc2xlZXBhYmxlIEJQRiBwcm9ncmFtcyAoU1lTQ0FMTCkuXG4rICogSXQgY2Fubm90IGJlIGNhbGxlZCBmcm9tIGEgQlBGIHdvcmtxdWV1ZSBjYWxsYmFjayBiZWNhdXNlIHRoYXQgY2FsbGJhY2tcbisgKiBkb2VzIG5vdCByZXRhaW4gdGhlIGludm9raW5nIHRhc2sncyBuYW1lc3BhY2Ugb3Igc2VjdXJpdHkgY29udGV4dC5cbisgKlxuKyAqIEBvcHRzOlx0UG9pbnRlciB0byBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzIHdpdGggc29ja2V0IHBhcmFtZXRlcnMuXG4rICogQG9wdHNfX3N6Olx0U2l6ZSBvZiB0aGUgb3B0cyBzdHJ1Y3QuXG4rICogQGVycl9fdW5pbml0Olx0SW50ZWdlciB0byBzdG9yZSBlcnJvciBjb2RlIHdoZW4gTlVMTCBpcyByZXR1cm5lZC5cbisgKi9cbitfX2JwZl9rZnVuYyBzdHJ1Y3QgYnBmX2tzb2NrICpcbiticGZfa3NvY2tfY3JlYXRlKGNvbnN0IHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHMgKm9wdHMsIHUzMiBvcHRzX19zeixcbitcdFx0IGludCAqZXJyX191bmluaXQpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzX2NvcHk7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbitcdGludCBlcnI7XG4rXG4rXHQvKlxuK1x0ICogc29ja19jcmVhdGUoKSBkZXJpdmVzIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSwgY3JlZGVudGlhbHMsIGFuZCBjZ3JvdXBcbitcdCAqIGZyb20gY3VycmVudC4gS2VybmVsIHRocmVhZHMsIGluY2x1ZGluZyBCUEYgd29ya3F1ZXVlIGNhbGxiYWNrcywgZG9cbitcdCAqIG5vdCBjYXJyeSB0aGUgY29udGV4dCBvZiB0aGUgdGFzayB0aGF0IGludm9rZWQgdGhlIEJQRiBwcm9ncmFtLlxuK1x0ICovXG4rXHRpZiAoIWJwZl9rc29ja19oYXNfdXNlcl90YXNrX2NvbnRleHQoKSkge1xuK1x0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKCFvcHRzIHx8IG9wdHNfX3N6ICE9IHNpemVvZihzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzKSkge1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHRvcHRzX2NvcHkgPSAoc3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyl7XG4rXHRcdC5mYW1pbHkgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2VmYW1pbHkpLFxuK1x0XHQudHlwZSA9IFJFQURfT05DRShvcHRzLVx1MDAzZXR5cGUpLFxuK1x0XHQucHJvdG9jb2wgPSBSRUFEX09OQ0Uob3B0cy1cdTAwM2Vwcm90b2NvbCksXG4rXHRcdC5yZXNlcnZlZCA9IFJFQURfT05DRShvcHRzLVx1MDAzZXJlc2VydmVkKSxcbitcdH07XG4rXG4rXHRpZiAob3B0c19jb3B5LnJlc2VydmVkKSB7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gZXJyX291dDtcbitcdH1cbitcbitcdGlmIChvcHRzX2NvcHkuZmFtaWx5ICE9IEFGX0lORVQgXHUwMDI2XHUwMDI2IG9wdHNfY29weS5mYW1pbHkgIT0gQUZfSU5FVDYpIHtcbitcdFx0ZXJyID0gLUVBRk5PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS50eXBlICE9IFNPQ0tfREdSQU0pIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0aWYgKG9wdHNfY29weS5wcm90b2NvbCAhPSBJUFBST1RPX1VEUCBcdTAwMjZcdTAwMjYgb3B0c19jb3B5LnByb3RvY29sICE9IDApIHtcbitcdFx0ZXJyID0gLUVQUk9UT05PU1VQUE9SVDtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuK1xuK1x0a3MgPSBremFsbG9jX29iaigqa3MpO1xuK1x0aWYgKCFrcykge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGVycl9vdXQ7XG4rXHR9XG4rXG4rXHQvKlxuK1x0ICogVXNlIHRoZSBub3JtYWwgY3VycmVudC10YXNrIHNvY2tldCBwYXRoIHNvIExTTS9jZ3JvdXAgcG9saWN5LFxuK1x0ICogc29ja2V0IGxhYmVscywgYW5kIHRoZSBhY3RpdmUgbmV0bnMgcmVmZXJlbmNlIG1hdGNoIGEgc29ja2V0KDIpXG4rXHQgKiBjcmVhdGVkIGJ5IHRoZSBCUEYgcHJvZ3JhbSdzIGNhbGxlci5cbitcdCAqL1xuK1x0ZXJyID0gc29ja19jcmVhdGUob3B0c19jb3B5LmZhbWlseSwgb3B0c19jb3B5LnR5cGUsIG9wdHNfY29weS5wcm90b2NvbCxcbitcdFx0XHQgIFx1MDAyNmtzLVx1MDAzZXNvY2spO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZTtcbitcbitcdGtzLVx1MDAzZXNvY2stXHUwMDNlc2stXHUwMDNlc2tfcmN2YnVmID0gU09DS19NSU5fUkNWQlVGO1xuK1x0a3MtXHUwMDNlc29jay1cdTAwM2Vzay1cdTAwM2Vza191c2VybG9ja3MgfD0gU09DS19SQ1ZCVUZfTE9DSztcbitcbitcdHJlZmNvdW50X3NldChcdTAwMjZrcy1cdTAwM2V1c2FnZSwgMSk7XG4rXHRwdXRfdW5hbGlnbmVkKDAsIGVycl9fdW5pbml0KTtcbitcdHJldHVybiBrcztcbitcbitlcnJfZnJlZTpcbitcdGtmcmVlKGtzKTtcbitlcnJfb3V0OlxuK1x0cHV0X3VuYWxpZ25lZChlcnIsIGVycl9fdW5pbml0KTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfY29ubmVjdCgpIC0gQ29ubmVjdCBhIEJQRiBrZXJuZWwgc29ja2V0IHRvIGEgcmVtb3RlIGFkZHJlc3MuXG4rICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC5cbisgKiBAYWRkcjpcdFBvaW50ZXIgdG8gYW4gSVB2NCBvciBJUHY2IHNvY2tldCBhZGRyZXNzLlxuKyAqIEBhZGRyX19zejpcdFNpemUgb2YgdGhlIGFkZHJlc3MgdW5pb24uXG4rICpcbisgKiBDb25uZWN0cyB0aGUgc29ja2V0IHRvIHRoZSBzcGVjaWZpZWQgcmVtb3RlIGFkZHJlc3MgYW5kIHBvcnQuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIG1heSBzbGVlcCB3aGlsZSBjb25uZWN0aW5nIHRoZSBzb2NrZXQsIHNvIGl0IGNhbiBvbmx5IGJlIHVzZWRcbisgKiBpbiBzbGVlcGFibGUgQlBGIHByb2dyYW1zIChTWVNDQUxMKS5cbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX2Nvbm5lY3Qoc3RydWN0IGJwZl9rc29jayAqa3MsXG4rXHRcdFx0XHQgIGNvbnN0IHVuaW9uIGJwZl9rc29ja19hZGRyICphZGRyLFxuK1x0XHRcdFx0ICB1MzIgYWRkcl9fc3opXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7XG4rXHRpbnQgYWRkcmxlbjtcbitcbitcdGlmICghYnBmX2tzb2NrX2hhc191c2VyX3Rhc2tfY29udGV4dCgpKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRpZiAoIWFkZHIgfHwgYWRkcl9fc3ogIT0gc2l6ZW9mKCphZGRyKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKiBLZnVuYyBtZW1vcnkgYXJndW1lbnRzIG1heSBiZSB1bmFsaWduZWQuICovXG4rXHRtZW1jcHkoXHUwMDI2c2EsIGFkZHIsIHNpemVvZigqYWRkcikpO1xuK1xuK1x0c3dpdGNoIChzYS5zc19mYW1pbHkpIHtcbitcdGNhc2UgQUZfSU5FVDpcbitcdFx0YWRkcmxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pO1xuK1x0XHRicmVhaztcbitcdGNhc2UgQUZfSU5FVDY6XG4rXHRcdGFkZHJsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FQUZOT1NVUFBPUlQ7XG4rXHR9XG4rXG4rXHRyZXR1cm4gY29ubmVjdF9zb2NrZXQoa3MtXHUwMDNlc29jaywgXHUwMDI2c2EsIGFkZHJsZW4sIDApO1xuK31cbitcbisvKipcbisgKiBicGZfa3NvY2tfYWNxdWlyZSgpIC0gQWNxdWlyZSBhIHJlZmVyZW5jZSB0byBhIEJQRiBrZXJuZWwgc29ja2V0LlxuKyAqIEBrczpcdFRoZSBCUEYga2VybmVsIHNvY2tldCBjb250ZXh0IHRvIGFjcXVpcmUuIE11c3QgYmUgYVxuKyAqXHR0cnVzdGVkIHBvaW50ZXIgKGUuZy4gUkNVLXByb3RlY3RlZCBrcHRyIGZyb20gYSBtYXApLlxuKyAqXG4rICogVGhlIGFjcXVpcmVkIGNvbnRleHQgbXVzdCBlaXRoZXIgYmUgc3RvcmVkIGluIGEgbWFwIGFzIGEga3B0ciwgb3JcbisgKiBmcmVlZCB3aXRoIGJwZl9rc29ja19yZWxlYXNlKCkuXG4rICovXG4rX19icGZfa2Z1bmMgc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpXG4re1xuK1x0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2a3MtXHUwMDNldXNhZ2UpKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdHJldHVybiBrcztcbit9XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX3JlbGVhc2UoKSAtIFJlbGVhc2UgYSBCUEYga2VybmVsIHNvY2tldC5cbisgKiBAa3M6XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dCB0byByZWxlYXNlLlxuKyAqXG4rICogV2hlbiB0aGUgZmluYWwgcmVmZXJlbmNlIGlzIHJlbGVhc2VkLCB0aGUgc29ja2V0IGlzIGNsZWFuZWQgdXAgdmlhXG4rICogcXVldWVfcmN1X3dvcmsoKSAoc2luY2Ugc29ja19yZWxlYXNlIG1heSBzbGVlcCkuXG4rICovXG4rX19icGZfa2Z1bmMgdm9pZCBicGZfa3NvY2tfcmVsZWFzZShzdHJ1Y3QgYnBmX2tzb2NrICprcylcbit7XG4rXHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmtzLVx1MDAzZXVzYWdlKSkge1xuK1x0XHRJTklUX1JDVV9XT1JLKFx1MDAyNmtzLVx1MDAzZXJ3b3JrLCBrc29ja19yZWxlYXNlX3dvcmtfZm4pO1xuK1x0XHRxdWV1ZV9yY3Vfd29yayhzeXN0ZW1fZGZsX3dxLCBcdTAwMjZrcy1cdTAwM2Vyd29yayk7XG4rXHR9XG4rfVxuK1xuK19fYnBmX2tmdW5jIHZvaWQgYnBmX2tzb2NrX3JlbGVhc2VfZHRvcih2b2lkICprcylcbit7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rfVxuK0NGSV9OT1NFQUwoYnBmX2tzb2NrX3JlbGVhc2VfZHRvcik7XG4rXG4rLyoqXG4rICogYnBmX2tzb2NrX3NlbmQoKSAtIFNlbmQgZGF0YSB0aHJvdWdoIGEgQlBGIGtlcm5lbCBzb2NrZXQuXG4rICogQGtzOlx0XHRUaGUgQlBGIGtlcm5lbCBzb2NrZXQgY29udGV4dC4gTXVzdCBiZSBhbiBhY3F1aXJlZCByZWZlcmVuY2UuXG4rICogQGRhdGE6XHRQb2ludGVyIHRvIHRoZSBkYXRhIHRvIHNlbmQuXG4rICogQGRhdGFfX3N6Olx0U2l6ZSBvZiB0aGUgZGF0YSB0byBzZW5kLlxuKyAqXG4rICogU2VuZHMgZGF0YSBvbiBhIGNvbm5lY3RlZCBzb2NrZXQsIGJlc3QtZWZmb3J0IGFuZCBub25ibG9ja2luZy4gVGhpcyBtYXkgc2xlZXBcbisgKiAoa2VybmVsX3NlbmRtc2cpLCBzbyBpdCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBzbGVlcGFibGUgQlBGIHByb2dyYW1zLlxuKyAqXG4rICogUmV0dXJuOiBOdW1iZXIgb2YgYnl0ZXMgc2VudCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvci5cbisgKi9cbitfX2JwZl9rZnVuYyBpbnQgYnBmX2tzb2NrX3NlbmQoc3RydWN0IGJwZl9rc29jayAqa3MsIGNvbnN0IHZvaWQgKmRhdGEsXG4rXHRcdFx0ICAgICAgIHUzMiBkYXRhX19zeilcbit7XG4rXHRzdHJ1Y3QgbXNnaGRyIG1zZyA9IHtcbitcdFx0Lm1zZ19mbGFncyA9IE1TR19ET05UV0FJVCxcbitcdH07XG4rXHRzdHJ1Y3Qga3ZlYyBpb3YgPSB7XG4rXHRcdC5pb3ZfYmFzZSA9ICh2b2lkICopZGF0YSxcbitcdFx0Lmlvdl9sZW4gPSBkYXRhX19zeixcbitcdH07XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKCFicGZfa3NvY2tfaGFzX3VzZXJfdGFza19jb250ZXh0KCkpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdHJldCA9IGtlcm5lbF9zZW5kbXNnKGtzLVx1MDAzZXNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCBkYXRhX19zeik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa3NvY2tfY3JlYXRlLCBLRl9BQ1FVSVJFIHwgS0ZfUkVUX05VTEwgfCBLRl9TTEVFUEFCTEUpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19jb25uZWN0LCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfaW5pdF9rZnVuY19idGZfaWRzKVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19pbml0X2tmdW5jX3NldCA9IHtcbitcdC5vd25lciA9IFRISVNfTU9EVUxFLFxuK1x0LnNldCA9IFx1MDAyNmtzb2NrX2luaXRfa2Z1bmNfYnRmX2lkcyxcbit9O1xuK1xuK0JURl9LRlVOQ1NfU1RBUlQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tzb2NrX3JlbGVhc2UsIEtGX1JFTEVBU0UpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19hY3F1aXJlLCBLRl9BQ1FVSVJFIHwgS0ZfUkNVIHwgS0ZfUkVUX05VTEwpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rc29ja19zZW5kLCBLRl9TTEVFUEFCTEUpXG4rQlRGX0tGVU5DU19FTkQoa3NvY2tfa2Z1bmNfYnRmX2lkcylcbitcbisjaWZkZWYgQ09ORklHX0JQRl9MU01cbitCVEZfSURfTElTVF9TSU5HTEUoYnBmX2xzbV9zb2NrZXRfc2VuZG1zZ19pZCwgZnVuYywgYnBmX2xzbV9zb2NrZXRfc2VuZG1zZylcbisjZW5kaWZcbitcbitzdGF0aWMgaW50IGJwZl9rc29ja19rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4re1xuK1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLCBrZnVuY19pZCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NZU0NBTEwpXG4rXHRcdHJldHVybiAwO1xuK1xuKyNpZmRlZiBDT05GSUdfQlBGX0xTTVxuK1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSBcdTAwMjZcdTAwMjZcbitcdCAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VhdHRhY2hfYnRmX2lkICE9IGJwZl9sc21fc29ja2V0X3NlbmRtc2dfaWRbMF0pXG4rXHRcdHJldHVybiAwO1xuKyNlbmRpZlxuK1xuK1x0cmV0dXJuIC1FQUNDRVM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBrc29ja19rZnVuY19zZXQgPSB7XG4rXHQub3duZXIgPSBUSElTX01PRFVMRSxcbitcdC5zZXQgPSBcdTAwMjZrc29ja19rZnVuY19idGZfaWRzLFxuK1x0LmZpbHRlciA9IGJwZl9rc29ja19rZnVuY19maWx0ZXIsXG4rfTtcbitcbitCVEZfSURfTElTVChicGZfa3NvY2tfZHRvcl9pZHMpXG4rQlRGX0lEKHN0cnVjdCwgYnBmX2tzb2NrKVxuK0JURl9JRChmdW5jLCBicGZfa3NvY2tfcmVsZWFzZV9kdG9yKVxuK1xuK3N0YXRpYyBpbnQgX19pbml0IGJwZl9rc29ja19rZnVuY19pbml0KHZvaWQpXG4re1xuK1x0aW50IHJldDtcbitcdGNvbnN0IHN0cnVjdCBidGZfaWRfZHRvcl9rZnVuYyBicGZfa3NvY2tfZHRvcnNbXSA9IHtcbitcdFx0e1xuK1x0XHRcdC5idGZfaWQgPSBicGZfa3NvY2tfZHRvcl9pZHNbMF0sXG4rXHRcdFx0LmtmdW5jX2J0Zl9pZCA9IGJwZl9rc29ja19kdG9yX2lkc1sxXSxcbitcdFx0fSxcbitcdH07XG4rXG4rXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1lTQ0FMTCxcbitcdFx0XHRcdFx0XHUwMDI2a3NvY2tfaW5pdF9rZnVuY19zZXQpO1xuK1x0cmV0ID0gcmV0ID86IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TWVNDQUxMLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldCA9IHJldCA/OiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLFxuK1x0XHRcdFx0XHQgICAgICAgXHUwMDI2a3NvY2tfa2Z1bmNfc2V0KTtcbitcdHJldHVybiByZXQgPzogcmVnaXN0ZXJfYnRmX2lkX2R0b3Jfa2Z1bmNzKGJwZl9rc29ja19kdG9ycyxcbitcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUoYnBmX2tzb2NrX2R0b3JzKSxcbitcdFx0XHRcdFx0XHQgIFRISVNfTU9EVUxFKTtcbit9XG4rXG4rbGF0ZV9pbml0Y2FsbChicGZfa3NvY2tfa2Z1bmNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvbmV0L3NvY2tldC5jIGIvbmV0L3NvY2tldC5jXG5pbmRleCA2M2M2OWEwZmE3NGUxLi41YjAyZTYyMTdjNjgwIDEwMDY0NFxuLS0tIGEvbmV0L3NvY2tldC5jXG4rKysgYi9uZXQvc29ja2V0LmNcbkBAIC0yMTAzLDYgKzIxMDMsMjAgQEAgU1lTQ0FMTF9ERUZJTkUzKGFjY2VwdCwgaW50LCBmZCwgc3RydWN0IHNvY2thZGRyIF9fdXNlciAqLCB1cGVlcl9zb2NrYWRkcixcbiBcdHJldHVybiBfX3N5c19hY2NlcHQ0KGZkLCB1cGVlcl9zb2NrYWRkciwgdXBlZXJfYWRkcmxlbiwgMCk7XG4gfVxuIFxuK2ludCBjb25uZWN0X3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbitcdFx0ICAgaW50IGFkZHJsZW4sIGludCBmbGFncylcbit7XG4rXHRpbnQgZXJyO1xuK1xuK1x0ZXJyID0gc2VjdXJpdHlfc29ja2V0X2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJlc3MsXG4rXHRcdFx0XHQgICAgICBhZGRybGVuKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRyZXR1cm4gUkVBRF9PTkNFKHNvY2stXHUwMDNlb3BzKS1cdTAwM2Vjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHJfdW5zaXplZCAqKWFkZHJlc3MsXG4rXHRcdFx0XHRcdCAgICAgYWRkcmxlbiwgZmxhZ3MpO1xuK31cbitcbiAvKlxuICAqXHRBdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSBzb2NrZXQgd2l0aCB0aGUgc2VydmVyIGFkZHJlc3MuICBUaGUgYWRkcmVzc1xuICAqXHRpcyBpbiB1c2VyIHNwYWNlIHNvIHdlIHZlcmlmeSBpdCBpcyBPSyBhbmQgbW92ZSBpdCB0byBrZXJuZWwgc3BhY2UuXG5AQCAtMjExOSwyMyArMjEzMywxMyBAQCBpbnQgX19zeXNfY29ubmVjdF9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqYWRkcmVzcyxcbiBcdFx0ICAgICAgIGludCBhZGRybGVuLCBpbnQgZmlsZV9mbGFncylcbiB7XG4gXHRzdHJ1Y3Qgc29ja2V0ICpzb2NrO1xuLVx0aW50IGVycjtcbiBcbiBcdHNvY2sgPSBzb2NrX2Zyb21fZmlsZShmaWxlKTtcbi1cdGlmICghc29jaykge1xuLVx0XHRlcnIgPSAtRU5PVFNPQ0s7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuLVx0ZXJyID1cbi1cdCAgICBzZWN1cml0eV9zb2NrZXRfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkcmVzcywgYWRkcmxlbik7XG4tXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICghc29jaylcbitcdFx0cmV0dXJuIC1FTk9UU09DSztcbiBcbi1cdGVyciA9IFJFQURfT05DRShzb2NrLVx1MDAzZW9wcyktXHUwMDNlY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKilhZGRyZXNzLFxuLVx0XHRcdFx0XHQgICAgYWRkcmxlbiwgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbi1vdXQ6XG4tXHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIGNvbm5lY3Rfc29ja2V0KHNvY2ssIGFkZHJlc3MsIGFkZHJsZW4sXG4rXHRcdFx0ICAgICAgc29jay1cdTAwM2VmaWxlLVx1MDAzZWZfZmxhZ3MgfCBmaWxlX2ZsYWdzKTtcbiB9XG4gXG4gaW50IF9fc3lzX2Nvbm5lY3QoaW50IGZkLCBzdHJ1Y3Qgc29ja2FkZHIgX191c2VyICp1c2VydmFkZHIsIGludCBhZGRybGVuKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29jay5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZGQ2YjE2NzYyM2Q5NFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2suY1xuQEAgLTAsMCArMSwxMzAgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NhcnBhL2luZXQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcIm5ldHdvcmtfaGVscGVycy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2xzbS5za2VsLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfbHNtX3ZlcmlmaWVyLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBOU19URVNUIFwia3NvY2tfbHNtX25zXCJcbisjZGVmaW5lIFJFQ1ZfUE9SVCA3Nzc3XG4rI2RlZmluZSBSRUNWX1RJTUVPVVRfU0VDIDVcbitcbitzdHJ1Y3Qga3NvY2tfdGVzdF9lbnYge1xuK1x0c3RydWN0IG5zdG9rZW4gKm5zdG9rZW47XG4rXHRpbnQgcmZkO1xuK307XG4rXG4rc3RhdGljIGJvb2wga3NvY2tfdGVzdF9lbnZfc2V0dXAoc3RydWN0IGtzb2NrX3Rlc3RfZW52ICplbnYpXG4re1xuK1x0c3RydWN0IHNvY2thZGRyX2luIGFkZHIgPSB7XG4rXHRcdC5zaW5fZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyksXG4rXHRcdC5zaW5fcG9ydCA9IGh0b25zKFJFQ1ZfUE9SVCksXG4rXHR9O1xuK1x0c3RydWN0IHRpbWV2YWwgdHYgPSB7IC50dl9zZWMgPSBSRUNWX1RJTUVPVVRfU0VDIH07XG4rXHRpbnQgZXJyO1xuK1xuK1x0bWVtc2V0KGVudiwgMCwgc2l6ZW9mKCplbnYpKTtcbitcdGVudi1cdTAwM2VyZmQgPSAtMTtcbitcbitcdGlmICghQVNTRVJUX09LKG1ha2VfbmV0bnMoTlNfVEVTVCksIFwibWFrZV9uZXRuc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZW52LVx1MDAzZW5zdG9rZW4gPSBvcGVuX25ldG5zKE5TX1RFU1QpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKGVudi1cdTAwM2Vuc3Rva2VuLCBcIm9wZW5fbmV0bnNcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVudi1cdTAwM2VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApO1xuK1x0aWYgKCFBU1NFUlRfT0tfRkQoZW52LVx1MDAzZXJmZCwgXCJyZWNlaXZlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdGVyciA9IGJpbmQoZW52LVx1MDAzZXJmZCwgKHN0cnVjdCBzb2NrYWRkciAqKVx1MDAyNmFkZHIsIHNpemVvZihhZGRyKSk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwiYmluZCByZWNlaXZlclwiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0ZXJyID0gc2V0c29ja29wdChlbnYtXHUwMDNlcmZkLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgXHUwMDI2dHYsIHNpemVvZih0dikpO1xuK1x0aWYgKCFBU1NFUlRfT0soZXJyLCBcInNldCByY3Z0aW1lb1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rXG4rZmFpbDpcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbSh2b2lkKVxuK3tcbitcdExJQkJQRl9PUFRTKGJwZl90ZXN0X3J1bl9vcHRzLCBvcHRzKTtcbitcdHN0cnVjdCBrc29ja190ZXN0X2VudiBlbnY7XG4rXHRzdHJ1Y3Qgc29ja2FkZHJfaW4gdHJpZ2dlcl9hZGRyID0ge1xuK1x0XHQuc2luX2ZhbWlseSA9IEFGX0lORVQsXG4rXHRcdC5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spLFxuK1x0fTtcbitcdHN0cnVjdCBrc29ja19sc20gKnNrZWw7XG4rXHRjaGFyIHJlY3ZfZGF0YVtzaXplb2Yoc2tlbC1cdTAwM2VkYXRhLVx1MDAzZXNlbmRfZGF0YSldID0ge307XG4rXHRzc2l6ZV90IG47XG4rXHRpbnQgdGZkID0gLTE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0c2tlbCA9IGtzb2NrX2xzbV9fb3Blbl9hbmRfbG9hZCgpO1xuK1x0aWYgKCFBU1NFUlRfT0tfUFRSKHNrZWwsIFwic2tlbCBvcGVuX2FuZF9sb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRpZiAoIWtzb2NrX3Rlc3RfZW52X3NldHVwKFx1MDAyNmVudikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMTogUnVuIHRoZSBzZXR1cCBTWVNDQUxMIHByb2cgdG8gY3JlYXRlIHRoZSBrc29jayAqL1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlaXB2NF9yZW1vdGUgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spO1xuK1x0c2tlbC1cdTAwM2Vic3MtXHUwMDNlcmVtb3RlX3BvcnQgPSBSRUNWX1BPUlQ7XG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3NldHVwKSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwia3NvY2tfc2V0dXAgcnVuXCIpKVxuK1x0XHRnb3RvIGZhaWw7XG4rXHRpZiAoIUFTU0VSVF9PSyhvcHRzLnJldHZhbCwgXCJrc29ja19zZXR1cCByZXR2YWxcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMjogQXR0YWNoIExTTSBwcm9nIGFuZCB0cmlnZ2VyIHNvY2tldF9iaW5kIGZyb20gdXNlcnNwYWNlICovXG4rXHRza2VsLVx1MDAzZWxpbmtzLmtzb2NrX3NvY2tldF9iaW5kID1cbitcdFx0YnBmX3Byb2dyYW1fX2F0dGFjaF9sc20oc2tlbC1cdTAwM2Vwcm9ncy5rc29ja19zb2NrZXRfYmluZCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbC1cdTAwM2VsaW5rcy5rc29ja19zb2NrZXRfYmluZCxcbitcdFx0XHQgICBcImF0dGFjaCBzb2NrZXRfYmluZCBsc21cIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHRmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7XG4rXHRpZiAoIUFTU0VSVF9PS19GRCh0ZmQsIFwidHJpZ2dlciBzb2NrZXRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdHNrZWwtXHUwMDNlYnNzLVx1MDAzZXRhcmdldF9waWQgPSBnZXRwaWQoKTtcbitcdGVyciA9IGJpbmQodGZkLCAoc3RydWN0IHNvY2thZGRyICopXHUwMDI2dHJpZ2dlcl9hZGRyLCBzaXplb2YodHJpZ2dlcl9hZGRyKSk7XG4rXHRza2VsLVx1MDAzZWJzcy1cdTAwM2V0YXJnZXRfcGlkID0gMDtcbitcdGlmICghQVNTRVJUX09LKGVyciwgXCJ0cmlnZ2VyIGJpbmRcIikpXG4rXHRcdGdvdG8gZmFpbDtcbitcbitcdC8qIFN0ZXAgMzogVmVyaWZ5IHRoZSBMU00gaG9vayBzZW50IHRoZSBub3RpZmljYXRpb24gKi9cbitcdGlmICghQVNTRVJUX0VRKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX3JldCwgc2l6ZW9mKHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEpLFxuK1x0XHQgICAgICAgXCJMU00gc2VuZCBieXRlc1wiKSlcbitcdFx0Z290byBmYWlsO1xuK1xuK1x0biA9IHJlY3Zmcm9tKGVudi5yZmQsIHJlY3ZfZGF0YSwgc2l6ZW9mKHJlY3ZfZGF0YSksIDAsIE5VTEwsIE5VTEwpO1xuK1x0aWYgKEFTU0VSVF9FUShuLCBzaXplb2YocmVjdl9kYXRhKSwgXCJyZWN2ZnJvbSBsZW5cIikpXG4rXHRcdEFTU0VSVF9NRU1FUShyZWN2X2RhdGEsIHNrZWwtXHUwMDNlZGF0YS1cdTAwM2VzZW5kX2RhdGEsIHNpemVvZihyZWN2X2RhdGEpLFxuK1x0XHRcdCAgICAgXCJwYXlsb2FkIG1hdGNoXCIpO1xuK1xuK2ZhaWw6XG4rXHRpZiAodGZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UodGZkKTtcbitcdGlmIChlbnYucmZkIFx1MDAzZT0gMClcbitcdFx0Y2xvc2UoZW52LnJmZCk7XG4rXHRpZiAoZW52Lm5zdG9rZW4pXG4rXHRcdGNsb3NlX25ldG5zKGVudi5uc3Rva2VuKTtcbitcdHJlbW92ZV9uZXRucyhOU19URVNUKTtcbitcdGtzb2NrX2xzbV9fZGVzdHJveShza2VsKTtcbit9XG4rXG4rdm9pZCB0ZXN0X2tzb2NrX2xzbV92ZXJpZmllcih2b2lkKVxuK3tcbitcdFJVTl9URVNUUyhrc29ja19sc21fdmVyaWZpZXIpO1xuK31cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMva3NvY2tfd3EuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmQ2ZGMyMGI4Zjk1YmJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2tzb2NrX3dxLmNcbkBAIC0wLDAgKzEsNDUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBJc292YWxlbnQgKi9cbitcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwidGVzdF9wcm9ncy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX3dxLnNrZWwuaFwiXG4rXG4rI2RlZmluZSBDQUxMQkFDS19XQUlUX1JFVFJJRVMgMTAwMFxuKyNkZWZpbmUgQ0FMTEJBQ0tfV0FJVF9VUyAxMDAwXG4rXG4rdm9pZCB0ZXN0X2tzb2NrX3dxKHZvaWQpXG4re1xuK1x0TElCQlBGX09QVFMoYnBmX3Rlc3RfcnVuX29wdHMsIG9wdHMpO1xuK1x0c3RydWN0IGtzb2NrX3dxICpza2VsO1xuK1x0dTMyIGNhbGxiYWNrX2RvbmU7XG4rXHRpbnQgZXJyLCBpO1xuK1xuK1x0c2tlbCA9IGtzb2NrX3dxX19vcGVuX2FuZF9sb2FkKCk7XG4rXHRpZiAoIUFTU0VSVF9PS19QVFIoc2tlbCwgXCJrc29ja193cSBvcGVuIGFuZCBsb2FkXCIpKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRlcnIgPSBicGZfcHJvZ190ZXN0X3J1bl9vcHRzKGJwZl9wcm9ncmFtX19mZChza2VsLVx1MDAzZXByb2dzLmtzb2NrX3dxX3N0YXJ0KSxcbitcdFx0XHRcdCAgICAgXHUwMDI2b3B0cyk7XG4rXHRpZiAoIUFTU0VSVF9PSyhlcnIsIFwicnVuIGtzb2NrX3dxX3N0YXJ0XCIpKVxuK1x0XHRnb3RvIG91dDtcbitcdGlmICghQVNTRVJUX09LKG9wdHMucmV0dmFsLCBcImtzb2NrX3dxX3N0YXJ0IHJldHZhbFwiKSlcbitcdFx0Z290byBvdXQ7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBDQUxMQkFDS19XQUlUX1JFVFJJRVM7IGkrKykge1xuK1x0XHRpZiAoX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsIF9fQVRPTUlDX0FDUVVJUkUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoQ0FMTEJBQ0tfV0FJVF9VUyk7XG4rXHR9XG4rXHRjYWxsYmFja19kb25lID0gX19hdG9taWNfbG9hZF9uKFx1MDAyNnNrZWwtXHUwMDNlYnNzLVx1MDAzZWNhbGxiYWNrX2RvbmUsXG4rXHRcdFx0XHRcdF9fQVRPTUlDX0FDUVVJUkUpO1xuK1x0aWYgKCFBU1NFUlRfRVEoY2FsbGJhY2tfZG9uZSwgMSwgXCJ3b3JrcXVldWUgY2FsbGJhY2sgY29tcGxldGVkXCIpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdEFTU0VSVF9FUShza2VsLVx1MDAzZWJzcy1cdTAwM2VjcmVhdGVfZXJyLCAtRU9QTk9UU1VQUCxcbitcdFx0ICBcIndvcmtxdWV1ZSBjcmVhdGUgcmVqZWN0ZWRcIik7XG4rXG4rb3V0OlxuK1x0a3NvY2tfd3FfX2Rlc3Ryb3koc2tlbCk7XG4rfVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjAxZWRhZWI5ZmRkNGFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19jb21tb24uaFxuQEAgLTAsMCArMSw3OCBAQFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpZm5kZWYgX0tTT0NLX0NPTU1PTl9IXG4rI2RlZmluZSBfS1NPQ0tfQ09NTU9OX0hcbitcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuK1xuKyNkZWZpbmUgU09DS19ER1JBTVx0MlxuKyNkZWZpbmUgSVBQUk9UT19VRFBcdDE3XG4rXG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2NyZWF0ZShjb25zdCBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzICpvcHRzLFxuK1x0XHRcdFx0ICAgdTMyIG9wdHNfX3N6LCBpbnQgKmVycl9fdW5pbml0KSBfX2tzeW07XG4raW50IGJwZl9rc29ja19jb25uZWN0KHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB1bmlvbiBicGZfa3NvY2tfYWRkciAqYWRkcixcbitcdFx0ICAgICAgdTMyIGFkZHJfX3N6KSBfX2tzeW07XG4rc3RydWN0IGJwZl9rc29jayAqYnBmX2tzb2NrX2FjcXVpcmUoc3RydWN0IGJwZl9rc29jayAqa3MpIF9fa3N5bTtcbit2b2lkIGJwZl9rc29ja19yZWxlYXNlKHN0cnVjdCBicGZfa3NvY2sgKmtzKSBfX2tzeW07XG4raW50IGJwZl9rc29ja19zZW5kKHN0cnVjdCBicGZfa3NvY2sgKmtzLCBjb25zdCB2b2lkICpkYXRhLCB1MzIgZGF0YV9fc3opIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF9sb2NrKHZvaWQpIF9fa3N5bTtcbit2b2lkIGJwZl9yY3VfcmVhZF91bmxvY2sodm9pZCkgX19rc3ltO1xuK1xuK3N0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrIF9fa3B0ciAqIGN0eDtcbit9O1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSUkFZKTtcbitcdF9fdHlwZShrZXksIGludCk7XG4rXHRfX3R5cGUodmFsdWUsIHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK30gX19rc29ja19jdHhfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICprc29ja19jdHhfdmFsdWVfbG9va3VwKHZvaWQpXG4re1xuK1x0dTMyIGtleSA9IDA7XG4rXG4rXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShcdTAwMjZfX2tzb2NrX2N0eF9tYXAsIFx1MDAyNmtleSk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9rc29jayAqa3NvY2tfY3R4X2dldCh2b2lkKVxuK3tcbitcdHN0cnVjdCBfX2tzb2NrX2N0eF92YWx1ZSAqdjtcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzID0gTlVMTCwgKnRtcDtcbitcbitcdHYgPSBrc29ja19jdHhfdmFsdWVfbG9va3VwKCk7XG4rXHRpZiAoIXYpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuK1x0YnBmX3JjdV9yZWFkX2xvY2soKTtcbitcdHRtcCA9IHYtXHUwMDNlY3R4O1xuK1x0aWYgKHRtcClcbitcdFx0a3MgPSBicGZfa3NvY2tfYWNxdWlyZSh0bXApO1xuK1x0YnBmX3JjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0cmV0dXJuIGtzO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCBrc29ja19jdHhfaW5zZXJ0KHN0cnVjdCBicGZfa3NvY2sgKmN0eClcbit7XG4rXHRzdHJ1Y3QgX19rc29ja19jdHhfdmFsdWUgKnY7XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICpvbGQ7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KSB7XG4rXHRcdGJwZl9rc29ja19yZWxlYXNlKGN0eCk7XG4rXHRcdHJldHVybiAtRU5PRU5UO1xuK1x0fVxuK1xuK1x0b2xkID0gYnBmX2twdHJfeGNoZyhcdTAwMjZ2LVx1MDAzZWN0eCwgY3R4KTtcbitcdGlmIChvbGQpIHtcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uob2xkKTtcbitcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmIC8qIF9LU09DS19DT01NT05fSCAqL1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk4MDg0NTEwOThlZmJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc20uY1xuQEAgLTAsMCArMSw3MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9lbmRpYW4uaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX3RyYWNpbmdfbmV0LmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK2NoYXIgc2VuZF9kYXRhWzMyXSA9IFwiaGVsbG8gZnJvbSBicGYga3NvY2tcIjtcbitcbitfX2JlMzIgaXB2NF9yZW1vdGU7XG4rX191MTYgcmVtb3RlX3BvcnQ7XG4raW50IHRhcmdldF9waWQ7XG4raW50IHNlbmRfcmV0ID0gLTE7XG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK2ludCBrc29ja19zZXR1cCh2b2lkICpjdHgpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBjcmVhdGVfb3B0cyA9IHt9O1xuK1x0dW5pb24gYnBmX2tzb2NrX2FkZHIgYWRkciA9IHt9O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdGNyZWF0ZV9vcHRzLmZhbWlseSA9IEFGX0lORVQ7XG4rXHRjcmVhdGVfb3B0cy50eXBlID0gU09DS19ER1JBTTtcbitcdGNyZWF0ZV9vcHRzLnByb3RvY29sID0gSVBQUk9UT19VRFA7XG4rXG4rXHRrcyA9IGJwZl9rc29ja19jcmVhdGUoXHUwMDI2Y3JlYXRlX29wdHMsIHNpemVvZihjcmVhdGVfb3B0cyksIFx1MDAyNmVycik7XG4rXHRpZiAoIWtzKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0YWRkci5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7XG4rXHRhZGRyLnNpbi5zaW5fcG9ydCA9IGJwZl9odG9ucyhyZW1vdGVfcG9ydCk7XG4rXHRhZGRyLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBpcHY0X3JlbW90ZTtcbitcbitcdGVyciA9IGJwZl9rc29ja19jb25uZWN0KGtzLCBcdTAwMjZhZGRyLCBzaXplb2YoYWRkcikpO1xuK1x0aWYgKGVycikge1xuK1x0XHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXHRcdHJldHVybiBlcnI7XG4rXHR9XG4rXG4rXHRlcnIgPSBrc29ja19jdHhfaW5zZXJ0KGtzKTtcbitcdGlmIChlcnIgXHUwMDI2XHUwMDI2IGVyciAhPSAtRUVYSVNUKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcImxzbS5zL3NvY2tldF9iaW5kXCIpXG4raW50IEJQRl9QUk9HKGtzb2NrX3NvY2tldF9iaW5kLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJlc3MsXG4rXHQgICAgIGludCBhZGRybGVuLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBicGZfa3NvY2sgKmtzO1xuK1x0dTMyIHBpZCA9IGJwZl9nZXRfY3VycmVudF9waWRfdGdpZCgpIFx1MDAzZVx1MDAzZSAzMjtcbitcbitcdGlmIChyZXQgfHwgcGlkICE9IHRhcmdldF9waWQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRrcyA9IGtzb2NrX2N0eF9nZXQoKTtcbitcdGlmICgha3MpIHtcbitcdFx0c2VuZF9yZXQgPSAtRU5PRU5UO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0c2VuZF9yZXQgPSBicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkMmNjZmRiNTgwMjBcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja19sc21fdmVyaWZpZXIuY1xuQEAgLTAsMCArMSwzNSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9icGZfdHJhY2luZy5oXHUwMDNlXG4rI2luY2x1ZGUgXCJicGZfbWlzYy5oXCJcbisjaW5jbHVkZSBcImtzb2NrX2NvbW1vbi5oXCJcbitcbitjaGFyIHNlbmRfZGF0YVsxMV0gPSBcImR1bW15IGRhdGFcIjtcbitcbitTRUMoXCJsc20ucy9zb2NrZXRfc2VuZG1zZ1wiKVxuK19fZGVzY3JpcHRpb24oXCJicGZfa3NvY2tfc2VuZCBpcyByZWplY3RlZCBmcm9tIHNvY2tldF9zZW5kbXNnIExTTSBob29rXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiY2FsbGluZyBrZXJuZWwgZnVuY3Rpb24gYnBmX2tzb2NrX3NlbmQgaXMgbm90IGFsbG93ZWRcIilcbitpbnQgQlBGX1BST0coa3NvY2tfc29ja2V0X3NlbmRtc2csIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZyxcbitcdCAgICAgaW50IHNpemUsIGludCByZXQpXG4re1xuK1x0c3RydWN0IF9fa3NvY2tfY3R4X3ZhbHVlICp2O1xuK1x0c3RydWN0IGJwZl9rc29jayAqa3M7XG4rXG4rXHR2ID0ga3NvY2tfY3R4X3ZhbHVlX2xvb2t1cCgpO1xuK1x0aWYgKCF2KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0a3MgPSBicGZfa3B0cl94Y2hnKFx1MDAyNnYtXHUwMDNlY3R4LCBOVUxMKTtcbitcdGlmICgha3MpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRicGZfa3NvY2tfc2VuZChrcywgc2VuZF9kYXRhLCBzaXplb2Yoc2VuZF9kYXRhKSk7XG4rXHRicGZfa3NvY2tfcmVsZWFzZShrcyk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9rc29ja193cS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2tzb2NrX3dxLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi4xNmExODczZDEzMmVkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3Mva3NvY2tfd3EuY1xuQEAgLTAsMCArMSw2MiBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4rLyogQ29weXJpZ2h0IChjKSAyMDI2IElzb3ZhbGVudCAqL1xuK1xuKyNpbmNsdWRlIFwidm1saW51eC5oXCJcbisjaW5jbHVkZSBcdTAwM2NicGYvYnBmX2hlbHBlcnMuaFx1MDAzZVxuKyNpbmNsdWRlIFwiYnBmX2V4cGVyaW1lbnRhbC5oXCJcbisjaW5jbHVkZSBcImJwZl90cmFjaW5nX25ldC5oXCJcbisjaW5jbHVkZSBcImVycm5vLmhcIlxuKyNpbmNsdWRlIFwia3NvY2tfY29tbW9uLmhcIlxuK1xuK3N0cnVjdCBrc29ja193cV92YWx1ZSB7XG4rXHRzdHJ1Y3QgYnBmX3dxIHdvcms7XG4rfTtcbitcbitzdHJ1Y3Qge1xuK1x0X191aW50KHR5cGUsIEJQRl9NQVBfVFlQRV9BUlJBWSk7XG4rXHRfX3VpbnQobWF4X2VudHJpZXMsIDEpO1xuK1x0X190eXBlKGtleSwgdTMyKTtcbitcdF9fdHlwZSh2YWx1ZSwgc3RydWN0IGtzb2NrX3dxX3ZhbHVlKTtcbit9IHdvcmtfbWFwIFNFQyhcIi5tYXBzXCIpO1xuK1xuK2ludCBjcmVhdGVfZXJyO1xuK3UzMiBjYWxsYmFja19kb25lO1xuK1xuK3N0YXRpYyBpbnQga3NvY2tfd3FfY2FsbGJhY2sodm9pZCAqbWFwLCBpbnQgKmtleSwgdm9pZCAqdmFsdWUpXG4re1xuK1x0c3RydWN0IGJwZl9rc29ja19jcmVhdGVfb3B0cyBvcHRzID0ge1xuK1x0XHQuZmFtaWx5ID0gQUZfSU5FVCxcbitcdFx0LnR5cGUgPSBTT0NLX0RHUkFNLFxuK1x0XHQucHJvdG9jb2wgPSBJUFBST1RPX1VEUCxcbitcdH07XG4rXHRzdHJ1Y3QgYnBmX2tzb2NrICprcztcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0a3MgPSBicGZfa3NvY2tfY3JlYXRlKFx1MDAyNm9wdHMsIHNpemVvZihvcHRzKSwgXHUwMDI2ZXJyKTtcbitcdGlmIChrcylcbitcdFx0YnBmX2tzb2NrX3JlbGVhc2Uoa3MpO1xuK1x0Y3JlYXRlX2VyciA9IGVycjtcbitcdF9fc3luY19mZXRjaF9hbmRfYWRkKFx1MDAyNmNhbGxiYWNrX2RvbmUsIDEpO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitpbnQga3NvY2tfd3Ffc3RhcnQodm9pZCAqY3R4KVxuK3tcbitcdHN0cnVjdCBrc29ja193cV92YWx1ZSAqdmFsdWU7XG4rXHR1MzIga2V5ID0gMDtcbitcdGludCBlcnI7XG4rXG4rXHR2YWx1ZSA9IGJwZl9tYXBfbG9va3VwX2VsZW0oXHUwMDI2d29ya19tYXAsIFx1MDAyNmtleSk7XG4rXHRpZiAoIXZhbHVlKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdGVyciA9IGJwZl93cV9pbml0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIFx1MDAyNndvcmtfbWFwLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRlcnIgPSBicGZfd3Ffc2V0X2NhbGxiYWNrKFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIGtzb2NrX3dxX2NhbGxiYWNrLCAwKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXHRyZXR1cm4gYnBmX3dxX3N0YXJ0KFx1MDAyNnZhbHVlLVx1MDAzZXdvcmssIDApO1xuK31cbitcbitjaGFyIF9fbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTI6MTg6MzEuMTIwOTUxODk5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyODg4MDg1OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBKdXN0aWZpY2F0aW9uOiBicGZfa3NvY2sgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgbmV3IGBicGZfa3NvY2tgIGZlYXR1cmUgdGhhdCBpbnRyb2R1Y2VzIHNldmVyYWwga2VybmVsIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXM6IERvZXMgdGhpcyB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgb3IgaXMgaXQgY292ZXJlZCBieSBleGlzdGluZyBCUEYgYW5kIG5ldHdvcmsgZnV6emluZz9cblxuVGhlIHBhdGNoIGludHJvZHVjZXMga2Z1bmNzIGBicGZfa3NvY2tfY3JlYXRlYCwgYGJwZl9rc29ja19jb25uZWN0YCwgYGJwZl9rc29ja19zZW5kYCwgd2hpY2ggYWxsIHRha2UgYXJndW1lbnRzIGZyb20gQlBGIHByb2dyYW1zLiBUaGUgY3JpdGljYWwgcXVlc3Rpb24gaGVyZSBpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgcG90ZW50aWFsIGtlcm5lbCBpbmZvcm1hdGlvbiBsZWFrcy4gIFRoZSBjb3JlIGNvbmNlcm4gcmV2b2x2ZXMgYXJvdW5kIHdoZXRoZXIgdW5pbml0aWFsaXplZCBkYXRhLCBzdXBwbGllZCBieSBhIEJQRiBwcm9ncmFtLCBjb3VsZCBiZSByZWFkIGJ5IGtlcm5lbCBmdW5jdGlvbnMgb3Igc2VudCB0byBhIG5ldHdvcmsgc29ja2V0LlxuXG5UaGUgdmVyaWZpZXIgaXMgc3VwcG9zZWQgdG8gcHJldmVudCB0aGlzLiBJdCBjaGVja3MgdGhhdCBtZW1vcnkgcGFzc2VkIHRvIGtmdW5jcyBpcyBpbml0aWFsaXplZC4gSG93ZXZlciwgdGhlIGluaXRpYWwgdGhvdWdodCBpcywgZG9lcyB0aGUgdmVyaWZpZXIgX3JlYWxseV8gY2F0Y2ggYWxsIGNhc2VzLCBlc3BlY2lhbGx5IHdpdGggbmV3IGNvZGU/ICBXZSBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBlYWNoIGZ1bmN0aW9uIGFuZCB0aGUgZGF0YSBpdCByZWNlaXZlcy5cblxuYGJwZl9rc29ja19zZW5kYCBpcyB0aGUgbW9zdCBvYnZpb3VzIGNhbmRpZGF0ZSBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY29uY2VybnM6IGl0IHRha2VzIGBjb25zdCB2b2lkICpkYXRhYCBhbmQgYHUzMiBkYXRhX19zemAuICBJZiBgZGF0YWAgaXMgdW5pbml0aWFsaXplZCwgdGhlIGtlcm5lbCBjb3VsZCBwb3RlbnRpYWxseSBsZWFrIHRoYXQgZGF0YS4gSG93ZXZlciwgdGhlIHZlcmlmaWVyICpzaG91bGQqIGJlIGNoZWNraW5nIGBkYXRhYCBpcyBpbml0aWFsaXplZCB1cCB0byBgZGF0YV9fc3pgLiBLTVNBTiB3aWxsIGRldGVjdCBpZiBga2VybmVsX3NlbmRtc2dgIHJlY2VpdmVzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBCdXQgYSBidWcgaW4gdGhlIHZlcmlmaWVyIGNvdWxkIGFsbG93IHRoaXMsIGJ1dCB0aGlzIHBhdGNoIGRvZXNuJ3QgY2hhbmdlIHRoZSB2ZXJpZmllci5cblxuYGJwZl9rc29ja19jcmVhdGVgIHRha2VzIGEgYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLiBUaGUgY29kZSBjb3BpZXMgdGhlIGZpZWxkcyBvbmUgYnkgb25lIHVzaW5nIGBSRUFEX09OQ0VgLiBObyBpc3N1ZSBoZXJlLCB0aGUgdmVyaWZpZXIgd2lsbCB0YWtlIGNhcmUgb2YgaXQuXG5cbmBicGZfa3NvY2tfY29ubmVjdGAgdGFrZXMgYHN0cnVjdCBicGZfa3NvY2tgIGFuZCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgLiAgYHVuaW9uIGJwZl9rc29ja19hZGRyYCB3b3JyaWVzIG1lLCBiZWNhdXNlIGl0IGhhcyBwYWRkaW5nLiBgbWVtY3B5YCBjb3BpZXMgdGhlIHdob2xlIHVuaW9uLCBidXQgaWYgb25seSBwYXJ0IGlzIGluaXRpYWxpemVkLCBLTVNBTiBjb3VsZCBmbGFnIHRoaXMgYXMgYW4gaXNzdWUuIEhvd2V2ZXIsIHRoZSB2ZXJpZmllciByZXF1aXJlcyB0aGF0IHRoZSBlbnRpcmUgYGFkZHJfX3N6YCBieXRlcyAoMjggYnl0ZXMgaW4gdGhpcyBjYXNlKSBwYXNzZWQgdG8gYGJwZl9rc29ja19jb25uZWN0YCBhcmUgaW5pdGlhbGl6ZWQsIHNvIGBtZW1jcHlgIHNob3VsZCBiZSBmaW5lLiAgSWYgdGhlIEJQRiBwcm9ncmFtIHByb3ZpZGVzIGFuIHVuaW5pdGlhbGl6ZWQgdW5pb24sIHRoZSB2ZXJpZmllciAqc2hvdWxkKiByZWplY3QgaXQuIElmIG5vdCwgS01TQU4gd2lsbCB0cmlnZ2VyIGFuZCBpdCdzIGEgYnVnIHRoYXQgbmVlZHMgZml4aW5nLlxuXG5UaGUgdmVyaWZpZXIgcGxheXMgdGhlIGtleSByb2xlOiBpdOKAmXMgcmVzcG9uc2libGUgZm9yIHRyYWNraW5nIGluaXRpYWxpemF0aW9uIHN0YXR1cyBvZiBzdGFjayBhbmQgbWFwIG1lbW9yeSB1c2VkIGJ5IEJQRiBwcm9ncmFtcy4gQlBGIHByb2dyYW1zIGFyZSBub3QgS01TQU4gaW5zdHJ1bWVudGVkLCBiZWNhdXNlIHRoZXkgYXJlIEpJVHRlZC4gVGhlIHZlcmlmaWVyIHRyYWNrcyBpbml0aWFsaXphdGlvbiwgYW5kIHRoZW4gdGhlIEJQRiBKSVQsIG9yIHRoZSB2ZXJpZmllciBpdHNlbGYsIGluamVjdHMgdW5wb2lzb25pbmcgY2FsbHMsIGZvciBleGFtcGxlIGZvciBzdGFjayBvciBtYXAgbWVtb3J5LlxuXG5JbiB0ZXJtcyBvZiBgY29ubmVjdF9zb2NrZXRgLCB0aGF0J3MganVzdCByZWZhY3RvcmluZy4gVGhlcmUgaXMgYSBwb3RlbnRpYWwgdG8gcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYWAgaW4gYGNvbm5lY3Rfc29ja2V0YCBpZiBhbiB1bmluaXRpYWxpemVkIGFkZHJlc3MgaXMgcGFzc2VkLCBidXQgdGhlIGNvZGUgaW4gYGJwZl9rc29ja19jb25uZWN0YCBjb3BpZXMgZXZlcnl0aGluZyB0byB0aGUgc29ja2V0IHN0cnVjdHVyZSBhbmQgYWxsIHRoZSBmaWVsZHMgc2hvdWxkIGJlIGluaXRpYWxpemVkLCBiZWNhdXNlIHRoZSB2ZXJpZmllciBlbnN1cmVzIG1lbW9yeSBpcyBpbml0aWFsaXplZC5cblxuUmVnYXJkaW5nIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2U6IHRoZXJlIGFyZSBub25lIGhlcmUgc2luY2Ugbm90aGluZyBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgZXhjZXB0IHdoYXQgdGhlIG5ldHdvcmsgc2VuZHMuXG5cbk5vdywgdGhlIGNlbnRyYWwgcXVlc3Rpb25zOiBEb2VzIHRoaXMgKmludHJvZHVjZSogYSBuZXcgd2F5IGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkPyBNeSBjb25jbHVzaW9uIGlzIG5vLCBiYXNlZCBvbiB3aGF0IHRoZSB2ZXJpZmllciBkb2VzLiBUaGVyZSBpcyBub3RoaW5nIG5ldyBoZXJlLlxuXG4qICAgQXJlIHRoZXJlIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBhbGxvY2F0ZWQ/IEkgc2VlIGBremFsbG9jX29iamAsIHdoaWNoIGxvb2tzIHN1c3BpY2lvdXMsIGJ1dCBpdCdzIG5vdCBhIHN0YW5kYXJkIG1hY3JvLiBXYWl0LCBsZXQgbWUgY2hlY2sgdGhlIGNvZGUuIE9rYXksIGl0J3MganVzdCBga3phbGxvYyhzaXplb2YoKmtzKSwgR0ZQX0tFUk5FTClgLlxuXG4qKlZlcmRpY3Q6KiogVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIG5ldyBrZnVuY3MsIGJ1dCB0aGUgKnJpc2sqIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlIGlzIG5vdCBuZXcuIFRoZSBleGlzdGluZyBCUEYgdmVyaWZpZXIsIGFuZCB0aGUgdW5wb2lzb25pbmcgb2YgbWVtb3J5IHdoZW4gdGhlIGtlcm5lbCBhY2Nlc3NlcyBCUEYgc3RhY2sgb3IgbWFwIG1lbW9yeSwgYXJlIHN1cHBvc2VkIHRvIGhhbmRsZSB0aGVzZS4gVGhlcmVmb3JlLCBJIGRvbid0IHNlZSBhICpzdHJvbmcqIGNhc2UgZm9yIGEgKmRlZGljYXRlZCogS01TQU4gZnV6emluZyBzZXNzaW9uLCBhbHRob3VnaCBpdCB3b3VsZG4ndCBodXJ0IHRvIGluY2x1ZGUgdGhlc2UgbmV3IGZ1bmN0aW9ucyBpbiBleGlzdGluZyBmdXp6aW5nIGNhbXBhaWducy4gSG93ZXZlciwgaWYgdGhlIHZlcmlmaWVyIGhhcyBhIGJ1ZywgS01TQU4gKndpbGwqIGNhdGNoIGl0LCBiZWNhdXNlIGl0IGNoZWNrcyBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcGFzc2VkIHRvIHRoZSBzZW5kIHNvY2tldCwgdmlhIGBrZXJuZWxfc2VuZG1zZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTI2LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjA0LjAwOTA0MjgwMloiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MjUzNzU3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJremFsbG9jX29ialwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDc5MTUwIGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0PTEwMz1saXN0Olxcbi0tXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdC0xMTQtXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9saXN0LnJzdDoxMTU6ICAgICAgICAgIGdyb2NrID0ga3phbGxvY19vYmooKmdyb2NrKTtcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL2xpc3QucnN0LTExNi0gICAgICAgICAgaWYgKCFncm9jaylcXG4tLVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI1LVxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3Q6MTI2OiAgICAgICAgICBkaW1pdHJpID0ga3phbGxvY19vYmooKmRpbWl0cmkpO1xcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbGlzdC5yc3QtMTI3LSAgICAgICAgICBpZiAoIWRpbWl0cmkpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3Q9NDU9YSBtZXNzYWdlIGFuZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBBUEkgYW5kIHJldHVybiBpbW1lZGlhdGVseSkuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtODktXFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkwOlxcdFxcdGRjX3N5bmMgPSBremFsbG9jX29iaigqZGNfc3luYyk7XFxuRG9jdW1lbnRhdGlvbi9kcml2ZXItYXBpL21haWxib3gucnN0OjkxOlxcdFxcdGRjX2FzeW5jID0ga3phbGxvY19vYmooKmRjX2FzeW5jKTtcXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWFpbGJveC5yc3QtOTItXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q9MjY9RXhhbXBsZTpcXG4tLVxcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00NC1cXG5Eb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvbWVkaWEvdjRsMi1maC5yc3Q6NDU6XFx0XFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xcbkRvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9tZWRpYS92NGwyLWZoLnJzdC00Ni1cXG4tLVxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0PTkzOD1UaGUga2VybmVsIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZ2VuZXJhbCBwdXJwb3NlIG1lbW9yeSBhbGxvY2F0b3JzOlxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0OjkzOTprbWFsbG9jKCksIGt6YWxsb2MoKSwga21hbGxvY19vYmpzKCksIGt6YWxsb2Nfb2JqcygpLCB2bWFsbG9jKCksIGFuZFxcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9jb2Rpbmctc3R5bGUucnN0LTk0MC12emFsbG9jKCkuICBQbGVhc2UgcmVmZXIgdG8gdGhlIEFQSSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdD05NjQ9VGhlIHByZWZlcnJlZCBmb3JtIGZvciBhbGxvY2F0aW5nIGEgemVyb2VkIGFycmF5IGlzIHRoZSBmb2xsb3dpbmc6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvY29kaW5nLXN0eWxlLnJzdC05NjctXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3Q6OTY4OlxcdHAgPSBremFsbG9jX29ianMoKnAsIG4sIC4uLik7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2NvZGluZy1zdHlsZS5yc3QtOTY5LVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0PTM5OD1iZWNvbWUsIHJlc3BlY3RpdmVseTo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDAwLVxcdHB0ciA9IGttYWxsb2Nfb2JqKCpwdHIgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDE6XFx0cHRyID0ga3phbGxvY19vYmooKnB0ciBbLCBnZnBdICk7XFxuRG9jdW1lbnRhdGlvbi9wcm9jZXNzL2RlcHJlY2F0ZWQucnN0LTQwMi1cXHRwdHIgPSBrbWFsbG9jX29ianMoKnB0ciwgY291bnQgWywgZ2ZwXSApO1xcbkRvY3VtZW50YXRpb24vcHJvY2Vzcy9kZXByZWNhdGVkLnJzdDo0MDM6XFx0cHRyID0ga3phbGxvY19vYmpzKCpwdHIsIGNvdW50IFssIGdmcF0gKTtcXG5Eb2N1bWVudGF0aW9uL3Byb2Nlc3MvZGVwcmVjYXRlZC5yc3QtNDA0LVxcdHB0ciA9IGttYWxsb2NfZmxleCgqcHRyLCBmbGV4X21lbWJlciwgY291bnQgWywgZ2ZwXSApO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTIwOD10byBkZXRhaWxzIGV4cGxhaW5lZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtMjY4LSAgICAgICAgICAgICAgLyogYWxsb2NhdGUgYSBjaGlwLXNwZWNpZmljIGRhdGEgd2l0aCB6ZXJvIGZpbGxlZCAqL1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDoyNjk6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0yNzAtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTYyMz1BZnRlciBhbGxvY2F0aW5nIGEgY2FyZCBpbnN0YW5jZSB2aWEgOmM6ZnVuYzpgc25kX2NhcmRfbmV3KClgXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMwLSAgLi4uLi5cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q6NjMxOiAgY2hpcCA9IGt6YWxsb2Nfb2JqKCpjaGlwKTtcXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNjMyLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0PTY5OD1kZXN0cnVjdG9yIGFuZCBQQ0kgZW50cmllcy4gRXhhbXBsZSBjb2RlIGlzIHNob3duIGZpcnN0LCBiZWxvdzo6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3QtNzQ5LVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdDo3NTA6ICAgICAgICAgICAgICBjaGlwID0ga3phbGxvY19vYmooKmNoaXApO1xcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC03NTEtICAgICAgICAgICAgICBpZiAoY2hpcCA9PSBOVUxMKSB7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3NvdW5kL2tlcm5lbC1hcGkvd3JpdGluZy1hbi1hbHNhLWRyaXZlci5yc3Q9MzgyMz1jaGlwIGRhdGEgaW5kaXZpZHVhbGx5OjpcXG4tLVxcbkRvY3VtZW50YXRpb24vc291bmQva2VybmVsLWFwaS93cml0aW5nLWFuLWFsc2EtZHJpdmVyLnJzdC0zODM1LSAgICAgICAgICAuLi4uXFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0OjM4MzY6ICAgICAgICAgIGNoaXAgPSBremFsbG9jX29iaigqY2hpcCk7XFxuRG9jdW1lbnRhdGlvbi9zb3VuZC9rZXJuZWwtYXBpL3dyaXRpbmctYW4tYWxzYS1kcml2ZXIucnN0LTM4MzctICAgICAgICAgIC4uLi5cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dD03OTQ9aW50IG15X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQtODAxLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dDo4MDI6XFx0bXlfZmggPSBremFsbG9jX29iaigqbXlfZmgpO1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL3ZpZGVvNGxpbnV4L3Y0bDItZnJhbWV3b3JrLnR4dC04MDMtXFxuLS1cXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYz02ND1tb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkciwgRWxmNjRfU2hkciAqc2VjaGRycyxcXG4tLVxcbmFyY2gvYWxwaGEva2VybmVsL21vZHVsZS5jLTk1LVxcdG5zeW1zID0gc3ltdGFiLVxcdTAwM2VzaF9zaXplIC8gc2l6ZW9mKEVsZjY0X1N5bSk7XFxuYXJjaC9hbHBoYS9rZXJuZWwvbW9kdWxlLmM6OTY6XFx0Y2hhaW5zID0ga3phbGxvY19vYmpzKHN0cnVjdCBnb3RfZW50cnksIG5zeW1zKTtcXG5hcmNoL2FscGhhL2tlcm5lbC9tb2R1bGUuYy05Ny1cXHRpZiAoIWNoYWlucykge1xcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYz0zOTA9cmVnaXN0ZXJfY3B1cyh2b2lkKVxcbi0tXFxuYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYy0zOTQtXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHtcXG5hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jOjM5NTpcXHRcXHRzdHJ1Y3QgY3B1ICpwID0ga3phbGxvY19vYmooKnApO1xcbmFyY2gvYWxwaGEva2VybmVsL3NldHVwLmMtMzk2LVxcdFxcdGlmICghcClcXG4tLVxcbmFyY2gvYXJjL25ldC9icGZfaml0X2NvcmUuYz0xMTIwPXN0YXRpYyBpbnQgaml0X3ByZXBhcmVfZmluYWxfbWVtX2FsbG9jKHN0cnVjdCBqaXRfY29udGV4dCAqY3R4KVxcbi0tXFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jLTExMzEtXFx0aWYgKGN0eC1cXHUwMDNlbmVlZF9leHRyYV9wYXNzKSB7XFxuYXJjaC9hcmMvbmV0L2JwZl9qaXRfY29yZS5jOjExMzI6XFx0XFx0Y3R4LVxcdTAwM2VqaXRfZGF0YSA9IGt6YWxsb2Nfb2JqKCpjdHgtXFx1MDAzZWppdF9kYXRhKTtcXG5hcmNoL2FyYy9uZXQvYnBmX2ppdF9jb3JlLmMtMTEzMy1cXHRcXHRpZiAoIWN0eC1cXHUwMDNlaml0X2RhdGEpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmM9MjIwPWxvY29tb19pbml0X29uZV9jaGlsZChzdHJ1Y3QgbG9jb21vICpsY2hpcCwgc3RydWN0IGxvY29tb19kZXZfaW5mbyAqaW5mbylcXG4tLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYy0yMjQtXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jOjIyNTpcXHRkZXYgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vX2Rldik7XFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jLTIyNi1cXHRpZiAoIWRldikge1xcbi0tXFxuYXJjaC9hcm0vY29tbW9uL2xvY29tby5jPTM1Nj1fX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpXFxuLS1cXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzYyLVxcbmFyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYzozNjM6XFx0bGNoaXAgPSBremFsbG9jX29iaihzdHJ1Y3QgbG9jb21vKTtcXG5hcmNoL2FybS9jb21tb24vbG9jb21vLmMtMzY0LVxcdGlmICghbGNoaXApXFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM9NzMzPXNhMTExMV9pbml0X29uZV9jaGlsZChzdHJ1Y3Qgc2ExMTExICpzYWNoaXAsIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LFxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jLTczOS1cXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmM6NzQwOlxcdGRldiA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBzYTExMTFfZGV2KTtcXG5hcmNoL2FybS9jb21tb24vc2ExMTExLmMtNzQxLVxcdGlmICghZGV2KSB7XFxuLS1cXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYz0xNzg9c3RhdGljIGludCBzY29vcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuYXJjaC9hcm0vY29tbW9uL3Njb29wLmMtMTg3LVxcbmFyY2gvYXJtL2NvbW1vbi9zY29vcC5jOjE4ODpcXHRkZXZwdHIgPSBremFsbG9jX29iaihzdHJ1Y3Qgc2Nvb3BfZGV2KTtcXG5hcmNoL2FybS9jb21tb24vc2Nvb3AuYy0xODktXFx0aWYgKCFkZXZwdHIpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc21wLmM9MTA4PXN0YXRpYyBpbnQgc2Vjb25kYXJ5X2JpZ2xpdHRsZV9wcmVwYXJlKHVuc2lnbmVkIGludCBjcHUpXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvc21wLmMtMTEwLVxcdGlmICghY3B1X3Z0YWJsZVtjcHVdKVxcbmFyY2gvYXJtL2tlcm5lbC9zbXAuYzoxMTE6XFx0XFx0Y3B1X3Z0YWJsZVtjcHVdID0ga3phbGxvY19vYmooKmNwdV92dGFibGVbY3B1XSk7XFxuYXJjaC9hcm0va2VybmVsL3NtcC5jLTExMi1cXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM9MTY5PXN0YXRpYyBpbnQgX19pbml0IHZkc29faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0va2VybmVsL3Zkc28uYy0xODEtXFx0LyogQWxsb2NhdGUgdGhlIFZEU08gdGV4dCBwYWdlbGlzdCAqL1xcbmFyY2gvYXJtL2tlcm5lbC92ZHNvLmM6MTgyOlxcdHZkc29fdGV4dF9wYWdlbGlzdCA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB0ZXh0X3BhZ2VzKTtcXG5hcmNoL2FybS9rZXJuZWwvdmRzby5jLTE4My1cXHRpZiAodmRzb190ZXh0X3BhZ2VsaXN0ID09IE5VTEwpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jPTI2MT1pbnQgX19pbml0IGRjMjEyODVfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2NC1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jOjI2NTpcXHRyZXMgPSBremFsbG9jX29ianMoc3RydWN0IHJlc291cmNlLCAyKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jLTI2Ni1cXHRpZiAoIXJlcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYz02OT1zdGF0aWMgaW50IF9faW5pdCBlYnNhMjg1X2xlZHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2Vic2EyODUuYy04Ni1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZWJzYTI4NS5jOjg3OlxcdFxcdGxlZCA9IGt6YWxsb2Nfb2JqKCpsZWQpO1xcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9lYnNhMjg1LmMtODgtXFx0XFx0aWYgKCFsZWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmM9NzIwPXN0YXRpYyBpbnQgX19pbml0IG5ldHdpbmRlcl9sZWRzX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9uZXR3aW5kZXItaHcuYy03MjktXFxuYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL25ldHdpbmRlci1ody5jOjczMDpcXHRcXHRsZWQgPSBremFsbG9jX29iaigqbGVkKTtcXG5hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvbmV0d2luZGVyLWh3LmMtNzMxLVxcdFxcdGlmICghbGVkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jPTQ3Mz1zdGF0aWMgaW50IGlteF9tbWRjX3BlcmZfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB2b2lkIF9faW9tZW0gKm1tZGNfYmFzZSxcXG4tLVxcbmFyY2gvYXJtL21hY2gtaW14L21tZGMuYy00NzktXFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jOjQ4MDpcXHRwbXVfbW1kYyA9IGt6YWxsb2Nfb2JqKCpwbXVfbW1kYyk7XFxuYXJjaC9hcm0vbWFjaC1pbXgvbW1kYy5jLTQ4MS1cXHRpZiAoIXBtdV9tbWRjKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2JvYXJkLXY3LmM9MTE0PXN0YXRpYyB2b2lkIF9faW5pdCBpMmNfcXVpcmsodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMjktXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9ib2FyZC12Ny5jOjEzMDpcXHRcXHRuZXdfY29tcGF0ID0ga3phbGxvY19vYmooKm5ld19jb21wYXQpO1xcbmFyY2gvYXJtL21hY2gtbXZlYnUvYm9hcmQtdjcuYy0xMzEtXFxuLS1cXG5hcmNoL2FybS9tYWNoLW12ZWJ1L2NvaGVyZW5jeS5jPTE2Mz1zdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRhXzM3NV8zODBfY29oZXJlbmN5X2luaXQoc3RydWN0IGRldmljZV9ub2RlICpucClcXG4tLVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmMtMTg3LVxcbmFyY2gvYXJtL21hY2gtbXZlYnUvY29oZXJlbmN5LmM6MTg4OlxcdFxcdHAgPSBremFsbG9jX29iaigqcCk7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9jb2hlcmVuY3kuYy0xODktXFx0XFx0cC1cXHUwMDNlbmFtZSA9IGtzdHJkdXAoXFxcImFybSxpby1jb2hlcmVudFxcXCIsIEdGUF9LRVJORUwpO1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYz0xNDg9c3RhdGljIGludCBfX2luaXQgbXZlYnVfc29jX2RldmljZSh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTYtXFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYzoxNTc6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1tdmVidS9tdmVidS1zb2MtaWQuYy0xNTgtXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW14cy9tYWNoLW14cy5jPTM4MD1zdGF0aWMgdm9pZCBfX2luaXQgbXhzX21hY2hpbmVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zODktXFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYzozOTA6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1teHMvbWFjaC1teHMuYy0zOTEtXFx0aWYgKCFzb2NfZGV2X2F0dHIpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL2RtYS5jPTI5ND1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9zeXN0ZW1fZG1hX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmMtMzIxLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvZG1hLmM6MzIyOlxcdGQgPSBremFsbG9jX29iaigqZCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9kbWEuYy0zMjMtXFx0aWYgKCFkKSB7XFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM9MjkyPXN0YXRpYyB2b2lkIG9tYXBfbWNic3BfcmVnaXN0ZXJfYm9hcmRfY2ZnKHN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzX2NvdW50LFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jLTI5Ni1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmM6Mjk3OlxcdG9tYXBfbWNic3BfZGV2aWNlcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHNpemUpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYy0yOTgtXFx0aWYgKCFvbWFwX21jYnNwX2RldmljZXMpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYz01MT1zdGF0aWMgaW50IF9faW5pdCBvbWFwMV9kbV90aW1lcl9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAxL3RpbWVyLmMtMTI3LVxcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYzoxMjg6XFx0XFx0cGRhdGEgPSBremFsbG9jX29iaigqcGRhdGEpO1xcbmFyY2gvYXJtL21hY2gtb21hcDEvdGltZXIuYy0xMjktXFx0XFx0aWYgKCFwZGF0YSkge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmM9MjMwPXZvaWQgb21hcDJ4eHhfY2xrdF92cHNfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjM5LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jOjI0MDpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMtMjQxLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmM9Nzg2PXZvaWQgX19pbml0IG9tYXBfc29jX2RldmljZV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMtNzkwLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvaWQuYzo3OTE6XFx0c29jX2Rldl9hdHRyID0ga3phbGxvY19vYmooKnNvY19kZXZfYXR0cik7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jLTc5Mi1cXHRpZiAoIXNvY19kZXZfYXR0cilcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYz0xMzE9c3RhdGljIGludCBvbWFwX2RldmljZV9idWlsZF9mcm9tX2R0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfZGV2aWNlLmMtMTU4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9kZXZpY2UuYzoxNTk6XFx0aHdtb2RzID0ga3phbGxvY19vYmpzKHN0cnVjdCBvbWFwX2h3bW9kICosIG9oX2NudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2RldmljZS5jLTE2MC1cXHRpZiAoIWh3bW9kcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzM4MT1zdGF0aWMgaW50IG9tYXBfaHdtb2RfYWxsb2NhdGVfbW9kdWxlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IG9tYXBfaHdtb2QgKm9oLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5NC1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozMzk1OlxcdHN5c2MgPSBremFsbG9jX29iaigqc3lzYyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzM5Ni1cXHRpZiAoIXN5c2MpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNDI0LVxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZvaC1cXHUwMDNlc2xhdmVfcG9ydHMpKSB7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM6MzQyNTpcXHRcXHRvaSA9IGt6YWxsb2Nfb2JqKCpvaSk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzQyNi1cXHRcXHRpZiAoIW9pKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmM9MzUxMz1pbnQgb21hcF9od21vZF9pbml0X21vZHVsZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI3LVxcdGlmICghb2gpIHtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYzozNTI4OlxcdFxcdG9oID0ga3phbGxvY19vYmooKm9oKTtcXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTI5LVxcdFxcdGlmICghb2gpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYy0zNTM4LVxcbmFyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jOjM1Mzk6XFx0XFx0b2gtXFx1MDAzZWNsYXNzID0ga3phbGxvY19vYmooKm9oLVxcdTAwM2VjbGFzcyk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kLmMtMzU0MC1cXHRcXHRpZiAoIW9oLVxcdTAwM2VjbGFzcykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jPTM3OT1zdGF0aWMgaW50IF9faW5pdCBhbXgzX2lkbGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlLCBpbnQgY3B1KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTMzeHgtY29yZS5jLTQxMi1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzN4eC1jb3JlLmM6NDEzOlxcdGlkbGVfc3RhdGVzID0ga3phbGxvY19vYmpzKCppZGxlX3N0YXRlcywgc3RhdGVfY291bnQpO1xcbmFyY2gvYXJtL21hY2gtb21hcDIvcG0zM3h4LWNvcmUuYy00MTQtXFx0aWYgKCFpZGxlX3N0YXRlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtb21hcDIvc3JfZGV2aWNlLmM9MzA9c3RhdGljIHZvaWQgX19pbml0IHNyX3NldF9udmFsdWVzKHN0cnVjdCBvbWFwX3ZvbHRfZGF0YSAqdm9sdF9kYXRhLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00MS1cXG5hcmNoL2FybS9tYWNoLW9tYXAyL3NyX2RldmljZS5jOjQyOlxcdG52YWx1ZV90YWJsZSA9IGt6YWxsb2Nfb2JqcygqbnZhbHVlX3RhYmxlLCBjb3VudCk7XFxuYXJjaC9hcm0vbWFjaC1vbWFwMi9zcl9kZXZpY2UuYy00My1cXHRpZiAoIW52YWx1ZV90YWJsZSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYz0xMzk9c3RhdGljIGludCBfX2luaXQgcGNpZV9zZXR1cChzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTcxLVxcdCAqL1xcbmFyY2gvYXJtL21hY2gtb3Jpb241eC9wY2kuYzoxNzI6XFx0cmVzID0ga3phbGxvY19vYmooc3RydWN0IHJlc291cmNlKTtcXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmMtMTczLVxcdGlmICghcmVzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jPTQ2Nj1zdGF0aWMgaW50IF9faW5pdCBwY2lfc2V0dXAoc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5Mi1cXHQgKi9cXG5hcmNoL2FybS9tYWNoLW9yaW9uNXgvcGNpLmM6NDkzOlxcdHJlcyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCByZXNvdXJjZSk7XFxuYXJjaC9hcm0vbWFjaC1vcmlvbjV4L3BjaS5jLTQ5NC1cXHRpZiAoIXJlcylcXG4tLVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM9Njg5PXN0YXRpYyBzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKl9faW5pdCBlY2FyZF9hbGxvY19jYXJkKGludCB0eXBlLCBpbnQgc2xvdClcXG4tLVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmMtNjk0LVxcbmFyY2gvYXJtL21hY2gtcnBjL2VjYXJkLmM6Njk1OlxcdGVjID0ga3phbGxvY19vYmooZWNhcmRfdCk7XFxuYXJjaC9hcm0vbWFjaC1ycGMvZWNhcmQuYy02OTYtXFx0aWYgKCFlYykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYz05Mz1pbnQgX19pbml0IHNhMTF4eF9jbGtfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMDktXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYzoxMTA6XFx0aHcgPSBremFsbG9jX29iaigqaHcpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2Nsb2NrLmMtMTExLVxcdGlmICghaHcpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jLTEzMS1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9jbG9jay5jOjEzMjpcXHRodyA9IGt6YWxsb2Nfb2JqKCpodyk7XFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvY2xvY2suYy0xMzMtXFx0aWYgKCFodylcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYz0zMTc9aW50IF9faW5pdCBzYTExeDBfcmVnaXN0ZXJfZml4ZWRfcmVndWxhdG9yKGludCBuLFxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvZ2VuZXJpYy5jLTMyMy1cXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9nZW5lcmljLmM6MzI0OlxcdGNmZy1cXHUwMDNlaW5pdF9kYXRhID0gaWQgPSBremFsbG9jX29iaigqY2ZnLVxcdTAwM2Vpbml0X2RhdGEpO1xcbmFyY2gvYXJtL21hY2gtc2ExMTAwL2dlbmVyaWMuYy0zMjUtXFx0aWYgKCFjZmctXFx1MDAzZWluaXRfZGF0YSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmM9MjI1PXN0YXRpYyBpbnQgbmVwb25zZXRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KVxcbi0tXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYy0yNzgtXFxuYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYzoyNzk6XFx0ZCA9IGt6YWxsb2Nfb2JqKCpkKTtcXG5hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jLTI4MC1cXHRpZiAoIWQpIHtcXG4tLVxcbmFyY2gvYXJtL21hY2gtc2htb2JpbGUvcmVndWxhdG9yLXF1aXJrLXJjYXItZ2VuMi5jPTE0MT1zdGF0aWMgaW50IF9faW5pdCByY2FyX2dlbjJfcmVndWxhdG9yX3F1aXJrKHZvaWQpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjYtXFxuYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9yZWd1bGF0b3ItcXVpcmstcmNhci1nZW4yLmM6MTY3OlxcdFxcdHF1aXJrID0ga3phbGxvY19vYmooKnF1aXJrKTtcXG5hcmNoL2FybS9tYWNoLXNobW9iaWxlL3JlZ3VsYXRvci1xdWlyay1yY2FyLWdlbjIuYy0xNjgtXFx0XFx0aWYgKCFxdWlyaykge1xcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmM9MzkzPXN0YXRpYyBpbnQgdmVfc3BjX3BvcHVsYXRlX29wcHModWludDMyX3QgY2x1c3RlcilcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5Ny1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzozOTg6XFx0b3BwcyA9IGt6YWxsb2Nfb2Jqcygqb3BwcywgTUFYX09QUFMpO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTM5OS1cXHRpZiAoIW9wcHMpXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz00NDI9aW50IF9faW5pdCB2ZV9zcGNfaW5pdCh2b2lkIF9faW9tZW0gKmJhc2VhZGRyLCB1MzIgYTE1X2NsdXNpZCwgaW50IGlycSlcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0NC1cXHRpbnQgcmV0O1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jOjQ0NTpcXHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTQ0Ni1cXHRpZiAoIWluZm8pXFxuLS1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYz01MjM9c3RhdGljIHN0cnVjdCBjbGsgKnZlX3NwY19jbGtfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqY3B1X2RldilcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3NwYy5jLTUyNy1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9zcGMuYzo1Mjg6XFx0c3BjID0ga3phbGxvY19vYmooKnNwYyk7XFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvc3BjLmMtNTI5LVxcdGlmICghc3BjKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvdmVyc2F0aWxlLmM9MTIzPXN0YXRpYyB2b2lkIF9faW5pdCB2ZXJzYXRpbGVfZHRfcGNpX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtdmVyc2F0aWxlL3ZlcnNhdGlsZS5jLTE0NC1cXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYzoxNDU6XFx0bmV3cHJvcCA9IGt6YWxsb2Nfb2JqKCpuZXdwcm9wKTtcXG5hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS92ZXJzYXRpbGUuYy0xNDYtXFx0aWYgKCFuZXdwcm9wKVxcbi0tXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jPTEwNT1zdGF0aWMgdm9pZCBfX2luaXQgenlucV9pbml0X21hY2hpbmUodm9pZClcXG4tLVxcbmFyY2gvYXJtL21hY2gtenlucS9jb21tb24uYy0xMTAtXFxuYXJjaC9hcm0vbWFjaC16eW5xL2NvbW1vbi5jOjExMTpcXHRzb2NfZGV2X2F0dHIgPSBremFsbG9jX29iaigqc29jX2Rldl9hdHRyKTtcXG5hcmNoL2FybS9tYWNoLXp5bnEvY29tbW9uLmMtMTEyLVxcdGlmICghc29jX2Rldl9hdHRyKVxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYz01MDM9c3RhdGljIF9faW5pdCBpbnQgbDJ4MF9wbXVfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYy01MDktXFxuYXJjaC9hcm0vbW0vY2FjaGUtbDJ4MC1wbXUuYzo1MTA6XFx0bDJ4MF9wbXUgPSBremFsbG9jX29iaigqbDJ4MF9wbXUpO1xcbmFyY2gvYXJtL21tL2NhY2hlLWwyeDAtcG11LmMtNTExLVxcdGlmICghbDJ4MF9wbXUpIHtcXG4tLVxcbmFyY2gvYXJtL21tL2NhY2hlLXVuaXBoaWVyLmM9MzE1PXN0YXRpYyBpbnQgX19pbml0IF9fdW5pcGhpZXJfY2FjaGVfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLFxcbi0tXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYy0zNDQtXFxuYXJjaC9hcm0vbW0vY2FjaGUtdW5pcGhpZXIuYzozNDU6XFx0ZGF0YSA9IGt6YWxsb2Nfb2JqKCpkYXRhKTtcXG5hcmNoL2FybS9tbS9jYWNoZS11bmlwaGllci5jLTM0Ni1cXHRpZiAoIWRhdGEpXFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTUzMz1zdGF0aWMgdm9pZCAqX19kbWFfYWxsb2Moc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLFxcbi0tXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy01NjAtXFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYzo1NjE6XFx0YnVmID0ga3phbGxvY19vYmooKmJ1ZixcXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jLTU2Mi1cXHRcXHRcXHQgIGdmcCBcXHUwMDI2IH4oX19HRlBfRE1BIHwgX19HRlBfRE1BMzIgfCBfX0dGUF9ISUdITUVNKSk7XFxuLS1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jPTE0ODc9YXJtX2lvbW11X2NyZWF0ZV9tYXBwaW5nKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBiYXNlLCB1NjQgc2l6ZSlcXG4tLVxcbmFyY2gvYXJtL21tL2RtYS1tYXBwaW5nLmMtMTUwNi1cXG5hcmNoL2FybS9tbS9kbWEtbWFwcGluZy5jOjE1MDc6XFx0bWFwcGluZyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBkbWFfaW9tbXVfbWFwcGluZyk7XFxuYXJjaC9hcm0vbW0vZG1hLW1hcHBpbmcuYy0xNTA4LVxcdGlmICghbWFwcGluZylcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYz0zMTY9aW50IF9faW5pdCBhcmNoX3hlbl91bnBvcHVsYXRlZF9pbml0KHN0cnVjdCByZXNvdXJjZSAqKnJlcylcXG4tLVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDMtXFxuYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jOjM0NDpcXHRyZWdzID0ga3phbGxvY19vYmpzKCpyZWdzLCBucl9yZWcpO1xcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYy0zNDUtXFx0aWYgKCFyZWdzKSB7XFxuLS1cXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg3LVxcbmFyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYzozODg6XFx0XFx0dG1wX3JlcyA9IGt6YWxsb2Nfb2JqKCp0bXBfcmVzKTtcXG5hcmNoL2FybS94ZW4vZW5saWdodGVuLmMtMzg5LVxcdFxcdGlmICghdG1wX3Jlcykge1xcbi0tXFxuYXJjaC9hcm0veGVuL3AybS5jPTE1MD1ib29sIF9fc2V0X3BoeXNfdG9fbWFjaGluZV9tdWx0aSh1bnNpZ25lZCBsb25nIHBmbixcXG4tLVxcbmFyY2gvYXJtL3hlbi9wMm0uYy0xNzgtXFxuYXJjaC9hcm0veGVuL3AybS5jOjE3OTpcXHRwMm1fZW50cnkgPSBremFsbG9jX29iaigqcDJtX2VudHJ5LCBHRlBfTk9XQUlUKTtcXG5hcmNoL2FybS94ZW4vcDJtLmMtMTgwLVxcdGlmICghcDJtX2VudHJ5KVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jPTY4PXN0YXRpYyBpbnQgX19pbml0IF9fdmRzb19pbml0KGVudW0gdmRzb19hYmkgYWJpKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvdmRzby5jLTgzLVxcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYzo4NDpcXHR2ZHNvX3BhZ2VsaXN0ID0ga3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mb1thYmldLnZkc29fcGFnZXMpO1xcbmFyY2gvYXJtNjQva2VybmVsL3Zkc28uYy04NS1cXHRpZiAodmRzb19wYWdlbGlzdCA9PSBOVUxMKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9NDgwPXN0YXRpYyBpbnQgc2hhcmVfcGZuX2h5cCh1NjQgcGZuKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmMtNDkyLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjQ5MzpcXHR0aGlzID0ga3phbGxvY19vYmooKnRoaXMpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTQ5NC1cXHRpZiAoIXRoaXMpIHtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jPTk4MT1pbnQga3ZtX2luaXRfc3RhZ2UyX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fczJfbW11ICptbXUsIHVuc2lnbmVkIGxvbmcgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDctXFxuYXJjaC9hcm02NC9rdm0vbW11LmM6MTAwODpcXHRwZ3QgPSBremFsbG9jX29iaigqcGd0LCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTEwMDktXFx0aWYgKCFwZ3QpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYz0xMTgwPWludCB0b3B1cF9oeXBfbWVtY2FjaGUoc3RydWN0IGt2bV9oeXBfbWVtY2FjaGUgKm1jLCB1bnNpZ25lZCBsb25nIG1pbl9wYWdlcylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODUtXFx0aWYgKCFtYy1cXHUwMDNlbWFwcGluZykge1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjExODY6XFx0XFx0bWMtXFx1MDAzZW1hcHBpbmcgPSBremFsbG9jX29iaihzdHJ1Y3QgcGt2bV9tYXBwaW5nLFxcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTExODctXFx0XFx0XFx0XFx0XFx0ICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbW11LmM9MjUxMD1pbnQgX19pbml0IGt2bV9tbXVfaW5pdCh1MzIgaHlwX3ZhX2JpdHMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9tbXUuYy0yNTQzLVxcbmFyY2gvYXJtNjQva3ZtL21tdS5jOjI1NDQ6XFx0aHlwX3BndGFibGUgPSBremFsbG9jX29iaigqaHlwX3BndGFibGUpO1xcbmFyY2gvYXJtNjQva3ZtL21tdS5jLTI1NDUtXFx0aWYgKCFoeXBfcGd0YWJsZSkge1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmM9MTMyOD1pbnQga3ZtX3ZjcHVfYWxsb2NhdGVfdm5jcl90bGIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTMzMy1cXHRpZiAoIXZjcHUtXFx1MDAzZWFyY2gudm5jcl90bGIpIHtcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxMzM0OlxcdFxcdHN0cnVjdCB2bmNyX3RsYiAqdnQgPSBremFsbG9jX29iaigqdmNwdS1cXHUwMDNlYXJjaC52bmNyX3RsYixcXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYy0xMzM1LVxcdFxcdFxcdFxcdFxcdFxcdCAgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jPTE3OTM9aW50IGt2bV9pbml0X252X3N5c3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vbmVzdGVkLmMtMTgwMi1cXG5hcmNoL2FybTY0L2t2bS9uZXN0ZWQuYzoxODAzOlxcdGt2bS1cXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MgPSBremFsbG9jX29iaigqKGt2bS1cXHUwMDNlYXJjaC5zeXNyZWdfbWFza3MpLFxcbmFyY2gvYXJtNjQva3ZtL25lc3RlZC5jLTE4MDQtXFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbi0tXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM9MTE2PXN0YXRpYyBzdHJ1Y3Qga3ZtX3B0ZHVtcF9ndWVzdF9zdGF0ZSAqa3ZtX3B0ZHVtcF9wYXJzZXJfY3JlYXRlKHN0cnVjdCBrdm1fczJfbW11ICptbXUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS9wdGR1bXAuYy0xMjEtXFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmM6MTIyOlxcdHN0ID0ga3phbGxvY19vYmooc3RydWN0IGt2bV9wdGR1bXBfZ3Vlc3Rfc3RhdGUsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vcHRkdW1wLmMtMTIzLVxcdGlmICghc3QpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaW5pdC5jPTIwNz1zdGF0aWMgaW50IGt2bV92Z2ljX2Rpc3RfaW5pdChzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGludCBucl9zcGlzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTMtXFx0ZGlzdC1cXHUwMDNlYWN0aXZlX3NwaXMgPSAoYXRvbWljX3QpQVRPTUlDX0lOSVQoMCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYzoyMTQ6XFx0ZGlzdC1cXHUwMDNlc3BpcyA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgdmdpY19pcnEsIG5yX3NwaXMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYy0yMTUtXFx0aWYgKCFkaXN0LVxcdTAwM2VzcGlzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWluaXQuYz0zMTY9c3RhdGljIGludCB2Z2ljX2FsbG9jYXRlX3ByaXZhdGVfaXJxc19sb2NrZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMxLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmM6MzMyOlxcdHZnaWNfY3B1LVxcdTAwM2Vwcml2YXRlX2lycXMgPSBremFsbG9jX29ianMoc3RydWN0IHZnaWNfaXJxLFxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pbml0LmMtMzMzLVxcdFxcdFxcdFxcdFxcdCAgICAgIG51bV9wcml2YXRlX2lycXMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYz0xNDI9aW50IGt2bV92Z2ljX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWlycWZkLmMtMTQ4LVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pcnFmZC5jOjE0OTpcXHRlbnRyaWVzID0ga3phbGxvY19vYmpzKCplbnRyaWVzLCBuciwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXJxZmQuYy0xNTAtXFx0aWYgKCFlbnRyaWVzKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTc2PXN0YXRpYyBzdHJ1Y3QgdmdpY19pcnEgKnZnaWNfYWRkX2xwaShzdHJ1Y3Qga3ZtICprdm0sIHUzMiBpbnRpZCxcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6ODg6XFx0aXJxID0ga3phbGxvY19vYmooc3RydWN0IHZnaWNfaXJxLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy04OS1cXHRpZiAoIWlycSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz05NzE9c3RhdGljIGludCB2Z2ljX2l0c19hbGxvY19jb2xsZWN0aW9uKHN0cnVjdCB2Z2ljX2l0cyAqaXRzLFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTk3Ni1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6OTc3OlxcdGNvbGxlY3Rpb24gPSBremFsbG9jX29iaigqY29sbGVjdGlvbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtOTc4LVxcdGlmICghY29sbGVjdGlvbilcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYz0xMDE1PXN0YXRpYyBzdHJ1Y3QgaXRzX2l0ZSAqdmdpY19pdHNfYWxsb2NfaXRlKHN0cnVjdCBpdHNfZGV2aWNlICpkZXZpY2UsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTAyMC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTAyMTpcXHRpdGUgPSBremFsbG9jX29iaigqaXRlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMDIyLVxcdGlmICghaXRlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTExNDI9c3RhdGljIHN0cnVjdCBpdHNfZGV2aWNlICp2Z2ljX2l0c19hbGxvY19kZXZpY2Uoc3RydWN0IHZnaWNfaXRzICppdHMsXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTE0Ny1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTE0ODpcXHRkZXZpY2UgPSBremFsbG9jX29iaigqZGV2aWNlLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy1pdHMuYy0xMTQ5LVxcdGlmICghZGV2aWNlKVxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jPTE4NTU9c3RhdGljIGludCB2Z2ljX2l0c19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmMtMTg2Mi1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtaXRzLmM6MTg2MzpcXHRpdHMgPSBremFsbG9jX29iaihzdHJ1Y3QgdmdpY19pdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLWl0cy5jLTE4NjQtXFx0aWYgKCFpdHMpXFxuLS1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtbW1pby12My5jPTg4Nj1zdGF0aWMgaW50IHZnaWNfdjNfYWxsb2NfcmVkaXN0X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sIHVpbnQzMl90IGluZGV4LFxcbi0tXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzEtXFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYzo5MzI6XFx0cmRyZWcgPSBremFsbG9jX29iaigqcmRyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuYXJjaC9hcm02NC9rdm0vdmdpYy92Z2ljLW1taW8tdjMuYy05MzMtXFx0aWYgKCFyZHJlZylcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jPTI0Mj1pbnQgdmdpY192NF9pbml0KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvYXJtNjQva3ZtL3ZnaWMvdmdpYy12NC5jLTI1OC1cXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYzoyNTk6XFx0ZGlzdC1cXHUwMDNlaXRzX3ZtLnZwZXMgPSBremFsbG9jX29ianMoKmRpc3QtXFx1MDAzZWl0c192bS52cGVzLCBucl92Y3B1cyxcXG5hcmNoL2FybTY0L2t2bS92Z2ljL3ZnaWMtdjQuYy0yNjAtXFx0XFx0XFx0XFx0XFx0IEdGUF9LRVJORUxfQUNDT1VOVCk7XFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYz0yMTE0PXN0cnVjdCBicGZfcHJvZyAqYnBmX2ludF9qaXRfY29tcGlsZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXFxuLS1cXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTM1LVxcdGlmICghaml0X2RhdGEpIHtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYzoyMTM2OlxcdFxcdGppdF9kYXRhID0ga3phbGxvY19vYmooKmppdF9kYXRhKTtcXG5hcmNoL2FybTY0L25ldC9icGZfaml0X2NvbXAuYy0yMTM3LVxcdFxcdGlmICghaml0X2RhdGEpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYz0xNz1zdGF0aWMgaW50IF9faW5pdCB2ZHNvX2luaXQodm9pZClcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jLTIyLVxcdHZkc29fcGFnZWxpc3QgPVxcbmFyY2gvY3NreS9rZXJuZWwvdmRzby5jOjIzOlxcdFxcdGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgcGFnZSAqLCB2ZHNvX3BhZ2VzKTtcXG5hcmNoL2Nza3kva2VybmVsL3Zkc28uYy0yNC1cXHRpZiAodW5saWtlbHkodmRzb19wYWdlbGlzdCA9PSBOVUxMKSkge1xcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9NDY2PXN0YXRpYyBpbnQgX19pbml0IGFkZF9sZWdhY3lfaXNhX2lvKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzItXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6NDczOlxcdHJhbmdlID0ga3phbGxvY19vYmooKnJhbmdlLCBHRlBfQVRPTUlDKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy00NzQtXFx0aWYgKCFyYW5nZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM9NDU9c3RhdGljIGludCBfX2luaXQgaW5pdF92ZHNvKHZvaWQpXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU1LVxcdHZkc29faW5mby5jb2RlX21hcHBpbmcucGFnZXMgPVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC92ZHNvLmM6NTY6XFx0XFx0a3phbGxvY19vYmpzKHN0cnVjdCBwYWdlICosIHZkc29faW5mby5zaXplIC8gUEFHRV9TSVpFKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvdmRzby5jLTU3LVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jPTYxND1zdGF0aWMgaW50IGt2bV9laW9pbnRjX2NyZWF0ZShzdHJ1Y3Qga3ZtX2RldmljZSAqZGV2LCB1MzIgdHlwZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2Vpb2ludGMuYy02MjQtXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvZWlvaW50Yy5jOjYyNTpcXHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9laW9pbnRjKTtcXG5hcmNoL2xvb25nYXJjaC9rdm0vaW50Yy9laW9pbnRjLmMtNjI2LVxcdGlmICghcylcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jPTM5ND1zdGF0aWMgaW50IGt2bV9pcGlfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva3ZtL2ludGMvaXBpLmMtNDExLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jOjQxMjpcXHRzID0ga3phbGxvY19vYmooc3RydWN0IGxvb25nYXJjaF9pcGkpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9pbnRjL2lwaS5jLTQxMy1cXHRpZiAoIXMpXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjA2Ljg1MTU4OTI2NVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjA4MDkxOTEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQlBGIEtzb2NrIFBhdGNoOiBBIERlZXAgRGl2ZSBpbnRvIE1lbW9yeSBJbml0aWFsaXphdGlvbiBhbmQgS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBjYXJlZnVsbHkgZGlzc2VjdGluZyB0aGlzIEJQRiBrc29jayBwYXRjaCwgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBrZnVuYyBBUEkgZm9yIEJQRiBwcm9ncmFtcyB0byBtYW5hZ2Ugc29ja2V0czogY3JlYXRpbmcsIGNvbm5lY3RpbmcsIGFuZCBzZW5kaW5nIGRhdGEuIE15IGZpcnN0IHRob3VnaHQgd2FzLCBcIkxldCdzIGNoZWNrIGV2ZXJ5IGFsbG9jYXRpb24gYW5kIG1lbW9yeSB0cmFuc2ZlciBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkuXCJcblxuSW5pdGlhbGx5LCBJIGxvb2tlZCBhdCBga3phbGxvY19vYmpgLCB3aGljaCBzZWVtcyBsaWtlIGEgbWFjcm8gZm9yIGBremFsbG9jYC4gVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBwcmltYXJ5IGRhdGEgc3RydWN0dXJlcywgbGlrZSBga3NgICh0aGUgYGJwZl9rc29ja2Agc3RydWN0KSwgYXJlIHplcm8taW5pdGlhbGl6ZWQgZnJvbSB0aGUgZ2V0LWdvLiBUaGlzIGluY2x1ZGVzIHRoZSBzb2NrZXQgaXRzZWxmIChga3MtXHUwMDNlc29ja2ApLCB1c2FnZSBjb3VudGVyLCBhbmQgcmVsZWFzZSB3b3JrLCBtZWFuaW5nIGFueSBwb3RlbnRpYWwgaXNzdWVzIGluIGluaXRpYWxpemF0aW9uIGFyZSBtb3N0bHkgZWxpbWluYXRlZC4gSSdtIGZvY3VzaW5nIG9uIGBicGZfa3NvY2tfY3JlYXRlX29wdHNgIGFuZCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgIHN0cnVjdHVyZXMsIG1ha2luZyBzdXJlIHRoZXJlJ3Mgbm8gcGFkZGluZyBvciB1bmluaXRpYWxpemVkIHBhcnRzLlxuXG5XaXRoIGBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCwgYSBxdWljayBzaXplIGNoZWNrIGFuZCBkaXJlY3QgaW5pdGlhbGl6YXRpb24gbWFrZSBpdCBzdHJhaWdodGZvcndhcmQgYW5kIHNhZmUuIFRoZW4gSSB3ZW50IGRlZXBlciBpbnRvIHRoZSBgYnBmX2tzb2NrX2FkZHJgIHVuaW9uLiBUaGUgcG90ZW50aWFsIGlzIHRoYXQgdGhlIHVzZXIgb25seSBpbml0aWFsaXplcyBwYXJ0IG9mIHRoZSB1bmlvbiAoZS5nLiwgdGhlIGBzb2NrYWRkcl9pbmAgcG9ydGlvbiksIGxlYXZpbmcgdGhlIG90aGVyIHBhcnQgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBhbiBpbW1lZGlhdGUgcmVkIGZsYWcgZm9yIEtNU0FOLiBUaGUgY29kZSB1c2VzIGBtZW1jcHlgIHRvIGNvcHkgdGhlIHByb3ZpZGVkIGFkZHJlc3MgaW50byBhIGtlcm5lbCBzdHJ1Y3QuIE5vdywgdGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgdGhlIEJQRiB2ZXJpZmllciBlbmZvcmNlcyB0aGF0IGFsbCAyOCBieXRlcyBvZiBgdW5pb24gYnBmX2tzb2NrX2FkZHJgIGFyZSBpbml0aWFsaXplZCBiZWZvcmUga2Z1bmMgY2FsbHMuIFNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHNob3VsZCBiZSBhIHByb2JsZW0gdGhlcmUuXG5cbkJ1dCB3YWl0LiBXaGF0IGlmIG1lbW9yeSBjb21lcyBmcm9tIGEgQlBGIG1hcCBvciByaW5nIGJ1ZmZlcj8gVGhlIHZlcmlmaWVyIGRvZXNuJ3QgKmR5bmFtaWNhbGx5KiB0cmFjayB0aGUgaW5pdGlhbGl6YXRpb24gb2YgcmluZyBidWZmZXIgbWVtb3J5LiBUaGVuLCBJIG5lZWRlZCB0byBjaGVjayB3aGF0IGhhcHBlbnMgaWYgdW5pbml0aWFsaXplZCByaW5nIGJ1ZmZlciBtZW1vcnkgaXMgcGFzc2VkIHRvIGBicGZfa3NvY2tfY29ubmVjdGAuIGBtZW1jcHlgIGNvcGllcyB1bmluaXRpYWxpemVkIGRhdGEsIHdoaWNoIGlzIG5vdyBhbiBpbnRlcmVzdGluZyBzY2VuYXJpbyB0aGF0IHNob3VsZCBjYXVzZSBhIEtNU0FOIHJlcG9ydCwgYnV0IGBjb25uZWN0X3NvY2tldGAgaXMgb25seSBnb2luZyB0byByZWFkIHRoZSBpbml0aWFsaXplZCBwYXJ0LCB3aGljaCBpcyB3aHkgS01TQU4gd29uJ3QgY29tcGxhaW4uIFRoZSBtb3N0IGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHRoZSBCUEYgcHJvZ3JhbSBuZWVkcyB0byBoYXZlIHByb3Blcmx5IGluaXRpYWxpemVkIG1lbW9yeS4gSWYgYHNhLnNzX2ZhbWlseWAgaXMgdW5pbml0aWFsaXplZCwgdGhlbiB3ZSBnZXQgYW4gZXJyb3IsIGJ1dCB0aGlzIGlzIGEgdXNlciBlcnJvci5cblxuVGhpbmtpbmcgY2FyZWZ1bGx5LCBhbmQgY29uZmlybWluZywgS01TQU4gKnNob3VsZCogYmUgcmVwb3J0aW5nIGEgYnVnIHdoZW4gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdXNlZC4gS01TQU4gaW5zdHJ1bWVudHMgYG1lbWNweWAgYW5kIHdpbGwgcmVwb3J0IGEgYnVnIHdoZW4gdGhlIHNvdXJjZSBjb250YWlucyB1bmluaXRpYWxpemVkIG1lbW9yeSwgKnVubGVzcyogdGhlIG1lbW9yeSBpcyB1bnBvaXNvbmVkLiBTaW5jZSBCUEYgbWFwcyBhbmQgcmluZyBidWZmZXJzIGFyZSB1bnBvaXNvbmVkIGJ5IEtNU0FOLCB0aGlzIGJlY29tZXMgc2FmZSwgYmVjYXVzZSBLTVNBTiBkb2VzIG5vdCB0cmFjayBCUEYgZXhlY3V0aW9uIChlLmcuLCB3cml0ZXMgdG8gdGhlIHN0YWNrKS4gS01TQU4gb25seSBjaGVja3MgbWVtb3J5IHVzYWdlIHdoZW4gaXQncyBhY2Nlc3NlZCwgc3VjaCBhcyB0aHJvdWdoIGBtZW1jcHlgLiBJZiBhIEJQRiBwcm9ncmFtIGRvZXNuJ3QgaW5pdGlhbGl6ZSBpdCwgS01TQU4gd2lsbCBub3Qgc2VlIGl0LCBiZWNhdXNlIEtNU0FOIGhhcyB0aGUgbWVtb3J5IG1hcmtlZCBhcyBpbml0aWFsaXplZCBieSBkZXNpZ24uXG5cblRoZW4sIHRoZXJlJ3MgYGJwZl9rc29ja19zZW5kYCwgd2hpY2ggY2FsbHMgYGtlcm5lbF9zZW5kbXNnYC4gYHN0cnVjdCBtc2doZHJgIGlzIGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGFuZCB0aGUgYHN0cnVjdCBrdmVjYCBpcyBmdWxseSBpbml0aWFsaXplZC4gTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLlxuXG5JIHRoZW4gY2hlY2sgYGNvbm5lY3Rfc29ja2V0YCwgd2hpY2ggaXMgYSByZWZhY3RvcmluZy4gVGhlIGV4aXN0aW5nIGxvZ2ljIGNvcGllcyBkYXRhIGZyb20gdXNlcnNwYWNlIHdpdGggYG1vdmVfYWRkcl90b19rZXJuZWxgLiBTbyBpdCdzIHNhZmUuIFRoZXJlJ3Mgbm8gbmV3IGV4cG9zdXJlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBgTmVlZHNLTVNBTiA9IGZhbHNlYC5cblxuRmluYWxseSwgSSBkaWQgYW5vdGhlciBjaGVjayBvZiBgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCBhbmQgYHVuaW9uIGJwZl9rc29ja19hZGRyYCBzdHJ1Y3R1cmVzIGFnYWluLCB0byBlbnN1cmUgdGhhdCB0aGUgY29kZSBpcyBzYWZlLiBJJ3ZlIHJlY29uZmlybWVkIG15IHJlYXNvbmluZy4gSXQncyBzYWZlLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gQWxsIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IGluaXRpYWxpemVkLiBCUEYgbWVtb3J5IGlzIGhhbmRsZWQgYnkgdGhlIHZlcmlmaWVyIGFuZCB1bnBvaXNvbmVkIGJ5IEtNU0FOLiBObyBuZXcgZGF0YSBpcyBjb3BpZWQgdG8gdXNlcnNwYWNlIGluIGEgd2F5IHRoYXQgY291bGQgbGVhayB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuS0FTQU4gaXMgc3VmZmljaWVudC4gVGhlIHBhdGNoIGludHJvZHVjZXMgYSBCUEYga2Z1bmMgQVBJIGZvciBzb2NrZXRzLiBJdCBkb2Vzbid0IGludHJvZHVjZSBjb21wbGV4IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBwYXJzaW5nIG9mIHVzZXJzcGFjZSBkYXRhIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIHVzZWQuIEl0IGRvZXNuJ3QgaW50cm9kdWNlIG5ldyBuZXR3b3JrIHByb3RvY29scy4gSSdtIHNldHRpbmcgYE5lZWRzS01TQU49ZmFsc2VgLiBJdCdzIGFsbCBnb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzM1NCwiT3V0cHV0VG9rZW5zIjozNDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NzEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEyOjE5OjU4LjkzMjUxMTMzM1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBCUEYga2Z1bmMgQVBJIChgYnBmX2tzb2NrYCkgdG8gY3JlYXRlLCBjb25uZWN0LCBhbmQgc2VuZCBkYXRhIHRocm91Z2gga2VybmVsIHNvY2tldHMgZnJvbSBCUEYgcHJvZ3JhbXMuIFxcblxcbjEuIEFsbCBuZXdseSBpbnRyb2R1Y2VkIGtlcm5lbCBzdHJ1Y3R1cmVzIChgc3RydWN0IGJwZl9rc29ja2AsIGBzdHJ1Y3QgbXNnaGRyYCwgYHN0cnVjdCBrdmVjYCkgYXJlIGZ1bGx5IHplcm8taW5pdGlhbGl6ZWQgdXBvbiBhbGxvY2F0aW9uIG9yIGRlY2xhcmF0aW9uIChlLmcuLCB1c2luZyBga3phbGxvY19vYmpgIG9yIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzKS5cXG4yLiBUaGUgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCBmcm9tIEJQRiBwcm9ncmFtcyAoYHN0cnVjdCBicGZfa3NvY2tfY3JlYXRlX29wdHNgLCBgdW5pb24gYnBmX2tzb2NrX2FkZHJgLCBhbmQgdGhlIHNlbmQgYnVmZmVyKSBhcmUgdmFsaWRhdGVkIGZvciBzaXplIGJ5IHRoZSBrZnVuYyB3cmFwcGVycy4gVGhlIEJQRiB2ZXJpZmllciBlbmZvcmNlcyBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZm9yIHRoZXNlIGFyZ3VtZW50cyBiZWZvcmUgdGhleSBhcmUgcGFzc2VkIHRvIHRoZSBrZnVuY3MuIEZ1cnRoZXJtb3JlLCBLTVNBTiB1bnBvaXNvbnMgQlBGIHN0YWNrIGFuZCBtYXAgbWVtb3J5IGJ5IGRlc2lnbiBzaW5jZSBpdCBjYW5ub3QgdHJhY2sgSklUdGVkIEJQRiBleGVjdXRpb24sIG1lYW5pbmcgS01TQU4gd291bGQgbm90IGRldGVjdCB1bmluaXRpYWxpemVkIG1lbW9yeSBvcmlnaW5hdGluZyBmcm9tIHRoZSBCUEYgcHJvZ3JhbSBpdHNlbGYuXFxuMy4gVGhlIHJlZmFjdG9yaW5nIG9mIGBjb25uZWN0X3NvY2tldGAgbWVyZWx5IGV4dHJhY3RzIGV4aXN0aW5nIGxvZ2ljIHdpdGhvdXQgY2hhbmdpbmcgaG93IHNvY2tldCBhZGRyZXNzZXMgYXJlIGhhbmRsZWQgb3IgY29waWVkLlxcbjQuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIHRoZSBkYXRhIHNlbnQgb3ZlciB0aGUgc29ja2V0IG9yaWdpbmF0ZXMgZnJvbSB0aGUgQlBGIHByb2dyYW0uXFxuXFxuQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMsIHdoaWNoIGFyZSBmdWxseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzLiBUaGVyZSBpcyBubyBleHBvc2VkIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgQlBGIGtmdW5jIEFQSSAoYGJwZl9rc29ja2ApIHRvIGNyZWF0ZSwgY29ubmVjdCwgYW5kIHNlbmQgZGF0YSB0aHJvdWdoIGtlcm5lbCBzb2NrZXRzIGZyb20gQlBGIHByb2dyYW1zLiBcXG5cXG4xLiBBbGwgbmV3bHkgaW50cm9kdWNlZCBrZXJuZWwgc3RydWN0dXJlcyAoYHN0cnVjdCBicGZfa3NvY2tgLCBgc3RydWN0IG1zZ2hkcmAsIGBzdHJ1Y3Qga3ZlY2ApIGFyZSBmdWxseSB6ZXJvLWluaXRpYWxpemVkIHVwb24gYWxsb2NhdGlvbiBvciBkZWNsYXJhdGlvbiAoZS5nLiwgdXNpbmcgYGt6YWxsb2Nfb2JqYCBvciBkZXNpZ25hdGVkIGluaXRpYWxpemVycykuXFxuMi4gVGhlIGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgZnJvbSBCUEYgcHJvZ3JhbXMgKGBzdHJ1Y3QgYnBmX2tzb2NrX2NyZWF0ZV9vcHRzYCwgYHVuaW9uIGJwZl9rc29ja19hZGRyYCwgYW5kIHRoZSBzZW5kIGJ1ZmZlcikgYXJlIHZhbGlkYXRlZCBmb3Igc2l6ZSBieSB0aGUga2Z1bmMgd3JhcHBlcnMuIFRoZSBCUEYgdmVyaWZpZXIgZW5mb3JjZXMgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciB0aGVzZSBhcmd1bWVudHMgYmVmb3JlIHRoZXkgYXJlIHBhc3NlZCB0byB0aGUga2Z1bmNzLiBGdXJ0aGVybW9yZSwgS01TQU4gdW5wb2lzb25zIEJQRiBzdGFjayBhbmQgbWFwIG1lbW9yeSBieSBkZXNpZ24gc2luY2UgaXQgY2Fubm90IHRyYWNrIEpJVHRlZCBCUEYgZXhlY3V0aW9uLCBtZWFuaW5nIEtNU0FOIHdvdWxkIG5vdCBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgb3JpZ2luYXRpbmcgZnJvbSB0aGUgQlBGIHByb2dyYW0gaXRzZWxmLlxcbjMuIFRoZSByZWZhY3RvcmluZyBvZiBgY29ubmVjdF9zb2NrZXRgIG1lcmVseSBleHRyYWN0cyBleGlzdGluZyBsb2dpYyB3aXRob3V0IGNoYW5naW5nIGhvdyBzb2NrZXQgYWRkcmVzc2VzIGFyZSBoYW5kbGVkIG9yIGNvcGllZC5cXG40LiBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCB0aGUgZGF0YSBzZW50IG92ZXIgdGhlIHNvY2tldCBvcmlnaW5hdGVzIGZyb20gdGhlIEJQRiBwcm9ncmFtLlxcblxcbkFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzLCB3aGljaCBhcmUgZnVsbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgc3RhbmRhcmQgYnVnIGRldGVjdG9ycy4gVGhlcmUgaXMgbm8gZXhwb3NlZCByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow5x2xm[1] Phase: Succeeded StartedAt: 2026-08-13 12:20:10 +0000 UTC FinishedAt: 2026-08-13 12:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-13 12:20:10 +0000 UTC FinishedAt: 2026-08-13 12:20:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[2] Phase: Running StartedAt: 2026-08-13 12:20:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-13 12:20:10 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-13 12:20:10 +0000 UTC FinishedAt: 2026-08-13 12:20:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-13 12:20:10 +0000 UTC FinishedAt: 2026-08-13 12:20:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5x2xm/series-workflow5x2xm-convert-artifact-391302988/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-13 12:20:20 +0000 UTC FinishedAt: 2026-08-13 12:38:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-13 12:20:20 +0000 UTC FinishedAt: 2026-08-13 12:38:35 +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:*f66d51e9-632b-4468-92f3-b81edb4c3d10,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-workflow5x2xm/series-workflow5x2xm-convert-artifact-391302988/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": "cc9a6021-5f65-4f35-bec7-76c37313256a", "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-workflow5x2xm/series-workflow5x2xm-build-action-220253562/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-13 12:20:20 +0000 UTC FinishedAt: 2026-08-13 12:38:25 +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:*f66d51e9-632b-4468-92f3-b81edb4c3d10,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-workflow5x2xm/series-workflow5x2xm-convert-artifact-391302988/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": "cc9a6021-5f65-4f35-bec7-76c37313256a", "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-workflow5x2xm/series-workflow5x2xm-build-action-220253562/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-13 12:38:35 +0000 UTC FinishedAt: 2026-08-13 12:38:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-13 12:38:35 +0000 UTC FinishedAt: 2026-08-13 12:38:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-13 12:38:35 +0000 UTC FinishedAt: 2026-08-13 12:38:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-13 12:38:35 +0000 UTC FinishedAt: 2026-08-13 12:38:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5x2xm/series-workflow5x2xm-convert-artifact-53021835/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Running StartedAt: 2026-08-13 12:38:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5x2xm[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["bpf","net"],"focus_symbols":["bpf_ksock_create","bpf_ksock_connect","bpf_ksock_acquire","bpf_ksock_release","bpf_ksock_send","connect_socket","bpf_ksock_release_dtor"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"3a59f11e0f989bdd637c87151992605a6559a7cb","config_name":"upstream-apparmor-kasan.config","enable_configs":["INET","BPF_SYSCALL","DEBUG_INFO_BTF","BPF_LSM"],"series_id":"f2a576c7-abfd-4479-884e-7a5ea562946e","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Running StartedAt: 2026-08-13 12:38:46 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cc9a6021-5f65-4f35-bec7-76c37313256a,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-workflow5x2xm/series-workflow5x2xm-build-action-220253562/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil