Name: series-workflow6ql2t Phase: Running StartedAt: 2026-08-25 04:51:36 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[0] Phase: Succeeded StartedAt: 2026-08-25 04:51:36 +0000 UTC FinishedAt: 2026-08-25 05:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[0].run-triage Phase: Succeeded StartedAt: 2026-08-25 04:51:36 +0000 UTC FinishedAt: 2026-08-25 05:07:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "70ff9f9ec393d5be1d5bea709d3b105ad4233a7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "70ff9f9ec393d5be1d5bea709d3b105ad4233a7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE" ], "series_id": "092c4c43-e7c2-4385-a65a-681ee2b037d7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_compact_pages", "zone_effective_free_pages", "compaction_zonelist_suitable", "wakeup_kswapd", "wakeup_kcompactd", "kswapd_try_clear_hopeless" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDt6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUmIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7LAogICAgJiMzNDt3YWtldXBfa2NvbXBhY3RkJiMzNDssCiAgICAmIzM0O2tzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGhldXJpc3RpY3MsIHN1Y2ggYXMgZnJhZ21lbnRhdGlvbiBzY29yaW5nIGFuZCBlZmZlY3RpdmUgZnJlZSBwYWdlcyBjYWxjdWxhdGlvbiBmb3IgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzIGluIHdhdGVybWFyayBjYWxjdWxhdGlvbnMgb3IgdGhlIGBkZWZyYWdfbW9kZSBcdTAwMjYgb3JkZXJgIGJpdHdpc2Ugb3BlcmF0aW9uKSB3b3VsZCByZXN1bHQgaW4gcGVyZm9ybWFuY2UgaXNzdWVzLCBPT01zLCBvciBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnIHRvb2xzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB0aGF0IHJlcXVpcmVzIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmJmOTE2ZGQ0YmEwNmJmNWFjNzY4ZDdiMDQzYmM1Y2M0ZDRmOWU1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA1OjA1OjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggYTA0OTQxNTUxMmM2Ny4uMjliZTcyNTk3NDE1NiAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiBcbkBAIC04MSw2ICYjNDM7ODIsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgY29tcGFjdF9ocGFnZV9vcmRlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xuJiM0MztcbiYjNDM7XHRpZiAob3JkZXJzKVxuJiM0MztcdFx0cmV0dXJuIF9fZmZzKG9yZGVycyk7XG4mIzQzO1x0cmV0dXJuIENPTVBBQ1RJT05fSFBBR0VfT1JERVI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuIHtcbiBcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XG5AQCAtODI3LDYgJiM0Mzs4MzcsMTIgQEAgc3RhdGljIGJvb2wgc2tpcF9pc29sYXRpb25fb25fb3JkZXIoaW50IG9yZGVyLCBpbnQgdGFyZ2V0X29yZGVyKVxuIFx0ICovXG4gXHRpZiAoIWlzX3ZpYV9jb21wYWN0X21lbW9yeSh0YXJnZXRfb3JkZXIpIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2U9IHRhcmdldF9vcmRlcilcbiBcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGFyZSBjb21wYWN0aW5nIGZvciBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uICovXG4mIzQzO1x0aWYgKGlzX3ZpYV9jb21wYWN0X21lbW9yeSh0YXJnZXRfb3JkZXIpIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2U9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBXZSBsaW1pdCBtZW1vcnkgY29tcGFjdGlvbiB0byBwYWdlYmxvY2tzIGFuZCB3b24mIzM5O3QgdHJ5XG4gXHQgKiBjcmVhdGluZyBmcmVlIGJsb2NrcyBvZiBtZW1vcnkgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhhdC5cbkBAIC0yMjA4LDE2ICYjNDM7MjIyNCwxNiBAQCBzdGF0aWMgYm9vbCBrc3dhcGRfaXNfcnVubmluZyhwZ19kYXRhX3QgKnBnZGF0KVxuIFxuIC8qXG4gICogQSB6b25lJiMzOTtzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb24gd3J0IHRvIHRoZVxuLSAqIENPTVBBQ1RJT05fSFBBR0VfT1JERVIuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4mIzQzOyAqIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKS4gSXQgcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS5cbiAgKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4tXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgQ09NUEFDVElPTl9IUEFHRV9PUkRFUik7XG4mIzQzO1x0cmV0dXJuIGV4dGZyYWdfZm9yX29yZGVyKHpvbmUsIG9yZGVyKTtcbiB9XG4gXG4gLypcbiAgKiBBIHdlaWdodGVkIHpvbmUmIzM5O3MgZnJhZ21lbnRhdGlvbiBzY29yZSBpcyB0aGUgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvblxuLSAqIHdydCB0byB0aGUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUiBzY2FsZWQgYnkgdGhlIHpvbmUmIzM5O3Mgc2l6ZS4gSXRcbiYjNDM7ICogd3J0IHRvIHRoZSBjb21wYWN0X2hwYWdlX29yZGVyKCkgc2NhbGVkIGJ5IHRoZSB6b25lJiMzOTtzIHNpemUuIEl0XG4gICogcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS5cbiAgKlxuICAqIFRoZSBzY2FsaW5nIGZhY3RvciBlbnN1cmVzIHRoYXQgcHJvYWN0aXZlIGNvbXBhY3Rpb24gZm9jdXNlcyBvbiBsYXJnZXJcbkBAIC0yMjI1LDExICYjNDM7MjI0MSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiAgKiBaT05FX0RNQTMyLiBGb3Igc21hbGxlciB6b25lcywgdGhlIHNjb3JlIHZhbHVlIHJlbWFpbnMgY2xvc2UgdG8gemVybyxcbiAgKiBhbmQgdGh1cyBuZXZlciBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZCBmb3IgcHJvYWN0aXZlIGNvbXBhY3Rpb24uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzY29yZTtcbiBcbi1cdHNjb3JlID0gem9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzICogZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHpvbmUpO1xuJiM0MztcdHNjb3JlID0gem9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzICogZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHpvbmUsIG9yZGVyKTtcbiBcdHJldHVybiBkaXY2NF91bChzY29yZSwgem9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZW5vZGVfcHJlc2VudF9wYWdlcyAmIzQzOyAxKTtcbiB9XG4gXG5AQCAtMjI0MCw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKVxuICAqIHRoZSBub2RlJiMzOTtzIHNjb3JlIGZhbGxzIGJlbG93IHRoZSBsb3cgdGhyZXNob2xkLCBvciBvbmUgb2YgdGhlIGJhY2stb2ZmXG4gICogY29uZGl0aW9ucyBpcyBtZXQuXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHVuc2lnbmVkIGludCBzY29yZSA9IDA7XG4gXHRpbnQgem9uZWlkO1xuQEAgLTIyNTEsNyAmIzQzOzIyNjcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ19kYXRhX3QgKnBnZGF0KVxuIFx0XHR6b25lID0gXHUwMDI2cGdkYXQtXHUwMDNlbm9kZV96b25lc1t6b25laWRdO1xuIFx0XHRpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRzY29yZSAmIzQzOz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUpO1xuJiM0MztcdFx0c2NvcmUgJiM0Mzs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lLCBvcmRlcik7XG4gXHR9XG4gXG4gXHRyZXR1cm4gc2NvcmU7XG5AQCAtMjI2OSwxMiAmIzQzOzIyODUsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3dtYXJrKGJvb2wgbG93KVxuIHN0YXRpYyBib29sIHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4ge1xuIFx0aW50IHdtYXJrX2hpZ2g7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xuIFxuIFx0aWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpO1xuLVx0cmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCkgXHUwMDNlIHdtYXJrX2hpZ2g7XG4mIzQzO1x0cmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpIFx1MDAzZSB3bWFya19oaWdoO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBfX2NvbXBhY3RfZmluaXNoZWQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG5AQCAtMjMwNiwxMiAmIzQzOzIzMjMsMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgX19jb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuIFx0aWYgKGNjLVx1MDAzZXByb2FjdGl2ZV9jb21wYWN0aW9uKSB7XG4gXHRcdGludCBzY29yZSwgd21hcmtfbG93O1xuIFx0XHRwZ19kYXRhX3QgKnBnZGF0O1xuJiM0MztcdFx0Ym9vbCBjb3N0bHkgPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuIFxuIFx0XHRwZ2RhdCA9IGNjLVx1MDAzZXpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbi1cdFx0aWYgKGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiYjNDM7XHRcdGlmIChjb3N0bHkgXHUwMDI2XHUwMDI2IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiBcdFx0XHRyZXR1cm4gQ09NUEFDVF9QQVJUSUFMX1NLSVBQRUQ7XG4gXG4tXHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLVx1MDAzZXpvbmUpO1xuJiM0MztcdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtXHUwMDNlem9uZSwgY29tcGFjdF9ocGFnZV9vcmRlcigpKTtcbiBcdFx0d21hcmtfbG93ID0gZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayh0cnVlKTtcbiBcbiBcdFx0aWYgKHNjb3JlIFx1MDAzZSB3bWFya19sb3cpXG5AQCAtMjUxMCw2ICYjNDM7MjUyOCwzOCBAQCBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXJcbiYjNDM7ICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXG4mIzQzOyAqIEBvcmRlcjogICAgICBhbGxvY2F0aW9uIG9yZGVyXG4mIzQzOyAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1NcbiYjNDM7ICpcbiYjNDM7ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUgYmxvY2tzIHRvIGF2b2lkXG4mIzQzOyAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaFxuJiM0MzsgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXNcbiYjNDM7ICogaW4gYmxvY2tzIFx1MDAzZT0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFBcbiYjNDM7ICogYWxsb2NhdGlvbnMuXG4mIzQzOyAqL1xuJiM0Mzt1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdFx0XHRib29sIHVzZV9ibG9ja3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAodXNlX2Jsb2NrcylcbiYjNDM7XHRcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpO1xuJiM0MztcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcdTAwMjZcdTAwMjYgb3JkZXIgPT0gY29tcGFjdF9ocGFnZV9vcmRlcigpKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoaW50IG8gPSBvcmRlcjsgbyBcdTAwM2MgTlJfUEFHRV9PUkRFUlM7IG8mIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRmcmVlX3BhZ2VzICYjNDM7PSB6b25lLVx1MDAzZWZyZWVfYXJlYVtvXS5ucl9mcmVlIFx1MDAzY1x1MDAzYyBvO1xuJiM0MztcdFx0cmV0dXJuIGZyZWVfcGFnZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogU2hvdWxkIHdlIGRvIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBhbGxvY2F0aW9uIG9yZGVyLlxuICAqIFJldHVybiBDT01QQUNUX1NVQ0NFU1MgaWYgYWxsb2NhdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGNhbiBiZSBhbHJlYWR5XG5AQCAtMjUyNSwxMCAmIzQzOzI1NzUsOCBAQCBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XG4gXG4tXHRpZiAoa2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSlcbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XG4tXHRlbHNlXG4tXHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4mIzQzO1x0ZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAga2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSk7XG4gXG4gXHR3YXRlcm1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSyk7XG4gXHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgd2F0ZXJtYXJrLCBoaWdoZXN0X3pvbmVpZHgsXG5AQCAtMzIzOCwxMCAmIzQzOzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdFx0dGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcbiBcdFx0aWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkge1xuIFx0XHRcdHVuc2lnbmVkIGludCBwcmV2X3Njb3JlLCBzY29yZTtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xuIFxuLVx0XHRcdHByZXZfc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpO1xuJiM0MztcdFx0XHRwcmV2X3Njb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XG4gXHRcdFx0Y29tcGFjdF9ub2RlKHBnZGF0LCB0cnVlKTtcbi1cdFx0XHRzY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7XG4mIzQzO1x0XHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBEZWZlciBwcm9hY3RpdmUgY29tcGFjdGlvbiBpZiB0aGUgZnJhZ21lbnRhdGlvblxuIFx0XHRcdCAqIHNjb3JlIGRpZCBub3QgZ28gZG93biBpLmUuIG5vIHByb2dyZXNzIG1hZGUuXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjE0YmI5NTQzODc5YjQgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTY1NCw0ICYjNDM7MTY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3Vuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdFx0XHRcdGJvb2wgdXNlX2Jsb2Nrcyk7XG4gI2VuZGlmXHQvKiBfX01NX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li5hNDE5YTJjMmZjYTQwIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNjk2Niw3ICYjNDM7Njk2Niw2IEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiBcdCAqIG1lZXQgd2F0ZXJtYXJrcy5cbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBoaWdoZXN0X3pvbmVpZHgpIHtcbi1cdFx0ZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtO1xuIFx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7XG4gXG4gXHRcdGlmIChzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcdTAwMjYgTlVNQV9CQUxBTkNJTkdfTUVNT1JZX1RJRVJJTkcpXG5AQCAtNjk3NCwyMSAmIzQzOzY5NzMsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdGVsc2VcbiBcdFx0XHRtYXJrID0gaGlnaF93bWFya19wYWdlcyh6b25lKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGVcbi1cdFx0ICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLlxuLVx0XHQgKlxuLVx0XHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXG4tXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzXG4tXHRcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXG4tXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi1cdFx0ICogYmFzZSBwYWdlcyBmb3IgY29tcGFjdGlvbiwgd2FrZSBrY29tcGFjdGQgXHUwMDI2IHNsZWVwLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGRlZnJhZ19tb2RlIFx1MDAyNlx1MDAyNiBvcmRlcilcbi1cdFx0XHRpdGVtID0gTlJfRlJFRV9QQUdFU19CTE9DS1M7XG4tXHRcdGVsc2Vcbi1cdFx0XHRpdGVtID0gTlJfRlJFRV9QQUdFUztcbi1cbiBcdFx0LypcbiBcdFx0ICogV2hlbiB0aGVyZSBpcyBhIGhpZ2ggbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbSxcbiBcdFx0ICogdGhlIGN1bXVsYXRpdmUgZXJyb3IgZnJvbSB0aGUgdm1zdGF0IHBlci1jcHUgY2FjaGVcbkBAIC03MDAxLDkgJiM0Mzs2OTg1LDEyIEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiBcdFx0ICogY291bnRlciB3b24mIzM5O3QgYWN0dWFsbHkgYmUgcGVyLWNwdSBjYWNoZWQuIEJ1dCBrZWVwXG4gXHRcdCAqIHRoaW5ncyBzaW1wbGUgZm9yIG5vdzsgcmV2aXNpdCB3aGVuIHNvbWVib2R5IGNhcmVzLlxuIFx0XHQgKi9cbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBpdGVtKTtcbiYjNDM7XHRcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgZGVmcmFnX21vZGUgXHUwMDI2IG9yZGVyKTtcbiBcdFx0aWYgKHpvbmUtXHUwMDNlcGVyY3B1X2RyaWZ0X21hcmsgXHUwMDI2XHUwMDI2IGZyZWVfcGFnZXMgXHUwMDNjIHpvbmUtXHUwMDNlcGVyY3B1X2RyaWZ0X21hcmspXG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBpdGVtKTtcbiYjNDM7XHRcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLFxuJiM0MztcdFx0XHRcdFx0ZGVmcmFnX21vZGUgXHUwMDI2IG9yZGVyID9cbiYjNDM7XHRcdFx0XHRcdE5SX0ZSRUVfUEFHRVNfQkxPQ0tTIDogTlJfRlJFRV9QQUdFUyk7XG4gXG4gXHRcdGlmIChfX3pvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCBtYXJrLCBoaWdoZXN0X3pvbmVpZHgsXG4gXHRcdFx0XHRcdDAsIGZyZWVfcGFnZXMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2NvbXBhY3RfcGFnZXMmIzM0OywKICAgICYjMzQ7em9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlJiMzNDssCiAgICAmIzM0O3dha2V1cF9rc3dhcGQmIzM0OywKICAgICYjMzQ7d2FrZXVwX2tjb21wYWN0ZCYjMzQ7LAogICAgJiMzNDtrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gbG9naWMgdG8gc3VwcG9ydCBtdWx0aS1zaXplIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKG1USFApLiBJdCBpbnRyb2R1Y2VzIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCB0byBjYWxjdWxhdGUgZnJlZSBwYWdlcyByZWxldmFudCB0byB0aGUgYWxsb2NhdGlvbiBvcmRlciBhbmQgdXBkYXRlcyBjb21wYWN0aW9uIHN1aXRhYmlsaXR5IGNoZWNrcywgZnJhZ21lbnRhdGlvbiBzY29yaW5nLCBhbmQga2NvbXBhY3RkL2tzd2FwZCBiZWhhdmlvciB0byB1c2UgdGhlIG5ldyBgY29tcGFjdF9ocGFnZV9vcmRlcigpYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyYmY5MTZkZDRiYTA2YmY1YWM3NjhkN2IwNDNiYzVjYzRkNGY5ZTU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDU6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmMKaW5kZXggYTA0OTQxNTUxMmM2Ny4uMjliZTcyNTk3NDE1NiAxMDA2NDQKLS0tIGEvbW0vY29tcGFjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlX293bmVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1c2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2h1Z2VfbW0uaCZndDsKICNpbmNsdWRlICYjMzQ7cGFnZV9hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAKQEAgLTgxLDYgJiM0Mzs4MiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH0KICNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUgkoUE1EX1NISUZUIC0gUEFHRV9TSElGVCkKICNlbmRpZgogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgY29tcGFjdF9ocGFnZV9vcmRlcih2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpOwomIzQzOwomIzQzOwlpZiAob3JkZXJzKQomIzQzOwkJcmV0dXJuIF9fZmZzKG9yZGVycyk7CiYjNDM7CXJldHVybiBDT01QQUNUSU9OX0hQQUdFX09SREVSOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbWFya19hbGxvY2F0ZWRfbm9wcm9mKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncykKIHsKIAlwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIF9fR0ZQX01PVkFCTEUsIEFMTE9DX0RFRkFVTFQpOwpAQCAtODI3LDYgJiM0Mzs4MzcsMTIgQEAgc3RhdGljIGJvb2wgc2tpcF9pc29sYXRpb25fb25fb3JkZXIoaW50IG9yZGVyLCBpbnQgdGFyZ2V0X29yZGVyKQogCSAqLwogCWlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgJmFtcDsmYW1wOyBvcmRlciAmZ3Q7PSB0YXJnZXRfb3JkZXIpCiAJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBXZSBhcmUgY29tcGFjdGluZyBmb3IgbXVsdGktc2l6ZSBUSFAgYWxsb2NhdGlvbiAqLwomIzQzOwlpZiAoaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgJmFtcDsmYW1wOyBvcmRlciAmZ3Q7PSBjb21wYWN0X2hwYWdlX29yZGVyKCkgJmFtcDsmYW1wOwomIzQzOwkgICAgUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwogCS8qCiAJICogV2UgbGltaXQgbWVtb3J5IGNvbXBhY3Rpb24gdG8gcGFnZWJsb2NrcyBhbmQgd29uJiMzOTt0IHRyeQogCSAqIGNyZWF0aW5nIGZyZWUgYmxvY2tzIG9mIG1lbW9yeSB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGF0LgpAQCAtMjIwOCwxNiAmIzQzOzIyMjQsMTYgQEAgc3RhdGljIGJvb2wga3N3YXBkX2lzX3J1bm5pbmcocGdfZGF0YV90ICpwZ2RhdCkKIAogLyoKICAqIEEgem9uZSYjMzk7cyBmcmFnbWVudGF0aW9uIHNjb3JlIGlzIHRoZSBleHRlcm5hbCBmcmFnbWVudGF0aW9uIHdydCB0byB0aGUKLSAqIENPTVBBQ1RJT05fSFBBR0VfT1JERVIuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uCiYjNDM7ICogY29tcGFjdF9ocGFnZV9vcmRlcigpLiBJdCByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFswLCAxMDBdLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKQogewotCXJldHVybiBleHRmcmFnX2Zvcl9vcmRlcih6b25lLCBDT01QQUNUSU9OX0hQQUdFX09SREVSKTsKJiM0MzsJcmV0dXJuIGV4dGZyYWdfZm9yX29yZGVyKHpvbmUsIG9yZGVyKTsKIH0KIAogLyoKICAqIEEgd2VpZ2h0ZWQgem9uZSYjMzk7cyBmcmFnbWVudGF0aW9uIHNjb3JlIGlzIHRoZSBleHRlcm5hbCBmcmFnbWVudGF0aW9uCi0gKiB3cnQgdG8gdGhlIENPTVBBQ1RJT05fSFBBR0VfT1JERVIgc2NhbGVkIGJ5IHRoZSB6b25lJiMzOTtzIHNpemUuIEl0CiYjNDM7ICogd3J0IHRvIHRoZSBjb21wYWN0X2hwYWdlX29yZGVyKCkgc2NhbGVkIGJ5IHRoZSB6b25lJiMzOTtzIHNpemUuIEl0CiAgKiByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFswLCAxMDBdLgogICoKICAqIFRoZSBzY2FsaW5nIGZhY3RvciBlbnN1cmVzIHRoYXQgcHJvYWN0aXZlIGNvbXBhY3Rpb24gZm9jdXNlcyBvbiBsYXJnZXIKQEAgLTIyMjUsMTEgJiM0MzsyMjQxLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHN0cnVjdCB6b25lICp6b25lKQogICogWk9ORV9ETUEzMi4gRm9yIHNtYWxsZXIgem9uZXMsIHRoZSBzY29yZSB2YWx1ZSByZW1haW5zIGNsb3NlIHRvIHplcm8sCiAgKiBhbmQgdGh1cyBuZXZlciBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZCBmb3IgcHJvYWN0aXZlIGNvbXBhY3Rpb24uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBzY29yZTsKIAotCXNjb3JlID0gem9uZS0mZ3Q7cHJlc2VudF9wYWdlcyAqIGZyYWdtZW50YXRpb25fc2NvcmVfem9uZSh6b25lKTsKJiM0MzsJc2NvcmUgPSB6b25lLSZndDtwcmVzZW50X3BhZ2VzICogZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHpvbmUsIG9yZGVyKTsKIAlyZXR1cm4gZGl2NjRfdWwoc2NvcmUsIHpvbmUtJmd0O3pvbmVfcGdkYXQtJmd0O25vZGVfcHJlc2VudF9wYWdlcyAmIzQzOyAxKTsKIH0KIApAQCAtMjI0MCw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKQogICogdGhlIG5vZGUmIzM5O3Mgc2NvcmUgZmFsbHMgYmVsb3cgdGhlIGxvdyB0aHJlc2hvbGQsIG9yIG9uZSBvZiB0aGUgYmFjay1vZmYKICAqIGNvbmRpdGlvbnMgaXMgbWV0LgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ19kYXRhX3QgKnBnZGF0KQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAl1bnNpZ25lZCBpbnQgc2NvcmUgPSAwOwogCWludCB6b25laWQ7CkBAIC0yMjUxLDcgJiM0MzsyMjY3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCkKIAkJem9uZSA9ICZhbXA7cGdkYXQtJmd0O25vZGVfem9uZXNbem9uZWlkXTsKIAkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKIAkJCWNvbnRpbnVlOwotCQlzY29yZSAmIzQzOz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUpOwomIzQzOwkJc2NvcmUgJiM0Mzs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lLCBvcmRlcik7CiAJfQogCiAJcmV0dXJuIHNjb3JlOwpAQCAtMjI2OSwxMiAmIzQzOzIyODUsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3dtYXJrKGJvb2wgbG93KQogc3RhdGljIGJvb2wgc2hvdWxkX3Byb2FjdGl2ZV9jb21wYWN0X25vZGUocGdfZGF0YV90ICpwZ2RhdCkKIHsKIAlpbnQgd21hcmtfaGlnaDsKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpOwogCiAJaWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJd21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpOwotCXJldHVybiBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpICZndDsgd21hcmtfaGlnaDsKJiM0MzsJcmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpICZndDsgd21hcmtfaGlnaDsKIH0KIAogc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgX19jb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKQpAQCAtMjMwNiwxMiAmIzQzOzIzMjMsMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgX19jb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKQogCWlmIChjYy0mZ3Q7cHJvYWN0aXZlX2NvbXBhY3Rpb24pIHsKIAkJaW50IHNjb3JlLCB3bWFya19sb3c7CiAJCXBnX2RhdGFfdCAqcGdkYXQ7CiYjNDM7CQlib29sIGNvc3RseSA9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSAmZ3Q7IFBBR0VfQUxMT0NfQ09TVExZX09SREVSOwogCiAJCXBnZGF0ID0gY2MtJmd0O3pvbmUtJmd0O3pvbmVfcGdkYXQ7Ci0JCWlmIChrc3dhcGRfaXNfcnVubmluZyhwZ2RhdCkpCiYjNDM7CQlpZiAoY29zdGx5ICZhbXA7JmFtcDsga3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKQogCQkJcmV0dXJuIENPTVBBQ1RfUEFSVElBTF9TS0lQUEVEOwogCi0JCXNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLSZndDt6b25lKTsKJiM0MzsJCXNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLSZndDt6b25lLCBjb21wYWN0X2hwYWdlX29yZGVyKCkpOwogCQl3bWFya19sb3cgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3dtYXJrKHRydWUpOwogCiAJCWlmIChzY29yZSAmZ3Q7IHdtYXJrX2xvdykKQEAgLTI1MTAsNiAmIzQzOzI1MjgsMzggQEAgYm9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLAogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMgLSBnZXQgZnJlZSBwYWdlcyByZWxldmFudCB0byBhbGxvY2F0aW9uIG9yZGVyCiYjNDM7ICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lCiYjNDM7ICogQG9yZGVyOiAgICAgIGFsbG9jYXRpb24gb3JkZXIKJiM0MzsgKiBAdXNlX2Jsb2NrczogaWYgdHJ1ZSwgdXNlIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTCiYjNDM7ICoKJiM0MzsgKiBJbiBkZWZyYWdfbW9kZSwgd2F0ZXJtYXJrcyBtdXN0IGJlIG1ldCBpbiB3aG9sZSBibG9ja3MgdG8gYXZvaWQKJiM0MzsgKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2gKJiM0MzsgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LgomIzQzOyAqCiYjNDM7ICogV2hlbiBtVEhQIGFsd2F5cy1lbmFibGVkIG9yZGVycyBhcmUgY29uZmlndXJlZCwgY291bnQgb25seSBmcmVlIHBhZ2VzCiYjNDM7ICogaW4gYmxvY2tzICZndDs9IG1pbiBtVEhQIG9yZGVyLCBhcyBzbWFsbGVyIGZyYWdtZW50cyBjYW5ub3Qgc2F0aXNmeSBtVEhQCiYjNDM7ICogYWxsb2NhdGlvbnMuCiYjNDM7ICovCiYjNDM7dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLAomIzQzOwkJCQkJdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJCQkJYm9vbCB1c2VfYmxvY2tzKQomIzQzO3sKJiM0MzsJaWYgKHVzZV9ibG9ja3MpCiYjNDM7CQlyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTsKJiM0MzsKJiM0MzsJaWYgKFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykgJmFtcDsmYW1wOyBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcyA9IDA7CiYjNDM7CiYjNDM7CQlmb3IgKGludCBvID0gb3JkZXI7IG8gJmx0OyBOUl9QQUdFX09SREVSUzsgbyYjNDM7JiM0MzspCiYjNDM7CQkJZnJlZV9wYWdlcyAmIzQzOz0gem9uZS0mZ3Q7ZnJlZV9hcmVhW29dLm5yX2ZyZWUgJmx0OyZsdDsgbzsKJiM0MzsJCXJldHVybiBmcmVlX3BhZ2VzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CiYjNDM7fQomIzQzOwogLyoKICAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci4KICAqIFJldHVybiBDT01QQUNUX1NVQ0NFU1MgaWYgYWxsb2NhdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGNhbiBiZSBhbHJlYWR5CkBAIC0yNTI1LDEwICYjNDM7MjU3NSw4IEBAIGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJdW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzOwogCXVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrOwogCi0JaWYgKGtjb21wYWN0ZCAmYW1wOyZhbXA7IGRlZnJhZ19tb2RlKQotCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTsKLQllbHNlCi0JCWZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CiYjNDM7CWZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLAomIzQzOwkJCQkJICAgICAgIGtjb21wYWN0ZCAmYW1wOyZhbXA7IGRlZnJhZ19tb2RlKTsKIAogCXdhdGVybWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX1dNQVJLX01BU0spOwogCWlmIChfX3pvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCB3YXRlcm1hcmssIGhpZ2hlc3Rfem9uZWlkeCwKQEAgLTMyMzgsMTAgJiM0MzszMjg2LDExIEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApCiAJCXRpbWVvdXQgPSBkZWZhdWx0X3RpbWVvdXQ7CiAJCWlmIChzaG91bGRfcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZShwZ2RhdCkpIHsKIAkJCXVuc2lnbmVkIGludCBwcmV2X3Njb3JlLCBzY29yZTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wYWN0X2hwYWdlX29yZGVyKCk7CiAKLQkJCXByZXZfc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpOwomIzQzOwkJCXByZXZfc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQsIG9yZGVyKTsKIAkJCWNvbXBhY3Rfbm9kZShwZ2RhdCwgdHJ1ZSk7Ci0JCQlzY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7CiYjNDM7CQkJc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQsIG9yZGVyKTsKIAkJCS8qCiAJCQkgKiBEZWZlciBwcm9hY3RpdmUgY29tcGFjdGlvbiBpZiB0aGUgZnJhZ21lbnRhdGlvbgogCQkJICogc2NvcmUgZGlkIG5vdCBnbyBkb3duIGkuZS4gbm8gcHJvZ3Jlc3MgbWFkZS4KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLjE0YmI5NTQzODc5YjQgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMTY1NCw0ICYjNDM7MTY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0Mzt1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJCQlib29sIHVzZV9ibG9ja3MpOwogI2VuZGlmCS8qIF9fTU1fSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li5hNDE5YTJjMmZjYTQwIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNjk2Niw3ICYjNDM7Njk2Niw2IEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkgKiBtZWV0IHdhdGVybWFya3MuCiAJICovCiAJZm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBoaWdoZXN0X3pvbmVpZHgpIHsKLQkJZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtOwogCQl1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7CiAKIAkJaWYgKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlICZhbXA7IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKQpAQCAtNjk3NCwyMSAmIzQzOzY5NzMsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpCiAJCWVsc2UKIAkJCW1hcmsgPSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpOwogCi0JCS8qCi0JCSAqIEluIGRlZnJhZ19tb2RlLCB3YXRlcm1hcmtzIG11c3QgYmUgbWV0IGluIHdob2xlCi0JCSAqIGJsb2NrcyB0byBhdm9pZCBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4KLQkJICoKLQkJICogSG93ZXZlciwga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2ggdGhpcyBvbgotCQkgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7cwotCQkgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZQotCQkgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoCi0JCSAqIGJhc2UgcGFnZXMgZm9yIGNvbXBhY3Rpb24sIHdha2Uga2NvbXBhY3RkICZhbXA7IHNsZWVwLgotCQkgKi8KLQkJaWYgKGRlZnJhZ19tb2RlICZhbXA7JmFtcDsgb3JkZXIpCi0JCQlpdGVtID0gTlJfRlJFRV9QQUdFU19CTE9DS1M7Ci0JCWVsc2UKLQkJCWl0ZW0gPSBOUl9GUkVFX1BBR0VTOwotCiAJCS8qCiAJCSAqIFdoZW4gdGhlcmUgaXMgYSBoaWdoIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0sCiAJCSAqIHRoZSBjdW11bGF0aXZlIGVycm9yIGZyb20gdGhlIHZtc3RhdCBwZXItY3B1IGNhY2hlCkBAIC03MDAxLDkgJiM0Mzs2OTg1LDEyIEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkJICogY291bnRlciB3b24mIzM5O3QgYWN0dWFsbHkgYmUgcGVyLWNwdSBjYWNoZWQuIEJ1dCBrZWVwCiAJCSAqIHRoaW5ncyBzaW1wbGUgZm9yIG5vdzsgcmV2aXNpdCB3aGVuIHNvbWVib2R5IGNhcmVzLgogCQkgKi8KLQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBpdGVtKTsKJiM0MzsJCWZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLAomIzQzOwkJCQkJCSAgICAgICBkZWZyYWdfbW9kZSAmYW1wOyBvcmRlcik7CiAJCWlmICh6b25lLSZndDtwZXJjcHVfZHJpZnRfbWFyayAmYW1wOyZhbXA7IGZyZWVfcGFnZXMgJmx0OyB6b25lLSZndDtwZXJjcHVfZHJpZnRfbWFyaykKLQkJCWZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgaXRlbSk7CiYjNDM7CQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLAomIzQzOwkJCQkJZGVmcmFnX21vZGUgJmFtcDsgb3JkZXIgPwomIzQzOwkJCQkJTlJfRlJFRV9QQUdFU19CTE9DS1MgOiBOUl9GUkVFX1BBR0VTKTsKIAogCQlpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWFyaywgaGlnaGVzdF96b25laWR4LAogCQkJCQkwLCBmcmVlX3BhZ2VzKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgaW50cm9kdWNpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIHdvcnRoeSBvZiBmdXp6aW5nIGF0dGVudGlvbi4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG1tL2NvbXBhY3Rpb24uY2AsIGBtbS9pbnRlcm5hbC5oYCwgYW5kIGBtbS92bXNjYW4uY2AgYXJlIGEgY2xlYXIgc2lnbmFsLiBTcGVjaWZpY2FsbHksIGludHJvZHVjaW5nIGBjb21wYWN0X2hwYWdlX29yZGVyKClgIHdpdGggaXRzIHVzZSBvZiBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIGZvciBjb21wYWN0aW9uIG9yZGVyIHNlbGVjdGlvbiBpcyBhIGtleSBhcmVhLiBUaGUgY2hhbmdlcyBpbXBhY3RpbmcgZnVuY3Rpb25zIGxpa2UgYHNraXBfaXNvbGF0aW9uX29uX29yZGVyYCwgYGZyYWdtZW50YXRpb25fc2NvcmVfem9uZWAsIGBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWRgLCBldGMuLCBhbGwgcG9pbnQgdG8gZnVuZGFtZW50YWwgc2hpZnRzIGluIGhvdyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgVk0gc2Nhbm5pbmcgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gVGhlIGZhY3QgdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBldmVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyByZWluZm9yY2VzIHRoZSB1cmdlbmN5IG9mIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgcHJpbWUgZnV6emluZyB0YXJnZXRzLiBgY29tcGFjdF9ocGFnZV9vcmRlcmAgaXMgaW5saW5lLCBzbyB3aGlsZSBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMsIGl0JiMzOTtzIGxlc3MgZGlyZWN0IGFzIGEgZnV6emluZyBlbnRyeSBwb2ludC4gTG9va2luZyBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIEkgc2VlOgoKKiAgIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYDogVGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlLCBnaXZlbiBpdHMgaW50cm9kdWN0aW9uIGFuZCB1c2FnZS4KKiAgIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmA6IFRoaXMgbG9va3MgcHJvbWlzaW5nIHRvbywgYnV0IHdhaXQuLi4gaXQmIzM5O3MgY2FsbGVkIGZyb20gYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIChub24tc3RhdGljKSBhbmQgYGNvbXBhY3Rfem9uZWAgKHN0YXRpYykuIFRoYXQgbWVhbnMgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGlzIGEgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBmdXp6aW5nLCBhbmQgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgY29tcGFjdF96b25lYCB0b28uCiogICBga2NvbXBhY3RkYDogVGhpcyBpcyBhIGtlcm5lbCB0aHJlYWQsIHNvIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGNvbmN1cnJlbnQgZnV6emluZy4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBtbS9jb21wYWN0aW9uLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIGZvY3VzaW5nIG9uIHRoZSBleHBvcnRlZCAobm9uLXN0YXRpYykgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBpbnRlcmFjdCB3aXRoIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgYW5kIHRoZSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBnb2FsIGlzIHRvIG1heGltaXplIHRoZSBjaGFuY2Ugb2YgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBvciBvdGhlciBiZWhhdmlvcmFsIGFub21hbGllcyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKFthLXpfXSYjNDM7ICkmIzQzO3pvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTI0OTc9Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNTQ0LSAqL1xubW0vY29tcGFjdGlvbi5jOjI1NDU6dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxubW0vY29tcGFjdGlvbi5jLTI1NDYtXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9pbnRlcm5hbC5oPTE2MzQ9c3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbi0tXG5tbS9pbnRlcm5hbC5oLTE2NTYtXG5tbS9pbnRlcm5hbC5oOjE2NTc6dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxubW0vaW50ZXJuYWwuaC0xNjU4LVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgY29udGV4dDoKCioqQW5hbHl6aW5nIHRoZSBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIFZhcmlhYmxlKioKCkFscmlnaHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgLiBHaXZlbiB3aGF0IEkga25vdyBhYm91dCB0aGlzIHN5c3RlbSwgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6IHdoYXQgaXMgdGhlIGNvbnRleHQgb2YgdGhpcyB2YXJpYWJsZT8gSXMgaXQgYSBjb25maWd1cmF0aW9uIHNldHRpbmcsIGEgZmxhZyBpbiBhIGRhdGEgbW9kZWwsIG9yIHBlcmhhcHMgYSBjb25zdGFudCB1c2VkIGluIGEgc3BlY2lmaWMgY2FsY3VsYXRpb24gb3IgcnVsZT8gVGhlICYjMzQ7aHVnZSYjMzQ7IHBhcnQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgd2hpbGUgJiMzNDthbm9uJiMzNDsgaW1wbGllcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFub255bW91cyBvcmRlcnMsIGxpa2VseSBwb2ludGluZyB0byBzb21lIGludGVyZXN0aW5nIGRlc2lnbiBkZWNpc2lvbnMgYW5kIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCwgYW5kIHdoYXQgaXQgY29udHJvbHMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdzoKKiAgIFdoYXQgZG9lcyAmIzM0O2h1Z2UmIzM0OyBhY3R1YWxseSBtZWFuIGluIHRoaXMgc3lzdGVtPyBJcyBpdCBiYXNlZCBvbiBvcmRlciBzaXplLCB2YWx1ZSwgb3Igc29tZSBvdGhlciBtZXRyaWM/CiogICBXaHkgYXJlIHdlIGFsd2F5cyBkZWFsaW5nIHdpdGggaXQsIHdoYXQmIzM5O3MgdGhlIGxvZ2ljIGJlaGluZCB0aGUgJiMzNDthbHdheXMmIzM0OyBwYXJ0PwoqICAgQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNpZGUgZWZmZWN0cywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHNlY3VyaXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzPwoqICAgSG93IGRvZXMgdGhpcyB2YXJpYWJsZSBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kL29yIG90aGVyIGNvbmZpZ3VyYXRpb25zPyBJIGhhdmUgdG8gbG9vayBhdCB0aGUgc3lzdGVtIG92ZXJhbGwsIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyB0byBiZSBhYmxlIHRvIG1ha2UgaW5mb3JtZWQgZGVjaXNpb25zIGFuZCBwcmVkaWN0aW9ucy4KSSBuZWVkIHRvIGtub3cgKmV2ZXJ5dGhpbmcqIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGdvb2Qgb3IgYSBiYWQgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9hbm9uX29yZGVyc19hbHdheXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9MTg1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTg2OmV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg3LWV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMjA9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzI5LVx0aWYgKHR5cGUgIT0gVFZBX0ZPUkNFRF9DT0xMQVBTRSBcdTAwMjZcdTAwMjYgdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozMzA6XHRcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMzEtXG4tLVxubW0vY29tcGFjdGlvbi5jPTg1PXN0YXRpYyBpbmxpbmUgaW50IGNvbXBhY3RfaHBhZ2Vfb3JkZXIodm9pZClcbm1tL2NvbXBhY3Rpb24uYy04Ni17XG5tbS9jb21wYWN0aW9uLmM6ODc6XHR1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XG5tbS9jb21wYWN0aW9uLmMtODgtXG4tLVxubW0vY29tcGFjdGlvbi5jPTgyOT1zdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXG4tLVxubW0vY29tcGFjdGlvbi5jLTg0Mi1cdGlmIChpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNlPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDI2XHUwMDI2XG5tbS9jb21wYWN0aW9uLmM6ODQzOlx0ICAgIFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG5tbS9jb21wYWN0aW9uLmMtODQ0LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjU0NT11bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NTEtXG5tbS9jb21wYWN0aW9uLmM6MjU1MjpcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFx1MDAyNlx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcbm1tL2NvbXBhY3Rpb24uYy0yNTUzLVx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9ODc9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtODktXG5tbS9odWdlX21lbW9yeS5jOjkwOnVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbm1tL2h1Z2VfbWVtb3J5LmMtOTEtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX21hZHZpc2UgX19yZWFkX21vc3RseTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTY0MD1zdGF0aWMgc3NpemVfdCBhbm9uX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NjQ2Olx0aWYgKHRlc3RfYml0KG9yZGVyLCBcdTAwMjZodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG5tbS9odWdlX21lbW9yeS5jLTY0Ny1cdFx0b3V0cHV0ID0gXCYjMzQ7W2Fsd2F5c10gaW5oZXJpdCBtYWR2aXNlIG5ldmVyXCYjMzQ7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY2MC1cdHN0YXRpYyB1bnNpZ25lZCBsb25nICplbmFibGVkX29yZGVyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo2NjE6XHRcdFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzLFxubW0vaHVnZV9tZW1vcnkuYy02NjItXHRcdFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfaW5oZXJpdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExMzY9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdGhwX2Fub24oY2hhciAqc3RyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTE0Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6MTE0ODpcdGFsd2F5cyA9IGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzO1xubW0vaHVnZV9tZW1vcnkuYy0xMTQ5LVx0bWFkdmlzZSA9IGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMDgtXG5tbS9odWdlX21lbW9yeS5jOjEyMDk6XHRodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyA9IGFsd2F5cztcbm1tL2h1Z2VfbWVtb3J5LmMtMTIxMC1cdGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSA9IG1hZHZpc2U7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTUwMj1zdGF0aWMgaW5saW5lIGJvb2wgYW5vbl9ocGFnZV9lbmFibGVkKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtNTAzLXtcbm1tL2todWdlcGFnZWQuYzo1MDQ6XHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcbm1tL2todWdlcGFnZWQuYy01MDUtXHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpLVNpemUgVEhQIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB3ZSBoYW5kbGUgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFsbG9jYXRpb24gZHVyaW5nIGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBvcGVyYXRpb25zLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzZXMgaW4gYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCwgYHBnZGF0X2JhbGFuY2VkYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYGtjb21wYWN0ZGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucywgb3B0aW1pemluZyB0aGUgbGF5b3V0IG9mIG1lbW9yeSBzbyBhbGxvY2F0aW9uIGNhbiBiZSBwZXJmb3JtZWQgZmFzdGVyLgoKVGhlIGtleSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZSBoZXJlIGlzLCBvYnZpb3VzbHksIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGV2ZW4gYmUgcmVsZXZhbnQuIEdpdmVuIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O2xsIG5lZWQgdG8ganVtcCBpbnRvIGBtbS9jb21wYWN0aW9uLmNgIGFuZCBkaWcgaW50byBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbHRlcmVkIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZSBuZXcgbG9naWMuIE5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGFuZCB3aGF0IHRyYWRlLW9mZnMgd2VyZSBjb25zaWRlcmVkLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBzdWJ0bGV0aWVzIG9mIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCAtIHdoYXQgZXhhY3RseSBkb2VzIGl0IGNhcHR1cmUsIGFuZCBob3cgZG9lcyBpdCByZWZpbmUgb3VyIHVuZGVyc3RhbmRpbmcgb2YgZnJlZSBtZW1vcnkgZm9yIFRIUCBwdXJwb3Nlcz8gVGhpcyB3aWxsIHRha2UgYSBkZWVwIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NPTVBBQ1RJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0PTExMT1jb21wYWN0X21lbW9yeVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC0xMTMtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q6MTE0OkF2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0NPTVBBQ1RJT04gaXMgc2V0LiBXaGVuIDEgaXMgd3JpdHRlbiB0byB0aGUgZmlsZSxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC0xMTUtYWxsIHpvbmVzIGFyZSBjb21wYWN0ZWQgc3VjaCB0aGF0IGZyZWUgbWVtb3J5IGlzIGF2YWlsYWJsZSBpbiBjb250aWd1b3VzXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0PTE0Mj1jb21wYWN0X3VuZXZpY3RhYmxlX2FsbG93ZWRcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtMTQ0LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0OjE0NTpBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19DT01QQUNUSU9OIGlzIHNldC4gV2hlbiBzZXQgdG8gMSwgY29tcGFjdGlvbiBpc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTE0Ni1hbGxvd2VkIHRvIGV4YW1pbmUgdGhlIHVuZXZpY3RhYmxlIGxydSAobWxvY2tlZCBwYWdlcykgZm9yIHBhZ2VzIHRvIGNvbXBhY3QuXG4tLVxuYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9Mjc0PWV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTtcbmFyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTI3NS1cbmFyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjI3NjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmFyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTI3Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUlxuLS1cbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAxX2RlZmNvbmZpZz0yNz1DT05GSUdfUFJFRU1QVD15XG5hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWc6Mjg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWctMjktQ09ORklHX05FVD15XG4tLVxuYXJjaC9hcmMvY29uZmlncy9heHMxMDNfZGVmY29uZmlnPTI2PUNPTkZJR19QUkVFTVBUPXlcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX2RlZmNvbmZpZzoyNzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX2RlZmNvbmZpZy0yOC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnPTI2PUNPTkZJR19QUkVFTVBUPXlcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX3NtcF9kZWZjb25maWc6Mjc6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnLTI4LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19kZWZjb25maWc9MTg9Q09ORklHX01PRFVMRVM9eVxuYXJjaC9hcmMvY29uZmlncy9oYXBzX2hzX2RlZmNvbmZpZy0xOS0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfZGVmY29uZmlnOjIwOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9hcmMvY29uZmlncy9oYXBzX2hzX2RlZmNvbmZpZy0yMS1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfc21wX2RlZmNvbmZpZz0yMT1DT05GSUdfTU9EVUxFUz15XG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfc21wX2RlZmNvbmZpZy0yMi0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfc21wX2RlZmNvbmZpZzoyMzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19zbXBfZGVmY29uZmlnLTI0LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJjL2NvbmZpZ3MvaHNka19kZWZjb25maWc9MjQ9Q09ORklHX1BSRUVNUFQ9eVxuYXJjaC9hcmMvY29uZmlncy9oc2RrX2RlZmNvbmZpZzoyNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJjL2NvbmZpZ3MvaHNka19kZWZjb25maWctMjYtQ09ORklHX05FVD15XG4tLVxuYXJjaC9hcmMvY29uZmlncy9uc2ltXzcwMF9kZWZjb25maWc9MjI9Q09ORklHX01PRFVMRVM9eVxuYXJjaC9hcmMvY29uZmlncy9uc2ltXzcwMF9kZWZjb25maWctMjMtIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldFxuYXJjaC9hcmMvY29uZmlncy9uc2ltXzcwMF9kZWZjb25maWc6MjQ6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL25zaW1fNzAwX2RlZmNvbmZpZy0yNS1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2RlZmNvbmZpZz0yMj1DT05GSUdfQlVJTFRJTl9EVEJfTkFNRT1cJiMzNDtuc2ltb3NjaVwmIzM0O1xuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9kZWZjb25maWc6MjM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2RlZmNvbmZpZy0yNC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZz0yMj1DT05GSUdfQlVJTFRJTl9EVEJfTkFNRT1cJiMzNDtuc2ltb3NjaV9oc1wmIzM0O1xuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19kZWZjb25maWc6MjM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZy0yNC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX3NtcF9kZWZjb25maWc9MjA9Q09ORklHX1BSRUVNUFQ9eVxuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19zbXBfZGVmY29uZmlnOjIxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19zbXBfZGVmY29uZmlnLTIyLUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJjL2NvbmZpZ3MvdGIxMHhfZGVmY29uZmlnPTMwPUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15XG5hcmNoL2FyYy9jb25maWdzL3RiMTB4X2RlZmNvbmZpZzozMTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJjL2NvbmZpZ3MvdGIxMHhfZGVmY29uZmlnLTMyLUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c0X2RlZmNvbmZpZz0zNj1DT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRD15XG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWctMzctIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0XG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWctMzktQ09ORklHX05FVD15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnPTQzPUNPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEPXlcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZy00NC0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZzo0NTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZy00Ni1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZz0yNT1DT05GSUdfTU9EVUxFX1VOTE9BRD15XG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZzoyNjojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnLTI3LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZz00Nz1DT05GSUdfU0xVQl9USU5ZPXlcbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZzo0ODojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZy00OS1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZz0zOT1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZy00Mi0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3Mvc2FtYTdfZGVmY29uZmlnOjQzOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9hcm0vY29uZmlncy9zYW1hN19kZWZjb25maWctNDQtQ09ORklHX0NNQT15XG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTQ0PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc6NDU6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctNDYtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZz00MD1DT05GSUdfQklORk1UX01JU0M9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo0MTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctNDItQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnPTQ3PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6NDg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWctNDktQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTM3PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWctMzktQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnPTM5PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NDA6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctNDEtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0zOD1DT05GSUdfQklORk1UX01JU0M9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzozOTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctNDAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTU4PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NTk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWctNjAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc9MzY9Q09ORklHX0JJTkZNVF9NSVNDPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjM3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctMzgtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc9Mzc9Q09ORklHX0JJTkZNVF9NSVNDPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnOjM4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWctMzktQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz0zOD1DT05GSUdfQklORk1UX01JU0M9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZzozOTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWctNDAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc9MzQ9Q09ORklHX0JJTkZNVF9NSVNDPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjM1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctMzYtQ09ORklHX1VTRVJGQVVMVEZEPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9MzQ9Q09ORklHX0JJTkZNVF9NSVNDPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzozNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZy0zNi1DT05GSUdfRE1BUE9PTF9URVNUPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWc9MjM9Q09ORklHX01PRFVMRV9VTkxPQUQ9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnLTI0LSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2F0aDI1X2RlZmNvbmZpZzoyNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2F0aDI1X2RlZmNvbmZpZy0yNi1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZz0yOD1DT05GSUdfTU9EVUxFUz15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY2kyMF9kZWZjb25maWctMzAtIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZzozMTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnLTMyLUNPTkZJR19DTUE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnPTI3PUNPTkZJR19NT0RVTEVTPXlcbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnLTI4LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnOjI5OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWctMzAtQ09ORklHX0NNQT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc9Mjc9Q09ORklHX01PRFVMRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWctMjgtIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc6Mjk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9jdTE4MzAtbmVvX2RlZmNvbmZpZy0zMC1DT05GSUdfQ01BPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZz0zMD1DT05GSUdfTUlQU19DTURMSU5FX0ZST01fQk9PVExPQURFUj15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWctMzItIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZy0zNC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnPTIzPUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZy0yNC0jIENPTkZJR19DT1JFRFVNUCBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnOjI1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZy0yNi1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy92b2NvcmUyX2RlZmNvbmZpZz0zMD1DT05GSUdfTUlQU19DTURMSU5FX0ZST01fQk9PVExPQURFUj15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWctMzItIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy92b2NvcmUyX2RlZmNvbmZpZy0zNC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZz0yNT1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXlcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnLTI2LSMgQ09ORklHX0NPUkVEVU1QIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnOjI3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWctMjgtQ09ORklHX05FVD15XG4tLVxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZz0zNj1DT05GSUdfQklORk1UX01JU0M9bVxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZy0zNy0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcbmFyY2gvcGFyaXNjL2NvbmZpZ3MvZ2VuZXJpYy02NGJpdF9kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnLTM5LUNPTkZJR19NRU1PUllfRkFJTFVSRT15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnPTE5PUNPTkZJR19JUlFfQUxMX0NQVVM9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnOjIwOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnLTIxLSMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldFxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL21pY3Jvd2F0dF9kZWZjb25maWc9MzA9Q09ORklHX1BQQ180S19QQUdFUz15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWljcm93YXR0X2RlZmNvbmZpZy0zMy0jIENPTkZJR19DT1JFRFVNUCBpcyBub3Qgc2V0XG5hcmNoL3Bvd2VycGMvY29uZmlncy9taWNyb3dhdHRfZGVmY29uZmlnOjM0OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWljcm93YXR0X2RlZmNvbmZpZy0zNS0jIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldFxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL212bWU1MTAwX2RlZmNvbmZpZz0yMz1DT05GSUdfQ01ETElORT1cJiMzNDtjb25zb2xlPXR0eVMwLDk2MDAgaXA9ZGhjcCByb290PS9kZXYvbmZzXCYjMzQ7XG5hcmNoL3Bvd2VycGMvY29uZmlncy9tdm1lNTEwMF9kZWZjb25maWctMjQtIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnOjI1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnLTI2LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWc9MzU9Q09ORklHX0JJTkZNVF9NSVNDPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnLTM3LSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQIGlzIG5vdCBzZXRcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnLTM5LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3NraXJvb3RfZGVmY29uZmlnPTU2PUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3NraXJvb3RfZGVmY29uZmlnLTU4LSMgQ09ORklHX01RX0lPU0NIRURfS1lCRVIgaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2tpcm9vdF9kZWZjb25maWc6NTk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL3Bvd2VycGMvY29uZmlncy9za2lyb290X2RlZmNvbmZpZy02MC0jIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldFxuLS1cbmFyY2gvdW0vY29uZmlncy9pMzg2X2RlZmNvbmZpZzoxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC91bS9jb25maWdzL2kzODZfZGVmY29uZmlnLTItQ09ORklHX0JJTkZNVF9NSVNDPW1cbi0tXG5hcmNoL3VtL2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZzoxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC91bS9jb25maWdzL3g4Nl82NF9kZWZjb25maWctMi1DT05GSUdfQklORk1UX01JU0M9bVxuLS1cbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnPTMzPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVwmIzM0O2tjNzA1XCYjMzQ7XG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZzozNDojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnLTM1LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL2NhZGVuY2VfY3NwX2RlZmNvbmZpZz0zNz1DT05GSUdfQlVJTFRJTl9EVEJfTkFNRT1cJiMzNDtjc3BcJiMzNDtcbmFyY2gveHRlbnNhL2NvbmZpZ3MvY2FkZW5jZV9jc3BfZGVmY29uZmlnOjM4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC94dGVuc2EvY29uZmlncy9jYWRlbmNlX2NzcF9kZWZjb25maWctMzktQ09ORklHX1hURlBHQV9MQ0Q9eVxuLS1cbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc9MzI9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XCYjMzQ7a2M3MDVcJiMzNDtcbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnLTM0LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3NtcF9seDIwMF9kZWZjb25maWc9MzY9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XCYjMzQ7bHgyMDBteFwmIzM0O1xuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnOjM3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnLTM4LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnPTMxPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcbmFyY2gveHRlbnNhL2NvbmZpZ3MvdmlydF9kZWZjb25maWctMzItIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC94dGVuc2EvY29uZmlncy92aXJ0X2RlZmNvbmZpZzozMzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gveHRlbnNhL2NvbmZpZ3MvdmlydF9kZWZjb25maWctMzQtQ09ORklHX05FVD15XG4tLVxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnPTMyPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVwmIzM0O2tjNzA1XCYjMzQ7XG4tLVxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnLTM0LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbmFyY2gveHRlbnNhL2NvbmZpZ3MveGlwX2tjNzA1X2RlZmNvbmZpZzozNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gveHRlbnNhL2NvbmZpZ3MveGlwX2tjNzA1X2RlZmNvbmZpZy0zNi1DT05GSUdfTkVUPXlcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD04ND1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTg4LVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6ODk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC05MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMzA9c3RhdGljIGlubGluZSB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzQtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMzU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzYtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMzc9c3RydWN0IG5vZGU7XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMzg6I2lmIGRlZmluZWQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzktZXh0ZXJuIGludCBjb21wYWN0aW9uX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTE0OT1zdGF0aWMgaW5saW5lIHZvaWQgY29tcGFjdGlvbl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTUxLX1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjE1MjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gXHUwMDI2XHUwMDI2IENPTkZJR19TWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHX05VTUEgKi9cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTE1My1cbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTM4MT1zdGF0aWMgaW5saW5lIGJvb2wgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfdCBnZnBfbWFzaylcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMzgyLXtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MzgzOlx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMzg0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTk3OT1zdHJ1Y3Qgem9uZSB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTI3LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTI4OiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTI5LVx0LyogcGZuIHdoZXJlIGNvbXBhY3Rpb24gZnJlZSBzY2FubmVyIHNob3VsZCBzdGFydCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTEzNi1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTEzNzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTEzOC1cdC8qXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTQ4LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTQ5OiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTUwLVx0LyogU2V0IHRvIHRydWUgd2hlbiB0aGUgUEdfbWlncmF0ZV9za2lwIGJpdHMgc2hvdWxkIGJlIGNsZWFyZWQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0Nzg9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTUzNy1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTUzODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTUzOS1cdGludCBrY29tcGFjdGRfbWF4X29yZGVyO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmg9OTA9dm9pZCBjbGVhcl9wZm5ibG9ja19iaXQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmgtOTMtLyogRGVjbGFyYXRpb25zIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIGZsYWdzLiBTZWUgbW0vcGFnZV9hbGxvYy5jICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oOjk0OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaC05NS0jZGVmaW5lIGdldF9wYWdlYmxvY2tfc2tpcChwYWdlKSBcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmg9MTA5PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZWJsb2NrX3NraXAoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaC0xMTEtfVxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaDoxMTI6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oLTExMy1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEzMTItXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTMxMzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMzE0LVx0c3RydWN0IGNhcHR1cmVfY29udHJvbFx0XHQqY2FwdHVyZV9jb250cm9sO1xuLS1cbmluY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oPTM0PWVudW0gdm1fZXZlbnRfaXRlbSB7IFBHUEdJTiwgUEdQR09VVCwgUFNXUElOLCBQU1dQT1VULFxuLS1cbmluY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oLTY0LSNlbmRpZlxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg6NjU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC02Ni1cdFx0Q09NUEFDVE1JR1JBVEVfU0NBTk5FRCwgQ09NUEFDVEZSRUVfU0NBTk5FRCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg9Njc9REVGSU5FX0VWRU5UKG1tX2NvbXBhY3Rpb25faXNvbGF0ZV90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl9mYXN0X2lzb2xhdGVfZnJlZXBhZ2VzLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC03Ny1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaDo3ODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC03OS1UUkFDRV9FVkVOVChtbV9jb21wYWN0aW9uX21pZ3JhdGVwYWdlcyxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg9MjM1PUlGX0hBVkVfVk1fRFJPUFBBQkxFKFZNX0RST1BQQUJMRSxcdFwmIzM0O2Ryb3BwYWJsZVwmIzM0O1x0KVx0XHRcXFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0yNDItXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MjQzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oLTI0NC0jZGVmaW5lIENPTVBBQ1RJT05fU1RBVFVTXHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmg9MTY2PVRSQUNFX0VWRU5UKHNraXBfdGFza19yZWFwaW5nLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTE4MS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oOjE4MjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTE4My1UUkFDRV9FVkVOVChjb21wYWN0X3JldHJ5LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTIxOC0pO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmg6MjE5OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmgtMjIwLSNlbmRpZlxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDU2Mz1zdGF0aWMgdm9pZCBfX3NjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00NjA4LVxua2VybmVsL3NjaGVkL2NvcmUuYzo0NjA5OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEwLVx0cC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wgPSBOVUxMO1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMC1cbm1tL2NvbXBhY3Rpb24uYzozMTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0zMi0vKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz02MT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtNjMtXG5tbS9jb21wYWN0aW9uLmM6NjQ6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9jb21wYWN0aW9uLmMtNjUtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTEyNi1cbm1tL2NvbXBhY3Rpb24uYzoxMjc6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTI4LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy01MDQtfVxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL2NvbXBhY3Rpb24uYy01MDYtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMzg4LVxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2NvbXBhY3Rpb24uYzoxMzkwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTEzOTEtXG4tLVxubW0vY29tcGFjdGlvbi5jPTM0MTA9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxubW0vY29tcGFjdGlvbi5jLTM0MTEtXG5tbS9jb21wYWN0aW9uLmM6MzQxMjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbi0tXG5tbS9pbnRlcm5hbC5oPTgwMj1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuLS1cbm1tL2ludGVybmFsLmgtODEwLVxubW0vaW50ZXJuYWwuaDo4MTE6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9pbnRlcm5hbC5oLTgxMi1cbi0tXG5tbS9pbnRlcm5hbC5oPTg4ND1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbi0tXG5tbS9pbnRlcm5hbC5oLTg4Ni1cbm1tL2ludGVybmFsLmg6ODg3OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXG5tbS9pbnRlcm5hbC5oLTg4OC1cbi0tXG5tbS9tbV9pbml0LmM9MTMzMT1zdGF0aWMgdm9pZCBfX2luaXQgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL21tX2luaXQuYy0xMzczLVxubW0vbW1faW5pdC5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9tbV9pbml0LmMtMTM3NS1zdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL21tX2luaXQuaD0zNz12b2lkIG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxuLS1cbm1tL21tX2luaXQuaC00Mi1cbm1tL21tX2luaXQuaDo0MzojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcbm1tL21tX2luaXQuaC00NC0vKiBGcmVlIHdob2xlIHBhZ2VibG9jayBhbmQgc2V0IGl0cyBtaWdyYXRpb24gdHlwZSB0byBNSUdSQVRFX0NNQS4gKi9cbi0tXG5tbS9vb21fa2lsbC5jPTQ1Nj1zdGF0aWMgdm9pZCBkdW1wX2hlYWRlcihzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxuLS1cbm1tL29vbV9raWxsLmMtNDYwLVx0XHRcdGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9zY29yZV9hZGopO1xubW0vb29tX2tpbGwuYzo0NjE6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNiBvYy1cdTAwM2VvcmRlcilcbm1tL29vbV9raWxsLmMtNDYyLVx0XHRwcl93YXJuKFwmIzM0O0NPTVBBQ1RJT04gaXMgZGlzYWJsZWQhISFcXG5cJiMzNDspO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MTQ9c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTktXG5tbS9wYWdlX2FsbG9jLmM6NzIwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vcGFnZV9hbGxvYy5jLTcyMS1zdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzY5PWNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzczLX1cbm1tL3BhZ2VfYWxsb2MuYzo3NzQ6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9wYWdlX2FsbG9jLmMtNzc1LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MDQ0PV9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00MTM1LVxubW0vcGFnZV9hbGxvYy5jOjQxMzY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9wYWdlX2FsbG9jLmMtNDEzNy0vKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMyNT1zaG91bGRfY29tcGFjdF9yZXRyeShnZnBfdCBnZnBfbWFzaywgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQzNTAtfVxubW0vcGFnZV9hbGxvYy5jOjQzNTE6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9wYWdlX2FsbG9jLmMtNDM1Mi1cbi0tXG5tbS92bXNjYW4uYz02NDE5PXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02NDU5LVx0XHRcdCAqL1xubW0vdm1zY2FuLmM6NjQ2MDpcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02NDYxLVx0XHRcdCAgICBzYy1cdTAwM2VvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zdGF0LmM9MTA1ND12b2lkIG1lbW1hcF9wYWdlc19hZGQobG9uZyBkZWx0YSlcbi0tXG5tbS92bXN0YXQuYy0xMDU4LVxubW0vdm1zdGF0LmM6MTA1OTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3Ztc3RhdC5jLTEwNjAtXG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMzg0LSNlbmRpZlxubW0vdm1zdGF0LmM6MTM4NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3Ztc3RhdC5jLTEzODYtXHRbSShDT01QQUNUTUlHUkFURV9TQ0FOTkVEKV1cdFx0PSBcJiMzNDtjb21wYWN0X21pZ3JhdGVfc2Nhbm5lZFwmIzM0Oyxcbi0tXG5tbS92bXN0YXQuYy0xNTE0LVxubW0vdm1zdGF0LmM6MTUxNTojaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTikpIHx8IFxcXG5tbS92bXN0YXQuYy0xNTE2LSAgICAgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbi0tXG5tbS92bXN0YXQuYz0yMjg2PXZvaWQgX19pbml0IGluaXRfbW1faW50ZXJuYWxzKHZvaWQpXG4tLVxubW0vdm1zdGF0LmMtMjMxOS1cbm1tL3Ztc3RhdC5jOjIzMjA6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTilcbm1tL3Ztc3RhdC5jLTIzMjEtXG4tLVxubW0venNtYWxsb2MuYz0yNzA9c3RydWN0IHpzX3Bvb2wge1xuLS1cbm1tL3pzbWFsbG9jLmMtMjg0LSNlbmRpZlxubW0venNtYWxsb2MuYzoyODU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTI4Ni1cdHN0cnVjdCB3b3JrX3N0cnVjdCBmcmVlX3dvcms7XG4tLVxubW0venNtYWxsb2MuYz00MzE9c3RhdGljIGJvb2wgWnNIdWdlUGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy00MzUtXG5tbS96c21hbGxvYy5jOjQzNjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtNDM3LXN0YXRpYyB2b2lkIGtpY2tfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XG4tLVxubW0venNtYWxsb2MuYz0xMDMyPXN0YXRpYyBzdHJ1Y3QgenNwYWdlICphbGxvY196c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4tLVxubW0venNtYWxsb2MuYy0xMDQyLVxubW0venNtYWxsb2MuYzoxMDQzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSlcbm1tL3pzbWFsbG9jLmMtMTA0NC1cdFx0Z2ZwIFx1MDAyNj0gfl9fR0ZQX01PVkFCTEU7XG4tLVxubW0venNtYWxsb2MuYz0xNDU0PXN0YXRpYyB2b2lkIG9ial9mcmVlKGludCBjbGFzc19zaXplLCB1bnNpZ25lZCBsb25nIG9iailcbi0tXG5tbS96c21hbGxvYy5jLTE0ODEtXG5tbS96c21hbGxvYy5jOjE0ODI6I2lmIChaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMCkgfHwgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTilcbm1tL3pzbWFsbG9jLmMtMTQ4My0vKiBGb2xkcyB0byAwIHdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgPT0gMDsgbm8gaWZkZWYgbmVlZGVkIGF0IGNhbGxlcnMuICovXG4tLVxubW0venNtYWxsb2MuYz0xNzUzPXN0YXRpYyBpbnQgcHV0YmFja196c3BhZ2Uoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy0xNzYyLVxubW0venNtYWxsb2MuYzoxNzYzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0venNtYWxsb2MuYy0xNzY0LS8qXG4tLVxubW0venNtYWxsb2MuYz0yMzk1PXN0YXRpYyBpbnQgX19pbml0IHpzX2luaXQodm9pZClcbi0tXG5tbS96c21hbGxvYy5jLTI0MDItXG5tbS96c21hbGxvYy5jOjI0MDM6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTI0MDQtXHRyYyA9IHNldF9tb3ZhYmxlX29wcyhcdTAwMjZ6c21hbGxvY19tb3BzLCBQR1RZX3pzbWFsbG9jKTtcbi0tXG5tbS96c21hbGxvYy5jPTI0MTQ9c3RhdGljIHZvaWQgX19leGl0IHpzX2V4aXQodm9pZClcbm1tL3pzbWFsbG9jLmMtMjQxNS17XG5tbS96c21hbGxvYy5jOjI0MTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTI0MTctXHRzZXRfbW92YWJsZV9vcHMoTlVMTCwgUEdUWV96c21hbGxvYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbmNlcm5zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIG5vbi1uZWdvdGlhYmxlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBOb3csIEkgc2VlIHRoYXQgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCBoaW5nZXMgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gT3IsIG1heWJlIGl0JiMzOTtzIGp1c3QgYXZhaWxhYmxlLCByZWdhcmRsZXNzLCBidXQgb25seSAqcmVhbGx5KiBtYWtlcyBzZW5zZSBpbiBjb25qdW5jdGlvbiB3aXRoIFRIUC4gRWl0aGVyIHdheSwgVEhQIGlzIGEgZGVwZW5kZW5jeSBoZXJlLiBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0IHJlbGF0aW9uc2hpcC4gSeKAmWQgYmV0dGVyIGdvIGFuZCBjaGVjayB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUgb2YgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHRocmVlIGZlYXR1cmVzLiBHb3R0YSB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFsbCBwbGF5aW5nIG5pY2VseSB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9hbm9uX29yZGVyc19hbHdheXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9MTg1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTg2OmV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg3LWV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMjA9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzI5LVx0aWYgKHR5cGUgIT0gVFZBX0ZPUkNFRF9DT0xMQVBTRSBcdTAwMjZcdTAwMjYgdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozMzA6XHRcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMzEtXG4tLVxubW0vY29tcGFjdGlvbi5jPTg1PXN0YXRpYyBpbmxpbmUgaW50IGNvbXBhY3RfaHBhZ2Vfb3JkZXIodm9pZClcbm1tL2NvbXBhY3Rpb24uYy04Ni17XG5tbS9jb21wYWN0aW9uLmM6ODc6XHR1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XG5tbS9jb21wYWN0aW9uLmMtODgtXG4tLVxubW0vY29tcGFjdGlvbi5jPTgyOT1zdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXG4tLVxubW0vY29tcGFjdGlvbi5jLTg0Mi1cdGlmIChpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNlPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDI2XHUwMDI2XG5tbS9jb21wYWN0aW9uLmM6ODQzOlx0ICAgIFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG5tbS9jb21wYWN0aW9uLmMtODQ0LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjU0NT11bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NTEtXG5tbS9jb21wYWN0aW9uLmM6MjU1MjpcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFx1MDAyNlx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcbm1tL2NvbXBhY3Rpb24uYy0yNTUzLVx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9ODc9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtODktXG5tbS9odWdlX21lbW9yeS5jOjkwOnVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbm1tL2h1Z2VfbWVtb3J5LmMtOTEtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX21hZHZpc2UgX19yZWFkX21vc3RseTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTY0MD1zdGF0aWMgc3NpemVfdCBhbm9uX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NjQ2Olx0aWYgKHRlc3RfYml0KG9yZGVyLCBcdTAwMjZodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG5tbS9odWdlX21lbW9yeS5jLTY0Ny1cdFx0b3V0cHV0ID0gXCYjMzQ7W2Fsd2F5c10gaW5oZXJpdCBtYWR2aXNlIG5ldmVyXCYjMzQ7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY2MC1cdHN0YXRpYyB1bnNpZ25lZCBsb25nICplbmFibGVkX29yZGVyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo2NjE6XHRcdFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzLFxubW0vaHVnZV9tZW1vcnkuYy02NjItXHRcdFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfaW5oZXJpdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExMzY9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdGhwX2Fub24oY2hhciAqc3RyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTE0Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6MTE0ODpcdGFsd2F5cyA9IGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzO1xubW0vaHVnZV9tZW1vcnkuYy0xMTQ5LVx0bWFkdmlzZSA9IGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMDgtXG5tbS9odWdlX21lbW9yeS5jOjEyMDk6XHRodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyA9IGFsd2F5cztcbm1tL2h1Z2VfbWVtb3J5LmMtMTIxMC1cdGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSA9IG1hZHZpc2U7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTUwMj1zdGF0aWMgaW5saW5lIGJvb2wgYW5vbl9ocGFnZV9lbmFibGVkKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtNTAzLXtcbm1tL2todWdlcGFnZWQuYzo1MDQ6XHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcbm1tL2todWdlcGFnZWQuYy01MDUtXHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipDaGVja2luZyBhIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCBpcyBkZWZpbmVkLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGNoZWNrOyBJIGtub3cgdGhpcyB2YXJpYWJsZSBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIGVzcGVjaWFsbHkgd2l0aCBob3cgd2UmIzM5O3ZlIGJlZW4gcHVzaGluZyBUSFAgaW1wcm92ZW1lbnRzLiBTbywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgd2l0aCB0aGlzIGxpbmUgb2YgaW52ZXN0aWdhdGlvbiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljIGhpbmdlcyBvbiB0aGF0LCBhbmQgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIGJlIHdhc3RpbmcgdGltZSBkb3duIGEgcmFiYml0IGhvbGUuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgc3RhbmQgd2l0aCB0aGlzLCB3aGF0IHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaXMsIGFuZCB3aGF0IEkgY2FuIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9MTI3PWVudW0gbXRocF9zdGF0X2l0ZW0ge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTE1Mi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE1MzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TWVNGUylcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTE1NC1zdHJ1Y3QgbXRocF9zdGF0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0xNzg9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X210aHBfc3RhdChpbnQgb3JkZXIsIGVudW0gbXRocF9zdGF0X2l0ZW0gaXRlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODItXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxODM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg0LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU5OD12b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjAwLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjAxOiNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjAyLVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgxNT1zdGF0aWMgaW5saW5lIGJvb2wgcHVkX2lzX2h1Z2UocHVkX3QgcHVkKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTgxOC19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo4MTk6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODIwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlIEFsbG9jYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgc3lzdGVtIGlzIHNldCB1cCB0byBoYW5kbGUgaHVnZSBhbm9ueW1vdXMgcGFnZXMsIGFzc3VtaW5nIGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMgZGVmaW5lZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSBuZWVkIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQsIGFuZCBieSBleHRlbnNpb24sIGBDT01QQUNUSU9OYCBhcyB3ZWxsLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aGUgYmFzaWNzIGFyZSBpbiBwbGFjZS4KCk5vdywgSSB3YW50IHRvIGRyaWxsIGRvd24gYW5kIHNlZSB0aGUgcmVsZXZhbnQgcGllY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbiB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBkZXRlcm1pbmluZyBhbGxvY2F0aW9uIGNhcGFjaXR5LCBgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXJgLCB3aGljaCBsaWtlbHkgcGxheXMgYSBwYXJ0IGluIGRldGVybWluaW5nIHRoZSBmZWFzaWJpbGl0eSBvZiBhIGNvbXBhY3Rpb24gcnVuIHRvIHNhdGlzZnkgYW4gb3JkZXIsIGFuZCBmaW5hbGx5LCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIHdoaWNoIGlzIHByb2JhYmx5IGtleSB0byBldmFsdWF0aW5nIHdoZXRoZXIgYSBnaXZlbiB6b25lIGxpc3QgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgY29tcGFjdGlvbi4KCkFscmlnaHQsIG5vdyB0aGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgaXMgYW4gZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyBzeW1ib2wuIEtub3dpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyBleHBvc2VkIHRvIGFuZCB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gR290dGEgZmlndXJlIG91dCBpZiBpdCYjMzk7cyB0aWdodGx5IGNvdXBsZWQgaW50ZXJuYWxseSwgb3IgaWYgaXQmIzM5O3MgYW4gQVBJIHBvaW50IHRoYXQgb3RoZXJzIGNhbiB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYz0yNTcwPXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XG5tbS9jb21wYWN0aW9uLmM6MjU3MTpjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxubW0vY29tcGFjdGlvbi5jLTI1NzItXHRcdFx0XHQgaW50IGhpZ2hlc3Rfem9uZWlkeCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNjEwPWNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjYzNS1cdGlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGNjLVx1MDAzZW9yZGVyKSkge1xubW0vY29tcGFjdGlvbi5jOjI2MzY6XHRcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKGNjLVx1MDAzZXpvbmUsIGNjLVx1MDAzZW9yZGVyLFxubW0vY29tcGFjdGlvbi5jLTI2MzctXHRcdFx0XHRcdFx0ICAgICAgIGNjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCxcbi0tXG5tbS9jb21wYWN0aW9uLmM9MzEwNj1zdGF0aWMgYm9vbCBrY29tcGFjdGRfbm9kZV9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMTIwLVxubW0vY29tcGFjdGlvbi5jOjMxMjE6XHRcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHpvbmUsXG5tbS9jb21wYWN0aW9uLmMtMzEyMi1cdFx0XHRcdHBnZGF0LVx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jPTMxMzI9c3RhdGljIHZvaWQga2NvbXBhY3RkX2RvX3dvcmsocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzE2NC1cbm1tL2NvbXBhY3Rpb24uYzozMTY1Olx0XHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcih6b25lLFxubW0vY29tcGFjdGlvbi5jLTMxNjYtXHRcdFx0XHRjYy5vcmRlciwgem9uZWlkLCBjYy5hbGxvY19mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdmFyaWFibGVzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24uIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0cyB2YWx1ZSBpcyBsaWtlbHkgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUgb3IgZHVyaW5nIHZlcnkgZWFybHkgaW5pdGlhbGl6YXRpb24uIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGZsZXhpYmxlIHRoZSBzeXN0ZW0gaXMgaW4gYWRhcHRpbmcgdG8gdmFyeWluZyBtZW1vcnkgZnJhZ21lbnRhdGlvbiBzY2VuYXJpb3MuCgpUaGVuLCBJJiMzOTttIG5vdGluZyB0aGF0IGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhbmQgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGFyZSAqbm90KiBzdGF0aWMuIFRoZXkmIzM5O3JlIGR5bmFtaWMuIFNvLCB0aGVpciB2YWx1ZXMgY2hhbmdlIG92ZXIgdGltZSwgd2hpY2ggbWVhbnMgdGhleSBhcmUgYmVpbmcgdXBkYXRlZCBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtLiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgb2J2aW91cyAtIGl0JiMzOTtzIGRpcmVjdGx5IHJlZmxlY3RpbmcgbWVtb3J5IGF2YWlsYWJpbGl0eS4gQnV0IGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCBpcyB0aGUga2V5IGludGVyZXN0LiBUaGlzIGlzIGEgZHluYW1pYyBjb25kaXRpb24gdGhhdCBzaG91bGQgdGVsbCBtZSB3aGF0IHpvbmVzIGFyZSBva2F5IHRvIGNvbnNpZGVyIGZvciBjb21wYWN0aW9uLgoKUmlnaHQgbm93LCBteSBmb2N1cyBpcyBvbiBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gaG93IHRoYXQgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgZmFjdG9ycyBpbmZsdWVuY2UgaXRzIGV2YWx1YXRpb24uIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgdG8gZGV2ZWxvcCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgYWxnb3JpdGhtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTEwMT1leHRlcm4gdm9pZCBjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTAzLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTA0OmJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwNS1cdFx0XHRcdFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG4tLVxubW0vY29tcGFjdGlvbi5jPTI0NTI9Ym9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNDk2LS8qIFVzZWQgYnkgZGlyZWN0IHJlY2xhaW1lcnMgKi9cbm1tL2NvbXBhY3Rpb24uYzoyNDk3OmJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yNDk4LVx0XHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MjQ4PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDI3MC1cdGlmIChjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQpIHtcbm1tL3BhZ2VfYWxsb2MuYzo0MjcxOlx0XHRyZXQgPSBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKGFjLCBvcmRlciwgYWxsb2NfZmxhZ3MsXG5tbS9wYWdlX2FsbG9jLmMtNDI3Mi1cdFx0XHRcdFx0XHQgICBnZnBfbWFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjc3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IHVzZWQgYWNyb3NzIG11bHRpcGxlIGZpbGVzIG9yIG1vZHVsZXMsIG5vdCBqdXN0IHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIHRyYWNlIGl0cyB1c2FnZS4gU2ltaWxhcmx5LCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgYWxzbyBub24tc3RhdGljOyB0aGlzIGhpZ2hsaWdodHMgdGhhdCB0aGVzZSBhcmVuJiMzOTt0IGludGVybmFsIGZ1bmN0aW9ucy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYnkgdHJhY2luZyB0aGUgdXNhZ2Ugb2YgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3QuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGhvdyBgcGdkYXRfYmFsYW5jZWRgIGlzIHVzZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgbWVtb3J5IHNjYW5uaW5nIGFuZCBiYWxhbmNpbmcgbG9naWMuIERpZ2dpbmcgaW50byB0aGF0IGZpbGUgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBmb3Igd2hhdCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgYW5kIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhcmUgaW52b2x2ZWQgaW4uIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gYnVpbGQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbiBzdHJhdGVneSBieSByZXZpZXdpbmcgdGhlIHVzYWdlIG9mIGBwZ2RhdF9iYWxhbmNlZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BnZGF0X2JhbGFuY2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY5MzA9c3RhdGljIGJvb2wgcGdkYXRfd2F0ZXJtYXJrX2Jvb3N0ZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy02OTU3LSAqL1xubW0vdm1zY2FuLmM6Njk1ODpzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYy02OTU5LXtcbi0tXG5tbS92bXNjYW4uYz03MDI3PXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MDQ5LVxubW0vdm1zY2FuLmM6NzA1MDpcdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcbm1tL3Ztc2Nhbi5jLTcwNTEtXHRcdGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ2RhdCk7XG4tLVxubW0vdm1zY2FuLmM9NzEzOT1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcyMTQtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzIxNTpcdFx0YmFsYW5jZWQgPSBwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgc2Mub3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03MjE2LVx0XHRpZiAoIWJhbGFuY2VkIFx1MDAyNlx1MDAyNiBucl9ib29zdF9yZWNsYWltKSB7XG4tLVxubW0vdm1zY2FuLmM9NzU1NT12b2lkIHdha2V1cF9rc3dhcGQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTc1ODAtXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpIHx8XG5tbS92bXNjYW4uYzo3NTgxOlx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy03NTgyLVx0ICAgICAhcGdkYXRfd2F0ZXJtYXJrX2Jvb3N0ZWQocGdkYXQsIGhpZ2hlc3Rfem9uZWlkeCkpKSB7XG4tLVxubW0vdm1zY2FuLmM9NzYxMz12b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy03NjE1LXtcbm1tL3Ztc2Nhbi5jOjc2MTY6XHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxubW0vdm1zY2FuLmMtNzYxNy1cdFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NzYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQXR0cmlidXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJdCYjMzk7cyBpbnRlcmVzdGluZyBob3cgdGhleSYjMzk7cmUgZGVjbGFyZWQuIGBwZ2RhdF9iYWxhbmNlZGAgaXMgY2xlYXJseSBhIHN0YXRpYyB2YXJpYWJsZSwgYW5kIEkgY2FuIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCDigJMgaXQmIzM5O3MgbGlrZWx5IGEgcGVyLW5vZGUgZmxhZyBvciBzdGF0ZSwgYW5kIGl0JiMzOTtzIGhpZGRlbiBmcm9tIGV4dGVybmFsIG1vZHVsZXMuIGB3YWtldXBfa3N3YXBkYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzbiYjMzk7dCBzdGF0aWMsIHNvIGl04oCZcyBsaWtlbHkgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gYGJhbGFuY2VfcGdkYXRgLCBpcyBzdGF0aWMuIEFnYWluLCBhIHN0YXRpYyBmdW5jdGlvbiB1c3VhbGx5IGltcGxpZXMgdGhhdCBpdCBpcyBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGUgZmlsZS9tb2R1bGUuIE5vdywgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgIGlzIG5vbi1zdGF0aWMsIHNvIHRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFwcGx5IGFzIGZvciBgd2FrZXVwX2tzd2FwZGAuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjQ0PXZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY0NS1cdFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTY0Njp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY0Ny1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYz01MjI0PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI2Mi1cdGlmIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNlIHJlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jOjUyNjM6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy01MjY0LX1cbi0tXG5tbS92bXNjYW4uYz02MjM0PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzNDEtXHRpZiAocmVjbGFpbWFibGUpXG5tbS92bXNjYW4uYzo2MzQyOlx0XHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNlcmVjbGFpbV9pZHgpO1xubW0vdm1zY2FuLmMtNjM0My1cdGVsc2UgaWYgKHNjLVx1MDAzZWNhY2hlX3RyaW1fbW9kZSlcbi0tXG5tbS92bXNjYW4uYz03NjAwPXZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXG4tLVxubW0vdm1zY2FuLmMtNzYxMi0gKi9cbm1tL3Ztc2Nhbi5jOjc2MTM6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03NjE0LVx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzc0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLZXJuZWwmIzM5O3MgU3dhcHBpbmcgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgd2hlcmUgdGhlIHN5c3RlbSBpcyBnZXR0aW5nIGh1bmcgdXAuIGB3YWtldXBfa3N3YXBkYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0IGtpY2tzIG9mZiB0aGUga3N3YXBkIGRhZW1vbiwgYW5kIGlmIHN3YXBwaW5nIGlzIGEgYm90dGxlbmVjaywgdGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHByb2JsZW0gZWl0aGVyIG9yaWdpbmF0ZXMgb3IgbWFuaWZlc3RzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGl0cyBhY3RpdmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGB3YWtldXBfa3N3YXBkYCBiZWluZyBjYWxsZWQsIHdoYXQgcmVzb3VyY2VzIGl0JiMzOTtzIGNvbnRlbmRpbmcgZm9yLCBhbmQgd2hldGhlciBpdHMgZnJlcXVlbmN5IG9mIGFjdGl2YXRpb24gYWxpZ25zIHdpdGggdGhlIG9ic2VydmVkIHBlcmZvcm1hbmNlIGlzc3Vlcy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBhbmQgYW55IHJlbGV2YW50IGNvdW50ZXJzIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyByZWFjdGlvbi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHdhaXQgcXVldWVzLCBsb2NrIGNvbnRlbnRpb24sIGFuZCBhbnkgaW5kaWNhdGlvbnMgb2YgcmVzb3VyY2Ugc3RhcnZhdGlvbiB0aGF0IGFyZSB0aWVkIHRvIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dha2V1cF9rc3dhcGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9NTk9bXkgJG9wdF9yZWFkX3Byb2NzdGF0O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNjAtXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDo2MTpteSAkdG90YWxfd2FrZXVwX2tzd2FwZDtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTYyLW15ICgkdG90YWxfZGlyZWN0X3JlY2xhaW0sICR0b3RhbF9kaXJlY3RfbnJfc2Nhbm5lZCk7XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9MTEzPW15ICRyZWdleF9rc3dhcGRfc2xlZXBfZGVmYXVsdCA9ICYjMzk7bmlkPShbMC05XSopJiMzOTs7XG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDoxMTQ6bXkgJHJlZ2V4X3dha2V1cF9rc3dhcGRfZGVmYXVsdCA9ICYjMzk7bmlkPShbMC05XSopIG9yZGVyPShbMC05XSopIGdmcF9mbGFncz0oW0EtWl98XSopJiMzOTs7XG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0xMTUtbXkgJHJlZ2V4X2xydV9pc29sYXRlX2RlZmF1bHQgPSAmIzM5O2NsYXNzem9uZT0oWzAtOV0qKSBvcmRlcj0oWzAtOV0qKSBucl9yZXF1ZXN0ZWQ9KFswLTldKikgbnJfc2Nhbm5lZD0oWzAtOV0qKSBucl9za2lwcGVkPShbMC05XSopIG5yX3Rha2UuLi5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbD0xMjQ9bXkgJHJlZ2V4X2tzd2FwZF9zbGVlcDtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjEyNTpteSAkcmVnZXhfd2FrZXVwX2tzd2FwZDtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTEyNi1teSAkcmVnZXhfbHJ1X2lzb2xhdGU7XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9MTk2PSRyZWdleF9rc3dhcGRfc2xlZXAgPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KFxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTE5OS1cdFx0XHRcJiMzNDtuaWRcJiMzNDspO1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MjAwOiRyZWdleF93YWtldXBfa3N3YXBkID0gZ2VuZXJhdGVfdHJhY2VldmVudF9yZWdleChcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjIwMTpcdFx0XHRcJiMzNDt2bXNjYW4vbW1fdm1zY2FuX3dha2V1cF9rc3dhcGRcJiMzNDssXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDoyMDI6XHRcdFx0JHJlZ2V4X3dha2V1cF9rc3dhcGRfZGVmYXVsdCxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTIwMy1cdFx0XHRcJiMzNDtuaWRcJiMzNDssIFwmIzM0O29yZGVyXCYjMzQ7LCBcJiMzNDtnZnBfZmxhZ3NcJiMzNDspO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsPTI3NT1FVkVOVF9QUk9DRVNTOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM2MS1cdFx0XHQkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LVx1MDAzZXtTVEFURV9LU1dBUERfQkVHSU59ID0gMDtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjM2MjpcdFx0fSBlbHNpZiAoJHRyYWNlcG9pbnQgZXEgXCYjMzQ7bW1fdm1zY2FuX3dha2V1cF9rc3dhcGRcJiMzNDspIHtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM2My1cdFx0XHQkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LVx1MDAzZXtNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRH0mIzQzOyYjNDM7O1xuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM2NS1cdFx0XHQkZGV0YWlscyA9ICQ2O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MzY2Olx0XHRcdGlmICgkZGV0YWlscyAhfiAvJHJlZ2V4X3dha2V1cF9rc3dhcGQvbykge1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MzY3Olx0XHRcdFx0cHJpbnQgXCYjMzQ7V0FSTklORzogRmFpbGVkIHRvIHBhcnNlIG1tX3Ztc2Nhbl93YWtldXBfa3N3YXBkIGFzIGV4cGVjdGVkXFxuXCYjMzQ7O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtMzY4LVx0XHRcdFx0cHJpbnQgXCYjMzQ7ICAgICAgICAgJGRldGFpbHNcXG5cJiMzNDs7XG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDozNjk6XHRcdFx0XHRwcmludCBcJiMzNDsgICAgICAgICAkcmVnZXhfd2FrZXVwX2tzd2FwZFxcblwmIzM0OztcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM3MC1cdFx0XHRcdG5leHQ7XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9NDU3PXN1YiBkdW1wX3N0YXRzIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC01MTMtXHRcdCR0b3RhbF9kaXJlY3RfcmVjbGFpbSAmIzQzOz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tXHUwMDNle01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJTn07XG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDo1MTQ6XHRcdCR0b3RhbF93YWtldXBfa3N3YXBkICYjNDM7PSAkc3RhdHN7JHByb2Nlc3NfcGlkfS1cdTAwM2V7TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUER9O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNTE1LVx0XHQkdG90YWxfZGlyZWN0X25yX3NjYW5uZWQgJiM0Mzs9ICRzdGF0c3skcHJvY2Vzc19waWR9LVx1MDAzZXtISUdIX05SX1NDQU5ORUR9O1xuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTY0MS1cdHByaW50IFwmIzM0O0RpcmVjdCByZWNsYWltIHdyaXRlIGFub24gYXN5bmMgSS9POlx0JHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfYW5vbl9hc3luY1xcblwmIzM0OztcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjY0MjpcdHByaW50IFwmIzM0O1dha2Uga3N3YXBkIHJlcXVlc3RzOlx0XHRcdCR0b3RhbF93YWtldXBfa3N3YXBkXFxuXCYjMzQ7O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNjQzLVx0cHJpbnRmIFwmIzM0O1RpbWUgc3RhbGxlZCBkaXJlY3QgcmVjbGFpbTogXHRcdCUtMS4yZiBzZWNvbmRzXFxuXCYjMzQ7LCAkdG90YWxfZGlyZWN0X2xhdGVuY3k7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjM3PWVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjQzLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjQ0OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY0NS1cdFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0xMjM9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfZW5kLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTE1MC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjE1MTpUUkFDRV9FVkVOVChtbV92bXNjYW5fd2FrZXVwX2tzd2FwZCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTE1Mi1cbi0tXG5tbS9taWdyYXRlLmM9MjY5MD1pbnQgbWlncmF0ZV9taXNwbGFjZWRfZm9saW9fcHJlcGFyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0yNzM0LVxubW0vbWlncmF0ZS5jOjI3MzU6XHRcdHdha2V1cF9rc3dhcGQocGdkYXQtXHUwMDNlbm9kZV96b25lcyAmIzQzOyB6LCAwLFxubW0vbWlncmF0ZS5jLTI3MzYtXHRcdFx0ICAgICAgZm9saW9fb3JkZXIoZm9saW8pLCBaT05FX01PVkFCTEUpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNDEzPXN0cnVjdCBwYWdlICpybXF1ZXVlKHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzQzNC1cdFx0Y2xlYXJfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpO1xubW0vcGFnZV9hbGxvYy5jOjM0MzU6XHRcdHdha2V1cF9rc3dhcGQoem9uZSwgMCwgMCwgem9uZV9pZHgoem9uZSkpO1xubW0vcGFnZV9hbGxvYy5jLTM0MzYtXHR9XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ1MDI9c3RhdGljIHZvaWQgd2FrZV9hbGxfa3N3YXBkcyh1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00NTIxLVx0XHRcdGNvbnRpbnVlO1xubW0vcGFnZV9hbGxvYy5jOjQ1MjI6XHRcdHdha2V1cF9rc3dhcGQoem9uZSwgZ2ZwX21hc2ssIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS9wYWdlX2FsbG9jLmMtNDUyMy1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbi0tXG5tbS92bXNjYW4uYz03NDc0PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4tLVxubW0vdm1zY2FuLmMtNzU1NC0gKi9cbm1tL3Ztc2Nhbi5jOjc1NTU6dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTc1NTYtXHRcdCAgIGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03NTk0LVxubW0vdm1zY2FuLmM6NzU5NTpcdHRyYWNlX21tX3Ztc2Nhbl93YWtldXBfa3N3YXBkKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXG5tbS92bXNjYW4uYy03NTk2LVx0XHRcdFx0ICAgICAgZ2ZwX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2ODAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYXMgYSBrZXJuZWwgbWVtb3J5IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEZ1bmN0aW9ucyBSZWxhdGVkIHRvIE1lbW9yeSBDb21wYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIG5vdGljZWQgYSBmZXcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGNvbXBhY3Rpb24sIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgSSYjMzk7dmUgZ290IGB3YWtldXBfa3N3YXBkYCwgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGFuZCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AgZmxhZ2dlZC4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmVuJiMzOTt0IGBzdGF0aWNgIHN1Z2dlc3RzIHRoZXkgbWlnaHQgYmUgZXhwb3NlZCBmb3IgdXNlIG91dHNpZGUgdGhlaXIgaW1tZWRpYXRlIG1vZHVsZSwgd2hpY2gsIGdpdmVuIHRoZWlyIG5hbWVzLCBsaWtlbHkgY2VudGVycyBhcm91bmQgdGhlIGtlcm5lbCYjMzk7cyBjb21wYWN0aW9uIGFuZCBzd2FwcGluZyBtZWNoYW5pc21zLgoKTm93LCBteSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoZSBub24tc3RhdGljIHN0YXR1cyBpcyBhIHBvdGVudGlhbCBjbHVlIHRvIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgYW5kIHBvdGVudGlhbGx5IGludGVyYWN0ZWQgd2l0aCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgbmV4dCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIGBrY29tcGFjdGRgIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4gU2luY2UgdGhleSBzZWVtIGxpbmtlZCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYG1tL2NvbXBhY3Rpb24uY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2NvbXBhY3RkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vY29uY2VwdHMucnN0PTIwNj1waHlzaWNhbGx5IGNvbnRpZ3VvdXMgYXJlYXMgYmVjb21lIHBvc3NpYmxlLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9jb25jZXB0cy5yc3QtMjA3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9jb25jZXB0cy5yc3Q6MjA4Okxpa2UgcmVjbGFpbSwgdGhlIGNvbXBhY3Rpb24gbWF5IGhhcHBlbiBhc3luY2hyb25vdXNseSBpbiB0aGUgYGBrY29tcGFjdGRgYFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9jb25jZXB0cy5yc3QtMjA5LWRhZW1vbiBvciBzeW5jaHJvbm91c2x5IGFzIGEgcmVzdWx0IG9mIGEgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MTc3PWRlZmVyXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTc4LVx0bWVhbnMgdGhhdCBhbiBhcHBsaWNhdGlvbiB3aWxsIHdha2Uga3N3YXBkIGluIHRoZSBiYWNrZ3JvdW5kXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MTc5Olx0dG8gcmVjbGFpbSBwYWdlcyBhbmQgd2FrZSBrY29tcGFjdGQgdG8gY29tcGFjdCBtZW1vcnkgc28gdGhhdFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTE4MC1cdFRIUCBpcyBhdmFpbGFibGUgaW4gdGhlIG5lYXIgZnV0dXJlLiBJdCYjMzk7cyB0aGUgcmVzcG9uc2liaWxpdHlcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MTgzPWRlZmVyJiM0MzttYWR2aXNlXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTE4Ni1cdG90aGVyIHJlZ2lvbnMgd2lsbCB3YWtlIGtzd2FwZCBpbiB0aGUgYmFja2dyb3VuZCB0byByZWNsYWltXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MTg3Olx0cGFnZXMgYW5kIHdha2Uga2NvbXBhY3RkIHRvIGNvbXBhY3QgbWVtb3J5IHNvIHRoYXQgVEhQIGlzXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTg4LVx0YXZhaWxhYmxlIGluIHRoZSBuZWFyIGZ1dHVyZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdD04NT1wZXJmb3JtIChlLmcuIHBhZ2UgYWxsb2NhdGlvbiwgZGlydHkgd3JpdGViYWNrLCBwYWdlIHJlY2xhaW0pLiBXaGVuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdDo4Njp1c2luZyBORlNEIERJUkVDVCwga3N3YXBkIGFuZCBrY29tcGFjdGQgYXJlIG5vIGxvbmdlciBjb21tYW5kaW5nIENQVVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtODctdGltZSB0cnlpbmcgdG8gZmluZCBhZGVxdWF0ZSBmcmVlIHBhZ2VzIHNvIHRoYXQgZm9yd2FyZCBJTyBwcm9ncmVzcyBjYW5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MzA4PUNvbXBhY3Rpb24gY29udHJvbFxuLS1cbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMTAtXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzExOmBga2NvbXBhY3RkX21heF9vcmRlcmBgXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzEyOiAgUGFnZSBvcmRlciB0aGF0IGtjb21wYWN0ZCBzaG91bGQgdHJ5IHRvIGFjaGlldmUuXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMzEzLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMxNDpgYGtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHhgYFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMxNTogIFRoZSBoaWdoZXN0IHpvbmUgaW5kZXggdG8gYmUgY29tcGFjdGVkIGJ5IGtjb21wYWN0ZC5cbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMTYtXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzE3OmBga2NvbXBhY3RkX3dhaXRgYFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMxOC0gIFdvcmtxdWV1ZSB1c2VkIHRvIHN5bmNocm9uaXplIG1lbW9yeSBjb21wYWN0aW9uIHRhc2tzLlxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMxOS1cbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMjA6YGBrY29tcGFjdGRgYFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMyMTogIFBlci1ub2RlIGluc3RhbmNlIG9mIGtjb21wYWN0ZCBrZXJuZWwgdGhyZWFkLlxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMyMi1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTI4MT1rc3dhcGTml6Dms5Xlm57mlLbku7vkvZXpobXpnaLnmoTov5DooYzmrKHmlbDjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTI5Ni1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6Mjk3OmBga2NvbXBhY3RkX21heF9vcmRlcmBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjI5ODprY29tcGFjdGTlupTlsJ3or5Xlrp7njrDnmoTpobXpnaJvcmRlcuOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yOTktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMwMDpgYGtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHhgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMDE6a2NvbXBhY3Rk5Y+v5Lul5Y6L57yp55qE5pyA6auY5Yy65Z+f57Si5byV44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMwMi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzAzOmBga2NvbXBhY3RkX3dhaXRgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDQt5ZCM5q2l5YaF5a2Y5Y6L57yp5Lu75Yqh55qE5bel5L2c6Zif5YiX44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMwNS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzA2OmBga2NvbXBhY3RkYGBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzA3Ouavj+S4quiKgueCueeahGtjb21wYWN0ZOWGheaguOe6v+eoi+WunuS+i+OAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDgtXG4tLVxuZnMvbmZzL2ZpbGUuYz01MTI9c3RhdGljIGJvb2wgbmZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25mcy9maWxlLmMtNTE4LVx0XHRpZiAoKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKSBcdTAwMjYgR0ZQX0tFUk5FTCkgIT0gR0ZQX0tFUk5FTCB8fFxuZnMvbmZzL2ZpbGUuYzo1MTk6XHRcdCAgICBjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkpXG5mcy9uZnMvZmlsZS5jLTUyMC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9Njg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBhY3RfZ2FwKHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC04My1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjg0OnN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC04NS17XG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTA0PWJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMDYtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDc6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9ydW4oaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDg6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTA5OmV4dGVybiB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTExMC1cbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMTY9c3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjItXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMjM6c3RhdGljIGlubGluZSB2b2lkIGtjb21wYWN0ZF9ydW4oaW50IG5pZClcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEyNC17XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjUtfVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTI2OnN0YXRpYyBpbmxpbmUgdm9pZCBrY29tcGFjdGRfc3RvcChpbnQgbmlkKVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTI3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjktXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMzA6c3RhdGljIGlubGluZSB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEzMS1cdFx0XHRcdGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oPTI2PWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzY1LSAqIGFyZSBjb21wb3VuZCBhbGxvY2F0aW9ucyB0aGF0IHdpbGwgZ2VuZXJhbGx5IGZhaWwgcXVpY2tseSBpZiBtZW1vcnkgaXMgbm90XG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM2NjogKiBhdmFpbGFibGUgYW5kIHdpbGwgbm90IHdha2Uga3N3YXBkL2tjb21wYWN0ZCBvbiBmYWlsdXJlLiBUaGUgX0xJR0hUXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM2Ny0gKiB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgcmVjbGFpbS9jb21wYWN0aW9uIGF0IGFsbCBhbmQgaXMgYnkgZGVmYXVsdCB1c2VkXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDc4PXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1MzgtI2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1Mzk6XHRpbnQga2NvbXBhY3RkX21heF9vcmRlcjtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU0MDpcdGVudW0gem9uZV90eXBlIGtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHg7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1NDE6XHR3YWl0X3F1ZXVlX2hlYWRfdCBrY29tcGFjdGRfd2FpdDtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU0MjpcdHN0cnVjdCB0YXNrX3N0cnVjdCAqa2NvbXBhY3RkO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTQzLVx0Ym9vbCBwcm9hY3RpdmVfY29tcGFjdF90cmlnZ2VyO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD0xNzcxPWV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNzkxLSNkZWZpbmUgUEZfTk9GUkVFWkVcdFx0MHgwMDAwODAwMFx0LyogVGhpcyB0aHJlYWQgc2hvdWxkIG5vdCBiZSBmcm96ZW4gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNzkyOiNkZWZpbmUgUEZfS0NPTVBBQ1REXHRcdDB4MDAwMTAwMDBcdC8qIEkgYW0ga2NvbXBhY3RkICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc5My0jZGVmaW5lIFBGX0tTV0FQRFx0XHQweDAwMDIwMDAwXHQvKiBJIGFtIGtzd2FwZCAqL1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaD0yODY9REVGSU5FX0VWRU5UKG1tX2NvbXBhY3Rpb25fZGVmZXJfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25fZGVmZXJfcmVzZXQsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTI5Mi1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaDoyOTM6VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl9rY29tcGFjdGRfc2xlZXAsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMjk0LVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0zMDktXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MzEwOkRFQ0xBUkVfRVZFTlRfQ0xBU1Moa2NvbXBhY3RkX3dha2VfdGVtcGxhdGUsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzExLVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0zMzctXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MzM4OkRFRklORV9FVkVOVChrY29tcGFjdGRfd2FrZV90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl93YWtldXBfa2NvbXBhY3RkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTMzOS1cbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzQ0LVxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oOjM0NTpERUZJTkVfRVZFTlQoa2NvbXBhY3RkX3dha2VfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25fa2NvbXBhY3RkX3dha2UsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzQ2LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yMjQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vY29tcGFjdGlvbi5jLTIyNTMtICogVGhlIHBlci1ub2RlIHByb2FjdGl2ZSAoYmFja2dyb3VuZCkgY29tcGFjdGlvbiBwcm9jZXNzIGlzIHN0YXJ0ZWQgYnkgaXRzXG5tbS9jb21wYWN0aW9uLmM6MjI1NDogKiBjb3JyZXNwb25kaW5nIGtjb21wYWN0ZCB0aHJlYWQgd2hlbiB0aGUgbm9kZSYjMzk7cyBmcmFnbWVudGF0aW9uIHNjb3JlXG5tbS9jb21wYWN0aW9uLmMtMjI1NS0gKiBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZC4gVGhlIGNvbXBhY3Rpb24gcHJvY2VzcyByZW1haW5zIGFjdGl2ZSB0aWxsXG4tLVxubW0vY29tcGFjdGlvbi5jPTIyOTc9c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgX19jb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMzA5LVx0XHQgKiBNYXJrIHRoYXQgdGhlIFBHX21pZ3JhdGVfc2tpcCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgY2xlYXJlZFxubW0vY29tcGFjdGlvbi5jOjIzMTA6XHRcdCAqIGJ5IGtzd2FwZCB3aGVuIGl0IGdvZXMgdG8gc2xlZXAuIGtjb21wYWN0ZCBkb2VzIG5vdCBzZXQgdGhlXG5tbS9jb21wYWN0aW9uLmMtMjMxMS1cdFx0ICogZmxhZyBpdHNlbGYgYXMgdGhlIGRlY2lzaW9uIHRvIGJlIGNsZWFyIHNob3VsZCBiZSBkaXJlY3RseVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMzU1LVx0Lypcbm1tL2NvbXBhY3Rpb24uYzoyMzU2Olx0ICogV2hlbiBkZWZyYWdfbW9kZSBpcyBlbmFibGVkLCBtYWtlIGtjb21wYWN0ZCB0YXJnZXRcbm1tL2NvbXBhY3Rpb24uYy0yMzU3LVx0ICogd2F0ZXJtYXJrcyBpbiB3aG9sZSBwYWdlYmxvY2tzLiBCZWNhdXNlIHRoZXkgY2FuIGJlIHN0b2xlblxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNDk3PWJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjUzOC0gKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2hcbm1tL2NvbXBhY3Rpb24uYzoyNTM5OiAqIHRoaXMgb24gaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuXG5tbS9jb21wYWN0aW9uLmMtMjU0MC0gKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNTcxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9jb21wYWN0aW9uLmMtMjU3Mi1cdFx0XHRcdCBpbnQgaGlnaGVzdF96b25laWR4LCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXG5tbS9jb21wYWN0aW9uLmM6MjU3MzpcdFx0XHRcdCBib29sIGFzeW5jLCBib29sIGtjb21wYWN0ZClcbm1tL2NvbXBhY3Rpb24uYy0yNTc0LXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjU3OC1cdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxubW0vY29tcGFjdGlvbi5jOjI1Nzk6XHRcdFx0XHRcdCAgICAgICBrY29tcGFjdGQgXHUwMDI2XHUwMDI2IGRlZnJhZ19tb2RlKTtcbm1tL2NvbXBhY3Rpb24uYy0yNTgwLVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0zMDIzPXN0YXRpYyBpbnQgY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubW0vY29tcGFjdGlvbi5jLTMwMzktXHRcdFx0cGdkYXQtXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IHRydWU7XG5tbS9jb21wYWN0aW9uLmM6MzA0MDpcdFx0XHR0cmFjZV9tbV9jb21wYWN0aW9uX3dha2V1cF9rY29tcGFjdGQocGdkYXQtXHUwMDNlbm9kZV9pZCwgLTEsXG5tbS9jb21wYWN0aW9uLmMtMzA0MS1cdFx0XHRcdFx0XHRcdCAgICAgcGdkYXQtXHUwMDNlbnJfem9uZXMgLSAxKTtcbm1tL2NvbXBhY3Rpb24uYzozMDQyOlx0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZwZ2RhdC1cdTAwM2VrY29tcGFjdGRfd2FpdCk7XG5tbS9jb21wYWN0aW9uLmMtMzA0My1cdFx0fVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0zMDk0PXZvaWQgY29tcGFjdGlvbl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG4tLVxubW0vY29tcGFjdGlvbi5jLTMwOTktXG5tbS9jb21wYWN0aW9uLmM6MzEwMDpzdGF0aWMgaW5saW5lIGJvb2wga2NvbXBhY3RkX3dvcmtfcmVxdWVzdGVkKHBnX2RhdGFfdCAqcGdkYXQpXG5tbS9jb21wYWN0aW9uLmMtMzEwMS17XG5tbS9jb21wYWN0aW9uLmM6MzEwMjpcdHJldHVybiBwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyIFx1MDAzZSAwIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fFxubW0vY29tcGFjdGlvbi5jLTMxMDMtXHRcdHBnZGF0LVx1MDAzZXByb2FjdGl2ZV9jb21wYWN0X3RyaWdnZXI7XG4tLVxubW0vY29tcGFjdGlvbi5jLTMxMDUtXG5tbS9jb21wYWN0aW9uLmM6MzEwNjpzdGF0aWMgYm9vbCBrY29tcGFjdGRfbm9kZV9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KVxubW0vY29tcGFjdGlvbi5jLTMxMDcte1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMTA5LVx0c3RydWN0IHpvbmUgKnpvbmU7XG5tbS9jb21wYWN0aW9uLmM6MzExMDpcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeCA9IHBnZGF0LVx1MDAzZWtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHg7XG5tbS9jb21wYWN0aW9uLmMtMzExMS1cdGVudW0gY29tcGFjdF9yZXN1bHQgcmV0O1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMTIxLVx0XHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcih6b25lLFxubW0vY29tcGFjdGlvbi5jOjMxMjI6XHRcdFx0XHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyLFxubW0vY29tcGFjdGlvbi5jLTMxMjMtXHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgsIGFsbG9jX2ZsYWdzLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMTMxLVxubW0vY29tcGFjdGlvbi5jOjMxMzI6c3RhdGljIHZvaWQga2NvbXBhY3RkX2RvX3dvcmsocGdfZGF0YV90ICpwZ2RhdClcbm1tL2NvbXBhY3Rpb24uYy0zMTMzLXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzE0MC1cdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7XG5tbS9jb21wYWN0aW9uLmM6MzE0MTpcdFx0Lm9yZGVyID0gcGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlcixcbm1tL2NvbXBhY3Rpb24uYzozMTQyOlx0XHQuc2VhcmNoX29yZGVyID0gcGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlcixcbm1tL2NvbXBhY3Rpb24uYzozMTQzOlx0XHQuaGlnaGVzdF96b25laWR4ID0gcGdkYXQtXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCxcbm1tL2NvbXBhY3Rpb24uYy0zMTQ0LVx0XHQubW9kZSA9IE1JR1JBVEVfU1lOQ19MSUdIVCxcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzE1MC1cbm1tL2NvbXBhY3Rpb24uYzozMTUxOlx0dHJhY2VfbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfd2FrZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBjYy5vcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0zMTUyLVx0XHRcdFx0XHRcdFx0Y2MuaGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzIwNS1cdCAqL1xubW0vY29tcGFjdGlvbi5jOjMyMDY6XHRpZiAocGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciBcdTAwM2M9IGNjLm9yZGVyKVxubW0vY29tcGFjdGlvbi5jOjMyMDc6XHRcdHBnZGF0LVx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIgPSAwO1xubW0vY29tcGFjdGlvbi5jOjMyMDg6XHRpZiAocGdkYXQtXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCBcdTAwM2U9IGNjLmhpZ2hlc3Rfem9uZWlkeClcbm1tL2NvbXBhY3Rpb24uYzozMjA5Olx0XHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfaGlnaGVzdF96b25laWR4ID0gcGdkYXQtXHUwMDNlbnJfem9uZXMgLSAxO1xubW0vY29tcGFjdGlvbi5jLTMyMTAtfVxubW0vY29tcGFjdGlvbi5jLTMyMTEtXG5tbS9jb21wYWN0aW9uLmM6MzIxMjp2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxubW0vY29tcGFjdGlvbi5jLTMyMTMte1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjE2LVxubW0vY29tcGFjdGlvbi5jOjMyMTc6XHRpZiAocGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciBcdTAwM2Mgb3JkZXIpXG5tbS9jb21wYWN0aW9uLmM6MzIxODpcdFx0cGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciA9IG9yZGVyO1xubW0vY29tcGFjdGlvbi5jLTMyMTktXG5tbS9jb21wYWN0aW9uLmM6MzIyMDpcdGlmIChwZ2RhdC1cdTAwM2VrY29tcGFjdGRfaGlnaGVzdF96b25laWR4IFx1MDAzZSBoaWdoZXN0X3pvbmVpZHgpXG5tbS9jb21wYWN0aW9uLmM6MzIyMTpcdFx0cGdkYXQtXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCA9IGhpZ2hlc3Rfem9uZWlkeDtcbm1tL2NvbXBhY3Rpb24uYy0zMjIyLVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjI2LVx0ICovXG5tbS9jb21wYWN0aW9uLmM6MzIyNzpcdGlmICghd3FfaGFzX3NsZWVwZXIoXHUwMDI2cGdkYXQtXHUwMDNla2NvbXBhY3RkX3dhaXQpKVxubW0vY29tcGFjdGlvbi5jLTMyMjgtXHRcdHJldHVybjtcbm1tL2NvbXBhY3Rpb24uYy0zMjI5LVxubW0vY29tcGFjdGlvbi5jOjMyMzA6XHRpZiAoIWtjb21wYWN0ZF9ub2RlX3N1aXRhYmxlKHBnZGF0KSlcbm1tL2NvbXBhY3Rpb24uYy0zMjMxLVx0XHRyZXR1cm47XG5tbS9jb21wYWN0aW9uLmMtMzIzMi1cbm1tL2NvbXBhY3Rpb24uYzozMjMzOlx0dHJhY2VfbW1fY29tcGFjdGlvbl93YWtldXBfa2NvbXBhY3RkKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG9yZGVyLFxubW0vY29tcGFjdGlvbi5jLTMyMzQtXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xubW0vY29tcGFjdGlvbi5jOjMyMzU6XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2cGdkYXQtXHUwMDNla2NvbXBhY3RkX3dhaXQpO1xubW0vY29tcGFjdGlvbi5jLTMyMzYtfVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjQxLSAqL1xubW0vY29tcGFjdGlvbi5jOjMyNDI6c3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbm1tL2NvbXBhY3Rpb24uYy0zMjQzLXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzI1MC1cbm1tL2NvbXBhY3Rpb24uYzozMjUxOlx0cGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciA9IDA7XG5tbS9jb21wYWN0aW9uLmM6MzI1MjpcdHBnZGF0LVx1MDAzZWtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHggPSBwZ2RhdC1cdTAwM2Vucl96b25lcyAtIDE7XG5tbS9jb21wYWN0aW9uLmMtMzI1My1cbi0tXG5tbS9jb21wYWN0aW9uLmMtMzI2Mi1cdFx0XHR0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7XG5tbS9jb21wYWN0aW9uLmM6MzI2MzpcdFx0dHJhY2VfbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfc2xlZXAocGdkYXQtXHUwMDNlbm9kZV9pZCk7XG5tbS9jb21wYWN0aW9uLmM6MzI2NDpcdFx0aWYgKHdhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQocGdkYXQtXHUwMDNla2NvbXBhY3RkX3dhaXQsXG5tbS9jb21wYWN0aW9uLmM6MzI2NTpcdFx0XHRrY29tcGFjdGRfd29ya19yZXF1ZXN0ZWQocGdkYXQpLCB0aW1lb3V0KSBcdTAwMjZcdTAwMjZcbm1tL2NvbXBhY3Rpb24uYy0zMjY2LVx0XHRcdCFwZ2RhdC1cdTAwM2Vwcm9hY3RpdmVfY29tcGFjdF90cmlnZ2VyKSB7XG4tLVxubW0vY29tcGFjdGlvbi5jLTMyNjgtXHRcdFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9jb21wYWN0aW9uLmM6MzI2OTpcdFx0XHRrY29tcGFjdGRfZG9fd29yayhwZ2RhdCk7XG5tbS9jb21wYWN0aW9uLmMtMzI3MC1cdFx0XHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzMxMS0vKlxubW0vY29tcGFjdGlvbi5jOjMzMTI6ICogVGhpcyBrY29tcGFjdGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxubW0vY29tcGFjdGlvbi5jOjMzMTM6ICogT24gbm9kZS1ob3QtYWRkLCBrY29tcGFjdGQgd2lsbCBtb3ZlZCB0byBwcm9wZXIgY3B1cyBpZiBjcHVzIGFyZSBob3QtYWRkZWQuXG5tbS9jb21wYWN0aW9uLmMtMzMxNC0gKi9cbm1tL2NvbXBhY3Rpb24uYzozMzE1OnZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9ydW4oaW50IG5pZClcbm1tL2NvbXBhY3Rpb24uYy0zMzE2LXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzMxOC1cbm1tL2NvbXBhY3Rpb24uYzozMzE5Olx0aWYgKHBnZGF0LVx1MDAzZWtjb21wYWN0ZClcbm1tL2NvbXBhY3Rpb24uYy0zMzIwLVx0XHRyZXR1cm47XG5tbS9jb21wYWN0aW9uLmMtMzMyMS1cbm1tL2NvbXBhY3Rpb24uYzozMzIyOlx0cGdkYXQtXHUwMDNla2NvbXBhY3RkID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShrY29tcGFjdGQsIHBnZGF0LCBuaWQsIFwmIzM0O2tjb21wYWN0ZCVkXCYjMzQ7LCBuaWQpO1xubW0vY29tcGFjdGlvbi5jOjMzMjM6XHRpZiAoSVNfRVJSKHBnZGF0LVx1MDAzZWtjb21wYWN0ZCkpIHtcbm1tL2NvbXBhY3Rpb24uYzozMzI0Olx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IGtjb21wYWN0ZCBvbiBub2RlICVkXFxuXCYjMzQ7LCBuaWQpO1xubW0vY29tcGFjdGlvbi5jOjMzMjU6XHRcdHBnZGF0LVx1MDAzZWtjb21wYWN0ZCA9IE5VTEw7XG5tbS9jb21wYWN0aW9uLmMtMzMyNi1cdH0gZWxzZSB7XG5tbS9jb21wYWN0aW9uLmM6MzMyNzpcdFx0d2FrZV91cF9wcm9jZXNzKHBnZGF0LVx1MDAzZWtjb21wYWN0ZCk7XG5tbS9jb21wYWN0aW9uLmMtMzMyOC1cdH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtMzMzNC0gKi9cbm1tL2NvbXBhY3Rpb24uYzozMzM1OnZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpXG5tbS9jb21wYWN0aW9uLmMtMzMzNi17XG5tbS9jb21wYWN0aW9uLmM6MzMzNzpcdHN0cnVjdCB0YXNrX3N0cnVjdCAqa2NvbXBhY3RkID0gTk9ERV9EQVRBKG5pZCktXHUwMDNla2NvbXBhY3RkO1xubW0vY29tcGFjdGlvbi5jLTMzMzgtXG5tbS9jb21wYWN0aW9uLmM6MzMzOTpcdGlmIChrY29tcGFjdGQpIHtcbm1tL2NvbXBhY3Rpb24uYzozMzQwOlx0XHRrdGhyZWFkX3N0b3Aoa2NvbXBhY3RkKTtcbm1tL2NvbXBhY3Rpb24uYzozMzQxOlx0XHROT0RFX0RBVEEobmlkKS1cdTAwM2VrY29tcGFjdGQgPSBOVUxMO1xubW0vY29tcGFjdGlvbi5jLTMzNDItXHR9XG4tLVxubW0vY29tcGFjdGlvbi5jPTMzNjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1fY29tcGFjdGlvbltdID0ge1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zNDAwLVxubW0vY29tcGFjdGlvbi5jOjM0MDE6c3RhdGljIGludCBfX2luaXQga2NvbXBhY3RkX2luaXQodm9pZClcbm1tL2NvbXBhY3Rpb24uYy0zNDAyLXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzQwNS1cdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbm1tL2NvbXBhY3Rpb24uYzozNDA2Olx0XHRrY29tcGFjdGRfcnVuKG5pZCk7XG5tbS9jb21wYWN0aW9uLmMtMzQwNy1cdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCB2bV9jb21wYWN0aW9uKTtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzQwOS19XG5tbS9jb21wYWN0aW9uLmM6MzQxMDpzdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXG5tbS9jb21wYWN0aW9uLmMtMzQxMS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTE0ODE9Z2ZwX3Qgdm1hX3RocF9nZnBfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE0ODgtXG5tbS9odWdlX21lbW9yeS5jOjE0ODk6XHQvKiBLaWNrIGtjb21wYWN0ZCBhbmQgZmFpbCBxdWlja2x5ICovXG5tbS9odWdlX21lbW9yeS5jLTE0OTAtXHRpZiAodGVzdF9iaXQoVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0tTV0FQRF9GTEFHLCBcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNDkyLVxubW0vaHVnZV9tZW1vcnkuYzoxNDkzOlx0LyogU3luY2hyb25vdXMgY29tcGFjdGlvbiBpZiBtYWR2aXNlZCwgb3RoZXJ3aXNlIGtpY2sga2NvbXBhY3RkICovXG5tbS9odWdlX21lbW9yeS5jLTE0OTQtXHRpZiAodGVzdF9iaXQoVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0tTV0FQRF9PUl9NQURWX0ZMQUcsIFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcbi0tXG5tbS9pbnRlcm5hbC5oPTgyMz1zdHJ1Y3QgY29tcGFjdF9jb250cm9sIHtcbi0tXG5tbS9pbnRlcm5hbC5oLTg1MC1cdGJvb2wgaWdub3JlX2Jsb2NrX3N1aXRhYmxlO1x0LyogU2NhbiBibG9ja3MgY29uc2lkZXJlZCB1bnN1aXRhYmxlICovXG5tbS9pbnRlcm5hbC5oOjg1MTpcdGJvb2wgZGlyZWN0X2NvbXBhY3Rpb247XHRcdC8qIEZhbHNlIGZyb20ga2NvbXBhY3RkIG9yIC9wcm9jLy4uLiAqL1xubW0vaW50ZXJuYWwuaDo4NTI6XHRib29sIHByb2FjdGl2ZV9jb21wYWN0aW9uO1x0Lyoga2NvbXBhY3RkIHByb2FjdGl2ZSBjb21wYWN0aW9uICovXG5tbS9pbnRlcm5hbC5oLTg1My1cdGJvb2wgd2hvbGVfem9uZTtcdFx0LyogV2hvbGUgem9uZSBzaG91bGQvaGFzIGJlZW4gc2Nhbm5lZCAqL1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzMi1cdGtzd2FwZF9ydW4obmlkKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIzMzpcdGtjb21wYWN0ZF9ydW4obmlkKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzNC1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5NTU9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTQzLVx0aWYgKG5vZGVfYXJnLm5pZCBcdTAwM2U9IDApIHtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjE0NDpcdFx0a2NvbXBhY3RkX3N0b3Aobm9kZSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxNDUtXHRcdGtzd2FwZF9zdG9wKG5vZGUpO1xuLS1cbm1tL21tX2luaXQuYz0xMzMxPXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vbW1faW5pdC5jLTEzNzQtI2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9tbV9pbml0LmM6MTM3NTpzdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxubW0vbW1faW5pdC5jLTEzNzYte1xubW0vbW1faW5pdC5jOjEzNzc6XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnBnZGF0LVx1MDAzZWtjb21wYWN0ZF93YWl0KTtcbm1tL21tX2luaXQuYy0xMzc4LX1cbm1tL21tX2luaXQuYy0xMzc5LSNlbHNlXG5tbS9tbV9pbml0LmM6MTM4MDpzdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KSB7fVxubW0vbW1faW5pdC5jLTEzODEtI2VuZGlmXG4tLVxubW0vbW1faW5pdC5jPTEzODM9c3RhdGljIHZvaWQgX19tZW1pbml0IHBnZGF0X2luaXRfaW50ZXJuYWxzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vbW1faW5pdC5jLTEzODgtXHRwZ2RhdF9rc3dhcGRfbG9ja19pbml0KHBnZGF0KTtcbm1tL21tX2luaXQuYzoxMzg5Olx0cGdkYXRfaW5pdF9rY29tcGFjdGQocGdkYXQpO1xubW0vbW1faW5pdC5jLTEzOTAtXG4tLVxubW0vc2x1Yi5jPTY4NjE9c3RhdGljIGdmcF90IGttYWxsb2NfZ2ZwX2FkanVzdChnZnBfdCBmbGFncywgc2l6ZV90IHNpemUpXG4tLVxubW0vc2x1Yi5jLTY4NjgtXHQgKiBkbyBub3QgZGlyZWN0IHJlY2xhaW0gdW5sZXNzIHBoeXNpY2FsbHkgY29udGludW91cyBtZW1vcnkgaXMgcHJlZmVycmVkXG5tbS9zbHViLmM6Njg2OTpcdCAqIChfX0dGUF9SRVRSWV9NQVlGQUlMIG1vZGUpLiBXZSBzdGlsbCBraWNrIGluIGtzd2FwZC9rY29tcGFjdGQgdG9cbm1tL3NsdWIuYy02ODcwLVx0ICogc3RhcnQgd29ya2luZyBpbiB0aGUgYmFja2dyb3VuZFxuLS1cbm1tL3Ztc2Nhbi5jPTcxMzk9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MzQxLVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjczNDI6XHRcdHdha2V1cF9rY29tcGFjdGQocGdkYXQsIHBhZ2VibG9ja19vcmRlciwgaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTczNDMtXHR9XG4tLVxubW0vdm1zY2FuLmM9NzM3Nz1zdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNzM4OC1cdC8qXG5tbS92bXNjYW4uYzo3Mzg5Olx0ICogVHJ5IHRvIHNsZWVwIGZvciBhIHNob3J0IGludGVydmFsLiBOb3RlIHRoYXQga2NvbXBhY3RkIHdpbGwgb25seSBiZVxubW0vdm1zY2FuLmMtNzM5MC1cdCAqIHdva2VuIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHNsZWVwIGZvciBhIHNob3J0IGludGVydmFsLiBUaGlzIGlzXG4tLVxubW0vdm1zY2FuLmMtNzQwNy1cdFx0ICovXG5tbS92bXNjYW4uYzo3NDA4Olx0XHR3YWtldXBfa2NvbXBhY3RkKHBnZGF0LCBhbGxvY19vcmRlciwgaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTc0MDktXG4tLVxubW0vdm1zY2FuLmM9NzQ3ND1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1MzEtXHRcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcbm1tL3Ztc2Nhbi5jOjc1MzI6XHRcdCAqIGJ1dCBrY29tcGFjdGQgaXMgd29rZW4gdG8gY29tcGFjdCBmb3IgdGhlIG9yaWdpbmFsXG5tbS92bXNjYW4uYy03NTMzLVx0XHQgKiByZXF1ZXN0IChhbGxvY19vcmRlcikuXG4tLVxubW0vdm1zY2FuLmMtNzU1MC0gKiBrc3dhcGQgc2hvdWxkIHJlY2xhaW0gKGRpcmVjdCByZWNsYWltIGlzIGRlZmVycmVkKSwgd2FrZSBpdCB1cCBmb3IgdGhlIHpvbmUmIzM5O3Ncbm1tL3Ztc2Nhbi5jOjc1NTE6ICogcGdkYXQuICBJdCB3aWxsIHdha2UgdXAga2NvbXBhY3RkIGFmdGVyIHJlY2xhaW1pbmcgbWVtb3J5LiAgSWYga3N3YXBkIHJlY2xhaW1cbm1tL3Ztc2Nhbi5jOjc1NTI6ICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcbm1tL3Ztc2Nhbi5jLTc1NTMtICogbmVlZGVkLlxuLS1cbm1tL3Ztc2Nhbi5jPTc1NTU9dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03NTg0LVx0XHQgKiBUaGVyZSBtYXkgYmUgcGxlbnR5IG9mIGZyZWUgbWVtb3J5IGF2YWlsYWJsZSwgYnV0IGl0JiMzOTtzIHRvb1xubW0vdm1zY2FuLmM6NzU4NTpcdFx0ICogZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucy4gIFdha2UgdXAga2NvbXBhY3RkXG5tbS92bXNjYW4uYy03NTg2LVx0XHQgKiBhbmQgcmVseSBvbiBjb21wYWN0aW9uX3N1aXRhYmxlKCkgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzXG4tLVxubW0vdm1zY2FuLmMtNzU5MC1cdFx0aWYgKCEoZ2ZwX2ZsYWdzIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkpXG5tbS92bXNjYW4uYzo3NTkxOlx0XHRcdHdha2V1cF9rY29tcGFjdGQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzU5Mi1cdFx0cmV0dXJuO1xuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmg9MjY9ZW51bSB7XG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjQtICogYXJlIGNvbXBvdW5kIGFsbG9jYXRpb25zIHRoYXQgd2lsbCBnZW5lcmFsbHkgZmFpbCBxdWlja2x5IGlmIG1lbW9yeSBpcyBub3RcbnRvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmg6MzY1OiAqIGF2YWlsYWJsZSBhbmQgd2lsbCBub3Qgd2FrZSBrc3dhcGQva2NvbXBhY3RkIG9uIGZhaWx1cmUuIFRoZSBfTElHSFRcbnRvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzY2LSAqIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCByZWNsYWltL2NvbXBhY3Rpb24gYXQgYWxsIGFuZCBpcyBieSBkZWZhdWx0IHVzZWRcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oLTMyLSNkZWZpbmUgUEZfV1FfV09SS0VSXHRcdFx0MHgwMDAwMDAyMFx0LyogSSYjMzk7bSBhIHdvcmtxdWV1ZSB3b3JrZXIgKi9cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmg6MzM6I2RlZmluZSBQRl9LQ09NUEFDVERcdFx0XHQweDAwMDEwMDAwICAgICAgLyogSSBhbSBrY29tcGFjdGQgKi9cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmgtMzQtI2RlZmluZSBQRl9LU1dBUERcdFx0XHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2NDEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb21wYWN0aW9uIGZvciBDb2RlIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gaWRlbnRpZmllZCBzZXZlcmFsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbWVtb3J5IGNvbXBhY3Rpb24gY29kZSB0aGF0IHNlZW0gbGlrZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnVydGhlciBhbmFseXNpcy4gU3BlY2lmaWNhbGx5LCBgd2FrZXVwX2tjb21wYWN0ZGAsIGBrY29tcGFjdGRfcnVuYCwgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgLCBhbmQgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGFsbCBqdW1wZWQgb3V0IGltbWVkaWF0ZWx5LiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBpbiBgbW0vY29tcGFjdGlvbi5jYCBhcyBhIGtleSBzeW1ib2wsIGdpdmVuIGl0cyBub24tc3RhdGljIG5hdHVyZS4gU2ltaWxhcmx5LCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgaXMgYWxzbyBub24tc3RhdGljLiBUaGVuIHRoZXJlJiMzOTtzIGB3YWtldXBfa3N3YXBkYCBhbmQgYHdha2V1cF9rY29tcGFjdGRgIGFuZCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AuCgpOb3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgaXQmIzM5O3MgbW9kaWZ5aW5nIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgc2hvdWxkX3Byb2FjdGl2ZV9jb21wYWN0X25vZGVgLCBgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlYCwgYGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZGAsIGFuZCBgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lYCBhcmUgYmVpbmcgdG91Y2hlZCwgYW5kIGFsbCBvZiB0aG9zZSBhcmUgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGtjb21wYWN0ZGAuIFRoZSBwYXRjaCBhbHNvIGFmZmVjdHMgYF9fY29tcGFjdF9maW5pc2hlZGAgKGNhbGxlZCBmcm9tIGBjb21wYWN0X3pvbmVgKSwgYW5kIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgKGNhbGxlZCBmcm9tIGBjb21wYWN0X3pvbmVgLCBga2NvbXBhY3RkX25vZGVfc3VpdGFibGVgLCBhbmQgYGtjb21wYWN0ZF9kb193b3JrYCkuIEFkZGl0aW9uYWxseSwgYHBnZGF0X2JhbGFuY2VkYCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgcHJlcGFyZV9rc3dhcGRfc2xlZXBgLCBgYmFsYW5jZV9wZ2RhdGAsIGB3YWtldXBfa3N3YXBkYCwgYW5kIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYC4gU28sIGRlc3BpdGUgdGhlIHN0YXRpYyBuYXR1cmUsIHRoZXNlIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZSBwYXRjaCAqaXMqIG1vZGlmeWluZyB0aGVtIGluIHJlbGF0aW9uIHRvIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4KClRoZXJlZm9yZSwgdGhlIG1haW4gZm9jdXMgaXMgc3RpbGwgb24gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM6CgoqICAgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgCiogICBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAKKiAgIGB3YWtldXBfa3N3YXBkYAoqICAgYHdha2V1cF9rY29tcGFjdGRgCiogICBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AKCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBpbmRlZWQgbm9uLXN0YXRpYy4gWWVzLCBhbGwgb2YgdGhlbSBhcmUgbm9uLXN0YXRpYyBhcyBJIGluaXRpYWxseSB0aG91Z2h0LgoKRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgYXJlYTogYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBhbHNvIGRvdWJsZSBjaGVjayB0aGF0IGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMsIGFzIEkgdGhvdWdodCwgb25seSB0aWVkIHRvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBZZXAsIGNvbmZpcm1lZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgd2l0aCB0aGF0IGNvbmZpZy4gQWxsIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MzEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQ2hlY2tpbmcgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgaXMgY3J5c3RhbCBjbGVhcjogYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZS4gTm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgbGV0JiMzOTtzIG1vdmUgb250byBjb21wYWN0aW9uLCBzcGVjaWZpY2FsbHkgd2hldGhlciBgQ09NUEFDVElPTmAgaXMgbmVjZXNzYXJ5IGluIHRoaXMgY29udGV4dC4KClJpZ2h0LCBJJiMzOTtsbCBnbyBoYXZlIGEgcXVpY2sgbG9vayBhdCB0aGUgc291cmNlLiBJdCBsb29rcyBsaWtlIHRoZSBrZXJuZWwgY29tcGlsZXMgYG1tL2NvbXBhY3Rpb24uY2Agd2hlbiBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIGRlZmluZWQuIEdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBhY3Rpb24ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01NS1cdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxubW0vTWFrZWZpbGU6NTY6XHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbm1tL01ha2VmaWxlLTU3LVx0XHRcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxuLS1cbm1tL2JhbGxvb24uYz0xODE9RVhQT1JUX1NZTUJPTF9HUEwoYmFsbG9vbl9wYWdlX2VucXVldWUpO1xuLS1cbm1tL2JhbGxvb24uYy0xOTUtICogc29tZSBlbnF1ZXVlZCBwYWdlcyAtIHNpbmNlIHRoZSBwYWdlIGxpc3QgY2FuIGJlIHRlbXBvcmFyaWx5IGVtcHR5IGR1ZSB0b1xubW0vYmFsbG9vbi5jOjE5NjogKiB0aGUgY29tcGFjdGlvbiBvZiBpc29sYXRlZCBwYWdlcy5cbm1tL2JhbGxvb24uYy0xOTctICpcbi0tXG5tbS9jb21wYWN0aW9uLmM9MTUyPXN0YXRpYyBib29sIGNvbXBhY3Rpb25fZGVmZXJyZWQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcilcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTcwLS8qXG5tbS9jb21wYWN0aW9uLmM6MTcxOiAqIFVwZGF0ZSBkZWZlciB0cmFja2luZyBjb3VudGVycyBhZnRlciBzdWNjZXNzZnVsIGNvbXBhY3Rpb24gb2YgZ2l2ZW4gb3JkZXIsXG5tbS9jb21wYWN0aW9uLmMtMTcyLSAqIHdoaWNoIG1lYW5zIGFuIGFsbG9jYXRpb24gZWl0aGVyIHN1Y2NlZWRlZCAoYWxsb2Nfc3VjY2VzcyA9PSB0cnVlKSBvciBpc1xuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNDIyPXN0YXRpYyBib29sIF9fY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNDQ5LS8qXG5tbS9jb21wYWN0aW9uLmM6MjQ1MDogKiBjb21wYWN0aW9uX3N1aXRhYmxlOiBJcyB0aGlzIHN1aXRhYmxlIHRvIHJ1biBjb21wYWN0aW9uIG9uIHRoaXMgem9uZSBub3c/XG5tbS9jb21wYWN0aW9uLmMtMjQ1MS0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1MTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHVuZm9sZGVkOgoKKipVbnBhY2tpbmcgYSBDb21waWxhdGlvbiBNeXN0ZXJ5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNvbXBhY3Rpb24gY29kZSBpbiBgbW0vY29tcGFjdGlvbi5jYCBoYWQgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYnV0IG5vdyBJJiMzOTttIHF1ZXN0aW9uaW5nIHRoYXQuIFdoeSBhcmUgd2UgY29tcGlsaW5nIGl0IHVuY29uZGl0aW9uYWxseT8gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBjb25maXJtLiBGaXJzdCwgSSYjMzk7bGwgY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBiZWluZyBoYW5kbGVkLiBBaCwgdGhlcmUgaXQgaXM6IGBvYmoteSA6PSAuLi4gY29tcGFjdGlvbi5vIC4uLmAuIFRoZSBgY29tcGFjdGlvbi5vYCAqaXMqIGxpc3RlZCB1bmRlciBgb2JqLXlgLiBTbywgaXQgKmlzKiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQgaW50byB0aGUga2VybmVsIGltYWdlLiBUaGF04oCZcyBvZGQuIExldCYjMzk7cyBnbyBiYWNrIGFuZCBleGFtaW5lIGBtbS9jb21wYWN0aW9uLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIG5vdCBndWFyZGVkIGJ5IHNvbWUgZmVhdHVyZSBmbGFnIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBwZXJmb3JtYW5jZSBvciBtZW1vcnkgaW1wbGljYXRpb25zIGlmIGNvbXBhY3Rpb24gaXNuJiMzOTt0IGFjdHVhbGx5IGJlaW5nIHVzZWQgaW4gYSBzcGVjaWZpYyBidWlsZC4gSXQgd291bGQgYmUgZ29vZCB0byBzZWUgd2h5IGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBidWlsdCwgYmVjYXVzZSB0aGF0JiMzOTtzIG5vdCB3aGF0IEkgZXhwZWN0ZWQuIEkmIzM5O2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19DT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYy0zMC1cbm1tL2NvbXBhY3Rpb24uYzozMTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0zMi0vKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz02MT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtNjMtXG5tbS9jb21wYWN0aW9uLmM6NjQ6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9jb21wYWN0aW9uLmMtNjUtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTEyNi1cbm1tL2NvbXBhY3Rpb24uYzoxMjc6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTI4LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy01MDQtfVxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL2NvbXBhY3Rpb24uYy01MDYtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMzg4LVxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2NvbXBhY3Rpb24uYzoxMzkwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTEzOTEtXG4tLVxubW0vY29tcGFjdGlvbi5jPTM0MTA9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxubW0vY29tcGFjdGlvbi5jLTM0MTEtXG5tbS9jb21wYWN0aW9uLmM6MzQxMjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzMzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb21wYWN0aW9uIE1vZHVsZSBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgbW0vY29tcGFjdGlvbi5jYC4gSXQmIzM5O3MgY29tcGlsZWQgaW4gYWxsIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0LCBJIGtub3cgYSBsb3Qgb2YgdGhlIGFjdHVhbCBjb2RlICp3aXRoaW4qIHRoYXQgZmlsZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBwcmltYXJpbHkgdXNpbmcgYCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTmAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcgc3BlY2lmaWMuLi4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIHRoZSBmdW5jdGlvbiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgKmFsc28qIGd1YXJkZWQgYnkgdGhhdCBzYW1lIG1hY3JvLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGhvdyByb2J1c3QgdGhlIGNvbXBhY3Rpb24gY29uZmlndXJhdGlvbiBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7em9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9MjQ5Nz1ib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1MzEtLyoqXG5tbS9jb21wYWN0aW9uLmM6MjUzMjogKiB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzIC0gZ2V0IGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gYWxsb2NhdGlvbiBvcmRlclxubW0vY29tcGFjdGlvbi5jLTI1MzMtICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NDQtICovXG5tbS9jb21wYWN0aW9uLmM6MjU0NTp1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9jb21wYWN0aW9uLmMtMjU0Ni1cdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNTcxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NzctXG5tbS9jb21wYWN0aW9uLmM6MjU3ODpcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxubW0vY29tcGFjdGlvbi5jLTI1NzktXHRcdFx0XHRcdCAgICAgICBrY29tcGFjdGQgXHUwMDI2XHUwMDI2IGRlZnJhZ19tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgI2lmZGVmYCBibG9jayBhc3NvY2lhdGVkIHdpdGggYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLiBUaGlzIHN1Z2dlc3RzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8sIG1lYW5pbmcgdGhlIHByZXNlbmNlIGFuZC9vciBiZWhhdmlvciBvZiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIHRoYXQgbWFjcm8gZGVmaW5pdGlvbi4gSSYjMzk7bGwgbGlrZWx5IHVzZSBhIHRvb2wgb3IgbXkgSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbiBmb3IgdGhpcy4gU2luY2UgSSBoYXZlIGV4cGVyaWVuY2UgaW4gdGhpcyBmaWVsZCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29tbW9uIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGxpa2UgYCNkZWZpbmVgIG9yIGAjdW5kZWZgIGFuZCwgb2YgY291cnNlLCB0aGUgYCNpZmRlZmAgYmxvY2sgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250ZXh0IGRldGVybWluZXMgdGhlIGVmZmVjdGl2ZSB1c2Ugb2YgdGhhdCBibG9jay4gT25jZSBJIGxvY2F0ZSBpdCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBhbGwgYWJvdXQuIFRoaXMgbWF5IHJlcXVpcmUgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZXhhbWluaW5nIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDkwOlx0XG4yNDkxOlx0XHR0cmFjZV9tbV9jb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsIG9yZGVyLCBjb21wYWN0X3Jlc3VsdCk7XG4yNDkyOlx0XG4yNDkzOlx0XHRyZXR1cm4gc3VpdGFibGU7XG4yNDk0Olx0fVxuMjQ5NTpcdFxuMjQ5NjpcdC8qIFVzZWQgYnkgZGlyZWN0IHJlY2xhaW1lcnMgKi9cbjI0OTc6XHRib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4yNDk4Olx0XHRcdGludCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXG4yNDk5Olx0e1xuMjUwMDpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG4yNTAxOlx0XHRzdHJ1Y3Qgem9uZXJlZiAqejtcbjI1MDI6XHRcbjI1MDM6XHRcdC8qXG4yNTA0Olx0XHQgKiBNYWtlIHN1cmUgYXQgbGVhc3Qgb25lIHpvbmUgd291bGQgcGFzcyBfX2NvbXBhY3Rpb25fc3VpdGFibGUgaWYgd2UgY29udGludWVcbjI1MDU6XHRcdCAqIHJldHJ5aW5nIHRoZSByZWNsYWltLlxuMjUwNjpcdFx0ICovXG4yNTA3Olx0XHRmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIGFjLVx1MDAzZXpvbmVsaXN0LFxuMjUwODpcdFx0XHRcdFx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBhYy1cdTAwM2Vub2RlbWFzaykge1xuMjUwOTpcdFx0XHR1bnNpZ25lZCBsb25nIGF2YWlsYWJsZTtcbjI1MTA6XHRcbjI1MTE6XHRcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NQVVNFVCkgXHUwMDI2XHUwMDI2XG4yNTEyOlx0XHRcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcF9tYXNrKSlcbjI1MTM6XHRcdFx0XHRjb250aW51ZTtcbjI1MTQ6XHRcbjI1MTU6XHRcdFx0LypcbjI1MTY6XHRcdFx0ICogRG8gbm90IGNvbnNpZGVyIGFsbCB0aGUgcmVjbGFpbWFibGUgbWVtb3J5IGJlY2F1c2Ugd2UgZG8gbm90XG4yNTE3Olx0XHRcdCAqIHdhbnQgdG8gdHJhc2gganVzdCBmb3IgYSBzaW5nbGUgaGlnaCBvcmRlciBhbGxvY2F0aW9uIHdoaWNoXG4yNTE4Olx0XHRcdCAqIGlzIGV2ZW4gbm90IGd1YXJhbnRlZWQgdG8gYXBwZWFyIGV2ZW4gaWYgX19jb21wYWN0aW9uX3N1aXRhYmxlXG4yNTE5Olx0XHRcdCAqIGlzIGhhcHB5IGFib3V0IHRoZSB3YXRlcm1hcmsgY2hlY2suXG4yNTIwOlx0XHRcdCAqL1xuMjUyMTpcdFx0XHRhdmFpbGFibGUgPSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpIC8gb3JkZXI7XG4yNTIyOlx0XHRcdGF2YWlsYWJsZSAmIzQzOz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xuMjUyMzpcdFx0XHRpZiAoX19jb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsIG9yZGVyLCBtaW5fd21hcmtfcGFnZXMoem9uZSksXG4yNTI0Olx0XHRcdFx0XHRcdCAgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBhdmFpbGFibGUpKVxuMjUyNTpcdFx0XHRcdHJldHVybiB0cnVlO1xuMjUyNjpcdFx0fVxuMjUyNzpcdFxuMjUyODpcdFx0cmV0dXJuIGZhbHNlO1xuMjUyOTpcdH1cbjI1MzA6XHRcbjI1MzE6XHQvKipcbjI1MzI6XHQgKiB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzIC0gZ2V0IGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gYWxsb2NhdGlvbiBvcmRlclxuMjUzMzpcdCAqIEB6b25lOiAgICAgICB0YXJnZXQgem9uZVxuMjUzNDpcdCAqIEBvcmRlcjogICAgICBhbGxvY2F0aW9uIG9yZGVyXG4yNTM1Olx0ICogQHVzZV9ibG9ja3M6IGlmIHRydWUsIHVzZSBOUl9GUkVFX1BBR0VTX0JMT0NLU1xuMjUzNjpcdCAqXG4yNTM3Olx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUgYmxvY2tzIHRvIGF2b2lkXG4yNTM4Olx0ICogcG9sbHV0aW5nIGFsbG9jYXRvciBmYWxsYmFja3MuIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoXG4yNTM5Olx0ICogdGhpcyBvbiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC5cbjI1NDA6XHQgKlxuMjU0MTpcdCAqIFdoZW4gbVRIUCBhbHdheXMtZW5hYmxlZCBvcmRlcnMgYXJlIGNvbmZpZ3VyZWQsIGNvdW50IG9ubHkgZnJlZSBwYWdlc1xuMjU0MjpcdCAqIGluIGJsb2NrcyBcdTAwM2U9IG1pbiBtVEhQIG9yZGVyLCBhcyBzbWFsbGVyIGZyYWdtZW50cyBjYW5ub3Qgc2F0aXNmeSBtVEhQXG4yNTQzOlx0ICogYWxsb2NhdGlvbnMuXG4yNTQ0Olx0ICovXG4yNTQ1Olx0dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxuMjU0NjpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsXG4yNTQ3Olx0XHRcdFx0XHRcdGJvb2wgdXNlX2Jsb2NrcylcbjI1NDg6XHR7XG4yNTQ5Olx0XHRpZiAodXNlX2Jsb2NrcylcbjI1NTA6XHRcdFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XG4yNTUxOlx0XG4yNTUyOlx0XHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcdTAwMjZcdTAwMjYgb3JkZXIgPT0gY29tcGFjdF9ocGFnZV9vcmRlcigpKSB7XG4yNTUzOlx0XHRcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcyA9IDA7XG4yNTU0Olx0XG4yNTU1Olx0XHRcdGZvciAoaW50IG8gPSBvcmRlcjsgbyBcdTAwM2MgTlJfUEFHRV9PUkRFUlM7IG8mIzQzOyYjNDM7KVxuMjU1NjpcdFx0XHRcdGZyZWVfcGFnZXMgJiM0Mzs9IHpvbmUtXHUwMDNlZnJlZV9hcmVhW29dLm5yX2ZyZWUgXHUwMDNjXHUwMDNjIG87XG4yNTU3Olx0XHRcdHJldHVybiBmcmVlX3BhZ2VzO1xuMjU1ODpcdFx0fVxuMjU1OTpcdFxuMjU2MDpcdFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTtcbjI1NjE6XHR9XG4yNTYyOlx0XG4yNTYzOlx0LypcbjI1NjQ6XHQgKiBTaG91bGQgd2UgZG8gY29tcGFjdGlvbiBmb3IgdGFyZ2V0IGFsbG9jYXRpb24gb3JkZXIuXG4yNTY1Olx0ICogUmV0dXJuIENPTVBBQ1RfU1VDQ0VTUyBpZiBhbGxvY2F0aW9uIGZvciB0YXJnZXQgb3JkZXIgY2FuIGJlIGFscmVhZHlcbjI1NjY6XHQgKiBzYXRpc2ZpZWRcbjI1Njc6XHQgKiBSZXR1cm4gQ09NUEFDVF9TS0lQUEVEIGlmIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBvcmRlciBpcyBsaWtlbHkgdG8gZmFpbFxuMjU2ODpcdCAqIFJldHVybiBDT01QQUNUX0NPTlRJTlVFIGlmIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBvcmRlciBzaG91bGQgYmUgcmFuXG4yNTY5Olx0ICovXG4yNTcwOlx0c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHRcbjI1NzE6XHRjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuMjU3MjpcdFx0XHRcdFx0IGludCBoaWdoZXN0X3pvbmVpZHgsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbjI1NzM6XHRcdFx0XHRcdCBib29sIGFzeW5jLCBib29sIGtjb21wYWN0ZClcbjI1NzQ6XHR7XG4yNTc1Olx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7XG4yNTc2Olx0XHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaztcbjI1Nzc6XHRcbjI1Nzg6XHRcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxuMjU3OTpcdFx0XHRcdFx0XHQgICAgICAga2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSk7XG4yNTgwOlx0XG4yNTgxOlx0XHR3YXRlcm1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSyk7XG4yNTgyOlx0XHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgd2F0ZXJtYXJrLCBoaWdoZXN0X3pvbmVpZHgsXG4yNTgzOlx0XHRcdFx0XHRhbGxvY19mbGFncywgZnJlZV9wYWdlcykpXG4yNTg0Olx0XHRcdHJldHVybiBDT01QQUNUX1NVQ0NFU1M7XG4yNTg1Olx0XG4yNTg2Olx0XHQvKlxuMjU4NzpcdFx0ICogRm9yIHVubW92YWJsZSBhbGxvY2F0aW9ucyAod2l0aG91dCBBTExPQ19DTUEpLCBjaGVjayBpZiB0aGVyZSBpcyBlbm91Z2hcbjI1ODg6XHRcdCAqIGZyZWUgbWVtb3J5IGluIHRoZSBub24tQ01BIHBhZ2VibG9ja3MuIE90aGVyd2lzZSBjb21wYWN0aW9uIGNvdWxkIGZvcm1cbjI1ODk6XHRcdCAqIHRoZSBoaWdoLW9yZGVyIHBhZ2UgaW4gQ01BIHBhZ2VibG9ja3MsIHdoaWNoIHdvdWxkIG5vdCBoZWxwIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU5MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbXBhY3Rpb24gQ29kZSBMb2NhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpcyB3aXRoaW4gYG1tL2NvbXBhY3Rpb24uY2AuIEFuZCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBmaWxlIGlzIG9ubHkgcmVsZXZhbnQgaWYgYENPTkZJR19DT01QQUNUSU9OYCBpcyBkZWZpbmVkLiBUaGVyZWZvcmUsIEkgc2hvdWxkIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhhdCwgcGVyaGFwcyBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYCNpZmRlZmAgYmxvY2suIExldCYjMzk7cyBnbyBhaGVhZCBhbmQgdGFrZSBhIHBlZWsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYG1tL2NvbXBhY3Rpb24uY2AgZmlsZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUsIGF0IHRoZSB0b3AsIGFuZCBnZXQgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvZGUgb3JnYW5pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogbGludXgvbW0vY29tcGFjdGlvbi5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBNZW1vcnkgY29tcGFjdGlvbiBmb3IgdGhlIHJlZHVjdGlvbiBvZiBleHRlcm5hbCBmcmFnbWVudGF0aW9uLiBOb3RlIHRoYXRcbiAgIDY6XHQgKiB0aGlzIGhlYXZpbHkgZGVwZW5kcyB1cG9uIHBhZ2UgbWlncmF0aW9uIHRvIGRvIGFsbCB0aGUgcmVhbCBoZWF2eVxuICAgNzpcdCAqIGxpZnRpbmdcbiAgIDg6XHQgKlxuICAgOTpcdCAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNy0yMDEwIE1lbCBHb3JtYW4gXHUwMDNjbWVsQGNzbi51bC5pZVx1MDAzZVxuICAxMDpcdCAqL1xuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGFjdGlvbi5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2ZzLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWlzb2xhdGlvbi5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4uaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gIDI2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1c2V0LmhcdTAwM2VcbiAgMjc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAgMjg6XHQjaW5jbHVkZSBcJiMzNDtwYWdlX2FsbG9jLmhcJiMzNDtcbiAgMjk6XHQjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gIDMwOlx0XG4gIDMxOlx0I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG4gIDMyOlx0LypcbiAgMzM6XHQgKiBGcmFnbWVudGF0aW9uIHNjb3JlIGNoZWNrIGludGVydmFsIGZvciBwcm9hY3RpdmUgY29tcGFjdGlvbiBwdXJwb3Nlcy5cbiAgMzQ6XHQgKi9cbiAgMzU6XHQjZGVmaW5lIEhQQUdFX0ZSQUdfQ0hFQ0tfSU5URVJWQUxfTVNFQ1x0KDUwMClcbiAgMzY6XHRcbiAgMzc6XHRzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfY29tcGFjdF9ldmVudChlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSlcbiAgMzg6XHR7XG4gIDM5Olx0XHRjb3VudF92bV9ldmVudChpdGVtKTtcbiAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGlubGluZSB2b2lkIGNvdW50X2NvbXBhY3RfZXZlbnRzKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtLCBsb25nIGRlbHRhKVxuICA0MzpcdHtcbiAgNDQ6XHRcdGNvdW50X3ZtX2V2ZW50cyhpdGVtLCBkZWx0YSk7XG4gIDQ1Olx0fVxuICA0NjpcdFxuICA0NzpcdC8qXG4gIDQ4Olx0ICogb3JkZXIgPT0gLTEgaXMgZXhwZWN0ZWQgd2hlbiBjb21wYWN0aW5nIHByb2FjdGl2ZWx5IHZpYVxuICA0OTpcdCAqIDEuIC9wcm9jL3N5cy92bS9jb21wYWN0X21lbW9yeVxuICA1MDpcdCAqIDIuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RleC9jb21wYWN0XG4gIDUxOlx0ICogMy4gL3Byb2Mvc3lzL3ZtL2NvbXBhY3Rpb25fcHJvYWN0aXZlbmVzc1xuICA1MjpcdCAqL1xuICA1MzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKVxuICA1NDpcdHtcbiAgNTU6XHRcdHJldHVybiBvcmRlciA9PSAtMTtcbiAgNTY6XHR9XG4gIDU3Olx0XG4gIDU4Olx0I2Vsc2VcbiAgNTk6XHQjZGVmaW5lIGNvdW50X2NvbXBhY3RfZXZlbnQoaXRlbSkgZG8geyB9IHdoaWxlICgwKVxuICA2MDpcdCNkZWZpbmUgY291bnRfY29tcGFjdF9ldmVudHMoaXRlbSwgZGVsdGEpIGRvIHsgfSB3aGlsZSAoMClcbiAgNjE6XHRzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbiAgNjI6XHQjZW5kaWZcbiAgNjM6XHRcbiAgNjQ6XHQjaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcbiAgNjU6XHRcbiAgNjY6XHQjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAgNjc6XHQjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oXHUwMDNlXG4gIDY4Olx0XG4gIDY5Olx0I2RlZmluZSBibG9ja19zdGFydF9wZm4ocGZuLCBvcmRlcilcdHJvdW5kX2Rvd24ocGZuLCAxVUwgXHUwMDNjXHUwMDNjIChvcmRlcikpXG4gIDcwOlx0I2RlZmluZSBibG9ja19lbmRfcGZuKHBmbiwgb3JkZXIpXHRBTElHTigocGZuKSAmIzQzOyAxLCAxVUwgXHUwMDNjXHUwMDNjIChvcmRlcikpXG4gIDcxOlx0XG4gIDcyOlx0LypcbiAgNzM6XHQgKiBQYWdlIG9yZGVyIHdpdGgtcmVzcGVjdC10byB3aGljaCBwcm9hY3RpdmUgY29tcGFjdGlvblxuICA3NDpcdCAqIGNhbGN1bGF0ZXMgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbiwgd2hpY2ggaXMgdXNlZCBhc1xuICA3NTpcdCAqIHRoZSBcJiMzNDtmcmFnbWVudGF0aW9uIHNjb3JlXCYjMzQ7IG9mIGEgbm9kZS96b25lLlxuICA3NjpcdCAqL1xuICA3NzpcdCNpZiBkZWZpbmVkIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuICA3ODpcdCNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlx0SFBBR0VfUE1EX09SREVSXG4gIDc5Olx0I2VsaWYgZGVmaW5lZCBDT05GSUdfSFVHRVRMQkZTXG4gIDgwOlx0I2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXHRIVUdFVExCX1BBR0VfT1JERVJcbiAgODE6XHQjZWxzZVxuICA4MjpcdCNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlx0KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpXG4gIDgzOlx0I2VuZGlmXG4gIDg0Olx0XG4gIDg1Olx0c3RhdGljIGlubGluZSBpbnQgY29tcGFjdF9ocGFnZV9vcmRlcih2b2lkKVxuICA4NjpcdHtcbiAgODc6XHRcdHVuc2lnbmVkIGxvbmcgb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKTtcbiAgODg6XHRcbiAgODk6XHRcdGlmIChvcmRlcnMpXG4gIDkwOlx0XHRcdHJldHVybiBfX2ZmcyhvcmRlcnMpO1xuICA5MTpcdFx0cmV0dXJuIENPTVBBQ1RJT05fSFBBR0VfT1JERVI7XG4gIDkyOlx0fVxuICA5MzpcdFxuICA5NDpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbWFya19hbGxvY2F0ZWRfbm9wcm9mKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncylcbiAgOTU6XHR7XG4gIDk2Olx0XHRwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIF9fR0ZQX01PVkFCTEUsIEFMTE9DX0RFRkFVTFQpO1xuICA5NzpcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbiAgOTg6XHRcdHJldHVybiBwYWdlO1xuICA5OTpcdH1cbiAxMDA6XHQjZGVmaW5lIG1hcmtfYWxsb2NhdGVkKC4uLilcdGFsbG9jX2hvb2tzKG1hcmtfYWxsb2NhdGVkX25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjU4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZgIGNvbmRpdGlvbmFsLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbiBvciBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IgKENNQSkuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgY29uZGl0aW9uIG9uIGxpbmUgNjQgLSB5ZXMsIGAjaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFgIGl0IGlzLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgY29tcGxldGVseS4uLiBJIG5lZWQgdG8gZmluZCB0aGUgY2xvc2luZyBgI2VuZGlmYCB0byBmdWxseSBncmFzcCB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbCBpbmNsdXNpb24gaW4gdGhlIGNvbnRleHQgb2Ygc3lzdGVtIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNlbmRpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9NjE9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG5tbS9jb21wYWN0aW9uLmM6NjI6I2VuZGlmXG5tbS9jb21wYWN0aW9uLmMtNjMtXG4tLVxubW0vY29tcGFjdGlvbi5jLTgyLSNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlx0KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpXG5tbS9jb21wYWN0aW9uLmM6ODM6I2VuZGlmXG5tbS9jb21wYWN0aW9uLmMtODQtXG4tLVxubW0vY29tcGFjdGlvbi5jPTI2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBza2lwX29mZmxpbmVfc2VjdGlvbnNfcmV2ZXJzZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbilcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjY1LX1cbm1tL2NvbXBhY3Rpb24uYzoyNjY6I2VuZGlmXG5tbS9jb21wYWN0aW9uLmMtMjY3LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy01MDQtfVxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL2NvbXBhY3Rpb24uYy01MDYtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMzg4LVxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2NvbXBhY3Rpb24uYy0xMzkwLSNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yMjk3PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjM4NC1cdFx0XHRyZXR1cm4gQ09NUEFDVF9TVUNDRVNTO1xubW0vY29tcGFjdGlvbi5jOjIzODU6I2VuZGlmXG5tbS9jb21wYWN0aW9uLmMtMjM4Ni1cdFx0Lypcbi0tXG5tbS9jb21wYWN0aW9uLmM9MzA5ND12b2lkIGNvbXBhY3Rpb25fdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMDk3LX1cbm1tL2NvbXBhY3Rpb24uYzozMDk4OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR19OVU1BICovXG5tbS9jb21wYWN0aW9uLmMtMzA5OS1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MzQxMD1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXG5tbS9jb21wYWN0aW9uLmMtMzQxMS1cbm1tL2NvbXBhY3Rpb24uYzozNDEyOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDA5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gYW5kIEltcGFjdCBvZiBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNvbmRpdGlvbnMuIEkgc2VlIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhdCBsaW5lIDI1NDUsIGJ1dCBpdCYjMzk7cyBuZXN0ZWQgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05gIGJsb2NrLiBMaW5lcyAxMzg5IGFuZCAzNDEyIGNsZWFybHkgZGVmaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gU28sIGBDT01QQUNUSU9OYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoYXQgQ09NUEFDVElPTiBpcyBlbmFibGVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBmdW5jdGlvbmFsaXR5LiBBbmQgaXQgc2VlbXMgdGhhdCBUcmFuc3BhcmVudCBIdWdlcGFnZXMgaXMgYWxzbyByZWxldmFudC4KCk5vdywgbGV0JiMzOTtzIGdldCB0byB0aGUgaW1wb3J0YW50IHBhcnQ6IGltcGFjdCBhbmFseXNpcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgYXJlICpkaXJlY3RseSogbW9kaWZpZWQgb3IgKnNpZ25pZmljYW50bHkgYWZmZWN0ZWQqIGJ5IHRoaXMgcGF0Y2guCgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGB3YWtldXBfa3N3YXBkYCwgYHdha2V1cF9rY29tcGFjdGRgLCBhbmQgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgLgoKSSBrbm93IGB3YWtldXBfa3N3YXBkYCBpcyBjYWxsZWQgZnJvbSBgcGdkYXRfYmFsYW5jZWRgIHdoaWNoIGlzIHRoZSBmb2N1cy4gU2luY2UgYHBnZGF0X2JhbGFuY2VkYCBpcyBtb2RpZmllZCBJIGFtIHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCBmb2N1cyBzeW1ib2wuCgpTaW1pbGFybHksIEkgc2VlIHRoYXQgYHdha2V1cF9rY29tcGFjdGRgIGlzIHdha2luZyB1cCB0aGUgdGhyZWFkIGBrY29tcGFjdGRgIGFuZCBga2NvbXBhY3RkYCBpcyBtb2RpZmllZC4gQW5kIHRoZSBmdW5jdGlvbiB3YWtlcyB1cCBga2NvbXBhY3RkYCB3aGljaCBpcyBhbHNvIGEgZ29vZCBmb2N1cyBzeW1ib2wuCgpGaW5hbGx5LCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AgaXMgYSBnb29kIGZvY3VzIHN5bWJvbCwgYmVjYXVzZSBpdCBjYWxscyBgcGdkYXRfYmFsYW5jZWRgLgoKU28gbXkgZm9jdXMgaXMgb24gdGhvc2UgMyBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gcmUtZXhhbWluZSBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAuIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIGl0IGJlY2F1c2UgSSB0aG91Z2h0IEkgc2F3IGEgY29ubmVjdGlvbiwgYnV0IEkgZG9uJiMzOTt0IHNlZSBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ5MDpcdFxuMjQ5MTpcdFx0dHJhY2VfbW1fY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBvcmRlciwgY29tcGFjdF9yZXN1bHQpO1xuMjQ5MjpcdFxuMjQ5MzpcdFx0cmV0dXJuIHN1aXRhYmxlO1xuMjQ5NDpcdH1cbjI0OTU6XHRcbjI0OTY6XHQvKiBVc2VkIGJ5IGRpcmVjdCByZWNsYWltZXJzICovXG4yNDk3Olx0Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxuMjQ5ODpcdFx0XHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuMjQ5OTpcdHtcbjI1MDA6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuMjUwMTpcdFx0c3RydWN0IHpvbmVyZWYgKno7XG4yNTAyOlx0XG4yNTAzOlx0XHQvKlxuMjUwNDpcdFx0ICogTWFrZSBzdXJlIGF0IGxlYXN0IG9uZSB6b25lIHdvdWxkIHBhc3MgX19jb21wYWN0aW9uX3N1aXRhYmxlIGlmIHdlIGNvbnRpbnVlXG4yNTA1Olx0XHQgKiByZXRyeWluZyB0aGUgcmVjbGFpbS5cbjI1MDY6XHRcdCAqL1xuMjUwNzpcdFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy1cdTAwM2V6b25lbGlzdCxcbjI1MDg6XHRcdFx0XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYWMtXHUwMDNlbm9kZW1hc2spIHtcbjI1MDk6XHRcdFx0dW5zaWduZWQgbG9uZyBhdmFpbGFibGU7XG4yNTEwOlx0XG4yNTExOlx0XHRcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DUFVTRVQpIFx1MDAyNlx1MDAyNlxuMjUxMjpcdFx0XHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnBfbWFzaykpXG4yNTEzOlx0XHRcdFx0Y29udGludWU7XG4yNTE0Olx0XG4yNTE1Olx0XHRcdC8qXG4yNTE2Olx0XHRcdCAqIERvIG5vdCBjb25zaWRlciBhbGwgdGhlIHJlY2xhaW1hYmxlIG1lbW9yeSBiZWNhdXNlIHdlIGRvIG5vdFxuMjUxNzpcdFx0XHQgKiB3YW50IHRvIHRyYXNoIGp1c3QgZm9yIGEgc2luZ2xlIGhpZ2ggb3JkZXIgYWxsb2NhdGlvbiB3aGljaFxuMjUxODpcdFx0XHQgKiBpcyBldmVuIG5vdCBndWFyYW50ZWVkIHRvIGFwcGVhciBldmVuIGlmIF9fY29tcGFjdGlvbl9zdWl0YWJsZVxuMjUxOTpcdFx0XHQgKiBpcyBoYXBweSBhYm91dCB0aGUgd2F0ZXJtYXJrIGNoZWNrLlxuMjUyMDpcdFx0XHQgKi9cbjI1MjE6XHRcdFx0YXZhaWxhYmxlID0gem9uZV9yZWNsYWltYWJsZV9wYWdlcyh6b25lKSAvIG9yZGVyO1xuMjUyMjpcdFx0XHRhdmFpbGFibGUgJiM0Mzs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKTtcbjI1MjM6XHRcdFx0aWYgKF9fY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBvcmRlciwgbWluX3dtYXJrX3BhZ2VzKHpvbmUpLFxuMjUyNDpcdFx0XHRcdFx0XHQgIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYXZhaWxhYmxlKSlcbjI1MjU6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI1MjY6XHRcdH1cbjI1Mjc6XHRcbjI1Mjg6XHRcdHJldHVybiBmYWxzZTtcbjI1Mjk6XHR9XG4yNTMwOlx0XG4yNTMxOlx0LyoqXG4yNTMyOlx0ICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXJcbjI1MzM6XHQgKiBAem9uZTogICAgICAgdGFyZ2V0IHpvbmVcbjI1MzQ6XHQgKiBAb3JkZXI6ICAgICAgYWxsb2NhdGlvbiBvcmRlclxuMjUzNTpcdCAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1NcbjI1MzY6XHQgKlxuMjUzNzpcdCAqIEluIGRlZnJhZ19tb2RlLCB3YXRlcm1hcmtzIG11c3QgYmUgbWV0IGluIHdob2xlIGJsb2NrcyB0byBhdm9pZFxuMjUzODpcdCAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaFxuMjUzOTpcdCAqIHRoaXMgb24gaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuXG4yNTQwOlx0ICpcbjI1NDE6XHQgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXNcbjI1NDI6XHQgKiBpbiBibG9ja3MgXHUwMDNlPSBtaW4gbVRIUCBvcmRlciwgYXMgc21hbGxlciBmcmFnbWVudHMgY2Fubm90IHNhdGlzZnkgbVRIUFxuMjU0MzpcdCAqIGFsbG9jYXRpb25zLlxuMjU0NDpcdCAqL1xuMjU0NTpcdHVuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcbjI1NDY6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLFxuMjU0NzpcdFx0XHRcdFx0XHRib29sIHVzZV9ibG9ja3MpXG4yNTQ4Olx0e1xuMjU0OTpcdFx0aWYgKHVzZV9ibG9ja3MpXG4yNTUwOlx0XHRcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpO1xuMjU1MTpcdFxuMjU1MjpcdFx0aWYgKFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykgXHUwMDI2XHUwMDI2IG9yZGVyID09IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSkge1xuMjU1MzpcdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xuMjU1NDpcdFxuMjU1NTpcdFx0XHRmb3IgKGludCBvID0gb3JkZXI7IG8gXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvJiM0MzsmIzQzOylcbjI1NTY6XHRcdFx0XHRmcmVlX3BhZ2VzICYjNDM7PSB6b25lLVx1MDAzZWZyZWVfYXJlYVtvXS5ucl9mcmVlIFx1MDAzY1x1MDAzYyBvO1xuMjU1NzpcdFx0XHRyZXR1cm4gZnJlZV9wYWdlcztcbjI1NTg6XHRcdH1cbjI1NTk6XHRcbjI1NjA6XHRcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4yNTYxOlx0fVxuMjU2MjpcdFxuMjU2MzpcdC8qXG4yNTY0Olx0ICogU2hvdWxkIHdlIGRvIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBhbGxvY2F0aW9uIG9yZGVyLlxuMjU2NTpcdCAqIFJldHVybiBDT01QQUNUX1NVQ0NFU1MgaWYgYWxsb2NhdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGNhbiBiZSBhbHJlYWR5XG4yNTY2Olx0ICogc2F0aXNmaWVkXG4yNTY3Olx0ICogUmV0dXJuIENPTVBBQ1RfU0tJUFBFRCBpZiBjb21wYWN0aW9uIGZvciB0YXJnZXQgb3JkZXIgaXMgbGlrZWx5IHRvIGZhaWxcbjI1Njg6XHQgKiBSZXR1cm4gQ09NUEFDVF9DT05USU5VRSBpZiBjb21wYWN0aW9uIGZvciB0YXJnZXQgb3JkZXIgc2hvdWxkIGJlIHJhblxuMjU2OTpcdCAqL1xuMjU3MDpcdHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XG4yNTcxOlx0Y29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcbjI1NzI6XHRcdFx0XHRcdCBpbnQgaGlnaGVzdF96b25laWR4LCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXG4yNTczOlx0XHRcdFx0XHQgYm9vbCBhc3luYywgYm9vbCBrY29tcGFjdGQpXG4yNTc0Olx0e1xuMjU3NTpcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuMjU3NjpcdFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XG4yNTc3Olx0XG4yNTc4Olx0XHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcbjI1Nzk6XHRcdFx0XHRcdFx0ICAgICAgIGtjb21wYWN0ZCBcdTAwMjZcdTAwMjYgZGVmcmFnX21vZGUpO1xuMjU4MDpcdFxuMjU4MTpcdFx0d2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xuMjU4MjpcdFx0aWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LFxuMjU4MzpcdFx0XHRcdFx0YWxsb2NfZmxhZ3MsIGZyZWVfcGFnZXMpKVxuMjU4NDpcdFx0XHRyZXR1cm4gQ09NUEFDVF9TVUNDRVNTO1xuMjU4NTpcdFxuMjU4NjpcdFx0LypcbjI1ODc6XHRcdCAqIEZvciB1bm1vdmFibGUgYWxsb2NhdGlvbnMgKHdpdGhvdXQgQUxMT0NfQ01BKSwgY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoXG4yNTg4Olx0XHQgKiBmcmVlIG1lbW9yeSBpbiB0aGUgbm9uLUNNQSBwYWdlYmxvY2tzLiBPdGhlcndpc2UgY29tcGFjdGlvbiBjb3VsZCBmb3JtXG4yNTg5Olx0XHQgKiB0aGUgaGlnaC1vcmRlciBwYWdlIGluIENNQSBwYWdlYmxvY2tzLCB3aGljaCB3b3VsZCBub3QgaGVscCB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBDb21wYWN0aW9uIENvZGUgUGF0aCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGUgbWVtb3J5IGNvbXBhY3Rpb24gY29kZSwgYW5kIGl0JiMzOTtzIHF1aWNrbHkgYXBwYXJlbnQgdGhhdCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgKmRvZXNuJiMzOTt0KiBkaXJlY3RseSBsZXZlcmFnZSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AuIFRoYXQmIzM5O3MgYSBiaXQgc3VycHJpc2luZy4gSSYjMzk7ZCBhc3N1bWVkIHRoZXJlIHdhcyBhIGRpcmVjdCBsaW5rIHRoZXJlLCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBhIHpvbmVsaXN0IGlzIGV2ZW4gKnBvdGVudGlhbGx5KiB2aWFibGUgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuCgpOb3cgaG9sZCBvbi4uLiBJIGtub3cgSSYjMzk7dmUgc2VlbiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgYmVpbmcgY2FsbGVkIGR1cmluZyBjb21wYWN0aW9uIHN1aXRhYmlsaXR5IGNoZWNrcyAqc29tZXdoZXJlKi4gQWgsIGhlcmUgd2UgZ28sIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgZG9lcyBjYWxsIGl0LiBUaGF0IG1ha2VzIG1vcmUgc2Vuc2UsIHJpZ2h0PyBJdCBzb3VuZHMgbGlrZSBgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXJgIHdvdWxkIGZpbHRlciBhIGxpc3Qgb2YgY2FuZGlkYXRlIHpvbmVzLgoKQnV0IG5vdyBJIG5lZWQgdG8gZ28gb25lIGxheWVyIGRlZXBlcjsgKndobyogY2FsbHMgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoLiBLbm93aW5nIHdobyYjMzk7cyBjYWxsaW5nIGl0IGlzIGNydWNpYWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBjb250cm9sIGFuZCBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGxvZ2ljIGluIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9MjU3MD1zdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdFxubW0vY29tcGFjdGlvbi5jOjI1NzE6Y29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yNTcyLVx0XHRcdFx0IGludCBoaWdoZXN0X3pvbmVpZHgsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjYxMD1jb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTI2MzUtXHRpZiAoIWlzX3ZpYV9jb21wYWN0X21lbW9yeShjYy1cdTAwM2VvcmRlcikpIHtcbm1tL2NvbXBhY3Rpb24uYzoyNjM2Olx0XHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihjYy1cdTAwM2V6b25lLCBjYy1cdTAwM2VvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yNjM3LVx0XHRcdFx0XHRcdCAgICAgICBjYy1cdTAwM2VoaWdoZXN0X3pvbmVpZHgsXG4tLVxubW0vY29tcGFjdGlvbi5jPTMxMDY9c3RhdGljIGJvb2wga2NvbXBhY3RkX25vZGVfc3VpdGFibGUocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzEyMC1cbm1tL2NvbXBhY3Rpb24uYzozMTIxOlx0XHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcih6b25lLFxubW0vY29tcGFjdGlvbi5jLTMxMjItXHRcdFx0XHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYz0zMTMyPXN0YXRpYyB2b2lkIGtjb21wYWN0ZF9kb193b3JrKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vY29tcGFjdGlvbi5jLTMxNjQtXG5tbS9jb21wYWN0aW9uLmM6MzE2NTpcdFx0cmV0ID0gY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoem9uZSxcbm1tL2NvbXBhY3Rpb24uYy0zMTY2LVx0XHRcdFx0Y2Mub3JkZXIsIHpvbmVpZCwgY2MuYWxsb2NfZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzEzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBjb21wYWN0X3pvbmVgIEZ1bmN0aW9uIENhbGwqKgoKT2theSwgc28gdGhlIGNvZGUmIzM5O3MgdXNpbmcgYGNvbXBhY3Rfem9uZWAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBtZWFuLCBgY29tcGFjdF96b25lYCAqZG9lcyogd2hhdCwgZXhhY3RseT8gSXMgdGhpcyBzb21lIHNvcnQgb2YgbWVtb3J5IG9wdGltaXphdGlvbiwgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uLCBvciBtYXliZSBhIFVJIGxheW91dCByb3V0aW5lPyAgVGhlIG5hbWUgaXRzZWxmIGlzIHN1Z2dlc3RpdmUsIGJ1dCB3aXRob3V0IGtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0JiMzOTtzIGp1c3QgYSBsYWJlbC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHBvc3NpYmxlIHNjZW5hcmlvcyBiYXNlZCBvbiB0aGUgdHlwaWNhbCBhcHBsaWNhdGlvbnMgb2YgJiMzNDtjb21wYWN0aW5nJiMzNDsgb3IgJiMzNDt6b25pbmcmIzM0OyBkYXRhLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzOiAqd2hvKiBpcyBjYWxsaW5nIGBjb21wYWN0X3pvbmVgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgaXMga2V5LiBJcyBpdCBhIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlcj8gQSBoaWdoLWxldmVsIGRhdGEgcHJvY2Vzc2luZyBmdW5jdGlvbj8gQSBVSSBjb21wb25lbnQgcmVmcmVzaGluZyByb3V0aW5lPyAgS25vd2luZyB0aGUgY2FsbGVyIHdpbGwgcHJvdmlkZSBhIGh1Z2UgYW1vdW50IG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSByb2xlIGFuZCBwdXJwb3NlIG9mIGBjb21wYWN0X3pvbmVgLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgY2FsbCBhbmQgZGV0ZXJtaW5lIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHdvcmtmbG93LiAgVGhhdCB3aWxsIHF1aWNrbHkgdGVsbCBtZSBpZiB0aGlzIGlzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2VjdGlvbiwgb3Igc29tZXRoaW5nIGxlc3MgdXJnZW50LiBXaXRob3V0IHRoYXQgY29udGV4dCwgSSYjMzk7bSBqdXN0IGd1ZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0X3pvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTIxMDc9c3RhdGljIGlzb2xhdGVfbWlncmF0ZV90IGlzb2xhdGVfbWlncmF0ZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMTE5LVx0ICogU3RhcnQgYXQgd2hlcmUgd2UgbGFzdCBzdG9wcGVkLCBvciBiZWdpbm5pbmcgb2YgdGhlIHpvbmUgYXNcbm1tL2NvbXBhY3Rpb24uYzoyMTIwOlx0ICogaW5pdGlhbGl6ZWQgYnkgY29tcGFjdF96b25lKCkuIFRoZSBmaXJzdCBmYWlsdXJlIHdpbGwgdXNlXG5tbS9jb21wYWN0aW9uLmMtMjEyMS1cdCAqIHRoZSBsb3dlc3QgUEZOIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbGluZWFyIHNjYW5uaW5nLlxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMTk4LVx0XHQgKiBFaXRoZXIgd2UgaXNvbGF0ZWQgc29tZXRoaW5nIGFuZCBwcm9jZWVkIHdpdGggbWlncmF0aW9uLiBPclxubW0vY29tcGFjdGlvbi5jOjIxOTk6XHRcdCAqIHdlIGZhaWxlZCBhbmQgY29tcGFjdF96b25lIHNob3VsZCBkZWNpZGUgaWYgd2Ugc2hvdWxkXG5tbS9jb21wYWN0aW9uLmMtMjIwMC1cdFx0ICogY29udGludWUgb3Igbm90LlxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNjA5PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XG5tbS9jb21wYWN0aW9uLmM6MjYxMDpjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG5tbS9jb21wYWN0aW9uLmMtMjYxMS17XG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NDctXG5tbS9jb21wYWN0aW9uLmM6Mjg0ODpzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yODQ5LVx0XHRnZnBfdCBnZnBfbWFzaywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NjctXG5tbS9jb21wYWN0aW9uLmM6Mjg2ODpcdHJldHVybiBjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIGNhcGMpO1xubW0vY29tcGFjdGlvbi5jLTI4NjktfVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yODgyPWVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjkxMi1cbm1tL2NvbXBhY3Rpb24uYzoyOTEzOlx0XHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxubW0vY29tcGFjdGlvbi5jLTI5MTQtXHRcdFx0XHRhbGxvY19mbGFncywgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcbi0tXG5tbS9jb21wYWN0aW9uLmM9Mjk3MD1zdGF0aWMgaW50IGNvbXBhY3Rfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBib29sIHByb2FjdGl2ZSlcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjk5Mi1cbm1tL2NvbXBhY3Rpb24uYzoyOTkzOlx0XHRjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIE5VTEwpO1xubW0vY29tcGFjdGlvbi5jLTI5OTQtXG4tLVxubW0vY29tcGFjdGlvbi5jPTMxMzI9c3RhdGljIHZvaWQga2NvbXBhY3RkX2RvX3dvcmsocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzE3NC1cdFx0Y2Muem9uZSA9IHpvbmU7XG5tbS9jb21wYWN0aW9uLmM6MzE3NTpcdFx0c3RhdHVzID0gY29tcGFjdF96b25lKFx1MDAyNmNjLCBOVUxMKTtcbm1tL2NvbXBhY3Rpb24uYy0zMTc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI5MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgUGFnZSBDb21wYWN0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBjYWxsaW5nIGBjb21wYWN0X3pvbmVfb3JkZXJgLCB3aGljaCBpbiB0dXJuLCBJIHByZXN1bWUsIHV0aWxpemVzIGBjb21wYWN0X3pvbmVgLiBUaGlzIGlzIHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBJJiMzOTtkIGV4cGVjdCBmb3IgcGFnZSBjb21wYWN0aW9uIOKAkyBhIHRvcC1sZXZlbCBmdW5jdGlvbiBvcmNoZXN0cmF0aW5nIHRoZSBwcm9jZXNzLCBhIG1pZGRsZSBsYXllciBwb3RlbnRpYWxseSBoYW5kbGluZyBzb21lIG9yZGVyaW5nIG9yIHpvbmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVuIHRoZSBhY3R1YWwgem9uZSBjb21wYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgYGNvbXBhY3Rfem9uZWAgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyBub24tc3RhdGljIGFuZCBleHBvcnRlZCBpcyBzaWduaWZpY2FudDsgaXQgc3VnZ2VzdHMgdGhpcyBpcyBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb24sIG1lYW5pbmcgb3RoZXIgY29tcG9uZW50cyBvciBtb2R1bGVzIGFyZSBsaWtlbHkgcmVseWluZyBvbiBpdCB0byBpbml0aWF0ZSBjb21wYWN0aW9uLiBHaXZlbiB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgaXQmIzM5O3Mgd29ydGggZGlnZ2luZyBpbnRvIHRoYXQgZmlyc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqaXQqIHdvcmtzLCBhbmQgZmlndXJlIG91dCB0aGUgY2hhaW4gb2YgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYXNzdW1wdGlvbnMgSSBtYWRlIGFib3V0IGhvdyB0aGUgbG93ZXItbGV2ZWwgZnVuY3Rpb25zIHJlbGF0ZSB0byB0aGUgcHJvY2VzcyBvZiBwYWdlIGNvbXBhY3Rpb24gaW4gZ2VuZXJhbC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX2NvbXBhY3RfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTE9ZW51bSBjb21wYWN0X3ByaW9yaXR5IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0yMC1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjIxOi8qIFJldHVybiB2YWx1ZXMgZm9yIGNvbXBhY3Rfem9uZSgpIGFuZCB0cnlfdG9fY29tcGFjdF9wYWdlcygpICovXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0yMi0vKiBXaGVuIGFkZGluZyBuZXcgc3RhdGVzLCBwbGVhc2UgYWRqdXN0IGluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaCAqL1xuLS1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTkyPWV4dGVybiBpbnQgZnJhZ21lbnRhdGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjkzOmV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtOTQtXHRcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaD0xMzE9VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl9lbmQsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTE2NC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaDoxNjU6VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl90cnlfdG9fY29tcGFjdF9wYWdlcyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0xNjYtXG4tLVxubW0vY29tcGFjdGlvbi5jPTI4NDg9c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NzEtLyoqXG5tbS9jb21wYWN0aW9uLmM6Mjg3MjogKiB0cnlfdG9fY29tcGFjdF9wYWdlcyAtIERpcmVjdCBjb21wYWN0IHRvIHNhdGlzZnkgYSBoaWdoLW9yZGVyIGFsbG9jYXRpb25cbm1tL2NvbXBhY3Rpb24uYy0yODczLSAqIEBnZnBfbWFzazogVGhlIEdGUCBtYXNrIG9mIHRoZSBjdXJyZW50IGFsbG9jYXRpb25cbi0tXG5tbS9jb21wYWN0aW9uLmMtMjg4MS0gKi9cbm1tL2NvbXBhY3Rpb24uYzoyODgyOmVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yODgzLVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjg5Mi1cbm1tL2NvbXBhY3Rpb24uYzoyODkzOlx0dHJhY2VfbW1fY29tcGFjdGlvbl90cnlfdG9fY29tcGFjdF9wYWdlcyhvcmRlciwgZ2ZwX21hc2ssIHByaW8pO1xubW0vY29tcGFjdGlvbi5jLTI4OTQtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQxMzk9X19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00MTg0LVxubW0vcGFnZV9hbGxvYy5jOjQxODU6XHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MTg2LVx0XHRcdFx0XHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcdTAwMjZjYXBjKTtcbi0tXG5tbS92bXNjYW4uYz02MDg2PXN0YXRpYyBib29sIGluX3JlY2xhaW1fY29tcGFjdGlvbihzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDk5LSAqIHRydWUgaWYgbW9yZSBwYWdlcyBzaG91bGQgYmUgcmVjbGFpbWVkIHN1Y2ggdGhhdCB3aGVuIHRoZSBwYWdlIGFsbG9jYXRvclxubW0vdm1zY2FuLmM6NjEwMDogKiBjYWxscyB0cnlfdG9fY29tcGFjdF9wYWdlcygpIHRoYXQgaXQgd2lsbCBoYXZlIGVub3VnaCBmcmVlIHBhZ2VzIHRvIHN1Y2NlZWQuXG5tbS92bXNjYW4uYy02MTAxLSAqIEl0IHdpbGwgZ2l2ZSB1cCBlYXJsaWVyIHRoYW4gdGhhdCBpZiB0aGVyZSBpcyBkaWZmaWN1bHR5IHJlY2xhaW1pbmcgcGFnZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDEyCgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDEwNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBmb3IgRnV6emluZyB0aGlzIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgb3IgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsgd2l0aGluIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbiwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHN1cHBvcnRpbmcgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBzdGFuZHMgb3V0IGltbWVkaWF0ZWx5OyBpdCYjMzk7cyBub24tc3RhdGljLCBtYWtpbmcgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQgaXQmIzM5O3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBjb21wYWN0aW9uLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IGdlbmVyaWMgaXQgaXMuCgpUaGUgb3RoZXIgcHJpbWFyeSB0YXJnZXRzIGFyZTogYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGB3YWtldXBfa3N3YXBkYCwgYHdha2V1cF9rY29tcGFjdGRgLCBhbmQgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgLgoKSSBhbSB0cnlpbmcgdG8gY29uZmlybSwgYW5kIGNvbmZpcm0gYWdhaW4sIHRoYXQgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyBub3QgYSB2ZXJ5IGhvdC1wYXRoIG9yIGdlbmVyaWMgZnVuY3Rpb24sIGxpa2UgYGttYWxsb2NgIG9yIGBwYWdlX2FsbG9jYCwgYnV0IHNwZWNpZmljYWxseSB1c2VkIGluIGNvbXBhY3Rpb24uIEl0IGlzLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpOZXh0LCBJJiMzOTttIHJldmlld2luZyB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3MuIEl0IGFwcGVhcnMgdGhpcyBwYXRjaCByZWxpZXMgb24gYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgQ09NUEFDVElPTmAgZGVwZW5kcyBvbiBgTU1VYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGVwZW5kcyBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1NVWAuIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IGJlaW5nIG1vZGlmaWVkLgoKSSBhbSBxdWlja2x5IHZlcmlmeWluZyB0aGUgc291cmNlIGZpbGVzIGZvciB0aGUgZm9jdXMgc3ltYm9scyB0byBtYWtlIHN1cmUgdGhleSBhcmUgY29tcGlsZWQuIFRoaXMgY29uZmlybXMgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uLiBTcGVjaWZpY2FsbHk6CgotIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AKLSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AKLSBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAKLSBgd2FrZXVwX2tzd2FwZGAKLSBgd2FrZXVwX2tjb21wYWN0ZGAKLSBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AKClRoZXkgYXJlIGFsbCBpbiBgbW0vY29tcGFjdGlvbi5jYCBvciBgbW0vdm1zY2FuLmNgLgoKSSYjMzk7bSB2ZXJpZnlpbmcgdGhhdCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgbm90IGV4cG9ydGVkIChpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgZnV6emluZyBjYXBhYmlsaXRpZXMpLCBidXQgaXQgaXMgKm5vdCogc3RhdGljLCBzbyB0aGUgZnV6emVyIGNhbiB0cmFjZSBpdC4KCkkgdGhlbiBjaGVjayB0byBzZWUgaG93IGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMgdXNlZCwgYXMgaXQgc2VlbXMgcmVsZXZhbnQuIEl0JiMzOTtzIHVzZWQgd2l0aGluIGBjb21wYWN0X2hwYWdlX29yZGVyKClgIHdoaWNoIGlzIHVzZWQgaW4gc2V2ZXJhbCBpbXBvcnRhbnQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29tcGFjdGlvbiwgc3VpdGFiaWxpdHksIGFuZCBzY29yaW5nLiBUaGF0IG1ha2VzIHRoaXMgdmVyeSByZWxldmFudC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBjb21wYWN0aW9uIGxvZ2ljIHRvIGhhbmRsZSBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uIGJ5IHVzaW5nIGBjb21wYWN0X2hwYWdlX29yZGVyKClgIGluc3RlYWQgb2YgYENPTVBBQ1RJT05fSFBBR0VfT1JERVJgLgoKVGhlIGNvcmUgcmVhc29uaW5nIGZvciB0aGlzIHBhdGNoIGlzIHRoYXQgaXQgbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBsb2dpYyB0byBzdXBwb3J0IG11bHRpLXNpemUgVEhQcy4gSXQgaW5jbHVkZXMgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCB1cGRhdGVzIGNvbXBhY3Rpb24gY2hlY2tzLCBhbmQgbW9kaWZpZXMgYGtjb21wYWN0ZGAgYW5kIGBrc3dhcGRgIGJlaGF2aW9yLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IHdpbGwgYmUgdGVzdGVkIHdoZW4gdmlydHVhbGl6ZWQuCgpJbiBzdW1tYXJ5LCB0aGUga2V5IGNvbXBvbmVudHMgSSYjMzk7bSBmb2N1c2luZyBvbiBmb3IgZnV6emluZyBhcmU6CgoqICAgQ29uZmlnczogYENPTVBBQ1RJT05gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCiogICBGb2N1cyBzeW1ib2xzOgogICAgKiAgIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgKHByaW1hcnkgZW50cnkgcG9pbnQpCiAgICAqICAgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIChzcGVjaWZpYyB0byB0aGUgcGF0Y2gpCiAgICAqICAgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIChyZWxhdGVkIHRvIHBhdGNoKQogICAgKiAgIGB3YWtldXBfa3N3YXBkYAogICAgKiAgIGB3YWtldXBfa2NvbXBhY3RkYAogICAgKiAgIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYAoKSSBhbSByZS1ldmFsdWF0aW5nIHRoYXQgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBjb25maXJtIGl0IGlzIHNwZWNpZmljIGVub3VnaCB0byBjb21wYWN0aW9uLiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgYW5kIGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCBhcmUgYmV0dGVyLiBOb3cgSSB3aWxsIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDt6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUmIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7LAogICAgJiMzNDt3YWtldXBfa2NvbXBhY3RkJiMzNDssCiAgICAmIzM0O2tzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBsb2dpYyB0byBzdXBwb3J0IG11bHRpLXNpemUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAobVRIUCkuIEl0IGludHJvZHVjZXMgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIHRvIGNhbGN1bGF0ZSBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIHRoZSBhbGxvY2F0aW9uIG9yZGVyIGFuZCB1cGRhdGVzIGNvbXBhY3Rpb24gc3VpdGFiaWxpdHkgY2hlY2tzLCBmcmFnbWVudGF0aW9uIHNjb3JpbmcsIGFuZCBrY29tcGFjdGQva3N3YXBkIGJlaGF2aW9yIHRvIHVzZSB0aGUgbmV3IGBjb21wYWN0X2hwYWdlX29yZGVyKClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O3pvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7Y29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZSYjMzQ7LAogICAgJiMzNDt3YWtldXBfa3N3YXBkJiMzNDssCiAgICAmIzM0O3dha2V1cF9rY29tcGFjdGQmIzM0OywKICAgICYjMzQ7a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gaGV1cmlzdGljcywgc3VjaCBhcyBmcmFnbWVudGF0aW9uIHNjb3JpbmcgYW5kIGVmZmVjdGl2ZSBmcmVlIHBhZ2VzIGNhbGN1bGF0aW9uIGZvciBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMgaW4gd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucyBvciB0aGUgYGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcmAgYml0d2lzZSBvcGVyYXRpb24pIHdvdWxkIHJlc3VsdCBpbiBwZXJmb3JtYW5jZSBpc3N1ZXMsIE9PTXMsIG9yIGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWcgdG9vbHMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIHRoYXQgcmVxdWlyZXMgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiZjkxNmRkNGJhMDZiZjVhYzc2OGQ3YjA0M2JjNWNjNGQ0ZjllNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAwNTowNTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCBhMDQ5NDE1NTEyYzY3Li4yOWJlNzI1OTc0MTU2IDEwMDY0NAotLS0gYS9tbS9jb21wYWN0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jCkBAIC0yNCw2ICYjNDM7MjQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2Vfb3duZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wc2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVzZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHVnZV9tbS5oJmd0OwogI2luY2x1ZGUgJiMzNDtwYWdlX2FsbG9jLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIApAQCAtODEsNiAmIzQzOzgyLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfQogI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSCShQTURfU0hJRlQgLSBQQUdFX1NISUZUKQogI2VuZGlmCiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7CiYjNDM7CiYjNDM7CWlmIChvcmRlcnMpCiYjNDM7CQlyZXR1cm4gX19mZnMob3JkZXJzKTsKJiM0MzsJcmV0dXJuIENPTVBBQ1RJT05fSFBBR0VfT1JERVI7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7CkBAIC04MjcsNiAmIzQzOzgzNywxMiBAQCBzdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpCiAJICovCiAJaWYgKCFpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSAmYW1wOyZhbXA7IG9yZGVyICZndDs9IHRhcmdldF9vcmRlcikKIAkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CS8qIFdlIGFyZSBjb21wYWN0aW5nIGZvciBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uICovCiYjNDM7CWlmIChpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSAmYW1wOyZhbXA7IG9yZGVyICZndDs9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiAJLyoKIAkgKiBXZSBsaW1pdCBtZW1vcnkgY29tcGFjdGlvbiB0byBwYWdlYmxvY2tzIGFuZCB3b24mIzM5O3QgdHJ5CiAJICogY3JlYXRpbmcgZnJlZSBibG9ja3Mgb2YgbWVtb3J5IHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoYXQuCkBAIC0yMjA4LDE2ICYjNDM7MjIyNCwxNiBAQCBzdGF0aWMgYm9vbCBrc3dhcGRfaXNfcnVubmluZyhwZ19kYXRhX3QgKnBnZGF0KQogCiAvKgogICogQSB6b25lJiMzOTtzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb24gd3J0IHRvIHRoZQotICogQ09NUEFDVElPTl9IUEFHRV9PUkRFUi4gSXQgcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS4KJiM0MzsgKiBjb21wYWN0X2hwYWdlX29yZGVyKCkuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7Ci0JcmV0dXJuIGV4dGZyYWdfZm9yX29yZGVyKHpvbmUsIENPTVBBQ1RJT05fSFBBR0VfT1JERVIpOwomIzQzOwlyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgb3JkZXIpOwogfQogCiAvKgogICogQSB3ZWlnaHRlZCB6b25lJiMzOTtzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb24KLSAqIHdydCB0byB0aGUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUiBzY2FsZWQgYnkgdGhlIHpvbmUmIzM5O3Mgc2l6ZS4gSXQKJiM0MzsgKiB3cnQgdG8gdGhlIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBzY2FsZWQgYnkgdGhlIHpvbmUmIzM5O3Mgc2l6ZS4gSXQKICAqIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uCiAgKgogICogVGhlIHNjYWxpbmcgZmFjdG9yIGVuc3VyZXMgdGhhdCBwcm9hY3RpdmUgY29tcGFjdGlvbiBmb2N1c2VzIG9uIGxhcmdlcgpAQCAtMjIyNSwxMSAmIzQzOzIyNDEsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpCiAgKiBaT05FX0RNQTMyLiBGb3Igc21hbGxlciB6b25lcywgdGhlIHNjb3JlIHZhbHVlIHJlbWFpbnMgY2xvc2UgdG8gemVybywKICAqIGFuZCB0aHVzIG5ldmVyIGV4Y2VlZHMgdGhlIGhpZ2ggdGhyZXNob2xkIGZvciBwcm9hY3RpdmUgY29tcGFjdGlvbi4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAl1bnNpZ25lZCBsb25nIHNjb3JlOwogCi0Jc2NvcmUgPSB6b25lLSZndDtwcmVzZW50X3BhZ2VzICogZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHpvbmUpOwomIzQzOwlzY29yZSA9IHpvbmUtJmd0O3ByZXNlbnRfcGFnZXMgKiBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoem9uZSwgb3JkZXIpOwogCXJldHVybiBkaXY2NF91bChzY29yZSwgem9uZS0mZ3Q7em9uZV9wZ2RhdC0mZ3Q7bm9kZV9wcmVzZW50X3BhZ2VzICYjNDM7IDEpOwogfQogCkBAIC0yMjQwLDcgJiM0MzsyMjU2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpCiAgKiB0aGUgbm9kZSYjMzk7cyBzY29yZSBmYWxscyBiZWxvdyB0aGUgbG93IHRocmVzaG9sZCwgb3Igb25lIG9mIHRoZSBiYWNrLW9mZgogICogY29uZGl0aW9ucyBpcyBtZXQuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKQogewogCXVuc2lnbmVkIGludCBzY29yZSA9IDA7CiAJaW50IHpvbmVpZDsKQEAgLTIyNTEsNyAmIzQzOzIyNjcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ19kYXRhX3QgKnBnZGF0KQogCQl6b25lID0gJmFtcDtwZ2RhdC0mZ3Q7bm9kZV96b25lc1t6b25laWRdOwogCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQogCQkJY29udGludWU7Ci0JCXNjb3JlICYjNDM7PSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoem9uZSk7CiYjNDM7CQlzY29yZSAmIzQzOz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUsIG9yZGVyKTsKIAl9CiAKIAlyZXR1cm4gc2NvcmU7CkBAIC0yMjY5LDEyICYjNDM7MjI4NSwxMyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoYm9vbCBsb3cpCiBzdGF0aWMgYm9vbCBzaG91bGRfcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZShwZ19kYXRhX3QgKnBnZGF0KQogewogCWludCB3bWFya19oaWdoOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wYWN0X2hwYWdlX29yZGVyKCk7CiAKIAlpZiAoIXN5c2N0bF9jb21wYWN0aW9uX3Byb2FjdGl2ZW5lc3MgfHwga3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAl3bWFya19oaWdoID0gZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayhmYWxzZSk7Ci0JcmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCkgJmd0OyB3bWFya19oaWdoOwomIzQzOwlyZXR1cm4gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcikgJmd0OyB3bWFya19oaWdoOwogfQogCiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBfX2NvbXBhY3RfZmluaXNoZWQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCkBAIC0yMzA2LDEyICYjNDM7MjMyMywxMyBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBfX2NvbXBhY3RfZmluaXNoZWQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCiAJaWYgKGNjLSZndDtwcm9hY3RpdmVfY29tcGFjdGlvbikgewogCQlpbnQgc2NvcmUsIHdtYXJrX2xvdzsKIAkJcGdfZGF0YV90ICpwZ2RhdDsKJiM0MzsJCWJvb2wgY29zdGx5ID0gY29tcGFjdF9ocGFnZV9vcmRlcigpICZndDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7CiAKIAkJcGdkYXQgPSBjYy0mZ3Q7em9uZS0mZ3Q7em9uZV9wZ2RhdDsKLQkJaWYgKGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSkKJiM0MzsJCWlmIChjb3N0bHkgJmFtcDsmYW1wOyBrc3dhcGRfaXNfcnVubmluZyhwZ2RhdCkpCiAJCQlyZXR1cm4gQ09NUEFDVF9QQVJUSUFMX1NLSVBQRUQ7CiAKLQkJc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtJmd0O3pvbmUpOwomIzQzOwkJc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtJmd0O3pvbmUsIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSk7CiAJCXdtYXJrX2xvdyA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsodHJ1ZSk7CiAKIAkJaWYgKHNjb3JlICZndDsgd21hcmtfbG93KQpAQCAtMjUxMCw2ICYjNDM7MjUyOCwzOCBAQCBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7LyoqCiYjNDM7ICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXIKJiM0MzsgKiBAem9uZTogICAgICAgdGFyZ2V0IHpvbmUKJiM0MzsgKiBAb3JkZXI6ICAgICAgYWxsb2NhdGlvbiBvcmRlcgomIzQzOyAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1MKJiM0MzsgKgomIzQzOyAqIEluIGRlZnJhZ19tb2RlLCB3YXRlcm1hcmtzIG11c3QgYmUgbWV0IGluIHdob2xlIGJsb2NrcyB0byBhdm9pZAomIzQzOyAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaAomIzQzOyAqIHRoaXMgb24gaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuCiYjNDM7ICoKJiM0MzsgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXMKJiM0MzsgKiBpbiBibG9ja3MgJmd0Oz0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFAKJiM0MzsgKiBhbGxvY2F0aW9ucy4KJiM0MzsgKi8KJiM0Mzt1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJCQlib29sIHVzZV9ibG9ja3MpCiYjNDM7ewomIzQzOwlpZiAodXNlX2Jsb2NrcykKJiM0MzsJCXJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpOwomIzQzOwomIzQzOwlpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSAmYW1wOyZhbXA7IG9yZGVyID09IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDsKJiM0MzsKJiM0MzsJCWZvciAoaW50IG8gPSBvcmRlcjsgbyAmbHQ7IE5SX1BBR0VfT1JERVJTOyBvJiM0MzsmIzQzOykKJiM0MzsJCQlmcmVlX3BhZ2VzICYjNDM7PSB6b25lLSZndDtmcmVlX2FyZWFbb10ubnJfZnJlZSAmbHQ7Jmx0OyBvOwomIzQzOwkJcmV0dXJuIGZyZWVfcGFnZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogU2hvdWxkIHdlIGRvIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBhbGxvY2F0aW9uIG9yZGVyLgogICogUmV0dXJuIENPTVBBQ1RfU1VDQ0VTUyBpZiBhbGxvY2F0aW9uIGZvciB0YXJnZXQgb3JkZXIgY2FuIGJlIGFscmVhZHkKQEAgLTI1MjUsMTAgJiM0MzsyNTc1LDggQEAgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlciwKIAl1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7CiAJdW5zaWduZWQgbG9uZyB3YXRlcm1hcms7CiAKLQlpZiAoa2NvbXBhY3RkICZhbXA7JmFtcDsgZGVmcmFnX21vZGUpCi0JCWZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpOwotCWVsc2UKLQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKJiM0MzsJZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsCiYjNDM7CQkJCQkgICAgICAga2NvbXBhY3RkICZhbXA7JmFtcDsgZGVmcmFnX21vZGUpOwogCiAJd2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfV01BUktfTUFTSyk7CiAJaWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LApAQCAtMzIzOCwxMCAmIzQzOzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcCkKIAkJdGltZW91dCA9IGRlZmF1bHRfdGltZW91dDsKIAkJaWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkgewogCQkJdW5zaWduZWQgaW50IHByZXZfc2NvcmUsIHNjb3JlOwomIzQzOwkJCXVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKTsKIAotCQkJcHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7CiYjNDM7CQkJcHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpOwogCQkJY29tcGFjdF9ub2RlKHBnZGF0LCB0cnVlKTsKLQkJCXNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0KTsKJiM0MzsJCQlzY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpOwogCQkJLyoKIAkJCSAqIERlZmVyIHByb2FjdGl2ZSBjb21wYWN0aW9uIGlmIHRoZSBmcmFnbWVudGF0aW9uCiAJCQkgKiBzY29yZSBkaWQgbm90IGdvIGRvd24gaS5lLiBubyBwcm9ncmVzcyBtYWRlLgpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMzhiMTE2NTIxMmM5NC4uMTRiYjk1NDM4NzliNCAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0xNjU0LDQgJiM0MzsxNjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3Vuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBvcmRlciwKJiM0MzsJCQkJCWJvb2wgdXNlX2Jsb2Nrcyk7CiAjZW5kaWYJLyogX19NTV9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLmE0MTlhMmMyZmNhNDAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC02OTY2LDcgJiM0Mzs2OTY2LDYgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KQogCSAqIG1lZXQgd2F0ZXJtYXJrcy4KIAkgKi8KIAlmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgcGdkYXQsIGksIGhpZ2hlc3Rfem9uZWlkeCkgewotCQllbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW07CiAJCXVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlczsKIAogCQlpZiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgJmFtcDsgTlVNQV9CQUxBTkNJTkdfTUVNT1JZX1RJRVJJTkcpCkBAIC02OTc0LDIxICYjNDM7Njk3Myw2IEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkJZWxzZQogCQkJbWFyayA9IGhpZ2hfd21hcmtfcGFnZXMoem9uZSk7CiAKLQkJLyoKLQkJICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUKLQkJICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLgotCQkgKgotCQkgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uCi0JCSAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzCi0JCSAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlCi0JCSAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2gKLQkJICogYmFzZSBwYWdlcyBmb3IgY29tcGFjdGlvbiwgd2FrZSBrY29tcGFjdGQgJmFtcDsgc2xlZXAuCi0JCSAqLwotCQlpZiAoZGVmcmFnX21vZGUgJmFtcDsmYW1wOyBvcmRlcikKLQkJCWl0ZW0gPSBOUl9GUkVFX1BBR0VTX0JMT0NLUzsKLQkJZWxzZQotCQkJaXRlbSA9IE5SX0ZSRUVfUEFHRVM7Ci0KIAkJLyoKIAkJICogV2hlbiB0aGVyZSBpcyBhIGhpZ2ggbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbSwKIAkJICogdGhlIGN1bXVsYXRpdmUgZXJyb3IgZnJvbSB0aGUgdm1zdGF0IHBlci1jcHUgY2FjaGUKQEAgLTcwMDEsOSAmIzQzOzY5ODUsMTIgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KQogCQkgKiBjb3VudGVyIHdvbiYjMzk7dCBhY3R1YWxseSBiZSBwZXItY3B1IGNhY2hlZC4gQnV0IGtlZXAKIAkJICogdGhpbmdzIHNpbXBsZSBmb3Igbm93OyByZXZpc2l0IHdoZW4gc29tZWJvZHkgY2FyZXMuCiAJCSAqLwotCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIGl0ZW0pOwomIzQzOwkJZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsCiYjNDM7CQkJCQkJICAgICAgIGRlZnJhZ19tb2RlICZhbXA7IG9yZGVyKTsKIAkJaWYgKHpvbmUtJmd0O3BlcmNwdV9kcmlmdF9tYXJrICZhbXA7JmFtcDsgZnJlZV9wYWdlcyAmbHQ7IHpvbmUtJmd0O3BlcmNwdV9kcmlmdF9tYXJrKQotCQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBpdGVtKTsKJiM0MzsJCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsCiYjNDM7CQkJCQlkZWZyYWdfbW9kZSAmYW1wOyBvcmRlciA/CiYjNDM7CQkJCQlOUl9GUkVFX1BBR0VTX0JMT0NLUyA6IE5SX0ZSRUVfUEFHRVMpOwogCiAJCWlmIChfX3pvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCBtYXJrLCBoaWdoZXN0X3pvbmVpZHgsCiAJCQkJCTAsIGZyZWVfcGFnZXMpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTExOAoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA5OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayBBc3Nlc3NtZW50OiBNZW1vcnkgQ29tcGFjdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRpbmtlcmluZyB3aXRoIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gd2l0aGluIHRoZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSwgaG93IGZyZWUgcGFnZXMgYXJlIGNhbGN1bGF0ZWQsIGZyYWdtZW50YXRpb24gaXMgc2NvcmVkLCBhbmQgY29tcGFjdGlvbiBpcyB0cmlnZ2VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoKRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjb21wYWN0X2hwYWdlX29yZGVyKClgIGJhc2VkIG9uIGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AuIEl0IGludHJvZHVjZXMgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoKWAgYW5kIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIHNjb3JpbmcgZnVuY3Rpb25zIHRvIHRha2UgYW4gb3JkZXIgcGFyYW1ldGVyLiBUaGUgYGtzd2FwZF9pc19ydW5uaW5nYCBjaGVjayBpbiBgX19jb21wYWN0X2ZpbmlzaGVkYCBub3cgb25seSBvY2N1cnMgaWYgaXQmIzM5O3MgJiMzNDtjb3N0bHkmIzM0Oy4KCk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGlzOiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW07IHBhZ2UgYWxsb2NhdGlvbiwgY29tcGFjdGlvbiwgYW5kIHZtc2Nhbi4gQ3J1Y2lhbGx5LCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgYnJhbmQtbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCB3aXRoaW4gdGhlc2UgY2hhbmdlcy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgbWlnaHQgYWxsb3cgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGxvZ2ljIG9mIHdoZW4gdG8gY29tcGFjdCBhbmQgaG93IHRvIHNjb3JlIGZyYWdtZW50YXRpb24sIHJhdGhlciB0aGFuIGRpcmVjdCBtZW1vcnkgYWNjZXNzLgoKQW55IHBvdGVudGlhbCBidWdzIGhlcmUgYXJlIG1vc3QgbGlrZWx5IGxvZ2ljIGJ1Z3PigJR0aGluZ3MgbGlrZSBpbmZpbml0ZSBsb29wcywgaW5jb3JyZWN0IHdhdGVybWFya3MsIG91dC1vZi1tZW1vcnkgZXJyb3Jz4oCUb3IsIGF0IHdvcnN0LCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggS0FTQU4gd291bGQgY2F0Y2guIENydWNpYWxseSwgdGhpcyBkb2VzbuKAmXQgc2VlbSBsaWtlIGEgc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgbGVhayB0byB1c2Vyc3BhY2Ugb3IgYmUgdXNlZCBpbiBjb250cm9sIGZsb3cgKGUuZy4sIGluIHN0YWNrIHZhcmlhYmxlcykgaW4gYSB3YXkgdGhhdCAqc3BlY2lmaWNhbGx5KiBjYWxscyBmb3IgS01TQU4uCgpMZXQmIzM5O3MgcXVpY2tseSBzY2FuIHRoZSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcygpYCBjb2RlOiBUaGlzIGNvZGUganVzdCByZWFkcyB2YWx1ZXMgZnJvbSBgem9uZS0mZ3Q7ZnJlZV9hcmVhW29dLm5yX2ZyZWVgLCBzbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY2hhbmdlcyB3aXRoaW4gYHZtc2Nhbi5jYC4gSXQgaGFzOgoKYGBgYwotCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIGl0ZW0pOwomIzQzOwkJZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsCiYjNDM7CQkJCQkJICAgICAgIGRlZnJhZ19tb2RlICZhbXA7IG9yZGVyKTsKIAkJaWYgKHpvbmUtJmd0O3BlcmNwdV9kcmlmdF9tYXJrICZhbXA7JmFtcDsgZnJlZV9wYWdlcyAmbHQ7IHpvbmUtJmd0O3BlcmNwdV9kcmlmdF9tYXJrKQotCQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBpdGVtKTsKJiM0MzsJCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsCiYjNDM7CQkJCQlkZWZyYWdfbW9kZSAmYW1wOyBvcmRlciA/CiYjNDM7CQkJCQlOUl9GUkVFX1BBR0VTX0JMT0NLUyA6IE5SX0ZSRUVfUEFHRVMpOwpgYGAKCk9rYXksIHRoZSBjcnVjaWFsIGNoYW5nZSBpcyBgZGVmcmFnX21vZGUgJmFtcDsgb3JkZXJgLiBQcmV2aW91c2x5LCBpdCB3YXMgYGRlZnJhZ19tb2RlICZhbXA7JmFtcDsgb3JkZXJgLiBOb3csIHdoaWxlIGBkZWZyYWdfbW9kZWAgaXMgbGlrZWx5IGEgYm9vbGVhbiBvciBpbnRlZ2VyLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNoZWNrLiBJZiBgZGVmcmFnX21vZGVgIGlzbiYjMzk7dCAxLCB0aGlzIGNoYW5nZSBtaWdodCByZXN1bHQgaW4gYSBidWcuIEl0IGFwcGVhcnMgdG8gYmUgYSBidWcgaWYgYGRlZnJhZ19tb2RlYCBpcyBub3QgMS4gRXZlbiBzbywgaXQmIzM5O3MgYSBsb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvbmUuCgoqKkNvbmNsdXNpb246KiogQmFzZWQgb24gdGhpcyByZXZpZXcsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgcG9zZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgcmVxdWlyaW5nIGEgS01TQU4gY2hlY2suIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGNvbXBhY3Rpb24gaGV1cmlzdGljcyBhbmQgZnJlZSBwYWdlIGNhbGN1bGF0aW9ucywgd2l0aG91dCBpbnRyb2R1Y2luZyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugb3IgY29tcGxleCBhbGxvY2F0aW9ucy4gQW55IGludHJvZHVjZWQgYnVncywgbGlrZSBpbiB3YXRlcm1hcmsgY2FsY3VsYXRpb25zLCB3b3VsZCBsZWFkIHRvIHByb2JsZW1zIHRoYXQgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgd291bGQgYmUgYWJsZSB0byBjYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBoZXVyaXN0aWNzLCBzdWNoIGFzIGZyYWdtZW50YXRpb24gc2NvcmluZyBhbmQgZWZmZWN0aXZlIGZyZWUgcGFnZXMgY2FsY3VsYXRpb24gZm9yIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycyBpbiB3YXRlcm1hcmsgY2FsY3VsYXRpb25zIG9yIHRoZSBgZGVmcmFnX21vZGUgXHUwMDI2IG9yZGVyYCBiaXR3aXNlIG9wZXJhdGlvbikgd291bGQgcmVzdWx0IGluIHBlcmZvcm1hbmNlIGlzc3VlcywgT09Ncywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1ZyB0b29scy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgdGhhdCByZXF1aXJlcyBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gaGV1cmlzdGljcywgc3VjaCBhcyBmcmFnbWVudGF0aW9uIHNjb3JpbmcgYW5kIGVmZmVjdGl2ZSBmcmVlIHBhZ2VzIGNhbGN1bGF0aW9uIGZvciBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMgaW4gd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucyBvciB0aGUgYGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcmAgYml0d2lzZSBvcGVyYXRpb24pIHdvdWxkIHJlc3VsdCBpbiBwZXJmb3JtYW5jZSBpc3N1ZXMsIE9PTXMsIG9yIGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWcgdG9vbHMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIHRoYXQgcmVxdWlyZXMgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjA0LjY2MDAwNTM1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU3MTA5MTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19jb21wYWN0X3BhZ2VzXCIsXG4gICAgXCJ6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlXCIsXG4gICAgXCJ3YWtldXBfa3N3YXBkXCIsXG4gICAgXCJ3YWtldXBfa2NvbXBhY3RkXCIsXG4gICAgXCJrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGhldXJpc3RpY3MsIHN1Y2ggYXMgZnJhZ21lbnRhdGlvbiBzY29yaW5nIGFuZCBlZmZlY3RpdmUgZnJlZSBwYWdlcyBjYWxjdWxhdGlvbiBmb3IgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzIGluIHdhdGVybWFyayBjYWxjdWxhdGlvbnMgb3IgdGhlIGBkZWZyYWdfbW9kZSBcXHUwMDI2IG9yZGVyYCBiaXR3aXNlIG9wZXJhdGlvbikgd291bGQgcmVzdWx0IGluIHBlcmZvcm1hbmNlIGlzc3VlcywgT09Ncywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1ZyB0b29scy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgdGhhdCByZXF1aXJlcyBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTowNC42NjAwMDk2NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjA0MjI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJiZjkxNmRkNGJhMDZiZjVhYzc2OGQ3YjA0M2JjNWNjNGQ0ZjllNTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDU6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXFxuaW5kZXggYTA0OTQxNTUxMmM2Ny4uMjliZTcyNTk3NDE1NiAxMDA2NDRcXG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcXG5AQCAtMjQsNiArMjQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9vd25lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVzZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInBhZ2VfYWxsb2MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbkBAIC04MSw2ICs4MiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cXG4gI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXFx0KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpXFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgY29tcGFjdF9ocGFnZV9vcmRlcih2b2lkKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKTtcXG4rXFxuK1xcdGlmIChvcmRlcnMpXFxuK1xcdFxcdHJldHVybiBfX2ZmcyhvcmRlcnMpO1xcbitcXHRyZXR1cm4gQ09NUEFDVElPTl9IUEFHRV9PUkRFUjtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbiB7XFxuIFxcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XFxuQEAgLTgyNyw2ICs4MzcsMTIgQEAgc3RhdGljIGJvb2wgc2tpcF9pc29sYXRpb25fb25fb3JkZXIoaW50IG9yZGVyLCBpbnQgdGFyZ2V0X29yZGVyKVxcbiBcXHQgKi9cXG4gXFx0aWYgKCFpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNlPSB0YXJnZXRfb3JkZXIpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0LyogV2UgYXJlIGNvbXBhY3RpbmcgZm9yIG11bHRpLXNpemUgVEhQIGFsbG9jYXRpb24gKi9cXG4rXFx0aWYgKGlzX3ZpYV9jb21wYWN0X21lbW9yeSh0YXJnZXRfb3JkZXIpIFxcdTAwMjZcXHUwMDI2IG9yZGVyIFxcdTAwM2U9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBXZSBsaW1pdCBtZW1vcnkgY29tcGFjdGlvbiB0byBwYWdlYmxvY2tzIGFuZCB3b24ndCB0cnlcXG4gXFx0ICogY3JlYXRpbmcgZnJlZSBibG9ja3Mgb2YgbWVtb3J5IHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoYXQuXFxuQEAgLTIyMDgsMTYgKzIyMjQsMTYgQEAgc3RhdGljIGJvb2wga3N3YXBkX2lzX3J1bm5pbmcocGdfZGF0YV90ICpwZ2RhdClcXG4gXFxuIC8qXFxuICAqIEEgem9uZSdzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb24gd3J0IHRvIHRoZVxcbi0gKiBDT01QQUNUSU9OX0hQQUdFX09SREVSLiBJdCByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFswLCAxMDBdLlxcbisgKiBjb21wYWN0X2hwYWdlX29yZGVyKCkuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXFxuICAqL1xcbi1zdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbi1cXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgQ09NUEFDVElPTl9IUEFHRV9PUkRFUik7XFxuK1xcdHJldHVybiBleHRmcmFnX2Zvcl9vcmRlcih6b25lLCBvcmRlcik7XFxuIH1cXG4gXFxuIC8qXFxuICAqIEEgd2VpZ2h0ZWQgem9uZSdzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb25cXG4tICogd3J0IHRvIHRoZSBDT01QQUNUSU9OX0hQQUdFX09SREVSIHNjYWxlZCBieSB0aGUgem9uZSdzIHNpemUuIEl0XFxuKyAqIHdydCB0byB0aGUgY29tcGFjdF9ocGFnZV9vcmRlcigpIHNjYWxlZCBieSB0aGUgem9uZSdzIHNpemUuIEl0XFxuICAqIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXFxuICAqXFxuICAqIFRoZSBzY2FsaW5nIGZhY3RvciBlbnN1cmVzIHRoYXQgcHJvYWN0aXZlIGNvbXBhY3Rpb24gZm9jdXNlcyBvbiBsYXJnZXJcXG5AQCAtMjIyNSwxMSArMjI0MSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gICogWk9ORV9ETUEzMi4gRm9yIHNtYWxsZXIgem9uZXMsIHRoZSBzY29yZSB2YWx1ZSByZW1haW5zIGNsb3NlIHRvIHplcm8sXFxuICAqIGFuZCB0aHVzIG5ldmVyIGV4Y2VlZHMgdGhlIGhpZ2ggdGhyZXNob2xkIGZvciBwcm9hY3RpdmUgY29tcGFjdGlvbi5cXG4gICovXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2NvcmU7XFxuIFxcbi1cXHRzY29yZSA9IHpvbmUtXFx1MDAzZXByZXNlbnRfcGFnZXMgKiBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoem9uZSk7XFxuK1xcdHNjb3JlID0gem9uZS1cXHUwMDNlcHJlc2VudF9wYWdlcyAqIGZyYWdtZW50YXRpb25fc2NvcmVfem9uZSh6b25lLCBvcmRlcik7XFxuIFxcdHJldHVybiBkaXY2NF91bChzY29yZSwgem9uZS1cXHUwMDNlem9uZV9wZ2RhdC1cXHUwMDNlbm9kZV9wcmVzZW50X3BhZ2VzICsgMSk7XFxuIH1cXG4gXFxuQEAgLTIyNDAsNyArMjI1Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKVxcbiAgKiB0aGUgbm9kZSdzIHNjb3JlIGZhbGxzIGJlbG93IHRoZSBsb3cgdGhyZXNob2xkLCBvciBvbmUgb2YgdGhlIGJhY2stb2ZmXFxuICAqIGNvbmRpdGlvbnMgaXMgbWV0LlxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdClcXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBzY29yZSA9IDA7XFxuIFxcdGludCB6b25laWQ7XFxuQEAgLTIyNTEsNyArMjI2Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXFxuIFxcdFxcdHpvbmUgPSBcXHUwMDI2cGdkYXQtXFx1MDAzZW5vZGVfem9uZXNbem9uZWlkXTtcXG4gXFx0XFx0aWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdHNjb3JlICs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lKTtcXG4rXFx0XFx0c2NvcmUgKz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUsIG9yZGVyKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHNjb3JlO1xcbkBAIC0yMjY5LDEyICsyMjg1LDEzIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayhib29sIGxvdylcXG4gc3RhdGljIGJvb2wgc2hvdWxkX3Byb2FjdGl2ZV9jb21wYWN0X25vZGUocGdfZGF0YV90ICpwZ2RhdClcXG4ge1xcbiBcXHRpbnQgd21hcmtfaGlnaDtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xcbiBcXG4gXFx0aWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0d21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpO1xcbi1cXHRyZXR1cm4gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0KSBcXHUwMDNlIHdtYXJrX2hpZ2g7XFxuK1xcdHJldHVybiBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQsIG9yZGVyKSBcXHUwMDNlIHdtYXJrX2hpZ2g7XFxuIH1cXG4gXFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG5AQCAtMjMwNiwxMiArMjMyMywxMyBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBfX2NvbXBhY3RfZmluaXNoZWQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXFxuIFxcdGlmIChjYy1cXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3Rpb24pIHtcXG4gXFx0XFx0aW50IHNjb3JlLCB3bWFya19sb3c7XFxuIFxcdFxcdHBnX2RhdGFfdCAqcGdkYXQ7XFxuK1xcdFxcdGJvb2wgY29zdGx5ID0gY29tcGFjdF9ocGFnZV9vcmRlcigpIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XFxuIFxcbiBcXHRcXHRwZ2RhdCA9IGNjLVxcdTAwM2V6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbi1cXHRcXHRpZiAoa3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKVxcbitcXHRcXHRpZiAoY29zdGx5IFxcdTAwMjZcXHUwMDI2IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcXG4gXFx0XFx0XFx0cmV0dXJuIENPTVBBQ1RfUEFSVElBTF9TS0lQUEVEO1xcbiBcXG4tXFx0XFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtXFx1MDAzZXpvbmUpO1xcbitcXHRcXHRzY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShjYy1cXHUwMDNlem9uZSwgY29tcGFjdF9ocGFnZV9vcmRlcigpKTtcXG4gXFx0XFx0d21hcmtfbG93ID0gZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayh0cnVlKTtcXG4gXFxuIFxcdFxcdGlmIChzY29yZSBcXHUwMDNlIHdtYXJrX2xvdylcXG5AQCAtMjUxMCw2ICsyNTI4LDM4IEBAIGJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbisvKipcXG4rICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXJcXG4rICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXFxuKyAqIEBvcmRlcjogICAgICBhbGxvY2F0aW9uIG9yZGVyXFxuKyAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1NcXG4rICpcXG4rICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUgYmxvY2tzIHRvIGF2b2lkXFxuKyAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaFxcbisgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LlxcbisgKlxcbisgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXNcXG4rICogaW4gYmxvY2tzIFxcdTAwM2U9IG1pbiBtVEhQIG9yZGVyLCBhcyBzbWFsbGVyIGZyYWdtZW50cyBjYW5ub3Qgc2F0aXNmeSBtVEhQXFxuKyAqIGFsbG9jYXRpb25zLlxcbisgKi9cXG4rdW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgdXNlX2Jsb2NrcylcXG4re1xcbitcXHRpZiAodXNlX2Jsb2NrcylcXG4rXFx0XFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcXHUwMDI2XFx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcXG4rXFxuK1xcdFxcdGZvciAoaW50IG8gPSBvcmRlcjsgbyBcXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvKyspXFxuK1xcdFxcdFxcdGZyZWVfcGFnZXMgKz0gem9uZS1cXHUwMDNlZnJlZV9hcmVhW29dLm5yX2ZyZWUgXFx1MDAzY1xcdTAwM2MgbztcXG4rXFx0XFx0cmV0dXJuIGZyZWVfcGFnZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci5cXG4gICogUmV0dXJuIENPTVBBQ1RfU1VDQ0VTUyBpZiBhbGxvY2F0aW9uIGZvciB0YXJnZXQgb3JkZXIgY2FuIGJlIGFscmVhZHlcXG5AQCAtMjUyNSwxMCArMjU3NSw4IEBAIGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcztcXG4gXFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XFxuIFxcbi1cXHRpZiAoa2NvbXBhY3RkIFxcdTAwMjZcXHUwMDI2IGRlZnJhZ19tb2RlKVxcbi1cXHRcXHRmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xcbitcXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGtjb21wYWN0ZCBcXHUwMDI2XFx1MDAyNiBkZWZyYWdfbW9kZSk7XFxuIFxcbiBcXHR3YXRlcm1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xcbiBcXHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgd2F0ZXJtYXJrLCBoaWdoZXN0X3pvbmVpZHgsXFxuQEAgLTMyMzgsMTAgKzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcXG4gXFx0XFx0dGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcXG4gXFx0XFx0aWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldl9zY29yZSwgc2NvcmU7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKTtcXG4gXFxuLVxcdFxcdFxcdHByZXZfc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpO1xcbitcXHRcXHRcXHRwcmV2X3Njb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XFxuIFxcdFxcdFxcdGNvbXBhY3Rfbm9kZShwZ2RhdCwgdHJ1ZSk7XFxuLVxcdFxcdFxcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0KTtcXG4rXFx0XFx0XFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQsIG9yZGVyKTtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogRGVmZXIgcHJvYWN0aXZlIGNvbXBhY3Rpb24gaWYgdGhlIGZyYWdtZW50YXRpb25cXG4gXFx0XFx0XFx0ICogc2NvcmUgZGlkIG5vdCBnbyBkb3duIGkuZS4gbm8gcHJvZ3Jlc3MgbWFkZS5cXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCAzOGIxMTY1MjEyYzk0Li4xNGJiOTU0Mzg3OWI0IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTE2NTQsNCArMTY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0Ym9vbCB1c2VfYmxvY2tzKTtcXG4gI2VuZGlmXFx0LyogX19NTV9JTlRFUk5BTF9IICovXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li5hNDE5YTJjMmZjYTQwIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNjk2Niw3ICs2OTY2LDYgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbiBcXHQgKiBtZWV0IHdhdGVybWFya3MuXFxuIFxcdCAqL1xcbiBcXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgcGdkYXQsIGksIGhpZ2hlc3Rfem9uZWlkeCkge1xcbi1cXHRcXHRlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW07XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcztcXG4gXFxuIFxcdFxcdGlmIChzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKVxcbkBAIC02OTc0LDIxICs2OTczLDYgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdG1hcmsgPSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpO1xcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGVcXG4tXFx0XFx0ICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLlxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXFxuLVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG4tXFx0XFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcXG4tXFx0XFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxcbi1cXHRcXHQgKiBiYXNlIHBhZ2VzIGZvciBjb21wYWN0aW9uLCB3YWtlIGtjb21wYWN0ZCBcXHUwMDI2IHNsZWVwLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGRlZnJhZ19tb2RlIFxcdTAwMjZcXHUwMDI2IG9yZGVyKVxcbi1cXHRcXHRcXHRpdGVtID0gTlJfRlJFRV9QQUdFU19CTE9DS1M7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0aXRlbSA9IE5SX0ZSRUVfUEFHRVM7XFxuLVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBXaGVuIHRoZXJlIGlzIGEgaGlnaCBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLFxcbiBcXHRcXHQgKiB0aGUgY3VtdWxhdGl2ZSBlcnJvciBmcm9tIHRoZSB2bXN0YXQgcGVyLWNwdSBjYWNoZVxcbkBAIC03MDAxLDkgKzY5ODUsMTIgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbiBcXHRcXHQgKiBjb3VudGVyIHdvbid0IGFjdHVhbGx5IGJlIHBlci1jcHUgY2FjaGVkLiBCdXQga2VlcFxcbiBcXHRcXHQgKiB0aGluZ3Mgc2ltcGxlIGZvciBub3c7IHJldmlzaXQgd2hlbiBzb21lYm9keSBjYXJlcy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgaXRlbSk7XFxuK1xcdFxcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZGVmcmFnX21vZGUgXFx1MDAyNiBvcmRlcik7XFxuIFxcdFxcdGlmICh6b25lLVxcdTAwM2VwZXJjcHVfZHJpZnRfbWFyayBcXHUwMDI2XFx1MDAyNiBmcmVlX3BhZ2VzIFxcdTAwM2Mgem9uZS1cXHUwMDNlcGVyY3B1X2RyaWZ0X21hcmspXFxuLVxcdFxcdFxcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgaXRlbSk7XFxuK1xcdFxcdFxcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSxcXG4rXFx0XFx0XFx0XFx0XFx0ZGVmcmFnX21vZGUgXFx1MDAyNiBvcmRlciA/XFxuK1xcdFxcdFxcdFxcdFxcdE5SX0ZSRUVfUEFHRVNfQkxPQ0tTIDogTlJfRlJFRV9QQUdFUyk7XFxuIFxcbiBcXHRcXHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWFyaywgaGlnaGVzdF96b25laWR4LFxcbiBcXHRcXHRcXHRcXHRcXHQwLCBmcmVlX3BhZ2VzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6MDUuMDI2NzE5NTQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ3NTA5MzkwODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcInpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndha2V1cF9rY29tcGFjdGRcIixcbiAgICBcImtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmY5MTZkZDRiYTA2YmY1YWM3NjhkN2IwNDNiYzVjYzRkNGY5ZTU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDU6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGEwNDk0MTU1MTJjNjcuLjI5YmU3MjU5NzQxNTYgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZV9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG5AQCAtODEsNiArODIsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcbiAjZW5kaWZcbiBcbitzdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xuK1xuK1x0aWYgKG9yZGVycylcbitcdFx0cmV0dXJuIF9fZmZzKG9yZGVycyk7XG4rXHRyZXR1cm4gQ09NUEFDVElPTl9IUEFHRV9PUkRFUjtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuIHtcbiBcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XG5AQCAtODI3LDYgKzgzNywxMiBAQCBzdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXG4gXHQgKi9cbiBcdGlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzZT0gdGFyZ2V0X29yZGVyKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qIFdlIGFyZSBjb21wYWN0aW5nIGZvciBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uICovXG4rXHRpZiAoaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzZT0gY29tcGFjdF9ocGFnZV9vcmRlcigpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuIFx0LypcbiBcdCAqIFdlIGxpbWl0IG1lbW9yeSBjb21wYWN0aW9uIHRvIHBhZ2VibG9ja3MgYW5kIHdvbid0IHRyeVxuIFx0ICogY3JlYXRpbmcgZnJlZSBibG9ja3Mgb2YgbWVtb3J5IHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoYXQuXG5AQCAtMjIwOCwxNiArMjIyNCwxNiBAQCBzdGF0aWMgYm9vbCBrc3dhcGRfaXNfcnVubmluZyhwZ19kYXRhX3QgKnBnZGF0KVxuIFxuIC8qXG4gICogQSB6b25lJ3MgZnJhZ21lbnRhdGlvbiBzY29yZSBpcyB0aGUgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbiB3cnQgdG8gdGhlXG4tICogQ09NUEFDVElPTl9IUEFHRV9PUkRFUi4gSXQgcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS5cbisgKiBjb21wYWN0X2hwYWdlX29yZGVyKCkuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4tXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgQ09NUEFDVElPTl9IUEFHRV9PUkRFUik7XG4rXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgb3JkZXIpO1xuIH1cbiBcbiAvKlxuICAqIEEgd2VpZ2h0ZWQgem9uZSdzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb25cbi0gKiB3cnQgdG8gdGhlIENPTVBBQ1RJT05fSFBBR0VfT1JERVIgc2NhbGVkIGJ5IHRoZSB6b25lJ3Mgc2l6ZS4gSXRcbisgKiB3cnQgdG8gdGhlIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBzY2FsZWQgYnkgdGhlIHpvbmUncyBzaXplLiBJdFxuICAqIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4gICpcbiAgKiBUaGUgc2NhbGluZyBmYWN0b3IgZW5zdXJlcyB0aGF0IHByb2FjdGl2ZSBjb21wYWN0aW9uIGZvY3VzZXMgb24gbGFyZ2VyXG5AQCAtMjIyNSwxMSArMjI0MSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiAgKiBaT05FX0RNQTMyLiBGb3Igc21hbGxlciB6b25lcywgdGhlIHNjb3JlIHZhbHVlIHJlbWFpbnMgY2xvc2UgdG8gemVybyxcbiAgKiBhbmQgdGh1cyBuZXZlciBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZCBmb3IgcHJvYWN0aXZlIGNvbXBhY3Rpb24uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNjb3JlO1xuIFxuLVx0c2NvcmUgPSB6b25lLVx1MDAzZXByZXNlbnRfcGFnZXMgKiBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoem9uZSk7XG4rXHRzY29yZSA9IHpvbmUtXHUwMDNlcHJlc2VudF9wYWdlcyAqIGZyYWdtZW50YXRpb25fc2NvcmVfem9uZSh6b25lLCBvcmRlcik7XG4gXHRyZXR1cm4gZGl2NjRfdWwoc2NvcmUsIHpvbmUtXHUwMDNlem9uZV9wZ2RhdC1cdTAwM2Vub2RlX3ByZXNlbnRfcGFnZXMgKyAxKTtcbiB9XG4gXG5AQCAtMjI0MCw3ICsyMjU2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4gICogdGhlIG5vZGUncyBzY29yZSBmYWxscyBiZWxvdyB0aGUgbG93IHRocmVzaG9sZCwgb3Igb25lIG9mIHRoZSBiYWNrLW9mZlxuICAqIGNvbmRpdGlvbnMgaXMgbWV0LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHVuc2lnbmVkIGludCBzY29yZSA9IDA7XG4gXHRpbnQgem9uZWlkO1xuQEAgLTIyNTEsNyArMjI2Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4gXHRcdHpvbmUgPSBcdTAwMjZwZ2RhdC1cdTAwM2Vub2RlX3pvbmVzW3pvbmVpZF07XG4gXHRcdGlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHNjb3JlICs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lKTtcbitcdFx0c2NvcmUgKz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUsIG9yZGVyKTtcbiBcdH1cbiBcbiBcdHJldHVybiBzY29yZTtcbkBAIC0yMjY5LDEyICsyMjg1LDEzIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayhib29sIGxvdylcbiBzdGF0aWMgYm9vbCBzaG91bGRfcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZShwZ19kYXRhX3QgKnBnZGF0KVxuIHtcbiBcdGludCB3bWFya19oaWdoO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xuIFxuIFx0aWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpO1xuLVx0cmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCkgXHUwMDNlIHdtYXJrX2hpZ2g7XG4rXHRyZXR1cm4gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcikgXHUwMDNlIHdtYXJrX2hpZ2g7XG4gfVxuIFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbkBAIC0yMzA2LDEyICsyMzIzLDEzIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbiBcdGlmIChjYy1cdTAwM2Vwcm9hY3RpdmVfY29tcGFjdGlvbikge1xuIFx0XHRpbnQgc2NvcmUsIHdtYXJrX2xvdztcbiBcdFx0cGdfZGF0YV90ICpwZ2RhdDtcbitcdFx0Ym9vbCBjb3N0bHkgPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuIFxuIFx0XHRwZ2RhdCA9IGNjLVx1MDAzZXpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbi1cdFx0aWYgKGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbitcdFx0aWYgKGNvc3RseSBcdTAwMjZcdTAwMjYga3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKVxuIFx0XHRcdHJldHVybiBDT01QQUNUX1BBUlRJQUxfU0tJUFBFRDtcbiBcbi1cdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtXHUwMDNlem9uZSk7XG4rXHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLVx1MDAzZXpvbmUsIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSk7XG4gXHRcdHdtYXJrX2xvdyA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsodHJ1ZSk7XG4gXG4gXHRcdGlmIChzY29yZSBcdTAwM2Ugd21hcmtfbG93KVxuQEAgLTI1MTAsNiArMjUyOCwzOCBAQCBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qKlxuKyAqIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMgLSBnZXQgZnJlZSBwYWdlcyByZWxldmFudCB0byBhbGxvY2F0aW9uIG9yZGVyXG4rICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXG4rICogQG9yZGVyOiAgICAgIGFsbG9jYXRpb24gb3JkZXJcbisgKiBAdXNlX2Jsb2NrczogaWYgdHJ1ZSwgdXNlIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTXG4rICpcbisgKiBJbiBkZWZyYWdfbW9kZSwgd2F0ZXJtYXJrcyBtdXN0IGJlIG1ldCBpbiB3aG9sZSBibG9ja3MgdG8gYXZvaWRcbisgKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2hcbisgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LlxuKyAqXG4rICogV2hlbiBtVEhQIGFsd2F5cy1lbmFibGVkIG9yZGVycyBhcmUgY29uZmlndXJlZCwgY291bnQgb25seSBmcmVlIHBhZ2VzXG4rICogaW4gYmxvY2tzIFx1MDAzZT0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFBcbisgKiBhbGxvY2F0aW9ucy5cbisgKi9cbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0Ym9vbCB1c2VfYmxvY2tzKVxuK3tcbitcdGlmICh1c2VfYmxvY2tzKVxuK1x0XHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTtcbitcbitcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFx1MDAyNlx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcbitcbitcdFx0Zm9yIChpbnQgbyA9IG9yZGVyOyBvIFx1MDAzYyBOUl9QQUdFX09SREVSUzsgbysrKVxuK1x0XHRcdGZyZWVfcGFnZXMgKz0gem9uZS1cdTAwM2VmcmVlX2FyZWFbb10ubnJfZnJlZSBcdTAwM2NcdTAwM2MgbztcbitcdFx0cmV0dXJuIGZyZWVfcGFnZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xuK31cbitcbiAvKlxuICAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci5cbiAgKiBSZXR1cm4gQ09NUEFDVF9TVUNDRVNTIGlmIGFsbG9jYXRpb24gZm9yIHRhcmdldCBvcmRlciBjYW4gYmUgYWxyZWFkeVxuQEAgLTI1MjUsMTAgKzI1NzUsOCBAQCBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XG4gXG4tXHRpZiAoa2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSlcbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XG4tXHRlbHNlXG4tXHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4rXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcbitcdFx0XHRcdFx0ICAgICAgIGtjb21wYWN0ZCBcdTAwMjZcdTAwMjYgZGVmcmFnX21vZGUpO1xuIFxuIFx0d2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xuIFx0aWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LFxuQEAgLTMyMzgsMTAgKzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdFx0dGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcbiBcdFx0aWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkge1xuIFx0XHRcdHVuc2lnbmVkIGludCBwcmV2X3Njb3JlLCBzY29yZTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wYWN0X2hwYWdlX29yZGVyKCk7XG4gXG4tXHRcdFx0cHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7XG4rXHRcdFx0cHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpO1xuIFx0XHRcdGNvbXBhY3Rfbm9kZShwZ2RhdCwgdHJ1ZSk7XG4tXHRcdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpO1xuK1x0XHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBEZWZlciBwcm9hY3RpdmUgY29tcGFjdGlvbiBpZiB0aGUgZnJhZ21lbnRhdGlvblxuIFx0XHRcdCAqIHNjb3JlIGRpZCBub3QgZ28gZG93biBpLmUuIG5vIHByb2dyZXNzIG1hZGUuXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjE0YmI5NTQzODc5YjQgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTY1NCw0ICsxNjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0Ym9vbCB1c2VfYmxvY2tzKTtcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmE0MTlhMmMyZmNhNDAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC02OTY2LDcgKzY5NjYsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHQgKiBtZWV0IHdhdGVybWFya3MuXG4gXHQgKi9cbiBcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgaSwgaGlnaGVzdF96b25laWR4KSB7XG4tXHRcdGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFxuIFx0XHRpZiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKVxuQEAgLTY5NzQsMjEgKzY5NzMsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdGVsc2VcbiBcdFx0XHRtYXJrID0gaGlnaF93bWFya19wYWdlcyh6b25lKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGVcbi1cdFx0ICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLlxuLVx0XHQgKlxuLVx0XHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXG4tXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3Ncbi1cdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbi1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLVx0XHQgKiBiYXNlIHBhZ2VzIGZvciBjb21wYWN0aW9uLCB3YWtlIGtjb21wYWN0ZCBcdTAwMjYgc2xlZXAuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZGVmcmFnX21vZGUgXHUwMDI2XHUwMDI2IG9yZGVyKVxuLVx0XHRcdGl0ZW0gPSBOUl9GUkVFX1BBR0VTX0JMT0NLUztcbi1cdFx0ZWxzZVxuLVx0XHRcdGl0ZW0gPSBOUl9GUkVFX1BBR0VTO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIHRoZXJlIGlzIGEgaGlnaCBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLFxuIFx0XHQgKiB0aGUgY3VtdWxhdGl2ZSBlcnJvciBmcm9tIHRoZSB2bXN0YXQgcGVyLWNwdSBjYWNoZVxuQEAgLTcwMDEsOSArNjk4NSwxMiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdCAqIGNvdW50ZXIgd29uJ3QgYWN0dWFsbHkgYmUgcGVyLWNwdSBjYWNoZWQuIEJ1dCBrZWVwXG4gXHRcdCAqIHRoaW5ncyBzaW1wbGUgZm9yIG5vdzsgcmV2aXNpdCB3aGVuIHNvbWVib2R5IGNhcmVzLlxuIFx0XHQgKi9cbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBpdGVtKTtcbitcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcik7XG4gXHRcdGlmICh6b25lLVx1MDAzZXBlcmNwdV9kcmlmdF9tYXJrIFx1MDAyNlx1MDAyNiBmcmVlX3BhZ2VzIFx1MDAzYyB6b25lLVx1MDAzZXBlcmNwdV9kcmlmdF9tYXJrKVxuLVx0XHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgaXRlbSk7XG4rXHRcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLFxuK1x0XHRcdFx0XHRkZWZyYWdfbW9kZSBcdTAwMjYgb3JkZXIgP1xuK1x0XHRcdFx0XHROUl9GUkVFX1BBR0VTX0JMT0NLUyA6IE5SX0ZSRUVfUEFHRVMpO1xuIFxuIFx0XHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWFyaywgaGlnaGVzdF96b25laWR4LFxuIFx0XHRcdFx0XHQwLCBmcmVlX3BhZ2VzKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjA1LjAyNjcyMDU0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2ODk5OTkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGludHJvZHVjaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB3b3J0aHkgb2YgZnV6emluZyBhdHRlbnRpb24uIFRoZSBtb2RpZmljYXRpb25zIHRvIGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaW50ZXJuYWwuaGAsIGFuZCBgbW0vdm1zY2FuLmNgIGFyZSBhIGNsZWFyIHNpZ25hbC4gU3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2luZyBgY29tcGFjdF9ocGFnZV9vcmRlcigpYCB3aXRoIGl0cyB1c2Ugb2YgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCBmb3IgY29tcGFjdGlvbiBvcmRlciBzZWxlY3Rpb24gaXMgYSBrZXkgYXJlYS4gVGhlIGNoYW5nZXMgaW1wYWN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcmAsIGBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVgLCBgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkYCwgZXRjLiwgYWxsIHBvaW50IHRvIGZ1bmRhbWVudGFsIHNoaWZ0cyBpbiBob3cgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIFZNIHNjYW5uaW5nIGFyZSBoYW5kbGVkIGluIHRoZSBrZXJuZWwuIFRoZSBmYWN0IHRoYXQgdGhpcyBpcyByZWFjaGFibGUgZXZlbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcmVpbmZvcmNlcyB0aGUgdXJnZW5jeSBvZiBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBwcmltZSBmdXp6aW5nIHRhcmdldHMuIGBjb21wYWN0X2hwYWdlX29yZGVyYCBpcyBpbmxpbmUsIHNvIHdoaWxlIGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLCBpdCdzIGxlc3MgZGlyZWN0IGFzIGEgZnV6emluZyBlbnRyeSBwb2ludC4gTG9va2luZyBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIEkgc2VlOlxuXG4qICAgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgOiBUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUsIGdpdmVuIGl0cyBpbnRyb2R1Y3Rpb24gYW5kIHVzYWdlLlxuKiAgIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmA6IFRoaXMgbG9va3MgcHJvbWlzaW5nIHRvbywgYnV0IHdhaXQuLi4gaXQncyBjYWxsZWQgZnJvbSBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgKG5vbi1zdGF0aWMpIGFuZCBgY29tcGFjdF96b25lYCAoc3RhdGljKS4gVGhhdCBtZWFucyBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgaXMgYSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcsIGFuZCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBjb21wYWN0X3pvbmVgIHRvby5cbiogICBga2NvbXBhY3RkYDogVGhpcyBpcyBhIGtlcm5lbCB0aHJlYWQsIHNvIGl0J3MgYSBnb29kIHRhcmdldCBmb3IgY29uY3VycmVudCBmdXp6aW5nLlxuXG5JJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBtbS9jb21wYWN0aW9uLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIGZvY3VzaW5nIG9uIHRoZSBleHBvcnRlZCAobm9uLXN0YXRpYykgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBpbnRlcmFjdCB3aXRoIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgYW5kIHRoZSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBnb2FsIGlzIHRvIG1heGltaXplIHRoZSBjaGFuY2Ugb2YgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBvciBvdGhlciBiZWhhdmlvcmFsIGFub21hbGllcyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjEyLjcxNjcyMTU2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ5MDczMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2Etel9dKyApK3pvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9MjQ5Nz1ib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU0NC0gKi9cXG5tbS9jb21wYWN0aW9uLmM6MjU0NTp1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxubW0vY29tcGFjdGlvbi5jLTI1NDYtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vaW50ZXJuYWwuaD0xNjM0PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTE2NTYtXFxubW0vaW50ZXJuYWwuaDoxNjU3OnVuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9pbnRlcm5hbC5oLTE2NTgtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNToyMC40NjU4MDEzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDI2NTc2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBjb250ZXh0OlxuXG4qKkFuYWx5emluZyB0aGUgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCBWYXJpYWJsZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgLiBHaXZlbiB3aGF0IEkga25vdyBhYm91dCB0aGlzIHN5c3RlbSwgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6IHdoYXQgaXMgdGhlIGNvbnRleHQgb2YgdGhpcyB2YXJpYWJsZT8gSXMgaXQgYSBjb25maWd1cmF0aW9uIHNldHRpbmcsIGEgZmxhZyBpbiBhIGRhdGEgbW9kZWwsIG9yIHBlcmhhcHMgYSBjb25zdGFudCB1c2VkIGluIGEgc3BlY2lmaWMgY2FsY3VsYXRpb24gb3IgcnVsZT8gVGhlIFwiaHVnZVwiIHBhcnQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgd2hpbGUgXCJhbm9uXCIgaW1wbGllcyB3ZSdyZSBkZWFsaW5nIHdpdGggYW5vbnltb3VzIG9yZGVycywgbGlrZWx5IHBvaW50aW5nIHRvIHNvbWUgaW50ZXJlc3RpbmcgZGVzaWduIGRlY2lzaW9ucyBhbmQgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkLCBhbmQgd2hhdCBpdCBjb250cm9scy4gSSdsbCBuZWVkIHRvIGtub3c6XG4qICAgV2hhdCBkb2VzIFwiaHVnZVwiIGFjdHVhbGx5IG1lYW4gaW4gdGhpcyBzeXN0ZW0/IElzIGl0IGJhc2VkIG9uIG9yZGVyIHNpemUsIHZhbHVlLCBvciBzb21lIG90aGVyIG1ldHJpYz9cbiogICBXaHkgYXJlIHdlIGFsd2F5cyBkZWFsaW5nIHdpdGggaXQsIHdoYXQncyB0aGUgbG9naWMgYmVoaW5kIHRoZSBcImFsd2F5c1wiIHBhcnQ/XG4qICAgQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNpZGUgZWZmZWN0cywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHNlY3VyaXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzP1xuKiAgIEhvdyBkb2VzIHRoaXMgdmFyaWFibGUgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZC9vciBvdGhlciBjb25maWd1cmF0aW9ucz8gSSBoYXZlIHRvIGxvb2sgYXQgdGhlIHN5c3RlbSBvdmVyYWxsLCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgdG8gYmUgYWJsZSB0byBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucyBhbmQgcHJlZGljdGlvbnMuXG5JIG5lZWQgdG8ga25vdyAqZXZlcnl0aGluZyogYmVmb3JlIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGlzIGEgZ29vZCBvciBhIGJhZCB0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjI0LjA2ODQ2MDg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODQxNDA3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9hbm9uX29yZGVyc19hbHdheXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTg1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE4NjpleHRlcm4gdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cztcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODctZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzIwPXVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzI5LVxcdGlmICh0eXBlICE9IFRWQV9GT1JDRURfQ09MTEFQU0UgXFx1MDAyNlxcdTAwMjYgdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzMwOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzMxLVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTg1PXN0YXRpYyBpbmxpbmUgaW50IGNvbXBhY3RfaHBhZ2Vfb3JkZXIodm9pZClcXG5tbS9jb21wYWN0aW9uLmMtODYte1xcbm1tL2NvbXBhY3Rpb24uYzo4NzpcXHR1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XFxubW0vY29tcGFjdGlvbi5jLTg4LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTgyOT1zdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtODQyLVxcdGlmIChpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNlPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9jb21wYWN0aW9uLmM6ODQzOlxcdCAgICBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpKVxcbm1tL2NvbXBhY3Rpb24uYy04NDQtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MjU0NT11bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU1MS1cXG5tbS9jb21wYWN0aW9uLmM6MjU1MjpcXHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcXHUwMDI2XFx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcXG5tbS9jb21wYWN0aW9uLmMtMjU1My1cXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz04Nz1zdGF0aWMgc3RydWN0IHNocmlua2VyICpodWdlX3plcm9fZm9saW9fc2hyaW5rZXI7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTg5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6OTA6dW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xcbm1tL2h1Z2VfbWVtb3J5LmMtOTEtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX21hZHZpc2UgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjQwPXN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02NDUtXFxubW0vaHVnZV9tZW1vcnkuYzo2NDY6XFx0aWYgKHRlc3RfYml0KG9yZGVyLCBcXHUwMDI2aHVnZV9hbm9uX29yZGVyc19hbHdheXMpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQ3LVxcdFxcdG91dHB1dCA9IFxcXCJbYWx3YXlzXSBpbmhlcml0IG1hZHZpc2UgbmV2ZXJcXFwiO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz02NTg9c3RhdGljIGJvb2wgc2V0X2Fub25fZW5hYmxlZF9tb2RlKGludCBvcmRlciwgZW51bSBhbm9uX2VuYWJsZWRfbW9kZSBtb2RlKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02NjAtXFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgKmVuYWJsZWRfb3JkZXJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYzo2NjE6XFx0XFx0XFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNjYyLVxcdFxcdFxcdTAwMjZodWdlX2Fub25fb3JkZXJzX2luaGVyaXQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTExMzY9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdGhwX2Fub24oY2hhciAqc3RyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMTQ3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTE0ODpcXHRhbHdheXMgPSBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cztcXG5tbS9odWdlX21lbW9yeS5jLTExNDktXFx0bWFkdmlzZSA9IGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwOC1cXG5tbS9odWdlX21lbW9yeS5jOjEyMDk6XFx0aHVnZV9hbm9uX29yZGVyc19hbHdheXMgPSBhbHdheXM7XFxubW0vaHVnZV9tZW1vcnkuYy0xMjEwLVxcdGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSA9IG1hZHZpc2U7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTAyPXN0YXRpYyBpbmxpbmUgYm9vbCBhbm9uX2hwYWdlX2VuYWJsZWQodm9pZClcXG5tbS9raHVnZXBhZ2VkLmMtNTAzLXtcXG5tbS9raHVnZXBhZ2VkLmM6NTA0OlxcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpKVxcbm1tL2todWdlcGFnZWQuYy01MDUtXFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjI1Ljk1MjYwNzQ5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTA0NDQ2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0aS1TaXplIFRIUCBNZW1vcnkgQ29tcGFjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB3ZSBoYW5kbGUgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFsbG9jYXRpb24gZHVyaW5nIGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBvcGVyYXRpb25zLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzZXMgaW4gYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCwgYHBnZGF0X2JhbGFuY2VkYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYGtjb21wYWN0ZGAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBvcHRpbWl6aW5nIHRoZSBsYXlvdXQgb2YgbWVtb3J5IHNvIGFsbG9jYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBmYXN0ZXIuXG5cblRoZSBrZXkgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGUgaGVyZSBpcywgb2J2aW91c2x5LCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGJhc2VsaW5lIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGV2ZW4gYmUgcmVsZXZhbnQuIEdpdmVuIEknbSB3ZWxsLXZlcnNlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgSSdsbCBuZWVkIHRvIGp1bXAgaW50byBgbW0vY29tcGFjdGlvbi5jYCBhbmQgZGlnIGludG8gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWx0ZXJlZCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGUgbmV3IGxvZ2ljLiBOZWVkIHRvIHNlZSBob3cgdGhleSd2ZSBjaGFuZ2VkIGFuZCB3aGF0IHRyYWRlLW9mZnMgd2VyZSBjb25zaWRlcmVkLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBzdWJ0bGV0aWVzIG9mIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCAtIHdoYXQgZXhhY3RseSBkb2VzIGl0IGNhcHR1cmUsIGFuZCBob3cgZG9lcyBpdCByZWZpbmUgb3VyIHVuZGVyc3RhbmRpbmcgb2YgZnJlZSBtZW1vcnkgZm9yIFRIUCBwdXJwb3Nlcz8gVGhpcyB3aWxsIHRha2UgYSBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTozMC4yNjMwNTQyNDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNjQyNDU5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ09NUEFDVElPTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9MTExPWNvbXBhY3RfbWVtb3J5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtMTEzLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdDoxMTQ6QXZhaWxhYmxlIG9ubHkgd2hlbiBDT05GSUdfQ09NUEFDVElPTiBpcyBzZXQuIFdoZW4gMSBpcyB3cml0dGVuIHRvIHRoZSBmaWxlLFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC0xMTUtYWxsIHpvbmVzIGFyZSBjb21wYWN0ZWQgc3VjaCB0aGF0IGZyZWUgbWVtb3J5IGlzIGF2YWlsYWJsZSBpbiBjb250aWd1b3VzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9MTQyPWNvbXBhY3RfdW5ldmljdGFibGVfYWxsb3dlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTE0NC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q6MTQ1OkF2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0NPTVBBQ1RJT04gaXMgc2V0LiBXaGVuIHNldCB0byAxLCBjb21wYWN0aW9uIGlzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTE0Ni1hbGxvd2VkIHRvIGV4YW1pbmUgdGhlIHVuZXZpY3RhYmxlIGxydSAobWxvY2tlZCBwYWdlcykgZm9yIHBhZ2VzIHRvIGNvbXBhY3QuXFxuLS1cXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaD0yNzQ9ZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdO1xcbmFyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTI3NS1cXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaDoyNzY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMjc3LSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSXFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWc9Mjc9Q09ORklHX1BSRUVNUFQ9eVxcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAxX2RlZmNvbmZpZzoyODojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWctMjktQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19kZWZjb25maWc9MjY9Q09ORklHX1BSRUVNUFQ9eVxcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX2RlZmNvbmZpZzoyNzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19kZWZjb25maWctMjgtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnPTI2PUNPTkZJR19QUkVFTVBUPXlcXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnOjI3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX3NtcF9kZWZjb25maWctMjgtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfZGVmY29uZmlnPTE4PUNPTkZJR19NT0RVTEVTPXlcXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfZGVmY29uZmlnLTE5LSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfZGVmY29uZmlnOjIwOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19kZWZjb25maWctMjEtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfc21wX2RlZmNvbmZpZz0yMT1DT05GSUdfTU9EVUxFUz15XFxuYXJjaC9hcmMvY29uZmlncy9oYXBzX2hzX3NtcF9kZWZjb25maWctMjItIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19zbXBfZGVmY29uZmlnOjIzOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19zbXBfZGVmY29uZmlnLTI0LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9hcmMvY29uZmlncy9oc2RrX2RlZmNvbmZpZz0yND1DT05GSUdfUFJFRU1QVD15XFxuYXJjaC9hcmMvY29uZmlncy9oc2RrX2RlZmNvbmZpZzoyNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL2hzZGtfZGVmY29uZmlnLTI2LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9hcmMvY29uZmlncy9uc2ltXzcwMF9kZWZjb25maWc9MjI9Q09ORklHX01PRFVMRVM9eVxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbV83MDBfZGVmY29uZmlnLTIzLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL25zaW1fNzAwX2RlZmNvbmZpZzoyNDojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL25zaW1fNzAwX2RlZmNvbmZpZy0yNS1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbW9zY2lfZGVmY29uZmlnPTIyPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVxcXCJuc2ltb3NjaVxcXCJcXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2RlZmNvbmZpZzoyMzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2RlZmNvbmZpZy0yNC1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbW9zY2lfaHNfZGVmY29uZmlnPTIyPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVxcXCJuc2ltb3NjaV9oc1xcXCJcXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZzoyMzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZy0yNC1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbW9zY2lfaHNfc21wX2RlZmNvbmZpZz0yMD1DT05GSUdfUFJFRU1QVD15XFxuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19zbXBfZGVmY29uZmlnOjIxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbW9zY2lfaHNfc21wX2RlZmNvbmZpZy0yMi1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJjL2NvbmZpZ3MvdGIxMHhfZGVmY29uZmlnPTMwPUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15XFxuYXJjaC9hcmMvY29uZmlncy90YjEweF9kZWZjb25maWc6MzE6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9hcmMvY29uZmlncy90YjEweF9kZWZjb25maWctMzItQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWc9MzY9Q09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORUQ9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c0X2RlZmNvbmZpZy0zNy0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzRfZGVmY29uZmlnLTM5LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnPTQzPUNPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEPXlcXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNV9kZWZjb25maWctNDQtIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0XFxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnOjQ1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZy00Ni1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnPTI1PUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZzoyNjojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZy0yNy1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZz00Nz1DT05GSUdfU0xVQl9USU5ZPXlcXG5hcmNoL2FybS9jb25maWdzL3B4YV9kZWZjb25maWc6NDg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9hcm0vY29uZmlncy9weGFfZGVmY29uZmlnLTQ5LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9zYW1hN19kZWZjb25maWc9Mzk9Q09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZy00Mi0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZzo0MzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZy00NC1DT05GSUdfQ01BPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZz00ND1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZzo0NTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctNDYtQ09ORklHX0RNQVBPT0xfVEVTVD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnPTQwPUNPTkZJR19CSU5GTVRfTUlTQz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo0MTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnLTQyLUNPTkZJR19ETUFQT09MX1RFU1Q9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnPTQ3PUNPTkZJR19CSU5GTVRfTUlTQz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnOjQ4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZy00OS1DT05GSUdfRE1BUE9PTF9URVNUPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZz0zNz1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZzozODojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWctMzktQ09ORklHX0RNQVBPT0xfVEVTVD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9Mzk9Q09ORklHX0JJTkZNVF9NSVNDPW1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NDA6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnLTQxLUNPTkZJR19ETUFQT09MX1RFU1Q9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0zOD1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6Mzk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy00MC1DT05GSUdfRE1BUE9PTF9URVNUPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZz01OD1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZzo1OTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWctNjAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz0zNj1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjM3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnLTM4LUNPTkZJR19ETUFQT09MX1RFU1Q9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc9Mzc9Q09ORklHX0JJTkZNVF9NSVNDPW1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZzozODojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZy0zOS1DT05GSUdfRE1BUE9PTF9URVNUPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc9Mzg9Q09ORklHX0JJTkZNVF9NSVNDPW1cXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnOjM5OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWctNDAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz0zND1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjM1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnLTM2LUNPTkZJR19VU0VSRkFVTFRGRD15XFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9MzQ9Q09ORklHX0JJTkZNVF9NSVNDPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc6MzU6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnLTM2LUNPTkZJR19ETUFQT09MX1RFU1Q9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnPTIzPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWctMjQtIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2F0aDI1X2RlZmNvbmZpZzoyNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWctMjYtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZz0yOD1DT05GSUdfTU9EVUxFUz15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy0zMC0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZzozMTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy0zMi1DT05GSUdfQ01BPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnPTI3PUNPTkZJR19NT0RVTEVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9jdTEwMDAtbmVvX2RlZmNvbmZpZy0yOC0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWc6Mjk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWctMzAtQ09ORklHX0NNQT15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9jdTE4MzAtbmVvX2RlZmNvbmZpZz0yNz1DT05GSUdfTU9EVUxFUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWctMjgtIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTgzMC1uZW9fZGVmY29uZmlnOjI5OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTgzMC1uZW9fZGVmY29uZmlnLTMwLUNPTkZJR19DTUE9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWc9MzA9Q09ORklHX01JUFNfQ01ETElORV9GUk9NX0JPT1RMT0FERVI9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWctMzItIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL29tZWdhMnBfZGVmY29uZmlnOjMzOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL29tZWdhMnBfZGVmY29uZmlnLTM0LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZz0yMz1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXlcXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTI0LSMgQ09ORklHX0NPUkVEVU1QIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnOjI1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWctMjYtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy92b2NvcmUyX2RlZmNvbmZpZz0zMD1DT05GSUdfTUlQU19DTURMSU5FX0ZST01fQk9PVExPQURFUj15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy92b2NvcmUyX2RlZmNvbmZpZy0zMi0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWctMzQtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZz0yNT1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXlcXG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZy0yNi0jIENPTkZJR19DT1JFRFVNUCBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6Mjc6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWctMjgtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnPTM2PUNPTkZJR19CSU5GTVRfTUlTQz1tXFxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZy0zNy0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcXG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnOjM4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvcGFyaXNjL2NvbmZpZ3MvZ2VuZXJpYy02NGJpdF9kZWZjb25maWctMzktQ09ORklHX01FTU9SWV9GQUlMVVJFPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9ha2Vib25vX2RlZmNvbmZpZz0xOT1DT05GSUdfSVJRX0FMTF9DUFVTPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYWtlYm9ub19kZWZjb25maWc6MjA6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnLTIxLSMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldFxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWljcm93YXR0X2RlZmNvbmZpZz0zMD1DT05GSUdfUFBDXzRLX1BBR0VTPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21pY3Jvd2F0dF9kZWZjb25maWctMzMtIyBDT05GSUdfQ09SRURVTVAgaXMgbm90IHNldFxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21pY3Jvd2F0dF9kZWZjb25maWc6MzQ6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWljcm93YXR0X2RlZmNvbmZpZy0zNS0jIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldFxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnPTIzPUNPTkZJR19DTURMSU5FPVxcXCJjb25zb2xlPXR0eVMwLDk2MDAgaXA9ZGhjcCByb290PS9kZXYvbmZzXFxcIlxcbmFyY2gvcG93ZXJwYy9jb25maWdzL212bWU1MTAwX2RlZmNvbmZpZy0yNC0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnOjI1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvcG93ZXJwYy9jb25maWdzL212bWU1MTAwX2RlZmNvbmZpZy0yNi1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWc9MzU9Q09ORklHX0JJTkZNVF9NSVNDPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWctMzctIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAgaXMgbm90IHNldFxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZy0zOS1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3NraXJvb3RfZGVmY29uZmlnPTU2PUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2tpcm9vdF9kZWZjb25maWctNTgtIyBDT05GSUdfTVFfSU9TQ0hFRF9LWUJFUiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2tpcm9vdF9kZWZjb25maWc6NTk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2tpcm9vdF9kZWZjb25maWctNjAtIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvdW0vY29uZmlncy9pMzg2X2RlZmNvbmZpZzoxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvdW0vY29uZmlncy9pMzg2X2RlZmNvbmZpZy0yLUNPTkZJR19CSU5GTVRfTUlTQz1tXFxuLS1cXG5hcmNoL3VtL2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZzoxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvdW0vY29uZmlncy94ODZfNjRfZGVmY29uZmlnLTItQ09ORklHX0JJTkZNVF9NSVNDPW1cXG4tLVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnPTMzPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVxcXCJrYzcwNVxcXCJcXG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZzozNDojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZy0zNS0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL2NhZGVuY2VfY3NwX2RlZmNvbmZpZz0zNz1DT05GSUdfQlVJTFRJTl9EVEJfTkFNRT1cXFwiY3NwXFxcIlxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvY2FkZW5jZV9jc3BfZGVmY29uZmlnOjM4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvY2FkZW5jZV9jc3BfZGVmY29uZmlnLTM5LUNPTkZJR19YVEZQR0FfTENEPXlcXG4tLVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc9MzI9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XFxcImtjNzA1XFxcIlxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC94dGVuc2EvY29uZmlncy9nZW5lcmljX2tjNzA1X2RlZmNvbmZpZy0zNC0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL3NtcF9seDIwMF9kZWZjb25maWc9MzY9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XFxcImx4MjAwbXhcXFwiXFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnOjM3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gveHRlbnNhL2NvbmZpZ3Mvc21wX2x4MjAwX2RlZmNvbmZpZy0zOC0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnPTMxPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnLTMyLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnOjMzOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvdmlydF9kZWZjb25maWctMzQtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc9MzI9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XFxcImtjNzA1XFxcIlxcbi0tXFxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnLTM0LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc6MzU6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnLTM2LUNPTkZJR19ORVQ9eVxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9ODQ9c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTg4LVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjg5OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTkwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtldXBfa2NvbXBhY3RkKHBnX2RhdGFfdCAqcGdkYXQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzQtXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTM1OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEzNi1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMzc9c3RydWN0IG5vZGU7XFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTM4OiNpZiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzktZXh0ZXJuIGludCBjb21wYWN0aW9uX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wYWN0aW9uX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTE1MS19XFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTUyOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiBcXHUwMDI2XFx1MDAyNiBDT05GSUdfU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHX05VTUEgKi9cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xNTMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTM4MT1zdGF0aWMgaW5saW5lIGJvb2wgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfdCBnZnBfbWFzaylcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTM4Mi17XFxuaW5jbHVkZS9saW51eC9nZnAuaDozODM6XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFxcdTAwMjZcXHUwMDI2IChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTM4NC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTk3OT1zdHJ1Y3Qgem9uZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTExMjctXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTI4OiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTEyOS1cXHQvKiBwZm4gd2hlcmUgY29tcGFjdGlvbiBmcmVlIHNjYW5uZXIgc2hvdWxkIHN0YXJ0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTExMzYtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTM3OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTEzOC1cXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTQ4LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTE0OTojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTExNTAtXFx0LyogU2V0IHRvIHRydWUgd2hlbiB0aGUgUEdfbWlncmF0ZV9za2lwIGJpdHMgc2hvdWxkIGJlIGNsZWFyZWQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTQ3OD10eXBlZGVmIHN0cnVjdCBwZ2xpc3RfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1MzctXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTM4OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTUzOS1cXHRpbnQga2NvbXBhY3RkX21heF9vcmRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmg9OTA9dm9pZCBjbGVhcl9wZm5ibG9ja19iaXQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaC05My0vKiBEZWNsYXJhdGlvbnMgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgZmxhZ3MuIFNlZSBtbS9wYWdlX2FsbG9jLmMgKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oOjk0OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmgtOTUtI2RlZmluZSBnZXRfcGFnZWJsb2NrX3NraXAocGFnZSkgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaD0xMDk9c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlYmxvY2tfc2tpcChzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmgtMTExLX1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oOjExMjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oLTExMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMzEyLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMzEzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMzE0LVxcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2xcXHRcXHQqY2FwdHVyZV9jb250cm9sO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg9MzQ9ZW51bSB2bV9ldmVudF9pdGVtIHsgUEdQR0lOLCBQR1BHT1VULCBQU1dQSU4sIFBTV1BPVVQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC02NC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaDo2NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC02Ni1cXHRcXHRDT01QQUNUTUlHUkFURV9TQ0FOTkVELCBDT01QQUNURlJFRV9TQ0FOTkVELFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oPTY3PURFRklORV9FVkVOVChtbV9jb21wYWN0aW9uX2lzb2xhdGVfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25fZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC03Ny1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6Nzg6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTc5LVRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fbWlncmF0ZXBhZ2VzLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oPTIzNT1JRl9IQVZFX1ZNX0RST1BQQUJMRShWTV9EUk9QUEFCTEUsXFx0XFxcImRyb3BwYWJsZVxcXCJcXHQpXFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oLTI0Mi1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MjQzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0yNDQtI2RlZmluZSBDT01QQUNUSU9OX1NUQVRVU1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oPTE2Nj1UUkFDRV9FVkVOVChza2lwX3Rhc2tfcmVhcGluZyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTE4MS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9vb20uaDoxODI6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmgtMTgzLVRSQUNFX0VWRU5UKGNvbXBhY3RfcmV0cnksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9vb20uaC0yMTgtKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9vb20uaDoyMTk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmgtMjIwLSNlbmRpZlxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz00NTYzPXN0YXRpYyB2b2lkIF9fc2NoZWRfZm9yayh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYwOC1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQ2MDk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEwLVxcdHAtXFx1MDAzZWNhcHR1cmVfY29udHJvbCA9IE5VTEw7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzAtXFxubW0vY29tcGFjdGlvbi5jOjMxOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0zMi0vKlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTYxPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTYzLVxcbm1tL2NvbXBhY3Rpb24uYzo2NDojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5tbS9jb21wYWN0aW9uLmMtNjUtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTAyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2VfZnJlZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVwYWdlcylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMjYtXFxubW0vY29tcGFjdGlvbi5jOjEyNzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMTI4LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTUwMT1zdGF0aWMgYm9vbCB0ZXN0X2FuZF9zZXRfc2tpcChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNTA0LX1cXG5tbS9jb21wYWN0aW9uLmM6NTA1OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL2NvbXBhY3Rpb24uYy01MDYtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTM1Mz1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTM4OC1cXG5tbS9jb21wYWN0aW9uLmM6MTM4OTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xcbm1tL2NvbXBhY3Rpb24uYzoxMzkwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0xMzkxLVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTM0MTA9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxcbm1tL2NvbXBhY3Rpb24uYy0zNDExLVxcbm1tL2NvbXBhY3Rpb24uYzozNDEyOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbi0tXFxubW0vaW50ZXJuYWwuaD04MDI9c3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcXG4tLVxcbm1tL2ludGVybmFsLmgtODEwLVxcbm1tL2ludGVybmFsLmg6ODExOiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxcbm1tL2ludGVybmFsLmgtODEyLVxcbi0tXFxubW0vaW50ZXJuYWwuaD04ODQ9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTg4Ni1cXG5tbS9pbnRlcm5hbC5oOjg4NzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xcbm1tL2ludGVybmFsLmgtODg4LVxcbi0tXFxubW0vbW1faW5pdC5jPTEzMzE9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMzczLVxcbm1tL21tX2luaXQuYzoxMzc0OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL21tX2luaXQuYy0xMzc1LXN0YXRpYyB2b2lkIHBnZGF0X2luaXRfa2NvbXBhY3RkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS9tbV9pbml0Lmg9Mzc9dm9pZCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSxcXG4tLVxcbm1tL21tX2luaXQuaC00Mi1cXG5tbS9tbV9pbml0Lmg6NDM6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXFxubW0vbW1faW5pdC5oLTQ0LS8qIEZyZWUgd2hvbGUgcGFnZWJsb2NrIGFuZCBzZXQgaXRzIG1pZ3JhdGlvbiB0eXBlIHRvIE1JR1JBVEVfQ01BLiAqL1xcbi0tXFxubW0vb29tX2tpbGwuYz00NTY9c3RhdGljIHZvaWQgZHVtcF9oZWFkZXIoc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4tLVxcbm1tL29vbV9raWxsLmMtNDYwLVxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX3Njb3JlX2Fkaik7XFxubW0vb29tX2tpbGwuYzo0NjE6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSBcXHUwMDI2XFx1MDAyNiBvYy1cXHUwMDNlb3JkZXIpXFxubW0vb29tX2tpbGwuYy00NjItXFx0XFx0cHJfd2FybihcXFwiQ09NUEFDVElPTiBpcyBkaXNhYmxlZCEhIVxcXFxuXFxcIik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYnVkZHlfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTktXFxubW0vcGFnZV9hbGxvYy5jOjcyMDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9wYWdlX2FsbG9jLmMtNzIxLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc2OT1jb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzczLX1cXG5tbS9wYWdlX2FsbG9jLmM6Nzc0OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL3BhZ2VfYWxsb2MuYy03NzUtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDA0ND1fX2FsbG9jX3BhZ2VzX21heV9vb20oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00MTM1LVxcbm1tL3BhZ2VfYWxsb2MuYzo0MTM2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3BhZ2VfYWxsb2MuYy00MTM3LS8qIFRyeSBtZW1vcnkgY29tcGFjdGlvbiBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBiZWZvcmUgcmVjbGFpbSAqL1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQzMjU9c2hvdWxkX2NvbXBhY3RfcmV0cnkoZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQzNTAtfVxcbm1tL3BhZ2VfYWxsb2MuYzo0MzUxOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL3BhZ2VfYWxsb2MuYy00MzUyLVxcbi0tXFxubW0vdm1zY2FuLmM9NjQxOT1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02NDU5LVxcdFxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY0NjA6XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNjQ2MS1cXHRcXHRcXHQgICAgc2MtXFx1MDAzZW9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc3RhdC5jPTEwNTQ9dm9pZCBtZW1tYXBfcGFnZXNfYWRkKGxvbmcgZGVsdGEpXFxuLS1cXG5tbS92bXN0YXQuYy0xMDU4LVxcbm1tL3Ztc3RhdC5jOjEwNTk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vdm1zdGF0LmMtMTA2MC1cXG4tLVxcbm1tL3Ztc3RhdC5jPTExOTk9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuLS1cXG5tbS92bXN0YXQuYy0xMzg0LSNlbmRpZlxcbm1tL3Ztc3RhdC5jOjEzODU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vdm1zdGF0LmMtMTM4Ni1cXHRbSShDT01QQUNUTUlHUkFURV9TQ0FOTkVEKV1cXHRcXHQ9IFxcXCJjb21wYWN0X21pZ3JhdGVfc2Nhbm5lZFxcXCIsXFxuLS1cXG5tbS92bXN0YXQuYy0xNTE0LVxcbm1tL3Ztc3RhdC5jOjE1MTU6I2lmIChkZWZpbmVkKENPTkZJR19ERUJVR19GUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTikpIHx8IFxcXFxcXG5tbS92bXN0YXQuYy0xNTE2LSAgICAgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG4tLVxcbm1tL3Ztc3RhdC5jPTIyODY9dm9pZCBfX2luaXQgaW5pdF9tbV9pbnRlcm5hbHModm9pZClcXG4tLVxcbm1tL3Ztc3RhdC5jLTIzMTktXFxubW0vdm1zdGF0LmM6MjMyMDojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTVBBQ1RJT04pXFxubW0vdm1zdGF0LmMtMjMyMS1cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjcwPXN0cnVjdCB6c19wb29sIHtcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMjg0LSNlbmRpZlxcbm1tL3pzbWFsbG9jLmM6Mjg1OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMjg2LVxcdHN0cnVjdCB3b3JrX3N0cnVjdCBmcmVlX3dvcms7XFxuLS1cXG5tbS96c21hbGxvYy5jPTQzMT1zdGF0aWMgYm9vbCBac0h1Z2VQYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtNDM1LVxcbm1tL3pzbWFsbG9jLmM6NDM2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtNDM3LXN0YXRpYyB2b2lkIGtpY2tfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XFxuLS1cXG5tbS96c21hbGxvYy5jPTEwMzI9c3RhdGljIHN0cnVjdCB6c3BhZ2UgKmFsbG9jX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTA0Mi1cXG5tbS96c21hbGxvYy5jOjEwNDM6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSlcXG5tbS96c21hbGxvYy5jLTEwNDQtXFx0XFx0Z2ZwIFxcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xcbi0tXFxubW0venNtYWxsb2MuYz0xNDU0PXN0YXRpYyB2b2lkIG9ial9mcmVlKGludCBjbGFzc19zaXplLCB1bnNpZ25lZCBsb25nIG9iailcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTQ4MS1cXG5tbS96c21hbGxvYy5jOjE0ODI6I2lmIChaU19PQkpfQ0xBU1NfQklUUyBcXHUwMDNlIDApIHx8IGRlZmluZWQoQ09ORklHX0NPTVBBQ1RJT04pXFxubW0venNtYWxsb2MuYy0xNDgzLS8qIEZvbGRzIHRvIDAgd2hlbiBaU19PQkpfQ0xBU1NfQklUUyA9PSAwOyBubyBpZmRlZiBuZWVkZWQgYXQgY2FsbGVycy4gKi9cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTc1Mz1zdGF0aWMgaW50IHB1dGJhY2tfenNwYWdlKHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcywgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy0xNzYyLVxcbm1tL3pzbWFsbG9jLmM6MTc2MzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTE3NjQtLypcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjM5NT1zdGF0aWMgaW50IF9faW5pdCB6c19pbml0KHZvaWQpXFxuLS1cXG5tbS96c21hbGxvYy5jLTI0MDItXFxubW0venNtYWxsb2MuYzoyNDAzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMjQwNC1cXHRyYyA9IHNldF9tb3ZhYmxlX29wcyhcXHUwMDI2enNtYWxsb2NfbW9wcywgUEdUWV96c21hbGxvYyk7XFxuLS1cXG5tbS96c21hbGxvYy5jPTI0MTQ9c3RhdGljIHZvaWQgX19leGl0IHpzX2V4aXQodm9pZClcXG5tbS96c21hbGxvYy5jLTI0MTUte1xcbm1tL3pzbWFsbG9jLmM6MjQxNjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTI0MTctXFx0c2V0X21vdmFibGVfb3BzKE5VTEwsIFBHVFlfenNtYWxsb2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTozMS43OTk0ODcyNDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM1NTUyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uY2VybnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIG5vbi1uZWdvdGlhYmxlLiBJdCdzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2suIE5vdywgSSBzZWUgdGhhdCBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIGhpbmdlcyBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBiZWluZyBlbmFibGVkLiBPciwgbWF5YmUgaXQncyBqdXN0IGF2YWlsYWJsZSwgcmVnYXJkbGVzcywgYnV0IG9ubHkgKnJlYWxseSogbWFrZXMgc2Vuc2UgaW4gY29uanVuY3Rpb24gd2l0aCBUSFAuIEVpdGhlciB3YXksIFRIUCBpcyBhIGRlcGVuZGVuY3kgaGVyZS4gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCByZWxhdGlvbnNoaXAuIEnigJlkIGJldHRlciBnbyBhbmQgY2hlY2sgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgdG8gYmUgY29tcGxldGVseSBzdXJlIG9mIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0aHJlZSBmZWF0dXJlcy4gR290dGEgdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbGwgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6MzUuNTM1MDQyNTkzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE4NzE3Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTE4NT1leHRlcm4gdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncztcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxODY6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXM7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg3LWV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTMyMD11bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMyOS1cXHRpZiAodHlwZSAhPSBUVkFfRk9SQ0VEX0NPTExBUFNFIFxcdTAwMjZcXHUwMDI2IHZtYV9pc19hbm9ueW1vdXModm1hKSkge1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjMzMDpcXHRcXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMzMS1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz04NT1zdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpXFxubW0vY29tcGFjdGlvbi5jLTg2LXtcXG5tbS9jb21wYWN0aW9uLmM6ODc6XFx0dW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xcbm1tL2NvbXBhY3Rpb24uYy04OC1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz04Mjk9c3RhdGljIGJvb2wgc2tpcF9pc29sYXRpb25fb25fb3JkZXIoaW50IG9yZGVyLCBpbnQgdGFyZ2V0X29yZGVyKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTg0Mi1cXHRpZiAoaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXFx1MDAyNlxcdTAwMjYgb3JkZXIgXFx1MDAzZT0gY29tcGFjdF9ocGFnZV9vcmRlcigpIFxcdTAwMjZcXHUwMDI2XFxubW0vY29tcGFjdGlvbi5jOjg0MzpcXHQgICAgUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcXG5tbS9jb21wYWN0aW9uLmMtODQ0LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI1NDU9dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI1NTEtXFxubW0vY29tcGFjdGlvbi5jOjI1NTI6XFx0aWYgKFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykgXFx1MDAyNlxcdTAwMjYgb3JkZXIgPT0gY29tcGFjdF9ocGFnZV9vcmRlcigpKSB7XFxubW0vY29tcGFjdGlvbi5jLTI1NTMtXFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODc9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy04OS1cXG5tbS9odWdlX21lbW9yeS5jOjkwOnVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcXG5tbS9odWdlX21lbW9yeS5jLTkxLXVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTY0MD1zdGF0aWMgc3NpemVfdCBhbm9uX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQ1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NjQ2OlxcdGlmICh0ZXN0X2JpdChvcmRlciwgXFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcXG5tbS9odWdlX21lbW9yeS5jLTY0Ny1cXHRcXHRvdXRwdXQgPSBcXFwiW2Fsd2F5c10gaW5oZXJpdCBtYWR2aXNlIG5ldmVyXFxcIjtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjYwLVxcdHN0YXRpYyB1bnNpZ25lZCBsb25nICplbmFibGVkX29yZGVyc1tdID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NjYxOlxcdFxcdFxcdTAwMjZodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyxcXG5tbS9odWdlX21lbW9yeS5jLTY2Mi1cXHRcXHRcXHUwMDI2aHVnZV9hbm9uX29yZGVyc19pbmhlcml0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTM2PXN0YXRpYyBpbnQgX19pbml0IHNldHVwX3RocF9hbm9uKGNoYXIgKnN0cilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE0Ny1cXG5tbS9odWdlX21lbW9yeS5jOjExNDg6XFx0YWx3YXlzID0gaHVnZV9hbm9uX29yZGVyc19hbHdheXM7XFxubW0vaHVnZV9tZW1vcnkuYy0xMTQ5LVxcdG1hZHZpc2UgPSBodWdlX2Fub25fb3JkZXJzX21hZHZpc2U7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEyMDgtXFxubW0vaHVnZV9tZW1vcnkuYzoxMjA5OlxcdGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzID0gYWx3YXlzO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTIxMC1cXHRodWdlX2Fub25fb3JkZXJzX21hZHZpc2UgPSBtYWR2aXNlO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTUwMj1zdGF0aWMgaW5saW5lIGJvb2wgYW5vbl9ocGFnZV9lbmFibGVkKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTUwMy17XFxubW0va2h1Z2VwYWdlZC5jOjUwNDpcXHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcXG5tbS9raHVnZXBhZ2VkLmMtNTA1LVxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTozNy4wNTM3NjkyMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY1MDU3MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQ2hlY2tpbmcgYSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIGlzIGRlZmluZWQuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBjaGVjazsgSSBrbm93IHRoaXMgdmFyaWFibGUgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEl0J3MgYSBrZXkgcGFydCBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIGVzcGVjaWFsbHkgd2l0aCBob3cgd2UndmUgYmVlbiBwdXNoaW5nIFRIUCBpbXByb3ZlbWVudHMuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciB3aXRoIHRoaXMgbGluZSBvZiBpbnZlc3RpZ2F0aW9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLiBUaGUgbG9naWMgaGluZ2VzIG9uIHRoYXQsIGFuZCBJIGNhbid0IGFmZm9yZCB0byBiZSB3YXN0aW5nIHRpbWUgZG93biBhIHJhYmJpdCBob2xlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJIHN0YW5kIHdpdGggdGhpcywgd2hhdCB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGlzLCBhbmQgd2hhdCBJIGNhbiB3b3JrIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6NDEuMjE4ODI4NzY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg4NTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTI3PWVudW0gbXRocF9zdGF0X2l0ZW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTUyLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE1MzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NZU0ZTKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTE1NC1zdHJ1Y3QgbXRocF9zdGF0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTE3OD1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbXRocF9zdGF0KGludCBvcmRlciwgZW51bSBtdGhwX3N0YXRfaXRlbSBpdGVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTgyLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE4MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTk4PXZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2MDE6I2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjAyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9ODE1PXN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfaXNfaHVnZShwdWRfdCBwdWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTgtfVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgxOTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODIwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTo0MS4yNjQ3MTg4ODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwOTk3NTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIEFsbG9jYXRpb24gUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCdzIGNsZWFyIHRoYXQgdGhlIHN5c3RlbSBpcyBzZXQgdXAgdG8gaGFuZGxlIGh1Z2UgYW5vbnltb3VzIHBhZ2VzLCBhc3N1bWluZyBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIGlzIGRlZmluZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UgbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLCBhbmQgYnkgZXh0ZW5zaW9uLCBgQ09NUEFDVElPTmAgYXMgd2VsbC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgdGhlIGJhc2ljcyBhcmUgaW4gcGxhY2UuXG5cbk5vdywgSSB3YW50IHRvIGRyaWxsIGRvd24gYW5kIHNlZSB0aGUgcmVsZXZhbnQgcGllY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJ2xsIGJlIGZvY3VzaW5nIG9uIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gZGV0ZXJtaW5pbmcgYWxsb2NhdGlvbiBjYXBhY2l0eSwgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCwgd2hpY2ggbGlrZWx5IHBsYXlzIGEgcGFydCBpbiBkZXRlcm1pbmluZyB0aGUgZmVhc2liaWxpdHkgb2YgYSBjb21wYWN0aW9uIHJ1biB0byBzYXRpc2Z5IGFuIG9yZGVyLCBhbmQgZmluYWxseSwgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgLCB3aGljaCBpcyBwcm9iYWJseSBrZXkgdG8gZXZhbHVhdGluZyB3aGV0aGVyIGEgZ2l2ZW4gem9uZSBsaXN0IGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGNvbXBhY3Rpb24uXG5cbkFscmlnaHQsIG5vdyB0aGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgaXMgYW4gZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyBzeW1ib2wuIEtub3dpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyBleHBvc2VkIHRvIGFuZCB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gR290dGEgZmlndXJlIG91dCBpZiBpdCdzIHRpZ2h0bHkgY291cGxlZCBpbnRlcm5hbGx5LCBvciBpZiBpdCdzIGFuIEFQSSBwb2ludCB0aGF0IG90aGVycyBjYW4gdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE4MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTo0NS45NzQ2OTcxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMzEyMzIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9MjU3MD1zdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdFxcbm1tL2NvbXBhY3Rpb24uYzoyNTcxOmNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTI1NzItXFx0XFx0XFx0XFx0IGludCBoaWdoZXN0X3pvbmVpZHgsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNjEwPWNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNjM1LVxcdGlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGNjLVxcdTAwM2VvcmRlcikpIHtcXG5tbS9jb21wYWN0aW9uLmM6MjYzNjpcXHRcXHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihjYy1cXHUwMDNlem9uZSwgY2MtXFx1MDAzZW9yZGVyLFxcbm1tL2NvbXBhY3Rpb24uYy0yNjM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LFxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTMxMDY9c3RhdGljIGJvb2wga2NvbXBhY3RkX25vZGVfc3VpdGFibGUocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMTIwLVxcbm1tL2NvbXBhY3Rpb24uYzozMTIxOlxcdFxcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHpvbmUsXFxubW0vY29tcGFjdGlvbi5jLTMxMjItXFx0XFx0XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzEzMj1zdGF0aWMgdm9pZCBrY29tcGFjdGRfZG9fd29yayhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxNjQtXFxubW0vY29tcGFjdGlvbi5jOjMxNjU6XFx0XFx0cmV0ID0gY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoem9uZSxcXG5tbS9jb21wYWN0aW9uLmMtMzE2Ni1cXHRcXHRcXHRcXHRjYy5vcmRlciwgem9uZWlkLCBjYy5hbGxvY19mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6NDcuNTA3ODI1Mzc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTU3NTQ3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSB2YXJpYWJsZXMgcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbiBhbmQgYWxsb2NhdGlvbi4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXJgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXRzIHZhbHVlIGlzIGxpa2VseSBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZSBvciBkdXJpbmcgdmVyeSBlYXJseSBpbml0aWFsaXphdGlvbi4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgZmxleGlibGUgdGhlIHN5c3RlbSBpcyBpbiBhZGFwdGluZyB0byB2YXJ5aW5nIG1lbW9yeSBmcmFnbWVudGF0aW9uIHNjZW5hcmlvcy5cblxuVGhlbiwgSSdtIG5vdGluZyB0aGF0IGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhbmQgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGFyZSAqbm90KiBzdGF0aWMuIFRoZXkncmUgZHluYW1pYy4gU28sIHRoZWlyIHZhbHVlcyBjaGFuZ2Ugb3ZlciB0aW1lLCB3aGljaCBtZWFucyB0aGV5IGFyZSBiZWluZyB1cGRhdGVkIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzeXN0ZW0uIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBpcyBvYnZpb3VzIC0gaXQncyBkaXJlY3RseSByZWZsZWN0aW5nIG1lbW9yeSBhdmFpbGFiaWxpdHkuIEJ1dCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgaXMgdGhlIGtleSBpbnRlcmVzdC4gVGhpcyBpcyBhIGR5bmFtaWMgY29uZGl0aW9uIHRoYXQgc2hvdWxkIHRlbGwgbWUgd2hhdCB6b25lcyBhcmUgb2theSB0byBjb25zaWRlciBmb3IgY29tcGFjdGlvbi5cblxuUmlnaHQgbm93LCBteSBmb2N1cyBpcyBvbiBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAuIExldCdzIGRpZyBkZWVwZXIgaW50byBob3cgdGhhdCBpcyBpbXBsZW1lbnRlZCBhbmQgd2hhdCBmYWN0b3JzIGluZmx1ZW5jZSBpdHMgZXZhbHVhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCB0byBkZXZlbG9wIGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbGdvcml0aG0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDAyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6NTEuMjIzNTgzMzgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2NjA5MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTAxPWV4dGVybiB2b2lkIGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwMy1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDQ6Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwNS1cXHRcXHRcXHRcXHRcXHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNDUyPWJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIHdhdGVybWFyayxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNDk2LS8qIFVzZWQgYnkgZGlyZWN0IHJlY2xhaW1lcnMgKi9cXG5tbS9jb21wYWN0aW9uLmM6MjQ5Nzpib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTI0OTgtXFx0XFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MjQ4PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00MjcwLVxcdGlmIChjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQpIHtcXG5tbS9wYWdlX2FsbG9jLmM6NDI3MTpcXHRcXHRyZXQgPSBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKGFjLCBvcmRlciwgYWxsb2NfZmxhZ3MsXFxubW0vcGFnZV9hbGxvYy5jLTQyNzItXFx0XFx0XFx0XFx0XFx0XFx0ICAgZ2ZwX21hc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTo1Mi43NzAxOTc2OTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NjY0OTY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgaXNuJ3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IHVzZWQgYWNyb3NzIG11bHRpcGxlIGZpbGVzIG9yIG1vZHVsZXMsIG5vdCBqdXN0IHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIHRyYWNlIGl0cyB1c2FnZS4gU2ltaWxhcmx5LCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgYWxzbyBub24tc3RhdGljOyB0aGlzIGhpZ2hsaWdodHMgdGhhdCB0aGVzZSBhcmVuJ3QgaW50ZXJuYWwgZnVuY3Rpb25zLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLCBhbmQgdGhhdCdzIHVzdWFsbHkgYnkgdHJhY2luZyB0aGUgdXNhZ2Ugb2YgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3QuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGhvdyBgcGdkYXRfYmFsYW5jZWRgIGlzIHVzZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBtZW1vcnkgc2Nhbm5pbmcgYW5kIGJhbGFuY2luZyBsb2dpYy4gRGlnZ2luZyBpbnRvIHRoYXQgZmlsZSBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGZvciB3aGF0IGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCBhbmQgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGFyZSBpbnZvbHZlZCBpbi4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBidWlsZCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGJ5IHJldmlld2luZyB0aGUgdXNhZ2Ugb2YgYHBnZGF0X2JhbGFuY2VkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTo1Ni4yMTY4NDk0NjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODM2NDI5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGdkYXRfYmFsYW5jZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjkzMD1zdGF0aWMgYm9vbCBwZ2RhdF93YXRlcm1hcmtfYm9vc3RlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNjk1Ny0gKi9cXG5tbS92bXNjYW4uYzo2OTU4OnN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy02OTU5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMjc9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNzA0OS1cXG5tbS92bXNjYW4uYzo3MDUwOlxcdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcXG5tbS92bXNjYW4uYy03MDUxLVxcdFxcdGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ2RhdCk7XFxuLS1cXG5tbS92bXNjYW4uYz03MTM5PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MjE0LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcyMTU6XFx0XFx0YmFsYW5jZWQgPSBwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgc2Mub3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzIxNi1cXHRcXHRpZiAoIWJhbGFuY2VkIFxcdTAwMjZcXHUwMDI2IG5yX2Jvb3N0X3JlY2xhaW0pIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NTU9dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1ODAtXFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSB8fFxcbm1tL3Ztc2Nhbi5jOjc1ODE6XFx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy03NTgyLVxcdCAgICAgIXBnZGF0X3dhdGVybWFya19ib29zdGVkKHBnZGF0LCBoaWdoZXN0X3pvbmVpZHgpKSkge1xcbi0tXFxubW0vdm1zY2FuLmM9NzYxMz12b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MTUte1xcbm1tL3Ztc2Nhbi5jOjc2MTY6XFx0aWYgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSlcXG5tbS92bXNjYW4uYy03NjE3LVxcdFxcdGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgY3VycmVudF9pc19rc3dhcGQoKSA/XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjU3LjcwMDQ5NjU4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDA1NzY3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbiBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJdCdzIGludGVyZXN0aW5nIGhvdyB0aGV5J3JlIGRlY2xhcmVkLiBgcGdkYXRfYmFsYW5jZWRgIGlzIGNsZWFybHkgYSBzdGF0aWMgdmFyaWFibGUsIGFuZCBJIGNhbiBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQg4oCTIGl0J3MgbGlrZWx5IGEgcGVyLW5vZGUgZmxhZyBvciBzdGF0ZSwgYW5kIGl0J3MgaGlkZGVuIGZyb20gZXh0ZXJuYWwgbW9kdWxlcy4gYHdha2V1cF9rc3dhcGRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXNuJ3Qgc3RhdGljLCBzbyBpdOKAmXMgbGlrZWx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIGBiYWxhbmNlX3BnZGF0YCwgaXMgc3RhdGljLiBBZ2FpbiwgYSBzdGF0aWMgZnVuY3Rpb24gdXN1YWxseSBpbXBsaWVzIHRoYXQgaXQgaXMgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIGZpbGUvbW9kdWxlLiBOb3csIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBpcyBub24tc3RhdGljLCBzbyB0aGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSBhcyBmb3IgYHdha2V1cF9rc3dhcGRgLiBMZXQncyBkaWcgaW50byB0aGF0IGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTc2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MDQuMTA2MjY1OTc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg0MjE5NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjQ0PXZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcixcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NDUtXFx0XFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE2NDY6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjQ3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTIyND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI2Mi1cXHRpZiAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNlIHJlY2xhaW1lZClcXG5tbS92bXNjYW4uYzo1MjYzOlxcdFxcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KTtcXG5tbS92bXNjYW4uYy01MjY0LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYyMzQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MzQxLVxcdGlmIChyZWNsYWltYWJsZSlcXG5tbS92bXNjYW4uYzo2MzQyOlxcdFxcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KTtcXG5tbS92bXNjYW4uYy02MzQzLVxcdGVsc2UgaWYgKHNjLVxcdTAwM2VjYWNoZV90cmltX21vZGUpXFxuLS1cXG5tbS92bXNjYW4uYz03NjAwPXZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXFxuLS1cXG5tbS92bXNjYW4uYy03NjEyLSAqL1xcbm1tL3Ztc2Nhbi5jOjc2MTM6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzYxNC1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjowNS42OTA0ODk1N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc2ODA5ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtlcm5lbCdzIFN3YXBwaW5nIEJlaGF2aW9yKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB3aGVyZSB0aGUgc3lzdGVtIGlzIGdldHRpbmcgaHVuZyB1cC4gYHdha2V1cF9rc3dhcGRgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIGtzd2FwZCBkYWVtb24sIGFuZCBpZiBzd2FwcGluZyBpcyBhIGJvdHRsZW5lY2ssIHRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBwcm9ibGVtIGVpdGhlciBvcmlnaW5hdGVzIG9yIG1hbmlmZXN0cy4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyB0cmlnZ2VyaW5nIGl0cyBhY3RpdmF0aW9uLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gYHdha2V1cF9rc3dhcGRgIGJlaW5nIGNhbGxlZCwgd2hhdCByZXNvdXJjZXMgaXQncyBjb250ZW5kaW5nIGZvciwgYW5kIHdoZXRoZXIgaXRzIGZyZXF1ZW5jeSBvZiBhY3RpdmF0aW9uIGFsaWducyB3aXRoIHRoZSBvYnNlcnZlZCBwZXJmb3JtYW5jZSBpc3N1ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgYW5kIGFueSByZWxldmFudCBjb3VudGVycyBhcm91bmQgdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0ncyByZWFjdGlvbi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHdhaXQgcXVldWVzLCBsb2NrIGNvbnRlbnRpb24sIGFuZCBhbnkgaW5kaWNhdGlvbnMgb2YgcmVzb3VyY2Ugc3RhcnZhdGlvbiB0aGF0IGFyZSB0aWVkIHRvIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzc0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MDkuMzY3MzAyNzE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk2OTE0OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndha2V1cF9rc3dhcGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9NTk9bXkgJG9wdF9yZWFkX3Byb2NzdGF0O1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTYwLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjYxOm15ICR0b3RhbF93YWtldXBfa3N3YXBkO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTYyLW15ICgkdG90YWxfZGlyZWN0X3JlY2xhaW0sICR0b3RhbF9kaXJlY3RfbnJfc2Nhbm5lZCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbD0xMTM9bXkgJHJlZ2V4X2tzd2FwZF9zbGVlcF9kZWZhdWx0ID0gJ25pZD0oWzAtOV0qKSc7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MTE0Om15ICRyZWdleF93YWtldXBfa3N3YXBkX2RlZmF1bHQgPSAnbmlkPShbMC05XSopIG9yZGVyPShbMC05XSopIGdmcF9mbGFncz0oW0EtWl98XSopJztcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0xMTUtbXkgJHJlZ2V4X2xydV9pc29sYXRlX2RlZmF1bHQgPSAnY2xhc3N6b25lPShbMC05XSopIG9yZGVyPShbMC05XSopIG5yX3JlcXVlc3RlZD0oWzAtOV0qKSBucl9zY2FubmVkPShbMC05XSopIG5yX3NraXBwZWQ9KFswLTldKikgbnJfdGFrZS4uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9MTI0PW15ICRyZWdleF9rc3dhcGRfc2xlZXA7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MTI1Om15ICRyZWdleF93YWtldXBfa3N3YXBkO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTEyNi1teSAkcmVnZXhfbHJ1X2lzb2xhdGU7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbD0xOTY9JHJlZ2V4X2tzd2FwZF9zbGVlcCA9IGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXgoXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0xOTktXFx0XFx0XFx0XFxcIm5pZFxcXCIpO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjIwMDokcmVnZXhfd2FrZXVwX2tzd2FwZCA9IGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXgoXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MjAxOlxcdFxcdFxcdFxcXCJ2bXNjYW4vbW1fdm1zY2FuX3dha2V1cF9rc3dhcGRcXFwiLFxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjIwMjpcXHRcXHRcXHQkcmVnZXhfd2FrZXVwX2tzd2FwZF9kZWZhdWx0LFxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTIwMy1cXHRcXHRcXHRcXFwibmlkXFxcIiwgXFxcIm9yZGVyXFxcIiwgXFxcImdmcF9mbGFnc1xcXCIpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9Mjc1PUVWRU5UX1BST0NFU1M6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0zNjEtXFx0XFx0XFx0JHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS1cXHUwMDNle1NUQVRFX0tTV0FQRF9CRUdJTn0gPSAwO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjM2MjpcXHRcXHR9IGVsc2lmICgkdHJhY2Vwb2ludCBlcSBcXFwibW1fdm1zY2FuX3dha2V1cF9rc3dhcGRcXFwiKSB7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtMzYzLVxcdFxcdFxcdCRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tXFx1MDAzZXtNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRH0rKztcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM2NS1cXHRcXHRcXHQkZGV0YWlscyA9ICQ2O1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjM2NjpcXHRcXHRcXHRpZiAoJGRldGFpbHMgIX4gLyRyZWdleF93YWtldXBfa3N3YXBkL28pIHtcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDozNjc6XFx0XFx0XFx0XFx0cHJpbnQgXFxcIldBUk5JTkc6IEZhaWxlZCB0byBwYXJzZSBtbV92bXNjYW5fd2FrZXVwX2tzd2FwZCBhcyBleHBlY3RlZFxcXFxuXFxcIjtcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0zNjgtXFx0XFx0XFx0XFx0cHJpbnQgXFxcIiAgICAgICAgICRkZXRhaWxzXFxcXG5cXFwiO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjM2OTpcXHRcXHRcXHRcXHRwcmludCBcXFwiICAgICAgICAgJHJlZ2V4X3dha2V1cF9rc3dhcGRcXFxcblxcXCI7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtMzcwLVxcdFxcdFxcdFxcdG5leHQ7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbD00NTc9c3ViIGR1bXBfc3RhdHMge1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNTEzLVxcdFxcdCR0b3RhbF9kaXJlY3RfcmVjbGFpbSArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS1cXHUwMDNle01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJTn07XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6NTE0OlxcdFxcdCR0b3RhbF93YWtldXBfa3N3YXBkICs9ICRzdGF0c3skcHJvY2Vzc19waWR9LVxcdTAwM2V7TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUER9O1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTUxNS1cXHRcXHQkdG90YWxfZGlyZWN0X25yX3NjYW5uZWQgKz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tXFx1MDAzZXtISUdIX05SX1NDQU5ORUR9O1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNjQxLVxcdHByaW50IFxcXCJEaXJlY3QgcmVjbGFpbSB3cml0ZSBhbm9uIGFzeW5jIEkvTzpcXHQkdG90YWxfZGlyZWN0X3dyaXRlcGFnZV9hbm9uX2FzeW5jXFxcXG5cXFwiO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjY0MjpcXHRwcmludCBcXFwiV2FrZSBrc3dhcGQgcmVxdWVzdHM6XFx0XFx0XFx0JHRvdGFsX3dha2V1cF9rc3dhcGRcXFxcblxcXCI7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNjQzLVxcdHByaW50ZiBcXFwiVGltZSBzdGFsbGVkIGRpcmVjdCByZWNsYWltOiBcXHRcXHQlLTEuMmYgc2Vjb25kc1xcXFxuXFxcIiwgJHRvdGFsX2RpcmVjdF9sYXRlbmN5O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjM3PWVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NDMtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjQ0OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcixcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NDUtXFx0XFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oPTEyMz1UUkFDRV9FVkVOVChtbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0xNTAtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg6MTUxOlRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93YWtldXBfa3N3YXBkLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTE1Mi1cXG4tLVxcbm1tL21pZ3JhdGUuYz0yNjkwPWludCBtaWdyYXRlX21pc3BsYWNlZF9mb2xpb19wcmVwYXJlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMjczNC1cXG5tbS9taWdyYXRlLmM6MjczNTpcXHRcXHR3YWtldXBfa3N3YXBkKHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVzICsgeiwgMCxcXG5tbS9taWdyYXRlLmMtMjczNi1cXHRcXHRcXHQgICAgICBmb2xpb19vcmRlcihmb2xpbyksIFpPTkVfTU9WQUJMRSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MzQxMz1zdHJ1Y3QgcGFnZSAqcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzQzNC1cXHRcXHRjbGVhcl9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG5tbS9wYWdlX2FsbG9jLmM6MzQzNTpcXHRcXHR3YWtldXBfa3N3YXBkKHpvbmUsIDAsIDAsIHpvbmVfaWR4KHpvbmUpKTtcXG5tbS9wYWdlX2FsbG9jLmMtMzQzNi1cXHR9XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDUwMj1zdGF0aWMgdm9pZCB3YWtlX2FsbF9rc3dhcGRzKHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDUyMS1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9wYWdlX2FsbG9jLmM6NDUyMjpcXHRcXHR3YWtldXBfa3N3YXBkKHpvbmUsIGdmcF9tYXNrLCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3BhZ2VfYWxsb2MuYy00NTIzLVxcdFxcdGxhc3RfcGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbi0tXFxubW0vdm1zY2FuLmM9NzQ3ND1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbi0tXFxubW0vdm1zY2FuLmMtNzU1NC0gKi9cXG5tbS92bXNjYW4uYzo3NTU1OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU1Ni1cXHRcXHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NTk0LVxcbm1tL3Ztc2Nhbi5jOjc1OTU6XFx0dHJhY2VfbW1fdm1zY2FuX3dha2V1cF9rc3dhcGQocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU5Ni1cXHRcXHRcXHRcXHQgICAgICBnZnBfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoxMC44NjQyMjUwOTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5Nzc2ODc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGFzIGEga2VybmVsIG1lbW9yeSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEZ1bmN0aW9ucyBSZWxhdGVkIHRvIE1lbW9yeSBDb21wYWN0aW9uKipcblxuT2theSwgc28gSSd2ZSBub3RpY2VkIGEgZmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBjb21wYWN0aW9uLCB0aGF0IGFyZW4ndCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgSSd2ZSBnb3QgYHdha2V1cF9rc3dhcGRgLCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AsIGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCwgYW5kIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBmbGFnZ2VkLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGFyZW4ndCBgc3RhdGljYCBzdWdnZXN0cyB0aGV5IG1pZ2h0IGJlIGV4cG9zZWQgZm9yIHVzZSBvdXRzaWRlIHRoZWlyIGltbWVkaWF0ZSBtb2R1bGUsIHdoaWNoLCBnaXZlbiB0aGVpciBuYW1lcywgbGlrZWx5IGNlbnRlcnMgYXJvdW5kIHRoZSBrZXJuZWwncyBjb21wYWN0aW9uIGFuZCBzd2FwcGluZyBtZWNoYW5pc21zLlxuXG5Ob3csIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIG5vbi1zdGF0aWMgc3RhdHVzIGlzIGEgcG90ZW50aWFsIGNsdWUgdG8gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBhbmQgcG90ZW50aWFsbHkgaW50ZXJhY3RlZCB3aXRoIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gYGtjb21wYWN0ZGAgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlc2UgZnVuY3Rpb25zLiBTaW5jZSB0aGV5IHNlZW0gbGlua2VkLCBsZXQncyBzdGFydCB3aXRoIGBtbS9jb21wYWN0aW9uLmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjgwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MTUuNDYxOTk2NzQ0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxNDE3NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtjb21wYWN0ZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2NvbmNlcHRzLnJzdD0yMDY9cGh5c2ljYWxseSBjb250aWd1b3VzIGFyZWFzIGJlY29tZSBwb3NzaWJsZS5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2NvbmNlcHRzLnJzdC0yMDctXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9jb25jZXB0cy5yc3Q6MjA4Okxpa2UgcmVjbGFpbSwgdGhlIGNvbXBhY3Rpb24gbWF5IGhhcHBlbiBhc3luY2hyb25vdXNseSBpbiB0aGUgYGBrY29tcGFjdGRgYFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vY29uY2VwdHMucnN0LTIwOS1kYWVtb24gb3Igc3luY2hyb25vdXNseSBhcyBhIHJlc3VsdCBvZiBhIG1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3QuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MTc3PWRlZmVyXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTE3OC1cXHRtZWFucyB0aGF0IGFuIGFwcGxpY2F0aW9uIHdpbGwgd2FrZSBrc3dhcGQgaW4gdGhlIGJhY2tncm91bmRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MTc5OlxcdHRvIHJlY2xhaW0gcGFnZXMgYW5kIHdha2Uga2NvbXBhY3RkIHRvIGNvbXBhY3QgbWVtb3J5IHNvIHRoYXRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTgwLVxcdFRIUCBpcyBhdmFpbGFibGUgaW4gdGhlIG5lYXIgZnV0dXJlLiBJdCdzIHRoZSByZXNwb25zaWJpbGl0eVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTE4Mz1kZWZlcittYWR2aXNlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTg2LVxcdG90aGVyIHJlZ2lvbnMgd2lsbCB3YWtlIGtzd2FwZCBpbiB0aGUgYmFja2dyb3VuZCB0byByZWNsYWltXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjE4NzpcXHRwYWdlcyBhbmQgd2FrZSBrY29tcGFjdGQgdG8gY29tcGFjdCBtZW1vcnkgc28gdGhhdCBUSFAgaXNcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTg4LVxcdGF2YWlsYWJsZSBpbiB0aGUgbmVhciBmdXR1cmUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdD04NT1wZXJmb3JtIChlLmcuIHBhZ2UgYWxsb2NhdGlvbiwgZGlydHkgd3JpdGViYWNrLCBwYWdlIHJlY2xhaW0pLiBXaGVuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6ODY6dXNpbmcgTkZTRCBESVJFQ1QsIGtzd2FwZCBhbmQga2NvbXBhY3RkIGFyZSBubyBsb25nZXIgY29tbWFuZGluZyBDUFVcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC04Ny10aW1lIHRyeWluZyB0byBmaW5kIGFkZXF1YXRlIGZyZWUgcGFnZXMgc28gdGhhdCBmb3J3YXJkIElPIHByb2dyZXNzIGNhblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTMwOD1Db21wYWN0aW9uIGNvbnRyb2xcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMTAtXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMxMTpgYGtjb21wYWN0ZF9tYXhfb3JkZXJgYFxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMTI6ICBQYWdlIG9yZGVyIHRoYXQga2NvbXBhY3RkIHNob3VsZCB0cnkgdG8gYWNoaWV2ZS5cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMzEzLVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMTQ6YGBrY29tcGFjdGRfaGlnaGVzdF96b25laWR4YGBcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzE1OiAgVGhlIGhpZ2hlc3Qgem9uZSBpbmRleCB0byBiZSBjb21wYWN0ZWQgYnkga2NvbXBhY3RkLlxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMTYtXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMxNzpgYGtjb21wYWN0ZF93YWl0YGBcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMzE4LSAgV29ya3F1ZXVlIHVzZWQgdG8gc3luY2hyb25pemUgbWVtb3J5IGNvbXBhY3Rpb24gdGFza3MuXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMxOS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzIwOmBga2NvbXBhY3RkYGBcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzIxOiAgUGVyLW5vZGUgaW5zdGFuY2Ugb2Yga2NvbXBhY3RkIGtlcm5lbCB0aHJlYWQuXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMyMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjgxPWtzd2FwZOaXoOazleWbnuaUtuS7u+S9lemhtemdoueahOi/kOihjOasoeaVsOOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yOTYtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyOTc6YGBrY29tcGFjdGRfbWF4X29yZGVyYGBcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjI5ODprY29tcGFjdGTlupTlsJ3or5Xlrp7njrDnmoTpobXpnaJvcmRlcuOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjk5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzAwOmBga2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeGBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMDE6a2NvbXBhY3Rk5Y+v5Lul5Y6L57yp55qE5pyA6auY5Yy65Z+f57Si5byV44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMDM6YGBrY29tcGFjdGRfd2FpdGBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDQt5ZCM5q2l5YaF5a2Y5Y6L57yp5Lu75Yqh55qE5bel5L2c6Zif5YiX44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMDY6YGBrY29tcGFjdGRgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzA3Ouavj+S4quiKgueCueeahGtjb21wYWN0ZOWGheaguOe6v+eoi+WunuS+i+OAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMzA4LVxcbi0tXFxuZnMvbmZzL2ZpbGUuYz01MTI9c3RhdGljIGJvb2wgbmZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbmZzL2ZpbGUuYy01MTgtXFx0XFx0aWYgKChjdXJyZW50X2dmcF9jb250ZXh0KGdmcCkgXFx1MDAyNiBHRlBfS0VSTkVMKSAhPSBHRlBfS0VSTkVMIHx8XFxuZnMvbmZzL2ZpbGUuYzo1MTk6XFx0XFx0ICAgIGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY3VycmVudF9pc19rY29tcGFjdGQoKSlcXG5mcy9uZnMvZmlsZS5jLTUyMC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD02OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcGFjdF9nYXAodW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtODMtXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6ODQ6c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC04NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMDQ9Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTA2LVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjEwNzpleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3J1bihpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDg6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjEwOTpleHRlcm4gdm9pZCB3YWtldXBfa2NvbXBhY3RkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTEwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTE2PXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjItXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTIzOnN0YXRpYyBpbmxpbmUgdm9pZCBrY29tcGFjdGRfcnVuKGludCBuaWQpXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTI0LXtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjUtfVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjEyNjpzdGF0aWMgaW5saW5lIHZvaWQga2NvbXBhY3RkX3N0b3AoaW50IG5pZClcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTI5LVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjEzMDpzdGF0aWMgaW5saW5lIHZvaWQgd2FrZXVwX2tjb21wYWN0ZChwZ19kYXRhX3QgKnBnZGF0LFxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEzMS1cXHRcXHRcXHRcXHRpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oPTI2PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjUtICogYXJlIGNvbXBvdW5kIGFsbG9jYXRpb25zIHRoYXQgd2lsbCBnZW5lcmFsbHkgZmFpbCBxdWlja2x5IGlmIG1lbW9yeSBpcyBub3RcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM2NjogKiBhdmFpbGFibGUgYW5kIHdpbGwgbm90IHdha2Uga3N3YXBkL2tjb21wYWN0ZCBvbiBmYWlsdXJlLiBUaGUgX0xJR0hUXFxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjctICogdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHJlY2xhaW0vY29tcGFjdGlvbiBhdCBhbGwgYW5kIGlzIGJ5IGRlZmF1bHQgdXNlZFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDc4PXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTUzOC0jaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1Mzk6XFx0aW50IGtjb21wYWN0ZF9tYXhfb3JkZXI7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTQwOlxcdGVudW0gem9uZV90eXBlIGtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHg7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTQxOlxcdHdhaXRfcXVldWVfaGVhZF90IGtjb21wYWN0ZF93YWl0O1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU0MjpcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtjb21wYWN0ZDtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1NDMtXFx0Ym9vbCBwcm9hY3RpdmVfY29tcGFjdF90cmlnZ2VyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTE3NzE9ZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc5MS0jZGVmaW5lIFBGX05PRlJFRVpFXFx0XFx0MHgwMDAwODAwMFxcdC8qIFRoaXMgdGhyZWFkIHNob3VsZCBub3QgYmUgZnJvemVuICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE3OTI6I2RlZmluZSBQRl9LQ09NUEFDVERcXHRcXHQweDAwMDEwMDAwXFx0LyogSSBhbSBrY29tcGFjdGQgKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc5My0jZGVmaW5lIFBGX0tTV0FQRFxcdFxcdDB4MDAwMjAwMDBcXHQvKiBJIGFtIGtzd2FwZCAqL1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oPTI4Nj1ERUZJTkVfRVZFTlQobW1fY29tcGFjdGlvbl9kZWZlcl90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl9kZWZlcl9yZXNldCxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0yOTItXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oOjI5MzpUUkFDRV9FVkVOVChtbV9jb21wYWN0aW9uX2tjb21wYWN0ZF9zbGVlcCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMjk0LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTMwOS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MzEwOkRFQ0xBUkVfRVZFTlRfQ0xBU1Moa2NvbXBhY3RkX3dha2VfdGVtcGxhdGUsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTMxMS1cXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0zMzctXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oOjMzODpERUZJTkVfRVZFTlQoa2NvbXBhY3RkX3dha2VfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25fd2FrZXVwX2tjb21wYWN0ZCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzM5LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTM0NC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MzQ1OkRFRklORV9FVkVOVChrY29tcGFjdGRfd2FrZV90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfd2FrZSxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzQ2LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTIyNDQ9c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yMjUzLSAqIFRoZSBwZXItbm9kZSBwcm9hY3RpdmUgKGJhY2tncm91bmQpIGNvbXBhY3Rpb24gcHJvY2VzcyBpcyBzdGFydGVkIGJ5IGl0c1xcbm1tL2NvbXBhY3Rpb24uYzoyMjU0OiAqIGNvcnJlc3BvbmRpbmcga2NvbXBhY3RkIHRocmVhZCB3aGVuIHRoZSBub2RlJ3MgZnJhZ21lbnRhdGlvbiBzY29yZVxcbm1tL2NvbXBhY3Rpb24uYy0yMjU1LSAqIGV4Y2VlZHMgdGhlIGhpZ2ggdGhyZXNob2xkLiBUaGUgY29tcGFjdGlvbiBwcm9jZXNzIHJlbWFpbnMgYWN0aXZlIHRpbGxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yMjk3PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yMzA5LVxcdFxcdCAqIE1hcmsgdGhhdCB0aGUgUEdfbWlncmF0ZV9za2lwIGluZm9ybWF0aW9uIHNob3VsZCBiZSBjbGVhcmVkXFxubW0vY29tcGFjdGlvbi5jOjIzMTA6XFx0XFx0ICogYnkga3N3YXBkIHdoZW4gaXQgZ29lcyB0byBzbGVlcC4ga2NvbXBhY3RkIGRvZXMgbm90IHNldCB0aGVcXG5tbS9jb21wYWN0aW9uLmMtMjMxMS1cXHRcXHQgKiBmbGFnIGl0c2VsZiBhcyB0aGUgZGVjaXNpb24gdG8gYmUgY2xlYXIgc2hvdWxkIGJlIGRpcmVjdGx5XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjM1NS1cXHQvKlxcbm1tL2NvbXBhY3Rpb24uYzoyMzU2OlxcdCAqIFdoZW4gZGVmcmFnX21vZGUgaXMgZW5hYmxlZCwgbWFrZSBrY29tcGFjdGQgdGFyZ2V0XFxubW0vY29tcGFjdGlvbi5jLTIzNTctXFx0ICogd2F0ZXJtYXJrcyBpbiB3aG9sZSBwYWdlYmxvY2tzLiBCZWNhdXNlIHRoZXkgY2FuIGJlIHN0b2xlblxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI0OTc9Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI1MzgtICogcG9sbHV0aW5nIGFsbG9jYXRvciBmYWxsYmFja3MuIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoXFxubW0vY29tcGFjdGlvbi5jOjI1Mzk6ICogdGhpcyBvbiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC5cXG5tbS9jb21wYWN0aW9uLmMtMjU0MC0gKlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI1NzE9Y29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMjU3Mi1cXHRcXHRcXHRcXHQgaW50IGhpZ2hlc3Rfem9uZWlkeCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxcbm1tL2NvbXBhY3Rpb24uYzoyNTczOlxcdFxcdFxcdFxcdCBib29sIGFzeW5jLCBib29sIGtjb21wYWN0ZClcXG5tbS9jb21wYWN0aW9uLmMtMjU3NC17XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU3OC1cXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmM6MjU3OTpcXHRcXHRcXHRcXHRcXHQgICAgICAga2NvbXBhY3RkIFxcdTAwMjZcXHUwMDI2IGRlZnJhZ19tb2RlKTtcXG5tbS9jb21wYWN0aW9uLmMtMjU4MC1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zMDIzPXN0YXRpYyBpbnQgY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzAzOS1cXHRcXHRcXHRwZ2RhdC1cXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IHRydWU7XFxubW0vY29tcGFjdGlvbi5jOjMwNDA6XFx0XFx0XFx0dHJhY2VfbW1fY29tcGFjdGlvbl93YWtldXBfa2NvbXBhY3RkKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCAtMSxcXG5tbS9jb21wYWN0aW9uLmMtMzA0MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBnZGF0LVxcdTAwM2Vucl96b25lcyAtIDEpO1xcbm1tL2NvbXBhY3Rpb24uYzozMDQyOlxcdFxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF93YWl0KTtcXG5tbS9jb21wYWN0aW9uLmMtMzA0My1cXHRcXHR9XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzA5ND12b2lkIGNvbXBhY3Rpb25fdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMwOTktXFxubW0vY29tcGFjdGlvbi5jOjMxMDA6c3RhdGljIGlubGluZSBib29sIGtjb21wYWN0ZF93b3JrX3JlcXVlc3RlZChwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL2NvbXBhY3Rpb24uYy0zMTAxLXtcXG5tbS9jb21wYWN0aW9uLmM6MzEwMjpcXHRyZXR1cm4gcGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIgXFx1MDAzZSAwIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fFxcbm1tL2NvbXBhY3Rpb24uYy0zMTAzLVxcdFxcdHBnZGF0LVxcdTAwM2Vwcm9hY3RpdmVfY29tcGFjdF90cmlnZ2VyO1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxMDUtXFxubW0vY29tcGFjdGlvbi5jOjMxMDY6c3RhdGljIGJvb2wga2NvbXBhY3RkX25vZGVfc3VpdGFibGUocGdfZGF0YV90ICpwZ2RhdClcXG5tbS9jb21wYWN0aW9uLmMtMzEwNy17XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzEwOS1cXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG5tbS9jb21wYWN0aW9uLmM6MzExMDpcXHRlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHggPSBwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeDtcXG5tbS9jb21wYWN0aW9uLmMtMzExMS1cXHRlbnVtIGNvbXBhY3RfcmVzdWx0IHJldDtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMTIxLVxcdFxcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHpvbmUsXFxubW0vY29tcGFjdGlvbi5jOjMxMjI6XFx0XFx0XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTMxMjMtXFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4LCBhbGxvY19mbGFncyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMTMxLVxcbm1tL2NvbXBhY3Rpb24uYzozMTMyOnN0YXRpYyB2b2lkIGtjb21wYWN0ZF9kb193b3JrKHBnX2RhdGFfdCAqcGdkYXQpXFxubW0vY29tcGFjdGlvbi5jLTMxMzMte1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxNDAtXFx0c3RydWN0IGNvbXBhY3RfY29udHJvbCBjYyA9IHtcXG5tbS9jb21wYWN0aW9uLmM6MzE0MTpcXHRcXHQub3JkZXIgPSBwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX21heF9vcmRlcixcXG5tbS9jb21wYWN0aW9uLmM6MzE0MjpcXHRcXHQuc2VhcmNoX29yZGVyID0gcGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jOjMxNDM6XFx0XFx0LmhpZ2hlc3Rfem9uZWlkeCA9IHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfaGlnaGVzdF96b25laWR4LFxcbm1tL2NvbXBhY3Rpb24uYy0zMTQ0LVxcdFxcdC5tb2RlID0gTUlHUkFURV9TWU5DX0xJR0hULFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxNTAtXFxubW0vY29tcGFjdGlvbi5jOjMxNTE6XFx0dHJhY2VfbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfd2FrZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgY2Mub3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTMxNTItXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2MuaGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMjA1LVxcdCAqL1xcbm1tL2NvbXBhY3Rpb24uYzozMjA2OlxcdGlmIChwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciBcXHUwMDNjPSBjYy5vcmRlcilcXG5tbS9jb21wYWN0aW9uLmM6MzIwNzpcXHRcXHRwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciA9IDA7XFxubW0vY29tcGFjdGlvbi5jOjMyMDg6XFx0aWYgKHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfaGlnaGVzdF96b25laWR4IFxcdTAwM2U9IGNjLmhpZ2hlc3Rfem9uZWlkeClcXG5tbS9jb21wYWN0aW9uLmM6MzIwOTpcXHRcXHRwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCA9IHBnZGF0LVxcdTAwM2Vucl96b25lcyAtIDE7XFxubW0vY29tcGFjdGlvbi5jLTMyMTAtfVxcbm1tL2NvbXBhY3Rpb24uYy0zMjExLVxcbm1tL2NvbXBhY3Rpb24uYzozMjEyOnZvaWQgd2FrZXVwX2tjb21wYWN0ZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxubW0vY29tcGFjdGlvbi5jLTMyMTMte1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMyMTYtXFxubW0vY29tcGFjdGlvbi5jOjMyMTc6XFx0aWYgKHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyIFxcdTAwM2Mgb3JkZXIpXFxubW0vY29tcGFjdGlvbi5jOjMyMTg6XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIgPSBvcmRlcjtcXG5tbS9jb21wYWN0aW9uLmMtMzIxOS1cXG5tbS9jb21wYWN0aW9uLmM6MzIyMDpcXHRpZiAocGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHggXFx1MDAzZSBoaWdoZXN0X3pvbmVpZHgpXFxubW0vY29tcGFjdGlvbi5jOjMyMjE6XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHggPSBoaWdoZXN0X3pvbmVpZHg7XFxubW0vY29tcGFjdGlvbi5jLTMyMjItXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzIyNi1cXHQgKi9cXG5tbS9jb21wYWN0aW9uLmM6MzIyNzpcXHRpZiAoIXdxX2hhc19zbGVlcGVyKFxcdTAwMjZwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX3dhaXQpKVxcbm1tL2NvbXBhY3Rpb24uYy0zMjI4LVxcdFxcdHJldHVybjtcXG5tbS9jb21wYWN0aW9uLmMtMzIyOS1cXG5tbS9jb21wYWN0aW9uLmM6MzIzMDpcXHRpZiAoIWtjb21wYWN0ZF9ub2RlX3N1aXRhYmxlKHBnZGF0KSlcXG5tbS9jb21wYWN0aW9uLmMtMzIzMS1cXHRcXHRyZXR1cm47XFxubW0vY29tcGFjdGlvbi5jLTMyMzItXFxubW0vY29tcGFjdGlvbi5jOjMyMzM6XFx0dHJhY2VfbW1fY29tcGFjdGlvbl93YWtldXBfa2NvbXBhY3RkKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMzIzNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL2NvbXBhY3Rpb24uYzozMjM1OlxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF93YWl0KTtcXG5tbS9jb21wYWN0aW9uLmMtMzIzNi19XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzI0MS0gKi9cXG5tbS9jb21wYWN0aW9uLmM6MzI0MjpzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxcbm1tL2NvbXBhY3Rpb24uYy0zMjQzLXtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMjUwLVxcbm1tL2NvbXBhY3Rpb24uYzozMjUxOlxcdHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyID0gMDtcXG5tbS9jb21wYWN0aW9uLmM6MzI1MjpcXHRwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCA9IHBnZGF0LVxcdTAwM2Vucl96b25lcyAtIDE7XFxubW0vY29tcGFjdGlvbi5jLTMyNTMtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzI2Mi1cXHRcXHRcXHR0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7XFxubW0vY29tcGFjdGlvbi5jOjMyNjM6XFx0XFx0dHJhY2VfbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfc2xlZXAocGdkYXQtXFx1MDAzZW5vZGVfaWQpO1xcbm1tL2NvbXBhY3Rpb24uYzozMjY0OlxcdFxcdGlmICh3YWl0X2V2ZW50X2ZyZWV6YWJsZV90aW1lb3V0KHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfd2FpdCxcXG5tbS9jb21wYWN0aW9uLmM6MzI2NTpcXHRcXHRcXHRrY29tcGFjdGRfd29ya19yZXF1ZXN0ZWQocGdkYXQpLCB0aW1lb3V0KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2NvbXBhY3Rpb24uYy0zMjY2LVxcdFxcdFxcdCFwZ2RhdC1cXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlcikge1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMyNjgtXFx0XFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL2NvbXBhY3Rpb24uYzozMjY5OlxcdFxcdFxcdGtjb21wYWN0ZF9kb193b3JrKHBnZGF0KTtcXG5tbS9jb21wYWN0aW9uLmMtMzI3MC1cXHRcXHRcXHRwc2lfbWVtc3RhbGxfbGVhdmUoXFx1MDAyNnBmbGFncyk7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzMxMS0vKlxcbm1tL2NvbXBhY3Rpb24uYzozMzEyOiAqIFRoaXMga2NvbXBhY3RkIHN0YXJ0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGluaXQgYW5kIG5vZGUtaG90LWFkZC5cXG5tbS9jb21wYWN0aW9uLmM6MzMxMzogKiBPbiBub2RlLWhvdC1hZGQsIGtjb21wYWN0ZCB3aWxsIG1vdmVkIHRvIHByb3BlciBjcHVzIGlmIGNwdXMgYXJlIGhvdC1hZGRlZC5cXG5tbS9jb21wYWN0aW9uLmMtMzMxNC0gKi9cXG5tbS9jb21wYWN0aW9uLmM6MzMxNTp2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfcnVuKGludCBuaWQpXFxubW0vY29tcGFjdGlvbi5jLTMzMTYte1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMzMTgtXFxubW0vY29tcGFjdGlvbi5jOjMzMTk6XFx0aWYgKHBnZGF0LVxcdTAwM2VrY29tcGFjdGQpXFxubW0vY29tcGFjdGlvbi5jLTMzMjAtXFx0XFx0cmV0dXJuO1xcbm1tL2NvbXBhY3Rpb24uYy0zMzIxLVxcbm1tL2NvbXBhY3Rpb24uYzozMzIyOlxcdHBnZGF0LVxcdTAwM2VrY29tcGFjdGQgPSBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKGtjb21wYWN0ZCwgcGdkYXQsIG5pZCwgXFxcImtjb21wYWN0ZCVkXFxcIiwgbmlkKTtcXG5tbS9jb21wYWN0aW9uLmM6MzMyMzpcXHRpZiAoSVNfRVJSKHBnZGF0LVxcdTAwM2VrY29tcGFjdGQpKSB7XFxubW0vY29tcGFjdGlvbi5jOjMzMjQ6XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gc3RhcnQga2NvbXBhY3RkIG9uIG5vZGUgJWRcXFxcblxcXCIsIG5pZCk7XFxubW0vY29tcGFjdGlvbi5jOjMzMjU6XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZCA9IE5VTEw7XFxubW0vY29tcGFjdGlvbi5jLTMzMjYtXFx0fSBlbHNlIHtcXG5tbS9jb21wYWN0aW9uLmM6MzMyNzpcXHRcXHR3YWtlX3VwX3Byb2Nlc3MocGdkYXQtXFx1MDAzZWtjb21wYWN0ZCk7XFxubW0vY29tcGFjdGlvbi5jLTMzMjgtXFx0fVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMzMzQtICovXFxubW0vY29tcGFjdGlvbi5jOjMzMzU6dm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3N0b3AoaW50IG5pZClcXG5tbS9jb21wYWN0aW9uLmMtMzMzNi17XFxubW0vY29tcGFjdGlvbi5jOjMzMzc6XFx0c3RydWN0IHRhc2tfc3RydWN0ICprY29tcGFjdGQgPSBOT0RFX0RBVEEobmlkKS1cXHUwMDNla2NvbXBhY3RkO1xcbm1tL2NvbXBhY3Rpb24uYy0zMzM4LVxcbm1tL2NvbXBhY3Rpb24uYzozMzM5OlxcdGlmIChrY29tcGFjdGQpIHtcXG5tbS9jb21wYWN0aW9uLmM6MzM0MDpcXHRcXHRrdGhyZWFkX3N0b3Aoa2NvbXBhY3RkKTtcXG5tbS9jb21wYWN0aW9uLmM6MzM0MTpcXHRcXHROT0RFX0RBVEEobmlkKS1cXHUwMDNla2NvbXBhY3RkID0gTlVMTDtcXG5tbS9jb21wYWN0aW9uLmMtMzM0Mi1cXHR9XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzM2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bV9jb21wYWN0aW9uW10gPSB7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzQwMC1cXG5tbS9jb21wYWN0aW9uLmM6MzQwMTpzdGF0aWMgaW50IF9faW5pdCBrY29tcGFjdGRfaW5pdCh2b2lkKVxcbm1tL2NvbXBhY3Rpb24uYy0zNDAyLXtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zNDA1LVxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcXG5tbS9jb21wYWN0aW9uLmM6MzQwNjpcXHRcXHRrY29tcGFjdGRfcnVuKG5pZCk7XFxubW0vY29tcGFjdGlvbi5jLTM0MDctXFx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXFxcInZtXFxcIiwgdm1fY29tcGFjdGlvbik7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzQwOS19XFxubW0vY29tcGFjdGlvbi5jOjM0MTA6c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxcbm1tL2NvbXBhY3Rpb24uYy0zNDExLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDgxPWdmcF90IHZtYV90aHBfZ2ZwX21hc2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0ODgtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDg5OlxcdC8qIEtpY2sga2NvbXBhY3RkIGFuZCBmYWlsIHF1aWNrbHkgKi9cXG5tbS9odWdlX21lbW9yeS5jLTE0OTAtXFx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19LU1dBUERfRkxBRywgXFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ5Mi1cXG5tbS9odWdlX21lbW9yeS5jOjE0OTM6XFx0LyogU3luY2hyb25vdXMgY29tcGFjdGlvbiBpZiBtYWR2aXNlZCwgb3RoZXJ3aXNlIGtpY2sga2NvbXBhY3RkICovXFxubW0vaHVnZV9tZW1vcnkuYy0xNDk0LVxcdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfS1NXQVBEX09SX01BRFZfRkxBRywgXFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcXG4tLVxcbm1tL2ludGVybmFsLmg9ODIzPXN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xcbi0tXFxubW0vaW50ZXJuYWwuaC04NTAtXFx0Ym9vbCBpZ25vcmVfYmxvY2tfc3VpdGFibGU7XFx0LyogU2NhbiBibG9ja3MgY29uc2lkZXJlZCB1bnN1aXRhYmxlICovXFxubW0vaW50ZXJuYWwuaDo4NTE6XFx0Ym9vbCBkaXJlY3RfY29tcGFjdGlvbjtcXHRcXHQvKiBGYWxzZSBmcm9tIGtjb21wYWN0ZCBvciAvcHJvYy8uLi4gKi9cXG5tbS9pbnRlcm5hbC5oOjg1MjpcXHRib29sIHByb2FjdGl2ZV9jb21wYWN0aW9uO1xcdC8qIGtjb21wYWN0ZCBwcm9hY3RpdmUgY29tcGFjdGlvbiAqL1xcbm1tL2ludGVybmFsLmgtODUzLVxcdGJvb2wgd2hvbGVfem9uZTtcXHRcXHQvKiBXaG9sZSB6b25lIHNob3VsZC9oYXMgYmVlbiBzY2FubmVkICovXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTExNDA9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzMi1cXHRrc3dhcGRfcnVuKG5pZCk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjMzOlxcdGtjb21wYWN0ZF9ydW4obmlkKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMzQtXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5NTU9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxNDMtXFx0aWYgKG5vZGVfYXJnLm5pZCBcXHUwMDNlPSAwKSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMTQ0OlxcdFxcdGtjb21wYWN0ZF9zdG9wKG5vZGUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE0NS1cXHRcXHRrc3dhcGRfc3RvcChub2RlKTtcXG4tLVxcbm1tL21tX2luaXQuYz0xMzMxPXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTM3NC0jaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9tbV9pbml0LmM6MTM3NTpzdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbm1tL21tX2luaXQuYy0xMzc2LXtcXG5tbS9tbV9pbml0LmM6MTM3NzpcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX3dhaXQpO1xcbm1tL21tX2luaXQuYy0xMzc4LX1cXG5tbS9tbV9pbml0LmMtMTM3OS0jZWxzZVxcbm1tL21tX2luaXQuYzoxMzgwOnN0YXRpYyB2b2lkIHBnZGF0X2luaXRfa2NvbXBhY3RkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpIHt9XFxubW0vbW1faW5pdC5jLTEzODEtI2VuZGlmXFxuLS1cXG5tbS9tbV9pbml0LmM9MTM4Mz1zdGF0aWMgdm9pZCBfX21lbWluaXQgcGdkYXRfaW5pdF9pbnRlcm5hbHMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL21tX2luaXQuYy0xMzg4LVxcdHBnZGF0X2tzd2FwZF9sb2NrX2luaXQocGdkYXQpO1xcbm1tL21tX2luaXQuYzoxMzg5OlxcdHBnZGF0X2luaXRfa2NvbXBhY3RkKHBnZGF0KTtcXG5tbS9tbV9pbml0LmMtMTM5MC1cXG4tLVxcbm1tL3NsdWIuYz02ODYxPXN0YXRpYyBnZnBfdCBrbWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTY4NjgtXFx0ICogZG8gbm90IGRpcmVjdCByZWNsYWltIHVubGVzcyBwaHlzaWNhbGx5IGNvbnRpbnVvdXMgbWVtb3J5IGlzIHByZWZlcnJlZFxcbm1tL3NsdWIuYzo2ODY5OlxcdCAqIChfX0dGUF9SRVRSWV9NQVlGQUlMIG1vZGUpLiBXZSBzdGlsbCBraWNrIGluIGtzd2FwZC9rY29tcGFjdGQgdG9cXG5tbS9zbHViLmMtNjg3MC1cXHQgKiBzdGFydCB3b3JraW5nIGluIHRoZSBiYWNrZ3JvdW5kXFxuLS1cXG5tbS92bXNjYW4uYz03MTM5PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MzQxLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjczNDI6XFx0XFx0d2FrZXVwX2tjb21wYWN0ZChwZ2RhdCwgcGFnZWJsb2NrX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTczNDMtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9NzM3Nz1zdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy03Mzg4LVxcdC8qXFxubW0vdm1zY2FuLmM6NzM4OTpcXHQgKiBUcnkgdG8gc2xlZXAgZm9yIGEgc2hvcnQgaW50ZXJ2YWwuIE5vdGUgdGhhdCBrY29tcGFjdGQgd2lsbCBvbmx5IGJlXFxubW0vdm1zY2FuLmMtNzM5MC1cXHQgKiB3b2tlbiBpZiBpdCBpcyBwb3NzaWJsZSB0byBzbGVlcCBmb3IgYSBzaG9ydCBpbnRlcnZhbC4gVGhpcyBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzQwNy1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3NDA4OlxcdFxcdHdha2V1cF9rY29tcGFjdGQocGdkYXQsIGFsbG9jX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc0MDktXFxuLS1cXG5tbS92bXNjYW4uYz03NDc0PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxuLS1cXG5tbS92bXNjYW4uYy03NTMxLVxcdFxcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcXG5tbS92bXNjYW4uYzo3NTMyOlxcdFxcdCAqIGJ1dCBrY29tcGFjdGQgaXMgd29rZW4gdG8gY29tcGFjdCBmb3IgdGhlIG9yaWdpbmFsXFxubW0vdm1zY2FuLmMtNzUzMy1cXHRcXHQgKiByZXF1ZXN0IChhbGxvY19vcmRlcikuXFxuLS1cXG5tbS92bXNjYW4uYy03NTUwLSAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXFxubW0vdm1zY2FuLmM6NzU1MTogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxcbm1tL3Ztc2Nhbi5jOjc1NTI6ICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcXG5tbS92bXNjYW4uYy03NTUzLSAqIG5lZWRlZC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NTU9dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1ODQtXFx0XFx0ICogVGhlcmUgbWF5IGJlIHBsZW50eSBvZiBmcmVlIG1lbW9yeSBhdmFpbGFibGUsIGJ1dCBpdCdzIHRvb1xcbm1tL3Ztc2Nhbi5jOjc1ODU6XFx0XFx0ICogZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucy4gIFdha2UgdXAga2NvbXBhY3RkXFxubW0vdm1zY2FuLmMtNzU4Ni1cXHRcXHQgKiBhbmQgcmVseSBvbiBjb21wYWN0aW9uX3N1aXRhYmxlKCkgdG8gZGV0ZXJtaW5lIGlmIGl0J3NcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1OTAtXFx0XFx0aWYgKCEoZ2ZwX2ZsYWdzIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pKVxcbm1tL3Ztc2Nhbi5jOjc1OTE6XFx0XFx0XFx0d2FrZXVwX2tjb21wYWN0ZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzU5Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oPTI2PWVudW0ge1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjQtICogYXJlIGNvbXBvdW5kIGFsbG9jYXRpb25zIHRoYXQgd2lsbCBnZW5lcmFsbHkgZmFpbCBxdWlja2x5IGlmIG1lbW9yeSBpcyBub3RcXG50b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM2NTogKiBhdmFpbGFibGUgYW5kIHdpbGwgbm90IHdha2Uga3N3YXBkL2tjb21wYWN0ZCBvbiBmYWlsdXJlLiBUaGUgX0xJR0hUXFxudG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjYtICogdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHJlY2xhaW0vY29tcGFjdGlvbiBhdCBhbGwgYW5kIGlzIGJ5IGRlZmF1bHQgdXNlZFxcbi0tXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaC0zMi0jZGVmaW5lIFBGX1dRX1dPUktFUlxcdFxcdFxcdDB4MDAwMDAwMjBcXHQvKiBJJ20gYSB3b3JrcXVldWUgd29ya2VyICovXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaDozMzojZGVmaW5lIFBGX0tDT01QQUNURFxcdFxcdFxcdDB4MDAwMTAwMDAgICAgICAvKiBJIGFtIGtjb21wYWN0ZCAqL1xcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmgtMzQtI2RlZmluZSBQRl9LU1dBUERcXHRcXHRcXHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MTYuOTUzNDE5MTMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDIyMjUwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ29tcGFjdGlvbiBmb3IgQ29kZSBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBpZGVudGlmaWVkIHNldmVyYWwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgY29tcGFjdGlvbiBjb2RlIHRoYXQgc2VlbSBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBTcGVjaWZpY2FsbHksIGB3YWtldXBfa2NvbXBhY3RkYCwgYGtjb21wYWN0ZF9ydW5gLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGFuZCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgYWxsIGp1bXBlZCBvdXQgaW1tZWRpYXRlbHkuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaW4gYG1tL2NvbXBhY3Rpb24uY2AgYXMgYSBrZXkgc3ltYm9sLCBnaXZlbiBpdHMgbm9uLXN0YXRpYyBuYXR1cmUuIFNpbWlsYXJseSwgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGlzIGFsc28gbm9uLXN0YXRpYy4gVGhlbiB0aGVyZSdzIGB3YWtldXBfa3N3YXBkYCBhbmQgYHdha2V1cF9rY29tcGFjdGRgIGFuZCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCdzIG1vZGlmeWluZyBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgc2hvdWxkX3Byb2FjdGl2ZV9jb21wYWN0X25vZGVgLCBgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlYCwgYGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZGAsIGFuZCBgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lYCBhcmUgYmVpbmcgdG91Y2hlZCwgYW5kIGFsbCBvZiB0aG9zZSBhcmUgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGtjb21wYWN0ZGAuIFRoZSBwYXRjaCBhbHNvIGFmZmVjdHMgYF9fY29tcGFjdF9maW5pc2hlZGAgKGNhbGxlZCBmcm9tIGBjb21wYWN0X3pvbmVgKSwgYW5kIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgKGNhbGxlZCBmcm9tIGBjb21wYWN0X3pvbmVgLCBga2NvbXBhY3RkX25vZGVfc3VpdGFibGVgLCBhbmQgYGtjb21wYWN0ZF9kb193b3JrYCkuIEFkZGl0aW9uYWxseSwgYHBnZGF0X2JhbGFuY2VkYCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgcHJlcGFyZV9rc3dhcGRfc2xlZXBgLCBgYmFsYW5jZV9wZ2RhdGAsIGB3YWtldXBfa3N3YXBkYCwgYW5kIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYC4gU28sIGRlc3BpdGUgdGhlIHN0YXRpYyBuYXR1cmUsIHRoZXNlIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZSBwYXRjaCAqaXMqIG1vZGlmeWluZyB0aGVtIGluIHJlbGF0aW9uIHRvIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy5cblxuVGhlcmVmb3JlLCB0aGUgbWFpbiBmb2N1cyBpcyBzdGlsbCBvbiB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9uczpcblxuKiAgIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYFxuKiAgIGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYFxuKiAgIGB3YWtldXBfa3N3YXBkYFxuKiAgIGB3YWtldXBfa2NvbXBhY3RkYFxuKiAgIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYFxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMuIFllcywgYWxsIG9mIHRoZW0gYXJlIG5vbi1zdGF0aWMgYXMgSSBpbml0aWFsbHkgdGhvdWdodC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgYXJlYTogYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBhbHNvIGRvdWJsZSBjaGVjayB0aGF0IGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMsIGFzIEkgdGhvdWdodCwgb25seSB0aWVkIHRvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBZZXAsIGNvbmZpcm1lZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgd2l0aCB0aGF0IGNvbmZpZy4gQWxsIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2NDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MjcuOTc1NjcyNjc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAxOTQ3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MjguMjA1ODcyMDk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjg5MjQxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipDaGVja2luZyBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIGlzIGNyeXN0YWwgY2xlYXI6IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUuIE5vIHF1ZXN0aW9uIHRoZXJlLiBOb3csIGxldCdzIG1vdmUgb250byBjb21wYWN0aW9uLCBzcGVjaWZpY2FsbHkgd2hldGhlciBgQ09NUEFDVElPTmAgaXMgbmVjZXNzYXJ5IGluIHRoaXMgY29udGV4dC5cblxuUmlnaHQsIEknbGwgZ28gaGF2ZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHNvdXJjZS4gSXQgbG9va3MgbGlrZSB0aGUga2VybmVsIGNvbXBpbGVzIGBtbS9jb21wYWN0aW9uLmNgIHdoZW4gYENPTkZJR19DT01QQUNUSU9OYCBpcyBkZWZpbmVkLiBHb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzkzMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjMzLjM3NDc5OTM1OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDc5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdGlvbi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTUtXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU2OlxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Ny1cXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcbi0tXFxubW0vYmFsbG9vbi5jPTE4MT1FWFBPUlRfU1lNQk9MX0dQTChiYWxsb29uX3BhZ2VfZW5xdWV1ZSk7XFxuLS1cXG5tbS9iYWxsb29uLmMtMTk1LSAqIHNvbWUgZW5xdWV1ZWQgcGFnZXMgLSBzaW5jZSB0aGUgcGFnZSBsaXN0IGNhbiBiZSB0ZW1wb3JhcmlseSBlbXB0eSBkdWUgdG9cXG5tbS9iYWxsb29uLmM6MTk2OiAqIHRoZSBjb21wYWN0aW9uIG9mIGlzb2xhdGVkIHBhZ2VzLlxcbm1tL2JhbGxvb24uYy0xOTctICpcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNTI9c3RhdGljIGJvb2wgY29tcGFjdGlvbl9kZWZlcnJlZChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE3MC0vKlxcbm1tL2NvbXBhY3Rpb24uYzoxNzE6ICogVXBkYXRlIGRlZmVyIHRyYWNraW5nIGNvdW50ZXJzIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGFjdGlvbiBvZiBnaXZlbiBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMTcyLSAqIHdoaWNoIG1lYW5zIGFuIGFsbG9jYXRpb24gZWl0aGVyIHN1Y2NlZWRlZCAoYWxsb2Nfc3VjY2VzcyA9PSB0cnVlKSBvciBpc1xcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI0MjI9c3RhdGljIGJvb2wgX19jb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjQ0OS0vKlxcbm1tL2NvbXBhY3Rpb24uYzoyNDUwOiAqIGNvbXBhY3Rpb25fc3VpdGFibGU6IElzIHRoaXMgc3VpdGFibGUgdG8gcnVuIGNvbXBhY3Rpb24gb24gdGhpcyB6b25lIG5vdz9cXG5tbS9jb21wYWN0aW9uLmMtMjQ1MS0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzMuNDIyODUzMjI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODc1MTkxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHVuZm9sZGVkOlxuXG4qKlVucGFja2luZyBhIENvbXBpbGF0aW9uIE15c3RlcnkqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBjb21wYWN0aW9uIGNvZGUgaW4gYG1tL2NvbXBhY3Rpb24uY2AgaGFkIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGJ1dCBub3cgSSdtIHF1ZXN0aW9uaW5nIHRoYXQuIFdoeSBhcmUgd2UgY29tcGlsaW5nIGl0IHVuY29uZGl0aW9uYWxseT8gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIExldCdzIGRpZyBpbiBhbmQgY29uZmlybS4gRmlyc3QsIEknbGwgY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBiZWluZyBoYW5kbGVkLiBBaCwgdGhlcmUgaXQgaXM6IGBvYmoteSA6PSAuLi4gY29tcGFjdGlvbi5vIC4uLmAuIFRoZSBgY29tcGFjdGlvbi5vYCAqaXMqIGxpc3RlZCB1bmRlciBgb2JqLXlgLiBTbywgaXQgKmlzKiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQgaW50byB0aGUga2VybmVsIGltYWdlLiBUaGF04oCZcyBvZGQuIExldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYG1tL2NvbXBhY3Rpb24uY2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQncyBub3QgZ3VhcmRlZCBieSBzb21lIGZlYXR1cmUgZmxhZyBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgcGVyZm9ybWFuY2Ugb3IgbWVtb3J5IGltcGxpY2F0aW9ucyBpZiBjb21wYWN0aW9uIGlzbid0IGFjdHVhbGx5IGJlaW5nIHVzZWQgaW4gYSBzcGVjaWZpYyBidWlsZC4gSXQgd291bGQgYmUgZ29vZCB0byBzZWUgd2h5IGl0J3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0LCBiZWNhdXNlIHRoYXQncyBub3Qgd2hhdCBJIGV4cGVjdGVkLiBJJ2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTE2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzkuMDEwMzc1MDg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMwMTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jb21wYWN0aW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY29tcGFjdGlvbi5jLTMwLVxcbm1tL2NvbXBhY3Rpb24uYzozMTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMzItLypcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz02MT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy02My1cXG5tbS9jb21wYWN0aW9uLmM6NjQ6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXFxubW0vY29tcGFjdGlvbi5jLTY1LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTI2LVxcbm1tL2NvbXBhY3Rpb24uYzoxMjc6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTEyOC1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTUwNC19XFxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9jb21wYWN0aW9uLmMtNTA2LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTEzODgtXFxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cXG5tbS9jb21wYWN0aW9uLmM6MTM5MDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMTM5MS1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zNDEwPXN1YnN5c19pbml0Y2FsbChrY29tcGFjdGRfaW5pdClcXG5tbS9jb21wYWN0aW9uLmMtMzQxMS1cXG5tbS9jb21wYWN0aW9uLmM6MzQxMjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzkuMDU1NjgwMTUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjUyMDI0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29tcGFjdGlvbiBNb2R1bGUgTXVzaW5ncyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IGBtbS9jb21wYWN0aW9uLmNgLiBJdCdzIGNvbXBpbGVkIGluIGFsbCBjb25maWd1cmF0aW9ucywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCwgSSBrbm93IGEgbG90IG9mIHRoZSBhY3R1YWwgY29kZSAqd2l0aGluKiB0aGF0IGZpbGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcHJpbWFyaWx5IHVzaW5nIGAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05gLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgc29tZXRoaW5nIHNwZWNpZmljLi4uIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGUgZnVuY3Rpb24gYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGlzICphbHNvKiBndWFyZGVkIGJ5IHRoYXQgc2FtZSBtYWNyby4gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBob3cgcm9idXN0IHRoZSBjb21wYWN0aW9uIGNvbmZpZ3VyYXRpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NDIuNzgwODg1MjI4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY2MTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9MjQ5Nz1ib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjUzMS0vKipcXG5tbS9jb21wYWN0aW9uLmM6MjUzMjogKiB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzIC0gZ2V0IGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gYWxsb2NhdGlvbiBvcmRlclxcbm1tL2NvbXBhY3Rpb24uYy0yNTMzLSAqIEB6b25lOiAgICAgICB0YXJnZXQgem9uZVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI1NDQtICovXFxubW0vY29tcGFjdGlvbi5jOjI1NDU6dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxcbm1tL2NvbXBhY3Rpb24uYy0yNTQ2LVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNTcxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU3Ny1cXG5tbS9jb21wYWN0aW9uLmM6MjU3ODpcXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMjU3OS1cXHRcXHRcXHRcXHRcXHQgICAgICAga2NvbXBhY3RkIFxcdTAwMjZcXHUwMDI2IGRlZnJhZ19tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NDIuODI0NTUzNjI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjM1NjIzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYCNpZmRlZmAgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYC4gVGhpcyBzdWdnZXN0cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNjZW5hcmlvLCBtZWFuaW5nIHRoZSBwcmVzZW5jZSBhbmQvb3IgYmVoYXZpb3Igb2YgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGlzIGRlcGVuZGVudCBvbiBhIHNwZWNpZmljIHByZXByb2Nlc3NvciBkZWZpbml0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VhcmNoIGZvciB0aGF0IG1hY3JvIGRlZmluaXRpb24uIEknbGwgbGlrZWx5IHVzZSBhIHRvb2wgb3IgbXkgSURFJ3Mgc2VhcmNoIGZ1bmN0aW9uIGZvciB0aGlzLiBTaW5jZSBJIGhhdmUgZXhwZXJpZW5jZSBpbiB0aGlzIGZpZWxkLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjZGVmaW5lYCBvciBgI3VuZGVmYCBhbmQsIG9mIGNvdXJzZSwgdGhlIGAjaWZkZWZgIGJsb2NrIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250ZXh0IGRldGVybWluZXMgdGhlIGVmZmVjdGl2ZSB1c2Ugb2YgdGhhdCBibG9jay4gT25jZSBJIGxvY2F0ZSBpdCwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGFsbCBhYm91dC4gVGhpcyBtYXkgcmVxdWlyZSB1bmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBleGFtaW5pbmcgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTgxMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjQ3Ljg0ODExODAxOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vY29tcGFjdGlvbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDkwOlxcdFxcbjI0OTE6XFx0XFx0dHJhY2VfbW1fY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBvcmRlciwgY29tcGFjdF9yZXN1bHQpO1xcbjI0OTI6XFx0XFxuMjQ5MzpcXHRcXHRyZXR1cm4gc3VpdGFibGU7XFxuMjQ5NDpcXHR9XFxuMjQ5NTpcXHRcXG4yNDk2OlxcdC8qIFVzZWQgYnkgZGlyZWN0IHJlY2xhaW1lcnMgKi9cXG4yNDk3OlxcdGJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4yNDk4OlxcdFxcdFxcdGludCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXFxuMjQ5OTpcXHR7XFxuMjUwMDpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4yNTAxOlxcdFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbjI1MDI6XFx0XFxuMjUwMzpcXHRcXHQvKlxcbjI1MDQ6XFx0XFx0ICogTWFrZSBzdXJlIGF0IGxlYXN0IG9uZSB6b25lIHdvdWxkIHBhc3MgX19jb21wYWN0aW9uX3N1aXRhYmxlIGlmIHdlIGNvbnRpbnVlXFxuMjUwNTpcXHRcXHQgKiByZXRyeWluZyB0aGUgcmVjbGFpbS5cXG4yNTA2OlxcdFxcdCAqL1xcbjI1MDc6XFx0XFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy1cXHUwMDNlem9uZWxpc3QsXFxuMjUwODpcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LCBhYy1cXHUwMDNlbm9kZW1hc2spIHtcXG4yNTA5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXZhaWxhYmxlO1xcbjI1MTA6XFx0XFxuMjUxMTpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjI1MTI6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwX21hc2spKVxcbjI1MTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjUxNDpcXHRcXG4yNTE1OlxcdFxcdFxcdC8qXFxuMjUxNjpcXHRcXHRcXHQgKiBEbyBub3QgY29uc2lkZXIgYWxsIHRoZSByZWNsYWltYWJsZSBtZW1vcnkgYmVjYXVzZSB3ZSBkbyBub3RcXG4yNTE3OlxcdFxcdFxcdCAqIHdhbnQgdG8gdHJhc2gganVzdCBmb3IgYSBzaW5nbGUgaGlnaCBvcmRlciBhbGxvY2F0aW9uIHdoaWNoXFxuMjUxODpcXHRcXHRcXHQgKiBpcyBldmVuIG5vdCBndWFyYW50ZWVkIHRvIGFwcGVhciBldmVuIGlmIF9fY29tcGFjdGlvbl9zdWl0YWJsZVxcbjI1MTk6XFx0XFx0XFx0ICogaXMgaGFwcHkgYWJvdXQgdGhlIHdhdGVybWFyayBjaGVjay5cXG4yNTIwOlxcdFxcdFxcdCAqL1xcbjI1MjE6XFx0XFx0XFx0YXZhaWxhYmxlID0gem9uZV9yZWNsYWltYWJsZV9wYWdlcyh6b25lKSAvIG9yZGVyO1xcbjI1MjI6XFx0XFx0XFx0YXZhaWxhYmxlICs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKTtcXG4yNTIzOlxcdFxcdFxcdGlmIChfX2NvbXBhY3Rpb25fc3VpdGFibGUoem9uZSwgb3JkZXIsIG1pbl93bWFya19wYWdlcyh6b25lKSxcXG4yNTI0OlxcdFxcdFxcdFxcdFxcdFxcdCAgYWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYXZhaWxhYmxlKSlcXG4yNTI1OlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI1MjY6XFx0XFx0fVxcbjI1Mjc6XFx0XFxuMjUyODpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjUyOTpcXHR9XFxuMjUzMDpcXHRcXG4yNTMxOlxcdC8qKlxcbjI1MzI6XFx0ICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXJcXG4yNTMzOlxcdCAqIEB6b25lOiAgICAgICB0YXJnZXQgem9uZVxcbjI1MzQ6XFx0ICogQG9yZGVyOiAgICAgIGFsbG9jYXRpb24gb3JkZXJcXG4yNTM1OlxcdCAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1NcXG4yNTM2OlxcdCAqXFxuMjUzNzpcXHQgKiBJbiBkZWZyYWdfbW9kZSwgd2F0ZXJtYXJrcyBtdXN0IGJlIG1ldCBpbiB3aG9sZSBibG9ja3MgdG8gYXZvaWRcXG4yNTM4OlxcdCAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaFxcbjI1Mzk6XFx0ICogdGhpcyBvbiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC5cXG4yNTQwOlxcdCAqXFxuMjU0MTpcXHQgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXNcXG4yNTQyOlxcdCAqIGluIGJsb2NrcyBcXHUwMDNlPSBtaW4gbVRIUCBvcmRlciwgYXMgc21hbGxlciBmcmFnbWVudHMgY2Fubm90IHNhdGlzZnkgbVRIUFxcbjI1NDM6XFx0ICogYWxsb2NhdGlvbnMuXFxuMjU0NDpcXHQgKi9cXG4yNTQ1OlxcdHVuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcXG4yNTQ2OlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcixcXG4yNTQ3OlxcdFxcdFxcdFxcdFxcdFxcdGJvb2wgdXNlX2Jsb2NrcylcXG4yNTQ4OlxcdHtcXG4yNTQ5OlxcdFxcdGlmICh1c2VfYmxvY2tzKVxcbjI1NTA6XFx0XFx0XFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XFxuMjU1MTpcXHRcXG4yNTUyOlxcdFxcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFxcdTAwMjZcXHUwMDI2IG9yZGVyID09IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSkge1xcbjI1NTM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcXG4yNTU0OlxcdFxcbjI1NTU6XFx0XFx0XFx0Zm9yIChpbnQgbyA9IG9yZGVyOyBvIFxcdTAwM2MgTlJfUEFHRV9PUkRFUlM7IG8rKylcXG4yNTU2OlxcdFxcdFxcdFxcdGZyZWVfcGFnZXMgKz0gem9uZS1cXHUwMDNlZnJlZV9hcmVhW29dLm5yX2ZyZWUgXFx1MDAzY1xcdTAwM2MgbztcXG4yNTU3OlxcdFxcdFxcdHJldHVybiBmcmVlX3BhZ2VzO1xcbjI1NTg6XFx0XFx0fVxcbjI1NTk6XFx0XFxuMjU2MDpcXHRcXHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xcbjI1NjE6XFx0fVxcbjI1NjI6XFx0XFxuMjU2MzpcXHQvKlxcbjI1NjQ6XFx0ICogU2hvdWxkIHdlIGRvIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBhbGxvY2F0aW9uIG9yZGVyLlxcbjI1NjU6XFx0ICogUmV0dXJuIENPTVBBQ1RfU1VDQ0VTUyBpZiBhbGxvY2F0aW9uIGZvciB0YXJnZXQgb3JkZXIgY2FuIGJlIGFscmVhZHlcXG4yNTY2OlxcdCAqIHNhdGlzZmllZFxcbjI1Njc6XFx0ICogUmV0dXJuIENPTVBBQ1RfU0tJUFBFRCBpZiBjb21wYWN0aW9uIGZvciB0YXJnZXQgb3JkZXIgaXMgbGlrZWx5IHRvIGZhaWxcXG4yNTY4OlxcdCAqIFJldHVybiBDT01QQUNUX0NPTlRJTlVFIGlmIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBvcmRlciBzaG91bGQgYmUgcmFuXFxuMjU2OTpcXHQgKi9cXG4yNTcwOlxcdHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XFxuMjU3MTpcXHRjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjI1NzI6XFx0XFx0XFx0XFx0XFx0IGludCBoaWdoZXN0X3pvbmVpZHgsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4yNTczOlxcdFxcdFxcdFxcdFxcdCBib29sIGFzeW5jLCBib29sIGtjb21wYWN0ZClcXG4yNTc0OlxcdHtcXG4yNTc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcztcXG4yNTc2OlxcdFxcdHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrO1xcbjI1Nzc6XFx0XFxuMjU3ODpcXHRcXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcXG4yNTc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBrY29tcGFjdGQgXFx1MDAyNlxcdTAwMjYgZGVmcmFnX21vZGUpO1xcbjI1ODA6XFx0XFxuMjU4MTpcXHRcXHR3YXRlcm1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xcbjI1ODI6XFx0XFx0aWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LFxcbjI1ODM6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGZyZWVfcGFnZXMpKVxcbjI1ODQ6XFx0XFx0XFx0cmV0dXJuIENPTVBBQ1RfU1VDQ0VTUztcXG4yNTg1OlxcdFxcbjI1ODY6XFx0XFx0LypcXG4yNTg3OlxcdFxcdCAqIEZvciB1bm1vdmFibGUgYWxsb2NhdGlvbnMgKHdpdGhvdXQgQUxMT0NfQ01BKSwgY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoXFxuMjU4ODpcXHRcXHQgKiBmcmVlIG1lbW9yeSBpbiB0aGUgbm9uLUNNQSBwYWdlYmxvY2tzLiBPdGhlcndpc2UgY29tcGFjdGlvbiBjb3VsZCBmb3JtXFxuMjU4OTpcXHRcXHQgKiB0aGUgaGlnaC1vcmRlciBwYWdlIGluIENNQSBwYWdlYmxvY2tzLCB3aGljaCB3b3VsZCBub3QgaGVscCB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NDcuODQ4Mjg5OTA4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjkwOTEyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29tcGFjdGlvbiBDb2RlIExvY2F0aW9uIENoZWNrKipcblxuT2theSwgc28gSSdtIHByZXR0eSBzdXJlIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGlzIHdpdGhpbiBgbW0vY29tcGFjdGlvbi5jYC4gQW5kIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwsIGl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgZmlsZSBpcyBvbmx5IHJlbGV2YW50IGlmIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgZGVmaW5lZC4gVGhlcmVmb3JlLCBJIHNob3VsZCBzdGFydCBieSBjb25maXJtaW5nIHRoYXQsIHBlcmhhcHMgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IGAjaWZkZWZgIGJsb2NrLiBMZXQncyBnbyBhaGVhZCBhbmQgdGFrZSBhIHBlZWsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYG1tL2NvbXBhY3Rpb24uY2AgZmlsZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSwgYXQgdGhlIHRvcCwgYW5kIGdldCBhbiBvdmVydmlldyBvZiB0aGUgY29kZSBvcmdhbml6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTkxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjo1MS42NzczODQzNThaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIGxpbnV4L21tL2NvbXBhY3Rpb24uY1xcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIE1lbW9yeSBjb21wYWN0aW9uIGZvciB0aGUgcmVkdWN0aW9uIG9mIGV4dGVybmFsIGZyYWdtZW50YXRpb24uIE5vdGUgdGhhdFxcbiAgIDY6XFx0ICogdGhpcyBoZWF2aWx5IGRlcGVuZHMgdXBvbiBwYWdlIG1pZ3JhdGlvbiB0byBkbyBhbGwgdGhlIHJlYWwgaGVhdnlcXG4gICA3OlxcdCAqIGxpZnRpbmdcXG4gICA4OlxcdCAqXFxuICAgOTpcXHQgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDctMjAxMCBNZWwgR29ybWFuIFxcdTAwM2NtZWxAY3NuLnVsLmllXFx1MDAzZVxcbiAgMTA6XFx0ICovXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1LmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wYWN0aW9uLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1faW5saW5lLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjdGwuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNmcy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2FzYW4uaFxcdTAwM2VcXG4gIDIyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2kuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVzZXQuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdlX21tLmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXFwicGFnZV9hbGxvYy5oXFxcIlxcbiAgMjk6XFx0I2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICAzMDpcXHRcXG4gIDMxOlxcdCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbiAgMzI6XFx0LypcXG4gIDMzOlxcdCAqIEZyYWdtZW50YXRpb24gc2NvcmUgY2hlY2sgaW50ZXJ2YWwgZm9yIHByb2FjdGl2ZSBjb21wYWN0aW9uIHB1cnBvc2VzLlxcbiAgMzQ6XFx0ICovXFxuICAzNTpcXHQjZGVmaW5lIEhQQUdFX0ZSQUdfQ0hFQ0tfSU5URVJWQUxfTVNFQ1xcdCg1MDApXFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9jb21wYWN0X2V2ZW50KGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtKVxcbiAgMzg6XFx0e1xcbiAgMzk6XFx0XFx0Y291bnRfdm1fZXZlbnQoaXRlbSk7XFxuICA0MDpcXHR9XFxuICA0MTpcXHRcXG4gIDQyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9jb21wYWN0X2V2ZW50cyhlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSwgbG9uZyBkZWx0YSlcXG4gIDQzOlxcdHtcXG4gIDQ0OlxcdFxcdGNvdW50X3ZtX2V2ZW50cyhpdGVtLCBkZWx0YSk7XFxuICA0NTpcXHR9XFxuICA0NjpcXHRcXG4gIDQ3OlxcdC8qXFxuICA0ODpcXHQgKiBvcmRlciA9PSAtMSBpcyBleHBlY3RlZCB3aGVuIGNvbXBhY3RpbmcgcHJvYWN0aXZlbHkgdmlhXFxuICA0OTpcXHQgKiAxLiAvcHJvYy9zeXMvdm0vY29tcGFjdF9tZW1vcnlcXG4gIDUwOlxcdCAqIDIuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RleC9jb21wYWN0XFxuICA1MTpcXHQgKiAzLiAvcHJvYy9zeXMvdm0vY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzXFxuICA1MjpcXHQgKi9cXG4gIDUzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKVxcbiAgNTQ6XFx0e1xcbiAgNTU6XFx0XFx0cmV0dXJuIG9yZGVyID09IC0xO1xcbiAgNTY6XFx0fVxcbiAgNTc6XFx0XFxuICA1ODpcXHQjZWxzZVxcbiAgNTk6XFx0I2RlZmluZSBjb3VudF9jb21wYWN0X2V2ZW50KGl0ZW0pIGRvIHsgfSB3aGlsZSAoMClcXG4gIDYwOlxcdCNkZWZpbmUgY291bnRfY29tcGFjdF9ldmVudHMoaXRlbSwgZGVsdGEpIGRvIHsgfSB3aGlsZSAoMClcXG4gIDYxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbiAgNjI6XFx0I2VuZGlmXFxuICA2MzpcXHRcXG4gIDY0OlxcdCNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxcbiAgNjU6XFx0XFxuICA2NjpcXHQjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gIDY3OlxcdCNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oXFx1MDAzZVxcbiAgNjg6XFx0XFxuICA2OTpcXHQjZGVmaW5lIGJsb2NrX3N0YXJ0X3BmbihwZm4sIG9yZGVyKVxcdHJvdW5kX2Rvd24ocGZuLCAxVUwgXFx1MDAzY1xcdTAwM2MgKG9yZGVyKSlcXG4gIDcwOlxcdCNkZWZpbmUgYmxvY2tfZW5kX3BmbihwZm4sIG9yZGVyKVxcdEFMSUdOKChwZm4pICsgMSwgMVVMIFxcdTAwM2NcXHUwMDNjIChvcmRlcikpXFxuICA3MTpcXHRcXG4gIDcyOlxcdC8qXFxuICA3MzpcXHQgKiBQYWdlIG9yZGVyIHdpdGgtcmVzcGVjdC10byB3aGljaCBwcm9hY3RpdmUgY29tcGFjdGlvblxcbiAgNzQ6XFx0ICogY2FsY3VsYXRlcyBleHRlcm5hbCBmcmFnbWVudGF0aW9uLCB3aGljaCBpcyB1c2VkIGFzXFxuICA3NTpcXHQgKiB0aGUgXFxcImZyYWdtZW50YXRpb24gc2NvcmVcXFwiIG9mIGEgbm9kZS96b25lLlxcbiAgNzY6XFx0ICovXFxuICA3NzpcXHQjaWYgZGVmaW5lZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gIDc4OlxcdCNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlxcdEhQQUdFX1BNRF9PUkRFUlxcbiAgNzk6XFx0I2VsaWYgZGVmaW5lZCBDT05GSUdfSFVHRVRMQkZTXFxuICA4MDpcXHQjZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcXHRIVUdFVExCX1BBR0VfT1JERVJcXG4gIDgxOlxcdCNlbHNlXFxuICA4MjpcXHQjZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcXG4gIDgzOlxcdCNlbmRpZlxcbiAgODQ6XFx0XFxuICA4NTpcXHRzdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpXFxuICA4NjpcXHR7XFxuICA4NzpcXHRcXHR1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XFxuICA4ODpcXHRcXG4gIDg5OlxcdFxcdGlmIChvcmRlcnMpXFxuICA5MDpcXHRcXHRcXHRyZXR1cm4gX19mZnMob3JkZXJzKTtcXG4gIDkxOlxcdFxcdHJldHVybiBDT01QQUNUSU9OX0hQQUdFX09SREVSO1xcbiAgOTI6XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKm1hcmtfYWxsb2NhdGVkX25vcHJvZihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpXFxuICA5NTpcXHR7XFxuICA5NjpcXHRcXHRwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIF9fR0ZQX01PVkFCTEUsIEFMTE9DX0RFRkFVTFQpO1xcbiAgOTc6XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG4gIDk4OlxcdFxcdHJldHVybiBwYWdlO1xcbiAgOTk6XFx0fVxcbiAxMDA6XFx0I2RlZmluZSBtYXJrX2FsbG9jYXRlZCguLi4pXFx0YWxsb2NfaG9va3MobWFya19hbGxvY2F0ZWRfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NTEuNjc3NTM2Mzg4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTQ3NjY4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmYCBjb25kaXRpb25hbC4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbXBhY3Rpb24gb3IgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIChDTUEpLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgcXVpY2tseSBieSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvbmRpdGlvbiBvbiBsaW5lIDY0IC0geWVzLCBgI2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BYCBpdCBpcy4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgY29tcGxldGVseS4uLiBJIG5lZWQgdG8gZmluZCB0aGUgY2xvc2luZyBgI2VuZGlmYCB0byBmdWxseSBncmFzcCB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBpbiB0aGUgY29udGV4dCBvZiBzeXN0ZW0gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlc291cmNlIGFsbG9jYXRpb24gc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjU1LjI5MjMwNTQyOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3Nzg4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2VuZGlmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9NjE9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XFxubW0vY29tcGFjdGlvbi5jOjYyOiNlbmRpZlxcbm1tL2NvbXBhY3Rpb24uYy02My1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy04Mi0jZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcXG5tbS9jb21wYWN0aW9uLmM6ODM6I2VuZGlmXFxubW0vY29tcGFjdGlvbi5jLTg0LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBza2lwX29mZmxpbmVfc2VjdGlvbnNfcmV2ZXJzZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbilcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNjUtfVxcbm1tL2NvbXBhY3Rpb24uYzoyNjY6I2VuZGlmXFxubW0vY29tcGFjdGlvbi5jLTI2Ny1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTUwNC19XFxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9jb21wYWN0aW9uLmMtNTA2LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTEzODgtXFxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cXG5tbS9jb21wYWN0aW9uLmMtMTM5MC0jaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yMjk3PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yMzg0LVxcdFxcdFxcdHJldHVybiBDT01QQUNUX1NVQ0NFU1M7XFxubW0vY29tcGFjdGlvbi5jOjIzODU6I2VuZGlmXFxubW0vY29tcGFjdGlvbi5jLTIzODYtXFx0XFx0LypcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zMDk0PXZvaWQgY29tcGFjdGlvbl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzA5Ny19XFxubW0vY29tcGFjdGlvbi5jOjMwOTg6I2VuZGlmIC8qIENPTkZJR19TWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfTlVNQSAqL1xcbm1tL2NvbXBhY3Rpb24uYy0zMDk5LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTM0MTA9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxcbm1tL2NvbXBhY3Rpb24uYy0zNDExLVxcbm1tL2NvbXBhY3Rpb24uYzozNDEyOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjo1NS4zNDQwODgyNDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEwMTI4MTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gYW5kIEltcGFjdCBvZiBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zLiBJIHNlZSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgYXQgbGluZSAyNTQ1LCBidXQgaXQncyBuZXN0ZWQgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05gIGJsb2NrLiBMaW5lcyAxMzg5IGFuZCAzNDEyIGNsZWFybHkgZGVmaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gU28sIGBDT01QQUNUSU9OYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoYXQgQ09NUEFDVElPTiBpcyBlbmFibGVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBmdW5jdGlvbmFsaXR5LiBBbmQgaXQgc2VlbXMgdGhhdCBUcmFuc3BhcmVudCBIdWdlcGFnZXMgaXMgYWxzbyByZWxldmFudC5cblxuTm93LCBsZXQncyBnZXQgdG8gdGhlIGltcG9ydGFudCBwYXJ0OiBpbXBhY3QgYW5hbHlzaXMuIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBzeW1ib2xzIGFyZSAqZGlyZWN0bHkqIG1vZGlmaWVkIG9yICpzaWduaWZpY2FudGx5IGFmZmVjdGVkKiBieSB0aGlzIHBhdGNoLlxuXG5JJ20gZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AsIGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCwgYHdha2V1cF9rc3dhcGRgLCBgd2FrZXVwX2tjb21wYWN0ZGAsIGFuZCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AuXG5cbkkga25vdyBgd2FrZXVwX2tzd2FwZGAgaXMgY2FsbGVkIGZyb20gYHBnZGF0X2JhbGFuY2VkYCB3aGljaCBpcyB0aGUgZm9jdXMuIFNpbmNlIGBwZ2RhdF9iYWxhbmNlZGAgaXMgbW9kaWZpZWQgSSBhbSBzdXJlIHRoYXQgdGhpcyBpcyBhIGdvb2QgZm9jdXMgc3ltYm9sLlxuXG5TaW1pbGFybHksIEkgc2VlIHRoYXQgYHdha2V1cF9rY29tcGFjdGRgIGlzIHdha2luZyB1cCB0aGUgdGhyZWFkIGBrY29tcGFjdGRgIGFuZCBga2NvbXBhY3RkYCBpcyBtb2RpZmllZC4gQW5kIHRoZSBmdW5jdGlvbiB3YWtlcyB1cCBga2NvbXBhY3RkYCB3aGljaCBpcyBhbHNvIGEgZ29vZCBmb2N1cyBzeW1ib2wuXG5cbkZpbmFsbHksIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBpcyBhIGdvb2QgZm9jdXMgc3ltYm9sLCBiZWNhdXNlIGl0IGNhbGxzIGBwZ2RhdF9iYWxhbmNlZGAuXG5cblNvIG15IGZvY3VzIGlzIG9uIHRob3NlIDMgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gcmUtZXhhbWluZSBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAuIEknbSBkb3VibGUtY2hlY2tpbmcgaXQgYmVjYXVzZSBJIHRob3VnaHQgSSBzYXcgYSBjb25uZWN0aW9uLCBidXQgSSBkb24ndCBzZWUgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzowMy40NDUzNzE3NTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ5MDpcXHRcXG4yNDkxOlxcdFxcdHRyYWNlX21tX2NvbXBhY3Rpb25fc3VpdGFibGUoem9uZSwgb3JkZXIsIGNvbXBhY3RfcmVzdWx0KTtcXG4yNDkyOlxcdFxcbjI0OTM6XFx0XFx0cmV0dXJuIHN1aXRhYmxlO1xcbjI0OTQ6XFx0fVxcbjI0OTU6XFx0XFxuMjQ5NjpcXHQvKiBVc2VkIGJ5IGRpcmVjdCByZWNsYWltZXJzICovXFxuMjQ5NzpcXHRib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxuMjQ5ODpcXHRcXHRcXHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbjI0OTk6XFx0e1xcbjI1MDA6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuMjUwMTpcXHRcXHRzdHJ1Y3Qgem9uZXJlZiAqejtcXG4yNTAyOlxcdFxcbjI1MDM6XFx0XFx0LypcXG4yNTA0OlxcdFxcdCAqIE1ha2Ugc3VyZSBhdCBsZWFzdCBvbmUgem9uZSB3b3VsZCBwYXNzIF9fY29tcGFjdGlvbl9zdWl0YWJsZSBpZiB3ZSBjb250aW51ZVxcbjI1MDU6XFx0XFx0ICogcmV0cnlpbmcgdGhlIHJlY2xhaW0uXFxuMjUwNjpcXHRcXHQgKi9cXG4yNTA3OlxcdFxcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMtXFx1MDAzZXpvbmVsaXN0LFxcbjI1MDg6XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYWMtXFx1MDAzZW5vZGVtYXNrKSB7XFxuMjUwOTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGF2YWlsYWJsZTtcXG4yNTEwOlxcdFxcbjI1MTE6XFx0XFx0XFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0NQVVNFVCkgXFx1MDAyNlxcdTAwMjZcXG4yNTEyOlxcdFxcdFxcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcF9tYXNrKSlcXG4yNTEzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI1MTQ6XFx0XFxuMjUxNTpcXHRcXHRcXHQvKlxcbjI1MTY6XFx0XFx0XFx0ICogRG8gbm90IGNvbnNpZGVyIGFsbCB0aGUgcmVjbGFpbWFibGUgbWVtb3J5IGJlY2F1c2Ugd2UgZG8gbm90XFxuMjUxNzpcXHRcXHRcXHQgKiB3YW50IHRvIHRyYXNoIGp1c3QgZm9yIGEgc2luZ2xlIGhpZ2ggb3JkZXIgYWxsb2NhdGlvbiB3aGljaFxcbjI1MTg6XFx0XFx0XFx0ICogaXMgZXZlbiBub3QgZ3VhcmFudGVlZCB0byBhcHBlYXIgZXZlbiBpZiBfX2NvbXBhY3Rpb25fc3VpdGFibGVcXG4yNTE5OlxcdFxcdFxcdCAqIGlzIGhhcHB5IGFib3V0IHRoZSB3YXRlcm1hcmsgY2hlY2suXFxuMjUyMDpcXHRcXHRcXHQgKi9cXG4yNTIxOlxcdFxcdFxcdGF2YWlsYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgLyBvcmRlcjtcXG4yNTIyOlxcdFxcdFxcdGF2YWlsYWJsZSArPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgTlJfRlJFRV9QQUdFUyk7XFxuMjUyMzpcXHRcXHRcXHRpZiAoX19jb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsIG9yZGVyLCBtaW5fd21hcmtfcGFnZXMoem9uZSksXFxuMjUyNDpcXHRcXHRcXHRcXHRcXHRcXHQgIGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGF2YWlsYWJsZSkpXFxuMjUyNTpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yNTI2OlxcdFxcdH1cXG4yNTI3OlxcdFxcbjI1Mjg6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjI1Mjk6XFx0fVxcbjI1MzA6XFx0XFxuMjUzMTpcXHQvKipcXG4yNTMyOlxcdCAqIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMgLSBnZXQgZnJlZSBwYWdlcyByZWxldmFudCB0byBhbGxvY2F0aW9uIG9yZGVyXFxuMjUzMzpcXHQgKiBAem9uZTogICAgICAgdGFyZ2V0IHpvbmVcXG4yNTM0OlxcdCAqIEBvcmRlcjogICAgICBhbGxvY2F0aW9uIG9yZGVyXFxuMjUzNTpcXHQgKiBAdXNlX2Jsb2NrczogaWYgdHJ1ZSwgdXNlIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTXFxuMjUzNjpcXHQgKlxcbjI1Mzc6XFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUgYmxvY2tzIHRvIGF2b2lkXFxuMjUzODpcXHQgKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2hcXG4yNTM5OlxcdCAqIHRoaXMgb24gaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuXFxuMjU0MDpcXHQgKlxcbjI1NDE6XFx0ICogV2hlbiBtVEhQIGFsd2F5cy1lbmFibGVkIG9yZGVycyBhcmUgY29uZmlndXJlZCwgY291bnQgb25seSBmcmVlIHBhZ2VzXFxuMjU0MjpcXHQgKiBpbiBibG9ja3MgXFx1MDAzZT0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFBcXG4yNTQzOlxcdCAqIGFsbG9jYXRpb25zLlxcbjI1NDQ6XFx0ICovXFxuMjU0NTpcXHR1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxuMjU0NjpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsXFxuMjU0NzpcXHRcXHRcXHRcXHRcXHRcXHRib29sIHVzZV9ibG9ja3MpXFxuMjU0ODpcXHR7XFxuMjU0OTpcXHRcXHRpZiAodXNlX2Jsb2NrcylcXG4yNTUwOlxcdFxcdFxcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpO1xcbjI1NTE6XFx0XFxuMjU1MjpcXHRcXHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcXHUwMDI2XFx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcXG4yNTUzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcyA9IDA7XFxuMjU1NDpcXHRcXG4yNTU1OlxcdFxcdFxcdGZvciAoaW50IG8gPSBvcmRlcjsgbyBcXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvKyspXFxuMjU1NjpcXHRcXHRcXHRcXHRmcmVlX3BhZ2VzICs9IHpvbmUtXFx1MDAzZWZyZWVfYXJlYVtvXS5ucl9mcmVlIFxcdTAwM2NcXHUwMDNjIG87XFxuMjU1NzpcXHRcXHRcXHRyZXR1cm4gZnJlZV9wYWdlcztcXG4yNTU4OlxcdFxcdH1cXG4yNTU5OlxcdFxcbjI1NjA6XFx0XFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTtcXG4yNTYxOlxcdH1cXG4yNTYyOlxcdFxcbjI1NjM6XFx0LypcXG4yNTY0OlxcdCAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci5cXG4yNTY1OlxcdCAqIFJldHVybiBDT01QQUNUX1NVQ0NFU1MgaWYgYWxsb2NhdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGNhbiBiZSBhbHJlYWR5XFxuMjU2NjpcXHQgKiBzYXRpc2ZpZWRcXG4yNTY3OlxcdCAqIFJldHVybiBDT01QQUNUX1NLSVBQRUQgaWYgY29tcGFjdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGlzIGxpa2VseSB0byBmYWlsXFxuMjU2ODpcXHQgKiBSZXR1cm4gQ09NUEFDVF9DT05USU5VRSBpZiBjb21wYWN0aW9uIGZvciB0YXJnZXQgb3JkZXIgc2hvdWxkIGJlIHJhblxcbjI1Njk6XFx0ICovXFxuMjU3MDpcXHRzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdFxcbjI1NzE6XFx0Y29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcXG4yNTcyOlxcdFxcdFxcdFxcdFxcdCBpbnQgaGlnaGVzdF96b25laWR4LCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXFxuMjU3MzpcXHRcXHRcXHRcXHRcXHQgYm9vbCBhc3luYywgYm9vbCBrY29tcGFjdGQpXFxuMjU3NDpcXHR7XFxuMjU3NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7XFxuMjU3NjpcXHRcXHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaztcXG4yNTc3OlxcdFxcbjI1Nzg6XFx0XFx0ZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsXFxuMjU3OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAga2NvbXBhY3RkIFxcdTAwMjZcXHUwMDI2IGRlZnJhZ19tb2RlKTtcXG4yNTgwOlxcdFxcbjI1ODE6XFx0XFx0d2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19XTUFSS19NQVNLKTtcXG4yNTgyOlxcdFxcdGlmIChfX3pvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCB3YXRlcm1hcmssIGhpZ2hlc3Rfem9uZWlkeCxcXG4yNTgzOlxcdFxcdFxcdFxcdFxcdGFsbG9jX2ZsYWdzLCBmcmVlX3BhZ2VzKSlcXG4yNTg0OlxcdFxcdFxcdHJldHVybiBDT01QQUNUX1NVQ0NFU1M7XFxuMjU4NTpcXHRcXG4yNTg2OlxcdFxcdC8qXFxuMjU4NzpcXHRcXHQgKiBGb3IgdW5tb3ZhYmxlIGFsbG9jYXRpb25zICh3aXRob3V0IEFMTE9DX0NNQSksIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaFxcbjI1ODg6XFx0XFx0ICogZnJlZSBtZW1vcnkgaW4gdGhlIG5vbi1DTUEgcGFnZWJsb2Nrcy4gT3RoZXJ3aXNlIGNvbXBhY3Rpb24gY291bGQgZm9ybVxcbjI1ODk6XFx0XFx0ICogdGhlIGhpZ2gtb3JkZXIgcGFnZSBpbiBDTUEgcGFnZWJsb2Nrcywgd2hpY2ggd291bGQgbm90IGhlbHAgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjAzLjQ0NTUyNzI3OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMwOTg0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBDb21wYWN0aW9uIENvZGUgUGF0aCoqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIHRocm91Z2ggdGhlIG1lbW9yeSBjb21wYWN0aW9uIGNvZGUsIGFuZCBpdCdzIHF1aWNrbHkgYXBwYXJlbnQgdGhhdCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgKmRvZXNuJ3QqIGRpcmVjdGx5IGxldmVyYWdlIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYC4gVGhhdCdzIGEgYml0IHN1cnByaXNpbmcuIEknZCBhc3N1bWVkIHRoZXJlIHdhcyBhIGRpcmVjdCBsaW5rIHRoZXJlLCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBhIHpvbmVsaXN0IGlzIGV2ZW4gKnBvdGVudGlhbGx5KiB2aWFibGUgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuXG5cbk5vdyBob2xkIG9uLi4uIEkga25vdyBJJ3ZlIHNlZW4gYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGJlaW5nIGNhbGxlZCBkdXJpbmcgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MgKnNvbWV3aGVyZSouIEFoLCBoZXJlIHdlIGdvLCBgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXJgIGRvZXMgY2FsbCBpdC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLCByaWdodD8gSXQgc291bmRzIGxpa2UgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCB3b3VsZCBmaWx0ZXIgYSBsaXN0IG9mIGNhbmRpZGF0ZSB6b25lcy5cblxuQnV0IG5vdyBJIG5lZWQgdG8gZ28gb25lIGxheWVyIGRlZXBlcjsgKndobyogY2FsbHMgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoLiBLbm93aW5nIHdobydzIGNhbGxpbmcgaXQgaXMgY3J1Y2lhbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGNvbnRyb2wgYW5kIGRldGVybWluZSB0aGUgY29tcGxldGUgbG9naWMgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzowNy43NzY1MTQ2MjlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODY0MzE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jb21wYWN0aW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY29tcGFjdGlvbi5jPTI1NzA9c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHRcXG5tbS9jb21wYWN0aW9uLmM6MjU3MTpjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL2NvbXBhY3Rpb24uYy0yNTcyLVxcdFxcdFxcdFxcdCBpbnQgaGlnaGVzdF96b25laWR4LCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MjYxMD1jb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjYzNS1cXHRpZiAoIWlzX3ZpYV9jb21wYWN0X21lbW9yeShjYy1cXHUwMDNlb3JkZXIpKSB7XFxubW0vY29tcGFjdGlvbi5jOjI2MzY6XFx0XFx0cmV0ID0gY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoY2MtXFx1MDAzZXpvbmUsIGNjLVxcdTAwM2VvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMjYzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY2MtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zMTA2PXN0YXRpYyBib29sIGtjb21wYWN0ZF9ub2RlX3N1aXRhYmxlKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzEyMC1cXG5tbS9jb21wYWN0aW9uLmM6MzEyMTpcXHRcXHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcih6b25lLFxcbm1tL2NvbXBhY3Rpb24uYy0zMTIyLVxcdFxcdFxcdFxcdHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTMxMzI9c3RhdGljIHZvaWQga2NvbXBhY3RkX2RvX3dvcmsocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMTY0LVxcbm1tL2NvbXBhY3Rpb24uYzozMTY1OlxcdFxcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHpvbmUsXFxubW0vY29tcGFjdGlvbi5jLTMxNjYtXFx0XFx0XFx0XFx0Y2Mub3JkZXIsIHpvbmVpZCwgY2MuYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjA3LjkyNTE2MjI1M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMxNjIyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rfem9uZWAgRnVuY3Rpb24gQ2FsbCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3MgdXNpbmcgYGNvbXBhY3Rfem9uZWAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBtZWFuLCBgY29tcGFjdF96b25lYCAqZG9lcyogd2hhdCwgZXhhY3RseT8gSXMgdGhpcyBzb21lIHNvcnQgb2YgbWVtb3J5IG9wdGltaXphdGlvbiwgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uLCBvciBtYXliZSBhIFVJIGxheW91dCByb3V0aW5lPyAgVGhlIG5hbWUgaXRzZWxmIGlzIHN1Z2dlc3RpdmUsIGJ1dCB3aXRob3V0IGtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0J3MganVzdCBhIGxhYmVsLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG9zc2libGUgc2NlbmFyaW9zIGJhc2VkIG9uIHRoZSB0eXBpY2FsIGFwcGxpY2F0aW9ucyBvZiBcImNvbXBhY3RpbmdcIiBvciBcInpvbmluZ1wiIGRhdGEuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdyBpczogKndobyogaXMgY2FsbGluZyBgY29tcGFjdF96b25lYD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIGlzIGtleS4gSXMgaXQgYSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZXI/IEEgaGlnaC1sZXZlbCBkYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb24/IEEgVUkgY29tcG9uZW50IHJlZnJlc2hpbmcgcm91dGluZT8gIEtub3dpbmcgdGhlIGNhbGxlciB3aWxsIHByb3ZpZGUgYSBodWdlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9sZSBhbmQgcHVycG9zZSBvZiBgY29tcGFjdF96b25lYC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGNhbGwgYW5kIGRldGVybWluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3b3JrZmxvdy4gIFRoYXQgd2lsbCBxdWlja2x5IHRlbGwgbWUgaWYgdGhpcyBpcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb24sIG9yIHNvbWV0aGluZyBsZXNzIHVyZ2VudC4gV2l0aG91dCB0aGF0IGNvbnRleHQsIEknbSBqdXN0IGd1ZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzMxMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjEyLjI1Njc4Nzc5MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTg5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdF96b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9MjEwNz1zdGF0aWMgaXNvbGF0ZV9taWdyYXRlX3QgaXNvbGF0ZV9taWdyYXRlcGFnZXMoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjExOS1cXHQgKiBTdGFydCBhdCB3aGVyZSB3ZSBsYXN0IHN0b3BwZWQsIG9yIGJlZ2lubmluZyBvZiB0aGUgem9uZSBhc1xcbm1tL2NvbXBhY3Rpb24uYzoyMTIwOlxcdCAqIGluaXRpYWxpemVkIGJ5IGNvbXBhY3Rfem9uZSgpLiBUaGUgZmlyc3QgZmFpbHVyZSB3aWxsIHVzZVxcbm1tL2NvbXBhY3Rpb24uYy0yMTIxLVxcdCAqIHRoZSBsb3dlc3QgUEZOIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbGluZWFyIHNjYW5uaW5nLlxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTIxOTgtXFx0XFx0ICogRWl0aGVyIHdlIGlzb2xhdGVkIHNvbWV0aGluZyBhbmQgcHJvY2VlZCB3aXRoIG1pZ3JhdGlvbi4gT3JcXG5tbS9jb21wYWN0aW9uLmM6MjE5OTpcXHRcXHQgKiB3ZSBmYWlsZWQgYW5kIGNvbXBhY3Rfem9uZSBzaG91bGQgZGVjaWRlIGlmIHdlIHNob3VsZFxcbm1tL2NvbXBhY3Rpb24uYy0yMjAwLVxcdFxcdCAqIGNvbnRpbnVlIG9yIG5vdC5cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNjA5PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XFxubW0vY29tcGFjdGlvbi5jOjI2MTA6Y29tcGFjdF96b25lKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxcbm1tL2NvbXBhY3Rpb24uYy0yNjExLXtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODQ3LVxcbm1tL2NvbXBhY3Rpb24uYzoyODQ4OnN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbm1tL2NvbXBhY3Rpb24uYy0yODQ5LVxcdFxcdGdmcF90IGdmcF9tYXNrLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODY3LVxcbm1tL2NvbXBhY3Rpb24uYzoyODY4OlxcdHJldHVybiBjb21wYWN0X3pvbmUoXFx1MDAyNmNjLCBjYXBjKTtcXG5tbS9jb21wYWN0aW9uLmMtMjg2OS19XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9Mjg4Mj1lbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjkxMi1cXG5tbS9jb21wYWN0aW9uLmM6MjkxMzpcXHRcXHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxcbm1tL2NvbXBhY3Rpb24uYy0yOTE0LVxcdFxcdFxcdFxcdGFsbG9jX2ZsYWdzLCBhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yOTcwPXN0YXRpYyBpbnQgY29tcGFjdF9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIGJvb2wgcHJvYWN0aXZlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI5OTItXFxubW0vY29tcGFjdGlvbi5jOjI5OTM6XFx0XFx0Y29tcGFjdF96b25lKFxcdTAwMjZjYywgTlVMTCk7XFxubW0vY29tcGFjdGlvbi5jLTI5OTQtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzEzMj1zdGF0aWMgdm9pZCBrY29tcGFjdGRfZG9fd29yayhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxNzQtXFx0XFx0Y2Muem9uZSA9IHpvbmU7XFxubW0vY29tcGFjdGlvbi5jOjMxNzU6XFx0XFx0c3RhdHVzID0gY29tcGFjdF96b25lKFxcdTAwMjZjYywgTlVMTCk7XFxubW0vY29tcGFjdGlvbi5jLTMxNzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjEyLjMwMTg5Mzc0MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg1NjM5NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQuXG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFBhZ2UgQ29tcGFjdGlvbiBQcm9jZXNzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgZnVuY3Rpb24uIEkgc2VlIGl0J3MgY2FsbGluZyBgY29tcGFjdF96b25lX29yZGVyYCwgd2hpY2ggaW4gdHVybiwgSSBwcmVzdW1lLCB1dGlsaXplcyBgY29tcGFjdF96b25lYC4gVGhpcyBpcyB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgSSdkIGV4cGVjdCBmb3IgcGFnZSBjb21wYWN0aW9uIOKAkyBhIHRvcC1sZXZlbCBmdW5jdGlvbiBvcmNoZXN0cmF0aW5nIHRoZSBwcm9jZXNzLCBhIG1pZGRsZSBsYXllciBwb3RlbnRpYWxseSBoYW5kbGluZyBzb21lIG9yZGVyaW5nIG9yIHpvbmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVuIHRoZSBhY3R1YWwgem9uZSBjb21wYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgYGNvbXBhY3Rfem9uZWAgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyBub24tc3RhdGljIGFuZCBleHBvcnRlZCBpcyBzaWduaWZpY2FudDsgaXQgc3VnZ2VzdHMgdGhpcyBpcyBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb24sIG1lYW5pbmcgb3RoZXIgY29tcG9uZW50cyBvciBtb2R1bGVzIGFyZSBsaWtlbHkgcmVseWluZyBvbiBpdCB0byBpbml0aWF0ZSBjb21wYWN0aW9uLiBHaXZlbiB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgaXQncyB3b3J0aCBkaWdnaW5nIGludG8gdGhhdCBmaXJzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICppdCogd29ya3MsIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBjb25maXJtIHRoZSBhc3N1bXB0aW9ucyBJIG1hZGUgYWJvdXQgaG93IHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMgcmVsYXRlIHRvIHRoZSBwcm9jZXNzIG9mIHBhZ2UgY29tcGFjdGlvbiBpbiBnZW5lcmFsLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQyOTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoxNi4xODc1MzY2NDlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjUyMDkyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTE9ZW51bSBjb21wYWN0X3ByaW9yaXR5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTIwLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjIxOi8qIFJldHVybiB2YWx1ZXMgZm9yIGNvbXBhY3Rfem9uZSgpIGFuZCB0cnlfdG9fY29tcGFjdF9wYWdlcygpICovXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMjItLyogV2hlbiBhZGRpbmcgbmV3IHN0YXRlcywgcGxlYXNlIGFkanVzdCBpbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmggKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTkyPWV4dGVybiBpbnQgZnJhZ21lbnRhdGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDo5MzpleHRlcm4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzayxcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC05NC1cXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaD0xMzE9VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl9lbmQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMTY0LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaDoxNjU6VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl90cnlfdG9fY29tcGFjdF9wYWdlcyxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMTY2LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI4NDg9c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjg3MS0vKipcXG5tbS9jb21wYWN0aW9uLmM6Mjg3MjogKiB0cnlfdG9fY29tcGFjdF9wYWdlcyAtIERpcmVjdCBjb21wYWN0IHRvIHNhdGlzZnkgYSBoaWdoLW9yZGVyIGFsbG9jYXRpb25cXG5tbS9jb21wYWN0aW9uLmMtMjg3My0gKiBAZ2ZwX21hc2s6IFRoZSBHRlAgbWFzayBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjg4MS0gKi9cXG5tbS9jb21wYWN0aW9uLmM6Mjg4MjplbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTI4ODMtXFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjg5Mi1cXG5tbS9jb21wYWN0aW9uLmM6Mjg5MzpcXHR0cmFjZV9tbV9jb21wYWN0aW9uX3RyeV90b19jb21wYWN0X3BhZ2VzKG9yZGVyLCBnZnBfbWFzaywgcHJpbyk7XFxubW0vY29tcGFjdGlvbi5jLTI4OTQtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDEzOT1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDE4NC1cXG5tbS9wYWdlX2FsbG9jLmM6NDE4NTpcXHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNDE4Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcXHUwMDI2Y2FwYyk7XFxuLS1cXG5tbS92bXNjYW4uYz02MDg2PXN0YXRpYyBib29sIGluX3JlY2xhaW1fY29tcGFjdGlvbihzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwOTktICogdHJ1ZSBpZiBtb3JlIHBhZ2VzIHNob3VsZCBiZSByZWNsYWltZWQgc3VjaCB0aGF0IHdoZW4gdGhlIHBhZ2UgYWxsb2NhdG9yXFxubW0vdm1zY2FuLmM6NjEwMDogKiBjYWxscyB0cnlfdG9fY29tcGFjdF9wYWdlcygpIHRoYXQgaXQgd2lsbCBoYXZlIGVub3VnaCBmcmVlIHBhZ2VzIHRvIHN1Y2NlZWQuXFxubW0vdm1zY2FuLmMtNjEwMS0gKiBJdCB3aWxsIGdpdmUgdXAgZWFybGllciB0aGFuIHRoYXQgaWYgdGhlcmUgaXMgZGlmZmljdWx0eSByZWNsYWltaW5nIHBhZ2VzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoxNy43NTI3NTMwMTRaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3MTMxMjY3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBmb3IgRnV6emluZyB0aGlzIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgb3IgXCJmb2N1cyBzeW1ib2xzXCIgd2l0aGluIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbiwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHN1cHBvcnRpbmcgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBzdGFuZHMgb3V0IGltbWVkaWF0ZWx5OyBpdCdzIG5vbi1zdGF0aWMsIG1ha2luZyBpdCBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBpdCdzIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgY29tcGFjdGlvbi4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyBnZW5lcmljIGl0IGlzLlxuXG5UaGUgb3RoZXIgcHJpbWFyeSB0YXJnZXRzIGFyZTogYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGB3YWtldXBfa3N3YXBkYCwgYHdha2V1cF9rY29tcGFjdGRgLCBhbmQgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgLlxuXG5JIGFtIHRyeWluZyB0byBjb25maXJtLCBhbmQgY29uZmlybSBhZ2FpbiwgdGhhdCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzIG5vdCBhIHZlcnkgaG90LXBhdGggb3IgZ2VuZXJpYyBmdW5jdGlvbiwgbGlrZSBga21hbGxvY2Agb3IgYHBhZ2VfYWxsb2NgLCBidXQgc3BlY2lmaWNhbGx5IHVzZWQgaW4gY29tcGFjdGlvbi4gSXQgaXMsIHNvIHRoYXQncyBnb29kLlxuXG5OZXh0LCBJJ20gcmV2aWV3aW5nIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlncy4gSXQgYXBwZWFycyB0aGlzIHBhdGNoIHJlbGllcyBvbiBgQ09NUEFDVElPTmAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEknbSBjb25maXJtaW5nIHRoYXQgYENPTVBBQ1RJT05gIGRlcGVuZHMgb24gYE1NVWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNTVVgLiBUaGlzIG1ha2VzIHNlbnNlIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBiZWluZyBtb2RpZmllZC5cblxuSSBhbSBxdWlja2x5IHZlcmlmeWluZyB0aGUgc291cmNlIGZpbGVzIGZvciB0aGUgZm9jdXMgc3ltYm9scyB0byBtYWtlIHN1cmUgdGhleSBhcmUgY29tcGlsZWQuIFRoaXMgY29uZmlybXMgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uLiBTcGVjaWZpY2FsbHk6XG5cbi0gYHRyeV90b19jb21wYWN0X3BhZ2VzYFxuLSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2Bcbi0gYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgXG4tIGB3YWtldXBfa3N3YXBkYFxuLSBgd2FrZXVwX2tjb21wYWN0ZGBcbi0gYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgXG5cblRoZXkgYXJlIGFsbCBpbiBgbW0vY29tcGFjdGlvbi5jYCBvciBgbW0vdm1zY2FuLmNgLlxuXG5JJ20gdmVyaWZ5aW5nIHRoYXQgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGlzIG5vdCBleHBvcnRlZCAoaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGZ1enppbmcgY2FwYWJpbGl0aWVzKSwgYnV0IGl0IGlzICpub3QqIHN0YXRpYywgc28gdGhlIGZ1enplciBjYW4gdHJhY2UgaXQuXG5cbkkgdGhlbiBjaGVjayB0byBzZWUgaG93IGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMgdXNlZCwgYXMgaXQgc2VlbXMgcmVsZXZhbnQuIEl0J3MgdXNlZCB3aXRoaW4gYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAgd2hpY2ggaXMgdXNlZCBpbiBzZXZlcmFsIGltcG9ydGFudCBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb21wYWN0aW9uLCBzdWl0YWJpbGl0eSwgYW5kIHNjb3JpbmcuIFRoYXQgbWFrZXMgdGhpcyB2ZXJ5IHJlbGV2YW50LiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGNvbXBhY3Rpb24gbG9naWMgdG8gaGFuZGxlIG11bHRpLXNpemUgVEhQIGFsbG9jYXRpb24gYnkgdXNpbmcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAgaW5zdGVhZCBvZiBgQ09NUEFDVElPTl9IUEFHRV9PUkRFUmAuXG5cblRoZSBjb3JlIHJlYXNvbmluZyBmb3IgdGhpcyBwYXRjaCBpcyB0aGF0IGl0IG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gbG9naWMgdG8gc3VwcG9ydCBtdWx0aS1zaXplIFRIUHMuIEl0IGluY2x1ZGVzIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCwgdXBkYXRlcyBjb21wYWN0aW9uIGNoZWNrcywgYW5kIG1vZGlmaWVzIGBrY29tcGFjdGRgIGFuZCBga3N3YXBkYCBiZWhhdmlvci4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCB3aWxsIGJlIHRlc3RlZCB3aGVuIHZpcnR1YWxpemVkLlxuXG5JbiBzdW1tYXJ5LCB0aGUga2V5IGNvbXBvbmVudHMgSSdtIGZvY3VzaW5nIG9uIGZvciBmdXp6aW5nIGFyZTpcblxuKiAgIENvbmZpZ3M6IGBDT01QQUNUSU9OYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIEZvY3VzIHN5bWJvbHM6XG4gICAgKiAgIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgKHByaW1hcnkgZW50cnkgcG9pbnQpXG4gICAgKiAgIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCAoc3BlY2lmaWMgdG8gdGhlIHBhdGNoKVxuICAgICogICBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgKHJlbGF0ZWQgdG8gcGF0Y2gpXG4gICAgKiAgIGB3YWtldXBfa3N3YXBkYFxuICAgICogICBgd2FrZXVwX2tjb21wYWN0ZGBcbiAgICAqICAgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgXG5cbkkgYW0gcmUtZXZhbHVhdGluZyB0aGF0IGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gY29uZmlybSBpdCBpcyBzcGVjaWZpYyBlbm91Z2ggdG8gY29tcGFjdGlvbi4gYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGFuZCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgYXJlIGJldHRlci4gTm93IEkgd2lsbCBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDEyLCJPdXRwdXRUb2tlbnMiOjIwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MzIuNDY1ODgzNzQyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAyMjM5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcInpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndha2V1cF9rY29tcGFjdGRcIixcbiAgICBcImtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcInpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndha2V1cF9rY29tcGFjdGRcIixcbiAgICBcImtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzozMi41MzYxMTQxNDlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Njk0OTczNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MzIuNTM2NTQzMDg5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0Njk0NTQxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGhldXJpc3RpY3MsIHN1Y2ggYXMgZnJhZ21lbnRhdGlvbiBzY29yaW5nIGFuZCBlZmZlY3RpdmUgZnJlZSBwYWdlcyBjYWxjdWxhdGlvbiBmb3IgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzIGluIHdhdGVybWFyayBjYWxjdWxhdGlvbnMgb3IgdGhlIGBkZWZyYWdfbW9kZSBcXHUwMDI2IG9yZGVyYCBiaXR3aXNlIG9wZXJhdGlvbikgd291bGQgcmVzdWx0IGluIHBlcmZvcm1hbmNlIGlzc3VlcywgT09Ncywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1ZyB0b29scy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgdGhhdCByZXF1aXJlcyBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmY5MTZkZDRiYTA2YmY1YWM3NjhkN2IwNDNiYzVjYzRkNGY5ZTU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDU6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGEwNDk0MTU1MTJjNjcuLjI5YmU3MjU5NzQxNTYgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZV9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG5AQCAtODEsNiArODIsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcbiAjZW5kaWZcbiBcbitzdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xuK1xuK1x0aWYgKG9yZGVycylcbitcdFx0cmV0dXJuIF9fZmZzKG9yZGVycyk7XG4rXHRyZXR1cm4gQ09NUEFDVElPTl9IUEFHRV9PUkRFUjtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuIHtcbiBcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XG5AQCAtODI3LDYgKzgzNywxMiBAQCBzdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXG4gXHQgKi9cbiBcdGlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzZT0gdGFyZ2V0X29yZGVyKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qIFdlIGFyZSBjb21wYWN0aW5nIGZvciBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uICovXG4rXHRpZiAoaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzZT0gY29tcGFjdF9ocGFnZV9vcmRlcigpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuIFx0LypcbiBcdCAqIFdlIGxpbWl0IG1lbW9yeSBjb21wYWN0aW9uIHRvIHBhZ2VibG9ja3MgYW5kIHdvbid0IHRyeVxuIFx0ICogY3JlYXRpbmcgZnJlZSBibG9ja3Mgb2YgbWVtb3J5IHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoYXQuXG5AQCAtMjIwOCwxNiArMjIyNCwxNiBAQCBzdGF0aWMgYm9vbCBrc3dhcGRfaXNfcnVubmluZyhwZ19kYXRhX3QgKnBnZGF0KVxuIFxuIC8qXG4gICogQSB6b25lJ3MgZnJhZ21lbnRhdGlvbiBzY29yZSBpcyB0aGUgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbiB3cnQgdG8gdGhlXG4tICogQ09NUEFDVElPTl9IUEFHRV9PUkRFUi4gSXQgcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS5cbisgKiBjb21wYWN0X2hwYWdlX29yZGVyKCkuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4tXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgQ09NUEFDVElPTl9IUEFHRV9PUkRFUik7XG4rXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgb3JkZXIpO1xuIH1cbiBcbiAvKlxuICAqIEEgd2VpZ2h0ZWQgem9uZSdzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb25cbi0gKiB3cnQgdG8gdGhlIENPTVBBQ1RJT05fSFBBR0VfT1JERVIgc2NhbGVkIGJ5IHRoZSB6b25lJ3Mgc2l6ZS4gSXRcbisgKiB3cnQgdG8gdGhlIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBzY2FsZWQgYnkgdGhlIHpvbmUncyBzaXplLiBJdFxuICAqIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4gICpcbiAgKiBUaGUgc2NhbGluZyBmYWN0b3IgZW5zdXJlcyB0aGF0IHByb2FjdGl2ZSBjb21wYWN0aW9uIGZvY3VzZXMgb24gbGFyZ2VyXG5AQCAtMjIyNSwxMSArMjI0MSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiAgKiBaT05FX0RNQTMyLiBGb3Igc21hbGxlciB6b25lcywgdGhlIHNjb3JlIHZhbHVlIHJlbWFpbnMgY2xvc2UgdG8gemVybyxcbiAgKiBhbmQgdGh1cyBuZXZlciBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZCBmb3IgcHJvYWN0aXZlIGNvbXBhY3Rpb24uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNjb3JlO1xuIFxuLVx0c2NvcmUgPSB6b25lLVx1MDAzZXByZXNlbnRfcGFnZXMgKiBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoem9uZSk7XG4rXHRzY29yZSA9IHpvbmUtXHUwMDNlcHJlc2VudF9wYWdlcyAqIGZyYWdtZW50YXRpb25fc2NvcmVfem9uZSh6b25lLCBvcmRlcik7XG4gXHRyZXR1cm4gZGl2NjRfdWwoc2NvcmUsIHpvbmUtXHUwMDNlem9uZV9wZ2RhdC1cdTAwM2Vub2RlX3ByZXNlbnRfcGFnZXMgKyAxKTtcbiB9XG4gXG5AQCAtMjI0MCw3ICsyMjU2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4gICogdGhlIG5vZGUncyBzY29yZSBmYWxscyBiZWxvdyB0aGUgbG93IHRocmVzaG9sZCwgb3Igb25lIG9mIHRoZSBiYWNrLW9mZlxuICAqIGNvbmRpdGlvbnMgaXMgbWV0LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHVuc2lnbmVkIGludCBzY29yZSA9IDA7XG4gXHRpbnQgem9uZWlkO1xuQEAgLTIyNTEsNyArMjI2Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4gXHRcdHpvbmUgPSBcdTAwMjZwZ2RhdC1cdTAwM2Vub2RlX3pvbmVzW3pvbmVpZF07XG4gXHRcdGlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHNjb3JlICs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lKTtcbitcdFx0c2NvcmUgKz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUsIG9yZGVyKTtcbiBcdH1cbiBcbiBcdHJldHVybiBzY29yZTtcbkBAIC0yMjY5LDEyICsyMjg1LDEzIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayhib29sIGxvdylcbiBzdGF0aWMgYm9vbCBzaG91bGRfcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZShwZ19kYXRhX3QgKnBnZGF0KVxuIHtcbiBcdGludCB3bWFya19oaWdoO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xuIFxuIFx0aWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpO1xuLVx0cmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCkgXHUwMDNlIHdtYXJrX2hpZ2g7XG4rXHRyZXR1cm4gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcikgXHUwMDNlIHdtYXJrX2hpZ2g7XG4gfVxuIFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbkBAIC0yMzA2LDEyICsyMzIzLDEzIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbiBcdGlmIChjYy1cdTAwM2Vwcm9hY3RpdmVfY29tcGFjdGlvbikge1xuIFx0XHRpbnQgc2NvcmUsIHdtYXJrX2xvdztcbiBcdFx0cGdfZGF0YV90ICpwZ2RhdDtcbitcdFx0Ym9vbCBjb3N0bHkgPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuIFxuIFx0XHRwZ2RhdCA9IGNjLVx1MDAzZXpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbi1cdFx0aWYgKGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbitcdFx0aWYgKGNvc3RseSBcdTAwMjZcdTAwMjYga3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKVxuIFx0XHRcdHJldHVybiBDT01QQUNUX1BBUlRJQUxfU0tJUFBFRDtcbiBcbi1cdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtXHUwMDNlem9uZSk7XG4rXHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLVx1MDAzZXpvbmUsIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSk7XG4gXHRcdHdtYXJrX2xvdyA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsodHJ1ZSk7XG4gXG4gXHRcdGlmIChzY29yZSBcdTAwM2Ugd21hcmtfbG93KVxuQEAgLTI1MTAsNiArMjUyOCwzOCBAQCBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qKlxuKyAqIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMgLSBnZXQgZnJlZSBwYWdlcyByZWxldmFudCB0byBhbGxvY2F0aW9uIG9yZGVyXG4rICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXG4rICogQG9yZGVyOiAgICAgIGFsbG9jYXRpb24gb3JkZXJcbisgKiBAdXNlX2Jsb2NrczogaWYgdHJ1ZSwgdXNlIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTXG4rICpcbisgKiBJbiBkZWZyYWdfbW9kZSwgd2F0ZXJtYXJrcyBtdXN0IGJlIG1ldCBpbiB3aG9sZSBibG9ja3MgdG8gYXZvaWRcbisgKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2hcbisgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LlxuKyAqXG4rICogV2hlbiBtVEhQIGFsd2F5cy1lbmFibGVkIG9yZGVycyBhcmUgY29uZmlndXJlZCwgY291bnQgb25seSBmcmVlIHBhZ2VzXG4rICogaW4gYmxvY2tzIFx1MDAzZT0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFBcbisgKiBhbGxvY2F0aW9ucy5cbisgKi9cbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0Ym9vbCB1c2VfYmxvY2tzKVxuK3tcbitcdGlmICh1c2VfYmxvY2tzKVxuK1x0XHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTtcbitcbitcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFx1MDAyNlx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcbitcbitcdFx0Zm9yIChpbnQgbyA9IG9yZGVyOyBvIFx1MDAzYyBOUl9QQUdFX09SREVSUzsgbysrKVxuK1x0XHRcdGZyZWVfcGFnZXMgKz0gem9uZS1cdTAwM2VmcmVlX2FyZWFbb10ubnJfZnJlZSBcdTAwM2NcdTAwM2MgbztcbitcdFx0cmV0dXJuIGZyZWVfcGFnZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xuK31cbitcbiAvKlxuICAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci5cbiAgKiBSZXR1cm4gQ09NUEFDVF9TVUNDRVNTIGlmIGFsbG9jYXRpb24gZm9yIHRhcmdldCBvcmRlciBjYW4gYmUgYWxyZWFkeVxuQEAgLTI1MjUsMTAgKzI1NzUsOCBAQCBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XG4gXG4tXHRpZiAoa2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSlcbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XG4tXHRlbHNlXG4tXHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4rXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcbitcdFx0XHRcdFx0ICAgICAgIGtjb21wYWN0ZCBcdTAwMjZcdTAwMjYgZGVmcmFnX21vZGUpO1xuIFxuIFx0d2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xuIFx0aWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LFxuQEAgLTMyMzgsMTAgKzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdFx0dGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcbiBcdFx0aWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkge1xuIFx0XHRcdHVuc2lnbmVkIGludCBwcmV2X3Njb3JlLCBzY29yZTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wYWN0X2hwYWdlX29yZGVyKCk7XG4gXG4tXHRcdFx0cHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7XG4rXHRcdFx0cHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpO1xuIFx0XHRcdGNvbXBhY3Rfbm9kZShwZ2RhdCwgdHJ1ZSk7XG4tXHRcdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpO1xuK1x0XHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBEZWZlciBwcm9hY3RpdmUgY29tcGFjdGlvbiBpZiB0aGUgZnJhZ21lbnRhdGlvblxuIFx0XHRcdCAqIHNjb3JlIGRpZCBub3QgZ28gZG93biBpLmUuIG5vIHByb2dyZXNzIG1hZGUuXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjE0YmI5NTQzODc5YjQgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTY1NCw0ICsxNjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0Ym9vbCB1c2VfYmxvY2tzKTtcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmE0MTlhMmMyZmNhNDAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC02OTY2LDcgKzY5NjYsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHQgKiBtZWV0IHdhdGVybWFya3MuXG4gXHQgKi9cbiBcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgaSwgaGlnaGVzdF96b25laWR4KSB7XG4tXHRcdGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFxuIFx0XHRpZiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKVxuQEAgLTY5NzQsMjEgKzY5NzMsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdGVsc2VcbiBcdFx0XHRtYXJrID0gaGlnaF93bWFya19wYWdlcyh6b25lKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGVcbi1cdFx0ICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLlxuLVx0XHQgKlxuLVx0XHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXG4tXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3Ncbi1cdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbi1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLVx0XHQgKiBiYXNlIHBhZ2VzIGZvciBjb21wYWN0aW9uLCB3YWtlIGtjb21wYWN0ZCBcdTAwMjYgc2xlZXAuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZGVmcmFnX21vZGUgXHUwMDI2XHUwMDI2IG9yZGVyKVxuLVx0XHRcdGl0ZW0gPSBOUl9GUkVFX1BBR0VTX0JMT0NLUztcbi1cdFx0ZWxzZVxuLVx0XHRcdGl0ZW0gPSBOUl9GUkVFX1BBR0VTO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIHRoZXJlIGlzIGEgaGlnaCBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLFxuIFx0XHQgKiB0aGUgY3VtdWxhdGl2ZSBlcnJvciBmcm9tIHRoZSB2bXN0YXQgcGVyLWNwdSBjYWNoZVxuQEAgLTcwMDEsOSArNjk4NSwxMiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdCAqIGNvdW50ZXIgd29uJ3QgYWN0dWFsbHkgYmUgcGVyLWNwdSBjYWNoZWQuIEJ1dCBrZWVwXG4gXHRcdCAqIHRoaW5ncyBzaW1wbGUgZm9yIG5vdzsgcmV2aXNpdCB3aGVuIHNvbWVib2R5IGNhcmVzLlxuIFx0XHQgKi9cbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBpdGVtKTtcbitcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcik7XG4gXHRcdGlmICh6b25lLVx1MDAzZXBlcmNwdV9kcmlmdF9tYXJrIFx1MDAyNlx1MDAyNiBmcmVlX3BhZ2VzIFx1MDAzYyB6b25lLVx1MDAzZXBlcmNwdV9kcmlmdF9tYXJrKVxuLVx0XHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgaXRlbSk7XG4rXHRcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLFxuK1x0XHRcdFx0XHRkZWZyYWdfbW9kZSBcdTAwMjYgb3JkZXIgP1xuK1x0XHRcdFx0XHROUl9GUkVFX1BBR0VTX0JMT0NLUyA6IE5SX0ZSRUVfUEFHRVMpO1xuIFxuIFx0XHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWFyaywgaGlnaGVzdF96b25laWR4LFxuIFx0XHRcdFx0XHQwLCBmcmVlX3BhZ2VzKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjMyLjUzNjU0Mzc3OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY5NDUyMjg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIEFzc2Vzc21lbnQ6IE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRpbmtlcmluZyB3aXRoIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gd2l0aGluIHRoZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSwgaG93IGZyZWUgcGFnZXMgYXJlIGNhbGN1bGF0ZWQsIGZyYWdtZW50YXRpb24gaXMgc2NvcmVkLCBhbmQgY29tcGFjdGlvbiBpcyB0cmlnZ2VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGJlaW5nIGNoYW5nZWQuIFRoZSBwYXRjaCBtb2RpZmllcyBgY29tcGFjdF9ocGFnZV9vcmRlcigpYCBiYXNlZCBvbiBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgLiBJdCBpbnRyb2R1Y2VzIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKClgIGFuZCBtb2RpZmllcyB0aGUgZnJhZ21lbnRhdGlvbiBzY29yaW5nIGZ1bmN0aW9ucyB0byB0YWtlIGFuIG9yZGVyIHBhcmFtZXRlci4gVGhlIGBrc3dhcGRfaXNfcnVubmluZ2AgY2hlY2sgaW4gYF9fY29tcGFjdF9maW5pc2hlZGAgbm93IG9ubHkgb2NjdXJzIGlmIGl0J3MgXCJjb3N0bHlcIi5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoaXM6IFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbTsgcGFnZSBhbGxvY2F0aW9uLCBjb21wYWN0aW9uLCBhbmQgdm1zY2FuLiBDcnVjaWFsbHksIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmVuJ3QgYW55IGJyYW5kLW5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgd2l0aGluIHRoZXNlIGNoYW5nZXMuIFRoZSBwYXRjaCBkb2Vzbid0IGludm9sdmUgYW55IG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgbWlnaHQgYWxsb3cgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGxvZ2ljIG9mIHdoZW4gdG8gY29tcGFjdCBhbmQgaG93IHRvIHNjb3JlIGZyYWdtZW50YXRpb24sIHJhdGhlciB0aGFuIGRpcmVjdCBtZW1vcnkgYWNjZXNzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaGVyZSBhcmUgbW9zdCBsaWtlbHkgbG9naWMgYnVnc+KAlHRoaW5ncyBsaWtlIGluZmluaXRlIGxvb3BzLCBpbmNvcnJlY3Qgd2F0ZXJtYXJrcywgb3V0LW9mLW1lbW9yeSBlcnJvcnPigJRvciwgYXQgd29yc3QsIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBLQVNBTiB3b3VsZCBjYXRjaC4gQ3J1Y2lhbGx5LCB0aGlzIGRvZXNu4oCZdCBzZWVtIGxpa2UgYSBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCBsZWFrIHRvIHVzZXJzcGFjZSBvciBiZSB1c2VkIGluIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gc3RhY2sgdmFyaWFibGVzKSBpbiBhIHdheSB0aGF0ICpzcGVjaWZpY2FsbHkqIGNhbGxzIGZvciBLTVNBTi5cblxuTGV0J3MgcXVpY2tseSBzY2FuIHRoZSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcygpYCBjb2RlOiBUaGlzIGNvZGUganVzdCByZWFkcyB2YWx1ZXMgZnJvbSBgem9uZS1cdTAwM2VmcmVlX2FyZWFbb10ubnJfZnJlZWAsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG5cbk5vdywgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY2hhbmdlcyB3aXRoaW4gYHZtc2Nhbi5jYC4gSXQgaGFzOlxuXG5gYGBjXG4tXHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgaXRlbSk7XG4rXHRcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxuK1x0XHRcdFx0XHRcdCAgICAgICBkZWZyYWdfbW9kZSBcdTAwMjYgb3JkZXIpO1xuIFx0XHRpZiAoem9uZS1cdTAwM2VwZXJjcHVfZHJpZnRfbWFyayBcdTAwMjZcdTAwMjYgZnJlZV9wYWdlcyBcdTAwM2Mgem9uZS1cdTAwM2VwZXJjcHVfZHJpZnRfbWFyaylcbi1cdFx0XHRmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIGl0ZW0pO1xuK1x0XHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSxcbitcdFx0XHRcdFx0ZGVmcmFnX21vZGUgXHUwMDI2IG9yZGVyID9cbitcdFx0XHRcdFx0TlJfRlJFRV9QQUdFU19CTE9DS1MgOiBOUl9GUkVFX1BBR0VTKTtcbmBgYFxuXG5Pa2F5LCB0aGUgY3J1Y2lhbCBjaGFuZ2UgaXMgYGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcmAuIFByZXZpb3VzbHksIGl0IHdhcyBgZGVmcmFnX21vZGUgXHUwMDI2XHUwMDI2IG9yZGVyYC4gTm93LCB3aGlsZSBgZGVmcmFnX21vZGVgIGlzIGxpa2VseSBhIGJvb2xlYW4gb3IgaW50ZWdlciwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBjaGVjay4gSWYgYGRlZnJhZ19tb2RlYCBpc24ndCAxLCB0aGlzIGNoYW5nZSBtaWdodCByZXN1bHQgaW4gYSBidWcuIEl0IGFwcGVhcnMgdG8gYmUgYSBidWcgaWYgYGRlZnJhZ19tb2RlYCBpcyBub3QgMS4gRXZlbiBzbywgaXQncyBhIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9uZS5cblxuKipDb25jbHVzaW9uOioqIEJhc2VkIG9uIHRoaXMgcmV2aWV3LCB0aGlzIHBhdGNoIGRvZXNuJ3QgcG9zZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgcmVxdWlyaW5nIGEgS01TQU4gY2hlY2suIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGNvbXBhY3Rpb24gaGV1cmlzdGljcyBhbmQgZnJlZSBwYWdlIGNhbGN1bGF0aW9ucywgd2l0aG91dCBpbnRyb2R1Y2luZyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugb3IgY29tcGxleCBhbGxvY2F0aW9ucy4gQW55IGludHJvZHVjZWQgYnVncywgbGlrZSBpbiB3YXRlcm1hcmsgY2FsY3VsYXRpb25zLCB3b3VsZCBsZWFkIHRvIHByb2JsZW1zIHRoYXQgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgd291bGQgYmUgYWJsZSB0byBjYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExOCwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzo0Ny4yMzEwNjkzMzhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gaGV1cmlzdGljcywgc3VjaCBhcyBmcmFnbWVudGF0aW9uIHNjb3JpbmcgYW5kIGVmZmVjdGl2ZSBmcmVlIHBhZ2VzIGNhbGN1bGF0aW9uIGZvciBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMgaW4gd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucyBvciB0aGUgYGRlZnJhZ19tb2RlIFxcdTAwMjYgb3JkZXJgIGJpdHdpc2Ugb3BlcmF0aW9uKSB3b3VsZCByZXN1bHQgaW4gcGVyZm9ybWFuY2UgaXNzdWVzLCBPT01zLCBvciBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnIHRvb2xzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB0aGF0IHJlcXVpcmVzIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gaGV1cmlzdGljcywgc3VjaCBhcyBmcmFnbWVudGF0aW9uIHNjb3JpbmcgYW5kIGVmZmVjdGl2ZSBmcmVlIHBhZ2VzIGNhbGN1bGF0aW9uIGZvciBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMgaW4gd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucyBvciB0aGUgYGRlZnJhZ19tb2RlIFxcdTAwMjYgb3JkZXJgIGJpdHdpc2Ugb3BlcmF0aW9uKSB3b3VsZCByZXN1bHQgaW4gcGVyZm9ybWFuY2UgaXNzdWVzLCBPT01zLCBvciBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnIHRvb2xzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB0aGF0IHJlcXVpcmVzIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ql2t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-25 04:51:36 +0000 UTC FinishedAt: 2026-08-25 05:07:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "70ff9f9ec393d5be1d5bea709d3b105ad4233a7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "70ff9f9ec393d5be1d5bea709d3b105ad4233a7f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "COMPACTION", "TRANSPARENT_HUGEPAGE" ], "series_id": "092c4c43-e7c2-4385-a65a-681ee2b037d7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "try_to_compact_pages", "zone_effective_free_pages", "compaction_zonelist_suitable", "wakeup_kswapd", "wakeup_kcompactd", "kswapd_try_clear_hopeless" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDt6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUmIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7LAogICAgJiMzNDt3YWtldXBfa2NvbXBhY3RkJiMzNDssCiAgICAmIzM0O2tzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGhldXJpc3RpY3MsIHN1Y2ggYXMgZnJhZ21lbnRhdGlvbiBzY29yaW5nIGFuZCBlZmZlY3RpdmUgZnJlZSBwYWdlcyBjYWxjdWxhdGlvbiBmb3IgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzIGluIHdhdGVybWFyayBjYWxjdWxhdGlvbnMgb3IgdGhlIGBkZWZyYWdfbW9kZSBcdTAwMjYgb3JkZXJgIGJpdHdpc2Ugb3BlcmF0aW9uKSB3b3VsZCByZXN1bHQgaW4gcGVyZm9ybWFuY2UgaXNzdWVzLCBPT01zLCBvciBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnIHRvb2xzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB0aGF0IHJlcXVpcmVzIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMmJmOTE2ZGQ0YmEwNmJmNWFjNzY4ZDdiMDQzYmM1Y2M0ZDRmOWU1NFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDI1IDA1OjA1OjAzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uY1xuaW5kZXggYTA0OTQxNTUxMmM2Ny4uMjliZTcyNTk3NDE1NiAxMDA2NDRcbi0tLSBhL21tL2NvbXBhY3Rpb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jXG5AQCAtMjQsNiAmIzQzOzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O3BhZ2VfYWxsb2MuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiBcbkBAIC04MSw2ICYjNDM7ODIsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgY29tcGFjdF9ocGFnZV9vcmRlcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xuJiM0MztcbiYjNDM7XHRpZiAob3JkZXJzKVxuJiM0MztcdFx0cmV0dXJuIF9fZmZzKG9yZGVycyk7XG4mIzQzO1x0cmV0dXJuIENPTVBBQ1RJT05fSFBBR0VfT1JERVI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuIHtcbiBcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XG5AQCAtODI3LDYgJiM0Mzs4MzcsMTIgQEAgc3RhdGljIGJvb2wgc2tpcF9pc29sYXRpb25fb25fb3JkZXIoaW50IG9yZGVyLCBpbnQgdGFyZ2V0X29yZGVyKVxuIFx0ICovXG4gXHRpZiAoIWlzX3ZpYV9jb21wYWN0X21lbW9yeSh0YXJnZXRfb3JkZXIpIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2U9IHRhcmdldF9vcmRlcilcbiBcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdC8qIFdlIGFyZSBjb21wYWN0aW5nIGZvciBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uICovXG4mIzQzO1x0aWYgKGlzX3ZpYV9jb21wYWN0X21lbW9yeSh0YXJnZXRfb3JkZXIpIFx1MDAyNlx1MDAyNiBvcmRlciBcdTAwM2U9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiBcdC8qXG4gXHQgKiBXZSBsaW1pdCBtZW1vcnkgY29tcGFjdGlvbiB0byBwYWdlYmxvY2tzIGFuZCB3b24mIzM5O3QgdHJ5XG4gXHQgKiBjcmVhdGluZyBmcmVlIGJsb2NrcyBvZiBtZW1vcnkgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhhdC5cbkBAIC0yMjA4LDE2ICYjNDM7MjIyNCwxNiBAQCBzdGF0aWMgYm9vbCBrc3dhcGRfaXNfcnVubmluZyhwZ19kYXRhX3QgKnBnZGF0KVxuIFxuIC8qXG4gICogQSB6b25lJiMzOTtzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb24gd3J0IHRvIHRoZVxuLSAqIENPTVBBQ1RJT05fSFBBR0VfT1JERVIuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4mIzQzOyAqIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKS4gSXQgcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS5cbiAgKi9cbi1zdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4tXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgQ09NUEFDVElPTl9IUEFHRV9PUkRFUik7XG4mIzQzO1x0cmV0dXJuIGV4dGZyYWdfZm9yX29yZGVyKHpvbmUsIG9yZGVyKTtcbiB9XG4gXG4gLypcbiAgKiBBIHdlaWdodGVkIHpvbmUmIzM5O3MgZnJhZ21lbnRhdGlvbiBzY29yZSBpcyB0aGUgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvblxuLSAqIHdydCB0byB0aGUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUiBzY2FsZWQgYnkgdGhlIHpvbmUmIzM5O3Mgc2l6ZS4gSXRcbiYjNDM7ICogd3J0IHRvIHRoZSBjb21wYWN0X2hwYWdlX29yZGVyKCkgc2NhbGVkIGJ5IHRoZSB6b25lJiMzOTtzIHNpemUuIEl0XG4gICogcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS5cbiAgKlxuICAqIFRoZSBzY2FsaW5nIGZhY3RvciBlbnN1cmVzIHRoYXQgcHJvYWN0aXZlIGNvbXBhY3Rpb24gZm9jdXNlcyBvbiBsYXJnZXJcbkBAIC0yMjI1LDExICYjNDM7MjI0MSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiAgKiBaT05FX0RNQTMyLiBGb3Igc21hbGxlciB6b25lcywgdGhlIHNjb3JlIHZhbHVlIHJlbWFpbnMgY2xvc2UgdG8gemVybyxcbiAgKiBhbmQgdGh1cyBuZXZlciBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZCBmb3IgcHJvYWN0aXZlIGNvbXBhY3Rpb24uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBzY29yZTtcbiBcbi1cdHNjb3JlID0gem9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzICogZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHpvbmUpO1xuJiM0MztcdHNjb3JlID0gem9uZS1cdTAwM2VwcmVzZW50X3BhZ2VzICogZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHpvbmUsIG9yZGVyKTtcbiBcdHJldHVybiBkaXY2NF91bChzY29yZSwgem9uZS1cdTAwM2V6b25lX3BnZGF0LVx1MDAzZW5vZGVfcHJlc2VudF9wYWdlcyAmIzQzOyAxKTtcbiB9XG4gXG5AQCAtMjI0MCw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKVxuICAqIHRoZSBub2RlJiMzOTtzIHNjb3JlIGZhbGxzIGJlbG93IHRoZSBsb3cgdGhyZXNob2xkLCBvciBvbmUgb2YgdGhlIGJhY2stb2ZmXG4gICogY29uZGl0aW9ucyBpcyBtZXQuXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdClcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHVuc2lnbmVkIGludCBzY29yZSA9IDA7XG4gXHRpbnQgem9uZWlkO1xuQEAgLTIyNTEsNyAmIzQzOzIyNjcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ19kYXRhX3QgKnBnZGF0KVxuIFx0XHR6b25lID0gXHUwMDI2cGdkYXQtXHUwMDNlbm9kZV96b25lc1t6b25laWRdO1xuIFx0XHRpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKVxuIFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRzY29yZSAmIzQzOz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUpO1xuJiM0MztcdFx0c2NvcmUgJiM0Mzs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lLCBvcmRlcik7XG4gXHR9XG4gXG4gXHRyZXR1cm4gc2NvcmU7XG5AQCAtMjI2OSwxMiAmIzQzOzIyODUsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3dtYXJrKGJvb2wgbG93KVxuIHN0YXRpYyBib29sIHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4ge1xuIFx0aW50IHdtYXJrX2hpZ2g7XG4mIzQzO1x0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xuIFxuIFx0aWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpO1xuLVx0cmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCkgXHUwMDNlIHdtYXJrX2hpZ2g7XG4mIzQzO1x0cmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpIFx1MDAzZSB3bWFya19oaWdoO1xuIH1cbiBcbiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBfX2NvbXBhY3RfZmluaXNoZWQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXG5AQCAtMjMwNiwxMiAmIzQzOzIzMjMsMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgX19jb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuIFx0aWYgKGNjLVx1MDAzZXByb2FjdGl2ZV9jb21wYWN0aW9uKSB7XG4gXHRcdGludCBzY29yZSwgd21hcmtfbG93O1xuIFx0XHRwZ19kYXRhX3QgKnBnZGF0O1xuJiM0MztcdFx0Ym9vbCBjb3N0bHkgPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuIFxuIFx0XHRwZ2RhdCA9IGNjLVx1MDAzZXpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbi1cdFx0aWYgKGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiYjNDM7XHRcdGlmIChjb3N0bHkgXHUwMDI2XHUwMDI2IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiBcdFx0XHRyZXR1cm4gQ09NUEFDVF9QQVJUSUFMX1NLSVBQRUQ7XG4gXG4tXHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLVx1MDAzZXpvbmUpO1xuJiM0MztcdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtXHUwMDNlem9uZSwgY29tcGFjdF9ocGFnZV9vcmRlcigpKTtcbiBcdFx0d21hcmtfbG93ID0gZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayh0cnVlKTtcbiBcbiBcdFx0aWYgKHNjb3JlIFx1MDAzZSB3bWFya19sb3cpXG5AQCAtMjUxMCw2ICYjNDM7MjUyOCwzOCBAQCBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXJcbiYjNDM7ICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXG4mIzQzOyAqIEBvcmRlcjogICAgICBhbGxvY2F0aW9uIG9yZGVyXG4mIzQzOyAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1NcbiYjNDM7ICpcbiYjNDM7ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUgYmxvY2tzIHRvIGF2b2lkXG4mIzQzOyAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaFxuJiM0MzsgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LlxuJiM0MzsgKlxuJiM0MzsgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXNcbiYjNDM7ICogaW4gYmxvY2tzIFx1MDAzZT0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFBcbiYjNDM7ICogYWxsb2NhdGlvbnMuXG4mIzQzOyAqL1xuJiM0Mzt1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4mIzQzO1x0XHRcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzQzO1x0XHRcdFx0XHRib29sIHVzZV9ibG9ja3MpXG4mIzQzO3tcbiYjNDM7XHRpZiAodXNlX2Jsb2NrcylcbiYjNDM7XHRcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpO1xuJiM0MztcbiYjNDM7XHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcdTAwMjZcdTAwMjYgb3JkZXIgPT0gY29tcGFjdF9ocGFnZV9vcmRlcigpKSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoaW50IG8gPSBvcmRlcjsgbyBcdTAwM2MgTlJfUEFHRV9PUkRFUlM7IG8mIzQzOyYjNDM7KVxuJiM0MztcdFx0XHRmcmVlX3BhZ2VzICYjNDM7PSB6b25lLVx1MDAzZWZyZWVfYXJlYVtvXS5ucl9mcmVlIFx1MDAzY1x1MDAzYyBvO1xuJiM0MztcdFx0cmV0dXJuIGZyZWVfcGFnZXM7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogU2hvdWxkIHdlIGRvIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBhbGxvY2F0aW9uIG9yZGVyLlxuICAqIFJldHVybiBDT01QQUNUX1NVQ0NFU1MgaWYgYWxsb2NhdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGNhbiBiZSBhbHJlYWR5XG5AQCAtMjUyNSwxMCAmIzQzOzI1NzUsOCBAQCBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XG4gXG4tXHRpZiAoa2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSlcbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XG4tXHRlbHNlXG4tXHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4mIzQzO1x0ZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsXG4mIzQzO1x0XHRcdFx0XHQgICAgICAga2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSk7XG4gXG4gXHR3YXRlcm1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSyk7XG4gXHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgd2F0ZXJtYXJrLCBoaWdoZXN0X3pvbmVpZHgsXG5AQCAtMzIzOCwxMCAmIzQzOzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdFx0dGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcbiBcdFx0aWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkge1xuIFx0XHRcdHVuc2lnbmVkIGludCBwcmV2X3Njb3JlLCBzY29yZTtcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xuIFxuLVx0XHRcdHByZXZfc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpO1xuJiM0MztcdFx0XHRwcmV2X3Njb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XG4gXHRcdFx0Y29tcGFjdF9ub2RlKHBnZGF0LCB0cnVlKTtcbi1cdFx0XHRzY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7XG4mIzQzO1x0XHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBEZWZlciBwcm9hY3RpdmUgY29tcGFjdGlvbiBpZiB0aGUgZnJhZ21lbnRhdGlvblxuIFx0XHRcdCAqIHNjb3JlIGRpZCBub3QgZ28gZG93biBpLmUuIG5vIHByb2dyZXNzIG1hZGUuXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjE0YmI5NTQzODc5YjQgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTY1NCw0ICYjNDM7MTY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3Vuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcbiYjNDM7XHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbiYjNDM7XHRcdFx0XHRcdGJvb2wgdXNlX2Jsb2Nrcyk7XG4gI2VuZGlmXHQvKiBfX01NX0lOVEVSTkFMX0ggKi9cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li5hNDE5YTJjMmZjYTQwIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtNjk2Niw3ICYjNDM7Njk2Niw2IEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiBcdCAqIG1lZXQgd2F0ZXJtYXJrcy5cbiBcdCAqL1xuIFx0Zm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBoaWdoZXN0X3pvbmVpZHgpIHtcbi1cdFx0ZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtO1xuIFx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7XG4gXG4gXHRcdGlmIChzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcdTAwMjYgTlVNQV9CQUxBTkNJTkdfTUVNT1JZX1RJRVJJTkcpXG5AQCAtNjk3NCwyMSAmIzQzOzY5NzMsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdGVsc2VcbiBcdFx0XHRtYXJrID0gaGlnaF93bWFya19wYWdlcyh6b25lKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGVcbi1cdFx0ICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLlxuLVx0XHQgKlxuLVx0XHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXG4tXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzXG4tXHRcdCAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlXG4tXHRcdCAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2hcbi1cdFx0ICogYmFzZSBwYWdlcyBmb3IgY29tcGFjdGlvbiwgd2FrZSBrY29tcGFjdGQgXHUwMDI2IHNsZWVwLlxuLVx0XHQgKi9cbi1cdFx0aWYgKGRlZnJhZ19tb2RlIFx1MDAyNlx1MDAyNiBvcmRlcilcbi1cdFx0XHRpdGVtID0gTlJfRlJFRV9QQUdFU19CTE9DS1M7XG4tXHRcdGVsc2Vcbi1cdFx0XHRpdGVtID0gTlJfRlJFRV9QQUdFUztcbi1cbiBcdFx0LypcbiBcdFx0ICogV2hlbiB0aGVyZSBpcyBhIGhpZ2ggbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbSxcbiBcdFx0ICogdGhlIGN1bXVsYXRpdmUgZXJyb3IgZnJvbSB0aGUgdm1zdGF0IHBlci1jcHUgY2FjaGVcbkBAIC03MDAxLDkgJiM0Mzs2OTg1LDEyIEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbiBcdFx0ICogY291bnRlciB3b24mIzM5O3QgYWN0dWFsbHkgYmUgcGVyLWNwdSBjYWNoZWQuIEJ1dCBrZWVwXG4gXHRcdCAqIHRoaW5ncyBzaW1wbGUgZm9yIG5vdzsgcmV2aXNpdCB3aGVuIHNvbWVib2R5IGNhcmVzLlxuIFx0XHQgKi9cbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBpdGVtKTtcbiYjNDM7XHRcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICAgZGVmcmFnX21vZGUgXHUwMDI2IG9yZGVyKTtcbiBcdFx0aWYgKHpvbmUtXHUwMDNlcGVyY3B1X2RyaWZ0X21hcmsgXHUwMDI2XHUwMDI2IGZyZWVfcGFnZXMgXHUwMDNjIHpvbmUtXHUwMDNlcGVyY3B1X2RyaWZ0X21hcmspXG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBpdGVtKTtcbiYjNDM7XHRcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLFxuJiM0MztcdFx0XHRcdFx0ZGVmcmFnX21vZGUgXHUwMDI2IG9yZGVyID9cbiYjNDM7XHRcdFx0XHRcdE5SX0ZSRUVfUEFHRVNfQkxPQ0tTIDogTlJfRlJFRV9QQUdFUyk7XG4gXG4gXHRcdGlmIChfX3pvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCBtYXJrLCBoaWdoZXN0X3pvbmVpZHgsXG4gXHRcdFx0XHRcdDAsIGZyZWVfcGFnZXMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT01QQUNUSU9OJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dHJ5X3RvX2NvbXBhY3RfcGFnZXMmIzM0OywKICAgICYjMzQ7em9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyYjMzQ7LAogICAgJiMzNDtjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlJiMzNDssCiAgICAmIzM0O3dha2V1cF9rc3dhcGQmIzM0OywKICAgICYjMzQ7d2FrZXVwX2tjb21wYWN0ZCYjMzQ7LAogICAgJiMzNDtrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gbG9naWMgdG8gc3VwcG9ydCBtdWx0aS1zaXplIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKG1USFApLiBJdCBpbnRyb2R1Y2VzIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCB0byBjYWxjdWxhdGUgZnJlZSBwYWdlcyByZWxldmFudCB0byB0aGUgYWxsb2NhdGlvbiBvcmRlciBhbmQgdXBkYXRlcyBjb21wYWN0aW9uIHN1aXRhYmlsaXR5IGNoZWNrcywgZnJhZ21lbnRhdGlvbiBzY29yaW5nLCBhbmQga2NvbXBhY3RkL2tzd2FwZCBiZWhhdmlvciB0byB1c2UgdGhlIG5ldyBgY29tcGFjdF9ocGFnZV9vcmRlcigpYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyYmY5MTZkZDRiYTA2YmY1YWM3NjhkN2IwNDNiYzVjYzRkNGY5ZTU0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDU6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmMKaW5kZXggYTA0OTQxNTUxMmM2Ny4uMjliZTcyNTk3NDE1NiAxMDA2NDQKLS0tIGEvbW0vY29tcGFjdGlvbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2NvbXBhY3Rpb24uYwpAQCAtMjQsNiAmIzQzOzI0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlX293bmVyLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHNpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY3B1c2V0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2h1Z2VfbW0uaCZndDsKICNpbmNsdWRlICYjMzQ7cGFnZV9hbGxvYy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CiAKQEAgLTgxLDYgJiM0Mzs4MiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH0KICNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUgkoUE1EX1NISUZUIC0gUEFHRV9TSElGVCkKICNlbmRpZgogCiYjNDM7c3RhdGljIGlubGluZSBpbnQgY29tcGFjdF9ocGFnZV9vcmRlcih2b2lkKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpOwomIzQzOwomIzQzOwlpZiAob3JkZXJzKQomIzQzOwkJcmV0dXJuIF9fZmZzKG9yZGVycyk7CiYjNDM7CXJldHVybiBDT01QQUNUSU9OX0hQQUdFX09SREVSOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbWFya19hbGxvY2F0ZWRfbm9wcm9mKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncykKIHsKIAlwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIF9fR0ZQX01PVkFCTEUsIEFMTE9DX0RFRkFVTFQpOwpAQCAtODI3LDYgJiM0Mzs4MzcsMTIgQEAgc3RhdGljIGJvb2wgc2tpcF9pc29sYXRpb25fb25fb3JkZXIoaW50IG9yZGVyLCBpbnQgdGFyZ2V0X29yZGVyKQogCSAqLwogCWlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgJmFtcDsmYW1wOyBvcmRlciAmZ3Q7PSB0YXJnZXRfb3JkZXIpCiAJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwkvKiBXZSBhcmUgY29tcGFjdGluZyBmb3IgbXVsdGktc2l6ZSBUSFAgYWxsb2NhdGlvbiAqLwomIzQzOwlpZiAoaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgJmFtcDsmYW1wOyBvcmRlciAmZ3Q7PSBjb21wYWN0X2hwYWdlX29yZGVyKCkgJmFtcDsmYW1wOwomIzQzOwkgICAgUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwogCS8qCiAJICogV2UgbGltaXQgbWVtb3J5IGNvbXBhY3Rpb24gdG8gcGFnZWJsb2NrcyBhbmQgd29uJiMzOTt0IHRyeQogCSAqIGNyZWF0aW5nIGZyZWUgYmxvY2tzIG9mIG1lbW9yeSB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGF0LgpAQCAtMjIwOCwxNiAmIzQzOzIyMjQsMTYgQEAgc3RhdGljIGJvb2wga3N3YXBkX2lzX3J1bm5pbmcocGdfZGF0YV90ICpwZ2RhdCkKIAogLyoKICAqIEEgem9uZSYjMzk7cyBmcmFnbWVudGF0aW9uIHNjb3JlIGlzIHRoZSBleHRlcm5hbCBmcmFnbWVudGF0aW9uIHdydCB0byB0aGUKLSAqIENPTVBBQ1RJT05fSFBBR0VfT1JERVIuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uCiYjNDM7ICogY29tcGFjdF9ocGFnZV9vcmRlcigpLiBJdCByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFswLCAxMDBdLgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSkKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKQogewotCXJldHVybiBleHRmcmFnX2Zvcl9vcmRlcih6b25lLCBDT01QQUNUSU9OX0hQQUdFX09SREVSKTsKJiM0MzsJcmV0dXJuIGV4dGZyYWdfZm9yX29yZGVyKHpvbmUsIG9yZGVyKTsKIH0KIAogLyoKICAqIEEgd2VpZ2h0ZWQgem9uZSYjMzk7cyBmcmFnbWVudGF0aW9uIHNjb3JlIGlzIHRoZSBleHRlcm5hbCBmcmFnbWVudGF0aW9uCi0gKiB3cnQgdG8gdGhlIENPTVBBQ1RJT05fSFBBR0VfT1JERVIgc2NhbGVkIGJ5IHRoZSB6b25lJiMzOTtzIHNpemUuIEl0CiYjNDM7ICogd3J0IHRvIHRoZSBjb21wYWN0X2hwYWdlX29yZGVyKCkgc2NhbGVkIGJ5IHRoZSB6b25lJiMzOTtzIHNpemUuIEl0CiAgKiByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFswLCAxMDBdLgogICoKICAqIFRoZSBzY2FsaW5nIGZhY3RvciBlbnN1cmVzIHRoYXQgcHJvYWN0aXZlIGNvbXBhY3Rpb24gZm9jdXNlcyBvbiBsYXJnZXIKQEAgLTIyMjUsMTEgJiM0MzsyMjQxLDExIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHN0cnVjdCB6b25lICp6b25lKQogICogWk9ORV9ETUEzMi4gRm9yIHNtYWxsZXIgem9uZXMsIHRoZSBzY29yZSB2YWx1ZSByZW1haW5zIGNsb3NlIHRvIHplcm8sCiAgKiBhbmQgdGh1cyBuZXZlciBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZCBmb3IgcHJvYWN0aXZlIGNvbXBhY3Rpb24uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBzY29yZTsKIAotCXNjb3JlID0gem9uZS0mZ3Q7cHJlc2VudF9wYWdlcyAqIGZyYWdtZW50YXRpb25fc2NvcmVfem9uZSh6b25lKTsKJiM0MzsJc2NvcmUgPSB6b25lLSZndDtwcmVzZW50X3BhZ2VzICogZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHpvbmUsIG9yZGVyKTsKIAlyZXR1cm4gZGl2NjRfdWwoc2NvcmUsIHpvbmUtJmd0O3pvbmVfcGdkYXQtJmd0O25vZGVfcHJlc2VudF9wYWdlcyAmIzQzOyAxKTsKIH0KIApAQCAtMjI0MCw3ICYjNDM7MjI1Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKQogICogdGhlIG5vZGUmIzM5O3Mgc2NvcmUgZmFsbHMgYmVsb3cgdGhlIGxvdyB0aHJlc2hvbGQsIG9yIG9uZSBvZiB0aGUgYmFjay1vZmYKICAqIGNvbmRpdGlvbnMgaXMgbWV0LgogICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ19kYXRhX3QgKnBnZGF0KQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAl1bnNpZ25lZCBpbnQgc2NvcmUgPSAwOwogCWludCB6b25laWQ7CkBAIC0yMjUxLDcgJiM0MzsyMjY3LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCkKIAkJem9uZSA9ICZhbXA7cGdkYXQtJmd0O25vZGVfem9uZXNbem9uZWlkXTsKIAkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKIAkJCWNvbnRpbnVlOwotCQlzY29yZSAmIzQzOz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUpOwomIzQzOwkJc2NvcmUgJiM0Mzs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lLCBvcmRlcik7CiAJfQogCiAJcmV0dXJuIHNjb3JlOwpAQCAtMjI2OSwxMiAmIzQzOzIyODUsMTMgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3dtYXJrKGJvb2wgbG93KQogc3RhdGljIGJvb2wgc2hvdWxkX3Byb2FjdGl2ZV9jb21wYWN0X25vZGUocGdfZGF0YV90ICpwZ2RhdCkKIHsKIAlpbnQgd21hcmtfaGlnaDsKJiM0MzsJdW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpOwogCiAJaWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSkKIAkJcmV0dXJuIGZhbHNlOwogCiAJd21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpOwotCXJldHVybiBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpICZndDsgd21hcmtfaGlnaDsKJiM0MzsJcmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpICZndDsgd21hcmtfaGlnaDsKIH0KIAogc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgX19jb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKQpAQCAtMjMwNiwxMiAmIzQzOzIzMjMsMTMgQEAgc3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgX19jb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKQogCWlmIChjYy0mZ3Q7cHJvYWN0aXZlX2NvbXBhY3Rpb24pIHsKIAkJaW50IHNjb3JlLCB3bWFya19sb3c7CiAJCXBnX2RhdGFfdCAqcGdkYXQ7CiYjNDM7CQlib29sIGNvc3RseSA9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSAmZ3Q7IFBBR0VfQUxMT0NfQ09TVExZX09SREVSOwogCiAJCXBnZGF0ID0gY2MtJmd0O3pvbmUtJmd0O3pvbmVfcGdkYXQ7Ci0JCWlmIChrc3dhcGRfaXNfcnVubmluZyhwZ2RhdCkpCiYjNDM7CQlpZiAoY29zdGx5ICZhbXA7JmFtcDsga3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKQogCQkJcmV0dXJuIENPTVBBQ1RfUEFSVElBTF9TS0lQUEVEOwogCi0JCXNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLSZndDt6b25lKTsKJiM0MzsJCXNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLSZndDt6b25lLCBjb21wYWN0X2hwYWdlX29yZGVyKCkpOwogCQl3bWFya19sb3cgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3dtYXJrKHRydWUpOwogCiAJCWlmIChzY29yZSAmZ3Q7IHdtYXJrX2xvdykKQEAgLTI1MTAsNiAmIzQzOzI1MjgsMzggQEAgYm9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLAogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzOy8qKgomIzQzOyAqIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMgLSBnZXQgZnJlZSBwYWdlcyByZWxldmFudCB0byBhbGxvY2F0aW9uIG9yZGVyCiYjNDM7ICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lCiYjNDM7ICogQG9yZGVyOiAgICAgIGFsbG9jYXRpb24gb3JkZXIKJiM0MzsgKiBAdXNlX2Jsb2NrczogaWYgdHJ1ZSwgdXNlIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTCiYjNDM7ICoKJiM0MzsgKiBJbiBkZWZyYWdfbW9kZSwgd2F0ZXJtYXJrcyBtdXN0IGJlIG1ldCBpbiB3aG9sZSBibG9ja3MgdG8gYXZvaWQKJiM0MzsgKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2gKJiM0MzsgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LgomIzQzOyAqCiYjNDM7ICogV2hlbiBtVEhQIGFsd2F5cy1lbmFibGVkIG9yZGVycyBhcmUgY29uZmlndXJlZCwgY291bnQgb25seSBmcmVlIHBhZ2VzCiYjNDM7ICogaW4gYmxvY2tzICZndDs9IG1pbiBtVEhQIG9yZGVyLCBhcyBzbWFsbGVyIGZyYWdtZW50cyBjYW5ub3Qgc2F0aXNmeSBtVEhQCiYjNDM7ICogYWxsb2NhdGlvbnMuCiYjNDM7ICovCiYjNDM7dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLAomIzQzOwkJCQkJdW5zaWduZWQgaW50IG9yZGVyLAomIzQzOwkJCQkJYm9vbCB1c2VfYmxvY2tzKQomIzQzO3sKJiM0MzsJaWYgKHVzZV9ibG9ja3MpCiYjNDM7CQlyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTsKJiM0MzsKJiM0MzsJaWYgKFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykgJmFtcDsmYW1wOyBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcyA9IDA7CiYjNDM7CiYjNDM7CQlmb3IgKGludCBvID0gb3JkZXI7IG8gJmx0OyBOUl9QQUdFX09SREVSUzsgbyYjNDM7JiM0MzspCiYjNDM7CQkJZnJlZV9wYWdlcyAmIzQzOz0gem9uZS0mZ3Q7ZnJlZV9hcmVhW29dLm5yX2ZyZWUgJmx0OyZsdDsgbzsKJiM0MzsJCXJldHVybiBmcmVlX3BhZ2VzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CiYjNDM7fQomIzQzOwogLyoKICAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci4KICAqIFJldHVybiBDT01QQUNUX1NVQ0NFU1MgaWYgYWxsb2NhdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGNhbiBiZSBhbHJlYWR5CkBAIC0yNTI1LDEwICYjNDM7MjU3NSw4IEBAIGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsCiAJdW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzOwogCXVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrOwogCi0JaWYgKGtjb21wYWN0ZCAmYW1wOyZhbXA7IGRlZnJhZ19tb2RlKQotCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTsKLQllbHNlCi0JCWZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7CiYjNDM7CWZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLAomIzQzOwkJCQkJICAgICAgIGtjb21wYWN0ZCAmYW1wOyZhbXA7IGRlZnJhZ19tb2RlKTsKIAogCXdhdGVybWFyayA9IHdtYXJrX3BhZ2VzKHpvbmUsIGFsbG9jX2ZsYWdzICZhbXA7IEFMTE9DX1dNQVJLX01BU0spOwogCWlmIChfX3pvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCB3YXRlcm1hcmssIGhpZ2hlc3Rfem9uZWlkeCwKQEAgLTMyMzgsMTAgJiM0MzszMjg2LDExIEBAIHN0YXRpYyBpbnQga2NvbXBhY3RkKHZvaWQgKnApCiAJCXRpbWVvdXQgPSBkZWZhdWx0X3RpbWVvdXQ7CiAJCWlmIChzaG91bGRfcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZShwZ2RhdCkpIHsKIAkJCXVuc2lnbmVkIGludCBwcmV2X3Njb3JlLCBzY29yZTsKJiM0MzsJCQl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wYWN0X2hwYWdlX29yZGVyKCk7CiAKLQkJCXByZXZfc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpOwomIzQzOwkJCXByZXZfc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQsIG9yZGVyKTsKIAkJCWNvbXBhY3Rfbm9kZShwZ2RhdCwgdHJ1ZSk7Ci0JCQlzY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7CiYjNDM7CQkJc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQsIG9yZGVyKTsKIAkJCS8qCiAJCQkgKiBEZWZlciBwcm9hY3RpdmUgY29tcGFjdGlvbiBpZiB0aGUgZnJhZ21lbnRhdGlvbgogCQkJICogc2NvcmUgZGlkIG5vdCBnbyBkb3duIGkuZS4gbm8gcHJvZ3Jlc3MgbWFkZS4KZGlmZiAtLWdpdCBhL21tL2ludGVybmFsLmggYi9tbS9pbnRlcm5hbC5oCmluZGV4IDM4YjExNjUyMTJjOTQuLjE0YmI5NTQzODc5YjQgMTAwNjQ0Ci0tLSBhL21tL2ludGVybmFsLmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaW50ZXJuYWwuaApAQCAtMTY1NCw0ICYjNDM7MTY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0Mzt1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJCQlib29sIHVzZV9ibG9ja3MpOwogI2VuZGlmCS8qIF9fTU1fSU5URVJOQUxfSCAqLwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li5hNDE5YTJjMmZjYTQwIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNjk2Niw3ICYjNDM7Njk2Niw2IEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkgKiBtZWV0IHdhdGVybWFya3MuCiAJICovCiAJZm9yX2VhY2hfbWFuYWdlZF96b25lX3BnZGF0KHpvbmUsIHBnZGF0LCBpLCBoaWdoZXN0X3pvbmVpZHgpIHsKLQkJZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtOwogCQl1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7CiAKIAkJaWYgKHN5c2N0bF9udW1hX2JhbGFuY2luZ19tb2RlICZhbXA7IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKQpAQCAtNjk3NCwyMSAmIzQzOzY5NzMsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpCiAJCWVsc2UKIAkJCW1hcmsgPSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpOwogCi0JCS8qCi0JCSAqIEluIGRlZnJhZ19tb2RlLCB3YXRlcm1hcmtzIG11c3QgYmUgbWV0IGluIHdob2xlCi0JCSAqIGJsb2NrcyB0byBhdm9pZCBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4KLQkJICoKLQkJICogSG93ZXZlciwga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2ggdGhpcyBvbgotCQkgKiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC4gT25jZSBpdCYjMzk7cwotCQkgKiByZWNsYWltZWQgYSBjb21wYWN0aW9uIGdhcCwgYW5kIGtzd2FwZF9zaHJpbmtfbm9kZQotCQkgKiBoYXMgZHJvcHBlZCBvcmRlciwgc2ltcGx5IGVuc3VyZSB0aGVyZSBhcmUgZW5vdWdoCi0JCSAqIGJhc2UgcGFnZXMgZm9yIGNvbXBhY3Rpb24sIHdha2Uga2NvbXBhY3RkICZhbXA7IHNsZWVwLgotCQkgKi8KLQkJaWYgKGRlZnJhZ19tb2RlICZhbXA7JmFtcDsgb3JkZXIpCi0JCQlpdGVtID0gTlJfRlJFRV9QQUdFU19CTE9DS1M7Ci0JCWVsc2UKLQkJCWl0ZW0gPSBOUl9GUkVFX1BBR0VTOwotCiAJCS8qCiAJCSAqIFdoZW4gdGhlcmUgaXMgYSBoaWdoIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0sCiAJCSAqIHRoZSBjdW11bGF0aXZlIGVycm9yIGZyb20gdGhlIHZtc3RhdCBwZXItY3B1IGNhY2hlCkBAIC03MDAxLDkgJiM0Mzs2OTg1LDEyIEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkJICogY291bnRlciB3b24mIzM5O3QgYWN0dWFsbHkgYmUgcGVyLWNwdSBjYWNoZWQuIEJ1dCBrZWVwCiAJCSAqIHRoaW5ncyBzaW1wbGUgZm9yIG5vdzsgcmV2aXNpdCB3aGVuIHNvbWVib2R5IGNhcmVzLgogCQkgKi8KLQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBpdGVtKTsKJiM0MzsJCWZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLAomIzQzOwkJCQkJCSAgICAgICBkZWZyYWdfbW9kZSAmYW1wOyBvcmRlcik7CiAJCWlmICh6b25lLSZndDtwZXJjcHVfZHJpZnRfbWFyayAmYW1wOyZhbXA7IGZyZWVfcGFnZXMgJmx0OyB6b25lLSZndDtwZXJjcHVfZHJpZnRfbWFyaykKLQkJCWZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgaXRlbSk7CiYjNDM7CQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLAomIzQzOwkJCQkJZGVmcmFnX21vZGUgJmFtcDsgb3JkZXIgPwomIzQzOwkJCQkJTlJfRlJFRV9QQUdFU19CTE9DS1MgOiBOUl9GUkVFX1BBR0VTKTsKIAogCQlpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWFyaywgaGlnaGVzdF96b25laWR4LAogCQkJCQkwLCBmcmVlX3BhZ2VzKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTEyMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgaW50cm9kdWNpbmcgZnVuY3Rpb25hbCBjaGFuZ2VzIHdvcnRoeSBvZiBmdXp6aW5nIGF0dGVudGlvbi4gVGhlIG1vZGlmaWNhdGlvbnMgdG8gYG1tL2NvbXBhY3Rpb24uY2AsIGBtbS9pbnRlcm5hbC5oYCwgYW5kIGBtbS92bXNjYW4uY2AgYXJlIGEgY2xlYXIgc2lnbmFsLiBTcGVjaWZpY2FsbHksIGludHJvZHVjaW5nIGBjb21wYWN0X2hwYWdlX29yZGVyKClgIHdpdGggaXRzIHVzZSBvZiBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIGZvciBjb21wYWN0aW9uIG9yZGVyIHNlbGVjdGlvbiBpcyBhIGtleSBhcmVhLiBUaGUgY2hhbmdlcyBpbXBhY3RpbmcgZnVuY3Rpb25zIGxpa2UgYHNraXBfaXNvbGF0aW9uX29uX29yZGVyYCwgYGZyYWdtZW50YXRpb25fc2NvcmVfem9uZWAsIGBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWRgLCBldGMuLCBhbGwgcG9pbnQgdG8gZnVuZGFtZW50YWwgc2hpZnRzIGluIGhvdyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgVk0gc2Nhbm5pbmcgYXJlIGhhbmRsZWQgaW4gdGhlIGtlcm5lbC4gVGhlIGZhY3QgdGhhdCB0aGlzIGlzIHJlYWNoYWJsZSBldmVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyByZWluZm9yY2VzIHRoZSB1cmdlbmN5IG9mIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgcHJpbWUgZnV6emluZyB0YXJnZXRzLiBgY29tcGFjdF9ocGFnZV9vcmRlcmAgaXMgaW5saW5lLCBzbyB3aGlsZSBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMsIGl0JiMzOTtzIGxlc3MgZGlyZWN0IGFzIGEgZnV6emluZyBlbnRyeSBwb2ludC4gTG9va2luZyBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIEkgc2VlOgoKKiAgIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYDogVGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlLCBnaXZlbiBpdHMgaW50cm9kdWN0aW9uIGFuZCB1c2FnZS4KKiAgIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmA6IFRoaXMgbG9va3MgcHJvbWlzaW5nIHRvbywgYnV0IHdhaXQuLi4gaXQmIzM5O3MgY2FsbGVkIGZyb20gYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIChub24tc3RhdGljKSBhbmQgYGNvbXBhY3Rfem9uZWAgKHN0YXRpYykuIFRoYXQgbWVhbnMgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGlzIGEgbGlrZWx5IGVudHJ5IHBvaW50IGZvciBmdXp6aW5nLCBhbmQgSSBtaWdodCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBpbnRlcmFjdGlvbnMgd2l0aCBgY29tcGFjdF96b25lYCB0b28uCiogICBga2NvbXBhY3RkYDogVGhpcyBpcyBhIGtlcm5lbCB0aHJlYWQsIHNvIGl0JiMzOTtzIGEgZ29vZCB0YXJnZXQgZm9yIGNvbmN1cnJlbnQgZnV6emluZy4KCkkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBtbS9jb21wYWN0aW9uLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIGZvY3VzaW5nIG9uIHRoZSBleHBvcnRlZCAobm9uLXN0YXRpYykgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBpbnRlcmFjdCB3aXRoIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgYW5kIHRoZSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBnb2FsIGlzIHRvIG1heGltaXplIHRoZSBjaGFuY2Ugb2YgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBvciBvdGhlciBiZWhhdmlvcmFsIGFub21hbGllcyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKFthLXpfXSYjNDM7ICkmIzQzO3pvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcXCgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTI0OTc9Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNTQ0LSAqL1xubW0vY29tcGFjdGlvbi5jOjI1NDU6dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxubW0vY29tcGFjdGlvbi5jLTI1NDYtXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9pbnRlcm5hbC5oPTE2MzQ9c3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbi0tXG5tbS9pbnRlcm5hbC5oLTE2NTYtXG5tbS9pbnRlcm5hbC5oOjE2NTc6dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxubW0vaW50ZXJuYWwuaC0xNjU4LVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI1NAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBwcmV0dHkgZmFtaWxpYXIgd2l0aCB0aGUgY29udGV4dDoKCioqQW5hbHl6aW5nIHRoZSBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIFZhcmlhYmxlKioKCkFscmlnaHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgLiBHaXZlbiB3aGF0IEkga25vdyBhYm91dCB0aGlzIHN5c3RlbSwgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6IHdoYXQgaXMgdGhlIGNvbnRleHQgb2YgdGhpcyB2YXJpYWJsZT8gSXMgaXQgYSBjb25maWd1cmF0aW9uIHNldHRpbmcsIGEgZmxhZyBpbiBhIGRhdGEgbW9kZWwsIG9yIHBlcmhhcHMgYSBjb25zdGFudCB1c2VkIGluIGEgc3BlY2lmaWMgY2FsY3VsYXRpb24gb3IgcnVsZT8gVGhlICYjMzQ7aHVnZSYjMzQ7IHBhcnQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgd2hpbGUgJiMzNDthbm9uJiMzNDsgaW1wbGllcyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGFub255bW91cyBvcmRlcnMsIGxpa2VseSBwb2ludGluZyB0byBzb21lIGludGVyZXN0aW5nIGRlc2lnbiBkZWNpc2lvbnMgYW5kIHZ1bG5lcmFiaWxpdGllcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgdmFyaWFibGUgaXMgdXNlZCwgYW5kIHdoYXQgaXQgY29udHJvbHMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdzoKKiAgIFdoYXQgZG9lcyAmIzM0O2h1Z2UmIzM0OyBhY3R1YWxseSBtZWFuIGluIHRoaXMgc3lzdGVtPyBJcyBpdCBiYXNlZCBvbiBvcmRlciBzaXplLCB2YWx1ZSwgb3Igc29tZSBvdGhlciBtZXRyaWM/CiogICBXaHkgYXJlIHdlIGFsd2F5cyBkZWFsaW5nIHdpdGggaXQsIHdoYXQmIzM5O3MgdGhlIGxvZ2ljIGJlaGluZCB0aGUgJiMzNDthbHdheXMmIzM0OyBwYXJ0PwoqICAgQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNpZGUgZWZmZWN0cywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHNlY3VyaXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzPwoqICAgSG93IGRvZXMgdGhpcyB2YXJpYWJsZSBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kL29yIG90aGVyIGNvbmZpZ3VyYXRpb25zPyBJIGhhdmUgdG8gbG9vayBhdCB0aGUgc3lzdGVtIG92ZXJhbGwsIGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyB0byBiZSBhYmxlIHRvIG1ha2UgaW5mb3JtZWQgZGVjaXNpb25zIGFuZCBwcmVkaWN0aW9ucy4KSSBuZWVkIHRvIGtub3cgKmV2ZXJ5dGhpbmcqIGJlZm9yZSBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyBhIGdvb2Qgb3IgYSBiYWQgdGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9hbm9uX29yZGVyc19hbHdheXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9MTg1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTg2OmV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg3LWV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMjA9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzI5LVx0aWYgKHR5cGUgIT0gVFZBX0ZPUkNFRF9DT0xMQVBTRSBcdTAwMjZcdTAwMjYgdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozMzA6XHRcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMzEtXG4tLVxubW0vY29tcGFjdGlvbi5jPTg1PXN0YXRpYyBpbmxpbmUgaW50IGNvbXBhY3RfaHBhZ2Vfb3JkZXIodm9pZClcbm1tL2NvbXBhY3Rpb24uYy04Ni17XG5tbS9jb21wYWN0aW9uLmM6ODc6XHR1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XG5tbS9jb21wYWN0aW9uLmMtODgtXG4tLVxubW0vY29tcGFjdGlvbi5jPTgyOT1zdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXG4tLVxubW0vY29tcGFjdGlvbi5jLTg0Mi1cdGlmIChpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNlPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDI2XHUwMDI2XG5tbS9jb21wYWN0aW9uLmM6ODQzOlx0ICAgIFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG5tbS9jb21wYWN0aW9uLmMtODQ0LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjU0NT11bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NTEtXG5tbS9jb21wYWN0aW9uLmM6MjU1MjpcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFx1MDAyNlx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcbm1tL2NvbXBhY3Rpb24uYy0yNTUzLVx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9ODc9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtODktXG5tbS9odWdlX21lbW9yeS5jOjkwOnVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbm1tL2h1Z2VfbWVtb3J5LmMtOTEtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX21hZHZpc2UgX19yZWFkX21vc3RseTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTY0MD1zdGF0aWMgc3NpemVfdCBhbm9uX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NjQ2Olx0aWYgKHRlc3RfYml0KG9yZGVyLCBcdTAwMjZodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG5tbS9odWdlX21lbW9yeS5jLTY0Ny1cdFx0b3V0cHV0ID0gXCYjMzQ7W2Fsd2F5c10gaW5oZXJpdCBtYWR2aXNlIG5ldmVyXCYjMzQ7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY2MC1cdHN0YXRpYyB1bnNpZ25lZCBsb25nICplbmFibGVkX29yZGVyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo2NjE6XHRcdFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzLFxubW0vaHVnZV9tZW1vcnkuYy02NjItXHRcdFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfaW5oZXJpdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExMzY9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdGhwX2Fub24oY2hhciAqc3RyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTE0Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6MTE0ODpcdGFsd2F5cyA9IGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzO1xubW0vaHVnZV9tZW1vcnkuYy0xMTQ5LVx0bWFkdmlzZSA9IGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMDgtXG5tbS9odWdlX21lbW9yeS5jOjEyMDk6XHRodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyA9IGFsd2F5cztcbm1tL2h1Z2VfbWVtb3J5LmMtMTIxMC1cdGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSA9IG1hZHZpc2U7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTUwMj1zdGF0aWMgaW5saW5lIGJvb2wgYW5vbl9ocGFnZV9lbmFibGVkKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtNTAzLXtcbm1tL2todWdlcGFnZWQuYzo1MDQ6XHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcbm1tL2todWdlcGFnZWQuYy01MDUtXHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc2NzgKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpLVNpemUgVEhQIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB3ZSBoYW5kbGUgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFsbG9jYXRpb24gZHVyaW5nIGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBvcGVyYXRpb25zLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzZXMgaW4gYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCwgYHBnZGF0X2JhbGFuY2VkYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYGtjb21wYWN0ZGAuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIHJlYWwgbWFnaWMgaGFwcGVucywgb3B0aW1pemluZyB0aGUgbGF5b3V0IG9mIG1lbW9yeSBzbyBhbGxvY2F0aW9uIGNhbiBiZSBwZXJmb3JtZWQgZmFzdGVyLgoKVGhlIGtleSBjb25maWd1cmF0aW9uIHByZXJlcXVpc2l0ZSBoZXJlIGlzLCBvYnZpb3VzbHksIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGV2ZW4gYmUgcmVsZXZhbnQuIEdpdmVuIEkmIzM5O20gd2VsbC12ZXJzZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O2xsIG5lZWQgdG8ganVtcCBpbnRvIGBtbS9jb21wYWN0aW9uLmNgIGFuZCBkaWcgaW50byBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBhbHRlcmVkIHRvIGZ1bGx5IGdyYXNwIHRoZSByYW1pZmljYXRpb25zIG9mIHRoZSBuZXcgbG9naWMuIE5lZWQgdG8gc2VlIGhvdyB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGFuZCB3aGF0IHRyYWRlLW9mZnMgd2VyZSBjb25zaWRlcmVkLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBzdWJ0bGV0aWVzIG9mIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCAtIHdoYXQgZXhhY3RseSBkb2VzIGl0IGNhcHR1cmUsIGFuZCBob3cgZG9lcyBpdCByZWZpbmUgb3VyIHVuZGVyc3RhbmRpbmcgb2YgZnJlZSBtZW1vcnkgZm9yIFRIUCBwdXJwb3Nlcz8gVGhpcyB3aWxsIHRha2UgYSBkZWVwIGRpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0NPTVBBQ1RJT04mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0PTExMT1jb21wYWN0X21lbW9yeVxuLS1cbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC0xMTMtXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q6MTE0OkF2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0NPTVBBQ1RJT04gaXMgc2V0LiBXaGVuIDEgaXMgd3JpdHRlbiB0byB0aGUgZmlsZSxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC0xMTUtYWxsIHpvbmVzIGFyZSBjb21wYWN0ZWQgc3VjaCB0aGF0IGZyZWUgbWVtb3J5IGlzIGF2YWlsYWJsZSBpbiBjb250aWd1b3VzXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0PTE0Mj1jb21wYWN0X3VuZXZpY3RhYmxlX2FsbG93ZWRcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtMTQ0LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0OjE0NTpBdmFpbGFibGUgb25seSB3aGVuIENPTkZJR19DT01QQUNUSU9OIGlzIHNldC4gV2hlbiBzZXQgdG8gMSwgY29tcGFjdGlvbiBpc1xuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTE0Ni1hbGxvd2VkIHRvIGV4YW1pbmUgdGhlIHVuZXZpY3RhYmxlIGxydSAobWxvY2tlZCBwYWdlcykgZm9yIHBhZ2VzIHRvIGNvbXBhY3QuXG4tLVxuYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmg9Mjc0PWV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpclsxMDI0XTtcbmFyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTI3NS1cbmFyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oOjI3NjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmFyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTI3Ny0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUlxuLS1cbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAxX2RlZmNvbmZpZz0yNz1DT05GSUdfUFJFRU1QVD15XG5hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWc6Mjg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWctMjktQ09ORklHX05FVD15XG4tLVxuYXJjaC9hcmMvY29uZmlncy9heHMxMDNfZGVmY29uZmlnPTI2PUNPTkZJR19QUkVFTVBUPXlcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX2RlZmNvbmZpZzoyNzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX2RlZmNvbmZpZy0yOC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnPTI2PUNPTkZJR19QUkVFTVBUPXlcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX3NtcF9kZWZjb25maWc6Mjc6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnLTI4LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19kZWZjb25maWc9MTg9Q09ORklHX01PRFVMRVM9eVxuYXJjaC9hcmMvY29uZmlncy9oYXBzX2hzX2RlZmNvbmZpZy0xOS0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfZGVmY29uZmlnOjIwOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9hcmMvY29uZmlncy9oYXBzX2hzX2RlZmNvbmZpZy0yMS1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfc21wX2RlZmNvbmZpZz0yMT1DT05GSUdfTU9EVUxFUz15XG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfc21wX2RlZmNvbmZpZy0yMi0jIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfc21wX2RlZmNvbmZpZzoyMzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19zbXBfZGVmY29uZmlnLTI0LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJjL2NvbmZpZ3MvaHNka19kZWZjb25maWc9MjQ9Q09ORklHX1BSRUVNUFQ9eVxuYXJjaC9hcmMvY29uZmlncy9oc2RrX2RlZmNvbmZpZzoyNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJjL2NvbmZpZ3MvaHNka19kZWZjb25maWctMjYtQ09ORklHX05FVD15XG4tLVxuYXJjaC9hcmMvY29uZmlncy9uc2ltXzcwMF9kZWZjb25maWc9MjI9Q09ORklHX01PRFVMRVM9eVxuYXJjaC9hcmMvY29uZmlncy9uc2ltXzcwMF9kZWZjb25maWctMjMtIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldFxuYXJjaC9hcmMvY29uZmlncy9uc2ltXzcwMF9kZWZjb25maWc6MjQ6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL25zaW1fNzAwX2RlZmNvbmZpZy0yNS1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2RlZmNvbmZpZz0yMj1DT05GSUdfQlVJTFRJTl9EVEJfTkFNRT1cJiMzNDtuc2ltb3NjaVwmIzM0O1xuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9kZWZjb25maWc6MjM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2RlZmNvbmZpZy0yNC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZz0yMj1DT05GSUdfQlVJTFRJTl9EVEJfTkFNRT1cJiMzNDtuc2ltb3NjaV9oc1wmIzM0O1xuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19kZWZjb25maWc6MjM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZy0yNC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX3NtcF9kZWZjb25maWc9MjA9Q09ORklHX1BSRUVNUFQ9eVxuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19zbXBfZGVmY29uZmlnOjIxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19zbXBfZGVmY29uZmlnLTIyLUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJjL2NvbmZpZ3MvdGIxMHhfZGVmY29uZmlnPTMwPUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15XG5hcmNoL2FyYy9jb25maWdzL3RiMTB4X2RlZmNvbmZpZzozMTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJjL2NvbmZpZ3MvdGIxMHhfZGVmY29uZmlnLTMyLUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c0X2RlZmNvbmZpZz0zNj1DT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRD15XG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWctMzctIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0XG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWctMzktQ09ORklHX05FVD15XG4tLVxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnPTQzPUNPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEPXlcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZy00NC0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZzo0NTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZy00Ni1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZz0yNT1DT05GSUdfTU9EVUxFX1VOTE9BRD15XG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZzoyNjojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnLTI3LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZz00Nz1DT05GSUdfU0xVQl9USU5ZPXlcbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZzo0ODojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZy00OS1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZz0zOT1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXlcbi0tXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZy00Mi0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXRcbmFyY2gvYXJtL2NvbmZpZ3Mvc2FtYTdfZGVmY29uZmlnOjQzOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9hcm0vY29uZmlncy9zYW1hN19kZWZjb25maWctNDQtQ09ORklHX0NNQT15XG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYW1pZ2FfZGVmY29uZmlnPTQ0PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWc6NDU6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctNDYtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZz00MD1DT05GSUdfQklORk1UX01JU0M9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo0MTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbTY4ay9jb25maWdzL2Fwb2xsb19kZWZjb25maWctNDItQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnPTQ3PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWc6NDg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9hdGFyaV9kZWZjb25maWctNDktQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvYnZtZTYwMDBfZGVmY29uZmlnPTM3PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWctMzktQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnPTM5PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NDA6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWctNDEtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0zOD1DT05GSUdfQklORk1UX01JU0M9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZzozOTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWctNDAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXVsdGlfZGVmY29uZmlnPTU4PUNPTkZJR19CSU5GTVRfTUlTQz1tXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWc6NTk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWctNjAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWc9MzY9Q09ORklHX0JJTkZNVF9NSVNDPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjM3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE0N19kZWZjb25maWctMzgtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc9Mzc9Q09ORklHX0JJTkZNVF9NSVNDPW1cbmFyY2gvbTY4ay9jb25maWdzL212bWUxNnhfZGVmY29uZmlnOjM4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWctMzktQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZz0zOD1DT05GSUdfQklORk1UX01JU0M9bVxuYXJjaC9tNjhrL2NvbmZpZ3MvcTQwX2RlZmNvbmZpZzozOTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWctNDAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXG4tLVxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWc9MzQ9Q09ORklHX0JJTkZNVF9NSVNDPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjM1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM19kZWZjb25maWctMzYtQ09ORklHX1VTRVJGQVVMVEZEPXlcbi0tXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9MzQ9Q09ORklHX0JJTkZNVF9NSVNDPW1cbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZzozNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbTY4ay9jb25maWdzL3N1bjN4X2RlZmNvbmZpZy0zNi1DT05GSUdfRE1BUE9PTF9URVNUPW1cbi0tXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWc9MjM9Q09ORklHX01PRFVMRV9VTkxPQUQ9eVxuYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnLTI0LSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2F0aDI1X2RlZmNvbmZpZzoyNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2F0aDI1X2RlZmNvbmZpZy0yNi1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZz0yOD1DT05GSUdfTU9EVUxFUz15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY2kyMF9kZWZjb25maWctMzAtIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZzozMTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2NpMjBfZGVmY29uZmlnLTMyLUNPTkZJR19DTUE9eVxuLS1cbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnPTI3PUNPTkZJR19NT0RVTEVTPXlcbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnLTI4LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnOjI5OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWctMzAtQ09ORklHX0NNQT15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc9Mjc9Q09ORklHX01PRFVMRVM9eVxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWctMjgtIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWc6Mjk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9jdTE4MzAtbmVvX2RlZmNvbmZpZy0zMC1DT05GSUdfQ01BPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZz0zMD1DT05GSUdfTUlQU19DTURMSU5FX0ZST01fQk9PVExPQURFUj15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWctMzItIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9vbWVnYTJwX2RlZmNvbmZpZy0zNC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnPTIzPUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eVxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZy0yNC0jIENPTkZJR19DT1JFRFVNUCBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnOjI1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZy0yNi1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy92b2NvcmUyX2RlZmNvbmZpZz0zMD1DT05GSUdfTUlQU19DTURMSU5FX0ZST01fQk9PVExPQURFUj15XG4tLVxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWctMzItIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL21pcHMvY29uZmlncy92b2NvcmUyX2RlZmNvbmZpZy0zNC1DT05GSUdfTkVUPXlcbi0tXG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZz0yNT1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXlcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnLTI2LSMgQ09ORklHX0NPUkVEVU1QIGlzIG5vdCBzZXRcbmFyY2gvbWlwcy9jb25maWdzL3h3YXlfZGVmY29uZmlnOjI3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWctMjgtQ09ORklHX05FVD15XG4tLVxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZz0zNj1DT05GSUdfQklORk1UX01JU0M9bVxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZy0zNy0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcbmFyY2gvcGFyaXNjL2NvbmZpZ3MvZ2VuZXJpYy02NGJpdF9kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnLTM5LUNPTkZJR19NRU1PUllfRkFJTFVSRT15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnPTE5PUNPTkZJR19JUlFfQUxMX0NQVVM9eVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnOjIwOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnLTIxLSMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldFxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL21pY3Jvd2F0dF9kZWZjb25maWc9MzA9Q09ORklHX1BQQ180S19QQUdFUz15XG4tLVxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWljcm93YXR0X2RlZmNvbmZpZy0zMy0jIENPTkZJR19DT1JFRFVNUCBpcyBub3Qgc2V0XG5hcmNoL3Bvd2VycGMvY29uZmlncy9taWNyb3dhdHRfZGVmY29uZmlnOjM0OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWljcm93YXR0X2RlZmNvbmZpZy0zNS0jIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldFxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL212bWU1MTAwX2RlZmNvbmZpZz0yMz1DT05GSUdfQ01ETElORT1cJiMzNDtjb25zb2xlPXR0eVMwLDk2MDAgaXA9ZGhjcCByb290PS9kZXYvbmZzXCYjMzQ7XG5hcmNoL3Bvd2VycGMvY29uZmlncy9tdm1lNTEwMF9kZWZjb25maWctMjQtIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnOjI1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnLTI2LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWc9MzU9Q09ORklHX0JJTkZNVF9NSVNDPXlcbi0tXG5hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnLTM3LSMgQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQIGlzIG5vdCBzZXRcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnLTM5LUNPTkZJR19ORVQ9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3NraXJvb3RfZGVmY29uZmlnPTU2PUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eVxuLS1cbmFyY2gvcG93ZXJwYy9jb25maWdzL3NraXJvb3RfZGVmY29uZmlnLTU4LSMgQ09ORklHX01RX0lPU0NIRURfS1lCRVIgaXMgbm90IHNldFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2tpcm9vdF9kZWZjb25maWc6NTk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL3Bvd2VycGMvY29uZmlncy9za2lyb290X2RlZmNvbmZpZy02MC0jIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldFxuLS1cbmFyY2gvdW0vY29uZmlncy9pMzg2X2RlZmNvbmZpZzoxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC91bS9jb25maWdzL2kzODZfZGVmY29uZmlnLTItQ09ORklHX0JJTkZNVF9NSVNDPW1cbi0tXG5hcmNoL3VtL2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZzoxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC91bS9jb25maWdzL3g4Nl82NF9kZWZjb25maWctMi1DT05GSUdfQklORk1UX01JU0M9bVxuLS1cbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnPTMzPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVwmIzM0O2tjNzA1XCYjMzQ7XG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZzozNDojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnLTM1LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL2NhZGVuY2VfY3NwX2RlZmNvbmZpZz0zNz1DT05GSUdfQlVJTFRJTl9EVEJfTkFNRT1cJiMzNDtjc3BcJiMzNDtcbmFyY2gveHRlbnNhL2NvbmZpZ3MvY2FkZW5jZV9jc3BfZGVmY29uZmlnOjM4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC94dGVuc2EvY29uZmlncy9jYWRlbmNlX2NzcF9kZWZjb25maWctMzktQ09ORklHX1hURlBHQV9MQ0Q9eVxuLS1cbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc9MzI9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XCYjMzQ7a2M3MDVcJiMzNDtcbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XG5hcmNoL3h0ZW5zYS9jb25maWdzL2dlbmVyaWNfa2M3MDVfZGVmY29uZmlnLTM0LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3NtcF9seDIwMF9kZWZjb25maWc9MzY9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XCYjMzQ7bHgyMDBteFwmIzM0O1xuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnOjM3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnLTM4LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbi0tXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnPTMxPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcbmFyY2gveHRlbnNhL2NvbmZpZ3MvdmlydF9kZWZjb25maWctMzItIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxuYXJjaC94dGVuc2EvY29uZmlncy92aXJ0X2RlZmNvbmZpZzozMzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gveHRlbnNhL2NvbmZpZ3MvdmlydF9kZWZjb25maWctMzQtQ09ORklHX05FVD15XG4tLVxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnPTMyPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVwmIzM0O2tjNzA1XCYjMzQ7XG4tLVxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnLTM0LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcbmFyY2gveHRlbnNhL2NvbmZpZ3MveGlwX2tjNzA1X2RlZmNvbmZpZzozNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcbmFyY2gveHRlbnNhL2NvbmZpZ3MveGlwX2tjNzA1X2RlZmNvbmZpZy0zNi1DT05GSUdfTkVUPXlcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD04ND1zdGF0aWMgaW5saW5lIGludCBjdXJyZW50X2lzX2tjb21wYWN0ZCh2b2lkKVxuLS1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTg4LVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6ODk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC05MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMzA9c3RhdGljIGlubGluZSB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCxcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzQtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMzU6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzYtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMzc9c3RydWN0IG5vZGU7XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMzg6I2lmIGRlZmluZWQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzktZXh0ZXJuIGludCBjb21wYWN0aW9uX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xuLS1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTE0OT1zdGF0aWMgaW5saW5lIHZvaWQgY29tcGFjdGlvbl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTUxLX1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjE1MjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gXHUwMDI2XHUwMDI2IENPTkZJR19TWVNGUyBcdTAwMjZcdTAwMjYgQ09ORklHX05VTUEgKi9cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTE1My1cbi0tXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTM4MT1zdGF0aWMgaW5saW5lIGJvb2wgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfdCBnZnBfbWFzaylcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMzgyLXtcbmluY2x1ZGUvbGludXgvZ2ZwLmg6MzgzOlx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNiAoZ2ZwX21hc2sgXHUwMDI2IF9fR0ZQX0lPKTtcbmluY2x1ZGUvbGludXgvZ2ZwLmgtMzg0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTk3OT1zdHJ1Y3Qgem9uZSB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTI3LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTI4OiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTI5LVx0LyogcGZuIHdoZXJlIGNvbXBhY3Rpb24gZnJlZSBzY2FubmVyIHNob3VsZCBzdGFydCAqL1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTEzNi1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTEzNzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTEzOC1cdC8qXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTQ4LVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTQ5OiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTUwLVx0LyogU2V0IHRvIHRydWUgd2hlbiB0aGUgUEdfbWlncmF0ZV9za2lwIGJpdHMgc2hvdWxkIGJlIGNsZWFyZWQgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTE0Nzg9dHlwZWRlZiBzdHJ1Y3QgcGdsaXN0X2RhdGEge1xuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTUzNy1cbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTUzODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTUzOS1cdGludCBrY29tcGFjdGRfbWF4X29yZGVyO1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmg9OTA9dm9pZCBjbGVhcl9wZm5ibG9ja19iaXQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmgtOTMtLyogRGVjbGFyYXRpb25zIGZvciBnZXR0aW5nIGFuZCBzZXR0aW5nIGZsYWdzLiBTZWUgbW0vcGFnZV9hbGxvYy5jICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oOjk0OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaC05NS0jZGVmaW5lIGdldF9wYWdlYmxvY2tfc2tpcChwYWdlKSBcXFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmg9MTA5PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcGFnZWJsb2NrX3NraXAoc3RydWN0IHBhZ2UgKnBhZ2UpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaC0xMTEtfVxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaDoxMTI6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oLTExMy1cbi0tXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg9ODI2PXN0cnVjdCB0YXNrX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC5oLTEzMTItXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmg6MTMxMzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMzE0LVx0c3RydWN0IGNhcHR1cmVfY29udHJvbFx0XHQqY2FwdHVyZV9jb250cm9sO1xuLS1cbmluY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oPTM0PWVudW0gdm1fZXZlbnRfaXRlbSB7IFBHUEdJTiwgUEdQR09VVCwgUFNXUElOLCBQU1dQT1VULFxuLS1cbmluY2x1ZGUvbGludXgvdm1fZXZlbnRfaXRlbS5oLTY0LSNlbmRpZlxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg6NjU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC02Ni1cdFx0Q09NUEFDVE1JR1JBVEVfU0NBTk5FRCwgQ09NUEFDVEZSRUVfU0NBTk5FRCxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg9Njc9REVGSU5FX0VWRU5UKG1tX2NvbXBhY3Rpb25faXNvbGF0ZV90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl9mYXN0X2lzb2xhdGVfZnJlZXBhZ2VzLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC03Ny1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaDo3ODojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC03OS1UUkFDRV9FVkVOVChtbV9jb21wYWN0aW9uX21pZ3JhdGVwYWdlcyxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg9MjM1PUlGX0hBVkVfVk1fRFJPUFBBQkxFKFZNX0RST1BQQUJMRSxcdFwmIzM0O2Ryb3BwYWJsZVwmIzM0O1x0KVx0XHRcXFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0yNDItXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MjQzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oLTI0NC0jZGVmaW5lIENPTVBBQ1RJT05fU1RBVFVTXHRcdFx0XHRcdFxcXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmg9MTY2PVRSQUNFX0VWRU5UKHNraXBfdGFza19yZWFwaW5nLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTE4MS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oOjE4MjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTE4My1UUkFDRV9FVkVOVChjb21wYWN0X3JldHJ5LFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTIxOC0pO1xuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmg6MjE5OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmgtMjIwLSNlbmRpZlxuLS1cbmtlcm5lbC9zY2hlZC9jb3JlLmM9NDU2Mz1zdGF0aWMgdm9pZCBfX3NjaGVkX2ZvcmsodTY0IGNsb25lX2ZsYWdzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4tLVxua2VybmVsL3NjaGVkL2NvcmUuYy00NjA4LVxua2VybmVsL3NjaGVkL2NvcmUuYzo0NjA5OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEwLVx0cC1cdTAwM2VjYXB0dXJlX2NvbnRyb2wgPSBOVUxMO1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMC1cbm1tL2NvbXBhY3Rpb24uYzozMTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0zMi0vKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz02MT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtNjMtXG5tbS9jb21wYWN0aW9uLmM6NjQ6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9jb21wYWN0aW9uLmMtNjUtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTEyNi1cbm1tL2NvbXBhY3Rpb24uYzoxMjc6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTI4LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy01MDQtfVxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL2NvbXBhY3Rpb24uYy01MDYtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMzg4LVxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2NvbXBhY3Rpb24uYzoxMzkwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTEzOTEtXG4tLVxubW0vY29tcGFjdGlvbi5jPTM0MTA9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxubW0vY29tcGFjdGlvbi5jLTM0MTEtXG5tbS9jb21wYWN0aW9uLmM6MzQxMjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbi0tXG5tbS9pbnRlcm5hbC5oPTgwMj1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9jb21wb3VuZF90YWlsKHN0cnVjdCBwYWdlICp0YWlsLFxuLS1cbm1tL2ludGVybmFsLmgtODEwLVxubW0vaW50ZXJuYWwuaDo4MTE6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9pbnRlcm5hbC5oLTgxMi1cbi0tXG5tbS9pbnRlcm5hbC5oPTg4ND1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYyxcbi0tXG5tbS9pbnRlcm5hbC5oLTg4Ni1cbm1tL2ludGVybmFsLmg6ODg3OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiB8fCBDT05GSUdfQ01BICovXG5tbS9pbnRlcm5hbC5oLTg4OC1cbi0tXG5tbS9tbV9pbml0LmM9MTMzMT1zdGF0aWMgdm9pZCBfX2luaXQgY2FsY3VsYXRlX25vZGVfdG90YWxwYWdlcyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuLS1cbm1tL21tX2luaXQuYy0xMzczLVxubW0vbW1faW5pdC5jOjEzNzQ6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9tbV9pbml0LmMtMTM3NS1zdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxuLS1cbm1tL21tX2luaXQuaD0zNz12b2lkIG1lbW1hcF9pbml0X3JhbmdlKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5pZCwgdW5zaWduZWQgbG9uZyB6b25lLFxuLS1cbm1tL21tX2luaXQuaC00Mi1cbm1tL21tX2luaXQuaDo0MzojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcbm1tL21tX2luaXQuaC00NC0vKiBGcmVlIHdob2xlIHBhZ2VibG9jayBhbmQgc2V0IGl0cyBtaWdyYXRpb24gdHlwZSB0byBNSUdSQVRFX0NNQS4gKi9cbi0tXG5tbS9vb21fa2lsbC5jPTQ1Nj1zdGF0aWMgdm9pZCBkdW1wX2hlYWRlcihzdHJ1Y3Qgb29tX2NvbnRyb2wgKm9jKVxuLS1cbm1tL29vbV9raWxsLmMtNDYwLVx0XHRcdGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9zY29yZV9hZGopO1xubW0vb29tX2tpbGwuYzo0NjE6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFx1MDAyNlx1MDAyNiBvYy1cdTAwM2VvcmRlcilcbm1tL29vbV9raWxsLmMtNDYyLVx0XHRwcl93YXJuKFwmIzM0O0NPTVBBQ1RJT04gaXMgZGlzYWJsZWQhISFcXG5cJiMzNDspO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz03MTQ9c3RhdGljIGlubGluZSB2b2lkIHNldF9idWRkeV9vcmRlcihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYy03MTktXG5tbS9wYWdlX2FsbG9jLmM6NzIwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vcGFnZV9hbGxvYy5jLTcyMS1zdGF0aWMgaW5saW5lIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKnRhc2tfY2FwYyhzdHJ1Y3Qgem9uZSAqem9uZSlcbi0tXG5tbS9wYWdlX2FsbG9jLmM9NzY5PWNvbXBhY3Rpb25fY2FwdHVyZShzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNzczLX1cbm1tL3BhZ2VfYWxsb2MuYzo3NzQ6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9wYWdlX2FsbG9jLmMtNzc1LVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MDQ0PV9fYWxsb2NfcGFnZXNfbWF5X29vbShnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00MTM1LVxubW0vcGFnZV9hbGxvYy5jOjQxMzY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9wYWdlX2FsbG9jLmMtNDEzNy0vKiBUcnkgbWVtb3J5IGNvbXBhY3Rpb24gZm9yIGhpZ2gtb3JkZXIgYWxsb2NhdGlvbnMgYmVmb3JlIHJlY2xhaW0gKi9cbi0tXG5tbS9wYWdlX2FsbG9jLmM9NDMyNT1zaG91bGRfY29tcGFjdF9yZXRyeShnZnBfdCBnZnBfbWFzaywgc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vcGFnZV9hbGxvYy5jLTQzNTAtfVxubW0vcGFnZV9hbGxvYy5jOjQzNTE6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXG5tbS9wYWdlX2FsbG9jLmMtNDM1Mi1cbi0tXG5tbS92bXNjYW4uYz02NDE5PXN0YXRpYyB2b2lkIHNocmlua196b25lcyhzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02NDU5LVx0XHRcdCAqL1xubW0vdm1zY2FuLmM6NjQ2MDpcdFx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfQ09NUEFDVElPTikgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02NDYxLVx0XHRcdCAgICBzYy1cdTAwM2VvcmRlciBcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgXHUwMDI2XHUwMDI2XG4tLVxubW0vdm1zdGF0LmM9MTA1ND12b2lkIG1lbW1hcF9wYWdlc19hZGQobG9uZyBkZWx0YSlcbi0tXG5tbS92bXN0YXQuYy0xMDU4LVxubW0vdm1zdGF0LmM6MTA1OTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3Ztc3RhdC5jLTEwNjAtXG4tLVxubW0vdm1zdGF0LmM9MTE5OT1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xMzg0LSNlbmRpZlxubW0vdm1zdGF0LmM6MTM4NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3Ztc3RhdC5jLTEzODYtXHRbSShDT01QQUNUTUlHUkFURV9TQ0FOTkVEKV1cdFx0PSBcJiMzNDtjb21wYWN0X21pZ3JhdGVfc2Nhbm5lZFwmIzM0Oyxcbi0tXG5tbS92bXN0YXQuYy0xNTE0LVxubW0vdm1zdGF0LmM6MTUxNTojaWYgKGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTikpIHx8IFxcXG5tbS92bXN0YXQuYy0xNTE2LSAgICAgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcbi0tXG5tbS92bXN0YXQuYz0yMjg2PXZvaWQgX19pbml0IGluaXRfbW1faW50ZXJuYWxzKHZvaWQpXG4tLVxubW0vdm1zdGF0LmMtMjMxOS1cbm1tL3Ztc3RhdC5jOjIzMjA6I2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTilcbm1tL3Ztc3RhdC5jLTIzMjEtXG4tLVxubW0venNtYWxsb2MuYz0yNzA9c3RydWN0IHpzX3Bvb2wge1xuLS1cbm1tL3pzbWFsbG9jLmMtMjg0LSNlbmRpZlxubW0venNtYWxsb2MuYzoyODU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTI4Ni1cdHN0cnVjdCB3b3JrX3N0cnVjdCBmcmVlX3dvcms7XG4tLVxubW0venNtYWxsb2MuYz00MzE9c3RhdGljIGJvb2wgWnNIdWdlUGFnZShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy00MzUtXG5tbS96c21hbGxvYy5jOjQzNjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL3pzbWFsbG9jLmMtNDM3LXN0YXRpYyB2b2lkIGtpY2tfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XG4tLVxubW0venNtYWxsb2MuYz0xMDMyPXN0YXRpYyBzdHJ1Y3QgenNwYWdlICphbGxvY196c3BhZ2Uoc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4tLVxubW0venNtYWxsb2MuYy0xMDQyLVxubW0venNtYWxsb2MuYzoxMDQzOlx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSlcbm1tL3pzbWFsbG9jLmMtMTA0NC1cdFx0Z2ZwIFx1MDAyNj0gfl9fR0ZQX01PVkFCTEU7XG4tLVxubW0venNtYWxsb2MuYz0xNDU0PXN0YXRpYyB2b2lkIG9ial9mcmVlKGludCBjbGFzc19zaXplLCB1bnNpZ25lZCBsb25nIG9iailcbi0tXG5tbS96c21hbGxvYy5jLTE0ODEtXG5tbS96c21hbGxvYy5jOjE0ODI6I2lmIChaU19PQkpfQ0xBU1NfQklUUyBcdTAwM2UgMCkgfHwgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTilcbm1tL3pzbWFsbG9jLmMtMTQ4My0vKiBGb2xkcyB0byAwIHdoZW4gWlNfT0JKX0NMQVNTX0JJVFMgPT0gMDsgbm8gaWZkZWYgbmVlZGVkIGF0IGNhbGxlcnMuICovXG4tLVxubW0venNtYWxsb2MuYz0xNzUzPXN0YXRpYyBpbnQgcHV0YmFja196c3BhZ2Uoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy0xNzYyLVxubW0venNtYWxsb2MuYzoxNzYzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0venNtYWxsb2MuYy0xNzY0LS8qXG4tLVxubW0venNtYWxsb2MuYz0yMzk1PXN0YXRpYyBpbnQgX19pbml0IHpzX2luaXQodm9pZClcbi0tXG5tbS96c21hbGxvYy5jLTI0MDItXG5tbS96c21hbGxvYy5jOjI0MDM6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTI0MDQtXHRyYyA9IHNldF9tb3ZhYmxlX29wcyhcdTAwMjZ6c21hbGxvY19tb3BzLCBQR1RZX3pzbWFsbG9jKTtcbi0tXG5tbS96c21hbGxvYy5jPTI0MTQ9c3RhdGljIHZvaWQgX19leGl0IHpzX2V4aXQodm9pZClcbm1tL3pzbWFsbG9jLmMtMjQxNS17XG5tbS96c21hbGxvYy5jOjI0MTY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS96c21hbGxvYy5jLTI0MTctXHRzZXRfbW92YWJsZV9vcHMoTlVMTCwgUEdUWV96c21hbGxvYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyMDMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIENvbmNlcm5zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIG5vbi1uZWdvdGlhYmxlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrLiBOb3csIEkgc2VlIHRoYXQgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCBoaW5nZXMgb24gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmVpbmcgZW5hYmxlZC4gT3IsIG1heWJlIGl0JiMzOTtzIGp1c3QgYXZhaWxhYmxlLCByZWdhcmRsZXNzLCBidXQgb25seSAqcmVhbGx5KiBtYWtlcyBzZW5zZSBpbiBjb25qdW5jdGlvbiB3aXRoIFRIUC4gRWl0aGVyIHdheSwgVEhQIGlzIGEgZGVwZW5kZW5jeSBoZXJlLiBJIG5lZWQgdG8gY2xhcmlmeSB0aGF0IHJlbGF0aW9uc2hpcC4gSeKAmWQgYmV0dGVyIGdvIGFuZCBjaGVjayB0aGUgYWN0dWFsIGRlZmluaXRpb24gb2YgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCB0byBiZSBjb21wbGV0ZWx5IHN1cmUgb2YgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHRocmVlIGZlYXR1cmVzLiBHb3R0YSB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFsbCBwbGF5aW5nIG5pY2VseSB0b2dldGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9hbm9uX29yZGVyc19hbHdheXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9MTg1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MTg2OmV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg3LWV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMjA9dW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzI5LVx0aWYgKHR5cGUgIT0gVFZBX0ZPUkNFRF9DT0xMQVBTRSBcdTAwMjZcdTAwMjYgdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozMzA6XHRcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMzEtXG4tLVxubW0vY29tcGFjdGlvbi5jPTg1PXN0YXRpYyBpbmxpbmUgaW50IGNvbXBhY3RfaHBhZ2Vfb3JkZXIodm9pZClcbm1tL2NvbXBhY3Rpb24uYy04Ni17XG5tbS9jb21wYWN0aW9uLmM6ODc6XHR1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XG5tbS9jb21wYWN0aW9uLmMtODgtXG4tLVxubW0vY29tcGFjdGlvbi5jPTgyOT1zdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXG4tLVxubW0vY29tcGFjdGlvbi5jLTg0Mi1cdGlmIChpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSBcdTAwMjZcdTAwMjYgb3JkZXIgXHUwMDNlPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDI2XHUwMDI2XG5tbS9jb21wYWN0aW9uLmM6ODQzOlx0ICAgIFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG5tbS9jb21wYWN0aW9uLmMtODQ0LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjU0NT11bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NTEtXG5tbS9jb21wYWN0aW9uLmM6MjU1MjpcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFx1MDAyNlx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcbm1tL2NvbXBhY3Rpb24uYy0yNTUzLVx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9ODc9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtODktXG5tbS9odWdlX21lbW9yeS5jOjkwOnVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcbm1tL2h1Z2VfbWVtb3J5LmMtOTEtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX21hZHZpc2UgX19yZWFkX21vc3RseTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTY0MD1zdGF0aWMgc3NpemVfdCBhbm9uX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY0NS1cbm1tL2h1Z2VfbWVtb3J5LmM6NjQ2Olx0aWYgKHRlc3RfYml0KG9yZGVyLCBcdTAwMjZodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG5tbS9odWdlX21lbW9yeS5jLTY0Ny1cdFx0b3V0cHV0ID0gXCYjMzQ7W2Fsd2F5c10gaW5oZXJpdCBtYWR2aXNlIG5ldmVyXCYjMzQ7O1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY2MC1cdHN0YXRpYyB1bnNpZ25lZCBsb25nICplbmFibGVkX29yZGVyc1tdID0ge1xubW0vaHVnZV9tZW1vcnkuYzo2NjE6XHRcdFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzLFxubW0vaHVnZV9tZW1vcnkuYy02NjItXHRcdFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfaW5oZXJpdCxcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExMzY9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdGhwX2Fub24oY2hhciAqc3RyKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTE0Ny1cbm1tL2h1Z2VfbWVtb3J5LmM6MTE0ODpcdGFsd2F5cyA9IGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzO1xubW0vaHVnZV9tZW1vcnkuYy0xMTQ5LVx0bWFkdmlzZSA9IGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMDgtXG5tbS9odWdlX21lbW9yeS5jOjEyMDk6XHRodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyA9IGFsd2F5cztcbm1tL2h1Z2VfbWVtb3J5LmMtMTIxMC1cdGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSA9IG1hZHZpc2U7XG4tLVxubW0va2h1Z2VwYWdlZC5jPTUwMj1zdGF0aWMgaW5saW5lIGJvb2wgYW5vbl9ocGFnZV9lbmFibGVkKHZvaWQpXG5tbS9raHVnZXBhZ2VkLmMtNTAzLXtcbm1tL2todWdlcGFnZWQuYzo1MDQ6XHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcbm1tL2todWdlcGFnZWQuYy01MDUtXHRcdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODUzNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQgaW4gdGhlIGZpZWxkOgoKKipDaGVja2luZyBhIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCBpcyBkZWZpbmVkLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgY2FzdWFsIGNoZWNrOyBJIGtub3cgdGhpcyB2YXJpYWJsZSBpcyBpbnRyaW5zaWNhbGx5IGxpbmtlZCB0byBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gSXQmIzM5O3MgYSBrZXkgcGFydCBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIGVzcGVjaWFsbHkgd2l0aCBob3cgd2UmIzM5O3ZlIGJlZW4gcHVzaGluZyBUSFAgaW1wcm92ZW1lbnRzLiBTbywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIgd2l0aCB0aGlzIGxpbmUgb2YgaW52ZXN0aWdhdGlvbiwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHVuZGVybHlpbmcgY29uZmlndXJhdGlvbi4gVGhlIGxvZ2ljIGhpbmdlcyBvbiB0aGF0LCBhbmQgSSBjYW4mIzM5O3QgYWZmb3JkIHRvIGJlIHdhc3RpbmcgdGltZSBkb3duIGEgcmFiYml0IGhvbGUuIEkgbmVlZCB0byBrbm93IHdoZXJlIEkgc3RhbmQgd2l0aCB0aGlzLCB3aGF0IHRoZSBiYXNlIGNvbmZpZ3VyYXRpb24gaXMsIGFuZCB3aGF0IEkgY2FuIHdvcmsgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9MTI3PWVudW0gbXRocF9zdGF0X2l0ZW0ge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTE1Mi1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE1MzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFx1MDAyNlx1MDAyNiBkZWZpbmVkKENPTkZJR19TWVNGUylcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTE1NC1zdHJ1Y3QgbXRocF9zdGF0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0xNzg9c3RhdGljIGlubGluZSB2b2lkIGNvdW50X210aHBfc3RhdChpbnQgb3JkZXIsIGVudW0gbXRocF9zdGF0X2l0ZW0gaXRlbSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODItXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxODM6I2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg0LVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU5OD12b2lkIG1hcF9hbm9uX2ZvbGlvX3BtZF9ub3BmKHN0cnVjdCBmb2xpbyAqZm9saW8sIHBtZF90ICpwbWQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjAwLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjAxOiNlbHNlIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjAyLVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTgxNT1zdGF0aWMgaW5saW5lIGJvb2wgcHVkX2lzX2h1Z2UocHVkX3QgcHVkKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTgxOC19XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo4MTk6I2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSAqL1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODIwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4MAoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDExMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZSBQYWdlIEFsbG9jYXRpb24gUmVxdWlyZW1lbnRzKioKCk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcywgaXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgc3lzdGVtIGlzIHNldCB1cCB0byBoYW5kbGUgaHVnZSBhbm9ueW1vdXMgcGFnZXMsIGFzc3VtaW5nIGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMgZGVmaW5lZC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSBuZWVkIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGVuYWJsZWQsIGFuZCBieSBleHRlbnNpb24sIGBDT01QQUNUSU9OYCBhcyB3ZWxsLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCB0aGUgYmFzaWNzIGFyZSBpbiBwbGFjZS4KCk5vdywgSSB3YW50IHRvIGRyaWxsIGRvd24gYW5kIHNlZSB0aGUgcmVsZXZhbnQgcGllY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJiMzOTtsbCBiZSBmb2N1c2luZyBvbiB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGUgYWxsb2NhdGlvbiBwcm9jZXNzLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBkZXRlcm1pbmluZyBhbGxvY2F0aW9uIGNhcGFjaXR5LCBgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXJgLCB3aGljaCBsaWtlbHkgcGxheXMgYSBwYXJ0IGluIGRldGVybWluaW5nIHRoZSBmZWFzaWJpbGl0eSBvZiBhIGNvbXBhY3Rpb24gcnVuIHRvIHNhdGlzZnkgYW4gb3JkZXIsIGFuZCBmaW5hbGx5LCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIHdoaWNoIGlzIHByb2JhYmx5IGtleSB0byBldmFsdWF0aW5nIHdoZXRoZXIgYSBnaXZlbiB6b25lIGxpc3QgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgY29tcGFjdGlvbi4KCkFscmlnaHQsIG5vdyB0aGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgaXMgYW4gZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyBzeW1ib2wuIEtub3dpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyBleHBvc2VkIHRvIGFuZCB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gR290dGEgZmlndXJlIG91dCBpZiBpdCYjMzk7cyB0aWdodGx5IGNvdXBsZWQgaW50ZXJuYWxseSwgb3IgaWYgaXQmIzM5O3MgYW4gQVBJIHBvaW50IHRoYXQgb3RoZXJzIGNhbiB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYz0yNTcwPXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XG5tbS9jb21wYWN0aW9uLmM6MjU3MTpjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxubW0vY29tcGFjdGlvbi5jLTI1NzItXHRcdFx0XHQgaW50IGhpZ2hlc3Rfem9uZWlkeCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNjEwPWNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjYzNS1cdGlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGNjLVx1MDAzZW9yZGVyKSkge1xubW0vY29tcGFjdGlvbi5jOjI2MzY6XHRcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKGNjLVx1MDAzZXpvbmUsIGNjLVx1MDAzZW9yZGVyLFxubW0vY29tcGFjdGlvbi5jLTI2MzctXHRcdFx0XHRcdFx0ICAgICAgIGNjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCxcbi0tXG5tbS9jb21wYWN0aW9uLmM9MzEwNj1zdGF0aWMgYm9vbCBrY29tcGFjdGRfbm9kZV9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMTIwLVxubW0vY29tcGFjdGlvbi5jOjMxMjE6XHRcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHpvbmUsXG5tbS9jb21wYWN0aW9uLmMtMzEyMi1cdFx0XHRcdHBnZGF0LVx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jPTMxMzI9c3RhdGljIHZvaWQga2NvbXBhY3RkX2RvX3dvcmsocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzE2NC1cbm1tL2NvbXBhY3Rpb24uYzozMTY1Olx0XHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcih6b25lLFxubW0vY29tcGFjdGlvbi5jLTMxNjYtXHRcdFx0XHRjYy5vcmRlciwgem9uZWlkLCBjYy5hbGxvY19mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwMDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gU3RyYXRlZ2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgdmFyaWFibGVzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbXBhY3Rpb24gYW5kIGFsbG9jYXRpb24uIFRoZSBjcml0aWNhbCB0aGluZyBoZXJlIGlzIHRoYXQgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCBpcyBzdGF0aWMsIHdoaWNoIG1lYW5zIGl0cyB2YWx1ZSBpcyBsaWtlbHkgZGV0ZXJtaW5lZCBhdCBjb21waWxlIHRpbWUgb3IgZHVyaW5nIHZlcnkgZWFybHkgaW5pdGlhbGl6YXRpb24uIFRoaXMgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IGZsZXhpYmxlIHRoZSBzeXN0ZW0gaXMgaW4gYWRhcHRpbmcgdG8gdmFyeWluZyBtZW1vcnkgZnJhZ21lbnRhdGlvbiBzY2VuYXJpb3MuCgpUaGVuLCBJJiMzOTttIG5vdGluZyB0aGF0IGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhbmQgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGFyZSAqbm90KiBzdGF0aWMuIFRoZXkmIzM5O3JlIGR5bmFtaWMuIFNvLCB0aGVpciB2YWx1ZXMgY2hhbmdlIG92ZXIgdGltZSwgd2hpY2ggbWVhbnMgdGhleSBhcmUgYmVpbmcgdXBkYXRlZCBiYXNlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3lzdGVtLiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgb2J2aW91cyAtIGl0JiMzOTtzIGRpcmVjdGx5IHJlZmxlY3RpbmcgbWVtb3J5IGF2YWlsYWJpbGl0eS4gQnV0IGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCBpcyB0aGUga2V5IGludGVyZXN0LiBUaGlzIGlzIGEgZHluYW1pYyBjb25kaXRpb24gdGhhdCBzaG91bGQgdGVsbCBtZSB3aGF0IHpvbmVzIGFyZSBva2F5IHRvIGNvbnNpZGVyIGZvciBjb21wYWN0aW9uLgoKUmlnaHQgbm93LCBteSBmb2N1cyBpcyBvbiBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAuIExldCYjMzk7cyBkaWcgZGVlcGVyIGludG8gaG93IHRoYXQgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgZmFjdG9ycyBpbmZsdWVuY2UgaXRzIGV2YWx1YXRpb24uIFRoaXMgaXMgd2hlcmUgSSBjYW4gc3RhcnQgdG8gZGV2ZWxvcCBhIHByZWNpc2UgdW5kZXJzdGFuZGluZyBvZiB0aGUgYWxnb3JpdGhtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTEwMT1leHRlcm4gdm9pZCBjb21wYWN0aW9uX2RlZmVyX3Jlc2V0KHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTAzLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTA0OmJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwNS1cdFx0XHRcdFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzayk7XG4tLVxubW0vY29tcGFjdGlvbi5jPTI0NTI9Ym9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsIHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNDk2LS8qIFVzZWQgYnkgZGlyZWN0IHJlY2xhaW1lcnMgKi9cbm1tL2NvbXBhY3Rpb24uYzoyNDk3OmJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yNDk4LVx0XHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz00MjQ4PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbi0tXG5tbS9wYWdlX2FsbG9jLmMtNDI3MC1cdGlmIChjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQpIHtcbm1tL3BhZ2VfYWxsb2MuYzo0MjcxOlx0XHRyZXQgPSBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKGFjLCBvcmRlciwgYWxsb2NfZmxhZ3MsXG5tbS9wYWdlX2FsbG9jLmMtNDI3Mi1cdFx0XHRcdFx0XHQgICBnZnBfbWFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjc3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqCgpSaWdodCwgc28gYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGlzbiYjMzk7dCBzdGF0aWMuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgaXQmIzM5O3MgbGlrZWx5IHVzZWQgYWNyb3NzIG11bHRpcGxlIGZpbGVzIG9yIG1vZHVsZXMsIG5vdCBqdXN0IHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIHRyYWNlIGl0cyB1c2FnZS4gU2ltaWxhcmx5LCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgYWxzbyBub24tc3RhdGljOyB0aGlzIGhpZ2hsaWdodHMgdGhhdCB0aGVzZSBhcmVuJiMzOTt0IGludGVybmFsIGZ1bmN0aW9ucy4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIsIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgYnkgdHJhY2luZyB0aGUgdXNhZ2Ugb2YgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3QuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGhvdyBgcGdkYXRfYmFsYW5jZWRgIGlzIHVzZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgbWVhdCBvZiB0aGUgbWVtb3J5IHNjYW5uaW5nIGFuZCBiYWxhbmNpbmcgbG9naWMuIERpZ2dpbmcgaW50byB0aGF0IGZpbGUgc2hvdWxkIHByb3ZpZGUgY29udGV4dCBmb3Igd2hhdCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgYW5kIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhcmUgaW52b2x2ZWQgaW4uIEkgZXhwZWN0IHRvIGJlIGFibGUgdG8gYnVpbGQgYSBtb3JlIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIHBhZ2UgYWxsb2NhdGlvbiBzdHJhdGVneSBieSByZXZpZXdpbmcgdGhlIHVzYWdlIG9mIGBwZ2RhdF9iYWxhbmNlZGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BnZGF0X2JhbGFuY2VkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTY5MzA9c3RhdGljIGJvb2wgcGdkYXRfd2F0ZXJtYXJrX2Jvb3N0ZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy02OTU3LSAqL1xubW0vdm1zY2FuLmM6Njk1ODpzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG5tbS92bXNjYW4uYy02OTU5LXtcbi0tXG5tbS92bXNjYW4uYz03MDI3PXN0YXRpYyBib29sIHByZXBhcmVfa3N3YXBkX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03MDQ5LVxubW0vdm1zY2FuLmM6NzA1MDpcdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcbm1tL3Ztc2Nhbi5jLTcwNTEtXHRcdGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ2RhdCk7XG4tLVxubW0vdm1zY2FuLmM9NzEzOT1zdGF0aWMgaW50IGJhbGFuY2VfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxuLS1cbm1tL3Ztc2Nhbi5jLTcyMTQtXHRcdCAqL1xubW0vdm1zY2FuLmM6NzIxNTpcdFx0YmFsYW5jZWQgPSBwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgc2Mub3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS92bXNjYW4uYy03MjE2LVx0XHRpZiAoIWJhbGFuY2VkIFx1MDAyNlx1MDAyNiBucl9ib29zdF9yZWNsYWltKSB7XG4tLVxubW0vdm1zY2FuLmM9NzU1NT12b2lkIHdha2V1cF9rc3dhcGQoc3RydWN0IHpvbmUgKnpvbmUsIGdmcF90IGdmcF9mbGFncywgaW50IG9yZGVyLFxuLS1cbm1tL3Ztc2Nhbi5jLTc1ODAtXHRpZiAoa3N3YXBkX3Rlc3RfaG9wZWxlc3MocGdkYXQpIHx8XG5tbS92bXNjYW4uYzo3NTgxOlx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy03NTgyLVx0ICAgICAhcGdkYXRfd2F0ZXJtYXJrX2Jvb3N0ZWQocGdkYXQsIGhpZ2hlc3Rfem9uZWlkeCkpKSB7XG4tLVxubW0vdm1zY2FuLmM9NzYxMz12b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy03NjE1LXtcbm1tL3Ztc2Nhbi5jOjc2MTY6XHRpZiAocGdkYXRfYmFsYW5jZWQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpKVxubW0vdm1zY2FuLmMtNzYxNy1cdFx0a3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBjdXJyZW50X2lzX2tzd2FwZCgpID9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE1NzYKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgRnVuY3Rpb24gQXR0cmlidXRlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJdCYjMzk7cyBpbnRlcmVzdGluZyBob3cgdGhleSYjMzk7cmUgZGVjbGFyZWQuIGBwZ2RhdF9iYWxhbmNlZGAgaXMgY2xlYXJseSBhIHN0YXRpYyB2YXJpYWJsZSwgYW5kIEkgY2FuIGltbWVkaWF0ZWx5IHRoaW5rIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCDigJMgaXQmIzM5O3MgbGlrZWx5IGEgcGVyLW5vZGUgZmxhZyBvciBzdGF0ZSwgYW5kIGl0JiMzOTtzIGhpZGRlbiBmcm9tIGV4dGVybmFsIG1vZHVsZXMuIGB3YWtldXBfa3N3YXBkYCwgb24gdGhlIG90aGVyIGhhbmQsIGlzbiYjMzk7dCBzdGF0aWMsIHNvIGl04oCZcyBsaWtlbHkgaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gYGJhbGFuY2VfcGdkYXRgLCBpcyBzdGF0aWMuIEFnYWluLCBhIHN0YXRpYyBmdW5jdGlvbiB1c3VhbGx5IGltcGxpZXMgdGhhdCBpdCBpcyBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiB0aGUgZmlsZS9tb2R1bGUuIE5vdywgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgIGlzIG5vbi1zdGF0aWMsIHNvIHRoZSBzYW1lIGNvbnNpZGVyYXRpb25zIGFwcGx5IGFzIGZvciBgd2FrZXVwX2tzd2FwZGAuIExldCYjMzk7cyBkaWcgaW50byB0aGF0IGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjQ0PXZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY0NS1cdFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KTtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTY0Njp2b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY0Ny1cdFx0XHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS92bXNjYW4uYz01MjI0PXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTI2Mi1cdGlmIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNlIHJlY2xhaW1lZClcbm1tL3Ztc2Nhbi5jOjUyNjM6XHRcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVx1MDAzZW9yZGVyLCBzYy1cdTAwM2VyZWNsYWltX2lkeCk7XG5tbS92bXNjYW4uYy01MjY0LX1cbi0tXG5tbS92bXNjYW4uYz02MjM0PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYzNDEtXHRpZiAocmVjbGFpbWFibGUpXG5tbS92bXNjYW4uYzo2MzQyOlx0XHRrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHBnZGF0LCBzYy1cdTAwM2VvcmRlciwgc2MtXHUwMDNlcmVjbGFpbV9pZHgpO1xubW0vdm1zY2FuLmMtNjM0My1cdGVsc2UgaWYgKHNjLVx1MDAzZWNhY2hlX3RyaW1fbW9kZSlcbi0tXG5tbS92bXNjYW4uYz03NjAwPXZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXG4tLVxubW0vdm1zY2FuLmMtNzYxMi0gKi9cbm1tL3Ztc2Nhbi5jOjc2MTM6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG5tbS92bXNjYW4uYy03NjE0LVx0XHRcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMzc0CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBLZXJuZWwmIzM5O3MgU3dhcHBpbmcgQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgd2hlcmUgdGhlIHN5c3RlbSBpcyBnZXR0aW5nIGh1bmcgdXAuIGB3YWtldXBfa3N3YXBkYCBmZWVscyBsaWtlIGEgc29saWQgc3RhcnRpbmcgcG9pbnQuIEl0JiMzOTtzIHRoZSBmdW5jdGlvbiB0aGF0IGtpY2tzIG9mZiB0aGUga3N3YXBkIGRhZW1vbiwgYW5kIGlmIHN3YXBwaW5nIGlzIGEgYm90dGxlbmVjaywgdGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHByb2JsZW0gZWl0aGVyIG9yaWdpbmF0ZXMgb3IgbWFuaWZlc3RzLiBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCYjMzk7cyB0cmlnZ2VyaW5nIGl0cyBhY3RpdmF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbmRpdGlvbnMgdGhhdCBsZWFkIHRvIGB3YWtldXBfa3N3YXBkYCBiZWluZyBjYWxsZWQsIHdoYXQgcmVzb3VyY2VzIGl0JiMzOTtzIGNvbnRlbmRpbmcgZm9yLCBhbmQgd2hldGhlciBpdHMgZnJlcXVlbmN5IG9mIGFjdGl2YXRpb24gYWxpZ25zIHdpdGggdGhlIG9ic2VydmVkIHBlcmZvcm1hbmNlIGlzc3Vlcy4gVW5kZXJzdGFuZGluZyB0aGUgY2FsbCBzdGFjayBhbmQgYW55IHJlbGV2YW50IGNvdW50ZXJzIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIHdpbGwgYmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHN5c3RlbSYjMzk7cyByZWFjdGlvbi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHdhaXQgcXVldWVzLCBsb2NrIGNvbnRlbnRpb24sIGFuZCBhbnkgaW5kaWNhdGlvbnMgb2YgcmVzb3VyY2Ugc3RhcnZhdGlvbiB0aGF0IGFyZSB0aWVkIHRvIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dha2V1cF9rc3dhcGQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9NTk9bXkgJG9wdF9yZWFkX3Byb2NzdGF0O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNjAtXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDo2MTpteSAkdG90YWxfd2FrZXVwX2tzd2FwZDtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTYyLW15ICgkdG90YWxfZGlyZWN0X3JlY2xhaW0sICR0b3RhbF9kaXJlY3RfbnJfc2Nhbm5lZCk7XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9MTEzPW15ICRyZWdleF9rc3dhcGRfc2xlZXBfZGVmYXVsdCA9ICYjMzk7bmlkPShbMC05XSopJiMzOTs7XG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDoxMTQ6bXkgJHJlZ2V4X3dha2V1cF9rc3dhcGRfZGVmYXVsdCA9ICYjMzk7bmlkPShbMC05XSopIG9yZGVyPShbMC05XSopIGdmcF9mbGFncz0oW0EtWl98XSopJiMzOTs7XG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0xMTUtbXkgJHJlZ2V4X2xydV9pc29sYXRlX2RlZmF1bHQgPSAmIzM5O2NsYXNzem9uZT0oWzAtOV0qKSBvcmRlcj0oWzAtOV0qKSBucl9yZXF1ZXN0ZWQ9KFswLTldKikgbnJfc2Nhbm5lZD0oWzAtOV0qKSBucl9za2lwcGVkPShbMC05XSopIG5yX3Rha2UuLi5cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbD0xMjQ9bXkgJHJlZ2V4X2tzd2FwZF9zbGVlcDtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjEyNTpteSAkcmVnZXhfd2FrZXVwX2tzd2FwZDtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTEyNi1teSAkcmVnZXhfbHJ1X2lzb2xhdGU7XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9MTk2PSRyZWdleF9rc3dhcGRfc2xlZXAgPSBnZW5lcmF0ZV90cmFjZWV2ZW50X3JlZ2V4KFxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTE5OS1cdFx0XHRcJiMzNDtuaWRcJiMzNDspO1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MjAwOiRyZWdleF93YWtldXBfa3N3YXBkID0gZ2VuZXJhdGVfdHJhY2VldmVudF9yZWdleChcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjIwMTpcdFx0XHRcJiMzNDt2bXNjYW4vbW1fdm1zY2FuX3dha2V1cF9rc3dhcGRcJiMzNDssXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDoyMDI6XHRcdFx0JHJlZ2V4X3dha2V1cF9rc3dhcGRfZGVmYXVsdCxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTIwMy1cdFx0XHRcJiMzNDtuaWRcJiMzNDssIFwmIzM0O29yZGVyXCYjMzQ7LCBcJiMzNDtnZnBfZmxhZ3NcJiMzNDspO1xuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsPTI3NT1FVkVOVF9QUk9DRVNTOlxuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM2MS1cdFx0XHQkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LVx1MDAzZXtTVEFURV9LU1dBUERfQkVHSU59ID0gMDtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjM2MjpcdFx0fSBlbHNpZiAoJHRyYWNlcG9pbnQgZXEgXCYjMzQ7bW1fdm1zY2FuX3dha2V1cF9rc3dhcGRcJiMzNDspIHtcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM2My1cdFx0XHQkcGVycHJvY2Vzc3BpZHskcHJvY2Vzc19waWR9LVx1MDAzZXtNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRH0mIzQzOyYjNDM7O1xuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM2NS1cdFx0XHQkZGV0YWlscyA9ICQ2O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MzY2Olx0XHRcdGlmICgkZGV0YWlscyAhfiAvJHJlZ2V4X3dha2V1cF9rc3dhcGQvbykge1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MzY3Olx0XHRcdFx0cHJpbnQgXCYjMzQ7V0FSTklORzogRmFpbGVkIHRvIHBhcnNlIG1tX3Ztc2Nhbl93YWtldXBfa3N3YXBkIGFzIGV4cGVjdGVkXFxuXCYjMzQ7O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtMzY4LVx0XHRcdFx0cHJpbnQgXCYjMzQ7ICAgICAgICAgJGRldGFpbHNcXG5cJiMzNDs7XG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDozNjk6XHRcdFx0XHRwcmludCBcJiMzNDsgICAgICAgICAkcmVnZXhfd2FrZXVwX2tzd2FwZFxcblwmIzM0OztcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM3MC1cdFx0XHRcdG5leHQ7XG4tLVxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9NDU3PXN1YiBkdW1wX3N0YXRzIHtcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC01MTMtXHRcdCR0b3RhbF9kaXJlY3RfcmVjbGFpbSAmIzQzOz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tXHUwMDNle01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJTn07XG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDo1MTQ6XHRcdCR0b3RhbF93YWtldXBfa3N3YXBkICYjNDM7PSAkc3RhdHN7JHByb2Nlc3NfcGlkfS1cdTAwM2V7TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUER9O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNTE1LVx0XHQkdG90YWxfZGlyZWN0X25yX3NjYW5uZWQgJiM0Mzs9ICRzdGF0c3skcHJvY2Vzc19waWR9LVx1MDAzZXtISUdIX05SX1NDQU5ORUR9O1xuLS1cbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTY0MS1cdHByaW50IFwmIzM0O0RpcmVjdCByZWNsYWltIHdyaXRlIGFub24gYXN5bmMgSS9POlx0JHRvdGFsX2RpcmVjdF93cml0ZXBhZ2VfYW5vbl9hc3luY1xcblwmIzM0OztcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjY0MjpcdHByaW50IFwmIzM0O1dha2Uga3N3YXBkIHJlcXVlc3RzOlx0XHRcdCR0b3RhbF93YWtldXBfa3N3YXBkXFxuXCYjMzQ7O1xuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNjQzLVx0cHJpbnRmIFwmIzM0O1RpbWUgc3RhbGxlZCBkaXJlY3QgcmVjbGFpbTogXHRcdCUtMS4yZiBzZWNvbmRzXFxuXCYjMzQ7LCAkdG90YWxfZGlyZWN0X2xhdGVuY3k7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjM3PWVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjQzLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjQ0OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcixcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTY0NS1cdFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KTtcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaD0xMjM9VFJBQ0VfRVZFTlQobW1fdm1zY2FuX2JhbGFuY2VfcGdkYXRfZW5kLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTE1MC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oOjE1MTpUUkFDRV9FVkVOVChtbV92bXNjYW5fd2FrZXVwX2tzd2FwZCxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTE1Mi1cbi0tXG5tbS9taWdyYXRlLmM9MjY5MD1pbnQgbWlncmF0ZV9taXNwbGFjZWRfZm9saW9fcHJlcGFyZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbm1tL21pZ3JhdGUuYy0yNzM0LVxubW0vbWlncmF0ZS5jOjI3MzU6XHRcdHdha2V1cF9rc3dhcGQocGdkYXQtXHUwMDNlbm9kZV96b25lcyAmIzQzOyB6LCAwLFxubW0vbWlncmF0ZS5jLTI3MzYtXHRcdFx0ICAgICAgZm9saW9fb3JkZXIoZm9saW8pLCBaT05FX01PVkFCTEUpO1xuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zNDEzPXN0cnVjdCBwYWdlICpybXF1ZXVlKHN0cnVjdCB6b25lICpwcmVmZXJyZWRfem9uZSxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzQzNC1cdFx0Y2xlYXJfYml0KFpPTkVfQk9PU1RFRF9XQVRFUk1BUkssIFx1MDAyNnpvbmUtXHUwMDNlZmxhZ3MpO1xubW0vcGFnZV9hbGxvYy5jOjM0MzU6XHRcdHdha2V1cF9rc3dhcGQoem9uZSwgMCwgMCwgem9uZV9pZHgoem9uZSkpO1xubW0vcGFnZV9hbGxvYy5jLTM0MzYtXHR9XG4tLVxubW0vcGFnZV9hbGxvYy5jPTQ1MDI9c3RhdGljIHZvaWQgd2FrZV9hbGxfa3N3YXBkcyh1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9tYXNrLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00NTIxLVx0XHRcdGNvbnRpbnVlO1xubW0vcGFnZV9hbGxvYy5jOjQ1MjI6XHRcdHdha2V1cF9rc3dhcGQoem9uZSwgZ2ZwX21hc2ssIHJlY2xhaW1fb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCk7XG5tbS9wYWdlX2FsbG9jLmMtNDUyMy1cdFx0bGFzdF9wZ2RhdCA9IHpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbi0tXG5tbS92bXNjYW4uYz03NDc0PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXG4tLVxubW0vdm1zY2FuLmMtNzU1NC0gKi9cbm1tL3Ztc2Nhbi5jOjc1NTU6dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcbm1tL3Ztc2Nhbi5jLTc1NTYtXHRcdCAgIGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03NTk0LVxubW0vdm1zY2FuLmM6NzU5NTpcdHRyYWNlX21tX3Ztc2Nhbl93YWtldXBfa3N3YXBkKHBnZGF0LVx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXG5tbS92bXNjYW4uYy03NTk2LVx0XHRcdFx0ICAgICAgZ2ZwX2ZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2ODAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA3OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgYXMgYSBrZXJuZWwgbWVtb3J5IGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEZ1bmN0aW9ucyBSZWxhdGVkIHRvIE1lbW9yeSBDb21wYWN0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIG5vdGljZWQgYSBmZXcgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGNvbXBhY3Rpb24sIHRoYXQgYXJlbiYjMzk7dCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgSSYjMzk7dmUgZ290IGB3YWtldXBfa3N3YXBkYCwgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGFuZCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AgZmxhZ2dlZC4gVGhlIGZhY3QgdGhhdCB0aGVzZSBhcmVuJiMzOTt0IGBzdGF0aWNgIHN1Z2dlc3RzIHRoZXkgbWlnaHQgYmUgZXhwb3NlZCBmb3IgdXNlIG91dHNpZGUgdGhlaXIgaW1tZWRpYXRlIG1vZHVsZSwgd2hpY2gsIGdpdmVuIHRoZWlyIG5hbWVzLCBsaWtlbHkgY2VudGVycyBhcm91bmQgdGhlIGtlcm5lbCYjMzk7cyBjb21wYWN0aW9uIGFuZCBzd2FwcGluZyBtZWNoYW5pc21zLgoKTm93LCBteSBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoZSBub24tc3RhdGljIHN0YXR1cyBpcyBhIHBvdGVudGlhbCBjbHVlIHRvIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgYW5kIHBvdGVudGlhbGx5IGludGVyYWN0ZWQgd2l0aCBieSBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLiBHaXZlbiB0aGUgY29udGV4dCwgbXkgbmV4dCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIGBrY29tcGFjdGRgIGFuZCBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZXNlIGZ1bmN0aW9ucy4gU2luY2UgdGhleSBzZWVtIGxpbmtlZCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYG1tL2NvbXBhY3Rpb24uY2AgYW5kIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a2NvbXBhY3RkJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vY29uY2VwdHMucnN0PTIwNj1waHlzaWNhbGx5IGNvbnRpZ3VvdXMgYXJlYXMgYmVjb21lIHBvc3NpYmxlLlxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9jb25jZXB0cy5yc3QtMjA3LVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9jb25jZXB0cy5yc3Q6MjA4Okxpa2UgcmVjbGFpbSwgdGhlIGNvbXBhY3Rpb24gbWF5IGhhcHBlbiBhc3luY2hyb25vdXNseSBpbiB0aGUgYGBrY29tcGFjdGRgYFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9jb25jZXB0cy5yc3QtMjA5LWRhZW1vbiBvciBzeW5jaHJvbm91c2x5IGFzIGEgcmVzdWx0IG9mIGEgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdC5cbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MTc3PWRlZmVyXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTc4LVx0bWVhbnMgdGhhdCBhbiBhcHBsaWNhdGlvbiB3aWxsIHdha2Uga3N3YXBkIGluIHRoZSBiYWNrZ3JvdW5kXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MTc5Olx0dG8gcmVjbGFpbSBwYWdlcyBhbmQgd2FrZSBrY29tcGFjdGQgdG8gY29tcGFjdCBtZW1vcnkgc28gdGhhdFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTE4MC1cdFRIUCBpcyBhdmFpbGFibGUgaW4gdGhlIG5lYXIgZnV0dXJlLiBJdCYjMzk7cyB0aGUgcmVzcG9uc2liaWxpdHlcbi0tXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MTgzPWRlZmVyJiM0MzttYWR2aXNlXG4tLVxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTE4Ni1cdG90aGVyIHJlZ2lvbnMgd2lsbCB3YWtlIGtzd2FwZCBpbiB0aGUgYmFja2dyb3VuZCB0byByZWNsYWltXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MTg3Olx0cGFnZXMgYW5kIHdha2Uga2NvbXBhY3RkIHRvIGNvbXBhY3QgbWVtb3J5IHNvIHRoYXQgVEhQIGlzXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTg4LVx0YXZhaWxhYmxlIGluIHRoZSBuZWFyIGZ1dHVyZS5cbi0tXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdD04NT1wZXJmb3JtIChlLmcuIHBhZ2UgYWxsb2NhdGlvbiwgZGlydHkgd3JpdGViYWNrLCBwYWdlIHJlY2xhaW0pLiBXaGVuXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdDo4Njp1c2luZyBORlNEIERJUkVDVCwga3N3YXBkIGFuZCBrY29tcGFjdGQgYXJlIG5vIGxvbmdlciBjb21tYW5kaW5nIENQVVxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3QtODctdGltZSB0cnlpbmcgdG8gZmluZCBhZGVxdWF0ZSBmcmVlIHBhZ2VzIHNvIHRoYXQgZm9yd2FyZCBJTyBwcm9ncmVzcyBjYW5cbi0tXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MzA4PUNvbXBhY3Rpb24gY29udHJvbFxuLS1cbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMTAtXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzExOmBga2NvbXBhY3RkX21heF9vcmRlcmBgXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzEyOiAgUGFnZSBvcmRlciB0aGF0IGtjb21wYWN0ZCBzaG91bGQgdHJ5IHRvIGFjaGlldmUuXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMzEzLVxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMxNDpgYGtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHhgYFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMxNTogIFRoZSBoaWdoZXN0IHpvbmUgaW5kZXggdG8gYmUgY29tcGFjdGVkIGJ5IGtjb21wYWN0ZC5cbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMTYtXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzE3OmBga2NvbXBhY3RkX3dhaXRgYFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMxOC0gIFdvcmtxdWV1ZSB1c2VkIHRvIHN5bmNocm9uaXplIG1lbW9yeSBjb21wYWN0aW9uIHRhc2tzLlxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMxOS1cbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMjA6YGBrY29tcGFjdGRgYFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMyMTogIFBlci1ub2RlIGluc3RhbmNlIG9mIGtjb21wYWN0ZCBrZXJuZWwgdGhyZWFkLlxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMyMi1cbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTI4MT1rc3dhcGTml6Dms5Xlm57mlLbku7vkvZXpobXpnaLnmoTov5DooYzmrKHmlbDjgIJcbi0tXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTI5Ni1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6Mjk3OmBga2NvbXBhY3RkX21heF9vcmRlcmBgXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjI5ODprY29tcGFjdGTlupTlsJ3or5Xlrp7njrDnmoTpobXpnaJvcmRlcuOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yOTktXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMwMDpgYGtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHhgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMDE6a2NvbXBhY3Rk5Y+v5Lul5Y6L57yp55qE5pyA6auY5Yy65Z+f57Si5byV44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMwMi1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzAzOmBga2NvbXBhY3RkX3dhaXRgYFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDQt5ZCM5q2l5YaF5a2Y5Y6L57yp5Lu75Yqh55qE5bel5L2c6Zif5YiX44CCXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMwNS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzA2OmBga2NvbXBhY3RkYGBcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzA3Ouavj+S4quiKgueCueeahGtjb21wYWN0ZOWGheaguOe6v+eoi+WunuS+i+OAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDgtXG4tLVxuZnMvbmZzL2ZpbGUuYz01MTI9c3RhdGljIGJvb2wgbmZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25mcy9maWxlLmMtNTE4LVx0XHRpZiAoKGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwKSBcdTAwMjYgR0ZQX0tFUk5FTCkgIT0gR0ZQX0tFUk5FTCB8fFxuZnMvbmZzL2ZpbGUuYzo1MTk6XHRcdCAgICBjdXJyZW50X2lzX2tzd2FwZCgpIHx8IGN1cnJlbnRfaXNfa2NvbXBhY3RkKCkpXG5mcy9uZnMvZmlsZS5jLTUyMC1cdFx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9Njg9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvbXBhY3RfZ2FwKHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC04My1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjg0OnN0YXRpYyBpbmxpbmUgaW50IGN1cnJlbnRfaXNfa2NvbXBhY3RkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC04NS17XG4tLVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTA0PWJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMDYtXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDc6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9ydW4oaW50IG5pZCk7XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDg6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpO1xuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTA5OmV4dGVybiB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KTtcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTExMC1cbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMTY9c3RhdGljIGlubGluZSBib29sIGNvbXBhY3Rpb25fc3VpdGFibGUoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjItXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMjM6c3RhdGljIGlubGluZSB2b2lkIGtjb21wYWN0ZF9ydW4oaW50IG5pZClcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEyNC17XG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjUtfVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTI2OnN0YXRpYyBpbmxpbmUgdm9pZCBrY29tcGFjdGRfc3RvcChpbnQgbmlkKVxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTI3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjktXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMzA6c3RhdGljIGlubGluZSB2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEzMS1cdFx0XHRcdGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oPTI2PWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzY1LSAqIGFyZSBjb21wb3VuZCBhbGxvY2F0aW9ucyB0aGF0IHdpbGwgZ2VuZXJhbGx5IGZhaWwgcXVpY2tseSBpZiBtZW1vcnkgaXMgbm90XG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM2NjogKiBhdmFpbGFibGUgYW5kIHdpbGwgbm90IHdha2Uga3N3YXBkL2tjb21wYWN0ZCBvbiBmYWlsdXJlLiBUaGUgX0xJR0hUXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oLTM2Ny0gKiB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgcmVjbGFpbS9jb21wYWN0aW9uIGF0IGFsbCBhbmQgaXMgYnkgZGVmYXVsdCB1c2VkXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDc4PXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1MzgtI2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1Mzk6XHRpbnQga2NvbXBhY3RkX21heF9vcmRlcjtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU0MDpcdGVudW0gem9uZV90eXBlIGtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHg7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1NDE6XHR3YWl0X3F1ZXVlX2hlYWRfdCBrY29tcGFjdGRfd2FpdDtcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU0MjpcdHN0cnVjdCB0YXNrX3N0cnVjdCAqa2NvbXBhY3RkO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNTQzLVx0Ym9vbCBwcm9hY3RpdmVfY29tcGFjdF90cmlnZ2VyO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaD0xNzcxPWV4dGVybiBzdHJ1Y3QgcGlkICpjYWRfcGlkO1xuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xNzkxLSNkZWZpbmUgUEZfTk9GUkVFWkVcdFx0MHgwMDAwODAwMFx0LyogVGhpcyB0aHJlYWQgc2hvdWxkIG5vdCBiZSBmcm96ZW4gKi9cbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxNzkyOiNkZWZpbmUgUEZfS0NPTVBBQ1REXHRcdDB4MDAwMTAwMDBcdC8qIEkgYW0ga2NvbXBhY3RkICovXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc5My0jZGVmaW5lIFBGX0tTV0FQRFx0XHQweDAwMDIwMDAwXHQvKiBJIGFtIGtzd2FwZCAqL1xuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaD0yODY9REVGSU5FX0VWRU5UKG1tX2NvbXBhY3Rpb25fZGVmZXJfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25fZGVmZXJfcmVzZXQsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTI5Mi1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaDoyOTM6VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl9rY29tcGFjdGRfc2xlZXAsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMjk0LVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0zMDktXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MzEwOkRFQ0xBUkVfRVZFTlRfQ0xBU1Moa2NvbXBhY3RkX3dha2VfdGVtcGxhdGUsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzExLVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0zMzctXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MzM4OkRFRklORV9FVkVOVChrY29tcGFjdGRfd2FrZV90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl93YWtldXBfa2NvbXBhY3RkLFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTMzOS1cbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzQ0LVxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oOjM0NTpERUZJTkVfRVZFTlQoa2NvbXBhY3RkX3dha2VfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25fa2NvbXBhY3RkX3dha2UsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzQ2LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yMjQ0PXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vY29tcGFjdGlvbi5jLTIyNTMtICogVGhlIHBlci1ub2RlIHByb2FjdGl2ZSAoYmFja2dyb3VuZCkgY29tcGFjdGlvbiBwcm9jZXNzIGlzIHN0YXJ0ZWQgYnkgaXRzXG5tbS9jb21wYWN0aW9uLmM6MjI1NDogKiBjb3JyZXNwb25kaW5nIGtjb21wYWN0ZCB0aHJlYWQgd2hlbiB0aGUgbm9kZSYjMzk7cyBmcmFnbWVudGF0aW9uIHNjb3JlXG5tbS9jb21wYWN0aW9uLmMtMjI1NS0gKiBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZC4gVGhlIGNvbXBhY3Rpb24gcHJvY2VzcyByZW1haW5zIGFjdGl2ZSB0aWxsXG4tLVxubW0vY29tcGFjdGlvbi5jPTIyOTc9c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgX19jb21wYWN0X2ZpbmlzaGVkKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMzA5LVx0XHQgKiBNYXJrIHRoYXQgdGhlIFBHX21pZ3JhdGVfc2tpcCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgY2xlYXJlZFxubW0vY29tcGFjdGlvbi5jOjIzMTA6XHRcdCAqIGJ5IGtzd2FwZCB3aGVuIGl0IGdvZXMgdG8gc2xlZXAuIGtjb21wYWN0ZCBkb2VzIG5vdCBzZXQgdGhlXG5tbS9jb21wYWN0aW9uLmMtMjMxMS1cdFx0ICogZmxhZyBpdHNlbGYgYXMgdGhlIGRlY2lzaW9uIHRvIGJlIGNsZWFyIHNob3VsZCBiZSBkaXJlY3RseVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMzU1LVx0Lypcbm1tL2NvbXBhY3Rpb24uYzoyMzU2Olx0ICogV2hlbiBkZWZyYWdfbW9kZSBpcyBlbmFibGVkLCBtYWtlIGtjb21wYWN0ZCB0YXJnZXRcbm1tL2NvbXBhY3Rpb24uYy0yMzU3LVx0ICogd2F0ZXJtYXJrcyBpbiB3aG9sZSBwYWdlYmxvY2tzLiBCZWNhdXNlIHRoZXkgY2FuIGJlIHN0b2xlblxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNDk3PWJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjUzOC0gKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2hcbm1tL2NvbXBhY3Rpb24uYzoyNTM5OiAqIHRoaXMgb24gaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuXG5tbS9jb21wYWN0aW9uLmMtMjU0MC0gKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNTcxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG5tbS9jb21wYWN0aW9uLmMtMjU3Mi1cdFx0XHRcdCBpbnQgaGlnaGVzdF96b25laWR4LCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXG5tbS9jb21wYWN0aW9uLmM6MjU3MzpcdFx0XHRcdCBib29sIGFzeW5jLCBib29sIGtjb21wYWN0ZClcbm1tL2NvbXBhY3Rpb24uYy0yNTc0LXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjU3OC1cdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxubW0vY29tcGFjdGlvbi5jOjI1Nzk6XHRcdFx0XHRcdCAgICAgICBrY29tcGFjdGQgXHUwMDI2XHUwMDI2IGRlZnJhZ19tb2RlKTtcbm1tL2NvbXBhY3Rpb24uYy0yNTgwLVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0zMDIzPXN0YXRpYyBpbnQgY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXG4tLVxubW0vY29tcGFjdGlvbi5jLTMwMzktXHRcdFx0cGdkYXQtXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IHRydWU7XG5tbS9jb21wYWN0aW9uLmM6MzA0MDpcdFx0XHR0cmFjZV9tbV9jb21wYWN0aW9uX3dha2V1cF9rY29tcGFjdGQocGdkYXQtXHUwMDNlbm9kZV9pZCwgLTEsXG5tbS9jb21wYWN0aW9uLmMtMzA0MS1cdFx0XHRcdFx0XHRcdCAgICAgcGdkYXQtXHUwMDNlbnJfem9uZXMgLSAxKTtcbm1tL2NvbXBhY3Rpb24uYzozMDQyOlx0XHRcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcdTAwMjZwZ2RhdC1cdTAwM2VrY29tcGFjdGRfd2FpdCk7XG5tbS9jb21wYWN0aW9uLmMtMzA0My1cdFx0fVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0zMDk0PXZvaWQgY29tcGFjdGlvbl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXG4tLVxubW0vY29tcGFjdGlvbi5jLTMwOTktXG5tbS9jb21wYWN0aW9uLmM6MzEwMDpzdGF0aWMgaW5saW5lIGJvb2wga2NvbXBhY3RkX3dvcmtfcmVxdWVzdGVkKHBnX2RhdGFfdCAqcGdkYXQpXG5tbS9jb21wYWN0aW9uLmMtMzEwMS17XG5tbS9jb21wYWN0aW9uLmM6MzEwMjpcdHJldHVybiBwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyIFx1MDAzZSAwIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fFxubW0vY29tcGFjdGlvbi5jLTMxMDMtXHRcdHBnZGF0LVx1MDAzZXByb2FjdGl2ZV9jb21wYWN0X3RyaWdnZXI7XG4tLVxubW0vY29tcGFjdGlvbi5jLTMxMDUtXG5tbS9jb21wYWN0aW9uLmM6MzEwNjpzdGF0aWMgYm9vbCBrY29tcGFjdGRfbm9kZV9zdWl0YWJsZShwZ19kYXRhX3QgKnBnZGF0KVxubW0vY29tcGFjdGlvbi5jLTMxMDcte1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMTA5LVx0c3RydWN0IHpvbmUgKnpvbmU7XG5tbS9jb21wYWN0aW9uLmM6MzExMDpcdGVudW0gem9uZV90eXBlIGhpZ2hlc3Rfem9uZWlkeCA9IHBnZGF0LVx1MDAzZWtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHg7XG5tbS9jb21wYWN0aW9uLmMtMzExMS1cdGVudW0gY29tcGFjdF9yZXN1bHQgcmV0O1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMTIxLVx0XHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcih6b25lLFxubW0vY29tcGFjdGlvbi5jOjMxMjI6XHRcdFx0XHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyLFxubW0vY29tcGFjdGlvbi5jLTMxMjMtXHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgsIGFsbG9jX2ZsYWdzLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMTMxLVxubW0vY29tcGFjdGlvbi5jOjMxMzI6c3RhdGljIHZvaWQga2NvbXBhY3RkX2RvX3dvcmsocGdfZGF0YV90ICpwZ2RhdClcbm1tL2NvbXBhY3Rpb24uYy0zMTMzLXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzE0MC1cdHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgY2MgPSB7XG5tbS9jb21wYWN0aW9uLmM6MzE0MTpcdFx0Lm9yZGVyID0gcGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlcixcbm1tL2NvbXBhY3Rpb24uYzozMTQyOlx0XHQuc2VhcmNoX29yZGVyID0gcGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlcixcbm1tL2NvbXBhY3Rpb24uYzozMTQzOlx0XHQuaGlnaGVzdF96b25laWR4ID0gcGdkYXQtXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCxcbm1tL2NvbXBhY3Rpb24uYy0zMTQ0LVx0XHQubW9kZSA9IE1JR1JBVEVfU1lOQ19MSUdIVCxcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzE1MC1cbm1tL2NvbXBhY3Rpb24uYzozMTUxOlx0dHJhY2VfbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfd2FrZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBjYy5vcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0zMTUyLVx0XHRcdFx0XHRcdFx0Y2MuaGlnaGVzdF96b25laWR4KTtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzIwNS1cdCAqL1xubW0vY29tcGFjdGlvbi5jOjMyMDY6XHRpZiAocGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciBcdTAwM2M9IGNjLm9yZGVyKVxubW0vY29tcGFjdGlvbi5jOjMyMDc6XHRcdHBnZGF0LVx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIgPSAwO1xubW0vY29tcGFjdGlvbi5jOjMyMDg6XHRpZiAocGdkYXQtXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCBcdTAwM2U9IGNjLmhpZ2hlc3Rfem9uZWlkeClcbm1tL2NvbXBhY3Rpb24uYzozMjA5Olx0XHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfaGlnaGVzdF96b25laWR4ID0gcGdkYXQtXHUwMDNlbnJfem9uZXMgLSAxO1xubW0vY29tcGFjdGlvbi5jLTMyMTAtfVxubW0vY29tcGFjdGlvbi5jLTMyMTEtXG5tbS9jb21wYWN0aW9uLmM6MzIxMjp2b2lkIHdha2V1cF9rY29tcGFjdGQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxubW0vY29tcGFjdGlvbi5jLTMyMTMte1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjE2LVxubW0vY29tcGFjdGlvbi5jOjMyMTc6XHRpZiAocGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciBcdTAwM2Mgb3JkZXIpXG5tbS9jb21wYWN0aW9uLmM6MzIxODpcdFx0cGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciA9IG9yZGVyO1xubW0vY29tcGFjdGlvbi5jLTMyMTktXG5tbS9jb21wYWN0aW9uLmM6MzIyMDpcdGlmIChwZ2RhdC1cdTAwM2VrY29tcGFjdGRfaGlnaGVzdF96b25laWR4IFx1MDAzZSBoaWdoZXN0X3pvbmVpZHgpXG5tbS9jb21wYWN0aW9uLmM6MzIyMTpcdFx0cGdkYXQtXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCA9IGhpZ2hlc3Rfem9uZWlkeDtcbm1tL2NvbXBhY3Rpb24uYy0zMjIyLVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjI2LVx0ICovXG5tbS9jb21wYWN0aW9uLmM6MzIyNzpcdGlmICghd3FfaGFzX3NsZWVwZXIoXHUwMDI2cGdkYXQtXHUwMDNla2NvbXBhY3RkX3dhaXQpKVxubW0vY29tcGFjdGlvbi5jLTMyMjgtXHRcdHJldHVybjtcbm1tL2NvbXBhY3Rpb24uYy0zMjI5LVxubW0vY29tcGFjdGlvbi5jOjMyMzA6XHRpZiAoIWtjb21wYWN0ZF9ub2RlX3N1aXRhYmxlKHBnZGF0KSlcbm1tL2NvbXBhY3Rpb24uYy0zMjMxLVx0XHRyZXR1cm47XG5tbS9jb21wYWN0aW9uLmMtMzIzMi1cbm1tL2NvbXBhY3Rpb24uYzozMjMzOlx0dHJhY2VfbW1fY29tcGFjdGlvbl93YWtldXBfa2NvbXBhY3RkKHBnZGF0LVx1MDAzZW5vZGVfaWQsIG9yZGVyLFxubW0vY29tcGFjdGlvbi5jLTMyMzQtXHRcdFx0XHRcdFx0XHRoaWdoZXN0X3pvbmVpZHgpO1xubW0vY29tcGFjdGlvbi5jOjMyMzU6XHR3YWtlX3VwX2ludGVycnVwdGlibGUoXHUwMDI2cGdkYXQtXHUwMDNla2NvbXBhY3RkX3dhaXQpO1xubW0vY29tcGFjdGlvbi5jLTMyMzYtfVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMjQxLSAqL1xubW0vY29tcGFjdGlvbi5jOjMyNDI6c3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbm1tL2NvbXBhY3Rpb24uYy0zMjQzLXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzI1MC1cbm1tL2NvbXBhY3Rpb24uYzozMjUxOlx0cGdkYXQtXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciA9IDA7XG5tbS9jb21wYWN0aW9uLmM6MzI1MjpcdHBnZGF0LVx1MDAzZWtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHggPSBwZ2RhdC1cdTAwM2Vucl96b25lcyAtIDE7XG5tbS9jb21wYWN0aW9uLmMtMzI1My1cbi0tXG5tbS9jb21wYWN0aW9uLmMtMzI2Mi1cdFx0XHR0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7XG5tbS9jb21wYWN0aW9uLmM6MzI2MzpcdFx0dHJhY2VfbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfc2xlZXAocGdkYXQtXHUwMDNlbm9kZV9pZCk7XG5tbS9jb21wYWN0aW9uLmM6MzI2NDpcdFx0aWYgKHdhaXRfZXZlbnRfZnJlZXphYmxlX3RpbWVvdXQocGdkYXQtXHUwMDNla2NvbXBhY3RkX3dhaXQsXG5tbS9jb21wYWN0aW9uLmM6MzI2NTpcdFx0XHRrY29tcGFjdGRfd29ya19yZXF1ZXN0ZWQocGdkYXQpLCB0aW1lb3V0KSBcdTAwMjZcdTAwMjZcbm1tL2NvbXBhY3Rpb24uYy0zMjY2LVx0XHRcdCFwZ2RhdC1cdTAwM2Vwcm9hY3RpdmVfY29tcGFjdF90cmlnZ2VyKSB7XG4tLVxubW0vY29tcGFjdGlvbi5jLTMyNjgtXHRcdFx0cHNpX21lbXN0YWxsX2VudGVyKFx1MDAyNnBmbGFncyk7XG5tbS9jb21wYWN0aW9uLmM6MzI2OTpcdFx0XHRrY29tcGFjdGRfZG9fd29yayhwZ2RhdCk7XG5tbS9jb21wYWN0aW9uLmMtMzI3MC1cdFx0XHRwc2lfbWVtc3RhbGxfbGVhdmUoXHUwMDI2cGZsYWdzKTtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzMxMS0vKlxubW0vY29tcGFjdGlvbi5jOjMzMTI6ICogVGhpcyBrY29tcGFjdGQgc3RhcnQgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgaW5pdCBhbmQgbm9kZS1ob3QtYWRkLlxubW0vY29tcGFjdGlvbi5jOjMzMTM6ICogT24gbm9kZS1ob3QtYWRkLCBrY29tcGFjdGQgd2lsbCBtb3ZlZCB0byBwcm9wZXIgY3B1cyBpZiBjcHVzIGFyZSBob3QtYWRkZWQuXG5tbS9jb21wYWN0aW9uLmMtMzMxNC0gKi9cbm1tL2NvbXBhY3Rpb24uYzozMzE1OnZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9ydW4oaW50IG5pZClcbm1tL2NvbXBhY3Rpb24uYy0zMzE2LXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzMxOC1cbm1tL2NvbXBhY3Rpb24uYzozMzE5Olx0aWYgKHBnZGF0LVx1MDAzZWtjb21wYWN0ZClcbm1tL2NvbXBhY3Rpb24uYy0zMzIwLVx0XHRyZXR1cm47XG5tbS9jb21wYWN0aW9uLmMtMzMyMS1cbm1tL2NvbXBhY3Rpb24uYzozMzIyOlx0cGdkYXQtXHUwMDNla2NvbXBhY3RkID0ga3RocmVhZF9jcmVhdGVfb25fbm9kZShrY29tcGFjdGQsIHBnZGF0LCBuaWQsIFwmIzM0O2tjb21wYWN0ZCVkXCYjMzQ7LCBuaWQpO1xubW0vY29tcGFjdGlvbi5jOjMzMjM6XHRpZiAoSVNfRVJSKHBnZGF0LVx1MDAzZWtjb21wYWN0ZCkpIHtcbm1tL2NvbXBhY3Rpb24uYzozMzI0Olx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IGtjb21wYWN0ZCBvbiBub2RlICVkXFxuXCYjMzQ7LCBuaWQpO1xubW0vY29tcGFjdGlvbi5jOjMzMjU6XHRcdHBnZGF0LVx1MDAzZWtjb21wYWN0ZCA9IE5VTEw7XG5tbS9jb21wYWN0aW9uLmMtMzMyNi1cdH0gZWxzZSB7XG5tbS9jb21wYWN0aW9uLmM6MzMyNzpcdFx0d2FrZV91cF9wcm9jZXNzKHBnZGF0LVx1MDAzZWtjb21wYWN0ZCk7XG5tbS9jb21wYWN0aW9uLmMtMzMyOC1cdH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtMzMzNC0gKi9cbm1tL2NvbXBhY3Rpb24uYzozMzM1OnZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpXG5tbS9jb21wYWN0aW9uLmMtMzMzNi17XG5tbS9jb21wYWN0aW9uLmM6MzMzNzpcdHN0cnVjdCB0YXNrX3N0cnVjdCAqa2NvbXBhY3RkID0gTk9ERV9EQVRBKG5pZCktXHUwMDNla2NvbXBhY3RkO1xubW0vY29tcGFjdGlvbi5jLTMzMzgtXG5tbS9jb21wYWN0aW9uLmM6MzMzOTpcdGlmIChrY29tcGFjdGQpIHtcbm1tL2NvbXBhY3Rpb24uYzozMzQwOlx0XHRrdGhyZWFkX3N0b3Aoa2NvbXBhY3RkKTtcbm1tL2NvbXBhY3Rpb24uYzozMzQxOlx0XHROT0RFX0RBVEEobmlkKS1cdTAwM2VrY29tcGFjdGQgPSBOVUxMO1xubW0vY29tcGFjdGlvbi5jLTMzNDItXHR9XG4tLVxubW0vY29tcGFjdGlvbi5jPTMzNjQ9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1fY29tcGFjdGlvbltdID0ge1xuLS1cbm1tL2NvbXBhY3Rpb24uYy0zNDAwLVxubW0vY29tcGFjdGlvbi5jOjM0MDE6c3RhdGljIGludCBfX2luaXQga2NvbXBhY3RkX2luaXQodm9pZClcbm1tL2NvbXBhY3Rpb24uYy0zNDAyLXtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzQwNS1cdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcbm1tL2NvbXBhY3Rpb24uYzozNDA2Olx0XHRrY29tcGFjdGRfcnVuKG5pZCk7XG5tbS9jb21wYWN0aW9uLmMtMzQwNy1cdHJlZ2lzdGVyX3N5c2N0bF9pbml0KFwmIzM0O3ZtXCYjMzQ7LCB2bV9jb21wYWN0aW9uKTtcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzQwOS19XG5tbS9jb21wYWN0aW9uLmM6MzQxMDpzdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXG5tbS9jb21wYWN0aW9uLmMtMzQxMS1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTE0ODE9Z2ZwX3Qgdm1hX3RocF9nZnBfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE0ODgtXG5tbS9odWdlX21lbW9yeS5jOjE0ODk6XHQvKiBLaWNrIGtjb21wYWN0ZCBhbmQgZmFpbCBxdWlja2x5ICovXG5tbS9odWdlX21lbW9yeS5jLTE0OTAtXHRpZiAodGVzdF9iaXQoVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0tTV0FQRF9GTEFHLCBcdTAwMjZ0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncykpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xNDkyLVxubW0vaHVnZV9tZW1vcnkuYzoxNDkzOlx0LyogU3luY2hyb25vdXMgY29tcGFjdGlvbiBpZiBtYWR2aXNlZCwgb3RoZXJ3aXNlIGtpY2sga2NvbXBhY3RkICovXG5tbS9odWdlX21lbW9yeS5jLTE0OTQtXHRpZiAodGVzdF9iaXQoVFJBTlNQQVJFTlRfSFVHRVBBR0VfREVGUkFHX0tTV0FQRF9PUl9NQURWX0ZMQUcsIFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcbi0tXG5tbS9pbnRlcm5hbC5oPTgyMz1zdHJ1Y3QgY29tcGFjdF9jb250cm9sIHtcbi0tXG5tbS9pbnRlcm5hbC5oLTg1MC1cdGJvb2wgaWdub3JlX2Jsb2NrX3N1aXRhYmxlO1x0LyogU2NhbiBibG9ja3MgY29uc2lkZXJlZCB1bnN1aXRhYmxlICovXG5tbS9pbnRlcm5hbC5oOjg1MTpcdGJvb2wgZGlyZWN0X2NvbXBhY3Rpb247XHRcdC8qIEZhbHNlIGZyb20ga2NvbXBhY3RkIG9yIC9wcm9jLy4uLiAqL1xubW0vaW50ZXJuYWwuaDo4NTI6XHRib29sIHByb2FjdGl2ZV9jb21wYWN0aW9uO1x0Lyoga2NvbXBhY3RkIHByb2FjdGl2ZSBjb21wYWN0aW9uICovXG5tbS9pbnRlcm5hbC5oLTg1My1cdGJvb2wgd2hvbGVfem9uZTtcdFx0LyogV2hvbGUgem9uZSBzaG91bGQvaGFzIGJlZW4gc2Nhbm5lZCAqL1xuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmM9MTE0MD1pbnQgb25saW5lX3BhZ2VzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzMi1cdGtzd2FwZF9ydW4obmlkKTtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MTIzMzpcdGtjb21wYWN0ZF9ydW4obmlkKTtcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzNC1cbi0tXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5NTU9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWVtb3J5X2hvdHBsdWcuYy0yMTQzLVx0aWYgKG5vZGVfYXJnLm5pZCBcdTAwM2U9IDApIHtcbm1tL21lbW9yeV9ob3RwbHVnLmM6MjE0NDpcdFx0a2NvbXBhY3RkX3N0b3Aobm9kZSk7XG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxNDUtXHRcdGtzd2FwZF9zdG9wKG5vZGUpO1xuLS1cbm1tL21tX2luaXQuYz0xMzMxPXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vbW1faW5pdC5jLTEzNzQtI2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9tbV9pbml0LmM6MTM3NTpzdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxubW0vbW1faW5pdC5jLTEzNzYte1xubW0vbW1faW5pdC5jOjEzNzc6XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNnBnZGF0LVx1MDAzZWtjb21wYWN0ZF93YWl0KTtcbm1tL21tX2luaXQuYy0xMzc4LX1cbm1tL21tX2luaXQuYy0xMzc5LSNlbHNlXG5tbS9tbV9pbml0LmM6MTM4MDpzdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KSB7fVxubW0vbW1faW5pdC5jLTEzODEtI2VuZGlmXG4tLVxubW0vbW1faW5pdC5jPTEzODM9c3RhdGljIHZvaWQgX19tZW1pbml0IHBnZGF0X2luaXRfaW50ZXJuYWxzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vbW1faW5pdC5jLTEzODgtXHRwZ2RhdF9rc3dhcGRfbG9ja19pbml0KHBnZGF0KTtcbm1tL21tX2luaXQuYzoxMzg5Olx0cGdkYXRfaW5pdF9rY29tcGFjdGQocGdkYXQpO1xubW0vbW1faW5pdC5jLTEzOTAtXG4tLVxubW0vc2x1Yi5jPTY4NjE9c3RhdGljIGdmcF90IGttYWxsb2NfZ2ZwX2FkanVzdChnZnBfdCBmbGFncywgc2l6ZV90IHNpemUpXG4tLVxubW0vc2x1Yi5jLTY4NjgtXHQgKiBkbyBub3QgZGlyZWN0IHJlY2xhaW0gdW5sZXNzIHBoeXNpY2FsbHkgY29udGludW91cyBtZW1vcnkgaXMgcHJlZmVycmVkXG5tbS9zbHViLmM6Njg2OTpcdCAqIChfX0dGUF9SRVRSWV9NQVlGQUlMIG1vZGUpLiBXZSBzdGlsbCBraWNrIGluIGtzd2FwZC9rY29tcGFjdGQgdG9cbm1tL3NsdWIuYy02ODcwLVx0ICogc3RhcnQgd29ya2luZyBpbiB0aGUgYmFja2dyb3VuZFxuLS1cbm1tL3Ztc2Nhbi5jPTcxMzk9c3RhdGljIGludCBiYWxhbmNlX3BnZGF0KHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcbi0tXG5tbS92bXNjYW4uYy03MzQxLVx0XHQgKi9cbm1tL3Ztc2Nhbi5jOjczNDI6XHRcdHdha2V1cF9rY29tcGFjdGQocGdkYXQsIHBhZ2VibG9ja19vcmRlciwgaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTczNDMtXHR9XG4tLVxubW0vdm1zY2FuLmM9NzM3Nz1zdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXG4tLVxubW0vdm1zY2FuLmMtNzM4OC1cdC8qXG5tbS92bXNjYW4uYzo3Mzg5Olx0ICogVHJ5IHRvIHNsZWVwIGZvciBhIHNob3J0IGludGVydmFsLiBOb3RlIHRoYXQga2NvbXBhY3RkIHdpbGwgb25seSBiZVxubW0vdm1zY2FuLmMtNzM5MC1cdCAqIHdva2VuIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHNsZWVwIGZvciBhIHNob3J0IGludGVydmFsLiBUaGlzIGlzXG4tLVxubW0vdm1zY2FuLmMtNzQwNy1cdFx0ICovXG5tbS92bXNjYW4uYzo3NDA4Olx0XHR3YWtldXBfa2NvbXBhY3RkKHBnZGF0LCBhbGxvY19vcmRlciwgaGlnaGVzdF96b25laWR4KTtcbm1tL3Ztc2Nhbi5jLTc0MDktXG4tLVxubW0vdm1zY2FuLmM9NzQ3ND1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxuLS1cbm1tL3Ztc2Nhbi5jLTc1MzEtXHRcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcbm1tL3Ztc2Nhbi5jOjc1MzI6XHRcdCAqIGJ1dCBrY29tcGFjdGQgaXMgd29rZW4gdG8gY29tcGFjdCBmb3IgdGhlIG9yaWdpbmFsXG5tbS92bXNjYW4uYy03NTMzLVx0XHQgKiByZXF1ZXN0IChhbGxvY19vcmRlcikuXG4tLVxubW0vdm1zY2FuLmMtNzU1MC0gKiBrc3dhcGQgc2hvdWxkIHJlY2xhaW0gKGRpcmVjdCByZWNsYWltIGlzIGRlZmVycmVkKSwgd2FrZSBpdCB1cCBmb3IgdGhlIHpvbmUmIzM5O3Ncbm1tL3Ztc2Nhbi5jOjc1NTE6ICogcGdkYXQuICBJdCB3aWxsIHdha2UgdXAga2NvbXBhY3RkIGFmdGVyIHJlY2xhaW1pbmcgbWVtb3J5LiAgSWYga3N3YXBkIHJlY2xhaW1cbm1tL3Ztc2Nhbi5jOjc1NTI6ICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcbm1tL3Ztc2Nhbi5jLTc1NTMtICogbmVlZGVkLlxuLS1cbm1tL3Ztc2Nhbi5jPTc1NTU9dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcbi0tXG5tbS92bXNjYW4uYy03NTg0LVx0XHQgKiBUaGVyZSBtYXkgYmUgcGxlbnR5IG9mIGZyZWUgbWVtb3J5IGF2YWlsYWJsZSwgYnV0IGl0JiMzOTtzIHRvb1xubW0vdm1zY2FuLmM6NzU4NTpcdFx0ICogZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucy4gIFdha2UgdXAga2NvbXBhY3RkXG5tbS92bXNjYW4uYy03NTg2LVx0XHQgKiBhbmQgcmVseSBvbiBjb21wYWN0aW9uX3N1aXRhYmxlKCkgdG8gZGV0ZXJtaW5lIGlmIGl0JiMzOTtzXG4tLVxubW0vdm1zY2FuLmMtNzU5MC1cdFx0aWYgKCEoZ2ZwX2ZsYWdzIFx1MDAyNiBfX0dGUF9ESVJFQ1RfUkVDTEFJTSkpXG5tbS92bXNjYW4uYzo3NTkxOlx0XHRcdHdha2V1cF9rY29tcGFjdGQocGdkYXQsIG9yZGVyLCBoaWdoZXN0X3pvbmVpZHgpO1xubW0vdm1zY2FuLmMtNzU5Mi1cdFx0cmV0dXJuO1xuLS1cbnRvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmg9MjY9ZW51bSB7XG4tLVxudG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjQtICogYXJlIGNvbXBvdW5kIGFsbG9jYXRpb25zIHRoYXQgd2lsbCBnZW5lcmFsbHkgZmFpbCBxdWlja2x5IGlmIG1lbW9yeSBpcyBub3RcbnRvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmg6MzY1OiAqIGF2YWlsYWJsZSBhbmQgd2lsbCBub3Qgd2FrZSBrc3dhcGQva2NvbXBhY3RkIG9uIGZhaWx1cmUuIFRoZSBfTElHSFRcbnRvb2xzL2luY2x1ZGUvbGludXgvZ2ZwX3R5cGVzLmgtMzY2LSAqIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCByZWNsYWltL2NvbXBhY3Rpb24gYXQgYWxsIGFuZCBpcyBieSBkZWZhdWx0IHVzZWRcbi0tXG50b29scy9zY2hlZF9leHQvaW5jbHVkZS9zY3gvY29tbW9uLmJwZi5oLTMyLSNkZWZpbmUgUEZfV1FfV09SS0VSXHRcdFx0MHgwMDAwMDAyMFx0LyogSSYjMzk7bSBhIHdvcmtxdWV1ZSB3b3JrZXIgKi9cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmg6MzM6I2RlZmluZSBQRl9LQ09NUEFDVERcdFx0XHQweDAwMDEwMDAwICAgICAgLyogSSBhbSBrY29tcGFjdGQgKi9cbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmgtMzQtI2RlZmluZSBQRl9LU1dBUERcdFx0XHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI2NDEKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA1ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBDb21wYWN0aW9uIGZvciBDb2RlIFJldmlldyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gaWRlbnRpZmllZCBzZXZlcmFsIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiB0aGUgbWVtb3J5IGNvbXBhY3Rpb24gY29kZSB0aGF0IHNlZW0gbGlrZSBnb29kIGVudHJ5IHBvaW50cyBmb3IgZnVydGhlciBhbmFseXNpcy4gU3BlY2lmaWNhbGx5LCBgd2FrZXVwX2tjb21wYWN0ZGAsIGBrY29tcGFjdGRfcnVuYCwgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgLCBhbmQgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGFsbCBqdW1wZWQgb3V0IGltbWVkaWF0ZWx5LiBJJiMzOTtsbCBuZWVkIHRvIGZvY3VzIG9uIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBpbiBgbW0vY29tcGFjdGlvbi5jYCBhcyBhIGtleSBzeW1ib2wsIGdpdmVuIGl0cyBub24tc3RhdGljIG5hdHVyZS4gU2ltaWxhcmx5LCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgaXMgYWxzbyBub24tc3RhdGljLiBUaGVuIHRoZXJlJiMzOTtzIGB3YWtldXBfa3N3YXBkYCBhbmQgYHdha2V1cF9rY29tcGFjdGRgIGFuZCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AuCgpOb3csIGxvb2tpbmcgYXQgdGhlIHBhdGNoIGl0c2VsZiwgaXQmIzM5O3MgbW9kaWZ5aW5nIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucy4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgc2hvdWxkX3Byb2FjdGl2ZV9jb21wYWN0X25vZGVgLCBgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlYCwgYGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZGAsIGFuZCBgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lYCBhcmUgYmVpbmcgdG91Y2hlZCwgYW5kIGFsbCBvZiB0aG9zZSBhcmUgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGtjb21wYWN0ZGAuIFRoZSBwYXRjaCBhbHNvIGFmZmVjdHMgYF9fY29tcGFjdF9maW5pc2hlZGAgKGNhbGxlZCBmcm9tIGBjb21wYWN0X3pvbmVgKSwgYW5kIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgKGNhbGxlZCBmcm9tIGBjb21wYWN0X3pvbmVgLCBga2NvbXBhY3RkX25vZGVfc3VpdGFibGVgLCBhbmQgYGtjb21wYWN0ZF9kb193b3JrYCkuIEFkZGl0aW9uYWxseSwgYHBnZGF0X2JhbGFuY2VkYCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgcHJlcGFyZV9rc3dhcGRfc2xlZXBgLCBgYmFsYW5jZV9wZ2RhdGAsIGB3YWtldXBfa3N3YXBkYCwgYW5kIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYC4gU28sIGRlc3BpdGUgdGhlIHN0YXRpYyBuYXR1cmUsIHRoZXNlIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZSBwYXRjaCAqaXMqIG1vZGlmeWluZyB0aGVtIGluIHJlbGF0aW9uIHRvIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy4KClRoZXJlZm9yZSwgdGhlIG1haW4gZm9jdXMgaXMgc3RpbGwgb24gdGhlc2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnM6CgoqICAgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgCiogICBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAKKiAgIGB3YWtldXBfa3N3YXBkYAoqICAgYHdha2V1cF9rY29tcGFjdGRgCiogICBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AKCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSBpbmRlZWQgbm9uLXN0YXRpYy4gWWVzLCBhbGwgb2YgdGhlbSBhcmUgbm9uLXN0YXRpYyBhcyBJIGluaXRpYWxseSB0aG91Z2h0LgoKRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgYXJlYTogYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBhbHNvIGRvdWJsZSBjaGVjayB0aGF0IGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMsIGFzIEkgdGhvdWdodCwgb25seSB0aWVkIHRvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBZZXAsIGNvbmZpcm1lZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgd2l0aCB0aGF0IGNvbmZpZy4gQWxsIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV9tZW1vcnkubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICYjNDM7PSBtaWdyYXRlX2RldmljZS5vXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSAmIzQzOz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSAmIzQzOz0gcGFnZV9jb3VudGVyLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM5MzEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqQ2hlY2tpbmcgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgaXMgY3J5c3RhbCBjbGVhcjogYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHByZXJlcXVpc2l0ZS4gTm8gcXVlc3Rpb24gdGhlcmUuIE5vdywgbGV0JiMzOTtzIG1vdmUgb250byBjb21wYWN0aW9uLCBzcGVjaWZpY2FsbHkgd2hldGhlciBgQ09NUEFDVElPTmAgaXMgbmVjZXNzYXJ5IGluIHRoaXMgY29udGV4dC4KClJpZ2h0LCBJJiMzOTtsbCBnbyBoYXZlIGEgcXVpY2sgbG9vayBhdCB0aGUgc291cmNlLiBJdCBsb29rcyBsaWtlIHRoZSBrZXJuZWwgY29tcGlsZXMgYG1tL2NvbXBhY3Rpb24uY2Agd2hlbiBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIGRlZmluZWQuIEdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbXBhY3Rpb24ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01NS1cdFx0XHQgICBtbV9pbml0Lm8gcGVyY3B1Lm8gc2xhYl9jb21tb24ubyBcXFxubW0vTWFrZWZpbGU6NTY6XHRcdFx0ICAgY29tcGFjdGlvbi5vIHNob3dfbWVtLm8gXFxcbm1tL01ha2VmaWxlLTU3LVx0XHRcdCAgIGludGVydmFsX3RyZWUubyBsaXN0X2xydS5vIHdvcmtpbmdzZXQubyBcXFxuLS1cbm1tL2JhbGxvb24uYz0xODE9RVhQT1JUX1NZTUJPTF9HUEwoYmFsbG9vbl9wYWdlX2VucXVldWUpO1xuLS1cbm1tL2JhbGxvb24uYy0xOTUtICogc29tZSBlbnF1ZXVlZCBwYWdlcyAtIHNpbmNlIHRoZSBwYWdlIGxpc3QgY2FuIGJlIHRlbXBvcmFyaWx5IGVtcHR5IGR1ZSB0b1xubW0vYmFsbG9vbi5jOjE5NjogKiB0aGUgY29tcGFjdGlvbiBvZiBpc29sYXRlZCBwYWdlcy5cbm1tL2JhbGxvb24uYy0xOTctICpcbi0tXG5tbS9jb21wYWN0aW9uLmM9MTUyPXN0YXRpYyBib29sIGNvbXBhY3Rpb25fZGVmZXJyZWQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcilcbi0tXG5tbS9jb21wYWN0aW9uLmMtMTcwLS8qXG5tbS9jb21wYWN0aW9uLmM6MTcxOiAqIFVwZGF0ZSBkZWZlciB0cmFja2luZyBjb3VudGVycyBhZnRlciBzdWNjZXNzZnVsIGNvbXBhY3Rpb24gb2YgZ2l2ZW4gb3JkZXIsXG5tbS9jb21wYWN0aW9uLmMtMTcyLSAqIHdoaWNoIG1lYW5zIGFuIGFsbG9jYXRpb24gZWl0aGVyIHN1Y2NlZWRlZCAoYWxsb2Nfc3VjY2VzcyA9PSB0cnVlKSBvciBpc1xuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNDIyPXN0YXRpYyBib29sIF9fY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yNDQ5LS8qXG5tbS9jb21wYWN0aW9uLmM6MjQ1MDogKiBjb21wYWN0aW9uX3N1aXRhYmxlOiBJcyB0aGlzIHN1aXRhYmxlIHRvIHJ1biBjb21wYWN0aW9uIG9uIHRoaXMgem9uZSBub3c/XG5tbS9jb21wYWN0aW9uLmMtMjQ1MS0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1MTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHVuZm9sZGVkOgoKKipVbnBhY2tpbmcgYSBDb21waWxhdGlvbiBNeXN0ZXJ5KioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQuIEkgd2FzIHVuZGVyIHRoZSBpbXByZXNzaW9uIHRoYXQgdGhlIGNvbXBhY3Rpb24gY29kZSBpbiBgbW0vY29tcGFjdGlvbi5jYCBoYWQgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgYnV0IG5vdyBJJiMzOTttIHF1ZXN0aW9uaW5nIHRoYXQuIFdoeSBhcmUgd2UgY29tcGlsaW5nIGl0IHVuY29uZGl0aW9uYWxseT8gVGhhdCBkb2VzbiYjMzk7dCBzZWVtIHJpZ2h0LiBMZXQmIzM5O3MgZGlnIGluIGFuZCBjb25maXJtLiBGaXJzdCwgSSYjMzk7bGwgY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBiZWluZyBoYW5kbGVkLiBBaCwgdGhlcmUgaXQgaXM6IGBvYmoteSA6PSAuLi4gY29tcGFjdGlvbi5vIC4uLmAuIFRoZSBgY29tcGFjdGlvbi5vYCAqaXMqIGxpc3RlZCB1bmRlciBgb2JqLXlgLiBTbywgaXQgKmlzKiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQgaW50byB0aGUga2VybmVsIGltYWdlLiBUaGF04oCZcyBvZGQuIExldCYjMzk7cyBnbyBiYWNrIGFuZCBleGFtaW5lIGBtbS9jb21wYWN0aW9uLmNgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IGl0JiMzOTtzIG5vdCBndWFyZGVkIGJ5IHNvbWUgZmVhdHVyZSBmbGFnIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBUaGlzIGNvdWxkIGhhdmUgc29tZSBwZXJmb3JtYW5jZSBvciBtZW1vcnkgaW1wbGljYXRpb25zIGlmIGNvbXBhY3Rpb24gaXNuJiMzOTt0IGFjdHVhbGx5IGJlaW5nIHVzZWQgaW4gYSBzcGVjaWZpYyBidWlsZC4gSXQgd291bGQgYmUgZ29vZCB0byBzZWUgd2h5IGl0JiMzOTtzIHVuY29uZGl0aW9uYWxseSBidWlsdCwgYmVjYXVzZSB0aGF0JiMzOTtzIG5vdCB3aGF0IEkgZXhwZWN0ZWQuIEkmIzM5O2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19DT01QQUNUSU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYy0zMC1cbm1tL2NvbXBhY3Rpb24uYzozMTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cbm1tL2NvbXBhY3Rpb24uYy0zMi0vKlxuLS1cbm1tL2NvbXBhY3Rpb24uYz02MT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbi0tXG5tbS9jb21wYWN0aW9uLmMtNjMtXG5tbS9jb21wYWN0aW9uLmM6NjQ6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXG5tbS9jb21wYWN0aW9uLmMtNjUtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTEyNi1cbm1tL2NvbXBhY3Rpb24uYzoxMjc6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG5tbS9jb21wYWN0aW9uLmMtMTI4LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy01MDQtfVxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL2NvbXBhY3Rpb24uYy01MDYtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMzg4LVxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2NvbXBhY3Rpb24uYzoxMzkwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxubW0vY29tcGFjdGlvbi5jLTEzOTEtXG4tLVxubW0vY29tcGFjdGlvbi5jPTM0MTA9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxubW0vY29tcGFjdGlvbi5jLTM0MTEtXG5tbS9jb21wYWN0aW9uLmM6MzQxMjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzMzMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb21wYWN0aW9uIE1vZHVsZSBNdXNpbmdzKioKCk9rYXksIHNvIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCBgbW0vY29tcGFjdGlvbi5jYC4gSXQmIzM5O3MgY29tcGlsZWQgaW4gYWxsIGNvbmZpZ3VyYXRpb25zLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gQnV0LCBJIGtub3cgYSBsb3Qgb2YgdGhlIGFjdHVhbCBjb2RlICp3aXRoaW4qIHRoYXQgZmlsZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLCBwcmltYXJpbHkgdXNpbmcgYCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTmAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBzb21ldGhpbmcgc3BlY2lmaWMuLi4gSSB3YW50IHRvIHF1aWNrbHkgYXNjZXJ0YWluIGlmIHRoZSBmdW5jdGlvbiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgKmFsc28qIGd1YXJkZWQgYnkgdGhhdCBzYW1lIG1hY3JvLiBLbm93aW5nIHRoYXQgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGhvdyByb2J1c3QgdGhlIGNvbXBhY3Rpb24gY29uZmlndXJhdGlvbiBpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7em9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9MjQ5Nz1ib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1MzEtLyoqXG5tbS9jb21wYWN0aW9uLmM6MjUzMjogKiB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzIC0gZ2V0IGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gYWxsb2NhdGlvbiBvcmRlclxubW0vY29tcGFjdGlvbi5jLTI1MzMtICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NDQtICovXG5tbS9jb21wYWN0aW9uLmM6MjU0NTp1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG5tbS9jb21wYWN0aW9uLmMtMjU0Ni1cdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNTcxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI1NzctXG5tbS9jb21wYWN0aW9uLmM6MjU3ODpcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxubW0vY29tcGFjdGlvbi5jLTI1NzktXHRcdFx0XHRcdCAgICAgICBrY29tcGFjdGQgXHUwMDI2XHUwMDI2IGRlZnJhZ19tb2RlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4MTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBgI2lmZGVmYCBibG9jayBhc3NvY2lhdGVkIHdpdGggYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLiBUaGlzIHN1Z2dlc3RzIGEgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gc2NlbmFyaW8sIG1lYW5pbmcgdGhlIHByZXNlbmNlIGFuZC9vciBiZWhhdmlvciBvZiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgcHJlcHJvY2Vzc29yIGRlZmluaXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGViYXNlIGFuZCBzZWFyY2ggZm9yIHRoYXQgbWFjcm8gZGVmaW5pdGlvbi4gSSYjMzk7bGwgbGlrZWx5IHVzZSBhIHRvb2wgb3IgbXkgSURFJiMzOTtzIHNlYXJjaCBmdW5jdGlvbiBmb3IgdGhpcy4gU2luY2UgSSBoYXZlIGV4cGVyaWVuY2UgaW4gdGhpcyBmaWVsZCwgSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY29tbW9uIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGxpa2UgYCNkZWZpbmVgIG9yIGAjdW5kZWZgIGFuZCwgb2YgY291cnNlLCB0aGUgYCNpZmRlZmAgYmxvY2sgaXRzZWxmLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250ZXh0IGRldGVybWluZXMgdGhlIGVmZmVjdGl2ZSB1c2Ugb2YgdGhhdCBibG9jay4gT25jZSBJIGxvY2F0ZSBpdCwgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpcyBhbGwgYWJvdXQuIFRoaXMgbWF5IHJlcXVpcmUgdW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZXhhbWluaW5nIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNDkwOlx0XG4yNDkxOlx0XHR0cmFjZV9tbV9jb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsIG9yZGVyLCBjb21wYWN0X3Jlc3VsdCk7XG4yNDkyOlx0XG4yNDkzOlx0XHRyZXR1cm4gc3VpdGFibGU7XG4yNDk0Olx0fVxuMjQ5NTpcdFxuMjQ5NjpcdC8qIFVzZWQgYnkgZGlyZWN0IHJlY2xhaW1lcnMgKi9cbjI0OTc6XHRib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4yNDk4Olx0XHRcdGludCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXG4yNDk5Olx0e1xuMjUwMDpcdFx0c3RydWN0IHpvbmUgKnpvbmU7XG4yNTAxOlx0XHRzdHJ1Y3Qgem9uZXJlZiAqejtcbjI1MDI6XHRcbjI1MDM6XHRcdC8qXG4yNTA0Olx0XHQgKiBNYWtlIHN1cmUgYXQgbGVhc3Qgb25lIHpvbmUgd291bGQgcGFzcyBfX2NvbXBhY3Rpb25fc3VpdGFibGUgaWYgd2UgY29udGludWVcbjI1MDU6XHRcdCAqIHJldHJ5aW5nIHRoZSByZWNsYWltLlxuMjUwNjpcdFx0ICovXG4yNTA3Olx0XHRmb3JfZWFjaF96b25lX3pvbmVsaXN0X25vZGVtYXNrKHpvbmUsIHosIGFjLVx1MDAzZXpvbmVsaXN0LFxuMjUwODpcdFx0XHRcdFx0YWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBhYy1cdTAwM2Vub2RlbWFzaykge1xuMjUwOTpcdFx0XHR1bnNpZ25lZCBsb25nIGF2YWlsYWJsZTtcbjI1MTA6XHRcbjI1MTE6XHRcdFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAoYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX0NQVVNFVCkgXHUwMDI2XHUwMDI2XG4yNTEyOlx0XHRcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcF9tYXNrKSlcbjI1MTM6XHRcdFx0XHRjb250aW51ZTtcbjI1MTQ6XHRcbjI1MTU6XHRcdFx0LypcbjI1MTY6XHRcdFx0ICogRG8gbm90IGNvbnNpZGVyIGFsbCB0aGUgcmVjbGFpbWFibGUgbWVtb3J5IGJlY2F1c2Ugd2UgZG8gbm90XG4yNTE3Olx0XHRcdCAqIHdhbnQgdG8gdHJhc2gganVzdCBmb3IgYSBzaW5nbGUgaGlnaCBvcmRlciBhbGxvY2F0aW9uIHdoaWNoXG4yNTE4Olx0XHRcdCAqIGlzIGV2ZW4gbm90IGd1YXJhbnRlZWQgdG8gYXBwZWFyIGV2ZW4gaWYgX19jb21wYWN0aW9uX3N1aXRhYmxlXG4yNTE5Olx0XHRcdCAqIGlzIGhhcHB5IGFib3V0IHRoZSB3YXRlcm1hcmsgY2hlY2suXG4yNTIwOlx0XHRcdCAqL1xuMjUyMTpcdFx0XHRhdmFpbGFibGUgPSB6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpIC8gb3JkZXI7XG4yNTIyOlx0XHRcdGF2YWlsYWJsZSAmIzQzOz0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xuMjUyMzpcdFx0XHRpZiAoX19jb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsIG9yZGVyLCBtaW5fd21hcmtfcGFnZXMoem9uZSksXG4yNTI0Olx0XHRcdFx0XHRcdCAgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBhdmFpbGFibGUpKVxuMjUyNTpcdFx0XHRcdHJldHVybiB0cnVlO1xuMjUyNjpcdFx0fVxuMjUyNzpcdFxuMjUyODpcdFx0cmV0dXJuIGZhbHNlO1xuMjUyOTpcdH1cbjI1MzA6XHRcbjI1MzE6XHQvKipcbjI1MzI6XHQgKiB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzIC0gZ2V0IGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gYWxsb2NhdGlvbiBvcmRlclxuMjUzMzpcdCAqIEB6b25lOiAgICAgICB0YXJnZXQgem9uZVxuMjUzNDpcdCAqIEBvcmRlcjogICAgICBhbGxvY2F0aW9uIG9yZGVyXG4yNTM1Olx0ICogQHVzZV9ibG9ja3M6IGlmIHRydWUsIHVzZSBOUl9GUkVFX1BBR0VTX0JMT0NLU1xuMjUzNjpcdCAqXG4yNTM3Olx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUgYmxvY2tzIHRvIGF2b2lkXG4yNTM4Olx0ICogcG9sbHV0aW5nIGFsbG9jYXRvciBmYWxsYmFja3MuIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoXG4yNTM5Olx0ICogdGhpcyBvbiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC5cbjI1NDA6XHQgKlxuMjU0MTpcdCAqIFdoZW4gbVRIUCBhbHdheXMtZW5hYmxlZCBvcmRlcnMgYXJlIGNvbmZpZ3VyZWQsIGNvdW50IG9ubHkgZnJlZSBwYWdlc1xuMjU0MjpcdCAqIGluIGJsb2NrcyBcdTAwM2U9IG1pbiBtVEhQIG9yZGVyLCBhcyBzbWFsbGVyIGZyYWdtZW50cyBjYW5ub3Qgc2F0aXNmeSBtVEhQXG4yNTQzOlx0ICogYWxsb2NhdGlvbnMuXG4yNTQ0Olx0ICovXG4yNTQ1Olx0dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxuMjU0NjpcdFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIsXG4yNTQ3Olx0XHRcdFx0XHRcdGJvb2wgdXNlX2Jsb2NrcylcbjI1NDg6XHR7XG4yNTQ5Olx0XHRpZiAodXNlX2Jsb2NrcylcbjI1NTA6XHRcdFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XG4yNTUxOlx0XG4yNTUyOlx0XHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcdTAwMjZcdTAwMjYgb3JkZXIgPT0gY29tcGFjdF9ocGFnZV9vcmRlcigpKSB7XG4yNTUzOlx0XHRcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcyA9IDA7XG4yNTU0Olx0XG4yNTU1Olx0XHRcdGZvciAoaW50IG8gPSBvcmRlcjsgbyBcdTAwM2MgTlJfUEFHRV9PUkRFUlM7IG8mIzQzOyYjNDM7KVxuMjU1NjpcdFx0XHRcdGZyZWVfcGFnZXMgJiM0Mzs9IHpvbmUtXHUwMDNlZnJlZV9hcmVhW29dLm5yX2ZyZWUgXHUwMDNjXHUwMDNjIG87XG4yNTU3Olx0XHRcdHJldHVybiBmcmVlX3BhZ2VzO1xuMjU1ODpcdFx0fVxuMjU1OTpcdFxuMjU2MDpcdFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTtcbjI1NjE6XHR9XG4yNTYyOlx0XG4yNTYzOlx0LypcbjI1NjQ6XHQgKiBTaG91bGQgd2UgZG8gY29tcGFjdGlvbiBmb3IgdGFyZ2V0IGFsbG9jYXRpb24gb3JkZXIuXG4yNTY1Olx0ICogUmV0dXJuIENPTVBBQ1RfU1VDQ0VTUyBpZiBhbGxvY2F0aW9uIGZvciB0YXJnZXQgb3JkZXIgY2FuIGJlIGFscmVhZHlcbjI1NjY6XHQgKiBzYXRpc2ZpZWRcbjI1Njc6XHQgKiBSZXR1cm4gQ09NUEFDVF9TS0lQUEVEIGlmIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBvcmRlciBpcyBsaWtlbHkgdG8gZmFpbFxuMjU2ODpcdCAqIFJldHVybiBDT01QQUNUX0NPTlRJTlVFIGlmIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBvcmRlciBzaG91bGQgYmUgcmFuXG4yNTY5Olx0ICovXG4yNTcwOlx0c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHRcbjI1NzE6XHRjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuMjU3MjpcdFx0XHRcdFx0IGludCBoaWdoZXN0X3pvbmVpZHgsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbjI1NzM6XHRcdFx0XHRcdCBib29sIGFzeW5jLCBib29sIGtjb21wYWN0ZClcbjI1NzQ6XHR7XG4yNTc1Olx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7XG4yNTc2Olx0XHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaztcbjI1Nzc6XHRcbjI1Nzg6XHRcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxuMjU3OTpcdFx0XHRcdFx0XHQgICAgICAga2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSk7XG4yNTgwOlx0XG4yNTgxOlx0XHR3YXRlcm1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcdTAwMjYgQUxMT0NfV01BUktfTUFTSyk7XG4yNTgyOlx0XHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgd2F0ZXJtYXJrLCBoaWdoZXN0X3pvbmVpZHgsXG4yNTgzOlx0XHRcdFx0XHRhbGxvY19mbGFncywgZnJlZV9wYWdlcykpXG4yNTg0Olx0XHRcdHJldHVybiBDT01QQUNUX1NVQ0NFU1M7XG4yNTg1Olx0XG4yNTg2Olx0XHQvKlxuMjU4NzpcdFx0ICogRm9yIHVubW92YWJsZSBhbGxvY2F0aW9ucyAod2l0aG91dCBBTExPQ19DTUEpLCBjaGVjayBpZiB0aGVyZSBpcyBlbm91Z2hcbjI1ODg6XHRcdCAqIGZyZWUgbWVtb3J5IGluIHRoZSBub24tQ01BIHBhZ2VibG9ja3MuIE90aGVyd2lzZSBjb21wYWN0aW9uIGNvdWxkIGZvcm1cbjI1ODk6XHRcdCAqIHRoZSBoaWdoLW9yZGVyIHBhZ2UgaW4gQ01BIHBhZ2VibG9ja3MsIHdoaWNoIHdvdWxkIG5vdCBoZWxwIHRoZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzU5MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNvbXBhY3Rpb24gQ29kZSBMb2NhdGlvbiBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIHByZXR0eSBzdXJlIHdoYXQgSSYjMzk7bSBsb29raW5nIGZvciBpcyB3aXRoaW4gYG1tL2NvbXBhY3Rpb24uY2AuIEFuZCBiYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2Ugd2l0aCB0aGUga2VybmVsLCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgdGhpcyBmaWxlIGlzIG9ubHkgcmVsZXZhbnQgaWYgYENPTkZJR19DT01QQUNUSU9OYCBpcyBkZWZpbmVkLiBUaGVyZWZvcmUsIEkgc2hvdWxkIHN0YXJ0IGJ5IGNvbmZpcm1pbmcgdGhhdCwgcGVyaGFwcyBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgYCNpZmRlZmAgYmxvY2suIExldCYjMzk7cyBnbyBhaGVhZCBhbmQgdGFrZSBhIHBlZWsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYG1tL2NvbXBhY3Rpb24uY2AgZmlsZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgdGhlcmUsIGF0IHRoZSB0b3AsIGFuZCBnZXQgYW4gb3ZlcnZpZXcgb2YgdGhlIGNvZGUgb3JnYW5pemF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogbGludXgvbW0vY29tcGFjdGlvbi5jXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBNZW1vcnkgY29tcGFjdGlvbiBmb3IgdGhlIHJlZHVjdGlvbiBvZiBleHRlcm5hbCBmcmFnbWVudGF0aW9uLiBOb3RlIHRoYXRcbiAgIDY6XHQgKiB0aGlzIGhlYXZpbHkgZGVwZW5kcyB1cG9uIHBhZ2UgbWlncmF0aW9uIHRvIGRvIGFsbCB0aGUgcmVhbCBoZWF2eVxuICAgNzpcdCAqIGxpZnRpbmdcbiAgIDg6XHQgKlxuICAgOTpcdCAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNy0yMDEwIE1lbCBHb3JtYW4gXHUwMDNjbWVsQGNzbi51bC5pZVx1MDAzZVxuICAxMDpcdCAqL1xuICAxMTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdS5oXHUwMDNlXG4gIDEyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlXG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbWlncmF0ZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGFjdGlvbi5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW1faW5saW5lLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zaWduYWwuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2JhY2tpbmctZGV2LmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjdGwuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2ZzLmhcdTAwM2VcbiAgMjA6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlLWlzb2xhdGlvbi5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2FzYW4uaFx1MDAzZVxuICAyMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2t0aHJlYWQuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZyZWV6ZXIuaFx1MDAzZVxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFx1MDAzZVxuICAyNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gIDI2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY3B1c2V0LmhcdTAwM2VcbiAgMjc6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9odWdlX21tLmhcdTAwM2VcbiAgMjg6XHQjaW5jbHVkZSBcJiMzNDtwYWdlX2FsbG9jLmhcJiMzNDtcbiAgMjk6XHQjaW5jbHVkZSBcJiMzNDtpbnRlcm5hbC5oXCYjMzQ7XG4gIDMwOlx0XG4gIDMxOlx0I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXG4gIDMyOlx0LypcbiAgMzM6XHQgKiBGcmFnbWVudGF0aW9uIHNjb3JlIGNoZWNrIGludGVydmFsIGZvciBwcm9hY3RpdmUgY29tcGFjdGlvbiBwdXJwb3Nlcy5cbiAgMzQ6XHQgKi9cbiAgMzU6XHQjZGVmaW5lIEhQQUdFX0ZSQUdfQ0hFQ0tfSU5URVJWQUxfTVNFQ1x0KDUwMClcbiAgMzY6XHRcbiAgMzc6XHRzdGF0aWMgaW5saW5lIHZvaWQgY291bnRfY29tcGFjdF9ldmVudChlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSlcbiAgMzg6XHR7XG4gIDM5Olx0XHRjb3VudF92bV9ldmVudChpdGVtKTtcbiAgNDA6XHR9XG4gIDQxOlx0XG4gIDQyOlx0c3RhdGljIGlubGluZSB2b2lkIGNvdW50X2NvbXBhY3RfZXZlbnRzKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtLCBsb25nIGRlbHRhKVxuICA0MzpcdHtcbiAgNDQ6XHRcdGNvdW50X3ZtX2V2ZW50cyhpdGVtLCBkZWx0YSk7XG4gIDQ1Olx0fVxuICA0NjpcdFxuICA0NzpcdC8qXG4gIDQ4Olx0ICogb3JkZXIgPT0gLTEgaXMgZXhwZWN0ZWQgd2hlbiBjb21wYWN0aW5nIHByb2FjdGl2ZWx5IHZpYVxuICA0OTpcdCAqIDEuIC9wcm9jL3N5cy92bS9jb21wYWN0X21lbW9yeVxuICA1MDpcdCAqIDIuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RleC9jb21wYWN0XG4gIDUxOlx0ICogMy4gL3Byb2Mvc3lzL3ZtL2NvbXBhY3Rpb25fcHJvYWN0aXZlbmVzc1xuICA1MjpcdCAqL1xuICA1MzpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKVxuICA1NDpcdHtcbiAgNTU6XHRcdHJldHVybiBvcmRlciA9PSAtMTtcbiAgNTY6XHR9XG4gIDU3Olx0XG4gIDU4Olx0I2Vsc2VcbiAgNTk6XHQjZGVmaW5lIGNvdW50X2NvbXBhY3RfZXZlbnQoaXRlbSkgZG8geyB9IHdoaWxlICgwKVxuICA2MDpcdCNkZWZpbmUgY291bnRfY29tcGFjdF9ldmVudHMoaXRlbSwgZGVsdGEpIGRvIHsgfSB3aGlsZSAoMClcbiAgNjE6XHRzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cbiAgNjI6XHQjZW5kaWZcbiAgNjM6XHRcbiAgNjQ6XHQjaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcbiAgNjU6XHRcbiAgNjY6XHQjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbiAgNjc6XHQjaW5jbHVkZSBcdTAwM2N0cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oXHUwMDNlXG4gIDY4Olx0XG4gIDY5Olx0I2RlZmluZSBibG9ja19zdGFydF9wZm4ocGZuLCBvcmRlcilcdHJvdW5kX2Rvd24ocGZuLCAxVUwgXHUwMDNjXHUwMDNjIChvcmRlcikpXG4gIDcwOlx0I2RlZmluZSBibG9ja19lbmRfcGZuKHBmbiwgb3JkZXIpXHRBTElHTigocGZuKSAmIzQzOyAxLCAxVUwgXHUwMDNjXHUwMDNjIChvcmRlcikpXG4gIDcxOlx0XG4gIDcyOlx0LypcbiAgNzM6XHQgKiBQYWdlIG9yZGVyIHdpdGgtcmVzcGVjdC10byB3aGljaCBwcm9hY3RpdmUgY29tcGFjdGlvblxuICA3NDpcdCAqIGNhbGN1bGF0ZXMgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbiwgd2hpY2ggaXMgdXNlZCBhc1xuICA3NTpcdCAqIHRoZSBcJiMzNDtmcmFnbWVudGF0aW9uIHNjb3JlXCYjMzQ7IG9mIGEgbm9kZS96b25lLlxuICA3NjpcdCAqL1xuICA3NzpcdCNpZiBkZWZpbmVkIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRVxuICA3ODpcdCNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlx0SFBBR0VfUE1EX09SREVSXG4gIDc5Olx0I2VsaWYgZGVmaW5lZCBDT05GSUdfSFVHRVRMQkZTXG4gIDgwOlx0I2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXHRIVUdFVExCX1BBR0VfT1JERVJcbiAgODE6XHQjZWxzZVxuICA4MjpcdCNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlx0KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpXG4gIDgzOlx0I2VuZGlmXG4gIDg0Olx0XG4gIDg1Olx0c3RhdGljIGlubGluZSBpbnQgY29tcGFjdF9ocGFnZV9vcmRlcih2b2lkKVxuICA4NjpcdHtcbiAgODc6XHRcdHVuc2lnbmVkIGxvbmcgb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKTtcbiAgODg6XHRcbiAgODk6XHRcdGlmIChvcmRlcnMpXG4gIDkwOlx0XHRcdHJldHVybiBfX2ZmcyhvcmRlcnMpO1xuICA5MTpcdFx0cmV0dXJuIENPTVBBQ1RJT05fSFBBR0VfT1JERVI7XG4gIDkyOlx0fVxuICA5MzpcdFxuICA5NDpcdHN0YXRpYyBzdHJ1Y3QgcGFnZSAqbWFya19hbGxvY2F0ZWRfbm9wcm9mKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGdmcF90IGdmcF9mbGFncylcbiAgOTU6XHR7XG4gIDk2Olx0XHRwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIF9fR0ZQX01PVkFCTEUsIEFMTE9DX0RFRkFVTFQpO1xuICA5NzpcdFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcbiAgOTg6XHRcdHJldHVybiBwYWdlO1xuICA5OTpcdH1cbiAxMDA6XHQjZGVmaW5lIG1hcmtfYWxsb2NhdGVkKC4uLilcdGFsbG9jX2hvb2tzKG1hcmtfYWxsb2NhdGVkX25vcHJvZihfX1ZBX0FSR1NfXykpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MjU4CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZgIGNvbmRpdGlvbmFsLiBNeSBleHBlcnQgaW50dWl0aW9uIHRlbGxzIG1lIHRoaXMgaXMgcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbiBvciBDb250aWd1b3VzIE1lbW9yeSBBbGxvY2F0b3IgKENNQSkuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBxdWlja2x5IGJ5IGRvdWJsZS1jaGVja2luZyB0aGUgY29uZGl0aW9uIG9uIGxpbmUgNjQgLSB5ZXMsIGAjaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFgIGl0IGlzLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgY29tcGxldGVseS4uLiBJIG5lZWQgdG8gZmluZCB0aGUgY2xvc2luZyBgI2VuZGlmYCB0byBmdWxseSBncmFzcCB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBjb25kaXRpb25hbCBpbmNsdXNpb24gaW4gdGhlIGNvbnRleHQgb2Ygc3lzdGVtIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNlbmRpZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9NjE9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG5tbS9jb21wYWN0aW9uLmM6NjI6I2VuZGlmXG5tbS9jb21wYWN0aW9uLmMtNjMtXG4tLVxubW0vY29tcGFjdGlvbi5jLTgyLSNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlx0KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpXG5tbS9jb21wYWN0aW9uLmM6ODM6I2VuZGlmXG5tbS9jb21wYWN0aW9uLmMtODQtXG4tLVxubW0vY29tcGFjdGlvbi5jPTI2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBza2lwX29mZmxpbmVfc2VjdGlvbnNfcmV2ZXJzZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3Bmbilcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjY1LX1cbm1tL2NvbXBhY3Rpb24uYzoyNjY6I2VuZGlmXG5tbS9jb21wYWN0aW9uLmMtMjY3LVxuLS1cbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy01MDQtfVxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cbm1tL2NvbXBhY3Rpb24uYy01MDYtXG4tLVxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxuLS1cbm1tL2NvbXBhY3Rpb24uYy0xMzg4LVxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cbm1tL2NvbXBhY3Rpb24uYy0xMzkwLSNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yMjk3PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjM4NC1cdFx0XHRyZXR1cm4gQ09NUEFDVF9TVUNDRVNTO1xubW0vY29tcGFjdGlvbi5jOjIzODU6I2VuZGlmXG5tbS9jb21wYWN0aW9uLmMtMjM4Ni1cdFx0Lypcbi0tXG5tbS9jb21wYWN0aW9uLmM9MzA5ND12b2lkIGNvbXBhY3Rpb25fdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0zMDk3LX1cbm1tL2NvbXBhY3Rpb24uYzozMDk4OiNlbmRpZiAvKiBDT05GSUdfU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR19OVU1BICovXG5tbS9jb21wYWN0aW9uLmMtMzA5OS1cbi0tXG5tbS9jb21wYWN0aW9uLmM9MzQxMD1zdWJzeXNfaW5pdGNhbGwoa2NvbXBhY3RkX2luaXQpXG5tbS9jb21wYWN0aW9uLmMtMzQxMS1cbm1tL2NvbXBhY3Rpb24uYzozNDEyOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDA5NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQ5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gYW5kIEltcGFjdCBvZiBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHByZWNvbmRpdGlvbnMuIEkgc2VlIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhdCBsaW5lIDI1NDUsIGJ1dCBpdCYjMzk7cyBuZXN0ZWQgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05gIGJsb2NrLiBMaW5lcyAxMzg5IGFuZCAzNDEyIGNsZWFybHkgZGVmaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gU28sIGBDT01QQUNUSU9OYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoYXQgQ09NUEFDVElPTiBpcyBlbmFibGVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBmdW5jdGlvbmFsaXR5LiBBbmQgaXQgc2VlbXMgdGhhdCBUcmFuc3BhcmVudCBIdWdlcGFnZXMgaXMgYWxzbyByZWxldmFudC4KCk5vdywgbGV0JiMzOTtzIGdldCB0byB0aGUgaW1wb3J0YW50IHBhcnQ6IGltcGFjdCBhbmFseXNpcy4gSSBuZWVkIHRvIGlkZW50aWZ5IHdoaWNoIHN5bWJvbHMgYXJlICpkaXJlY3RseSogbW9kaWZpZWQgb3IgKnNpZ25pZmljYW50bHkgYWZmZWN0ZWQqIGJ5IHRoaXMgcGF0Y2guCgpJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGB3YWtldXBfa3N3YXBkYCwgYHdha2V1cF9rY29tcGFjdGRgLCBhbmQgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgLgoKSSBrbm93IGB3YWtldXBfa3N3YXBkYCBpcyBjYWxsZWQgZnJvbSBgcGdkYXRfYmFsYW5jZWRgIHdoaWNoIGlzIHRoZSBmb2N1cy4gU2luY2UgYHBnZGF0X2JhbGFuY2VkYCBpcyBtb2RpZmllZCBJIGFtIHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCBmb2N1cyBzeW1ib2wuCgpTaW1pbGFybHksIEkgc2VlIHRoYXQgYHdha2V1cF9rY29tcGFjdGRgIGlzIHdha2luZyB1cCB0aGUgdGhyZWFkIGBrY29tcGFjdGRgIGFuZCBga2NvbXBhY3RkYCBpcyBtb2RpZmllZC4gQW5kIHRoZSBmdW5jdGlvbiB3YWtlcyB1cCBga2NvbXBhY3RkYCB3aGljaCBpcyBhbHNvIGEgZ29vZCBmb2N1cyBzeW1ib2wuCgpGaW5hbGx5LCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AgaXMgYSBnb29kIGZvY3VzIHN5bWJvbCwgYmVjYXVzZSBpdCBjYWxscyBgcGdkYXRfYmFsYW5jZWRgLgoKU28gbXkgZm9jdXMgaXMgb24gdGhvc2UgMyBmdW5jdGlvbnMuCgpJIG5lZWQgdG8gcmUtZXhhbWluZSBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAuIEkmIzM5O20gZG91YmxlLWNoZWNraW5nIGl0IGJlY2F1c2UgSSB0aG91Z2h0IEkgc2F3IGEgY29ubmVjdGlvbiwgYnV0IEkgZG9uJiMzOTt0IHNlZSBvbmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjQ5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjQ5MDpcdFxuMjQ5MTpcdFx0dHJhY2VfbW1fY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBvcmRlciwgY29tcGFjdF9yZXN1bHQpO1xuMjQ5MjpcdFxuMjQ5MzpcdFx0cmV0dXJuIHN1aXRhYmxlO1xuMjQ5NDpcdH1cbjI0OTU6XHRcbjI0OTY6XHQvKiBVc2VkIGJ5IGRpcmVjdCByZWNsYWltZXJzICovXG4yNDk3Olx0Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxuMjQ5ODpcdFx0XHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxuMjQ5OTpcdHtcbjI1MDA6XHRcdHN0cnVjdCB6b25lICp6b25lO1xuMjUwMTpcdFx0c3RydWN0IHpvbmVyZWYgKno7XG4yNTAyOlx0XG4yNTAzOlx0XHQvKlxuMjUwNDpcdFx0ICogTWFrZSBzdXJlIGF0IGxlYXN0IG9uZSB6b25lIHdvdWxkIHBhc3MgX19jb21wYWN0aW9uX3N1aXRhYmxlIGlmIHdlIGNvbnRpbnVlXG4yNTA1Olx0XHQgKiByZXRyeWluZyB0aGUgcmVjbGFpbS5cbjI1MDY6XHRcdCAqL1xuMjUwNzpcdFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy1cdTAwM2V6b25lbGlzdCxcbjI1MDg6XHRcdFx0XHRcdGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYWMtXHUwMDNlbm9kZW1hc2spIHtcbjI1MDk6XHRcdFx0dW5zaWduZWQgbG9uZyBhdmFpbGFibGU7XG4yNTEwOlx0XG4yNTExOlx0XHRcdGlmIChjcHVzZXRzX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgKGFsbG9jX2ZsYWdzIFx1MDAyNiBBTExPQ19DUFVTRVQpIFx1MDAyNlx1MDAyNlxuMjUxMjpcdFx0XHQgICAgIV9fY3B1c2V0X3pvbmVfYWxsb3dlZCh6b25lLCBnZnBfbWFzaykpXG4yNTEzOlx0XHRcdFx0Y29udGludWU7XG4yNTE0Olx0XG4yNTE1Olx0XHRcdC8qXG4yNTE2Olx0XHRcdCAqIERvIG5vdCBjb25zaWRlciBhbGwgdGhlIHJlY2xhaW1hYmxlIG1lbW9yeSBiZWNhdXNlIHdlIGRvIG5vdFxuMjUxNzpcdFx0XHQgKiB3YW50IHRvIHRyYXNoIGp1c3QgZm9yIGEgc2luZ2xlIGhpZ2ggb3JkZXIgYWxsb2NhdGlvbiB3aGljaFxuMjUxODpcdFx0XHQgKiBpcyBldmVuIG5vdCBndWFyYW50ZWVkIHRvIGFwcGVhciBldmVuIGlmIF9fY29tcGFjdGlvbl9zdWl0YWJsZVxuMjUxOTpcdFx0XHQgKiBpcyBoYXBweSBhYm91dCB0aGUgd2F0ZXJtYXJrIGNoZWNrLlxuMjUyMDpcdFx0XHQgKi9cbjI1MjE6XHRcdFx0YXZhaWxhYmxlID0gem9uZV9yZWNsYWltYWJsZV9wYWdlcyh6b25lKSAvIG9yZGVyO1xuMjUyMjpcdFx0XHRhdmFpbGFibGUgJiM0Mzs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKTtcbjI1MjM6XHRcdFx0aWYgKF9fY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBvcmRlciwgbWluX3dtYXJrX3BhZ2VzKHpvbmUpLFxuMjUyNDpcdFx0XHRcdFx0XHQgIGFjLVx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYXZhaWxhYmxlKSlcbjI1MjU6XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI1MjY6XHRcdH1cbjI1Mjc6XHRcbjI1Mjg6XHRcdHJldHVybiBmYWxzZTtcbjI1Mjk6XHR9XG4yNTMwOlx0XG4yNTMxOlx0LyoqXG4yNTMyOlx0ICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXJcbjI1MzM6XHQgKiBAem9uZTogICAgICAgdGFyZ2V0IHpvbmVcbjI1MzQ6XHQgKiBAb3JkZXI6ICAgICAgYWxsb2NhdGlvbiBvcmRlclxuMjUzNTpcdCAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1NcbjI1MzY6XHQgKlxuMjUzNzpcdCAqIEluIGRlZnJhZ19tb2RlLCB3YXRlcm1hcmtzIG11c3QgYmUgbWV0IGluIHdob2xlIGJsb2NrcyB0byBhdm9pZFxuMjUzODpcdCAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaFxuMjUzOTpcdCAqIHRoaXMgb24gaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuXG4yNTQwOlx0ICpcbjI1NDE6XHQgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXNcbjI1NDI6XHQgKiBpbiBibG9ja3MgXHUwMDNlPSBtaW4gbVRIUCBvcmRlciwgYXMgc21hbGxlciBmcmFnbWVudHMgY2Fubm90IHNhdGlzZnkgbVRIUFxuMjU0MzpcdCAqIGFsbG9jYXRpb25zLlxuMjU0NDpcdCAqL1xuMjU0NTpcdHVuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcbjI1NDY6XHRcdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLFxuMjU0NzpcdFx0XHRcdFx0XHRib29sIHVzZV9ibG9ja3MpXG4yNTQ4Olx0e1xuMjU0OTpcdFx0aWYgKHVzZV9ibG9ja3MpXG4yNTUwOlx0XHRcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpO1xuMjU1MTpcdFxuMjU1MjpcdFx0aWYgKFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykgXHUwMDI2XHUwMDI2IG9yZGVyID09IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSkge1xuMjU1MzpcdFx0XHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xuMjU1NDpcdFxuMjU1NTpcdFx0XHRmb3IgKGludCBvID0gb3JkZXI7IG8gXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvJiM0MzsmIzQzOylcbjI1NTY6XHRcdFx0XHRmcmVlX3BhZ2VzICYjNDM7PSB6b25lLVx1MDAzZWZyZWVfYXJlYVtvXS5ucl9mcmVlIFx1MDAzY1x1MDAzYyBvO1xuMjU1NzpcdFx0XHRyZXR1cm4gZnJlZV9wYWdlcztcbjI1NTg6XHRcdH1cbjI1NTk6XHRcbjI1NjA6XHRcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4yNTYxOlx0fVxuMjU2MjpcdFxuMjU2MzpcdC8qXG4yNTY0Olx0ICogU2hvdWxkIHdlIGRvIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBhbGxvY2F0aW9uIG9yZGVyLlxuMjU2NTpcdCAqIFJldHVybiBDT01QQUNUX1NVQ0NFU1MgaWYgYWxsb2NhdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGNhbiBiZSBhbHJlYWR5XG4yNTY2Olx0ICogc2F0aXNmaWVkXG4yNTY3Olx0ICogUmV0dXJuIENPTVBBQ1RfU0tJUFBFRCBpZiBjb21wYWN0aW9uIGZvciB0YXJnZXQgb3JkZXIgaXMgbGlrZWx5IHRvIGZhaWxcbjI1Njg6XHQgKiBSZXR1cm4gQ09NUEFDVF9DT05USU5VRSBpZiBjb21wYWN0aW9uIGZvciB0YXJnZXQgb3JkZXIgc2hvdWxkIGJlIHJhblxuMjU2OTpcdCAqL1xuMjU3MDpcdHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XG4yNTcxOlx0Y29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcbjI1NzI6XHRcdFx0XHRcdCBpbnQgaGlnaGVzdF96b25laWR4LCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXG4yNTczOlx0XHRcdFx0XHQgYm9vbCBhc3luYywgYm9vbCBrY29tcGFjdGQpXG4yNTc0Olx0e1xuMjU3NTpcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuMjU3NjpcdFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XG4yNTc3Olx0XG4yNTc4Olx0XHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcbjI1Nzk6XHRcdFx0XHRcdFx0ICAgICAgIGtjb21wYWN0ZCBcdTAwMjZcdTAwMjYgZGVmcmFnX21vZGUpO1xuMjU4MDpcdFxuMjU4MTpcdFx0d2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xuMjU4MjpcdFx0aWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LFxuMjU4MzpcdFx0XHRcdFx0YWxsb2NfZmxhZ3MsIGZyZWVfcGFnZXMpKVxuMjU4NDpcdFx0XHRyZXR1cm4gQ09NUEFDVF9TVUNDRVNTO1xuMjU4NTpcdFxuMjU4NjpcdFx0LypcbjI1ODc6XHRcdCAqIEZvciB1bm1vdmFibGUgYWxsb2NhdGlvbnMgKHdpdGhvdXQgQUxMT0NfQ01BKSwgY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoXG4yNTg4Olx0XHQgKiBmcmVlIG1lbW9yeSBpbiB0aGUgbm9uLUNNQSBwYWdlYmxvY2tzLiBPdGhlcndpc2UgY29tcGFjdGlvbiBjb3VsZCBmb3JtXG4yNTg5Olx0XHQgKiB0aGUgaGlnaC1vcmRlciBwYWdlIGluIENNQSBwYWdlYmxvY2tzLCB3aGljaCB3b3VsZCBub3QgaGVscCB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI1NTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGlnZ2luZyBpbnRvIHRoZSBDb21wYWN0aW9uIENvZGUgUGF0aCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRyYWNpbmcgdGhyb3VnaCB0aGUgbWVtb3J5IGNvbXBhY3Rpb24gY29kZSwgYW5kIGl0JiMzOTtzIHF1aWNrbHkgYXBwYXJlbnQgdGhhdCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgKmRvZXNuJiMzOTt0KiBkaXJlY3RseSBsZXZlcmFnZSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AuIFRoYXQmIzM5O3MgYSBiaXQgc3VycHJpc2luZy4gSSYjMzk7ZCBhc3N1bWVkIHRoZXJlIHdhcyBhIGRpcmVjdCBsaW5rIHRoZXJlLCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBhIHpvbmVsaXN0IGlzIGV2ZW4gKnBvdGVudGlhbGx5KiB2aWFibGUgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuCgpOb3cgaG9sZCBvbi4uLiBJIGtub3cgSSYjMzk7dmUgc2VlbiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgYmVpbmcgY2FsbGVkIGR1cmluZyBjb21wYWN0aW9uIHN1aXRhYmlsaXR5IGNoZWNrcyAqc29tZXdoZXJlKi4gQWgsIGhlcmUgd2UgZ28sIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgZG9lcyBjYWxsIGl0LiBUaGF0IG1ha2VzIG1vcmUgc2Vuc2UsIHJpZ2h0PyBJdCBzb3VuZHMgbGlrZSBgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXJgIHdvdWxkIGZpbHRlciBhIGxpc3Qgb2YgY2FuZGlkYXRlIHpvbmVzLgoKQnV0IG5vdyBJIG5lZWQgdG8gZ28gb25lIGxheWVyIGRlZXBlcjsgKndobyogY2FsbHMgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoLiBLbm93aW5nIHdobyYjMzk7cyBjYWxsaW5nIGl0IGlzIGNydWNpYWwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBvZiBjb250cm9sIGFuZCBkZXRlcm1pbmUgdGhlIGNvbXBsZXRlIGxvZ2ljIGluIHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2NvbXBhY3Rpb24uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmM9MjU3MD1zdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdFxubW0vY29tcGFjdGlvbi5jOjI1NzE6Y29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yNTcyLVx0XHRcdFx0IGludCBoaWdoZXN0X3pvbmVpZHgsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcbi0tXG5tbS9jb21wYWN0aW9uLmM9MjYxMD1jb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG4tLVxubW0vY29tcGFjdGlvbi5jLTI2MzUtXHRpZiAoIWlzX3ZpYV9jb21wYWN0X21lbW9yeShjYy1cdTAwM2VvcmRlcikpIHtcbm1tL2NvbXBhY3Rpb24uYzoyNjM2Olx0XHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihjYy1cdTAwM2V6b25lLCBjYy1cdTAwM2VvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yNjM3LVx0XHRcdFx0XHRcdCAgICAgICBjYy1cdTAwM2VoaWdoZXN0X3pvbmVpZHgsXG4tLVxubW0vY29tcGFjdGlvbi5jPTMxMDY9c3RhdGljIGJvb2wga2NvbXBhY3RkX25vZGVfc3VpdGFibGUocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzEyMC1cbm1tL2NvbXBhY3Rpb24uYzozMTIxOlx0XHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcih6b25lLFxubW0vY29tcGFjdGlvbi5jLTMxMjItXHRcdFx0XHRwZ2RhdC1cdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyLFxuLS1cbm1tL2NvbXBhY3Rpb24uYz0zMTMyPXN0YXRpYyB2b2lkIGtjb21wYWN0ZF9kb193b3JrKHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vY29tcGFjdGlvbi5jLTMxNjQtXG5tbS9jb21wYWN0aW9uLmM6MzE2NTpcdFx0cmV0ID0gY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoem9uZSxcbm1tL2NvbXBhY3Rpb24uYy0zMTY2LVx0XHRcdFx0Y2Mub3JkZXIsIHpvbmVpZCwgY2MuYWxsb2NfZmxhZ3MsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzEzCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgdGhlIGBjb21wYWN0X3pvbmVgIEZ1bmN0aW9uIENhbGwqKgoKT2theSwgc28gdGhlIGNvZGUmIzM5O3MgdXNpbmcgYGNvbXBhY3Rfem9uZWAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBtZWFuLCBgY29tcGFjdF96b25lYCAqZG9lcyogd2hhdCwgZXhhY3RseT8gSXMgdGhpcyBzb21lIHNvcnQgb2YgbWVtb3J5IG9wdGltaXphdGlvbiwgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uLCBvciBtYXliZSBhIFVJIGxheW91dCByb3V0aW5lPyAgVGhlIG5hbWUgaXRzZWxmIGlzIHN1Z2dlc3RpdmUsIGJ1dCB3aXRob3V0IGtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0JiMzOTtzIGp1c3QgYSBsYWJlbC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHBvc3NpYmxlIHNjZW5hcmlvcyBiYXNlZCBvbiB0aGUgdHlwaWNhbCBhcHBsaWNhdGlvbnMgb2YgJiMzNDtjb21wYWN0aW5nJiMzNDsgb3IgJiMzNDt6b25pbmcmIzM0OyBkYXRhLgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGlzOiAqd2hvKiBpcyBjYWxsaW5nIGBjb21wYWN0X3pvbmVgPyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsZXIgaXMga2V5LiBJcyBpdCBhIGxvdy1sZXZlbCBtZW1vcnkgbWFuYWdlcj8gQSBoaWdoLWxldmVsIGRhdGEgcHJvY2Vzc2luZyBmdW5jdGlvbj8gQSBVSSBjb21wb25lbnQgcmVmcmVzaGluZyByb3V0aW5lPyAgS25vd2luZyB0aGUgY2FsbGVyIHdpbGwgcHJvdmlkZSBhIGh1Z2UgYW1vdW50IG9mIGluZm9ybWF0aW9uIGFib3V0IHRoZSByb2xlIGFuZCBwdXJwb3NlIG9mIGBjb21wYWN0X3pvbmVgLiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgY2FsbCBhbmQgZGV0ZXJtaW5lIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHdvcmtmbG93LiAgVGhhdCB3aWxsIHF1aWNrbHkgdGVsbCBtZSBpZiB0aGlzIGlzIGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgc2VjdGlvbiwgb3Igc29tZXRoaW5nIGxlc3MgdXJnZW50LiBXaXRob3V0IHRoYXQgY29udGV4dCwgSSYjMzk7bSBqdXN0IGd1ZXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb21wYWN0X3pvbmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9jb21wYWN0aW9uLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vY29tcGFjdGlvbi5jPTIxMDc9c3RhdGljIGlzb2xhdGVfbWlncmF0ZV90IGlzb2xhdGVfbWlncmF0ZXBhZ2VzKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjKVxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMTE5LVx0ICogU3RhcnQgYXQgd2hlcmUgd2UgbGFzdCBzdG9wcGVkLCBvciBiZWdpbm5pbmcgb2YgdGhlIHpvbmUgYXNcbm1tL2NvbXBhY3Rpb24uYzoyMTIwOlx0ICogaW5pdGlhbGl6ZWQgYnkgY29tcGFjdF96b25lKCkuIFRoZSBmaXJzdCBmYWlsdXJlIHdpbGwgdXNlXG5tbS9jb21wYWN0aW9uLmMtMjEyMS1cdCAqIHRoZSBsb3dlc3QgUEZOIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbGluZWFyIHNjYW5uaW5nLlxuLS1cbm1tL2NvbXBhY3Rpb24uYy0yMTk4LVx0XHQgKiBFaXRoZXIgd2UgaXNvbGF0ZWQgc29tZXRoaW5nIGFuZCBwcm9jZWVkIHdpdGggbWlncmF0aW9uLiBPclxubW0vY29tcGFjdGlvbi5jOjIxOTk6XHRcdCAqIHdlIGZhaWxlZCBhbmQgY29tcGFjdF96b25lIHNob3VsZCBkZWNpZGUgaWYgd2Ugc2hvdWxkXG5tbS9jb21wYWN0aW9uLmMtMjIwMC1cdFx0ICogY29udGludWUgb3Igbm90LlxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yNjA5PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XG5tbS9jb21wYWN0aW9uLmM6MjYxMDpjb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXG5tbS9jb21wYWN0aW9uLmMtMjYxMS17XG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NDctXG5tbS9jb21wYWN0aW9uLmM6Mjg0ODpzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBjb21wYWN0X3pvbmVfb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yODQ5LVx0XHRnZnBfdCBnZnBfbWFzaywgZW51bSBjb21wYWN0X3ByaW9yaXR5IHByaW8sXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NjctXG5tbS9jb21wYWN0aW9uLmM6Mjg2ODpcdHJldHVybiBjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIGNhcGMpO1xubW0vY29tcGFjdGlvbi5jLTI4NjktfVxuLS1cbm1tL2NvbXBhY3Rpb24uYz0yODgyPWVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjkxMi1cbm1tL2NvbXBhY3Rpb24uYzoyOTEzOlx0XHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxubW0vY29tcGFjdGlvbi5jLTI5MTQtXHRcdFx0XHRhbGxvY19mbGFncywgYWMtXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcbi0tXG5tbS9jb21wYWN0aW9uLmM9Mjk3MD1zdGF0aWMgaW50IGNvbXBhY3Rfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBib29sIHByb2FjdGl2ZSlcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjk5Mi1cbm1tL2NvbXBhY3Rpb24uYzoyOTkzOlx0XHRjb21wYWN0X3pvbmUoXHUwMDI2Y2MsIE5VTEwpO1xubW0vY29tcGFjdGlvbi5jLTI5OTQtXG4tLVxubW0vY29tcGFjdGlvbi5jPTMxMzI9c3RhdGljIHZvaWQga2NvbXBhY3RkX2RvX3dvcmsocGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS9jb21wYWN0aW9uLmMtMzE3NC1cdFx0Y2Muem9uZSA9IHpvbmU7XG5tbS9jb21wYWN0aW9uLmM6MzE3NTpcdFx0c3RhdHVzID0gY29tcGFjdF96b25lKFx1MDAyNmNjLCBOVUxMKTtcbm1tL2NvbXBhY3Rpb24uYy0zMTc2LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDI5MwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0IGluIG15IGZpZWxkLgoKKipEZWNvbnN0cnVjdGluZyB0aGUgUGFnZSBDb21wYWN0aW9uIFByb2Nlc3MqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBjYWxsaW5nIGBjb21wYWN0X3pvbmVfb3JkZXJgLCB3aGljaCBpbiB0dXJuLCBJIHByZXN1bWUsIHV0aWxpemVzIGBjb21wYWN0X3pvbmVgLiBUaGlzIGlzIHRoZSB0eXBpY2FsIHN0cnVjdHVyZSBJJiMzOTtkIGV4cGVjdCBmb3IgcGFnZSBjb21wYWN0aW9uIOKAkyBhIHRvcC1sZXZlbCBmdW5jdGlvbiBvcmNoZXN0cmF0aW5nIHRoZSBwcm9jZXNzLCBhIG1pZGRsZSBsYXllciBwb3RlbnRpYWxseSBoYW5kbGluZyBzb21lIG9yZGVyaW5nIG9yIHpvbmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVuIHRoZSBhY3R1YWwgem9uZSBjb21wYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgYGNvbXBhY3Rfem9uZWAgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyBub24tc3RhdGljIGFuZCBleHBvcnRlZCBpcyBzaWduaWZpY2FudDsgaXQgc3VnZ2VzdHMgdGhpcyBpcyBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb24sIG1lYW5pbmcgb3RoZXIgY29tcG9uZW50cyBvciBtb2R1bGVzIGFyZSBsaWtlbHkgcmVseWluZyBvbiBpdCB0byBpbml0aWF0ZSBjb21wYWN0aW9uLiBHaXZlbiB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgaXQmIzM5O3Mgd29ydGggZGlnZ2luZyBpbnRvIHRoYXQgZmlyc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyAqaXQqIHdvcmtzLCBhbmQgZmlndXJlIG91dCB0aGUgY2hhaW4gb2YgZGVwZW5kZW5jaWVzLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYXNzdW1wdGlvbnMgSSBtYWRlIGFib3V0IGhvdyB0aGUgbG93ZXItbGV2ZWwgZnVuY3Rpb25zIHJlbGF0ZSB0byB0aGUgcHJvY2VzcyBvZiBwYWdlIGNvbXBhY3Rpb24gaW4gZ2VuZXJhbC4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dHJ5X3RvX2NvbXBhY3RfcGFnZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTE9ZW51bSBjb21wYWN0X3ByaW9yaXR5IHtcbi0tXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0yMC1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjIxOi8qIFJldHVybiB2YWx1ZXMgZm9yIGNvbXBhY3Rfem9uZSgpIGFuZCB0cnlfdG9fY29tcGFjdF9wYWdlcygpICovXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0yMi0vKiBXaGVuIGFkZGluZyBuZXcgc3RhdGVzLCBwbGVhc2UgYWRqdXN0IGluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaCAqL1xuLS1cbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTkyPWV4dGVybiBpbnQgZnJhZ21lbnRhdGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjkzOmV4dGVybiBlbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtOTQtXHRcdHVuc2lnbmVkIGludCBvcmRlciwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaD0xMzE9VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl9lbmQsXG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTE2NC1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaDoxNjU6VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl90cnlfdG9fY29tcGFjdF9wYWdlcyxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0xNjYtXG4tLVxubW0vY29tcGFjdGlvbi5jPTI4NDg9c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXG4tLVxubW0vY29tcGFjdGlvbi5jLTI4NzEtLyoqXG5tbS9jb21wYWN0aW9uLmM6Mjg3MjogKiB0cnlfdG9fY29tcGFjdF9wYWdlcyAtIERpcmVjdCBjb21wYWN0IHRvIHNhdGlzZnkgYSBoaWdoLW9yZGVyIGFsbG9jYXRpb25cbm1tL2NvbXBhY3Rpb24uYy0yODczLSAqIEBnZnBfbWFzazogVGhlIEdGUCBtYXNrIG9mIHRoZSBjdXJyZW50IGFsbG9jYXRpb25cbi0tXG5tbS9jb21wYWN0aW9uLmMtMjg4MS0gKi9cbm1tL2NvbXBhY3Rpb24uYzoyODgyOmVudW0gY29tcGFjdF9yZXN1bHQgdHJ5X3RvX2NvbXBhY3RfcGFnZXMoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcbm1tL2NvbXBhY3Rpb24uYy0yODgzLVx0XHR1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGNvbnN0IHN0cnVjdCBhbGxvY19jb250ZXh0ICphYyxcbi0tXG5tbS9jb21wYWN0aW9uLmMtMjg5Mi1cbm1tL2NvbXBhY3Rpb24uYzoyODkzOlx0dHJhY2VfbW1fY29tcGFjdGlvbl90cnlfdG9fY29tcGFjdF9wYWdlcyhvcmRlciwgZ2ZwX21hc2ssIHByaW8pO1xubW0vY29tcGFjdGlvbi5jLTI4OTQtXG4tLVxubW0vcGFnZV9hbGxvYy5jPTQxMzk9X19hbGxvY19wYWdlc19kaXJlY3RfY29tcGFjdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy00MTg0LVxubW0vcGFnZV9hbGxvYy5jOjQxODU6XHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcbm1tL3BhZ2VfYWxsb2MuYy00MTg2LVx0XHRcdFx0XHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcdTAwMjZjYXBjKTtcbi0tXG5tbS92bXNjYW4uYz02MDg2PXN0YXRpYyBib29sIGluX3JlY2xhaW1fY29tcGFjdGlvbihzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MDk5LSAqIHRydWUgaWYgbW9yZSBwYWdlcyBzaG91bGQgYmUgcmVjbGFpbWVkIHN1Y2ggdGhhdCB3aGVuIHRoZSBwYWdlIGFsbG9jYXRvclxubW0vdm1zY2FuLmM6NjEwMDogKiBjYWxscyB0cnlfdG9fY29tcGFjdF9wYWdlcygpIHRoYXQgaXQgd2lsbCBoYXZlIGVub3VnaCBmcmVlIHBhZ2VzIHRvIHN1Y2NlZWQuXG5tbS92bXNjYW4uYy02MTAxLSAqIEl0IHdpbGwgZ2l2ZSB1cCBlYXJsaWVyIHRoYW4gdGhhdCBpZiB0aGVyZSBpcyBkaWZmaWN1bHR5IHJlY2xhaW1pbmcgcGFnZXMuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDEyCgkJCQkJCQlvdXRwdXQ6IDIwMAoJCQkJCQkJdGhvdWdodHM6IDEwNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTY29wZSBmb3IgRnV6emluZyB0aGlzIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJiMzOTttIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgb3IgJiMzNDtmb2N1cyBzeW1ib2xzJiMzNDsgd2l0aGluIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbiwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHN1cHBvcnRpbmcgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBzdGFuZHMgb3V0IGltbWVkaWF0ZWx5OyBpdCYjMzk7cyBub24tc3RhdGljLCBtYWtpbmcgaXQgYSB2aWFibGUgdGFyZ2V0IGZvciBmdXp6aW5nLCBhbmQgaXQmIzM5O3MgdGhlIGNvcmUgZW50cnkgcG9pbnQgZm9yIGRpcmVjdCBjb21wYWN0aW9uLiBIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgaG93IGdlbmVyaWMgaXQgaXMuCgpUaGUgb3RoZXIgcHJpbWFyeSB0YXJnZXRzIGFyZTogYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGB3YWtldXBfa3N3YXBkYCwgYHdha2V1cF9rY29tcGFjdGRgLCBhbmQgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgLgoKSSBhbSB0cnlpbmcgdG8gY29uZmlybSwgYW5kIGNvbmZpcm0gYWdhaW4sIHRoYXQgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyBub3QgYSB2ZXJ5IGhvdC1wYXRoIG9yIGdlbmVyaWMgZnVuY3Rpb24sIGxpa2UgYGttYWxsb2NgIG9yIGBwYWdlX2FsbG9jYCwgYnV0IHNwZWNpZmljYWxseSB1c2VkIGluIGNvbXBhY3Rpb24uIEl0IGlzLCBzbyB0aGF0JiMzOTtzIGdvb2QuCgpOZXh0LCBJJiMzOTttIHJldmlld2luZyB0aGUgcmVxdWlyZWQga2VybmVsIGNvbmZpZ3MuIEl0IGFwcGVhcnMgdGhpcyBwYXRjaCByZWxpZXMgb24gYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJJiMzOTttIGNvbmZpcm1pbmcgdGhhdCBgQ09NUEFDVElPTmAgZGVwZW5kcyBvbiBgTU1VYCwgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgZGVwZW5kcyBvbiBgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBhbmQgYE1NVWAuIFRoaXMgbWFrZXMgc2Vuc2UgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IGJlaW5nIG1vZGlmaWVkLgoKSSBhbSBxdWlja2x5IHZlcmlmeWluZyB0aGUgc291cmNlIGZpbGVzIGZvciB0aGUgZm9jdXMgc3ltYm9scyB0byBtYWtlIHN1cmUgdGhleSBhcmUgY29tcGlsZWQuIFRoaXMgY29uZmlybXMgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uLiBTcGVjaWZpY2FsbHk6CgotIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AKLSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AKLSBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAKLSBgd2FrZXVwX2tzd2FwZGAKLSBgd2FrZXVwX2tjb21wYWN0ZGAKLSBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AKClRoZXkgYXJlIGFsbCBpbiBgbW0vY29tcGFjdGlvbi5jYCBvciBgbW0vdm1zY2FuLmNgLgoKSSYjMzk7bSB2ZXJpZnlpbmcgdGhhdCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgbm90IGV4cG9ydGVkIChpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgZnV6emluZyBjYXBhYmlsaXRpZXMpLCBidXQgaXQgaXMgKm5vdCogc3RhdGljLCBzbyB0aGUgZnV6emVyIGNhbiB0cmFjZSBpdC4KCkkgdGhlbiBjaGVjayB0byBzZWUgaG93IGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMgdXNlZCwgYXMgaXQgc2VlbXMgcmVsZXZhbnQuIEl0JiMzOTtzIHVzZWQgd2l0aGluIGBjb21wYWN0X2hwYWdlX29yZGVyKClgIHdoaWNoIGlzIHVzZWQgaW4gc2V2ZXJhbCBpbXBvcnRhbnQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gY29tcGFjdGlvbiwgc3VpdGFiaWxpdHksIGFuZCBzY29yaW5nLiBUaGF0IG1ha2VzIHRoaXMgdmVyeSByZWxldmFudC4gVGhpcyBjb25maXJtcyB0aGF0IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyBjb21wYWN0aW9uIGxvZ2ljIHRvIGhhbmRsZSBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uIGJ5IHVzaW5nIGBjb21wYWN0X2hwYWdlX29yZGVyKClgIGluc3RlYWQgb2YgYENPTVBBQ1RJT05fSFBBR0VfT1JERVJgLgoKVGhlIGNvcmUgcmVhc29uaW5nIGZvciB0aGlzIHBhdGNoIGlzIHRoYXQgaXQgbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBsb2dpYyB0byBzdXBwb3J0IG11bHRpLXNpemUgVEhQcy4gSXQgaW5jbHVkZXMgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCB1cGRhdGVzIGNvbXBhY3Rpb24gY2hlY2tzLCBhbmQgbW9kaWZpZXMgYGtjb21wYWN0ZGAgYW5kIGBrc3dhcGRgIGJlaGF2aW9yLiBUaGVzZSBhcmUgZnVuZGFtZW50YWwgY2hhbmdlcyB0byBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IHdpbGwgYmUgdGVzdGVkIHdoZW4gdmlydHVhbGl6ZWQuCgpJbiBzdW1tYXJ5LCB0aGUga2V5IGNvbXBvbmVudHMgSSYjMzk7bSBmb2N1c2luZyBvbiBmb3IgZnV6emluZyBhcmU6CgoqICAgQ29uZmlnczogYENPTVBBQ1RJT05gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgCiogICBGb2N1cyBzeW1ib2xzOgogICAgKiAgIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgKHByaW1hcnkgZW50cnkgcG9pbnQpCiAgICAqICAgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIChzcGVjaWZpYyB0byB0aGUgcGF0Y2gpCiAgICAqICAgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIChyZWxhdGVkIHRvIHBhdGNoKQogICAgKiAgIGB3YWtldXBfa3N3YXBkYAogICAgKiAgIGB3YWtldXBfa2NvbXBhY3RkYAogICAgKiAgIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYAoKSSBhbSByZS1ldmFsdWF0aW5nIHRoYXQgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCB0byBjb25maXJtIGl0IGlzIHNwZWNpZmljIGVub3VnaCB0byBjb21wYWN0aW9uLiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgYW5kIGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCBhcmUgYmV0dGVyLiBOb3cgSSB3aWxsIHNldCB0aGUgcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTVBBQ1RJT04mIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0cnlfdG9fY29tcGFjdF9wYWdlcyYjMzQ7LAogICAgJiMzNDt6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2NvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUmIzM0OywKICAgICYjMzQ7d2FrZXVwX2tzd2FwZCYjMzQ7LAogICAgJiMzNDt3YWtldXBfa2NvbXBhY3RkJiMzNDssCiAgICAmIzM0O2tzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBsb2dpYyB0byBzdXBwb3J0IG11bHRpLXNpemUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAobVRIUCkuIEl0IGludHJvZHVjZXMgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIHRvIGNhbGN1bGF0ZSBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIHRoZSBhbGxvY2F0aW9uIG9yZGVyIGFuZCB1cGRhdGVzIGNvbXBhY3Rpb24gc3VpdGFiaWxpdHkgY2hlY2tzLCBmcmFnbWVudGF0aW9uIHNjb3JpbmcsIGFuZCBrY29tcGFjdGQva3N3YXBkIGJlaGF2aW9yIHRvIHVzZSB0aGUgbmV3IGBjb21wYWN0X2hwYWdlX29yZGVyKClgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09NUEFDVElPTiYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RyeV90b19jb21wYWN0X3BhZ2VzJiMzNDssCiAgICAmIzM0O3pvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMmIzM0OywKICAgICYjMzQ7Y29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZSYjMzQ7LAogICAgJiMzNDt3YWtldXBfa3N3YXBkJiMzNDssCiAgICAmIzM0O3dha2V1cF9rY29tcGFjdGQmIzM0OywKICAgICYjMzQ7a3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNSAwNTowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI1IDA1OjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gaGV1cmlzdGljcywgc3VjaCBhcyBmcmFnbWVudGF0aW9uIHNjb3JpbmcgYW5kIGVmZmVjdGl2ZSBmcmVlIHBhZ2VzIGNhbGN1bGF0aW9uIGZvciBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMgaW4gd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucyBvciB0aGUgYGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcmAgYml0d2lzZSBvcGVyYXRpb24pIHdvdWxkIHJlc3VsdCBpbiBwZXJmb3JtYW5jZSBpc3N1ZXMsIE9PTXMsIG9yIGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWcgdG9vbHMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIHRoYXQgcmVxdWlyZXMgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDJiZjkxNmRkNGJhMDZiZjVhYzc2OGQ3YjA0M2JjNWNjNGQ0ZjllNTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAyNSAwNTowNTowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2NvbXBhY3Rpb24uYyBiL21tL2NvbXBhY3Rpb24uYwppbmRleCBhMDQ5NDE1NTEyYzY3Li4yOWJlNzI1OTc0MTU2IDEwMDY0NAotLS0gYS9tbS9jb21wYWN0aW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vY29tcGFjdGlvbi5jCkBAIC0yNCw2ICYjNDM7MjQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2Vfb3duZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wc2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcHVzZXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaHVnZV9tbS5oJmd0OwogI2luY2x1ZGUgJiMzNDtwYWdlX2FsbG9jLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKIApAQCAtODEsNiAmIzQzOzgyLDE1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfQogI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSCShQTURfU0hJRlQgLSBQQUdFX1NISUZUKQogI2VuZGlmCiAKJiM0MztzdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7CiYjNDM7CiYjNDM7CWlmIChvcmRlcnMpCiYjNDM7CQlyZXR1cm4gX19mZnMob3JkZXJzKTsKJiM0MzsJcmV0dXJuIENPTVBBQ1RJT05fSFBBR0VfT1JERVI7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7CkBAIC04MjcsNiAmIzQzOzgzNywxMiBAQCBzdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpCiAJICovCiAJaWYgKCFpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSAmYW1wOyZhbXA7IG9yZGVyICZndDs9IHRhcmdldF9vcmRlcikKIAkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CS8qIFdlIGFyZSBjb21wYWN0aW5nIGZvciBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uICovCiYjNDM7CWlmIChpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSAmYW1wOyZhbXA7IG9yZGVyICZndDs9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiAJLyoKIAkgKiBXZSBsaW1pdCBtZW1vcnkgY29tcGFjdGlvbiB0byBwYWdlYmxvY2tzIGFuZCB3b24mIzM5O3QgdHJ5CiAJICogY3JlYXRpbmcgZnJlZSBibG9ja3Mgb2YgbWVtb3J5IHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoYXQuCkBAIC0yMjA4LDE2ICYjNDM7MjIyNCwxNiBAQCBzdGF0aWMgYm9vbCBrc3dhcGRfaXNfcnVubmluZyhwZ19kYXRhX3QgKnBnZGF0KQogCiAvKgogICogQSB6b25lJiMzOTtzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb24gd3J0IHRvIHRoZQotICogQ09NUEFDVElPTl9IUEFHRV9PUkRFUi4gSXQgcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS4KJiM0MzsgKiBjb21wYWN0X2hwYWdlX29yZGVyKCkuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHN0cnVjdCB6b25lICp6b25lKQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7Ci0JcmV0dXJuIGV4dGZyYWdfZm9yX29yZGVyKHpvbmUsIENPTVBBQ1RJT05fSFBBR0VfT1JERVIpOwomIzQzOwlyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgb3JkZXIpOwogfQogCiAvKgogICogQSB3ZWlnaHRlZCB6b25lJiMzOTtzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb24KLSAqIHdydCB0byB0aGUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUiBzY2FsZWQgYnkgdGhlIHpvbmUmIzM5O3Mgc2l6ZS4gSXQKJiM0MzsgKiB3cnQgdG8gdGhlIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBzY2FsZWQgYnkgdGhlIHpvbmUmIzM5O3Mgc2l6ZS4gSXQKICAqIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uCiAgKgogICogVGhlIHNjYWxpbmcgZmFjdG9yIGVuc3VyZXMgdGhhdCBwcm9hY3RpdmUgY29tcGFjdGlvbiBmb2N1c2VzIG9uIGxhcmdlcgpAQCAtMjIyNSwxMSAmIzQzOzIyNDEsMTEgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpCiAgKiBaT05FX0RNQTMyLiBGb3Igc21hbGxlciB6b25lcywgdGhlIHNjb3JlIHZhbHVlIHJlbWFpbnMgY2xvc2UgdG8gemVybywKICAqIGFuZCB0aHVzIG5ldmVyIGV4Y2VlZHMgdGhlIGhpZ2ggdGhyZXNob2xkIGZvciBwcm9hY3RpdmUgY29tcGFjdGlvbi4KICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcikKIHsKIAl1bnNpZ25lZCBsb25nIHNjb3JlOwogCi0Jc2NvcmUgPSB6b25lLSZndDtwcmVzZW50X3BhZ2VzICogZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKHpvbmUpOwomIzQzOwlzY29yZSA9IHpvbmUtJmd0O3ByZXNlbnRfcGFnZXMgKiBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoem9uZSwgb3JkZXIpOwogCXJldHVybiBkaXY2NF91bChzY29yZSwgem9uZS0mZ3Q7em9uZV9wZ2RhdC0mZ3Q7bm9kZV9wcmVzZW50X3BhZ2VzICYjNDM7IDEpOwogfQogCkBAIC0yMjQwLDcgJiM0MzsyMjU2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpCiAgKiB0aGUgbm9kZSYjMzk7cyBzY29yZSBmYWxscyBiZWxvdyB0aGUgbG93IHRocmVzaG9sZCwgb3Igb25lIG9mIHRoZSBiYWNrLW9mZgogICogY29uZGl0aW9ucyBpcyBtZXQuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKQogewogCXVuc2lnbmVkIGludCBzY29yZSA9IDA7CiAJaW50IHpvbmVpZDsKQEAgLTIyNTEsNyAmIzQzOzIyNjcsNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ19kYXRhX3QgKnBnZGF0KQogCQl6b25lID0gJmFtcDtwZ2RhdC0mZ3Q7bm9kZV96b25lc1t6b25laWRdOwogCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQogCQkJY29udGludWU7Ci0JCXNjb3JlICYjNDM7PSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoem9uZSk7CiYjNDM7CQlzY29yZSAmIzQzOz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUsIG9yZGVyKTsKIAl9CiAKIAlyZXR1cm4gc2NvcmU7CkBAIC0yMjY5LDEyICYjNDM7MjI4NSwxMyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoYm9vbCBsb3cpCiBzdGF0aWMgYm9vbCBzaG91bGRfcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZShwZ19kYXRhX3QgKnBnZGF0KQogewogCWludCB3bWFya19oaWdoOwomIzQzOwl1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wYWN0X2hwYWdlX29yZGVyKCk7CiAKIAlpZiAoIXN5c2N0bF9jb21wYWN0aW9uX3Byb2FjdGl2ZW5lc3MgfHwga3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKQogCQlyZXR1cm4gZmFsc2U7CiAKIAl3bWFya19oaWdoID0gZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayhmYWxzZSk7Ci0JcmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCkgJmd0OyB3bWFya19oaWdoOwomIzQzOwlyZXR1cm4gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcikgJmd0OyB3bWFya19oaWdoOwogfQogCiBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBfX2NvbXBhY3RfZmluaXNoZWQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCkBAIC0yMzA2LDEyICYjNDM7MjMyMywxMyBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBfX2NvbXBhY3RfZmluaXNoZWQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpCiAJaWYgKGNjLSZndDtwcm9hY3RpdmVfY29tcGFjdGlvbikgewogCQlpbnQgc2NvcmUsIHdtYXJrX2xvdzsKIAkJcGdfZGF0YV90ICpwZ2RhdDsKJiM0MzsJCWJvb2wgY29zdGx5ID0gY29tcGFjdF9ocGFnZV9vcmRlcigpICZndDsgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7CiAKIAkJcGdkYXQgPSBjYy0mZ3Q7em9uZS0mZ3Q7em9uZV9wZ2RhdDsKLQkJaWYgKGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSkKJiM0MzsJCWlmIChjb3N0bHkgJmFtcDsmYW1wOyBrc3dhcGRfaXNfcnVubmluZyhwZ2RhdCkpCiAJCQlyZXR1cm4gQ09NUEFDVF9QQVJUSUFMX1NLSVBQRUQ7CiAKLQkJc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtJmd0O3pvbmUpOwomIzQzOwkJc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtJmd0O3pvbmUsIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSk7CiAJCXdtYXJrX2xvdyA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsodHJ1ZSk7CiAKIAkJaWYgKHNjb3JlICZndDsgd21hcmtfbG93KQpAQCAtMjUxMCw2ICYjNDM7MjUyOCwzOCBAQCBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsCiAJcmV0dXJuIGZhbHNlOwogfQogCiYjNDM7LyoqCiYjNDM7ICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXIKJiM0MzsgKiBAem9uZTogICAgICAgdGFyZ2V0IHpvbmUKJiM0MzsgKiBAb3JkZXI6ICAgICAgYWxsb2NhdGlvbiBvcmRlcgomIzQzOyAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1MKJiM0MzsgKgomIzQzOyAqIEluIGRlZnJhZ19tb2RlLCB3YXRlcm1hcmtzIG11c3QgYmUgbWV0IGluIHdob2xlIGJsb2NrcyB0byBhdm9pZAomIzQzOyAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaAomIzQzOyAqIHRoaXMgb24gaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuCiYjNDM7ICoKJiM0MzsgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXMKJiM0MzsgKiBpbiBibG9ja3MgJmd0Oz0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFAKJiM0MzsgKiBhbGxvY2F0aW9ucy4KJiM0MzsgKi8KJiM0Mzt1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsCiYjNDM7CQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIsCiYjNDM7CQkJCQlib29sIHVzZV9ibG9ja3MpCiYjNDM7ewomIzQzOwlpZiAodXNlX2Jsb2NrcykKJiM0MzsJCXJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpOwomIzQzOwomIzQzOwlpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSAmYW1wOyZhbXA7IG9yZGVyID09IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDsKJiM0MzsKJiM0MzsJCWZvciAoaW50IG8gPSBvcmRlcjsgbyAmbHQ7IE5SX1BBR0VfT1JERVJTOyBvJiM0MzsmIzQzOykKJiM0MzsJCQlmcmVlX3BhZ2VzICYjNDM7PSB6b25lLSZndDtmcmVlX2FyZWFbb10ubnJfZnJlZSAmbHQ7Jmx0OyBvOwomIzQzOwkJcmV0dXJuIGZyZWVfcGFnZXM7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKJiM0Mzt9CiYjNDM7CiAvKgogICogU2hvdWxkIHdlIGRvIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBhbGxvY2F0aW9uIG9yZGVyLgogICogUmV0dXJuIENPTVBBQ1RfU1VDQ0VTUyBpZiBhbGxvY2F0aW9uIGZvciB0YXJnZXQgb3JkZXIgY2FuIGJlIGFscmVhZHkKQEAgLTI1MjUsMTAgJiM0MzsyNTc1LDggQEAgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlciwKIAl1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7CiAJdW5zaWduZWQgbG9uZyB3YXRlcm1hcms7CiAKLQlpZiAoa2NvbXBhY3RkICZhbXA7JmFtcDsgZGVmcmFnX21vZGUpCi0JCWZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpOwotCWVsc2UKLQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTsKJiM0MzsJZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsCiYjNDM7CQkJCQkgICAgICAga2NvbXBhY3RkICZhbXA7JmFtcDsgZGVmcmFnX21vZGUpOwogCiAJd2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgJmFtcDsgQUxMT0NfV01BUktfTUFTSyk7CiAJaWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LApAQCAtMzIzOCwxMCAmIzQzOzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcCkKIAkJdGltZW91dCA9IGRlZmF1bHRfdGltZW91dDsKIAkJaWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkgewogCQkJdW5zaWduZWQgaW50IHByZXZfc2NvcmUsIHNjb3JlOwomIzQzOwkJCXVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKTsKIAotCQkJcHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7CiYjNDM7CQkJcHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpOwogCQkJY29tcGFjdF9ub2RlKHBnZGF0LCB0cnVlKTsKLQkJCXNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0KTsKJiM0MzsJCQlzY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpOwogCQkJLyoKIAkJCSAqIERlZmVyIHByb2FjdGl2ZSBjb21wYWN0aW9uIGlmIHRoZSBmcmFnbWVudGF0aW9uCiAJCQkgKiBzY29yZSBkaWQgbm90IGdvIGRvd24gaS5lLiBubyBwcm9ncmVzcyBtYWRlLgpkaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmgKaW5kZXggMzhiMTE2NTIxMmM5NC4uMTRiYjk1NDM4NzliNCAxMDA2NDQKLS0tIGEvbW0vaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9pbnRlcm5hbC5oCkBAIC0xNjU0LDQgJiM0MzsxNjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZCkKIAlyZXR1cm4gdHJ1ZTsKIH0KIAomIzQzO3Vuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSwKJiM0MzsJCQkJCXVuc2lnbmVkIGludCBvcmRlciwKJiM0MzsJCQkJCWJvb2wgdXNlX2Jsb2Nrcyk7CiAjZW5kaWYJLyogX19NTV9JTlRFUk5BTF9IICovCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLmE0MTlhMmMyZmNhNDAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC02OTY2LDcgJiM0Mzs2OTY2LDYgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KQogCSAqIG1lZXQgd2F0ZXJtYXJrcy4KIAkgKi8KIAlmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgcGdkYXQsIGksIGhpZ2hlc3Rfem9uZWlkeCkgewotCQllbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW07CiAJCXVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlczsKIAogCQlpZiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgJmFtcDsgTlVNQV9CQUxBTkNJTkdfTUVNT1JZX1RJRVJJTkcpCkBAIC02OTc0LDIxICYjNDM7Njk3Myw2IEBAIHN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCkKIAkJZWxzZQogCQkJbWFyayA9IGhpZ2hfd21hcmtfcGFnZXMoem9uZSk7CiAKLQkJLyoKLQkJICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUKLQkJICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLgotCQkgKgotCQkgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uCi0JCSAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0JiMzOTtzCi0JCSAqIHJlY2xhaW1lZCBhIGNvbXBhY3Rpb24gZ2FwLCBhbmQga3N3YXBkX3Nocmlua19ub2RlCi0JCSAqIGhhcyBkcm9wcGVkIG9yZGVyLCBzaW1wbHkgZW5zdXJlIHRoZXJlIGFyZSBlbm91Z2gKLQkJICogYmFzZSBwYWdlcyBmb3IgY29tcGFjdGlvbiwgd2FrZSBrY29tcGFjdGQgJmFtcDsgc2xlZXAuCi0JCSAqLwotCQlpZiAoZGVmcmFnX21vZGUgJmFtcDsmYW1wOyBvcmRlcikKLQkJCWl0ZW0gPSBOUl9GUkVFX1BBR0VTX0JMT0NLUzsKLQkJZWxzZQotCQkJaXRlbSA9IE5SX0ZSRUVfUEFHRVM7Ci0KIAkJLyoKIAkJICogV2hlbiB0aGVyZSBpcyBhIGhpZ2ggbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbSwKIAkJICogdGhlIGN1bXVsYXRpdmUgZXJyb3IgZnJvbSB0aGUgdm1zdGF0IHBlci1jcHUgY2FjaGUKQEAgLTcwMDEsOSAmIzQzOzY5ODUsMTIgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KQogCQkgKiBjb3VudGVyIHdvbiYjMzk7dCBhY3R1YWxseSBiZSBwZXItY3B1IGNhY2hlZC4gQnV0IGtlZXAKIAkJICogdGhpbmdzIHNpbXBsZSBmb3Igbm93OyByZXZpc2l0IHdoZW4gc29tZWJvZHkgY2FyZXMuCiAJCSAqLwotCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIGl0ZW0pOwomIzQzOwkJZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsCiYjNDM7CQkJCQkJICAgICAgIGRlZnJhZ19tb2RlICZhbXA7IG9yZGVyKTsKIAkJaWYgKHpvbmUtJmd0O3BlcmNwdV9kcmlmdF9tYXJrICZhbXA7JmFtcDsgZnJlZV9wYWdlcyAmbHQ7IHpvbmUtJmd0O3BlcmNwdV9kcmlmdF9tYXJrKQotCQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBpdGVtKTsKJiM0MzsJCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsCiYjNDM7CQkJCQlkZWZyYWdfbW9kZSAmYW1wOyBvcmRlciA/CiYjNDM7CQkJCQlOUl9GUkVFX1BBR0VTX0JMT0NLUyA6IE5SX0ZSRUVfUEFHRVMpOwogCiAJCWlmIChfX3pvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCBtYXJrLCBoaWdoZXN0X3pvbmVpZHgsCiAJCQkJCTAsIGZyZWVfcGFnZXMpKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTExOAoJCQkJCQkJb3V0cHV0OiAxNTQKCQkJCQkJCXRob3VnaHRzOiA5OTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5pbml0aWFsaXplZCBNZW1vcnkgUmlzayBBc3Nlc3NtZW50OiBNZW1vcnkgQ29tcGFjdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRpbmtlcmluZyB3aXRoIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gd2l0aGluIHRoZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSwgaG93IGZyZWUgcGFnZXMgYXJlIGNhbGN1bGF0ZWQsIGZyYWdtZW50YXRpb24gaXMgc2NvcmVkLCBhbmQgY29tcGFjdGlvbiBpcyB0cmlnZ2VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLgoKRmlyc3QsIEkgbmVlZCB0byBsb29rIGF0IHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gVGhlIHBhdGNoIG1vZGlmaWVzIGBjb21wYWN0X2hwYWdlX29yZGVyKClgIGJhc2VkIG9uIGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AuIEl0IGludHJvZHVjZXMgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoKWAgYW5kIG1vZGlmaWVzIHRoZSBmcmFnbWVudGF0aW9uIHNjb3JpbmcgZnVuY3Rpb25zIHRvIHRha2UgYW4gb3JkZXIgcGFyYW1ldGVyLiBUaGUgYGtzd2FwZF9pc19ydW5uaW5nYCBjaGVjayBpbiBgX19jb21wYWN0X2ZpbmlzaGVkYCBub3cgb25seSBvY2N1cnMgaWYgaXQmIzM5O3MgJiMzNDtjb3N0bHkmIzM0Oy4KCk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGlzOiBUaGUgY2hhbmdlcyBhcmUgcHVyZWx5IGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW07IHBhZ2UgYWxsb2NhdGlvbiwgY29tcGFjdGlvbiwgYW5kIHZtc2Nhbi4gQ3J1Y2lhbGx5LCBubyBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkIHRvIHVzZXJzcGFjZS4gVGhlcmUgYXJlbiYjMzk7dCBhbnkgYnJhbmQtbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCB3aXRoaW4gdGhlc2UgY2hhbmdlcy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludm9sdmUgYW55IG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgbWlnaHQgYWxsb3cgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGxvZ2ljIG9mIHdoZW4gdG8gY29tcGFjdCBhbmQgaG93IHRvIHNjb3JlIGZyYWdtZW50YXRpb24sIHJhdGhlciB0aGFuIGRpcmVjdCBtZW1vcnkgYWNjZXNzLgoKQW55IHBvdGVudGlhbCBidWdzIGhlcmUgYXJlIG1vc3QgbGlrZWx5IGxvZ2ljIGJ1Z3PigJR0aGluZ3MgbGlrZSBpbmZpbml0ZSBsb29wcywgaW5jb3JyZWN0IHdhdGVybWFya3MsIG91dC1vZi1tZW1vcnkgZXJyb3Jz4oCUb3IsIGF0IHdvcnN0LCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggS0FTQU4gd291bGQgY2F0Y2guIENydWNpYWxseSwgdGhpcyBkb2VzbuKAmXQgc2VlbSBsaWtlIGEgc2NlbmFyaW8gd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgd291bGQgbGVhayB0byB1c2Vyc3BhY2Ugb3IgYmUgdXNlZCBpbiBjb250cm9sIGZsb3cgKGUuZy4sIGluIHN0YWNrIHZhcmlhYmxlcykgaW4gYSB3YXkgdGhhdCAqc3BlY2lmaWNhbGx5KiBjYWxscyBmb3IgS01TQU4uCgpMZXQmIzM5O3MgcXVpY2tseSBzY2FuIHRoZSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcygpYCBjb2RlOiBUaGlzIGNvZGUganVzdCByZWFkcyB2YWx1ZXMgZnJvbSBgem9uZS0mZ3Q7ZnJlZV9hcmVhW29dLm5yX2ZyZWVgLCBzbyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLgoKTm93LCBsZXQmIzM5O3MgcXVpY2tseSBjaGVjayB0aGUgY2hhbmdlcyB3aXRoaW4gYHZtc2Nhbi5jYC4gSXQgaGFzOgoKYGBgYwotCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIGl0ZW0pOwomIzQzOwkJZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsCiYjNDM7CQkJCQkJICAgICAgIGRlZnJhZ19tb2RlICZhbXA7IG9yZGVyKTsKIAkJaWYgKHpvbmUtJmd0O3BlcmNwdV9kcmlmdF9tYXJrICZhbXA7JmFtcDsgZnJlZV9wYWdlcyAmbHQ7IHpvbmUtJmd0O3BlcmNwdV9kcmlmdF9tYXJrKQotCQkJZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBpdGVtKTsKJiM0MzsJCQlmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsCiYjNDM7CQkJCQlkZWZyYWdfbW9kZSAmYW1wOyBvcmRlciA/CiYjNDM7CQkJCQlOUl9GUkVFX1BBR0VTX0JMT0NLUyA6IE5SX0ZSRUVfUEFHRVMpOwpgYGAKCk9rYXksIHRoZSBjcnVjaWFsIGNoYW5nZSBpcyBgZGVmcmFnX21vZGUgJmFtcDsgb3JkZXJgLiBQcmV2aW91c2x5LCBpdCB3YXMgYGRlZnJhZ19tb2RlICZhbXA7JmFtcDsgb3JkZXJgLiBOb3csIHdoaWxlIGBkZWZyYWdfbW9kZWAgaXMgbGlrZWx5IGEgYm9vbGVhbiBvciBpbnRlZ2VyLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIGNoZWNrLiBJZiBgZGVmcmFnX21vZGVgIGlzbiYjMzk7dCAxLCB0aGlzIGNoYW5nZSBtaWdodCByZXN1bHQgaW4gYSBidWcuIEl0IGFwcGVhcnMgdG8gYmUgYSBidWcgaWYgYGRlZnJhZ19tb2RlYCBpcyBub3QgMS4gRXZlbiBzbywgaXQmIzM5O3MgYSBsb2dpYyBidWcsIG5vdCBhbiB1bmluaXRpYWxpemVkIG1lbW9yeSBvbmUuCgoqKkNvbmNsdXNpb246KiogQmFzZWQgb24gdGhpcyByZXZpZXcsIHRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgcG9zZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgcmVxdWlyaW5nIGEgS01TQU4gY2hlY2suIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGNvbXBhY3Rpb24gaGV1cmlzdGljcyBhbmQgZnJlZSBwYWdlIGNhbGN1bGF0aW9ucywgd2l0aG91dCBpbnRyb2R1Y2luZyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugb3IgY29tcGxleCBhbGxvY2F0aW9ucy4gQW55IGludHJvZHVjZWQgYnVncywgbGlrZSBpbiB3YXRlcm1hcmsgY2FsY3VsYXRpb25zLCB3b3VsZCBsZWFkIHRvIHByb2JsZW1zIHRoYXQgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgd291bGQgYmUgYWJsZSB0byBjYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjUgMDU6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBoZXVyaXN0aWNzLCBzdWNoIGFzIGZyYWdtZW50YXRpb24gc2NvcmluZyBhbmQgZWZmZWN0aXZlIGZyZWUgcGFnZXMgY2FsY3VsYXRpb24gZm9yIFRIUCAoVHJhbnNwYXJlbnQgSHVnZSBQYWdlcykuIEl0IGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBhZGQgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIChzdWNoIGFzIGxvZ2ljIGVycm9ycyBpbiB3YXRlcm1hcmsgY2FsY3VsYXRpb25zIG9yIHRoZSBgZGVmcmFnX21vZGUgXHUwMDI2IG9yZGVyYCBiaXR3aXNlIG9wZXJhdGlvbikgd291bGQgcmVzdWx0IGluIHBlcmZvcm1hbmNlIGlzc3VlcywgT09Ncywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1ZyB0b29scy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgdGhhdCByZXF1aXJlcyBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gaGV1cmlzdGljcywgc3VjaCBhcyBmcmFnbWVudGF0aW9uIHNjb3JpbmcgYW5kIGVmZmVjdGl2ZSBmcmVlIHBhZ2VzIGNhbGN1bGF0aW9uIGZvciBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMgaW4gd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucyBvciB0aGUgYGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcmAgYml0d2lzZSBvcGVyYXRpb24pIHdvdWxkIHJlc3VsdCBpbiBwZXJmb3JtYW5jZSBpc3N1ZXMsIE9PTXMsIG9yIGdlbmVyYWwgbWVtb3J5IGNvcnJ1cHRpb24sIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlZmF1bHQgZGVidWcgdG9vbHMuIFRoZXJlIGlzIG5vIHNwZWNpZmljIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIHRoYXQgcmVxdWlyZXMgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjA0LjY2MDAwNTM1N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjU3MTA5MTkzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT01QQUNUSU9OXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRyeV90b19jb21wYWN0X3BhZ2VzXCIsXG4gICAgXCJ6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzXCIsXG4gICAgXCJjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlXCIsXG4gICAgXCJ3YWtldXBfa3N3YXBkXCIsXG4gICAgXCJ3YWtldXBfa2NvbXBhY3RkXCIsXG4gICAgXCJrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGhldXJpc3RpY3MsIHN1Y2ggYXMgZnJhZ21lbnRhdGlvbiBzY29yaW5nIGFuZCBlZmZlY3RpdmUgZnJlZSBwYWdlcyBjYWxjdWxhdGlvbiBmb3IgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzIGluIHdhdGVybWFyayBjYWxjdWxhdGlvbnMgb3IgdGhlIGBkZWZyYWdfbW9kZSBcXHUwMDI2IG9yZGVyYCBiaXR3aXNlIG9wZXJhdGlvbikgd291bGQgcmVzdWx0IGluIHBlcmZvcm1hbmNlIGlzc3VlcywgT09Ncywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1ZyB0b29scy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgdGhhdCByZXF1aXJlcyBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTowNC42NjAwMDk2NTdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2NjA0MjI1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDJiZjkxNmRkNGJhMDZiZjVhYzc2OGQ3YjA0M2JjNWNjNGQ0ZjllNTRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDU6MDMgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vY29tcGFjdGlvbi5jIGIvbW0vY29tcGFjdGlvbi5jXFxuaW5kZXggYTA0OTQxNTUxMmM2Ny4uMjliZTcyNTk3NDE1NiAxMDA2NDRcXG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcXG4rKysgYi9tbS9jb21wYWN0aW9uLmNcXG5AQCAtMjQsNiArMjQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFnZV9vd25lci5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVzZXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2VfbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcInBhZ2VfYWxsb2MuaFxcXCJcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbkBAIC04MSw2ICs4MiwxNSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cXG4gI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXFx0KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpXFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGlubGluZSBpbnQgY29tcGFjdF9ocGFnZV9vcmRlcih2b2lkKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb3JkZXJzID0gUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKTtcXG4rXFxuK1xcdGlmIChvcmRlcnMpXFxuK1xcdFxcdHJldHVybiBfX2ZmcyhvcmRlcnMpO1xcbitcXHRyZXR1cm4gQ09NUEFDVElPTl9IUEFHRV9PUkRFUjtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxcbiB7XFxuIFxcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XFxuQEAgLTgyNyw2ICs4MzcsMTIgQEAgc3RhdGljIGJvb2wgc2tpcF9pc29sYXRpb25fb25fb3JkZXIoaW50IG9yZGVyLCBpbnQgdGFyZ2V0X29yZGVyKVxcbiBcXHQgKi9cXG4gXFx0aWYgKCFpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNlPSB0YXJnZXRfb3JkZXIpXFxuIFxcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0LyogV2UgYXJlIGNvbXBhY3RpbmcgZm9yIG11bHRpLXNpemUgVEhQIGFsbG9jYXRpb24gKi9cXG4rXFx0aWYgKGlzX3ZpYV9jb21wYWN0X21lbW9yeSh0YXJnZXRfb3JkZXIpIFxcdTAwMjZcXHUwMDI2IG9yZGVyIFxcdTAwM2U9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcbiBcXHQvKlxcbiBcXHQgKiBXZSBsaW1pdCBtZW1vcnkgY29tcGFjdGlvbiB0byBwYWdlYmxvY2tzIGFuZCB3b24ndCB0cnlcXG4gXFx0ICogY3JlYXRpbmcgZnJlZSBibG9ja3Mgb2YgbWVtb3J5IHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoYXQuXFxuQEAgLTIyMDgsMTYgKzIyMjQsMTYgQEAgc3RhdGljIGJvb2wga3N3YXBkX2lzX3J1bm5pbmcocGdfZGF0YV90ICpwZ2RhdClcXG4gXFxuIC8qXFxuICAqIEEgem9uZSdzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb24gd3J0IHRvIHRoZVxcbi0gKiBDT01QQUNUSU9OX0hQQUdFX09SREVSLiBJdCByZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIFswLCAxMDBdLlxcbisgKiBjb21wYWN0X2hwYWdlX29yZGVyKCkuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXFxuICAqL1xcbi1zdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4ge1xcbi1cXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgQ09NUEFDVElPTl9IUEFHRV9PUkRFUik7XFxuK1xcdHJldHVybiBleHRmcmFnX2Zvcl9vcmRlcih6b25lLCBvcmRlcik7XFxuIH1cXG4gXFxuIC8qXFxuICAqIEEgd2VpZ2h0ZWQgem9uZSdzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb25cXG4tICogd3J0IHRvIHRoZSBDT01QQUNUSU9OX0hQQUdFX09SREVSIHNjYWxlZCBieSB0aGUgem9uZSdzIHNpemUuIEl0XFxuKyAqIHdydCB0byB0aGUgY29tcGFjdF9ocGFnZV9vcmRlcigpIHNjYWxlZCBieSB0aGUgem9uZSdzIHNpemUuIEl0XFxuICAqIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXFxuICAqXFxuICAqIFRoZSBzY2FsaW5nIGZhY3RvciBlbnN1cmVzIHRoYXQgcHJvYWN0aXZlIGNvbXBhY3Rpb24gZm9jdXNlcyBvbiBsYXJnZXJcXG5AQCAtMjIyNSwxMSArMjI0MSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcXG4gICogWk9ORV9ETUEzMi4gRm9yIHNtYWxsZXIgem9uZXMsIHRoZSBzY29yZSB2YWx1ZSByZW1haW5zIGNsb3NlIHRvIHplcm8sXFxuICAqIGFuZCB0aHVzIG5ldmVyIGV4Y2VlZHMgdGhlIGhpZ2ggdGhyZXNob2xkIGZvciBwcm9hY3RpdmUgY29tcGFjdGlvbi5cXG4gICovXFxuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKVxcbitzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgc2NvcmU7XFxuIFxcbi1cXHRzY29yZSA9IHpvbmUtXFx1MDAzZXByZXNlbnRfcGFnZXMgKiBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoem9uZSk7XFxuK1xcdHNjb3JlID0gem9uZS1cXHUwMDNlcHJlc2VudF9wYWdlcyAqIGZyYWdtZW50YXRpb25fc2NvcmVfem9uZSh6b25lLCBvcmRlcik7XFxuIFxcdHJldHVybiBkaXY2NF91bChzY29yZSwgem9uZS1cXHUwMDNlem9uZV9wZ2RhdC1cXHUwMDNlbm9kZV9wcmVzZW50X3BhZ2VzICsgMSk7XFxuIH1cXG4gXFxuQEAgLTIyNDAsNyArMjI1Niw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHN0cnVjdCB6b25lICp6b25lKVxcbiAgKiB0aGUgbm9kZSdzIHNjb3JlIGZhbGxzIGJlbG93IHRoZSBsb3cgdGhyZXNob2xkLCBvciBvbmUgb2YgdGhlIGJhY2stb2ZmXFxuICAqIGNvbmRpdGlvbnMgaXMgbWV0LlxcbiAgKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdClcXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBzY29yZSA9IDA7XFxuIFxcdGludCB6b25laWQ7XFxuQEAgLTIyNTEsNyArMjI2Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXFxuIFxcdFxcdHpvbmUgPSBcXHUwMDI2cGdkYXQtXFx1MDAzZW5vZGVfem9uZXNbem9uZWlkXTtcXG4gXFx0XFx0aWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdHNjb3JlICs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lKTtcXG4rXFx0XFx0c2NvcmUgKz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUsIG9yZGVyKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHNjb3JlO1xcbkBAIC0yMjY5LDEyICsyMjg1LDEzIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayhib29sIGxvdylcXG4gc3RhdGljIGJvb2wgc2hvdWxkX3Byb2FjdGl2ZV9jb21wYWN0X25vZGUocGdfZGF0YV90ICpwZ2RhdClcXG4ge1xcbiBcXHRpbnQgd21hcmtfaGlnaDtcXG4rXFx0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xcbiBcXG4gXFx0aWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0d21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpO1xcbi1cXHRyZXR1cm4gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0KSBcXHUwMDNlIHdtYXJrX2hpZ2g7XFxuK1xcdHJldHVybiBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQsIG9yZGVyKSBcXHUwMDNlIHdtYXJrX2hpZ2g7XFxuIH1cXG4gXFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG5AQCAtMjMwNiwxMiArMjMyMywxMyBAQCBzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdCBfX2NvbXBhY3RfZmluaXNoZWQoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXFxuIFxcdGlmIChjYy1cXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3Rpb24pIHtcXG4gXFx0XFx0aW50IHNjb3JlLCB3bWFya19sb3c7XFxuIFxcdFxcdHBnX2RhdGFfdCAqcGdkYXQ7XFxuK1xcdFxcdGJvb2wgY29zdGx5ID0gY29tcGFjdF9ocGFnZV9vcmRlcigpIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVI7XFxuIFxcbiBcXHRcXHRwZ2RhdCA9IGNjLVxcdTAwM2V6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbi1cXHRcXHRpZiAoa3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKVxcbitcXHRcXHRpZiAoY29zdGx5IFxcdTAwMjZcXHUwMDI2IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcXG4gXFx0XFx0XFx0cmV0dXJuIENPTVBBQ1RfUEFSVElBTF9TS0lQUEVEO1xcbiBcXG4tXFx0XFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtXFx1MDAzZXpvbmUpO1xcbitcXHRcXHRzY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShjYy1cXHUwMDNlem9uZSwgY29tcGFjdF9ocGFnZV9vcmRlcigpKTtcXG4gXFx0XFx0d21hcmtfbG93ID0gZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayh0cnVlKTtcXG4gXFxuIFxcdFxcdGlmIChzY29yZSBcXHUwMDNlIHdtYXJrX2xvdylcXG5AQCAtMjUxMCw2ICsyNTI4LDM4IEBAIGJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuIFxcbisvKipcXG4rICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXJcXG4rICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXFxuKyAqIEBvcmRlcjogICAgICBhbGxvY2F0aW9uIG9yZGVyXFxuKyAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1NcXG4rICpcXG4rICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUgYmxvY2tzIHRvIGF2b2lkXFxuKyAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaFxcbisgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LlxcbisgKlxcbisgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXNcXG4rICogaW4gYmxvY2tzIFxcdTAwM2U9IG1pbiBtVEhQIG9yZGVyLCBhcyBzbWFsbGVyIGZyYWdtZW50cyBjYW5ub3Qgc2F0aXNmeSBtVEhQXFxuKyAqIGFsbG9jYXRpb25zLlxcbisgKi9cXG4rdW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxcbitcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgdXNlX2Jsb2NrcylcXG4re1xcbitcXHRpZiAodXNlX2Jsb2NrcylcXG4rXFx0XFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcXHUwMDI2XFx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcXG4rXFxuK1xcdFxcdGZvciAoaW50IG8gPSBvcmRlcjsgbyBcXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvKyspXFxuK1xcdFxcdFxcdGZyZWVfcGFnZXMgKz0gem9uZS1cXHUwMDNlZnJlZV9hcmVhW29dLm5yX2ZyZWUgXFx1MDAzY1xcdTAwM2MgbztcXG4rXFx0XFx0cmV0dXJuIGZyZWVfcGFnZXM7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XFxuK31cXG4rXFxuIC8qXFxuICAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci5cXG4gICogUmV0dXJuIENPTVBBQ1RfU1VDQ0VTUyBpZiBhbGxvY2F0aW9uIGZvciB0YXJnZXQgb3JkZXIgY2FuIGJlIGFscmVhZHlcXG5AQCAtMjUyNSwxMCArMjU3NSw4IEBAIGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuIFxcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcztcXG4gXFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XFxuIFxcbi1cXHRpZiAoa2NvbXBhY3RkIFxcdTAwMjZcXHUwMDI2IGRlZnJhZ19tb2RlKVxcbi1cXHRcXHRmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xcbitcXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGtjb21wYWN0ZCBcXHUwMDI2XFx1MDAyNiBkZWZyYWdfbW9kZSk7XFxuIFxcbiBcXHR3YXRlcm1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xcbiBcXHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgd2F0ZXJtYXJrLCBoaWdoZXN0X3pvbmVpZHgsXFxuQEAgLTMyMzgsMTAgKzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcXG4gXFx0XFx0dGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcXG4gXFx0XFx0aWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkge1xcbiBcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldl9zY29yZSwgc2NvcmU7XFxuK1xcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlciA9IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKTtcXG4gXFxuLVxcdFxcdFxcdHByZXZfc2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpO1xcbitcXHRcXHRcXHRwcmV2X3Njb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XFxuIFxcdFxcdFxcdGNvbXBhY3Rfbm9kZShwZ2RhdCwgdHJ1ZSk7XFxuLVxcdFxcdFxcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0KTtcXG4rXFx0XFx0XFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQsIG9yZGVyKTtcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogRGVmZXIgcHJvYWN0aXZlIGNvbXBhY3Rpb24gaWYgdGhlIGZyYWdtZW50YXRpb25cXG4gXFx0XFx0XFx0ICogc2NvcmUgZGlkIG5vdCBnbyBkb3duIGkuZS4gbm8gcHJvZ3Jlc3MgbWFkZS5cXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcXG5pbmRleCAzOGIxMTY1MjEyYzk0Li4xNGJiOTU0Mzg3OWI0IDEwMDY0NFxcbi0tLSBhL21tL2ludGVybmFsLmhcXG4rKysgYi9tbS9pbnRlcm5hbC5oXFxuQEAgLTE2NTQsNCArMTY1NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxuK1xcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcixcXG4rXFx0XFx0XFx0XFx0XFx0Ym9vbCB1c2VfYmxvY2tzKTtcXG4gI2VuZGlmXFx0LyogX19NTV9JTlRFUk5BTF9IICovXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li5hNDE5YTJjMmZjYTQwIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtNjk2Niw3ICs2OTY2LDYgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbiBcXHQgKiBtZWV0IHdhdGVybWFya3MuXFxuIFxcdCAqL1xcbiBcXHRmb3JfZWFjaF9tYW5hZ2VkX3pvbmVfcGdkYXQoem9uZSwgcGdkYXQsIGksIGhpZ2hlc3Rfem9uZWlkeCkge1xcbi1cXHRcXHRlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW07XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcztcXG4gXFxuIFxcdFxcdGlmIChzeXNjdGxfbnVtYV9iYWxhbmNpbmdfbW9kZSBcXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKVxcbkBAIC02OTc0LDIxICs2OTczLDYgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdG1hcmsgPSBoaWdoX3dtYXJrX3BhZ2VzKHpvbmUpO1xcbiBcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGVcXG4tXFx0XFx0ICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLlxcbi1cXHRcXHQgKlxcbi1cXHRcXHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXFxuLVxcdFxcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3NcXG4tXFx0XFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcXG4tXFx0XFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxcbi1cXHRcXHQgKiBiYXNlIHBhZ2VzIGZvciBjb21wYWN0aW9uLCB3YWtlIGtjb21wYWN0ZCBcXHUwMDI2IHNsZWVwLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0aWYgKGRlZnJhZ19tb2RlIFxcdTAwMjZcXHUwMDI2IG9yZGVyKVxcbi1cXHRcXHRcXHRpdGVtID0gTlJfRlJFRV9QQUdFU19CTE9DS1M7XFxuLVxcdFxcdGVsc2VcXG4tXFx0XFx0XFx0aXRlbSA9IE5SX0ZSRUVfUEFHRVM7XFxuLVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBXaGVuIHRoZXJlIGlzIGEgaGlnaCBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLFxcbiBcXHRcXHQgKiB0aGUgY3VtdWxhdGl2ZSBlcnJvciBmcm9tIHRoZSB2bXN0YXQgcGVyLWNwdSBjYWNoZVxcbkBAIC03MDAxLDkgKzY5ODUsMTIgQEAgc3RhdGljIGJvb2wgcGdkYXRfYmFsYW5jZWQocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcbiBcXHRcXHQgKiBjb3VudGVyIHdvbid0IGFjdHVhbGx5IGJlIHBlci1jcHUgY2FjaGVkLiBCdXQga2VlcFxcbiBcXHRcXHQgKiB0aGluZ3Mgc2ltcGxlIGZvciBub3c7IHJldmlzaXQgd2hlbiBzb21lYm9keSBjYXJlcy5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgaXRlbSk7XFxuK1xcdFxcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgZGVmcmFnX21vZGUgXFx1MDAyNiBvcmRlcik7XFxuIFxcdFxcdGlmICh6b25lLVxcdTAwM2VwZXJjcHVfZHJpZnRfbWFyayBcXHUwMDI2XFx1MDAyNiBmcmVlX3BhZ2VzIFxcdTAwM2Mgem9uZS1cXHUwMDNlcGVyY3B1X2RyaWZ0X21hcmspXFxuLVxcdFxcdFxcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgaXRlbSk7XFxuK1xcdFxcdFxcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSxcXG4rXFx0XFx0XFx0XFx0XFx0ZGVmcmFnX21vZGUgXFx1MDAyNiBvcmRlciA/XFxuK1xcdFxcdFxcdFxcdFxcdE5SX0ZSRUVfUEFHRVNfQkxPQ0tTIDogTlJfRlJFRV9QQUdFUyk7XFxuIFxcbiBcXHRcXHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWFyaywgaGlnaGVzdF96b25laWR4LFxcbiBcXHRcXHRcXHRcXHRcXHQwLCBmcmVlX3BhZ2VzKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6MDUuMDI2NzE5NTQxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTQ3NTA5MzkwODY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcInpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndha2V1cF9rY29tcGFjdGRcIixcbiAgICBcImtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmY5MTZkZDRiYTA2YmY1YWM3NjhkN2IwNDNiYzVjYzRkNGY5ZTU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDU6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGEwNDk0MTU1MTJjNjcuLjI5YmU3MjU5NzQxNTYgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZV9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG5AQCAtODEsNiArODIsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcbiAjZW5kaWZcbiBcbitzdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xuK1xuK1x0aWYgKG9yZGVycylcbitcdFx0cmV0dXJuIF9fZmZzKG9yZGVycyk7XG4rXHRyZXR1cm4gQ09NUEFDVElPTl9IUEFHRV9PUkRFUjtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuIHtcbiBcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XG5AQCAtODI3LDYgKzgzNywxMiBAQCBzdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXG4gXHQgKi9cbiBcdGlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzZT0gdGFyZ2V0X29yZGVyKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qIFdlIGFyZSBjb21wYWN0aW5nIGZvciBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uICovXG4rXHRpZiAoaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzZT0gY29tcGFjdF9ocGFnZV9vcmRlcigpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuIFx0LypcbiBcdCAqIFdlIGxpbWl0IG1lbW9yeSBjb21wYWN0aW9uIHRvIHBhZ2VibG9ja3MgYW5kIHdvbid0IHRyeVxuIFx0ICogY3JlYXRpbmcgZnJlZSBibG9ja3Mgb2YgbWVtb3J5IHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoYXQuXG5AQCAtMjIwOCwxNiArMjIyNCwxNiBAQCBzdGF0aWMgYm9vbCBrc3dhcGRfaXNfcnVubmluZyhwZ19kYXRhX3QgKnBnZGF0KVxuIFxuIC8qXG4gICogQSB6b25lJ3MgZnJhZ21lbnRhdGlvbiBzY29yZSBpcyB0aGUgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbiB3cnQgdG8gdGhlXG4tICogQ09NUEFDVElPTl9IUEFHRV9PUkRFUi4gSXQgcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS5cbisgKiBjb21wYWN0X2hwYWdlX29yZGVyKCkuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4tXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgQ09NUEFDVElPTl9IUEFHRV9PUkRFUik7XG4rXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgb3JkZXIpO1xuIH1cbiBcbiAvKlxuICAqIEEgd2VpZ2h0ZWQgem9uZSdzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb25cbi0gKiB3cnQgdG8gdGhlIENPTVBBQ1RJT05fSFBBR0VfT1JERVIgc2NhbGVkIGJ5IHRoZSB6b25lJ3Mgc2l6ZS4gSXRcbisgKiB3cnQgdG8gdGhlIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBzY2FsZWQgYnkgdGhlIHpvbmUncyBzaXplLiBJdFxuICAqIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4gICpcbiAgKiBUaGUgc2NhbGluZyBmYWN0b3IgZW5zdXJlcyB0aGF0IHByb2FjdGl2ZSBjb21wYWN0aW9uIGZvY3VzZXMgb24gbGFyZ2VyXG5AQCAtMjIyNSwxMSArMjI0MSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiAgKiBaT05FX0RNQTMyLiBGb3Igc21hbGxlciB6b25lcywgdGhlIHNjb3JlIHZhbHVlIHJlbWFpbnMgY2xvc2UgdG8gemVybyxcbiAgKiBhbmQgdGh1cyBuZXZlciBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZCBmb3IgcHJvYWN0aXZlIGNvbXBhY3Rpb24uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNjb3JlO1xuIFxuLVx0c2NvcmUgPSB6b25lLVx1MDAzZXByZXNlbnRfcGFnZXMgKiBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoem9uZSk7XG4rXHRzY29yZSA9IHpvbmUtXHUwMDNlcHJlc2VudF9wYWdlcyAqIGZyYWdtZW50YXRpb25fc2NvcmVfem9uZSh6b25lLCBvcmRlcik7XG4gXHRyZXR1cm4gZGl2NjRfdWwoc2NvcmUsIHpvbmUtXHUwMDNlem9uZV9wZ2RhdC1cdTAwM2Vub2RlX3ByZXNlbnRfcGFnZXMgKyAxKTtcbiB9XG4gXG5AQCAtMjI0MCw3ICsyMjU2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4gICogdGhlIG5vZGUncyBzY29yZSBmYWxscyBiZWxvdyB0aGUgbG93IHRocmVzaG9sZCwgb3Igb25lIG9mIHRoZSBiYWNrLW9mZlxuICAqIGNvbmRpdGlvbnMgaXMgbWV0LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHVuc2lnbmVkIGludCBzY29yZSA9IDA7XG4gXHRpbnQgem9uZWlkO1xuQEAgLTIyNTEsNyArMjI2Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4gXHRcdHpvbmUgPSBcdTAwMjZwZ2RhdC1cdTAwM2Vub2RlX3pvbmVzW3pvbmVpZF07XG4gXHRcdGlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHNjb3JlICs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lKTtcbitcdFx0c2NvcmUgKz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUsIG9yZGVyKTtcbiBcdH1cbiBcbiBcdHJldHVybiBzY29yZTtcbkBAIC0yMjY5LDEyICsyMjg1LDEzIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayhib29sIGxvdylcbiBzdGF0aWMgYm9vbCBzaG91bGRfcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZShwZ19kYXRhX3QgKnBnZGF0KVxuIHtcbiBcdGludCB3bWFya19oaWdoO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xuIFxuIFx0aWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpO1xuLVx0cmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCkgXHUwMDNlIHdtYXJrX2hpZ2g7XG4rXHRyZXR1cm4gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcikgXHUwMDNlIHdtYXJrX2hpZ2g7XG4gfVxuIFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbkBAIC0yMzA2LDEyICsyMzIzLDEzIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbiBcdGlmIChjYy1cdTAwM2Vwcm9hY3RpdmVfY29tcGFjdGlvbikge1xuIFx0XHRpbnQgc2NvcmUsIHdtYXJrX2xvdztcbiBcdFx0cGdfZGF0YV90ICpwZ2RhdDtcbitcdFx0Ym9vbCBjb3N0bHkgPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuIFxuIFx0XHRwZ2RhdCA9IGNjLVx1MDAzZXpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbi1cdFx0aWYgKGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbitcdFx0aWYgKGNvc3RseSBcdTAwMjZcdTAwMjYga3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKVxuIFx0XHRcdHJldHVybiBDT01QQUNUX1BBUlRJQUxfU0tJUFBFRDtcbiBcbi1cdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtXHUwMDNlem9uZSk7XG4rXHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLVx1MDAzZXpvbmUsIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSk7XG4gXHRcdHdtYXJrX2xvdyA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsodHJ1ZSk7XG4gXG4gXHRcdGlmIChzY29yZSBcdTAwM2Ugd21hcmtfbG93KVxuQEAgLTI1MTAsNiArMjUyOCwzOCBAQCBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qKlxuKyAqIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMgLSBnZXQgZnJlZSBwYWdlcyByZWxldmFudCB0byBhbGxvY2F0aW9uIG9yZGVyXG4rICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXG4rICogQG9yZGVyOiAgICAgIGFsbG9jYXRpb24gb3JkZXJcbisgKiBAdXNlX2Jsb2NrczogaWYgdHJ1ZSwgdXNlIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTXG4rICpcbisgKiBJbiBkZWZyYWdfbW9kZSwgd2F0ZXJtYXJrcyBtdXN0IGJlIG1ldCBpbiB3aG9sZSBibG9ja3MgdG8gYXZvaWRcbisgKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2hcbisgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LlxuKyAqXG4rICogV2hlbiBtVEhQIGFsd2F5cy1lbmFibGVkIG9yZGVycyBhcmUgY29uZmlndXJlZCwgY291bnQgb25seSBmcmVlIHBhZ2VzXG4rICogaW4gYmxvY2tzIFx1MDAzZT0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFBcbisgKiBhbGxvY2F0aW9ucy5cbisgKi9cbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0Ym9vbCB1c2VfYmxvY2tzKVxuK3tcbitcdGlmICh1c2VfYmxvY2tzKVxuK1x0XHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTtcbitcbitcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFx1MDAyNlx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcbitcbitcdFx0Zm9yIChpbnQgbyA9IG9yZGVyOyBvIFx1MDAzYyBOUl9QQUdFX09SREVSUzsgbysrKVxuK1x0XHRcdGZyZWVfcGFnZXMgKz0gem9uZS1cdTAwM2VmcmVlX2FyZWFbb10ubnJfZnJlZSBcdTAwM2NcdTAwM2MgbztcbitcdFx0cmV0dXJuIGZyZWVfcGFnZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xuK31cbitcbiAvKlxuICAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci5cbiAgKiBSZXR1cm4gQ09NUEFDVF9TVUNDRVNTIGlmIGFsbG9jYXRpb24gZm9yIHRhcmdldCBvcmRlciBjYW4gYmUgYWxyZWFkeVxuQEAgLTI1MjUsMTAgKzI1NzUsOCBAQCBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XG4gXG4tXHRpZiAoa2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSlcbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XG4tXHRlbHNlXG4tXHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4rXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcbitcdFx0XHRcdFx0ICAgICAgIGtjb21wYWN0ZCBcdTAwMjZcdTAwMjYgZGVmcmFnX21vZGUpO1xuIFxuIFx0d2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xuIFx0aWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LFxuQEAgLTMyMzgsMTAgKzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdFx0dGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcbiBcdFx0aWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkge1xuIFx0XHRcdHVuc2lnbmVkIGludCBwcmV2X3Njb3JlLCBzY29yZTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wYWN0X2hwYWdlX29yZGVyKCk7XG4gXG4tXHRcdFx0cHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7XG4rXHRcdFx0cHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpO1xuIFx0XHRcdGNvbXBhY3Rfbm9kZShwZ2RhdCwgdHJ1ZSk7XG4tXHRcdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpO1xuK1x0XHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBEZWZlciBwcm9hY3RpdmUgY29tcGFjdGlvbiBpZiB0aGUgZnJhZ21lbnRhdGlvblxuIFx0XHRcdCAqIHNjb3JlIGRpZCBub3QgZ28gZG93biBpLmUuIG5vIHByb2dyZXNzIG1hZGUuXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjE0YmI5NTQzODc5YjQgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTY1NCw0ICsxNjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0Ym9vbCB1c2VfYmxvY2tzKTtcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmE0MTlhMmMyZmNhNDAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC02OTY2LDcgKzY5NjYsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHQgKiBtZWV0IHdhdGVybWFya3MuXG4gXHQgKi9cbiBcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgaSwgaGlnaGVzdF96b25laWR4KSB7XG4tXHRcdGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFxuIFx0XHRpZiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKVxuQEAgLTY5NzQsMjEgKzY5NzMsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdGVsc2VcbiBcdFx0XHRtYXJrID0gaGlnaF93bWFya19wYWdlcyh6b25lKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGVcbi1cdFx0ICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLlxuLVx0XHQgKlxuLVx0XHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXG4tXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3Ncbi1cdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbi1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLVx0XHQgKiBiYXNlIHBhZ2VzIGZvciBjb21wYWN0aW9uLCB3YWtlIGtjb21wYWN0ZCBcdTAwMjYgc2xlZXAuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZGVmcmFnX21vZGUgXHUwMDI2XHUwMDI2IG9yZGVyKVxuLVx0XHRcdGl0ZW0gPSBOUl9GUkVFX1BBR0VTX0JMT0NLUztcbi1cdFx0ZWxzZVxuLVx0XHRcdGl0ZW0gPSBOUl9GUkVFX1BBR0VTO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIHRoZXJlIGlzIGEgaGlnaCBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLFxuIFx0XHQgKiB0aGUgY3VtdWxhdGl2ZSBlcnJvciBmcm9tIHRoZSB2bXN0YXQgcGVyLWNwdSBjYWNoZVxuQEAgLTcwMDEsOSArNjk4NSwxMiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdCAqIGNvdW50ZXIgd29uJ3QgYWN0dWFsbHkgYmUgcGVyLWNwdSBjYWNoZWQuIEJ1dCBrZWVwXG4gXHRcdCAqIHRoaW5ncyBzaW1wbGUgZm9yIG5vdzsgcmV2aXNpdCB3aGVuIHNvbWVib2R5IGNhcmVzLlxuIFx0XHQgKi9cbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBpdGVtKTtcbitcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcik7XG4gXHRcdGlmICh6b25lLVx1MDAzZXBlcmNwdV9kcmlmdF9tYXJrIFx1MDAyNlx1MDAyNiBmcmVlX3BhZ2VzIFx1MDAzYyB6b25lLVx1MDAzZXBlcmNwdV9kcmlmdF9tYXJrKVxuLVx0XHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgaXRlbSk7XG4rXHRcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLFxuK1x0XHRcdFx0XHRkZWZyYWdfbW9kZSBcdTAwMjYgb3JkZXIgP1xuK1x0XHRcdFx0XHROUl9GUkVFX1BBR0VTX0JMT0NLUyA6IE5SX0ZSRUVfUEFHRVMpO1xuIFxuIFx0XHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWFyaywgaGlnaGVzdF96b25laWR4LFxuIFx0XHRcdFx0XHQwLCBmcmVlX3BhZ2VzKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjA1LjAyNjcyMDU0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2ODk5OTkxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IGludHJvZHVjaW5nIGZ1bmN0aW9uYWwgY2hhbmdlcyB3b3J0aHkgb2YgZnV6emluZyBhdHRlbnRpb24uIFRoZSBtb2RpZmljYXRpb25zIHRvIGBtbS9jb21wYWN0aW9uLmNgLCBgbW0vaW50ZXJuYWwuaGAsIGFuZCBgbW0vdm1zY2FuLmNgIGFyZSBhIGNsZWFyIHNpZ25hbC4gU3BlY2lmaWNhbGx5LCBpbnRyb2R1Y2luZyBgY29tcGFjdF9ocGFnZV9vcmRlcigpYCB3aXRoIGl0cyB1c2Ugb2YgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCBmb3IgY29tcGFjdGlvbiBvcmRlciBzZWxlY3Rpb24gaXMgYSBrZXkgYXJlYS4gVGhlIGNoYW5nZXMgaW1wYWN0aW5nIGZ1bmN0aW9ucyBsaWtlIGBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcmAsIGBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVgLCBgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkYCwgZXRjLiwgYWxsIHBvaW50IHRvIGZ1bmRhbWVudGFsIHNoaWZ0cyBpbiBob3cgbWVtb3J5IGNvbXBhY3Rpb24gYW5kIFZNIHNjYW5uaW5nIGFyZSBoYW5kbGVkIGluIHRoZSBrZXJuZWwuIFRoZSBmYWN0IHRoYXQgdGhpcyBpcyByZWFjaGFibGUgZXZlbiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcmVpbmZvcmNlcyB0aGUgdXJnZW5jeSBvZiBmdXp6aW5nLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBwcmltZSBmdXp6aW5nIHRhcmdldHMuIGBjb21wYWN0X2hwYWdlX29yZGVyYCBpcyBpbmxpbmUsIHNvIHdoaWxlIGl0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLCBpdCdzIGxlc3MgZGlyZWN0IGFzIGEgZnV6emluZyBlbnRyeSBwb2ludC4gTG9va2luZyBhdCB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMsIEkgc2VlOlxuXG4qICAgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgOiBUaGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUsIGdpdmVuIGl0cyBpbnRyb2R1Y3Rpb24gYW5kIHVzYWdlLlxuKiAgIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmA6IFRoaXMgbG9va3MgcHJvbWlzaW5nIHRvbywgYnV0IHdhaXQuLi4gaXQncyBjYWxsZWQgZnJvbSBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgKG5vbi1zdGF0aWMpIGFuZCBgY29tcGFjdF96b25lYCAoc3RhdGljKS4gVGhhdCBtZWFucyBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgaXMgYSBsaWtlbHkgZW50cnkgcG9pbnQgZm9yIGZ1enppbmcsIGFuZCBJIG1pZ2h0IG5lZWQgdG8gY29uc2lkZXIgdGhlIGludGVyYWN0aW9ucyB3aXRoIGBjb21wYWN0X3pvbmVgIHRvby5cbiogICBga2NvbXBhY3RkYDogVGhpcyBpcyBhIGtlcm5lbCB0aHJlYWQsIHNvIGl0J3MgYSBnb29kIHRhcmdldCBmb3IgY29uY3VycmVudCBmdXp6aW5nLlxuXG5JJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGBtbS9jb21wYWN0aW9uLmNgIHRvIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBlbnRyeSBwb2ludHMsIGZvY3VzaW5nIG9uIHRoZSBleHBvcnRlZCAobm9uLXN0YXRpYykgZnVuY3Rpb25zLCBwYXJ0aWN1bGFybHkgdGhvc2UgdGhhdCBpbnRlcmFjdCB3aXRoIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgYW5kIHRoZSBvdGhlciBtb2RpZmllZCBmdW5jdGlvbnMuIFRoZSBnb2FsIGlzIHRvIG1heGltaXplIHRoZSBjaGFuY2Ugb2YgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBvciBvdGhlciBiZWhhdmlvcmFsIGFub21hbGllcyB0aGF0IGNvdWxkIGJlIGludHJvZHVjZWQgYnkgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTEyMSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjEyLjcxNjcyMTU2MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzQ5MDczMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oW2Etel9dKyApK3pvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcXFxcKFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9MjQ5Nz1ib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU0NC0gKi9cXG5tbS9jb21wYWN0aW9uLmM6MjU0NTp1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxubW0vY29tcGFjdGlvbi5jLTI1NDYtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLFxcbi0tXFxubW0vaW50ZXJuYWwuaD0xNjM0PXN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3Bpbl90cnlsb2NrKHZvaWQpXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTE2NTYtXFxubW0vaW50ZXJuYWwuaDoxNjU3OnVuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcXG5tbS9pbnRlcm5hbC5oLTE2NTgtXFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG9yZGVyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNToyMC40NjU4MDEzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MDI2NTc2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIHN1bW1hcml6ZWQsIGFzc3VtaW5nIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBjb250ZXh0OlxuXG4qKkFuYWx5emluZyB0aGUgYGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzYCBWYXJpYWJsZSoqXG5cbkFscmlnaHQsIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgLiBHaXZlbiB3aGF0IEkga25vdyBhYm91dCB0aGlzIHN5c3RlbSwgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmU6IHdoYXQgaXMgdGhlIGNvbnRleHQgb2YgdGhpcyB2YXJpYWJsZT8gSXMgaXQgYSBjb25maWd1cmF0aW9uIHNldHRpbmcsIGEgZmxhZyBpbiBhIGRhdGEgbW9kZWwsIG9yIHBlcmhhcHMgYSBjb25zdGFudCB1c2VkIGluIGEgc3BlY2lmaWMgY2FsY3VsYXRpb24gb3IgcnVsZT8gVGhlIFwiaHVnZVwiIHBhcnQgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgcG90ZW50aWFsIHBlcmZvcm1hbmNlIG9yIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgd2hpbGUgXCJhbm9uXCIgaW1wbGllcyB3ZSdyZSBkZWFsaW5nIHdpdGggYW5vbnltb3VzIG9yZGVycywgbGlrZWx5IHBvaW50aW5nIHRvIHNvbWUgaW50ZXJlc3RpbmcgZGVzaWduIGRlY2lzaW9ucyBhbmQgdnVsbmVyYWJpbGl0aWVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB2YXJpYWJsZSBpcyB1c2VkLCBhbmQgd2hhdCBpdCBjb250cm9scy4gSSdsbCBuZWVkIHRvIGtub3c6XG4qICAgV2hhdCBkb2VzIFwiaHVnZVwiIGFjdHVhbGx5IG1lYW4gaW4gdGhpcyBzeXN0ZW0/IElzIGl0IGJhc2VkIG9uIG9yZGVyIHNpemUsIHZhbHVlLCBvciBzb21lIG90aGVyIG1ldHJpYz9cbiogICBXaHkgYXJlIHdlIGFsd2F5cyBkZWFsaW5nIHdpdGggaXQsIHdoYXQncyB0aGUgbG9naWMgYmVoaW5kIHRoZSBcImFsd2F5c1wiIHBhcnQ/XG4qICAgQXJlIHRoZXJlIGFueSBvYnZpb3VzIHNpZGUgZWZmZWN0cywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIHNlY3VyaXR5IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCB0aGlzP1xuKiAgIEhvdyBkb2VzIHRoaXMgdmFyaWFibGUgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZC9vciBvdGhlciBjb25maWd1cmF0aW9ucz8gSSBoYXZlIHRvIGxvb2sgYXQgdGhlIHN5c3RlbSBvdmVyYWxsLCBhbmQgdW5kZXJzdGFuZCB0aGUgbG9naWMgdG8gYmUgYWJsZSB0byBtYWtlIGluZm9ybWVkIGRlY2lzaW9ucyBhbmQgcHJlZGljdGlvbnMuXG5JIG5lZWQgdG8ga25vdyAqZXZlcnl0aGluZyogYmVmb3JlIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGlzIGEgZ29vZCBvciBhIGJhZCB0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI1NCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjI0LjA2ODQ2MDg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODQxNDA3NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9hbm9uX29yZGVyc19hbHdheXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTg1PWV4dGVybiB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE4NjpleHRlcm4gdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cztcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xODctZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzIwPXVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzI5LVxcdGlmICh0eXBlICE9IFRWQV9GT1JDRURfQ09MTEFQU0UgXFx1MDAyNlxcdTAwMjYgdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzMwOlxcdFxcdHVuc2lnbmVkIGxvbmcgbWFzayA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzMxLVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTg1PXN0YXRpYyBpbmxpbmUgaW50IGNvbXBhY3RfaHBhZ2Vfb3JkZXIodm9pZClcXG5tbS9jb21wYWN0aW9uLmMtODYte1xcbm1tL2NvbXBhY3Rpb24uYzo4NzpcXHR1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XFxubW0vY29tcGFjdGlvbi5jLTg4LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTgyOT1zdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtODQyLVxcdGlmIChpc192aWFfY29tcGFjdF9tZW1vcnkodGFyZ2V0X29yZGVyKSBcXHUwMDI2XFx1MDAyNiBvcmRlciBcXHUwMDNlPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9jb21wYWN0aW9uLmM6ODQzOlxcdCAgICBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpKVxcbm1tL2NvbXBhY3Rpb24uYy04NDQtXFx0XFx0cmV0dXJuIHRydWU7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MjU0NT11bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU1MS1cXG5tbS9jb21wYWN0aW9uLmM6MjU1MjpcXHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcXHUwMDI2XFx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcXG5tbS9jb21wYWN0aW9uLmMtMjU1My1cXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXMgPSAwO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz04Nz1zdGF0aWMgc3RydWN0IHNocmlua2VyICpodWdlX3plcm9fZm9saW9fc2hyaW5rZXI7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTg5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6OTA6dW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyBfX3JlYWRfbW9zdGx5O1xcbm1tL2h1Z2VfbWVtb3J5LmMtOTEtdW5zaWduZWQgbG9uZyBodWdlX2Fub25fb3JkZXJzX21hZHZpc2UgX19yZWFkX21vc3RseTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjQwPXN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02NDUtXFxubW0vaHVnZV9tZW1vcnkuYzo2NDY6XFx0aWYgKHRlc3RfYml0KG9yZGVyLCBcXHUwMDI2aHVnZV9hbm9uX29yZGVyc19hbHdheXMpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQ3LVxcdFxcdG91dHB1dCA9IFxcXCJbYWx3YXlzXSBpbmhlcml0IG1hZHZpc2UgbmV2ZXJcXFwiO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz02NTg9c3RhdGljIGJvb2wgc2V0X2Fub25fZW5hYmxlZF9tb2RlKGludCBvcmRlciwgZW51bSBhbm9uX2VuYWJsZWRfbW9kZSBtb2RlKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy02NjAtXFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgKmVuYWJsZWRfb3JkZXJzW10gPSB7XFxubW0vaHVnZV9tZW1vcnkuYzo2NjE6XFx0XFx0XFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzLFxcbm1tL2h1Z2VfbWVtb3J5LmMtNjYyLVxcdFxcdFxcdTAwMjZodWdlX2Fub25fb3JkZXJzX2luaGVyaXQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTExMzY9c3RhdGljIGludCBfX2luaXQgc2V0dXBfdGhwX2Fub24oY2hhciAqc3RyKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMTQ3LVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTE0ODpcXHRhbHdheXMgPSBodWdlX2Fub25fb3JkZXJzX2Fsd2F5cztcXG5tbS9odWdlX21lbW9yeS5jLTExNDktXFx0bWFkdmlzZSA9IGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwOC1cXG5tbS9odWdlX21lbW9yeS5jOjEyMDk6XFx0aHVnZV9hbm9uX29yZGVyc19hbHdheXMgPSBhbHdheXM7XFxubW0vaHVnZV9tZW1vcnkuYy0xMjEwLVxcdGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZSA9IG1hZHZpc2U7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmM9NTAyPXN0YXRpYyBpbmxpbmUgYm9vbCBhbm9uX2hwYWdlX2VuYWJsZWQodm9pZClcXG5tbS9raHVnZXBhZ2VkLmMtNTAzLXtcXG5tbS9raHVnZXBhZ2VkLmM6NTA0OlxcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpKVxcbm1tL2todWdlcGFnZWQuYy01MDUtXFx0XFx0cmV0dXJuIHRydWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjI1Ljk1MjYwNzQ5MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMTA0NDQ2NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0aS1TaXplIFRIUCBNZW1vcnkgQ29tcGFjdGlvbiBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSBkaWdnaW5nIGludG8gdGhlIG5pdHR5LWdyaXR0eSBvZiBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IGhvdyB3ZSBoYW5kbGUgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFsbG9jYXRpb24gZHVyaW5nIGNvbXBhY3Rpb24gYW5kIHZtc2NhbiBvcGVyYXRpb25zLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGUgY29yZSBvZiB0aGUgY2hhbmdlcyByZXZvbHZlIGFyb3VuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIGRlY2lzaW9uLW1ha2luZyBwcm9jZXNzZXMgaW4gYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCwgYHBnZGF0X2JhbGFuY2VkYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSBldmVyLXByZXNlbnQgYGtjb21wYWN0ZGAuIFRoYXQncyB3aGVyZSB0aGUgcmVhbCBtYWdpYyBoYXBwZW5zLCBvcHRpbWl6aW5nIHRoZSBsYXlvdXQgb2YgbWVtb3J5IHNvIGFsbG9jYXRpb24gY2FuIGJlIHBlcmZvcm1lZCBmYXN0ZXIuXG5cblRoZSBrZXkgY29uZmlndXJhdGlvbiBwcmVyZXF1aXNpdGUgaGVyZSBpcywgb2J2aW91c2x5LCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBUaGF0J3MgdGhlIGJhc2VsaW5lIGZvciB0aGlzIHdob2xlIHRoaW5nIHRvIGV2ZW4gYmUgcmVsZXZhbnQuIEdpdmVuIEknbSB3ZWxsLXZlcnNlZCBpbiBtZW1vcnkgbWFuYWdlbWVudCwgSSdsbCBuZWVkIHRvIGp1bXAgaW50byBgbW0vY29tcGFjdGlvbi5jYCBhbmQgZGlnIGludG8gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYWx0ZXJlZCB0byBmdWxseSBncmFzcCB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGUgbmV3IGxvZ2ljLiBOZWVkIHRvIHNlZSBob3cgdGhleSd2ZSBjaGFuZ2VkIGFuZCB3aGF0IHRyYWRlLW9mZnMgd2VyZSBjb25zaWRlcmVkLiBHb3R0YSB1bmRlcnN0YW5kIHRoZSBzdWJ0bGV0aWVzIG9mIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCAtIHdoYXQgZXhhY3RseSBkb2VzIGl0IGNhcHR1cmUsIGFuZCBob3cgZG9lcyBpdCByZWZpbmUgb3VyIHVuZGVyc3RhbmRpbmcgb2YgZnJlZSBtZW1vcnkgZm9yIFRIUCBwdXJwb3Nlcz8gVGhpcyB3aWxsIHRha2UgYSBkZWVwIGRpdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2NzgsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTozMC4yNjMwNTQyNDNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzNjQyNDU5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ09NUEFDVElPTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9MTExPWNvbXBhY3RfbWVtb3J5XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3QtMTEzLVxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdDoxMTQ6QXZhaWxhYmxlIG9ubHkgd2hlbiBDT05GSUdfQ09NUEFDVElPTiBpcyBzZXQuIFdoZW4gMSBpcyB3cml0dGVuIHRvIHRoZSBmaWxlLFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL3ZtLnJzdC0xMTUtYWxsIHpvbmVzIGFyZSBjb21wYWN0ZWQgc3VjaCB0aGF0IGZyZWUgbWVtb3J5IGlzIGF2YWlsYWJsZSBpbiBjb250aWd1b3VzXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q9MTQyPWNvbXBhY3RfdW5ldmljdGFibGVfYWxsb3dlZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTE0NC1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC92bS5yc3Q6MTQ1OkF2YWlsYWJsZSBvbmx5IHdoZW4gQ09ORklHX0NPTVBBQ1RJT04gaXMgc2V0LiBXaGVuIHNldCB0byAxLCBjb21wYWN0aW9uIGlzXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwvdm0ucnN0LTE0Ni1hbGxvd2VkIHRvIGV4YW1pbmUgdGhlIHVuZXZpY3RhYmxlIGxydSAobWxvY2tlZCBwYWdlcykgZm9yIHBhZ2VzIHRvIGNvbXBhY3QuXFxuLS1cXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaD0yNzQ9ZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdO1xcbmFyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGd0YWJsZS5oLTI3NS1cXG5hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BndGFibGUuaDoyNzY6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgtMjc3LSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSXFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWc9Mjc9Q09ORklHX1BSRUVNUFQ9eVxcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAxX2RlZmNvbmZpZzoyODojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL2F4czEwMV9kZWZjb25maWctMjktQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19kZWZjb25maWc9MjY9Q09ORklHX1BSRUVNUFQ9eVxcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX2RlZmNvbmZpZzoyNzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19kZWZjb25maWctMjgtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnPTI2PUNPTkZJR19QUkVFTVBUPXlcXG5hcmNoL2FyYy9jb25maWdzL2F4czEwM19zbXBfZGVmY29uZmlnOjI3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvYXhzMTAzX3NtcF9kZWZjb25maWctMjgtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfZGVmY29uZmlnPTE4PUNPTkZJR19NT0RVTEVTPXlcXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfZGVmY29uZmlnLTE5LSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfZGVmY29uZmlnOjIwOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19kZWZjb25maWctMjEtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FyYy9jb25maWdzL2hhcHNfaHNfc21wX2RlZmNvbmZpZz0yMT1DT05GSUdfTU9EVUxFUz15XFxuYXJjaC9hcmMvY29uZmlncy9oYXBzX2hzX3NtcF9kZWZjb25maWctMjItIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19zbXBfZGVmY29uZmlnOjIzOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvaGFwc19oc19zbXBfZGVmY29uZmlnLTI0LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9hcmMvY29uZmlncy9oc2RrX2RlZmNvbmZpZz0yND1DT05GSUdfUFJFRU1QVD15XFxuYXJjaC9hcmMvY29uZmlncy9oc2RrX2RlZmNvbmZpZzoyNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL2hzZGtfZGVmY29uZmlnLTI2LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9hcmMvY29uZmlncy9uc2ltXzcwMF9kZWZjb25maWc9MjI9Q09ORklHX01PRFVMRVM9eVxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbV83MDBfZGVmY29uZmlnLTIzLSMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL25zaW1fNzAwX2RlZmNvbmZpZzoyNDojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL25zaW1fNzAwX2RlZmNvbmZpZy0yNS1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbW9zY2lfZGVmY29uZmlnPTIyPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVxcXCJuc2ltb3NjaVxcXCJcXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2RlZmNvbmZpZzoyMzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2RlZmNvbmZpZy0yNC1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbW9zY2lfaHNfZGVmY29uZmlnPTIyPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVxcXCJuc2ltb3NjaV9oc1xcXCJcXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZzoyMzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FyYy9jb25maWdzL25zaW1vc2NpX2hzX2RlZmNvbmZpZy0yNC1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbW9zY2lfaHNfc21wX2RlZmNvbmZpZz0yMD1DT05GSUdfUFJFRU1QVD15XFxuYXJjaC9hcmMvY29uZmlncy9uc2ltb3NjaV9oc19zbXBfZGVmY29uZmlnOjIxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJjL2NvbmZpZ3MvbnNpbW9zY2lfaHNfc21wX2RlZmNvbmZpZy0yMi1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJjL2NvbmZpZ3MvdGIxMHhfZGVmY29uZmlnPTMwPUNPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15XFxuYXJjaC9hcmMvY29uZmlncy90YjEweF9kZWZjb25maWc6MzE6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9hcmMvY29uZmlncy90YjEweF9kZWZjb25maWctMzItQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWc9MzY9Q09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORUQ9eVxcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c0X2RlZmNvbmZpZy0zNy0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNF9kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzRfZGVmY29uZmlnLTM5LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnPTQzPUNPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEPXlcXG5hcmNoL2FybS9jb25maWdzL2FzcGVlZF9nNV9kZWZjb25maWctNDQtIyBDT05GSUdfQ09NUEFUX0JSSyBpcyBub3Qgc2V0XFxuYXJjaC9hcm0vY29uZmlncy9hc3BlZWRfZzVfZGVmY29uZmlnOjQ1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvYXJtL2NvbmZpZ3MvYXNwZWVkX2c1X2RlZmNvbmZpZy00Ni1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvbXZlYnVfdjdfZGVmY29uZmlnPTI1PUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZzoyNjojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL212ZWJ1X3Y3X2RlZmNvbmZpZy0yNy1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvYXJtL2NvbmZpZ3MvcHhhX2RlZmNvbmZpZz00Nz1DT05GSUdfU0xVQl9USU5ZPXlcXG5hcmNoL2FybS9jb25maWdzL3B4YV9kZWZjb25maWc6NDg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9hcm0vY29uZmlncy9weGFfZGVmY29uZmlnLTQ5LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9hcm0vY29uZmlncy9zYW1hN19kZWZjb25maWc9Mzk9Q09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15XFxuLS1cXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZy00Mi0jIENPTkZJR19TV0FQIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZzo0MzojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL2FybS9jb25maWdzL3NhbWE3X2RlZmNvbmZpZy00NC1DT05GSUdfQ01BPXlcXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZz00ND1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL2FtaWdhX2RlZmNvbmZpZzo0NTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9hbWlnYV9kZWZjb25maWctNDYtQ09ORklHX0RNQVBPT0xfVEVTVD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnPTQwPUNPTkZJR19CSU5GTVRfTUlTQz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXBvbGxvX2RlZmNvbmZpZzo0MTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9hcG9sbG9fZGVmY29uZmlnLTQyLUNPTkZJR19ETUFQT09MX1RFU1Q9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnPTQ3PUNPTkZJR19CSU5GTVRfTUlTQz1tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvYXRhcmlfZGVmY29uZmlnOjQ4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbTY4ay9jb25maWdzL2F0YXJpX2RlZmNvbmZpZy00OS1DT05GSUdfRE1BUE9PTF9URVNUPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZz0zNz1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL2J2bWU2MDAwX2RlZmNvbmZpZzozODojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9idm1lNjAwMF9kZWZjb25maWctMzktQ09ORklHX0RNQVBPT0xfVEVTVD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc9Mzk9Q09ORklHX0JJTkZNVF9NSVNDPW1cXG5hcmNoL202OGsvY29uZmlncy9ocDMwMF9kZWZjb25maWc6NDA6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9tNjhrL2NvbmZpZ3MvaHAzMDBfZGVmY29uZmlnLTQxLUNPTkZJR19ETUFQT09MX1RFU1Q9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZz0zOD1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL21hY19kZWZjb25maWc6Mzk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9tNjhrL2NvbmZpZ3MvbWFjX2RlZmNvbmZpZy00MC1DT05GSUdfRE1BUE9PTF9URVNUPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZz01OD1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL211bHRpX2RlZmNvbmZpZzo1OTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9tdWx0aV9kZWZjb25maWctNjAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTQ3X2RlZmNvbmZpZz0zNj1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnOjM3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbTY4ay9jb25maWdzL212bWUxNDdfZGVmY29uZmlnLTM4LUNPTkZJR19ETUFQT09MX1RFU1Q9bVxcbi0tXFxuYXJjaC9tNjhrL2NvbmZpZ3MvbXZtZTE2eF9kZWZjb25maWc9Mzc9Q09ORklHX0JJTkZNVF9NSVNDPW1cXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZzozODojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL202OGsvY29uZmlncy9tdm1lMTZ4X2RlZmNvbmZpZy0zOS1DT05GSUdfRE1BUE9PTF9URVNUPW1cXG4tLVxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWc9Mzg9Q09ORklHX0JJTkZNVF9NSVNDPW1cXG5hcmNoL202OGsvY29uZmlncy9xNDBfZGVmY29uZmlnOjM5OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbTY4ay9jb25maWdzL3E0MF9kZWZjb25maWctNDAtQ09ORklHX0RNQVBPT0xfVEVTVD1tXFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zX2RlZmNvbmZpZz0zND1DT05GSUdfQklORk1UX01JU0M9bVxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnOjM1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbTY4ay9jb25maWdzL3N1bjNfZGVmY29uZmlnLTM2LUNPTkZJR19VU0VSRkFVTFRGRD15XFxuLS1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc9MzQ9Q09ORklHX0JJTkZNVF9NSVNDPW1cXG5hcmNoL202OGsvY29uZmlncy9zdW4zeF9kZWZjb25maWc6MzU6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9tNjhrL2NvbmZpZ3Mvc3VuM3hfZGVmY29uZmlnLTM2LUNPTkZJR19ETUFQT09MX1RFU1Q9bVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvYXRoMjVfZGVmY29uZmlnPTIzPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWctMjQtIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2F0aDI1X2RlZmNvbmZpZzoyNTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9hdGgyNV9kZWZjb25maWctMjYtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZz0yOD1DT05GSUdfTU9EVUxFUz15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy0zMC0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZzozMTojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9jaTIwX2RlZmNvbmZpZy0zMi1DT05GSUdfQ01BPXlcXG4tLVxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTAwMC1uZW9fZGVmY29uZmlnPTI3PUNPTkZJR19NT0RVTEVTPXlcXG5hcmNoL21pcHMvY29uZmlncy9jdTEwMDAtbmVvX2RlZmNvbmZpZy0yOC0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWc6Mjk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxMDAwLW5lb19kZWZjb25maWctMzAtQ09ORklHX0NNQT15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy9jdTE4MzAtbmVvX2RlZmNvbmZpZz0yNz1DT05GSUdfTU9EVUxFUz15XFxuYXJjaC9taXBzL2NvbmZpZ3MvY3UxODMwLW5lb19kZWZjb25maWctMjgtIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTgzMC1uZW9fZGVmY29uZmlnOjI5OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL2N1MTgzMC1uZW9fZGVmY29uZmlnLTMwLUNPTkZJR19DTUE9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWc9MzA9Q09ORklHX01JUFNfQ01ETElORV9GUk9NX0JPT1RMT0FERVI9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3Mvb21lZ2EycF9kZWZjb25maWctMzItIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL29tZWdhMnBfZGVmY29uZmlnOjMzOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL29tZWdhMnBfZGVmY29uZmlnLTM0LUNPTkZJR19ORVQ9eVxcbi0tXFxuYXJjaC9taXBzL2NvbmZpZ3MvcnQzMDV4X2RlZmNvbmZpZz0yMz1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXlcXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnLTI0LSMgQ09ORklHX0NPUkVEVU1QIGlzIG5vdCBzZXRcXG5hcmNoL21pcHMvY29uZmlncy9ydDMwNXhfZGVmY29uZmlnOjI1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvbWlwcy9jb25maWdzL3J0MzA1eF9kZWZjb25maWctMjYtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy92b2NvcmUyX2RlZmNvbmZpZz0zMD1DT05GSUdfTUlQU19DTURMSU5FX0ZST01fQk9PVExPQURFUj15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy92b2NvcmUyX2RlZmNvbmZpZy0zMi0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3Mvdm9jb3JlMl9kZWZjb25maWctMzQtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZz0yNT1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXlcXG5hcmNoL21pcHMvY29uZmlncy94d2F5X2RlZmNvbmZpZy0yNi0jIENPTkZJR19DT1JFRFVNUCBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWc6Mjc6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9taXBzL2NvbmZpZ3MveHdheV9kZWZjb25maWctMjgtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnPTM2PUNPTkZJR19CSU5GTVRfTUlTQz1tXFxuYXJjaC9wYXJpc2MvY29uZmlncy9nZW5lcmljLTY0Yml0X2RlZmNvbmZpZy0zNy0jIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXRcXG5hcmNoL3BhcmlzYy9jb25maWdzL2dlbmVyaWMtNjRiaXRfZGVmY29uZmlnOjM4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvcGFyaXNjL2NvbmZpZ3MvZ2VuZXJpYy02NGJpdF9kZWZjb25maWctMzktQ09ORklHX01FTU9SWV9GQUlMVVJFPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9ha2Vib25vX2RlZmNvbmZpZz0xOT1DT05GSUdfSVJRX0FMTF9DUFVTPXlcXG5hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvYWtlYm9ub19kZWZjb25maWc6MjA6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2FrZWJvbm9fZGVmY29uZmlnLTIxLSMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldFxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWljcm93YXR0X2RlZmNvbmZpZz0zMD1DT05GSUdfUFBDXzRLX1BBR0VTPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21pY3Jvd2F0dF9kZWZjb25maWctMzMtIyBDT05GSUdfQ09SRURVTVAgaXMgbm90IHNldFxcbmFyY2gvcG93ZXJwYy9jb25maWdzL21pY3Jvd2F0dF9kZWZjb25maWc6MzQ6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWljcm93YXR0X2RlZmNvbmZpZy0zNS0jIENPTkZJR19NSUdSQVRJT04gaXMgbm90IHNldFxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnPTIzPUNPTkZJR19DTURMSU5FPVxcXCJjb25zb2xlPXR0eVMwLDk2MDAgaXA9ZGhjcCByb290PS9kZXYvbmZzXFxcIlxcbmFyY2gvcG93ZXJwYy9jb25maWdzL212bWU1MTAwX2RlZmNvbmZpZy0yNC0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXZtZTUxMDBfZGVmY29uZmlnOjI1OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvcG93ZXJwYy9jb25maWdzL212bWU1MTAwX2RlZmNvbmZpZy0yNi1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWc9MzU9Q09ORklHX0JJTkZNVF9NSVNDPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWctMzctIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAgaXMgbm90IHNldFxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWc6Mzg6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZy0zOS1DT05GSUdfTkVUPXlcXG4tLVxcbmFyY2gvcG93ZXJwYy9jb25maWdzL3NraXJvb3RfZGVmY29uZmlnPTU2PUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eVxcbi0tXFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2tpcm9vdF9kZWZjb25maWctNTgtIyBDT05GSUdfTVFfSU9TQ0hFRF9LWUJFUiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2tpcm9vdF9kZWZjb25maWc6NTk6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC9wb3dlcnBjL2NvbmZpZ3Mvc2tpcm9vdF9kZWZjb25maWctNjAtIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXRcXG4tLVxcbmFyY2gvdW0vY29uZmlncy9pMzg2X2RlZmNvbmZpZzoxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvdW0vY29uZmlncy9pMzg2X2RlZmNvbmZpZy0yLUNPTkZJR19CSU5GTVRfTUlTQz1tXFxuLS1cXG5hcmNoL3VtL2NvbmZpZ3MveDg2XzY0X2RlZmNvbmZpZzoxOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gvdW0vY29uZmlncy94ODZfNjRfZGVmY29uZmlnLTItQ09ORklHX0JJTkZNVF9NSVNDPW1cXG4tLVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvYXVkaW9fa2M3MDVfZGVmY29uZmlnPTMzPUNPTkZJR19CVUlMVElOX0RUQl9OQU1FPVxcXCJrYzcwNVxcXCJcXG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZzozNDojIENPTkZJR19DT01QQUNUSU9OIGlzIG5vdCBzZXRcXG5hcmNoL3h0ZW5zYS9jb25maWdzL2F1ZGlvX2tjNzA1X2RlZmNvbmZpZy0zNS0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL2NhZGVuY2VfY3NwX2RlZmNvbmZpZz0zNz1DT05GSUdfQlVJTFRJTl9EVEJfTkFNRT1cXFwiY3NwXFxcIlxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvY2FkZW5jZV9jc3BfZGVmY29uZmlnOjM4OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvY2FkZW5jZV9jc3BfZGVmY29uZmlnLTM5LUNPTkZJR19YVEZQR0FfTENEPXlcXG4tLVxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc9MzI9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XFxcImtjNzA1XFxcIlxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvZ2VuZXJpY19rYzcwNV9kZWZjb25maWc6MzM6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC94dGVuc2EvY29uZmlncy9nZW5lcmljX2tjNzA1X2RlZmNvbmZpZy0zNC0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL3NtcF9seDIwMF9kZWZjb25maWc9MzY9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XFxcImx4MjAwbXhcXFwiXFxuYXJjaC94dGVuc2EvY29uZmlncy9zbXBfbHgyMDBfZGVmY29uZmlnOjM3OiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gveHRlbnNhL2NvbmZpZ3Mvc21wX2x4MjAwX2RlZmNvbmZpZy0zOC0jIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnPTMxPUNPTkZJR19NT0RVTEVfVU5MT0FEPXlcXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnLTMyLSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcXG5hcmNoL3h0ZW5zYS9jb25maWdzL3ZpcnRfZGVmY29uZmlnOjMzOiMgQ09ORklHX0NPTVBBQ1RJT04gaXMgbm90IHNldFxcbmFyY2gveHRlbnNhL2NvbmZpZ3MvdmlydF9kZWZjb25maWctMzQtQ09ORklHX05FVD15XFxuLS1cXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc9MzI9Q09ORklHX0JVSUxUSU5fRFRCX05BTUU9XFxcImtjNzA1XFxcIlxcbi0tXFxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnLTM0LSMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXRcXG5hcmNoL3h0ZW5zYS9jb25maWdzL3hpcF9rYzcwNV9kZWZjb25maWc6MzU6IyBDT05GSUdfQ09NUEFDVElPTiBpcyBub3Qgc2V0XFxuYXJjaC94dGVuc2EvY29uZmlncy94aXBfa2M3MDVfZGVmY29uZmlnLTM2LUNPTkZJR19ORVQ9eVxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9ODQ9c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTg4LVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjg5OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTkwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTMwPXN0YXRpYyBpbmxpbmUgdm9pZCB3YWtldXBfa2NvbXBhY3RkKHBnX2RhdGFfdCAqcGdkYXQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzQtXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTM1OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEzNi1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMzc9c3RydWN0IG5vZGU7XFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTM4OiNpZiBkZWZpbmVkKENPTkZJR19DT01QQUNUSU9OKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMzktZXh0ZXJuIGludCBjb21wYWN0aW9uX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTQ5PXN0YXRpYyBpbmxpbmUgdm9pZCBjb21wYWN0aW9uX3VucmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTE1MS19XFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTUyOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiBcXHUwMDI2XFx1MDAyNiBDT05GSUdfU1lTRlMgXFx1MDAyNlxcdTAwMjYgQ09ORklHX05VTUEgKi9cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xNTMtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcC5oPTM4MT1zdGF0aWMgaW5saW5lIGJvb2wgZ2ZwX2NvbXBhY3Rpb25fYWxsb3dlZChnZnBfdCBnZnBfbWFzaylcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTM4Mi17XFxuaW5jbHVkZS9saW51eC9nZnAuaDozODM6XFx0cmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFxcdTAwMjZcXHUwMDI2IChnZnBfbWFzayBcXHUwMDI2IF9fR0ZQX0lPKTtcXG5pbmNsdWRlL2xpbnV4L2dmcC5oLTM4NC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTk3OT1zdHJ1Y3Qgem9uZSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTExMjctXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTI4OiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTEyOS1cXHQvKiBwZm4gd2hlcmUgY29tcGFjdGlvbiBmcmVlIHNjYW5uZXIgc2hvdWxkIHN0YXJ0ICovXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTExMzYtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxMTM3OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTEzOC1cXHQvKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xMTQ4LVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTE0OTojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTExNTAtXFx0LyogU2V0IHRvIHRydWUgd2hlbiB0aGUgUEdfbWlncmF0ZV9za2lwIGJpdHMgc2hvdWxkIGJlIGNsZWFyZWQgKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmg9MTQ3OD10eXBlZGVmIHN0cnVjdCBwZ2xpc3RfZGF0YSB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1MzctXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTM4OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTUzOS1cXHRpbnQga2NvbXBhY3RkX21heF9vcmRlcjtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmg9OTA9dm9pZCBjbGVhcl9wZm5ibG9ja19iaXQoY29uc3Qgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgcGZuLFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaC05My0vKiBEZWNsYXJhdGlvbnMgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgZmxhZ3MuIFNlZSBtbS9wYWdlX2FsbG9jLmMgKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oOjk0OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmgtOTUtI2RlZmluZSBnZXRfcGFnZWJsb2NrX3NraXAocGFnZSkgXFxcXFxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdlYmxvY2stZmxhZ3MuaD0xMDk9c3RhdGljIGlubGluZSB2b2lkIHNldF9wYWdlYmxvY2tfc2tpcChzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZWJsb2NrLWZsYWdzLmgtMTExLX1cXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oOjExMjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2VibG9jay1mbGFncy5oLTExMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaD04MjY9c3RydWN0IHRhc2tfc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMzEyLVxcbmluY2x1ZGUvbGludXgvc2NoZWQuaDoxMzEzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvbGludXgvc2NoZWQuaC0xMzE0LVxcdHN0cnVjdCBjYXB0dXJlX2NvbnRyb2xcXHRcXHQqY2FwdHVyZV9jb250cm9sO1xcbi0tXFxuaW5jbHVkZS9saW51eC92bV9ldmVudF9pdGVtLmg9MzQ9ZW51bSB2bV9ldmVudF9pdGVtIHsgUEdQR0lOLCBQR1BHT1VULCBQU1dQSU4sIFBTV1BPVVQsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC02NC0jZW5kaWZcXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaDo2NTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5pbmNsdWRlL2xpbnV4L3ZtX2V2ZW50X2l0ZW0uaC02Ni1cXHRcXHRDT01QQUNUTUlHUkFURV9TQ0FOTkVELCBDT01QQUNURlJFRV9TQ0FOTkVELFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oPTY3PURFRklORV9FVkVOVChtbV9jb21wYWN0aW9uX2lzb2xhdGVfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25fZmFzdF9pc29sYXRlX2ZyZWVwYWdlcyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC03Ny1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6Nzg6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTc5LVRSQUNFX0VWRU5UKG1tX2NvbXBhY3Rpb25fbWlncmF0ZXBhZ2VzLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oPTIzNT1JRl9IQVZFX1ZNX0RST1BQQUJMRShWTV9EUk9QUEFCTEUsXFx0XFxcImRyb3BwYWJsZVxcXCJcXHQpXFx0XFx0XFxcXFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvbW1mbGFncy5oLTI0Mi1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9tbWZsYWdzLmg6MjQzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL21tZmxhZ3MuaC0yNDQtI2RlZmluZSBDT01QQUNUSU9OX1NUQVRVU1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oPTE2Nj1UUkFDRV9FVkVOVChza2lwX3Rhc2tfcmVhcGluZyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL29vbS5oLTE4MS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9vb20uaDoxODI6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmgtMTgzLVRSQUNFX0VWRU5UKGNvbXBhY3RfcmV0cnksXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9vb20uaC0yMTgtKTtcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9vb20uaDoyMTk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OICovXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvb29tLmgtMjIwLSNlbmRpZlxcbi0tXFxua2VybmVsL3NjaGVkL2NvcmUuYz00NTYzPXN0YXRpYyB2b2lkIF9fc2NoZWRfZm9yayh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4tLVxcbmtlcm5lbC9zY2hlZC9jb3JlLmMtNDYwOC1cXG5rZXJuZWwvc2NoZWQvY29yZS5jOjQ2MDk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxua2VybmVsL3NjaGVkL2NvcmUuYy00NjEwLVxcdHAtXFx1MDAzZWNhcHR1cmVfY29udHJvbCA9IE5VTEw7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzAtXFxubW0vY29tcGFjdGlvbi5jOjMxOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0zMi0vKlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTYxPXN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTYzLVxcbm1tL2NvbXBhY3Rpb24uYzo2NDojaWYgZGVmaW5lZCBDT05GSUdfQ09NUEFDVElPTiB8fCBkZWZpbmVkIENPTkZJR19DTUFcXG5tbS9jb21wYWN0aW9uLmMtNjUtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTAyPXN0YXRpYyB1bnNpZ25lZCBsb25nIHJlbGVhc2VfZnJlZV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZyZWVwYWdlcylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0xMjYtXFxubW0vY29tcGFjdGlvbi5jOjEyNzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMTI4LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTUwMT1zdGF0aWMgYm9vbCB0ZXN0X2FuZF9zZXRfc2tpcChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IHBhZ2UgKnBhZ2UpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtNTA0LX1cXG5tbS9jb21wYWN0aW9uLmM6NTA1OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL2NvbXBhY3Rpb24uYy01MDYtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MTM1Mz1pc29sYXRlX21pZ3JhdGVwYWdlc19yYW5nZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTM4OC1cXG5tbS9jb21wYWN0aW9uLmM6MTM4OTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xcbm1tL2NvbXBhY3Rpb24uYzoxMzkwOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL2NvbXBhY3Rpb24uYy0xMzkxLVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTM0MTA9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxcbm1tL2NvbXBhY3Rpb24uYy0zNDExLVxcbm1tL2NvbXBhY3Rpb24uYzozNDEyOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbi0tXFxubW0vaW50ZXJuYWwuaD04MDI9c3RhdGljIGlubGluZSB2b2lkIGluaXRfY29tcG91bmRfdGFpbChzdHJ1Y3QgcGFnZSAqdGFpbCxcXG4tLVxcbm1tL2ludGVybmFsLmgtODEwLVxcbm1tL2ludGVybmFsLmg6ODExOiNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxcbm1tL2ludGVybmFsLmgtODEyLVxcbi0tXFxubW0vaW50ZXJuYWwuaD04ODQ9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsXFxuLS1cXG5tbS9pbnRlcm5hbC5oLTg4Ni1cXG5tbS9pbnRlcm5hbC5oOjg4NzojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gfHwgQ09ORklHX0NNQSAqL1xcbm1tL2ludGVybmFsLmgtODg4LVxcbi0tXFxubW0vbW1faW5pdC5jPTEzMzE9c3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL21tX2luaXQuYy0xMzczLVxcbm1tL21tX2luaXQuYzoxMzc0OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL21tX2luaXQuYy0xMzc1LXN0YXRpYyB2b2lkIHBnZGF0X2luaXRfa2NvbXBhY3RkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS9tbV9pbml0Lmg9Mzc9dm9pZCBtZW1tYXBfaW5pdF9yYW5nZSh1bnNpZ25lZCBsb25nIHNpemUsIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgem9uZSxcXG4tLVxcbm1tL21tX2luaXQuaC00Mi1cXG5tbS9tbV9pbml0Lmg6NDM6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXFxubW0vbW1faW5pdC5oLTQ0LS8qIEZyZWUgd2hvbGUgcGFnZWJsb2NrIGFuZCBzZXQgaXRzIG1pZ3JhdGlvbiB0eXBlIHRvIE1JR1JBVEVfQ01BLiAqL1xcbi0tXFxubW0vb29tX2tpbGwuYz00NTY9c3RhdGljIHZvaWQgZHVtcF9oZWFkZXIoc3RydWN0IG9vbV9jb250cm9sICpvYylcXG4tLVxcbm1tL29vbV9raWxsLmMtNDYwLVxcdFxcdFxcdGN1cnJlbnQtXFx1MDAzZXNpZ25hbC1cXHUwMDNlb29tX3Njb3JlX2Fkaik7XFxubW0vb29tX2tpbGwuYzo0NjE6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSBcXHUwMDI2XFx1MDAyNiBvYy1cXHUwMDNlb3JkZXIpXFxubW0vb29tX2tpbGwuYy00NjItXFx0XFx0cHJfd2FybihcXFwiQ09NUEFDVElPTiBpcyBkaXNhYmxlZCEhIVxcXFxuXFxcIik7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NzE0PXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfYnVkZHlfb3JkZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy03MTktXFxubW0vcGFnZV9hbGxvYy5jOjcyMDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9wYWdlX2FsbG9jLmMtNzIxLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqdGFza19jYXBjKHN0cnVjdCB6b25lICp6b25lKVxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTc2OT1jb21wYWN0aW9uX2NhcHR1cmUoc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYywgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNzczLX1cXG5tbS9wYWdlX2FsbG9jLmM6Nzc0OiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL3BhZ2VfYWxsb2MuYy03NzUtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDA0ND1fX2FsbG9jX3BhZ2VzX21heV9vb20oZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00MTM1LVxcbm1tL3BhZ2VfYWxsb2MuYzo0MTM2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3BhZ2VfYWxsb2MuYy00MTM3LS8qIFRyeSBtZW1vcnkgY29tcGFjdGlvbiBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucyBiZWZvcmUgcmVjbGFpbSAqL1xcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTQzMjU9c2hvdWxkX2NvbXBhY3RfcmV0cnkoZ2ZwX3QgZ2ZwX21hc2ssIHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTQzNTAtfVxcbm1tL3BhZ2VfYWxsb2MuYzo0MzUxOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcbm1tL3BhZ2VfYWxsb2MuYy00MzUyLVxcbi0tXFxubW0vdm1zY2FuLmM9NjQxOT1zdGF0aWMgdm9pZCBzaHJpbmtfem9uZXMoc3RydWN0IHpvbmVsaXN0ICp6b25lbGlzdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02NDU5LVxcdFxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjY0NjA6XFx0XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX0NPTVBBQ1RJT04pIFxcdTAwMjZcXHUwMDI2XFxubW0vdm1zY2FuLmMtNjQ2MS1cXHRcXHRcXHQgICAgc2MtXFx1MDAzZW9yZGVyIFxcdTAwM2UgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm1tL3Ztc3RhdC5jPTEwNTQ9dm9pZCBtZW1tYXBfcGFnZXNfYWRkKGxvbmcgZGVsdGEpXFxuLS1cXG5tbS92bXN0YXQuYy0xMDU4LVxcbm1tL3Ztc3RhdC5jOjEwNTk6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vdm1zdGF0LmMtMTA2MC1cXG4tLVxcbm1tL3Ztc3RhdC5jPTExOTk9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XFxuLS1cXG5tbS92bXN0YXQuYy0xMzg0LSNlbmRpZlxcbm1tL3Ztc3RhdC5jOjEzODU6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vdm1zdGF0LmMtMTM4Ni1cXHRbSShDT01QQUNUTUlHUkFURV9TQ0FOTkVEKV1cXHRcXHQ9IFxcXCJjb21wYWN0X21pZ3JhdGVfc2Nhbm5lZFxcXCIsXFxuLS1cXG5tbS92bXN0YXQuYy0xNTE0LVxcbm1tL3Ztc3RhdC5jOjE1MTU6I2lmIChkZWZpbmVkKENPTkZJR19ERUJVR19GUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfQ09NUEFDVElPTikpIHx8IFxcXFxcXG5tbS92bXN0YXQuYy0xNTE2LSAgICAgZGVmaW5lZChDT05GSUdfUFJPQ19GUylcXG4tLVxcbm1tL3Ztc3RhdC5jPTIyODY9dm9pZCBfX2luaXQgaW5pdF9tbV9pbnRlcm5hbHModm9pZClcXG4tLVxcbm1tL3Ztc3RhdC5jLTIzMTktXFxubW0vdm1zdGF0LmM6MjMyMDojaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX0NPTVBBQ1RJT04pXFxubW0vdm1zdGF0LmMtMjMyMS1cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjcwPXN0cnVjdCB6c19wb29sIHtcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMjg0LSNlbmRpZlxcbm1tL3pzbWFsbG9jLmM6Mjg1OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMjg2LVxcdHN0cnVjdCB3b3JrX3N0cnVjdCBmcmVlX3dvcms7XFxuLS1cXG5tbS96c21hbGxvYy5jPTQzMT1zdGF0aWMgYm9vbCBac0h1Z2VQYWdlKHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtNDM1LVxcbm1tL3pzbWFsbG9jLmM6NDM2OiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtNDM3LXN0YXRpYyB2b2lkIGtpY2tfZGVmZXJyZWRfZnJlZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XFxuLS1cXG5tbS96c21hbGxvYy5jPTEwMzI9c3RhdGljIHN0cnVjdCB6c3BhZ2UgKmFsbG9jX3pzcGFnZShzdHJ1Y3QgenNfcG9vbCAqcG9vbCxcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTA0Mi1cXG5tbS96c21hbGxvYy5jOjEwNDM6XFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19DT01QQUNUSU9OKSlcXG5tbS96c21hbGxvYy5jLTEwNDQtXFx0XFx0Z2ZwIFxcdTAwMjY9IH5fX0dGUF9NT1ZBQkxFO1xcbi0tXFxubW0venNtYWxsb2MuYz0xNDU0PXN0YXRpYyB2b2lkIG9ial9mcmVlKGludCBjbGFzc19zaXplLCB1bnNpZ25lZCBsb25nIG9iailcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTQ4MS1cXG5tbS96c21hbGxvYy5jOjE0ODI6I2lmIChaU19PQkpfQ0xBU1NfQklUUyBcXHUwMDNlIDApIHx8IGRlZmluZWQoQ09ORklHX0NPTVBBQ1RJT04pXFxubW0venNtYWxsb2MuYy0xNDgzLS8qIEZvbGRzIHRvIDAgd2hlbiBaU19PQkpfQ0xBU1NfQklUUyA9PSAwOyBubyBpZmRlZiBuZWVkZWQgYXQgY2FsbGVycy4gKi9cXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTc1Mz1zdGF0aWMgaW50IHB1dGJhY2tfenNwYWdlKHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcywgc3RydWN0IHpzcGFnZSAqenNwYWdlKVxcbi0tXFxubW0venNtYWxsb2MuYy0xNzYyLVxcbm1tL3pzbWFsbG9jLmM6MTc2MzojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTE3NjQtLypcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MjM5NT1zdGF0aWMgaW50IF9faW5pdCB6c19pbml0KHZvaWQpXFxuLS1cXG5tbS96c21hbGxvYy5jLTI0MDItXFxubW0venNtYWxsb2MuYzoyNDAzOiNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbm1tL3pzbWFsbG9jLmMtMjQwNC1cXHRyYyA9IHNldF9tb3ZhYmxlX29wcyhcXHUwMDI2enNtYWxsb2NfbW9wcywgUEdUWV96c21hbGxvYyk7XFxuLS1cXG5tbS96c21hbGxvYy5jPTI0MTQ9c3RhdGljIHZvaWQgX19leGl0IHpzX2V4aXQodm9pZClcXG5tbS96c21hbGxvYy5jLTI0MTUte1xcbm1tL3pzbWFsbG9jLmM6MjQxNjojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS96c21hbGxvYy5jLTI0MTctXFx0c2V0X21vdmFibGVfb3BzKE5VTEwsIFBHVFlfenNtYWxsb2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTozMS43OTk0ODcyNDhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzM1NTUyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IENvbmZpZ3VyYXRpb24gQ29uY2VybnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24gYW5kIGltbWVkaWF0ZWx5LCBgQ09ORklHX0NPTVBBQ1RJT05gIGlzIG5vbi1uZWdvdGlhYmxlLiBJdCdzIGEgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2suIE5vdywgSSBzZWUgdGhhdCBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIGhpbmdlcyBvbiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBiZWluZyBlbmFibGVkLiBPciwgbWF5YmUgaXQncyBqdXN0IGF2YWlsYWJsZSwgcmVnYXJkbGVzcywgYnV0IG9ubHkgKnJlYWxseSogbWFrZXMgc2Vuc2UgaW4gY29uanVuY3Rpb24gd2l0aCBUSFAuIEVpdGhlciB3YXksIFRIUCBpcyBhIGRlcGVuZGVuY3kgaGVyZS4gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCByZWxhdGlvbnNoaXAuIEnigJlkIGJldHRlciBnbyBhbmQgY2hlY2sgdGhlIGFjdHVhbCBkZWZpbml0aW9uIG9mIGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgdG8gYmUgY29tcGxldGVseSBzdXJlIG9mIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSB0aHJlZSBmZWF0dXJlcy4gR290dGEgdmVyaWZ5IHRoYXQgdGhpcyBpcyBhbGwgcGxheWluZyBuaWNlbHkgdG9nZXRoZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MjAzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6MzUuNTM1MDQyNTkzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE4NzE3Nzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTE4NT1leHRlcm4gdW5zaWduZWQgbG9uZyB0cmFuc3BhcmVudF9odWdlcGFnZV9mbGFncztcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxODY6ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXM7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg3LWV4dGVybiB1bnNpZ25lZCBsb25nIGh1Z2VfYW5vbl9vcmRlcnNfbWFkdmlzZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTMyMD11bnNpZ25lZCBsb25nIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMyOS1cXHRpZiAodHlwZSAhPSBUVkFfRk9SQ0VEX0NPTExBUFNFIFxcdTAwMjZcXHUwMDI2IHZtYV9pc19hbm9ueW1vdXModm1hKSkge1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjMzMDpcXHRcXHR1bnNpZ25lZCBsb25nIG1hc2sgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMzMS1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz04NT1zdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpXFxubW0vY29tcGFjdGlvbi5jLTg2LXtcXG5tbS9jb21wYWN0aW9uLmM6ODc6XFx0dW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xcbm1tL2NvbXBhY3Rpb24uYy04OC1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz04Mjk9c3RhdGljIGJvb2wgc2tpcF9pc29sYXRpb25fb25fb3JkZXIoaW50IG9yZGVyLCBpbnQgdGFyZ2V0X29yZGVyKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTg0Mi1cXHRpZiAoaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXFx1MDAyNlxcdTAwMjYgb3JkZXIgXFx1MDAzZT0gY29tcGFjdF9ocGFnZV9vcmRlcigpIFxcdTAwMjZcXHUwMDI2XFxubW0vY29tcGFjdGlvbi5jOjg0MzpcXHQgICAgUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcXG5tbS9jb21wYWN0aW9uLmMtODQ0LVxcdFxcdHJldHVybiB0cnVlO1xcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI1NDU9dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI1NTEtXFxubW0vY29tcGFjdGlvbi5jOjI1NTI6XFx0aWYgKFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykgXFx1MDAyNlxcdTAwMjYgb3JkZXIgPT0gY29tcGFjdF9ocGFnZV9vcmRlcigpKSB7XFxubW0vY29tcGFjdGlvbi5jLTI1NTMtXFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9ODc9c3RhdGljIHN0cnVjdCBzaHJpbmtlciAqaHVnZV96ZXJvX2ZvbGlvX3Nocmlua2VyO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy04OS1cXG5tbS9odWdlX21lbW9yeS5jOjkwOnVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19hbHdheXMgX19yZWFkX21vc3RseTtcXG5tbS9odWdlX21lbW9yeS5jLTkxLXVuc2lnbmVkIGxvbmcgaHVnZV9hbm9uX29yZGVyc19tYWR2aXNlIF9fcmVhZF9tb3N0bHk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTY0MD1zdGF0aWMgc3NpemVfdCBhbm9uX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjQ1LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NjQ2OlxcdGlmICh0ZXN0X2JpdChvcmRlciwgXFx1MDAyNmh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcXG5tbS9odWdlX21lbW9yeS5jLTY0Ny1cXHRcXHRvdXRwdXQgPSBcXFwiW2Fsd2F5c10gaW5oZXJpdCBtYWR2aXNlIG5ldmVyXFxcIjtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjYwLVxcdHN0YXRpYyB1bnNpZ25lZCBsb25nICplbmFibGVkX29yZGVyc1tdID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmM6NjYxOlxcdFxcdFxcdTAwMjZodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyxcXG5tbS9odWdlX21lbW9yeS5jLTY2Mi1cXHRcXHRcXHUwMDI2aHVnZV9hbm9uX29yZGVyc19pbmhlcml0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTM2PXN0YXRpYyBpbnQgX19pbml0IHNldHVwX3RocF9hbm9uKGNoYXIgKnN0cilcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE0Ny1cXG5tbS9odWdlX21lbW9yeS5jOjExNDg6XFx0YWx3YXlzID0gaHVnZV9hbm9uX29yZGVyc19hbHdheXM7XFxubW0vaHVnZV9tZW1vcnkuYy0xMTQ5LVxcdG1hZHZpc2UgPSBodWdlX2Fub25fb3JkZXJzX21hZHZpc2U7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEyMDgtXFxubW0vaHVnZV9tZW1vcnkuYzoxMjA5OlxcdGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzID0gYWx3YXlzO1xcbm1tL2h1Z2VfbWVtb3J5LmMtMTIxMC1cXHRodWdlX2Fub25fb3JkZXJzX21hZHZpc2UgPSBtYWR2aXNlO1xcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTUwMj1zdGF0aWMgaW5saW5lIGJvb2wgYW5vbl9ocGFnZV9lbmFibGVkKHZvaWQpXFxubW0va2h1Z2VwYWdlZC5jLTUwMy17XFxubW0va2h1Z2VwYWdlZC5jOjUwNDpcXHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSlcXG5tbS9raHVnZXBhZ2VkLmMtNTA1LVxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTozNy4wNTM3NjkyMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY1MDU3MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCBpbiB0aGUgZmllbGQ6XG5cbioqQ2hlY2tpbmcgYSBDb25maWd1cmF0aW9uIERlcGVuZGVuY3kqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIGlzIGRlZmluZWQuIFRoaXMgaXNuJ3QganVzdCBhIGNhc3VhbCBjaGVjazsgSSBrbm93IHRoaXMgdmFyaWFibGUgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEl0J3MgYSBrZXkgcGFydCBvZiB0aGUgbGFyZ2VyIHBpY3R1cmUsIGVzcGVjaWFsbHkgd2l0aCBob3cgd2UndmUgYmVlbiBwdXNoaW5nIFRIUCBpbXByb3ZlbWVudHMuIFNvLCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciB3aXRoIHRoaXMgbGluZSBvZiBpbnZlc3RpZ2F0aW9uLCBJIG5lZWQgdG8gY29uZmlybSB0aGUgdW5kZXJseWluZyBjb25maWd1cmF0aW9uLiBUaGUgbG9naWMgaGluZ2VzIG9uIHRoYXQsIGFuZCBJIGNhbid0IGFmZm9yZCB0byBiZSB3YXN0aW5nIHRpbWUgZG93biBhIHJhYmJpdCBob2xlLiBJIG5lZWQgdG8ga25vdyB3aGVyZSBJIHN0YW5kIHdpdGggdGhpcywgd2hhdCB0aGUgYmFzZSBjb25maWd1cmF0aW9uIGlzLCBhbmQgd2hhdCBJIGNhbiB3b3JrIHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NTM0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6NDEuMjE4ODI4NzY3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg4NTEwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdlX21tLmg9MTI3PWVudW0gbXRocF9zdGF0X2l0ZW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTUyLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE1MzojaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2IGRlZmluZWQoQ09ORklHX1NZU0ZTKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTE1NC1zdHJ1Y3QgbXRocF9zdGF0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTE3OD1zdGF0aWMgaW5saW5lIHZvaWQgY291bnRfbXRocF9zdGF0KGludCBvcmRlciwgZW51bSBtdGhwX3N0YXRfaXRlbSBpdGVtKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTgyLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjE4MzojaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTg0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NTk4PXZvaWQgbWFwX2Fub25fZm9saW9fcG1kX25vcGYoc3RydWN0IGZvbGlvICpmb2xpbywgcG1kX3QgKnBtZCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYwMC1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDo2MDE6I2Vsc2UgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjAyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9ODE1PXN0YXRpYyBpbmxpbmUgYm9vbCBwdWRfaXNfaHVnZShwdWRfdCBwdWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC04MTgtfVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjgxOTojZW5kaWYgLyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtODIwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTo0MS4yNjQ3MTg4ODVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcwOTk3NTY5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIEFsbG9jYXRpb24gUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gbG9va2luZyBhdCB0aGlzLCBpdCdzIGNsZWFyIHRoYXQgdGhlIHN5c3RlbSBpcyBzZXQgdXAgdG8gaGFuZGxlIGh1Z2UgYW5vbnltb3VzIHBhZ2VzLCBhc3N1bWluZyBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgIGlzIGRlZmluZWQuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UgbmVlZCBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBlbmFibGVkLCBhbmQgYnkgZXh0ZW5zaW9uLCBgQ09NUEFDVElPTmAgYXMgd2VsbC4gU2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgdGhlIGJhc2ljcyBhcmUgaW4gcGxhY2UuXG5cbk5vdywgSSB3YW50IHRvIGRyaWxsIGRvd24gYW5kIHNlZSB0aGUgcmVsZXZhbnQgcGllY2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzbyBJJ2xsIGJlIGZvY3VzaW5nIG9uIHRoZSBrZXkgc3ltYm9scyByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFib3V0IGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gZGV0ZXJtaW5pbmcgYWxsb2NhdGlvbiBjYXBhY2l0eSwgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCwgd2hpY2ggbGlrZWx5IHBsYXlzIGEgcGFydCBpbiBkZXRlcm1pbmluZyB0aGUgZmVhc2liaWxpdHkgb2YgYSBjb21wYWN0aW9uIHJ1biB0byBzYXRpc2Z5IGFuIG9yZGVyLCBhbmQgZmluYWxseSwgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgLCB3aGljaCBpcyBwcm9iYWJseSBrZXkgdG8gZXZhbHVhdGluZyB3aGV0aGVyIGEgZ2l2ZW4gem9uZSBsaXN0IGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGNvbXBhY3Rpb24uXG5cbkFscmlnaHQsIG5vdyB0aGUgbmV4dCBzdGVwIGlzIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgaXMgYW4gZXhwb3J0ZWQgb3Igbm9uLXN0YXRpYyBzeW1ib2wuIEtub3dpbmcgaXRzIHZpc2liaWxpdHkgaXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIGhvdyBpdCBpcyBleHBvc2VkIHRvIGFuZCB1c2VkIGJ5IG90aGVyIG1vZHVsZXMgb3Igc3Vic3lzdGVtcy4gR290dGEgZmlndXJlIG91dCBpZiBpdCdzIHRpZ2h0bHkgY291cGxlZCBpbnRlcm5hbGx5LCBvciBpZiBpdCdzIGFuIEFQSSBwb2ludCB0aGF0IG90aGVycyBjYW4gdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE4MCwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTo0NS45NzQ2OTcxOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzMzEyMzIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlclwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9MjU3MD1zdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdFxcbm1tL2NvbXBhY3Rpb24uYzoyNTcxOmNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTI1NzItXFx0XFx0XFx0XFx0IGludCBoaWdoZXN0X3pvbmVpZHgsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNjEwPWNvbXBhY3Rfem9uZShzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYywgc3RydWN0IGNhcHR1cmVfY29udHJvbCAqY2FwYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNjM1LVxcdGlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGNjLVxcdTAwM2VvcmRlcikpIHtcXG5tbS9jb21wYWN0aW9uLmM6MjYzNjpcXHRcXHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihjYy1cXHUwMDNlem9uZSwgY2MtXFx1MDAzZW9yZGVyLFxcbm1tL2NvbXBhY3Rpb24uYy0yNjM3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBjYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LFxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTMxMDY9c3RhdGljIGJvb2wga2NvbXBhY3RkX25vZGVfc3VpdGFibGUocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMTIwLVxcbm1tL2NvbXBhY3Rpb24uYzozMTIxOlxcdFxcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHpvbmUsXFxubW0vY29tcGFjdGlvbi5jLTMxMjItXFx0XFx0XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzEzMj1zdGF0aWMgdm9pZCBrY29tcGFjdGRfZG9fd29yayhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxNjQtXFxubW0vY29tcGFjdGlvbi5jOjMxNjU6XFx0XFx0cmV0ID0gY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoem9uZSxcXG5tbS9jb21wYWN0aW9uLmMtMzE2Ni1cXHRcXHRcXHRcXHRjYy5vcmRlciwgem9uZWlkLCBjYy5hbGxvY19mbGFncyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6NDcuNTA3ODI1Mzc2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MTU3NTQ3MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSB2YXJpYWJsZXMgcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbiBhbmQgYWxsb2NhdGlvbi4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgdGhhdCBgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXJgIGlzIHN0YXRpYywgd2hpY2ggbWVhbnMgaXRzIHZhbHVlIGlzIGxpa2VseSBkZXRlcm1pbmVkIGF0IGNvbXBpbGUgdGltZSBvciBkdXJpbmcgdmVyeSBlYXJseSBpbml0aWFsaXphdGlvbi4gVGhpcyBoYXMgaW1wbGljYXRpb25zIGZvciBob3cgZmxleGlibGUgdGhlIHN5c3RlbSBpcyBpbiBhZGFwdGluZyB0byB2YXJ5aW5nIG1lbW9yeSBmcmFnbWVudGF0aW9uIHNjZW5hcmlvcy5cblxuVGhlbiwgSSdtIG5vdGluZyB0aGF0IGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBhbmQgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGFyZSAqbm90KiBzdGF0aWMuIFRoZXkncmUgZHluYW1pYy4gU28sIHRoZWlyIHZhbHVlcyBjaGFuZ2Ugb3ZlciB0aW1lLCB3aGljaCBtZWFucyB0aGV5IGFyZSBiZWluZyB1cGRhdGVkIGJhc2VkIG9uIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzeXN0ZW0uIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCBpcyBvYnZpb3VzIC0gaXQncyBkaXJlY3RseSByZWZsZWN0aW5nIG1lbW9yeSBhdmFpbGFiaWxpdHkuIEJ1dCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgaXMgdGhlIGtleSBpbnRlcmVzdC4gVGhpcyBpcyBhIGR5bmFtaWMgY29uZGl0aW9uIHRoYXQgc2hvdWxkIHRlbGwgbWUgd2hhdCB6b25lcyBhcmUgb2theSB0byBjb25zaWRlciBmb3IgY29tcGFjdGlvbi5cblxuUmlnaHQgbm93LCBteSBmb2N1cyBpcyBvbiBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAuIExldCdzIGRpZyBkZWVwZXIgaW50byBob3cgdGhhdCBpcyBpbXBsZW1lbnRlZCBhbmQgd2hhdCBmYWN0b3JzIGluZmx1ZW5jZSBpdHMgZXZhbHVhdGlvbi4gVGhpcyBpcyB3aGVyZSBJIGNhbiBzdGFydCB0byBkZXZlbG9wIGEgcHJlY2lzZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBhbGdvcml0aG0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDAyLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDU6NTEuMjIzNTgzMzgxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTQ2NjA5MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTAxPWV4dGVybiB2b2lkIGNvbXBhY3Rpb25fZGVmZXJfcmVzZXQoc3RydWN0IHpvbmUgKnpvbmUsIGludCBvcmRlcixcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwMy1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDQ6Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEwNS1cXHRcXHRcXHRcXHRcXHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNDUyPWJvb2wgY29tcGFjdGlvbl9zdWl0YWJsZShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLCB1bnNpZ25lZCBsb25nIHdhdGVybWFyayxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNDk2LS8qIFVzZWQgYnkgZGlyZWN0IHJlY2xhaW1lcnMgKi9cXG5tbS9jb21wYWN0aW9uLmM6MjQ5Nzpib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTI0OTgtXFx0XFx0aW50IGFsbG9jX2ZsYWdzLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz00MjQ4PXNob3VsZF9jb21wYWN0X3JldHJ5KGdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYy00MjcwLVxcdGlmIChjb21wYWN0X3Jlc3VsdCA9PSBDT01QQUNUX1NLSVBQRUQpIHtcXG5tbS9wYWdlX2FsbG9jLmM6NDI3MTpcXHRcXHRyZXQgPSBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKGFjLCBvcmRlciwgYWxsb2NfZmxhZ3MsXFxubW0vcGFnZV9hbGxvYy5jLTQyNzItXFx0XFx0XFx0XFx0XFx0XFx0ICAgZ2ZwX21hc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTo1Mi43NzAxOTc2OTdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NjY0OTY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IEZ1bmN0aW9ucyoqXG5cblJpZ2h0LCBzbyBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgaXNuJ3Qgc3RhdGljLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIGl0J3MgbGlrZWx5IHVzZWQgYWNyb3NzIG11bHRpcGxlIGZpbGVzIG9yIG1vZHVsZXMsIG5vdCBqdXN0IHdpdGhpbiBhIHNpbmdsZSBjb21waWxhdGlvbiB1bml0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQgd2hlbiBJIHRyYWNlIGl0cyB1c2FnZS4gU2ltaWxhcmx5LCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaXMgYWxzbyBub24tc3RhdGljOyB0aGlzIGhpZ2hsaWdodHMgdGhhdCB0aGVzZSBhcmVuJ3QgaW50ZXJuYWwgZnVuY3Rpb25zLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLCBhbmQgdGhhdCdzIHVzdWFsbHkgYnkgdHJhY2luZyB0aGUgdXNhZ2Ugb2YgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3QuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGhvdyBgcGdkYXRfYmFsYW5jZWRgIGlzIHVzZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIHRoZSBtZW1vcnkgc2Nhbm5pbmcgYW5kIGJhbGFuY2luZyBsb2dpYy4gRGlnZ2luZyBpbnRvIHRoYXQgZmlsZSBzaG91bGQgcHJvdmlkZSBjb250ZXh0IGZvciB3aGF0IGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCBhbmQgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGFyZSBpbnZvbHZlZCBpbi4gSSBleHBlY3QgdG8gYmUgYWJsZSB0byBidWlsZCBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgcGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWd5IGJ5IHJldmlld2luZyB0aGUgdXNhZ2Ugb2YgYHBnZGF0X2JhbGFuY2VkYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2NzcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNTo1Ni4yMTY4NDk0NjRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODM2NDI5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGdkYXRfYmFsYW5jZWRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NjkzMD1zdGF0aWMgYm9vbCBwZ2RhdF93YXRlcm1hcmtfYm9vc3RlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgaGlnaGVzdF96b25laWR4KVxcbi0tXFxubW0vdm1zY2FuLmMtNjk1Ny0gKi9cXG5tbS92bXNjYW4uYzo2OTU4OnN0YXRpYyBib29sIHBnZGF0X2JhbGFuY2VkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeClcXG5tbS92bXNjYW4uYy02OTU5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTcwMjc9c3RhdGljIGJvb2wgcHJlcGFyZV9rc3dhcGRfc2xlZXAocGdfZGF0YV90ICpwZ2RhdCwgaW50IG9yZGVyLFxcbi0tXFxubW0vdm1zY2FuLmMtNzA0OS1cXG5tbS92bXNjYW4uYzo3MDUwOlxcdGlmIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkpIHtcXG5tbS92bXNjYW4uYy03MDUxLVxcdFxcdGNsZWFyX3BnZGF0X2Nvbmdlc3RlZChwZ2RhdCk7XFxuLS1cXG5tbS92bXNjYW4uYz03MTM5PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MjE0LVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjcyMTU6XFx0XFx0YmFsYW5jZWQgPSBwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgc2Mub3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzIxNi1cXHRcXHRpZiAoIWJhbGFuY2VkIFxcdTAwMjZcXHUwMDI2IG5yX2Jvb3N0X3JlY2xhaW0pIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NTU9dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1ODAtXFx0aWYgKGtzd2FwZF90ZXN0X2hvcGVsZXNzKHBnZGF0KSB8fFxcbm1tL3Ztc2Nhbi5jOjc1ODE6XFx0ICAgIChwZ2RhdF9iYWxhbmNlZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCkgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy03NTgyLVxcdCAgICAgIXBnZGF0X3dhdGVybWFya19ib29zdGVkKHBnZGF0LCBoaWdoZXN0X3pvbmVpZHgpKSkge1xcbi0tXFxubW0vdm1zY2FuLmM9NzYxMz12b2lkIGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3Moc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc2MTUte1xcbm1tL3Ztc2Nhbi5jOjc2MTY6XFx0aWYgKHBnZGF0X2JhbGFuY2VkKHBnZGF0LCBvcmRlciwgaGlnaGVzdF96b25laWR4KSlcXG5tbS92bXNjYW4uYy03NjE3LVxcdFxcdGtzd2FwZF9jbGVhcl9ob3BlbGVzcyhwZ2RhdCwgY3VycmVudF9pc19rc3dhcGQoKSA/XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA1OjU3LjcwMDQ5NjU4MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDA1NzY3MDA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgTWFuYWdlbWVudCBGdW5jdGlvbiBBdHRyaWJ1dGVzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLiBJdCdzIGludGVyZXN0aW5nIGhvdyB0aGV5J3JlIGRlY2xhcmVkLiBgcGdkYXRfYmFsYW5jZWRgIGlzIGNsZWFybHkgYSBzdGF0aWMgdmFyaWFibGUsIGFuZCBJIGNhbiBpbW1lZGlhdGVseSB0aGluayBvZiB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQg4oCTIGl0J3MgbGlrZWx5IGEgcGVyLW5vZGUgZmxhZyBvciBzdGF0ZSwgYW5kIGl0J3MgaGlkZGVuIGZyb20gZXh0ZXJuYWwgbW9kdWxlcy4gYHdha2V1cF9rc3dhcGRgLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXNuJ3Qgc3RhdGljLCBzbyBpdOKAmXMgbGlrZWx5IGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIGBiYWxhbmNlX3BnZGF0YCwgaXMgc3RhdGljLiBBZ2FpbiwgYSBzdGF0aWMgZnVuY3Rpb24gdXN1YWxseSBpbXBsaWVzIHRoYXQgaXQgaXMgZm9yIGludGVybmFsIHVzZSB3aXRoaW4gdGhlIGZpbGUvbW9kdWxlLiBOb3csIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBpcyBub24tc3RhdGljLCBzbyB0aGUgc2FtZSBjb25zaWRlcmF0aW9ucyBhcHBseSBhcyBmb3IgYHdha2V1cF9rc3dhcGRgLiBMZXQncyBkaWcgaW50byB0aGF0IGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBmdW5jdGlvbi4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNTc2LCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MDQuMTA2MjY1OTc2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg0MjE5NzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjQ0PXZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcixcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NDUtXFx0XFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE2NDY6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC0xNjQ3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpO1xcbi0tXFxubW0vdm1zY2FuLmM9NTIyND1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI2Mi1cXHRpZiAoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCBcXHUwMDNlIHJlY2xhaW1lZClcXG5tbS92bXNjYW4uYzo1MjYzOlxcdFxcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KTtcXG5tbS92bXNjYW4uYy01MjY0LX1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYyMzQ9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MzQxLVxcdGlmIChyZWNsYWltYWJsZSlcXG5tbS92bXNjYW4uYzo2MzQyOlxcdFxcdGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3MocGdkYXQsIHNjLVxcdTAwM2VvcmRlciwgc2MtXFx1MDAzZXJlY2xhaW1faWR4KTtcXG5tbS92bXNjYW4uYy02MzQzLVxcdGVsc2UgaWYgKHNjLVxcdTAwM2VjYWNoZV90cmltX21vZGUpXFxuLS1cXG5tbS92bXNjYW4uYz03NjAwPXZvaWQga3N3YXBkX2NsZWFyX2hvcGVsZXNzKHBnX2RhdGFfdCAqcGdkYXQsIGVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiByZWFzb24pXFxuLS1cXG5tbS92bXNjYW4uYy03NjEyLSAqL1xcbm1tL3Ztc2Nhbi5jOjc2MTM6dm9pZCBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxubW0vdm1zY2FuLmMtNzYxNC1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgaGlnaGVzdF96b25laWR4KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjowNS42OTA0ODk1N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc2ODA5ODU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEtlcm5lbCdzIFN3YXBwaW5nIEJlaGF2aW9yKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50IGFuZCB3aGVyZSB0aGUgc3lzdGVtIGlzIGdldHRpbmcgaHVuZyB1cC4gYHdha2V1cF9rc3dhcGRgIGZlZWxzIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC4gSXQncyB0aGUgZnVuY3Rpb24gdGhhdCBraWNrcyBvZmYgdGhlIGtzd2FwZCBkYWVtb24sIGFuZCBpZiBzd2FwcGluZyBpcyBhIGJvdHRsZW5lY2ssIHRoaXMgaXMgbGlrZWx5IHdoZXJlIHRoZSBwcm9ibGVtIGVpdGhlciBvcmlnaW5hdGVzIG9yIG1hbmlmZXN0cy4gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgY29kZSBhbmQgc2VlIHdoYXQncyB0cmlnZ2VyaW5nIGl0cyBhY3RpdmF0aW9uLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSB0aGUgY29uZGl0aW9ucyB0aGF0IGxlYWQgdG8gYHdha2V1cF9rc3dhcGRgIGJlaW5nIGNhbGxlZCwgd2hhdCByZXNvdXJjZXMgaXQncyBjb250ZW5kaW5nIGZvciwgYW5kIHdoZXRoZXIgaXRzIGZyZXF1ZW5jeSBvZiBhY3RpdmF0aW9uIGFsaWducyB3aXRoIHRoZSBvYnNlcnZlZCBwZXJmb3JtYW5jZSBpc3N1ZXMuIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgYW5kIGFueSByZWxldmFudCBjb3VudGVycyBhcm91bmQgdGhhdCBmdW5jdGlvbiB3aWxsIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzeXN0ZW0ncyByZWFjdGlvbi4gSeKAmWxsIGJlIGxvb2tpbmcgZm9yIHdhaXQgcXVldWVzLCBsb2NrIGNvbnRlbnRpb24sIGFuZCBhbnkgaW5kaWNhdGlvbnMgb2YgcmVzb3VyY2Ugc3RhcnZhdGlvbiB0aGF0IGFyZSB0aWVkIHRvIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyMzc0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MDkuMzY3MzAyNzE3WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDk2OTE0OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndha2V1cF9rc3dhcGRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9NTk9bXkgJG9wdF9yZWFkX3Byb2NzdGF0O1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTYwLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjYxOm15ICR0b3RhbF93YWtldXBfa3N3YXBkO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTYyLW15ICgkdG90YWxfZGlyZWN0X3JlY2xhaW0sICR0b3RhbF9kaXJlY3RfbnJfc2Nhbm5lZCk7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbD0xMTM9bXkgJHJlZ2V4X2tzd2FwZF9zbGVlcF9kZWZhdWx0ID0gJ25pZD0oWzAtOV0qKSc7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MTE0Om15ICRyZWdleF93YWtldXBfa3N3YXBkX2RlZmF1bHQgPSAnbmlkPShbMC05XSopIG9yZGVyPShbMC05XSopIGdmcF9mbGFncz0oW0EtWl98XSopJztcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0xMTUtbXkgJHJlZ2V4X2xydV9pc29sYXRlX2RlZmF1bHQgPSAnY2xhc3N6b25lPShbMC05XSopIG9yZGVyPShbMC05XSopIG5yX3JlcXVlc3RlZD0oWzAtOV0qKSBucl9zY2FubmVkPShbMC05XSopIG5yX3NraXBwZWQ9KFswLTldKikgbnJfdGFrZS4uLlxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9MTI0PW15ICRyZWdleF9rc3dhcGRfc2xlZXA7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MTI1Om15ICRyZWdleF93YWtldXBfa3N3YXBkO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTEyNi1teSAkcmVnZXhfbHJ1X2lzb2xhdGU7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbD0xOTY9JHJlZ2V4X2tzd2FwZF9zbGVlcCA9IGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXgoXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0xOTktXFx0XFx0XFx0XFxcIm5pZFxcXCIpO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjIwMDokcmVnZXhfd2FrZXVwX2tzd2FwZCA9IGdlbmVyYXRlX3RyYWNlZXZlbnRfcmVnZXgoXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6MjAxOlxcdFxcdFxcdFxcXCJ2bXNjYW4vbW1fdm1zY2FuX3dha2V1cF9rc3dhcGRcXFwiLFxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjIwMjpcXHRcXHRcXHQkcmVnZXhfd2FrZXVwX2tzd2FwZF9kZWZhdWx0LFxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTIwMy1cXHRcXHRcXHRcXFwibmlkXFxcIiwgXFxcIm9yZGVyXFxcIiwgXFxcImdmcF9mbGFnc1xcXCIpO1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw9Mjc1PUVWRU5UX1BST0NFU1M6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0zNjEtXFx0XFx0XFx0JHBlcnByb2Nlc3NwaWR7JHByb2Nlc3NfcGlkfS1cXHUwMDNle1NUQVRFX0tTV0FQRF9CRUdJTn0gPSAwO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjM2MjpcXHRcXHR9IGVsc2lmICgkdHJhY2Vwb2ludCBlcSBcXFwibW1fdm1zY2FuX3dha2V1cF9rc3dhcGRcXFwiKSB7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtMzYzLVxcdFxcdFxcdCRwZXJwcm9jZXNzcGlkeyRwcm9jZXNzX3BpZH0tXFx1MDAzZXtNTV9WTVNDQU5fV0FLRVVQX0tTV0FQRH0rKztcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTM2NS1cXHRcXHRcXHQkZGV0YWlscyA9ICQ2O1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjM2NjpcXHRcXHRcXHRpZiAoJGRldGFpbHMgIX4gLyRyZWdleF93YWtldXBfa3N3YXBkL28pIHtcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbDozNjc6XFx0XFx0XFx0XFx0cHJpbnQgXFxcIldBUk5JTkc6IEZhaWxlZCB0byBwYXJzZSBtbV92bXNjYW5fd2FrZXVwX2tzd2FwZCBhcyBleHBlY3RlZFxcXFxuXFxcIjtcXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbC0zNjgtXFx0XFx0XFx0XFx0cHJpbnQgXFxcIiAgICAgICAgICRkZXRhaWxzXFxcXG5cXFwiO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjM2OTpcXHRcXHRcXHRcXHRwcmludCBcXFwiICAgICAgICAgJHJlZ2V4X3dha2V1cF9rc3dhcGRcXFxcblxcXCI7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtMzcwLVxcdFxcdFxcdFxcdG5leHQ7XFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYWNlL3Bvc3Rwcm9jZXNzL3RyYWNlLXZtc2Nhbi1wb3N0cHJvY2Vzcy5wbD00NTc9c3ViIGR1bXBfc3RhdHMge1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNTEzLVxcdFxcdCR0b3RhbF9kaXJlY3RfcmVjbGFpbSArPSAkc3RhdHN7JHByb2Nlc3NfcGlkfS1cXHUwMDNle01NX1ZNU0NBTl9ESVJFQ1RfUkVDTEFJTV9CRUdJTn07XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGw6NTE0OlxcdFxcdCR0b3RhbF93YWtldXBfa3N3YXBkICs9ICRzdGF0c3skcHJvY2Vzc19waWR9LVxcdTAwM2V7TU1fVk1TQ0FOX1dBS0VVUF9LU1dBUER9O1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsLTUxNS1cXHRcXHQkdG90YWxfZGlyZWN0X25yX3NjYW5uZWQgKz0gJHN0YXRzeyRwcm9jZXNzX3BpZH0tXFx1MDAzZXtISUdIX05SX1NDQU5ORUR9O1xcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNjQxLVxcdHByaW50IFxcXCJEaXJlY3QgcmVjbGFpbSB3cml0ZSBhbm9uIGFzeW5jIEkvTzpcXHQkdG90YWxfZGlyZWN0X3dyaXRlcGFnZV9hbm9uX2FzeW5jXFxcXG5cXFwiO1xcbkRvY3VtZW50YXRpb24vdHJhY2UvcG9zdHByb2Nlc3MvdHJhY2Utdm1zY2FuLXBvc3Rwcm9jZXNzLnBsOjY0MjpcXHRwcmludCBcXFwiV2FrZSBrc3dhcGQgcmVxdWVzdHM6XFx0XFx0XFx0JHRvdGFsX3dha2V1cF9rc3dhcGRcXFxcblxcXCI7XFxuRG9jdW1lbnRhdGlvbi90cmFjZS9wb3N0cHJvY2Vzcy90cmFjZS12bXNjYW4tcG9zdHByb2Nlc3MucGwtNjQzLVxcdHByaW50ZiBcXFwiVGltZSBzdGFsbGVkIGRpcmVjdCByZWNsYWltOiBcXHRcXHQlLTEuMmYgc2Vjb25kc1xcXFxuXFxcIiwgJHRvdGFsX2RpcmVjdF9sYXRlbmN5O1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNjM3PWVudW0ga3N3YXBkX2NsZWFyX2hvcGVsZXNzX3JlYXNvbiB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NDMtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNjQ0OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX21hc2ssIGludCBvcmRlcixcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE2NDUtXFx0XFx0ICAgZW51bSB6b25lX3R5cGUgaGlnaGVzdF96b25laWR4KTtcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oPTEyMz1UUkFDRV9FVkVOVChtbV92bXNjYW5fYmFsYW5jZV9wZ2RhdF9lbmQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy92bXNjYW4uaC0xNTAtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvdm1zY2FuLmg6MTUxOlRSQUNFX0VWRU5UKG1tX3Ztc2Nhbl93YWtldXBfa3N3YXBkLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL3Ztc2Nhbi5oLTE1Mi1cXG4tLVxcbm1tL21pZ3JhdGUuYz0yNjkwPWludCBtaWdyYXRlX21pc3BsYWNlZF9mb2xpb19wcmVwYXJlKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9taWdyYXRlLmMtMjczNC1cXG5tbS9taWdyYXRlLmM6MjczNTpcXHRcXHR3YWtldXBfa3N3YXBkKHBnZGF0LVxcdTAwM2Vub2RlX3pvbmVzICsgeiwgMCxcXG5tbS9taWdyYXRlLmMtMjczNi1cXHRcXHRcXHQgICAgICBmb2xpb19vcmRlcihmb2xpbyksIFpPTkVfTU9WQUJMRSk7XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9MzQxMz1zdHJ1Y3QgcGFnZSAqcm1xdWV1ZShzdHJ1Y3Qgem9uZSAqcHJlZmVycmVkX3pvbmUsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzQzNC1cXHRcXHRjbGVhcl9iaXQoWk9ORV9CT09TVEVEX1dBVEVSTUFSSywgXFx1MDAyNnpvbmUtXFx1MDAzZWZsYWdzKTtcXG5tbS9wYWdlX2FsbG9jLmM6MzQzNTpcXHRcXHR3YWtldXBfa3N3YXBkKHpvbmUsIDAsIDAsIHpvbmVfaWR4KHpvbmUpKTtcXG5tbS9wYWdlX2FsbG9jLmMtMzQzNi1cXHR9XFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDUwMj1zdGF0aWMgdm9pZCB3YWtlX2FsbF9rc3dhcGRzKHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX21hc2ssXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDUyMS1cXHRcXHRcXHRjb250aW51ZTtcXG5tbS9wYWdlX2FsbG9jLmM6NDUyMjpcXHRcXHR3YWtldXBfa3N3YXBkKHpvbmUsIGdmcF9tYXNrLCByZWNsYWltX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3BhZ2VfYWxsb2MuYy00NTIzLVxcdFxcdGxhc3RfcGdkYXQgPSB6b25lLVxcdTAwM2V6b25lX3BnZGF0O1xcbi0tXFxubW0vdm1zY2FuLmM9NzQ3ND1zdGF0aWMgaW50IGtzd2FwZCh2b2lkICpwKVxcbi0tXFxubW0vdm1zY2FuLmMtNzU1NC0gKi9cXG5tbS92bXNjYW4uYzo3NTU1OnZvaWQgd2FrZXVwX2tzd2FwZChzdHJ1Y3Qgem9uZSAqem9uZSwgZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU1Ni1cXHRcXHQgICBlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03NTk0LVxcbm1tL3Ztc2Nhbi5jOjc1OTU6XFx0dHJhY2VfbW1fdm1zY2FuX3dha2V1cF9rc3dhcGQocGdkYXQtXFx1MDAzZW5vZGVfaWQsIGhpZ2hlc3Rfem9uZWlkeCwgb3JkZXIsXFxubW0vdm1zY2FuLmMtNzU5Ni1cXHRcXHRcXHRcXHQgICAgICBnZnBfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjoxMC44NjQyMjUwOTVaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5Nzc2ODc1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGFzIGEga2VybmVsIG1lbW9yeSBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBOb24tU3RhdGljIEZ1bmN0aW9ucyBSZWxhdGVkIHRvIE1lbW9yeSBDb21wYWN0aW9uKipcblxuT2theSwgc28gSSd2ZSBub3RpY2VkIGEgZmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBjb21wYWN0aW9uLCB0aGF0IGFyZW4ndCBkZWNsYXJlZCBhcyBgc3RhdGljYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZWQgbXkgaW50ZXJlc3QuIFNwZWNpZmljYWxseSwgSSd2ZSBnb3QgYHdha2V1cF9rc3dhcGRgLCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AsIGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCwgYW5kIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBmbGFnZ2VkLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGFyZW4ndCBgc3RhdGljYCBzdWdnZXN0cyB0aGV5IG1pZ2h0IGJlIGV4cG9zZWQgZm9yIHVzZSBvdXRzaWRlIHRoZWlyIGltbWVkaWF0ZSBtb2R1bGUsIHdoaWNoLCBnaXZlbiB0aGVpciBuYW1lcywgbGlrZWx5IGNlbnRlcnMgYXJvdW5kIHRoZSBrZXJuZWwncyBjb21wYWN0aW9uIGFuZCBzd2FwcGluZyBtZWNoYW5pc21zLlxuXG5Ob3csIG15IGludHVpdGlvbiBpcyB0ZWxsaW5nIG1lIHRoYXQgdGhlIG5vbi1zdGF0aWMgc3RhdHVzIGlzIGEgcG90ZW50aWFsIGNsdWUgdG8gaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBhbmQgcG90ZW50aWFsbHkgaW50ZXJhY3RlZCB3aXRoIGJ5IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIEdpdmVuIHRoZSBjb250ZXh0LCBteSBuZXh0IHRob3VnaHQgaXMgdG8gZGlnIGludG8gYGtjb21wYWN0ZGAgYW5kIHNlZSBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlc2UgZnVuY3Rpb25zLiBTaW5jZSB0aGV5IHNlZW0gbGlua2VkLCBsZXQncyBzdGFydCB3aXRoIGBtbS9jb21wYWN0aW9uLmNgIGFuZCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjgwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MTUuNDYxOTk2NzQ0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDkxNDE3NjE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtjb21wYWN0ZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2NvbmNlcHRzLnJzdD0yMDY9cGh5c2ljYWxseSBjb250aWd1b3VzIGFyZWFzIGJlY29tZSBwb3NzaWJsZS5cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2NvbmNlcHRzLnJzdC0yMDctXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9jb25jZXB0cy5yc3Q6MjA4Okxpa2UgcmVjbGFpbSwgdGhlIGNvbXBhY3Rpb24gbWF5IGhhcHBlbiBhc3luY2hyb25vdXNseSBpbiB0aGUgYGBrY29tcGFjdGRgYFxcbkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vY29uY2VwdHMucnN0LTIwOS1kYWVtb24gb3Igc3luY2hyb25vdXNseSBhcyBhIHJlc3VsdCBvZiBhIG1lbW9yeSBhbGxvY2F0aW9uIHJlcXVlc3QuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q9MTc3PWRlZmVyXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0LTE3OC1cXHRtZWFucyB0aGF0IGFuIGFwcGxpY2F0aW9uIHdpbGwgd2FrZSBrc3dhcGQgaW4gdGhlIGJhY2tncm91bmRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3Q6MTc5OlxcdHRvIHJlY2xhaW0gcGFnZXMgYW5kIHdha2Uga2NvbXBhY3RkIHRvIGNvbXBhY3QgbWVtb3J5IHNvIHRoYXRcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTgwLVxcdFRIUCBpcyBhdmFpbGFibGUgaW4gdGhlIG5lYXIgZnV0dXJlLiBJdCdzIHRoZSByZXNwb25zaWJpbGl0eVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0PTE4Mz1kZWZlcittYWR2aXNlXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTg2LVxcdG90aGVyIHJlZ2lvbnMgd2lsbCB3YWtlIGtzd2FwZCBpbiB0aGUgYmFja2dyb3VuZCB0byByZWNsYWltXFxuRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS90cmFuc2h1Z2UucnN0OjE4NzpcXHRwYWdlcyBhbmQgd2FrZSBrY29tcGFjdGQgdG8gY29tcGFjdCBtZW1vcnkgc28gdGhhdCBUSFAgaXNcXG5Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL3RyYW5zaHVnZS5yc3QtMTg4LVxcdGF2YWlsYWJsZSBpbiB0aGUgbmVhciBmdXR1cmUuXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdD04NT1wZXJmb3JtIChlLmcuIHBhZ2UgYWxsb2NhdGlvbiwgZGlydHkgd3JpdGViYWNrLCBwYWdlIHJlY2xhaW0pLiBXaGVuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzZC1pby1tb2Rlcy5yc3Q6ODY6dXNpbmcgTkZTRCBESVJFQ1QsIGtzd2FwZCBhbmQga2NvbXBhY3RkIGFyZSBubyBsb25nZXIgY29tbWFuZGluZyBDUFVcXG5Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnNkLWlvLW1vZGVzLnJzdC04Ny10aW1lIHRyeWluZyB0byBmaW5kIGFkZXF1YXRlIGZyZWUgcGFnZXMgc28gdGhhdCBmb3J3YXJkIElPIHByb2dyZXNzIGNhblxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0PTMwOD1Db21wYWN0aW9uIGNvbnRyb2xcXG4tLVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMTAtXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMxMTpgYGtjb21wYWN0ZF9tYXhfb3JkZXJgYFxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMTI6ICBQYWdlIG9yZGVyIHRoYXQga2NvbXBhY3RkIHNob3VsZCB0cnkgdG8gYWNoaWV2ZS5cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMzEzLVxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMTQ6YGBrY29tcGFjdGRfaGlnaGVzdF96b25laWR4YGBcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzE1OiAgVGhlIGhpZ2hlc3Qgem9uZSBpbmRleCB0byBiZSBjb21wYWN0ZWQgYnkga2NvbXBhY3RkLlxcbkRvY3VtZW50YXRpb24vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMTYtXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjMxNzpgYGtjb21wYWN0ZF93YWl0YGBcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMzE4LSAgV29ya3F1ZXVlIHVzZWQgdG8gc3luY2hyb25pemUgbWVtb3J5IGNvbXBhY3Rpb24gdGFza3MuXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMxOS1cXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzIwOmBga2NvbXBhY3RkYGBcXG5Eb2N1bWVudGF0aW9uL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzIxOiAgUGVyLW5vZGUgaW5zdGFuY2Ugb2Yga2NvbXBhY3RkIGtlcm5lbCB0aHJlYWQuXFxuRG9jdW1lbnRhdGlvbi9tbS9waHlzaWNhbF9tZW1vcnkucnN0LTMyMi1cXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q9MjgxPWtzd2FwZOaXoOazleWbnuaUtuS7u+S9lemhtemdoueahOi/kOihjOasoeaVsOOAglxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0yOTYtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDoyOTc6YGBrY29tcGFjdGRfbWF4X29yZGVyYGBcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9waHlzaWNhbF9tZW1vcnkucnN0OjI5ODprY29tcGFjdGTlupTlsJ3or5Xlrp7njrDnmoTpobXpnaJvcmRlcuOAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMjk5LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzAwOmBga2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeGBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMDE6a2NvbXBhY3Rk5Y+v5Lul5Y6L57yp55qE5pyA6auY5Yy65Z+f57Si5byV44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDItXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMDM6YGBrY29tcGFjdGRfd2FpdGBgXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDQt5ZCM5q2l5YaF5a2Y5Y6L57yp5Lu75Yqh55qE5bel5L2c6Zif5YiX44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdC0zMDUtXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vcGh5c2ljYWxfbWVtb3J5LnJzdDozMDY6YGBrY29tcGFjdGRgYFxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3Q6MzA3Ouavj+S4quiKgueCueeahGtjb21wYWN0ZOWGheaguOe6v+eoi+WunuS+i+OAglxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3BoeXNpY2FsX21lbW9yeS5yc3QtMzA4LVxcbi0tXFxuZnMvbmZzL2ZpbGUuYz01MTI9c3RhdGljIGJvb2wgbmZzX3JlbGVhc2VfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbmZzL2ZpbGUuYy01MTgtXFx0XFx0aWYgKChjdXJyZW50X2dmcF9jb250ZXh0KGdmcCkgXFx1MDAyNiBHRlBfS0VSTkVMKSAhPSBHRlBfS0VSTkVMIHx8XFxuZnMvbmZzL2ZpbGUuYzo1MTk6XFx0XFx0ICAgIGN1cnJlbnRfaXNfa3N3YXBkKCkgfHwgY3VycmVudF9pc19rY29tcGFjdGQoKSlcXG5mcy9uZnMvZmlsZS5jLTUyMC1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD02OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29tcGFjdF9nYXAodW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtODMtXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6ODQ6c3RhdGljIGlubGluZSBpbnQgY3VycmVudF9pc19rY29tcGFjdGQodm9pZClcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC04NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaD0xMDQ9Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTA2LVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjEwNzpleHRlcm4gdm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3J1bihpbnQgbmlkKTtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDoxMDg6ZXh0ZXJuIHZvaWQgX19tZW1pbml0IGtjb21wYWN0ZF9zdG9wKGludCBuaWQpO1xcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjEwOTpleHRlcm4gdm9pZCB3YWtldXBfa2NvbXBhY3RkKHBnX2RhdGFfdCAqcGdkYXQsIGludCBvcmRlciwgaW50IGhpZ2hlc3Rfem9uZWlkeCk7XFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTEwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTE2PXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjItXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg6MTIzOnN0YXRpYyBpbmxpbmUgdm9pZCBrY29tcGFjdGRfcnVuKGludCBuaWQpXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTI0LXtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjUtfVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjEyNjpzdGF0aWMgaW5saW5lIHZvaWQga2NvbXBhY3RkX3N0b3AoaW50IG5pZClcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC0xMjcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMTI5LVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjEzMDpzdGF0aWMgaW5saW5lIHZvaWQgd2FrZXVwX2tjb21wYWN0ZChwZ19kYXRhX3QgKnBnZGF0LFxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTEzMS1cXHRcXHRcXHRcXHRpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oPTI2PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjUtICogYXJlIGNvbXBvdW5kIGFsbG9jYXRpb25zIHRoYXQgd2lsbCBnZW5lcmFsbHkgZmFpbCBxdWlja2x5IGlmIG1lbW9yeSBpcyBub3RcXG5pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM2NjogKiBhdmFpbGFibGUgYW5kIHdpbGwgbm90IHdha2Uga3N3YXBkL2tjb21wYWN0ZCBvbiBmYWlsdXJlLiBUaGUgX0xJR0hUXFxuaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjctICogdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHJlY2xhaW0vY29tcGFjdGlvbiBhdCBhbGwgYW5kIGlzIGJ5IGRlZmF1bHQgdXNlZFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD0xNDc4PXR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtMTUzOC0jaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjE1Mzk6XFx0aW50IGtjb21wYWN0ZF9tYXhfb3JkZXI7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTQwOlxcdGVudW0gem9uZV90eXBlIGtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHg7XFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDoxNTQxOlxcdHdhaXRfcXVldWVfaGVhZF90IGtjb21wYWN0ZF93YWl0O1xcbmluY2x1ZGUvbGludXgvbW16b25lLmg6MTU0MjpcXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKmtjb21wYWN0ZDtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTE1NDMtXFx0Ym9vbCBwcm9hY3RpdmVfY29tcGFjdF90cmlnZ2VyO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oPTE3NzE9ZXh0ZXJuIHN0cnVjdCBwaWQgKmNhZF9waWQ7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc5MS0jZGVmaW5lIFBGX05PRlJFRVpFXFx0XFx0MHgwMDAwODAwMFxcdC8qIFRoaXMgdGhyZWFkIHNob3VsZCBub3QgYmUgZnJvemVuICovXFxuaW5jbHVkZS9saW51eC9zY2hlZC5oOjE3OTI6I2RlZmluZSBQRl9LQ09NUEFDVERcXHRcXHQweDAwMDEwMDAwXFx0LyogSSBhbSBrY29tcGFjdGQgKi9cXG5pbmNsdWRlL2xpbnV4L3NjaGVkLmgtMTc5My0jZGVmaW5lIFBGX0tTV0FQRFxcdFxcdDB4MDAwMjAwMDBcXHQvKiBJIGFtIGtzd2FwZCAqL1xcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oPTI4Nj1ERUZJTkVfRVZFTlQobW1fY29tcGFjdGlvbl9kZWZlcl90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl9kZWZlcl9yZXNldCxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0yOTItXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oOjI5MzpUUkFDRV9FVkVOVChtbV9jb21wYWN0aW9uX2tjb21wYWN0ZF9zbGVlcCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMjk0LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTMwOS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MzEwOkRFQ0xBUkVfRVZFTlRfQ0xBU1Moa2NvbXBhY3RkX3dha2VfdGVtcGxhdGUsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTMxMS1cXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaC0zMzctXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oOjMzODpERUZJTkVfRVZFTlQoa2NvbXBhY3RkX3dha2VfdGVtcGxhdGUsIG1tX2NvbXBhY3Rpb25fd2FrZXVwX2tjb21wYWN0ZCxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzM5LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oLTM0NC1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmg6MzQ1OkRFRklORV9FVkVOVChrY29tcGFjdGRfd2FrZV90ZW1wbGF0ZSwgbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfd2FrZSxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMzQ2LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTIyNDQ9c3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yMjUzLSAqIFRoZSBwZXItbm9kZSBwcm9hY3RpdmUgKGJhY2tncm91bmQpIGNvbXBhY3Rpb24gcHJvY2VzcyBpcyBzdGFydGVkIGJ5IGl0c1xcbm1tL2NvbXBhY3Rpb24uYzoyMjU0OiAqIGNvcnJlc3BvbmRpbmcga2NvbXBhY3RkIHRocmVhZCB3aGVuIHRoZSBub2RlJ3MgZnJhZ21lbnRhdGlvbiBzY29yZVxcbm1tL2NvbXBhY3Rpb24uYy0yMjU1LSAqIGV4Y2VlZHMgdGhlIGhpZ2ggdGhyZXNob2xkLiBUaGUgY29tcGFjdGlvbiBwcm9jZXNzIHJlbWFpbnMgYWN0aXZlIHRpbGxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yMjk3PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yMzA5LVxcdFxcdCAqIE1hcmsgdGhhdCB0aGUgUEdfbWlncmF0ZV9za2lwIGluZm9ybWF0aW9uIHNob3VsZCBiZSBjbGVhcmVkXFxubW0vY29tcGFjdGlvbi5jOjIzMTA6XFx0XFx0ICogYnkga3N3YXBkIHdoZW4gaXQgZ29lcyB0byBzbGVlcC4ga2NvbXBhY3RkIGRvZXMgbm90IHNldCB0aGVcXG5tbS9jb21wYWN0aW9uLmMtMjMxMS1cXHRcXHQgKiBmbGFnIGl0c2VsZiBhcyB0aGUgZGVjaXNpb24gdG8gYmUgY2xlYXIgc2hvdWxkIGJlIGRpcmVjdGx5XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjM1NS1cXHQvKlxcbm1tL2NvbXBhY3Rpb24uYzoyMzU2OlxcdCAqIFdoZW4gZGVmcmFnX21vZGUgaXMgZW5hYmxlZCwgbWFrZSBrY29tcGFjdGQgdGFyZ2V0XFxubW0vY29tcGFjdGlvbi5jLTIzNTctXFx0ICogd2F0ZXJtYXJrcyBpbiB3aG9sZSBwYWdlYmxvY2tzLiBCZWNhdXNlIHRoZXkgY2FuIGJlIHN0b2xlblxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI0OTc9Ym9vbCBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlKHN0cnVjdCBhbGxvY19jb250ZXh0ICphYywgaW50IG9yZGVyLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI1MzgtICogcG9sbHV0aW5nIGFsbG9jYXRvciBmYWxsYmFja3MuIGtzd2FwZCB1c3VhbGx5IGNhbm5vdCBhY2NvbXBsaXNoXFxubW0vY29tcGFjdGlvbi5jOjI1Mzk6ICogdGhpcyBvbiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC5cXG5tbS9jb21wYWN0aW9uLmMtMjU0MC0gKlxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI1NzE9Y29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMjU3Mi1cXHRcXHRcXHRcXHQgaW50IGhpZ2hlc3Rfem9uZWlkeCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLFxcbm1tL2NvbXBhY3Rpb24uYzoyNTczOlxcdFxcdFxcdFxcdCBib29sIGFzeW5jLCBib29sIGtjb21wYWN0ZClcXG5tbS9jb21wYWN0aW9uLmMtMjU3NC17XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU3OC1cXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmM6MjU3OTpcXHRcXHRcXHRcXHRcXHQgICAgICAga2NvbXBhY3RkIFxcdTAwMjZcXHUwMDI2IGRlZnJhZ19tb2RlKTtcXG5tbS9jb21wYWN0aW9uLmMtMjU4MC1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zMDIzPXN0YXRpYyBpbnQgY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzX3N5c2N0bF9oYW5kbGVyKGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzAzOS1cXHRcXHRcXHRwZ2RhdC1cXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlciA9IHRydWU7XFxubW0vY29tcGFjdGlvbi5jOjMwNDA6XFx0XFx0XFx0dHJhY2VfbW1fY29tcGFjdGlvbl93YWtldXBfa2NvbXBhY3RkKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCAtMSxcXG5tbS9jb21wYWN0aW9uLmMtMzA0MS1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBnZGF0LVxcdTAwM2Vucl96b25lcyAtIDEpO1xcbm1tL2NvbXBhY3Rpb24uYzozMDQyOlxcdFxcdFxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF93YWl0KTtcXG5tbS9jb21wYWN0aW9uLmMtMzA0My1cXHRcXHR9XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzA5ND12b2lkIGNvbXBhY3Rpb25fdW5yZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICpub2RlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMwOTktXFxubW0vY29tcGFjdGlvbi5jOjMxMDA6c3RhdGljIGlubGluZSBib29sIGtjb21wYWN0ZF93b3JrX3JlcXVlc3RlZChwZ19kYXRhX3QgKnBnZGF0KVxcbm1tL2NvbXBhY3Rpb24uYy0zMTAxLXtcXG5tbS9jb21wYWN0aW9uLmM6MzEwMjpcXHRyZXR1cm4gcGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIgXFx1MDAzZSAwIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSB8fFxcbm1tL2NvbXBhY3Rpb24uYy0zMTAzLVxcdFxcdHBnZGF0LVxcdTAwM2Vwcm9hY3RpdmVfY29tcGFjdF90cmlnZ2VyO1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxMDUtXFxubW0vY29tcGFjdGlvbi5jOjMxMDY6c3RhdGljIGJvb2wga2NvbXBhY3RkX25vZGVfc3VpdGFibGUocGdfZGF0YV90ICpwZ2RhdClcXG5tbS9jb21wYWN0aW9uLmMtMzEwNy17XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzEwOS1cXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG5tbS9jb21wYWN0aW9uLmM6MzExMDpcXHRlbnVtIHpvbmVfdHlwZSBoaWdoZXN0X3pvbmVpZHggPSBwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeDtcXG5tbS9jb21wYWN0aW9uLmMtMzExMS1cXHRlbnVtIGNvbXBhY3RfcmVzdWx0IHJldDtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMTIxLVxcdFxcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHpvbmUsXFxubW0vY29tcGFjdGlvbi5jOjMxMjI6XFx0XFx0XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTMxMjMtXFx0XFx0XFx0XFx0aGlnaGVzdF96b25laWR4LCBhbGxvY19mbGFncyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMTMxLVxcbm1tL2NvbXBhY3Rpb24uYzozMTMyOnN0YXRpYyB2b2lkIGtjb21wYWN0ZF9kb193b3JrKHBnX2RhdGFfdCAqcGdkYXQpXFxubW0vY29tcGFjdGlvbi5jLTMxMzMte1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxNDAtXFx0c3RydWN0IGNvbXBhY3RfY29udHJvbCBjYyA9IHtcXG5tbS9jb21wYWN0aW9uLmM6MzE0MTpcXHRcXHQub3JkZXIgPSBwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX21heF9vcmRlcixcXG5tbS9jb21wYWN0aW9uLmM6MzE0MjpcXHRcXHQuc2VhcmNoX29yZGVyID0gcGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jOjMxNDM6XFx0XFx0LmhpZ2hlc3Rfem9uZWlkeCA9IHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfaGlnaGVzdF96b25laWR4LFxcbm1tL2NvbXBhY3Rpb24uYy0zMTQ0LVxcdFxcdC5tb2RlID0gTUlHUkFURV9TWU5DX0xJR0hULFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxNTAtXFxubW0vY29tcGFjdGlvbi5jOjMxNTE6XFx0dHJhY2VfbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfd2FrZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCwgY2Mub3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTMxNTItXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2MuaGlnaGVzdF96b25laWR4KTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMjA1LVxcdCAqL1xcbm1tL2NvbXBhY3Rpb24uYzozMjA2OlxcdGlmIChwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciBcXHUwMDNjPSBjYy5vcmRlcilcXG5tbS9jb21wYWN0aW9uLmM6MzIwNzpcXHRcXHRwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX21heF9vcmRlciA9IDA7XFxubW0vY29tcGFjdGlvbi5jOjMyMDg6XFx0aWYgKHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfaGlnaGVzdF96b25laWR4IFxcdTAwM2U9IGNjLmhpZ2hlc3Rfem9uZWlkeClcXG5tbS9jb21wYWN0aW9uLmM6MzIwOTpcXHRcXHRwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCA9IHBnZGF0LVxcdTAwM2Vucl96b25lcyAtIDE7XFxubW0vY29tcGFjdGlvbi5jLTMyMTAtfVxcbm1tL2NvbXBhY3Rpb24uYy0zMjExLVxcbm1tL2NvbXBhY3Rpb24uYzozMjEyOnZvaWQgd2FrZXVwX2tjb21wYWN0ZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxubW0vY29tcGFjdGlvbi5jLTMyMTMte1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMyMTYtXFxubW0vY29tcGFjdGlvbi5jOjMyMTc6XFx0aWYgKHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyIFxcdTAwM2Mgb3JkZXIpXFxubW0vY29tcGFjdGlvbi5jOjMyMTg6XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9tYXhfb3JkZXIgPSBvcmRlcjtcXG5tbS9jb21wYWN0aW9uLmMtMzIxOS1cXG5tbS9jb21wYWN0aW9uLmM6MzIyMDpcXHRpZiAocGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHggXFx1MDAzZSBoaWdoZXN0X3pvbmVpZHgpXFxubW0vY29tcGFjdGlvbi5jOjMyMjE6XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF9oaWdoZXN0X3pvbmVpZHggPSBoaWdoZXN0X3pvbmVpZHg7XFxubW0vY29tcGFjdGlvbi5jLTMyMjItXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzIyNi1cXHQgKi9cXG5tbS9jb21wYWN0aW9uLmM6MzIyNzpcXHRpZiAoIXdxX2hhc19zbGVlcGVyKFxcdTAwMjZwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX3dhaXQpKVxcbm1tL2NvbXBhY3Rpb24uYy0zMjI4LVxcdFxcdHJldHVybjtcXG5tbS9jb21wYWN0aW9uLmMtMzIyOS1cXG5tbS9jb21wYWN0aW9uLmM6MzIzMDpcXHRpZiAoIWtjb21wYWN0ZF9ub2RlX3N1aXRhYmxlKHBnZGF0KSlcXG5tbS9jb21wYWN0aW9uLmMtMzIzMS1cXHRcXHRyZXR1cm47XFxubW0vY29tcGFjdGlvbi5jLTMyMzItXFxubW0vY29tcGFjdGlvbi5jOjMyMzM6XFx0dHJhY2VfbW1fY29tcGFjdGlvbl93YWtldXBfa2NvbXBhY3RkKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMzIzNC1cXHRcXHRcXHRcXHRcXHRcXHRcXHRoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL2NvbXBhY3Rpb24uYzozMjM1OlxcdHdha2VfdXBfaW50ZXJydXB0aWJsZShcXHUwMDI2cGdkYXQtXFx1MDAzZWtjb21wYWN0ZF93YWl0KTtcXG5tbS9jb21wYWN0aW9uLmMtMzIzNi19XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzI0MS0gKi9cXG5tbS9jb21wYWN0aW9uLmM6MzI0MjpzdGF0aWMgaW50IGtjb21wYWN0ZCh2b2lkICpwKVxcbm1tL2NvbXBhY3Rpb24uYy0zMjQzLXtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMjUwLVxcbm1tL2NvbXBhY3Rpb24uYzozMjUxOlxcdHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyID0gMDtcXG5tbS9jb21wYWN0aW9uLmM6MzI1MjpcXHRwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX2hpZ2hlc3Rfem9uZWlkeCA9IHBnZGF0LVxcdTAwM2Vucl96b25lcyAtIDE7XFxubW0vY29tcGFjdGlvbi5jLTMyNTMtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzI2Mi1cXHRcXHRcXHR0aW1lb3V0ID0gTUFYX1NDSEVEVUxFX1RJTUVPVVQ7XFxubW0vY29tcGFjdGlvbi5jOjMyNjM6XFx0XFx0dHJhY2VfbW1fY29tcGFjdGlvbl9rY29tcGFjdGRfc2xlZXAocGdkYXQtXFx1MDAzZW5vZGVfaWQpO1xcbm1tL2NvbXBhY3Rpb24uYzozMjY0OlxcdFxcdGlmICh3YWl0X2V2ZW50X2ZyZWV6YWJsZV90aW1lb3V0KHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfd2FpdCxcXG5tbS9jb21wYWN0aW9uLmM6MzI2NTpcXHRcXHRcXHRrY29tcGFjdGRfd29ya19yZXF1ZXN0ZWQocGdkYXQpLCB0aW1lb3V0KSBcXHUwMDI2XFx1MDAyNlxcbm1tL2NvbXBhY3Rpb24uYy0zMjY2LVxcdFxcdFxcdCFwZ2RhdC1cXHUwMDNlcHJvYWN0aXZlX2NvbXBhY3RfdHJpZ2dlcikge1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMyNjgtXFx0XFx0XFx0cHNpX21lbXN0YWxsX2VudGVyKFxcdTAwMjZwZmxhZ3MpO1xcbm1tL2NvbXBhY3Rpb24uYzozMjY5OlxcdFxcdFxcdGtjb21wYWN0ZF9kb193b3JrKHBnZGF0KTtcXG5tbS9jb21wYWN0aW9uLmMtMzI3MC1cXHRcXHRcXHRwc2lfbWVtc3RhbGxfbGVhdmUoXFx1MDAyNnBmbGFncyk7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzMxMS0vKlxcbm1tL2NvbXBhY3Rpb24uYzozMzEyOiAqIFRoaXMga2NvbXBhY3RkIHN0YXJ0IGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGluaXQgYW5kIG5vZGUtaG90LWFkZC5cXG5tbS9jb21wYWN0aW9uLmM6MzMxMzogKiBPbiBub2RlLWhvdC1hZGQsIGtjb21wYWN0ZCB3aWxsIG1vdmVkIHRvIHByb3BlciBjcHVzIGlmIGNwdXMgYXJlIGhvdC1hZGRlZC5cXG5tbS9jb21wYWN0aW9uLmMtMzMxNC0gKi9cXG5tbS9jb21wYWN0aW9uLmM6MzMxNTp2b2lkIF9fbWVtaW5pdCBrY29tcGFjdGRfcnVuKGludCBuaWQpXFxubW0vY29tcGFjdGlvbi5jLTMzMTYte1xcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMzMTgtXFxubW0vY29tcGFjdGlvbi5jOjMzMTk6XFx0aWYgKHBnZGF0LVxcdTAwM2VrY29tcGFjdGQpXFxubW0vY29tcGFjdGlvbi5jLTMzMjAtXFx0XFx0cmV0dXJuO1xcbm1tL2NvbXBhY3Rpb24uYy0zMzIxLVxcbm1tL2NvbXBhY3Rpb24uYzozMzIyOlxcdHBnZGF0LVxcdTAwM2VrY29tcGFjdGQgPSBrdGhyZWFkX2NyZWF0ZV9vbl9ub2RlKGtjb21wYWN0ZCwgcGdkYXQsIG5pZCwgXFxcImtjb21wYWN0ZCVkXFxcIiwgbmlkKTtcXG5tbS9jb21wYWN0aW9uLmM6MzMyMzpcXHRpZiAoSVNfRVJSKHBnZGF0LVxcdTAwM2VrY29tcGFjdGQpKSB7XFxubW0vY29tcGFjdGlvbi5jOjMzMjQ6XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gc3RhcnQga2NvbXBhY3RkIG9uIG5vZGUgJWRcXFxcblxcXCIsIG5pZCk7XFxubW0vY29tcGFjdGlvbi5jOjMzMjU6XFx0XFx0cGdkYXQtXFx1MDAzZWtjb21wYWN0ZCA9IE5VTEw7XFxubW0vY29tcGFjdGlvbi5jLTMzMjYtXFx0fSBlbHNlIHtcXG5tbS9jb21wYWN0aW9uLmM6MzMyNzpcXHRcXHR3YWtlX3VwX3Byb2Nlc3MocGdkYXQtXFx1MDAzZWtjb21wYWN0ZCk7XFxubW0vY29tcGFjdGlvbi5jLTMzMjgtXFx0fVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMzMzQtICovXFxubW0vY29tcGFjdGlvbi5jOjMzMzU6dm9pZCBfX21lbWluaXQga2NvbXBhY3RkX3N0b3AoaW50IG5pZClcXG5tbS9jb21wYWN0aW9uLmMtMzMzNi17XFxubW0vY29tcGFjdGlvbi5jOjMzMzc6XFx0c3RydWN0IHRhc2tfc3RydWN0ICprY29tcGFjdGQgPSBOT0RFX0RBVEEobmlkKS1cXHUwMDNla2NvbXBhY3RkO1xcbm1tL2NvbXBhY3Rpb24uYy0zMzM4LVxcbm1tL2NvbXBhY3Rpb24uYzozMzM5OlxcdGlmIChrY29tcGFjdGQpIHtcXG5tbS9jb21wYWN0aW9uLmM6MzM0MDpcXHRcXHRrdGhyZWFkX3N0b3Aoa2NvbXBhY3RkKTtcXG5tbS9jb21wYWN0aW9uLmM6MzM0MTpcXHRcXHROT0RFX0RBVEEobmlkKS1cXHUwMDNla2NvbXBhY3RkID0gTlVMTDtcXG5tbS9jb21wYWN0aW9uLmMtMzM0Mi1cXHR9XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzM2ND1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bV9jb21wYWN0aW9uW10gPSB7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzQwMC1cXG5tbS9jb21wYWN0aW9uLmM6MzQwMTpzdGF0aWMgaW50IF9faW5pdCBrY29tcGFjdGRfaW5pdCh2b2lkKVxcbm1tL2NvbXBhY3Rpb24uYy0zNDAyLXtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zNDA1LVxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSlcXG5tbS9jb21wYWN0aW9uLmM6MzQwNjpcXHRcXHRrY29tcGFjdGRfcnVuKG5pZCk7XFxubW0vY29tcGFjdGlvbi5jLTM0MDctXFx0cmVnaXN0ZXJfc3lzY3RsX2luaXQoXFxcInZtXFxcIiwgdm1fY29tcGFjdGlvbik7XFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzQwOS19XFxubW0vY29tcGFjdGlvbi5jOjM0MTA6c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxcbm1tL2NvbXBhY3Rpb24uYy0zNDExLVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xNDgxPWdmcF90IHZtYV90aHBfZ2ZwX21hc2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTE0ODgtXFxubW0vaHVnZV9tZW1vcnkuYzoxNDg5OlxcdC8qIEtpY2sga2NvbXBhY3RkIGFuZCBmYWlsIHF1aWNrbHkgKi9cXG5tbS9odWdlX21lbW9yeS5jLTE0OTAtXFx0aWYgKHRlc3RfYml0KFRSQU5TUEFSRU5UX0hVR0VQQUdFX0RFRlJBR19LU1dBUERfRkxBRywgXFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTQ5Mi1cXG5tbS9odWdlX21lbW9yeS5jOjE0OTM6XFx0LyogU3luY2hyb25vdXMgY29tcGFjdGlvbiBpZiBtYWR2aXNlZCwgb3RoZXJ3aXNlIGtpY2sga2NvbXBhY3RkICovXFxubW0vaHVnZV9tZW1vcnkuYy0xNDk0LVxcdGlmICh0ZXN0X2JpdChUUkFOU1BBUkVOVF9IVUdFUEFHRV9ERUZSQUdfS1NXQVBEX09SX01BRFZfRkxBRywgXFx1MDAyNnRyYW5zcGFyZW50X2h1Z2VwYWdlX2ZsYWdzKSlcXG4tLVxcbm1tL2ludGVybmFsLmg9ODIzPXN0cnVjdCBjb21wYWN0X2NvbnRyb2wge1xcbi0tXFxubW0vaW50ZXJuYWwuaC04NTAtXFx0Ym9vbCBpZ25vcmVfYmxvY2tfc3VpdGFibGU7XFx0LyogU2NhbiBibG9ja3MgY29uc2lkZXJlZCB1bnN1aXRhYmxlICovXFxubW0vaW50ZXJuYWwuaDo4NTE6XFx0Ym9vbCBkaXJlY3RfY29tcGFjdGlvbjtcXHRcXHQvKiBGYWxzZSBmcm9tIGtjb21wYWN0ZCBvciAvcHJvYy8uLi4gKi9cXG5tbS9pbnRlcm5hbC5oOjg1MjpcXHRib29sIHByb2FjdGl2ZV9jb21wYWN0aW9uO1xcdC8qIGtjb21wYWN0ZCBwcm9hY3RpdmUgY29tcGFjdGlvbiAqL1xcbm1tL2ludGVybmFsLmgtODUzLVxcdGJvb2wgd2hvbGVfem9uZTtcXHRcXHQvKiBXaG9sZSB6b25lIHNob3VsZC9oYXMgYmVlbiBzY2FubmVkICovXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTExNDA9aW50IG9ubGluZV9wYWdlcyh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21lbW9yeV9ob3RwbHVnLmMtMTIzMi1cXHRrc3dhcGRfcnVuKG5pZCk7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoxMjMzOlxcdGtjb21wYWN0ZF9ydW4obmlkKTtcXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTEyMzQtXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jPTE5NTU9aW50IG9mZmxpbmVfcGFnZXModW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9tZW1vcnlfaG90cGx1Zy5jLTIxNDMtXFx0aWYgKG5vZGVfYXJnLm5pZCBcXHUwMDNlPSAwKSB7XFxubW0vbWVtb3J5X2hvdHBsdWcuYzoyMTQ0OlxcdFxcdGtjb21wYWN0ZF9zdG9wKG5vZGUpO1xcbm1tL21lbW9yeV9ob3RwbHVnLmMtMjE0NS1cXHRcXHRrc3dhcGRfc3RvcChub2RlKTtcXG4tLVxcbm1tL21tX2luaXQuYz0xMzMxPXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS9tbV9pbml0LmMtMTM3NC0jaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9tbV9pbml0LmM6MTM3NTpzdGF0aWMgdm9pZCBwZ2RhdF9pbml0X2tjb21wYWN0ZChzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KVxcbm1tL21tX2luaXQuYy0xMzc2LXtcXG5tbS9tbV9pbml0LmM6MTM3NzpcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZwZ2RhdC1cXHUwMDNla2NvbXBhY3RkX3dhaXQpO1xcbm1tL21tX2luaXQuYy0xMzc4LX1cXG5tbS9tbV9pbml0LmMtMTM3OS0jZWxzZVxcbm1tL21tX2luaXQuYzoxMzgwOnN0YXRpYyB2b2lkIHBnZGF0X2luaXRfa2NvbXBhY3RkKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpIHt9XFxubW0vbW1faW5pdC5jLTEzODEtI2VuZGlmXFxuLS1cXG5tbS9tbV9pbml0LmM9MTM4Mz1zdGF0aWMgdm9pZCBfX21lbWluaXQgcGdkYXRfaW5pdF9pbnRlcm5hbHMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL21tX2luaXQuYy0xMzg4LVxcdHBnZGF0X2tzd2FwZF9sb2NrX2luaXQocGdkYXQpO1xcbm1tL21tX2luaXQuYzoxMzg5OlxcdHBnZGF0X2luaXRfa2NvbXBhY3RkKHBnZGF0KTtcXG5tbS9tbV9pbml0LmMtMTM5MC1cXG4tLVxcbm1tL3NsdWIuYz02ODYxPXN0YXRpYyBnZnBfdCBrbWFsbG9jX2dmcF9hZGp1c3QoZ2ZwX3QgZmxhZ3MsIHNpemVfdCBzaXplKVxcbi0tXFxubW0vc2x1Yi5jLTY4NjgtXFx0ICogZG8gbm90IGRpcmVjdCByZWNsYWltIHVubGVzcyBwaHlzaWNhbGx5IGNvbnRpbnVvdXMgbWVtb3J5IGlzIHByZWZlcnJlZFxcbm1tL3NsdWIuYzo2ODY5OlxcdCAqIChfX0dGUF9SRVRSWV9NQVlGQUlMIG1vZGUpLiBXZSBzdGlsbCBraWNrIGluIGtzd2FwZC9rY29tcGFjdGQgdG9cXG5tbS9zbHViLmMtNjg3MC1cXHQgKiBzdGFydCB3b3JraW5nIGluIHRoZSBiYWNrZ3JvdW5kXFxuLS1cXG5tbS92bXNjYW4uYz03MTM5PXN0YXRpYyBpbnQgYmFsYW5jZV9wZ2RhdChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXFxuLS1cXG5tbS92bXNjYW4uYy03MzQxLVxcdFxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjczNDI6XFx0XFx0d2FrZXVwX2tjb21wYWN0ZChwZ2RhdCwgcGFnZWJsb2NrX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTczNDMtXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9NzM3Nz1zdGF0aWMgdm9pZCBrc3dhcGRfdHJ5X3RvX3NsZWVwKHBnX2RhdGFfdCAqcGdkYXQsIGludCBhbGxvY19vcmRlciwgaW50IHJlY2xhaW1fb3JkZXIsXFxuLS1cXG5tbS92bXNjYW4uYy03Mzg4LVxcdC8qXFxubW0vdm1zY2FuLmM6NzM4OTpcXHQgKiBUcnkgdG8gc2xlZXAgZm9yIGEgc2hvcnQgaW50ZXJ2YWwuIE5vdGUgdGhhdCBrY29tcGFjdGQgd2lsbCBvbmx5IGJlXFxubW0vdm1zY2FuLmMtNzM5MC1cXHQgKiB3b2tlbiBpZiBpdCBpcyBwb3NzaWJsZSB0byBzbGVlcCBmb3IgYSBzaG9ydCBpbnRlcnZhbC4gVGhpcyBpc1xcbi0tXFxubW0vdm1zY2FuLmMtNzQwNy1cXHRcXHQgKi9cXG5tbS92bXNjYW4uYzo3NDA4OlxcdFxcdHdha2V1cF9rY29tcGFjdGQocGdkYXQsIGFsbG9jX29yZGVyLCBoaWdoZXN0X3pvbmVpZHgpO1xcbm1tL3Ztc2Nhbi5jLTc0MDktXFxuLS1cXG5tbS92bXNjYW4uYz03NDc0PXN0YXRpYyBpbnQga3N3YXBkKHZvaWQgKnApXFxuLS1cXG5tbS92bXNjYW4uYy03NTMxLVxcdFxcdCAqIGZvciB0aGUgb3JkZXIgaXQgZmluaXNoZWQgcmVjbGFpbWluZyBhdCAocmVjbGFpbV9vcmRlcilcXG5tbS92bXNjYW4uYzo3NTMyOlxcdFxcdCAqIGJ1dCBrY29tcGFjdGQgaXMgd29rZW4gdG8gY29tcGFjdCBmb3IgdGhlIG9yaWdpbmFsXFxubW0vdm1zY2FuLmMtNzUzMy1cXHRcXHQgKiByZXF1ZXN0IChhbGxvY19vcmRlcikuXFxuLS1cXG5tbS92bXNjYW4uYy03NTUwLSAqIGtzd2FwZCBzaG91bGQgcmVjbGFpbSAoZGlyZWN0IHJlY2xhaW0gaXMgZGVmZXJyZWQpLCB3YWtlIGl0IHVwIGZvciB0aGUgem9uZSdzXFxubW0vdm1zY2FuLmM6NzU1MTogKiBwZ2RhdC4gIEl0IHdpbGwgd2FrZSB1cCBrY29tcGFjdGQgYWZ0ZXIgcmVjbGFpbWluZyBtZW1vcnkuICBJZiBrc3dhcGQgcmVjbGFpbVxcbm1tL3Ztc2Nhbi5jOjc1NTI6ICogaGFzIGZhaWxlZCBvciBpcyBub3QgbmVlZGVkLCBzdGlsbCB3YWtlIHVwIGtjb21wYWN0ZCBpZiBvbmx5IGNvbXBhY3Rpb24gaXNcXG5tbS92bXNjYW4uYy03NTUzLSAqIG5lZWRlZC5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTc1NTU9dm9pZCB3YWtldXBfa3N3YXBkKHN0cnVjdCB6b25lICp6b25lLCBnZnBfdCBnZnBfZmxhZ3MsIGludCBvcmRlcixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1ODQtXFx0XFx0ICogVGhlcmUgbWF5IGJlIHBsZW50eSBvZiBmcmVlIG1lbW9yeSBhdmFpbGFibGUsIGJ1dCBpdCdzIHRvb1xcbm1tL3Ztc2Nhbi5jOjc1ODU6XFx0XFx0ICogZnJhZ21lbnRlZCBmb3IgaGlnaC1vcmRlciBhbGxvY2F0aW9ucy4gIFdha2UgdXAga2NvbXBhY3RkXFxubW0vdm1zY2FuLmMtNzU4Ni1cXHRcXHQgKiBhbmQgcmVseSBvbiBjb21wYWN0aW9uX3N1aXRhYmxlKCkgdG8gZGV0ZXJtaW5lIGlmIGl0J3NcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc1OTAtXFx0XFx0aWYgKCEoZ2ZwX2ZsYWdzIFxcdTAwMjYgX19HRlBfRElSRUNUX1JFQ0xBSU0pKVxcbm1tL3Ztc2Nhbi5jOjc1OTE6XFx0XFx0XFx0d2FrZXVwX2tjb21wYWN0ZChwZ2RhdCwgb3JkZXIsIGhpZ2hlc3Rfem9uZWlkeCk7XFxubW0vdm1zY2FuLmMtNzU5Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG50b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oPTI2PWVudW0ge1xcbi0tXFxudG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjQtICogYXJlIGNvbXBvdW5kIGFsbG9jYXRpb25zIHRoYXQgd2lsbCBnZW5lcmFsbHkgZmFpbCBxdWlja2x5IGlmIG1lbW9yeSBpcyBub3RcXG50b29scy9pbmNsdWRlL2xpbnV4L2dmcF90eXBlcy5oOjM2NTogKiBhdmFpbGFibGUgYW5kIHdpbGwgbm90IHdha2Uga3N3YXBkL2tjb21wYWN0ZCBvbiBmYWlsdXJlLiBUaGUgX0xJR0hUXFxudG9vbHMvaW5jbHVkZS9saW51eC9nZnBfdHlwZXMuaC0zNjYtICogdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHJlY2xhaW0vY29tcGFjdGlvbiBhdCBhbGwgYW5kIGlzIGJ5IGRlZmF1bHQgdXNlZFxcbi0tXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaC0zMi0jZGVmaW5lIFBGX1dRX1dPUktFUlxcdFxcdFxcdDB4MDAwMDAwMjBcXHQvKiBJJ20gYSB3b3JrcXVldWUgd29ya2VyICovXFxudG9vbHMvc2NoZWRfZXh0L2luY2x1ZGUvc2N4L2NvbW1vbi5icGYuaDozMzojZGVmaW5lIFBGX0tDT01QQUNURFxcdFxcdFxcdDB4MDAwMTAwMDAgICAgICAvKiBJIGFtIGtjb21wYWN0ZCAqL1xcbnRvb2xzL3NjaGVkX2V4dC9pbmNsdWRlL3NjeC9jb21tb24uYnBmLmgtMzQtI2RlZmluZSBQRl9LU1dBUERcXHRcXHRcXHQweDAwMDIwMDAwICAgICAgLyogSSBhbSBrc3dhcGQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MTYuOTUzNDE5MTMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDIyMjUwMTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1vcnkgQ29tcGFjdGlvbiBmb3IgQ29kZSBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgc2NhbiBpZGVudGlmaWVkIHNldmVyYWwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoZSBtZW1vcnkgY29tcGFjdGlvbiBjb2RlIHRoYXQgc2VlbSBsaWtlIGdvb2QgZW50cnkgcG9pbnRzIGZvciBmdXJ0aGVyIGFuYWx5c2lzLiBTcGVjaWZpY2FsbHksIGB3YWtldXBfa2NvbXBhY3RkYCwgYGtjb21wYWN0ZF9ydW5gLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGFuZCBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgYWxsIGp1bXBlZCBvdXQgaW1tZWRpYXRlbHkuIEknbGwgbmVlZCB0byBmb2N1cyBvbiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgaW4gYG1tL2NvbXBhY3Rpb24uY2AgYXMgYSBrZXkgc3ltYm9sLCBnaXZlbiBpdHMgbm9uLXN0YXRpYyBuYXR1cmUuIFNpbWlsYXJseSwgYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgIGlzIGFsc28gbm9uLXN0YXRpYy4gVGhlbiB0aGVyZSdzIGB3YWtldXBfa3N3YXBkYCBhbmQgYHdha2V1cF9rY29tcGFjdGRgIGFuZCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCdzIG1vZGlmeWluZyBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMuIFRoYXQncyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgc2hvdWxkX3Byb2FjdGl2ZV9jb21wYWN0X25vZGVgLCBgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlYCwgYGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZGAsIGFuZCBgZnJhZ21lbnRhdGlvbl9zY29yZV96b25lYCBhcmUgYmVpbmcgdG91Y2hlZCwgYW5kIGFsbCBvZiB0aG9zZSBhcmUgc3RhdGljIGFuZCBjYWxsZWQgYnkgYGtjb21wYWN0ZGAuIFRoZSBwYXRjaCBhbHNvIGFmZmVjdHMgYF9fY29tcGFjdF9maW5pc2hlZGAgKGNhbGxlZCBmcm9tIGBjb21wYWN0X3pvbmVgKSwgYW5kIGBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcmAgKGNhbGxlZCBmcm9tIGBjb21wYWN0X3pvbmVgLCBga2NvbXBhY3RkX25vZGVfc3VpdGFibGVgLCBhbmQgYGtjb21wYWN0ZF9kb193b3JrYCkuIEFkZGl0aW9uYWxseSwgYHBnZGF0X2JhbGFuY2VkYCBpcyBtb2RpZmllZCwgd2hpY2ggaXMgc3RhdGljIGFuZCBjYWxsZWQgZnJvbSBgcHJlcGFyZV9rc3dhcGRfc2xlZXBgLCBgYmFsYW5jZV9wZ2RhdGAsIGB3YWtldXBfa3N3YXBkYCwgYW5kIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYC4gU28sIGRlc3BpdGUgdGhlIHN0YXRpYyBuYXR1cmUsIHRoZXNlIGFyZSByZWxldmFudCBiZWNhdXNlIHRoZSBwYXRjaCAqaXMqIG1vZGlmeWluZyB0aGVtIGluIHJlbGF0aW9uIHRvIHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucy5cblxuVGhlcmVmb3JlLCB0aGUgbWFpbiBmb2N1cyBpcyBzdGlsbCBvbiB0aGVzZSBub24tc3RhdGljIGZ1bmN0aW9uczpcblxuKiAgIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYFxuKiAgIGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYFxuKiAgIGB3YWtldXBfa3N3YXBkYFxuKiAgIGB3YWtldXBfa2NvbXBhY3RkYFxuKiAgIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYFxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCB0aG9zZSBhcmUgaW5kZWVkIG5vbi1zdGF0aWMuIFllcywgYWxsIG9mIHRoZW0gYXJlIG5vbi1zdGF0aWMgYXMgSSBpbml0aWFsbHkgdGhvdWdodC5cblxuRmluYWxseSwgSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgYXJlYTogYENPTVBBQ1RJT05gIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBJIHNob3VsZCBhbHNvIGRvdWJsZSBjaGVjayB0aGF0IGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMsIGFzIEkgdGhvdWdodCwgb25seSB0aWVkIHRvIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBZZXAsIGNvbmZpcm1lZCBpbiBgbW0vaHVnZV9tZW1vcnkuY2AsIHdoaWNoIGlzIG9ubHkgY29tcGlsZWQgd2l0aCB0aGF0IGNvbmZpZy4gQWxsIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI2NDEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MjcuOTc1NjcyNjc0WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzAxOTQ3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSArPSBtaWdyYXRlX2RldmljZS5vXFxubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgKz0gaHVnZV9tZW1vcnkubyBraHVnZXBhZ2VkLm9cXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgKz0gcGFnZV9jb3VudGVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MjguMjA1ODcyMDk1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjg5MjQxOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipDaGVja2luZyBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIGlzIGNyeXN0YWwgY2xlYXI6IGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgYSBwcmVyZXF1aXNpdGUuIE5vIHF1ZXN0aW9uIHRoZXJlLiBOb3csIGxldCdzIG1vdmUgb250byBjb21wYWN0aW9uLCBzcGVjaWZpY2FsbHkgd2hldGhlciBgQ09NUEFDVElPTmAgaXMgbmVjZXNzYXJ5IGluIHRoaXMgY29udGV4dC5cblxuUmlnaHQsIEknbGwgZ28gaGF2ZSBhIHF1aWNrIGxvb2sgYXQgdGhlIHNvdXJjZS4gSXQgbG9va3MgbGlrZSB0aGUga2VybmVsIGNvbXBpbGVzIGBtbS9jb21wYWN0aW9uLmNgIHdoZW4gYENPTkZJR19DT01QQUNUSU9OYCBpcyBkZWZpbmVkLiBHb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzkzMSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjMzLjM3NDc5OTM1OVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgwNDc5MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdGlvbi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT01MT1vYmoteVxcdFxcdFxcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcXFxcbi0tXFxubW0vTWFrZWZpbGUtNTUtXFx0XFx0XFx0ICAgbW1faW5pdC5vIHBlcmNwdS5vIHNsYWJfY29tbW9uLm8gXFxcXFxcbm1tL01ha2VmaWxlOjU2OlxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Ny1cXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcbi0tXFxubW0vYmFsbG9vbi5jPTE4MT1FWFBPUlRfU1lNQk9MX0dQTChiYWxsb29uX3BhZ2VfZW5xdWV1ZSk7XFxuLS1cXG5tbS9iYWxsb29uLmMtMTk1LSAqIHNvbWUgZW5xdWV1ZWQgcGFnZXMgLSBzaW5jZSB0aGUgcGFnZSBsaXN0IGNhbiBiZSB0ZW1wb3JhcmlseSBlbXB0eSBkdWUgdG9cXG5tbS9iYWxsb29uLmM6MTk2OiAqIHRoZSBjb21wYWN0aW9uIG9mIGlzb2xhdGVkIHBhZ2VzLlxcbm1tL2JhbGxvb24uYy0xOTctICpcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0xNTI9c3RhdGljIGJvb2wgY29tcGFjdGlvbl9kZWZlcnJlZChzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTE3MC0vKlxcbm1tL2NvbXBhY3Rpb24uYzoxNzE6ICogVXBkYXRlIGRlZmVyIHRyYWNraW5nIGNvdW50ZXJzIGFmdGVyIHN1Y2Nlc3NmdWwgY29tcGFjdGlvbiBvZiBnaXZlbiBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMTcyLSAqIHdoaWNoIG1lYW5zIGFuIGFsbG9jYXRpb24gZWl0aGVyIHN1Y2NlZWRlZCAoYWxsb2Nfc3VjY2VzcyA9PSB0cnVlKSBvciBpc1xcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI0MjI9c3RhdGljIGJvb2wgX19jb21wYWN0aW9uX3N1aXRhYmxlKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjQ0OS0vKlxcbm1tL2NvbXBhY3Rpb24uYzoyNDUwOiAqIGNvbXBhY3Rpb25fc3VpdGFibGU6IElzIHRoaXMgc3VpdGFibGUgdG8gcnVuIGNvbXBhY3Rpb24gb24gdGhpcyB6b25lIG5vdz9cXG5tbS9jb21wYWN0aW9uLmMtMjQ1MS0gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzMuNDIyODUzMjI3WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1ODc1MTkxNTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHVuZm9sZGVkOlxuXG4qKlVucGFja2luZyBhIENvbXBpbGF0aW9uIE15c3RlcnkqKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIHdhcyB1bmRlciB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZSBjb21wYWN0aW9uIGNvZGUgaW4gYG1tL2NvbXBhY3Rpb24uY2AgaGFkIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIGJ1dCBub3cgSSdtIHF1ZXN0aW9uaW5nIHRoYXQuIFdoeSBhcmUgd2UgY29tcGlsaW5nIGl0IHVuY29uZGl0aW9uYWxseT8gVGhhdCBkb2Vzbid0IHNlZW0gcmlnaHQuIExldCdzIGRpZyBpbiBhbmQgY29uZmlybS4gRmlyc3QsIEknbGwgY2hlY2sgdGhlIGBtbS9NYWtlZmlsZWAgdG8gc2VlIGhvdyB0aGUgb2JqZWN0IGZpbGVzIGFyZSBiZWluZyBoYW5kbGVkLiBBaCwgdGhlcmUgaXQgaXM6IGBvYmoteSA6PSAuLi4gY29tcGFjdGlvbi5vIC4uLmAuIFRoZSBgY29tcGFjdGlvbi5vYCAqaXMqIGxpc3RlZCB1bmRlciBgb2JqLXlgLiBTbywgaXQgKmlzKiBiZWluZyB1bmNvbmRpdGlvbmFsbHkgYnVpbHQgaW50byB0aGUga2VybmVsIGltYWdlLiBUaGF04oCZcyBvZGQuIExldCdzIGdvIGJhY2sgYW5kIGV4YW1pbmUgYG1tL2NvbXBhY3Rpb24uY2AgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgaXQncyBub3QgZ3VhcmRlZCBieSBzb21lIGZlYXR1cmUgZmxhZyBvciBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhpcyBjb3VsZCBoYXZlIHNvbWUgcGVyZm9ybWFuY2Ugb3IgbWVtb3J5IGltcGxpY2F0aW9ucyBpZiBjb21wYWN0aW9uIGlzbid0IGFjdHVhbGx5IGJlaW5nIHVzZWQgaW4gYSBzcGVjaWZpYyBidWlsZC4gSXQgd291bGQgYmUgZ29vZCB0byBzZWUgd2h5IGl0J3MgdW5jb25kaXRpb25hbGx5IGJ1aWx0LCBiZWNhdXNlIHRoYXQncyBub3Qgd2hhdCBJIGV4cGVjdGVkLiBJJ2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NTE2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzkuMDEwMzc1MDg1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTMwMTAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfQ09NUEFDVElPTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jb21wYWN0aW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY29tcGFjdGlvbi5jLTMwLVxcbm1tL2NvbXBhY3Rpb24uYzozMTojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMzItLypcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz02MT1zdGF0aWMgaW5saW5lIGJvb2wgaXNfdmlhX2NvbXBhY3RfbWVtb3J5KGludCBvcmRlcikgeyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy02My1cXG5tbS9jb21wYWN0aW9uLmM6NjQ6I2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BXFxubW0vY29tcGFjdGlvbi5jLTY1LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEwMj1zdGF0aWMgdW5zaWduZWQgbG9uZyByZWxlYXNlX2ZyZWVfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlcGFnZXMpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMTI2LVxcbm1tL2NvbXBhY3Rpb24uYzoxMjc6I2lmZGVmIENPTkZJR19DT01QQUNUSU9OXFxubW0vY29tcGFjdGlvbi5jLTEyOC1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTUwNC19XFxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9jb21wYWN0aW9uLmMtNTA2LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTEzODgtXFxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cXG5tbS9jb21wYWN0aW9uLmM6MTM5MDojaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG5tbS9jb21wYWN0aW9uLmMtMTM5MS1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zNDEwPXN1YnN5c19pbml0Y2FsbChrY29tcGFjdGRfaW5pdClcXG5tbS9jb21wYWN0aW9uLmMtMzQxMS1cXG5tbS9jb21wYWN0aW9uLmM6MzQxMjojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6MzkuMDU1NjgwMTUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3MjUyMDI0MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29tcGFjdGlvbiBNb2R1bGUgTXVzaW5ncyoqXG5cbk9rYXksIHNvIEknbSB0YWtpbmcgYSBsb29rIGF0IGBtbS9jb21wYWN0aW9uLmNgLiBJdCdzIGNvbXBpbGVkIGluIGFsbCBjb25maWd1cmF0aW9ucywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEJ1dCwgSSBrbm93IGEgbG90IG9mIHRoZSBhY3R1YWwgY29kZSAqd2l0aGluKiB0aGF0IGZpbGUgaXMgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcHJpbWFyaWx5IHVzaW5nIGAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05gLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgc29tZXRoaW5nIHNwZWNpZmljLi4uIEkgd2FudCB0byBxdWlja2x5IGFzY2VydGFpbiBpZiB0aGUgZnVuY3Rpb24gYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGlzICphbHNvKiBndWFyZGVkIGJ5IHRoYXQgc2FtZSBtYWNyby4gS25vd2luZyB0aGF0IHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCBob3cgcm9idXN0IHRoZSBjb21wYWN0aW9uIGNvbmZpZ3VyYXRpb24gaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzMzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NDIuNzgwODg1MjI4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzY2MTU1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9MjQ5Nz1ib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjUzMS0vKipcXG5tbS9jb21wYWN0aW9uLmM6MjUzMjogKiB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzIC0gZ2V0IGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gYWxsb2NhdGlvbiBvcmRlclxcbm1tL2NvbXBhY3Rpb24uYy0yNTMzLSAqIEB6b25lOiAgICAgICB0YXJnZXQgem9uZVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI1NDQtICovXFxubW0vY29tcGFjdGlvbi5jOjI1NDU6dW5zaWduZWQgbG9uZyB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHN0cnVjdCB6b25lICp6b25lLFxcbm1tL2NvbXBhY3Rpb24uYy0yNTQ2LVxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcixcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNTcxPWNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjU3Ny1cXG5tbS9jb21wYWN0aW9uLmM6MjU3ODpcXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMjU3OS1cXHRcXHRcXHRcXHRcXHQgICAgICAga2NvbXBhY3RkIFxcdTAwMjZcXHUwMDI2IGRlZnJhZ19tb2RlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NDIuODI0NTUzNjI2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUwMjM1NjIzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgYCNpZmRlZmAgYmxvY2sgYXNzb2NpYXRlZCB3aXRoIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYC4gVGhpcyBzdWdnZXN0cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHNjZW5hcmlvLCBtZWFuaW5nIHRoZSBwcmVzZW5jZSBhbmQvb3IgYmVoYXZpb3Igb2YgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGlzIGRlcGVuZGVudCBvbiBhIHNwZWNpZmljIHByZXByb2Nlc3NvciBkZWZpbml0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb2RlYmFzZSBhbmQgc2VhcmNoIGZvciB0aGF0IG1hY3JvIGRlZmluaXRpb24uIEknbGwgbGlrZWx5IHVzZSBhIHRvb2wgb3IgbXkgSURFJ3Mgc2VhcmNoIGZ1bmN0aW9uIGZvciB0aGlzLiBTaW5jZSBJIGhhdmUgZXhwZXJpZW5jZSBpbiB0aGlzIGZpZWxkLCBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNvbW1vbiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjZGVmaW5lYCBvciBgI3VuZGVmYCBhbmQsIG9mIGNvdXJzZSwgdGhlIGAjaWZkZWZgIGJsb2NrIGl0c2VsZi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb250ZXh0IGRldGVybWluZXMgdGhlIGVmZmVjdGl2ZSB1c2Ugb2YgdGhhdCBibG9jay4gT25jZSBJIGxvY2F0ZSBpdCwgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGlzIGFsbCBhYm91dC4gVGhpcyBtYXkgcmVxdWlyZSB1bmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBleGFtaW5pbmcgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTgxMSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjQ3Ljg0ODExODAxOFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjkyMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vY29tcGFjdGlvbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0OTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyNDkwOlxcdFxcbjI0OTE6XFx0XFx0dHJhY2VfbW1fY29tcGFjdGlvbl9zdWl0YWJsZSh6b25lLCBvcmRlciwgY29tcGFjdF9yZXN1bHQpO1xcbjI0OTI6XFx0XFxuMjQ5MzpcXHRcXHRyZXR1cm4gc3VpdGFibGU7XFxuMjQ5NDpcXHR9XFxuMjQ5NTpcXHRcXG4yNDk2OlxcdC8qIFVzZWQgYnkgZGlyZWN0IHJlY2xhaW1lcnMgKi9cXG4yNDk3OlxcdGJvb2wgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZShzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsIGludCBvcmRlcixcXG4yNDk4OlxcdFxcdFxcdGludCBhbGxvY19mbGFncywgZ2ZwX3QgZ2ZwX21hc2spXFxuMjQ5OTpcXHR7XFxuMjUwMDpcXHRcXHRzdHJ1Y3Qgem9uZSAqem9uZTtcXG4yNTAxOlxcdFxcdHN0cnVjdCB6b25lcmVmICp6O1xcbjI1MDI6XFx0XFxuMjUwMzpcXHRcXHQvKlxcbjI1MDQ6XFx0XFx0ICogTWFrZSBzdXJlIGF0IGxlYXN0IG9uZSB6b25lIHdvdWxkIHBhc3MgX19jb21wYWN0aW9uX3N1aXRhYmxlIGlmIHdlIGNvbnRpbnVlXFxuMjUwNTpcXHRcXHQgKiByZXRyeWluZyB0aGUgcmVjbGFpbS5cXG4yNTA2OlxcdFxcdCAqL1xcbjI1MDc6XFx0XFx0Zm9yX2VhY2hfem9uZV96b25lbGlzdF9ub2RlbWFzayh6b25lLCB6LCBhYy1cXHUwMDNlem9uZWxpc3QsXFxuMjUwODpcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LCBhYy1cXHUwMDNlbm9kZW1hc2spIHtcXG4yNTA5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXZhaWxhYmxlO1xcbjI1MTA6XFx0XFxuMjUxMTpcXHRcXHRcXHRpZiAoY3B1c2V0c19lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgKGFsbG9jX2ZsYWdzIFxcdTAwMjYgQUxMT0NfQ1BVU0VUKSBcXHUwMDI2XFx1MDAyNlxcbjI1MTI6XFx0XFx0XFx0ICAgICFfX2NwdXNldF96b25lX2FsbG93ZWQoem9uZSwgZ2ZwX21hc2spKVxcbjI1MTM6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuMjUxNDpcXHRcXG4yNTE1OlxcdFxcdFxcdC8qXFxuMjUxNjpcXHRcXHRcXHQgKiBEbyBub3QgY29uc2lkZXIgYWxsIHRoZSByZWNsYWltYWJsZSBtZW1vcnkgYmVjYXVzZSB3ZSBkbyBub3RcXG4yNTE3OlxcdFxcdFxcdCAqIHdhbnQgdG8gdHJhc2gganVzdCBmb3IgYSBzaW5nbGUgaGlnaCBvcmRlciBhbGxvY2F0aW9uIHdoaWNoXFxuMjUxODpcXHRcXHRcXHQgKiBpcyBldmVuIG5vdCBndWFyYW50ZWVkIHRvIGFwcGVhciBldmVuIGlmIF9fY29tcGFjdGlvbl9zdWl0YWJsZVxcbjI1MTk6XFx0XFx0XFx0ICogaXMgaGFwcHkgYWJvdXQgdGhlIHdhdGVybWFyayBjaGVjay5cXG4yNTIwOlxcdFxcdFxcdCAqL1xcbjI1MjE6XFx0XFx0XFx0YXZhaWxhYmxlID0gem9uZV9yZWNsYWltYWJsZV9wYWdlcyh6b25lKSAvIG9yZGVyO1xcbjI1MjI6XFx0XFx0XFx0YXZhaWxhYmxlICs9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLCBOUl9GUkVFX1BBR0VTKTtcXG4yNTIzOlxcdFxcdFxcdGlmIChfX2NvbXBhY3Rpb25fc3VpdGFibGUoem9uZSwgb3JkZXIsIG1pbl93bWFya19wYWdlcyh6b25lKSxcXG4yNTI0OlxcdFxcdFxcdFxcdFxcdFxcdCAgYWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYXZhaWxhYmxlKSlcXG4yNTI1OlxcdFxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI1MjY6XFx0XFx0fVxcbjI1Mjc6XFx0XFxuMjUyODpcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjUyOTpcXHR9XFxuMjUzMDpcXHRcXG4yNTMxOlxcdC8qKlxcbjI1MzI6XFx0ICogem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyAtIGdldCBmcmVlIHBhZ2VzIHJlbGV2YW50IHRvIGFsbG9jYXRpb24gb3JkZXJcXG4yNTMzOlxcdCAqIEB6b25lOiAgICAgICB0YXJnZXQgem9uZVxcbjI1MzQ6XFx0ICogQG9yZGVyOiAgICAgIGFsbG9jYXRpb24gb3JkZXJcXG4yNTM1OlxcdCAqIEB1c2VfYmxvY2tzOiBpZiB0cnVlLCB1c2UgTlJfRlJFRV9QQUdFU19CTE9DS1NcXG4yNTM2OlxcdCAqXFxuMjUzNzpcXHQgKiBJbiBkZWZyYWdfbW9kZSwgd2F0ZXJtYXJrcyBtdXN0IGJlIG1ldCBpbiB3aG9sZSBibG9ja3MgdG8gYXZvaWRcXG4yNTM4OlxcdCAqIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLiBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaFxcbjI1Mzk6XFx0ICogdGhpcyBvbiBpdHMgb3duIGFuZCBuZWVkcyBrY29tcGFjdGQgc3VwcG9ydC5cXG4yNTQwOlxcdCAqXFxuMjU0MTpcXHQgKiBXaGVuIG1USFAgYWx3YXlzLWVuYWJsZWQgb3JkZXJzIGFyZSBjb25maWd1cmVkLCBjb3VudCBvbmx5IGZyZWUgcGFnZXNcXG4yNTQyOlxcdCAqIGluIGJsb2NrcyBcXHUwMDNlPSBtaW4gbVRIUCBvcmRlciwgYXMgc21hbGxlciBmcmFnbWVudHMgY2Fubm90IHNhdGlzZnkgbVRIUFxcbjI1NDM6XFx0ICogYWxsb2NhdGlvbnMuXFxuMjU0NDpcXHQgKi9cXG4yNTQ1OlxcdHVuc2lnbmVkIGxvbmcgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyhzdHJ1Y3Qgem9uZSAqem9uZSxcXG4yNTQ2OlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBvcmRlcixcXG4yNTQ3OlxcdFxcdFxcdFxcdFxcdFxcdGJvb2wgdXNlX2Jsb2NrcylcXG4yNTQ4OlxcdHtcXG4yNTQ5OlxcdFxcdGlmICh1c2VfYmxvY2tzKVxcbjI1NTA6XFx0XFx0XFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XFxuMjU1MTpcXHRcXG4yNTUyOlxcdFxcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFxcdTAwMjZcXHUwMDI2IG9yZGVyID09IGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSkge1xcbjI1NTM6XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcXG4yNTU0OlxcdFxcbjI1NTU6XFx0XFx0XFx0Zm9yIChpbnQgbyA9IG9yZGVyOyBvIFxcdTAwM2MgTlJfUEFHRV9PUkRFUlM7IG8rKylcXG4yNTU2OlxcdFxcdFxcdFxcdGZyZWVfcGFnZXMgKz0gem9uZS1cXHUwMDNlZnJlZV9hcmVhW29dLm5yX2ZyZWUgXFx1MDAzY1xcdTAwM2MgbztcXG4yNTU3OlxcdFxcdFxcdHJldHVybiBmcmVlX3BhZ2VzO1xcbjI1NTg6XFx0XFx0fVxcbjI1NTk6XFx0XFxuMjU2MDpcXHRcXHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xcbjI1NjE6XFx0fVxcbjI1NjI6XFx0XFxuMjU2MzpcXHQvKlxcbjI1NjQ6XFx0ICogU2hvdWxkIHdlIGRvIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBhbGxvY2F0aW9uIG9yZGVyLlxcbjI1NjU6XFx0ICogUmV0dXJuIENPTVBBQ1RfU1VDQ0VTUyBpZiBhbGxvY2F0aW9uIGZvciB0YXJnZXQgb3JkZXIgY2FuIGJlIGFscmVhZHlcXG4yNTY2OlxcdCAqIHNhdGlzZmllZFxcbjI1Njc6XFx0ICogUmV0dXJuIENPTVBBQ1RfU0tJUFBFRCBpZiBjb21wYWN0aW9uIGZvciB0YXJnZXQgb3JkZXIgaXMgbGlrZWx5IHRvIGZhaWxcXG4yNTY4OlxcdCAqIFJldHVybiBDT01QQUNUX0NPTlRJTlVFIGlmIGNvbXBhY3Rpb24gZm9yIHRhcmdldCBvcmRlciBzaG91bGQgYmUgcmFuXFxuMjU2OTpcXHQgKi9cXG4yNTcwOlxcdHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XFxuMjU3MTpcXHRjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbjI1NzI6XFx0XFx0XFx0XFx0XFx0IGludCBoaWdoZXN0X3pvbmVpZHgsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4yNTczOlxcdFxcdFxcdFxcdFxcdCBib29sIGFzeW5jLCBib29sIGtjb21wYWN0ZClcXG4yNTc0OlxcdHtcXG4yNTc1OlxcdFxcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcztcXG4yNTc2OlxcdFxcdHVuc2lnbmVkIGxvbmcgd2F0ZXJtYXJrO1xcbjI1Nzc6XFx0XFxuMjU3ODpcXHRcXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcXG4yNTc5OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBrY29tcGFjdGQgXFx1MDAyNlxcdTAwMjYgZGVmcmFnX21vZGUpO1xcbjI1ODA6XFx0XFxuMjU4MTpcXHRcXHR3YXRlcm1hcmsgPSB3bWFya19wYWdlcyh6b25lLCBhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xcbjI1ODI6XFx0XFx0aWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LFxcbjI1ODM6XFx0XFx0XFx0XFx0XFx0YWxsb2NfZmxhZ3MsIGZyZWVfcGFnZXMpKVxcbjI1ODQ6XFx0XFx0XFx0cmV0dXJuIENPTVBBQ1RfU1VDQ0VTUztcXG4yNTg1OlxcdFxcbjI1ODY6XFx0XFx0LypcXG4yNTg3OlxcdFxcdCAqIEZvciB1bm1vdmFibGUgYWxsb2NhdGlvbnMgKHdpdGhvdXQgQUxMT0NfQ01BKSwgY2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoXFxuMjU4ODpcXHRcXHQgKiBmcmVlIG1lbW9yeSBpbiB0aGUgbm9uLUNNQSBwYWdlYmxvY2tzLiBPdGhlcndpc2UgY29tcGFjdGlvbiBjb3VsZCBmb3JtXFxuMjU4OTpcXHRcXHQgKiB0aGUgaGlnaC1vcmRlciBwYWdlIGluIENNQSBwYWdlYmxvY2tzLCB3aGljaCB3b3VsZCBub3QgaGVscCB0aGVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NDcuODQ4Mjg5OTA4WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MjkwOTEyMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29tcGFjdGlvbiBDb2RlIExvY2F0aW9uIENoZWNrKipcblxuT2theSwgc28gSSdtIHByZXR0eSBzdXJlIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGlzIHdpdGhpbiBgbW0vY29tcGFjdGlvbi5jYC4gQW5kIGJhc2VkIG9uIG15IHBhc3QgZXhwZXJpZW5jZSB3aXRoIHRoZSBrZXJuZWwsIGl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IHRoaXMgZmlsZSBpcyBvbmx5IHJlbGV2YW50IGlmIGBDT05GSUdfQ09NUEFDVElPTmAgaXMgZGVmaW5lZC4gVGhlcmVmb3JlLCBJIHNob3VsZCBzdGFydCBieSBjb25maXJtaW5nIHRoYXQsIHBlcmhhcHMgbG9va2luZyBmb3IgdGhlIHJlbGV2YW50IGAjaWZkZWZgIGJsb2NrLiBMZXQncyBnbyBhaGVhZCBhbmQgdGFrZSBhIHBlZWsgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYG1tL2NvbXBhY3Rpb24uY2AgZmlsZSBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEknbSBnb2luZyB0byBzdGFydCB0aGVyZSwgYXQgdGhlIHRvcCwgYW5kIGdldCBhbiBvdmVydmlldyBvZiB0aGUgY29kZSBvcmdhbml6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NTkxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjo1MS42NzczODQzNThaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIGxpbnV4L21tL2NvbXBhY3Rpb24uY1xcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIE1lbW9yeSBjb21wYWN0aW9uIGZvciB0aGUgcmVkdWN0aW9uIG9mIGV4dGVybmFsIGZyYWdtZW50YXRpb24uIE5vdGUgdGhhdFxcbiAgIDY6XFx0ICogdGhpcyBoZWF2aWx5IGRlcGVuZHMgdXBvbiBwYWdlIG1pZ3JhdGlvbiB0byBkbyBhbGwgdGhlIHJlYWwgaGVhdnlcXG4gICA3OlxcdCAqIGxpZnRpbmdcXG4gICA4OlxcdCAqXFxuICAgOTpcXHQgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDctMjAxMCBNZWwgR29ybWFuIFxcdTAwM2NtZWxAY3NuLnVsLmllXFx1MDAzZVxcbiAgMTA6XFx0ICovXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY3B1LmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcC5oXFx1MDAzZVxcbiAgMTM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21pZ3JhdGUuaFxcdTAwM2VcXG4gIDE0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wYWN0aW9uLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW1faW5saW5lLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuICAxNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYmFja2luZy1kZXYuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjdGwuaFxcdTAwM2VcXG4gIDE5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNmcy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2UtaXNvbGF0aW9uLmhcXHUwMDNlXFxuICAyMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2FzYW4uaFxcdTAwM2VcXG4gIDIyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuICAyMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZnJlZXplci5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2Vfb3duZXIuaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9wc2kuaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcHVzZXQuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9odWdlX21tLmhcXHUwMDNlXFxuICAyODpcXHQjaW5jbHVkZSBcXFwicGFnZV9hbGxvYy5oXFxcIlxcbiAgMjk6XFx0I2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuICAzMDpcXHRcXG4gIDMxOlxcdCNpZmRlZiBDT05GSUdfQ09NUEFDVElPTlxcbiAgMzI6XFx0LypcXG4gIDMzOlxcdCAqIEZyYWdtZW50YXRpb24gc2NvcmUgY2hlY2sgaW50ZXJ2YWwgZm9yIHByb2FjdGl2ZSBjb21wYWN0aW9uIHB1cnBvc2VzLlxcbiAgMzQ6XFx0ICovXFxuICAzNTpcXHQjZGVmaW5lIEhQQUdFX0ZSQUdfQ0hFQ0tfSU5URVJWQUxfTVNFQ1xcdCg1MDApXFxuICAzNjpcXHRcXG4gIDM3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9jb21wYWN0X2V2ZW50KGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtKVxcbiAgMzg6XFx0e1xcbiAgMzk6XFx0XFx0Y291bnRfdm1fZXZlbnQoaXRlbSk7XFxuICA0MDpcXHR9XFxuICA0MTpcXHRcXG4gIDQyOlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF9jb21wYWN0X2V2ZW50cyhlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSwgbG9uZyBkZWx0YSlcXG4gIDQzOlxcdHtcXG4gIDQ0OlxcdFxcdGNvdW50X3ZtX2V2ZW50cyhpdGVtLCBkZWx0YSk7XFxuICA0NTpcXHR9XFxuICA0NjpcXHRcXG4gIDQ3OlxcdC8qXFxuICA0ODpcXHQgKiBvcmRlciA9PSAtMSBpcyBleHBlY3RlZCB3aGVuIGNvbXBhY3RpbmcgcHJvYWN0aXZlbHkgdmlhXFxuICA0OTpcXHQgKiAxLiAvcHJvYy9zeXMvdm0vY29tcGFjdF9tZW1vcnlcXG4gIDUwOlxcdCAqIDIuIC9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RleC9jb21wYWN0XFxuICA1MTpcXHQgKiAzLiAvcHJvYy9zeXMvdm0vY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzXFxuICA1MjpcXHQgKi9cXG4gIDUzOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKVxcbiAgNTQ6XFx0e1xcbiAgNTU6XFx0XFx0cmV0dXJuIG9yZGVyID09IC0xO1xcbiAgNTY6XFx0fVxcbiAgNTc6XFx0XFxuICA1ODpcXHQjZWxzZVxcbiAgNTk6XFx0I2RlZmluZSBjb3VudF9jb21wYWN0X2V2ZW50KGl0ZW0pIGRvIHsgfSB3aGlsZSAoMClcXG4gIDYwOlxcdCNkZWZpbmUgY291bnRfY29tcGFjdF9ldmVudHMoaXRlbSwgZGVsdGEpIGRvIHsgfSB3aGlsZSAoMClcXG4gIDYxOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc192aWFfY29tcGFjdF9tZW1vcnkoaW50IG9yZGVyKSB7IHJldHVybiBmYWxzZTsgfVxcbiAgNjI6XFx0I2VuZGlmXFxuICA2MzpcXHRcXG4gIDY0OlxcdCNpZiBkZWZpbmVkIENPTkZJR19DT01QQUNUSU9OIHx8IGRlZmluZWQgQ09ORklHX0NNQVxcbiAgNjU6XFx0XFxuICA2NjpcXHQjZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcXG4gIDY3OlxcdCNpbmNsdWRlIFxcdTAwM2N0cmFjZS9ldmVudHMvY29tcGFjdGlvbi5oXFx1MDAzZVxcbiAgNjg6XFx0XFxuICA2OTpcXHQjZGVmaW5lIGJsb2NrX3N0YXJ0X3BmbihwZm4sIG9yZGVyKVxcdHJvdW5kX2Rvd24ocGZuLCAxVUwgXFx1MDAzY1xcdTAwM2MgKG9yZGVyKSlcXG4gIDcwOlxcdCNkZWZpbmUgYmxvY2tfZW5kX3BmbihwZm4sIG9yZGVyKVxcdEFMSUdOKChwZm4pICsgMSwgMVVMIFxcdTAwM2NcXHUwMDNjIChvcmRlcikpXFxuICA3MTpcXHRcXG4gIDcyOlxcdC8qXFxuICA3MzpcXHQgKiBQYWdlIG9yZGVyIHdpdGgtcmVzcGVjdC10byB3aGljaCBwcm9hY3RpdmUgY29tcGFjdGlvblxcbiAgNzQ6XFx0ICogY2FsY3VsYXRlcyBleHRlcm5hbCBmcmFnbWVudGF0aW9uLCB3aGljaCBpcyB1c2VkIGFzXFxuICA3NTpcXHQgKiB0aGUgXFxcImZyYWdtZW50YXRpb24gc2NvcmVcXFwiIG9mIGEgbm9kZS96b25lLlxcbiAgNzY6XFx0ICovXFxuICA3NzpcXHQjaWYgZGVmaW5lZCBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gIDc4OlxcdCNkZWZpbmUgQ09NUEFDVElPTl9IUEFHRV9PUkRFUlxcdEhQQUdFX1BNRF9PUkRFUlxcbiAgNzk6XFx0I2VsaWYgZGVmaW5lZCBDT05GSUdfSFVHRVRMQkZTXFxuICA4MDpcXHQjZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcXHRIVUdFVExCX1BBR0VfT1JERVJcXG4gIDgxOlxcdCNlbHNlXFxuICA4MjpcXHQjZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcXG4gIDgzOlxcdCNlbmRpZlxcbiAgODQ6XFx0XFxuICA4NTpcXHRzdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpXFxuICA4NjpcXHR7XFxuICA4NzpcXHRcXHR1bnNpZ25lZCBsb25nIG9yZGVycyA9IFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cyk7XFxuICA4ODpcXHRcXG4gIDg5OlxcdFxcdGlmIChvcmRlcnMpXFxuICA5MDpcXHRcXHRcXHRyZXR1cm4gX19mZnMob3JkZXJzKTtcXG4gIDkxOlxcdFxcdHJldHVybiBDT01QQUNUSU9OX0hQQUdFX09SREVSO1xcbiAgOTI6XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRzdGF0aWMgc3RydWN0IHBhZ2UgKm1hcmtfYWxsb2NhdGVkX25vcHJvZihzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfZmxhZ3MpXFxuICA5NTpcXHR7XFxuICA5NjpcXHRcXHRwb3N0X2FsbG9jX2hvb2socGFnZSwgb3JkZXIsIF9fR0ZQX01PVkFCTEUsIEFMTE9DX0RFRkFVTFQpO1xcbiAgOTc6XFx0XFx0c2V0X3BhZ2VfcmVmY291bnRlZChwYWdlKTtcXG4gIDk4OlxcdFxcdHJldHVybiBwYWdlO1xcbiAgOTk6XFx0fVxcbiAxMDA6XFx0I2RlZmluZSBtYXJrX2FsbG9jYXRlZCguLi4pXFx0YWxsb2NfaG9va3MobWFya19hbGxvY2F0ZWRfbm9wcm9mKF9fVkFfQVJHU19fKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDY6NTEuNjc3NTM2Mzg4WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MTQ3NjY4NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCB3cmFwcGVkIHdpdGhpbiBhbiBgI2lmYCBjb25kaXRpb25hbC4gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbWVtb3J5IGNvbXBhY3Rpb24gb3IgQ29udGlndW91cyBNZW1vcnkgQWxsb2NhdG9yIChDTUEpLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgcXVpY2tseSBieSBkb3VibGUtY2hlY2tpbmcgdGhlIGNvbmRpdGlvbiBvbiBsaW5lIDY0IC0geWVzLCBgI2lmIGRlZmluZWQgQ09ORklHX0NPTVBBQ1RJT04gfHwgZGVmaW5lZCBDT05GSUdfQ01BYCBpdCBpcy4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoaXMgY29uZGl0aW9uYWwgYmxvY2sgY29tcGxldGVseS4uLiBJIG5lZWQgdG8gZmluZCB0aGUgY2xvc2luZyBgI2VuZGlmYCB0byBmdWxseSBncmFzcCB3aGVyZSB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZC4gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBpbiB0aGUgY29udGV4dCBvZiBzeXN0ZW0gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHJlc291cmNlIGFsbG9jYXRpb24gc3RyYXRlZ2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkyNTgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA2OjU1LjI5MjMwNTQyOFoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE3Nzg4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiI2VuZGlmXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9NjE9c3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XFxubW0vY29tcGFjdGlvbi5jOjYyOiNlbmRpZlxcbm1tL2NvbXBhY3Rpb24uYy02My1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy04Mi0jZGVmaW5lIENPTVBBQ1RJT05fSFBBR0VfT1JERVJcXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcXG5tbS9jb21wYWN0aW9uLmM6ODM6I2VuZGlmXFxubW0vY29tcGFjdGlvbi5jLTg0LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBza2lwX29mZmxpbmVfc2VjdGlvbnNfcmV2ZXJzZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbilcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yNjUtfVxcbm1tL2NvbXBhY3Rpb24uYzoyNjY6I2VuZGlmXFxubW0vY29tcGFjdGlvbi5jLTI2Ny1cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz01MDE9c3RhdGljIGJvb2wgdGVzdF9hbmRfc2V0X3NraXAoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBwYWdlICpwYWdlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTUwNC19XFxubW0vY29tcGFjdGlvbi5jOjUwNTojZW5kaWYgLyogQ09ORklHX0NPTVBBQ1RJT04gKi9cXG5tbS9jb21wYWN0aW9uLmMtNTA2LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTEzNTM9aXNvbGF0ZV9taWdyYXRlcGFnZXNfcmFuZ2Uoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTEzODgtXFxubW0vY29tcGFjdGlvbi5jOjEzODk6I2VuZGlmIC8qIENPTkZJR19DT01QQUNUSU9OIHx8IENPTkZJR19DTUEgKi9cXG5tbS9jb21wYWN0aW9uLmMtMTM5MC0jaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yMjk3PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yMzg0LVxcdFxcdFxcdHJldHVybiBDT01QQUNUX1NVQ0NFU1M7XFxubW0vY29tcGFjdGlvbi5jOjIzODU6I2VuZGlmXFxubW0vY29tcGFjdGlvbi5jLTIzODYtXFx0XFx0LypcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zMDk0PXZvaWQgY29tcGFjdGlvbl91bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzA5Ny19XFxubW0vY29tcGFjdGlvbi5jOjMwOTg6I2VuZGlmIC8qIENPTkZJR19TWVNGUyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfTlVNQSAqL1xcbm1tL2NvbXBhY3Rpb24uYy0zMDk5LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTM0MTA9c3Vic3lzX2luaXRjYWxsKGtjb21wYWN0ZF9pbml0KVxcbm1tL2NvbXBhY3Rpb24uYy0zNDExLVxcbm1tL2NvbXBhY3Rpb24uYzozNDEyOiNlbmRpZiAvKiBDT05GSUdfQ09NUEFDVElPTiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNjo1NS4zNDQwODgyNDZaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODEwMTI4MTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gYW5kIEltcGFjdCBvZiBhIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjb25kaXRpb25zLiBJIHNlZSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgYXQgbGluZSAyNTQ1LCBidXQgaXQncyBuZXN0ZWQgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0NPTVBBQ1RJT05gIGJsb2NrLiBMaW5lcyAxMzg5IGFuZCAzNDEyIGNsZWFybHkgZGVmaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbi4gU28sIGBDT01QQUNUSU9OYCBpcyBkZWZpbml0ZWx5IGEgcHJlcmVxdWlzaXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIHRoYXQgQ09NUEFDVElPTiBpcyBlbmFibGVkIHRvIGVuc3VyZSB0aGUgY29ycmVjdCBmdW5jdGlvbmFsaXR5LiBBbmQgaXQgc2VlbXMgdGhhdCBUcmFuc3BhcmVudCBIdWdlcGFnZXMgaXMgYWxzbyByZWxldmFudC5cblxuTm93LCBsZXQncyBnZXQgdG8gdGhlIGltcG9ydGFudCBwYXJ0OiBpbXBhY3QgYW5hbHlzaXMuIEkgbmVlZCB0byBpZGVudGlmeSB3aGljaCBzeW1ib2xzIGFyZSAqZGlyZWN0bHkqIG1vZGlmaWVkIG9yICpzaWduaWZpY2FudGx5IGFmZmVjdGVkKiBieSB0aGlzIHBhdGNoLlxuXG5JJ20gZm9jdXNpbmcgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AsIGBjb21wYWN0aW9uX3pvbmVsaXN0X3N1aXRhYmxlYCwgYHdha2V1cF9rc3dhcGRgLCBgd2FrZXVwX2tjb21wYWN0ZGAsIGFuZCBga3N3YXBkX3RyeV9jbGVhcl9ob3BlbGVzc2AuXG5cbkkga25vdyBgd2FrZXVwX2tzd2FwZGAgaXMgY2FsbGVkIGZyb20gYHBnZGF0X2JhbGFuY2VkYCB3aGljaCBpcyB0aGUgZm9jdXMuIFNpbmNlIGBwZ2RhdF9iYWxhbmNlZGAgaXMgbW9kaWZpZWQgSSBhbSBzdXJlIHRoYXQgdGhpcyBpcyBhIGdvb2QgZm9jdXMgc3ltYm9sLlxuXG5TaW1pbGFybHksIEkgc2VlIHRoYXQgYHdha2V1cF9rY29tcGFjdGRgIGlzIHdha2luZyB1cCB0aGUgdGhyZWFkIGBrY29tcGFjdGRgIGFuZCBga2NvbXBhY3RkYCBpcyBtb2RpZmllZC4gQW5kIHRoZSBmdW5jdGlvbiB3YWtlcyB1cCBga2NvbXBhY3RkYCB3aGljaCBpcyBhbHNvIGEgZ29vZCBmb2N1cyBzeW1ib2wuXG5cbkZpbmFsbHksIGBrc3dhcGRfdHJ5X2NsZWFyX2hvcGVsZXNzYCBpcyBhIGdvb2QgZm9jdXMgc3ltYm9sLCBiZWNhdXNlIGl0IGNhbGxzIGBwZ2RhdF9iYWxhbmNlZGAuXG5cblNvIG15IGZvY3VzIGlzIG9uIHRob3NlIDMgZnVuY3Rpb25zLlxuXG5JIG5lZWQgdG8gcmUtZXhhbWluZSBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAuIEknbSBkb3VibGUtY2hlY2tpbmcgaXQgYmVjYXVzZSBJIHRob3VnaHQgSSBzYXcgYSBjb25uZWN0aW9uLCBidXQgSSBkb24ndCBzZWUgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDA5NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzowMy40NDUzNzE3NTlaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUzOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDkwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjQ5MDpcXHRcXG4yNDkxOlxcdFxcdHRyYWNlX21tX2NvbXBhY3Rpb25fc3VpdGFibGUoem9uZSwgb3JkZXIsIGNvbXBhY3RfcmVzdWx0KTtcXG4yNDkyOlxcdFxcbjI0OTM6XFx0XFx0cmV0dXJuIHN1aXRhYmxlO1xcbjI0OTQ6XFx0fVxcbjI0OTU6XFx0XFxuMjQ5NjpcXHQvKiBVc2VkIGJ5IGRpcmVjdCByZWNsYWltZXJzICovXFxuMjQ5NzpcXHRib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXFxuMjQ5ODpcXHRcXHRcXHRpbnQgYWxsb2NfZmxhZ3MsIGdmcF90IGdmcF9tYXNrKVxcbjI0OTk6XFx0e1xcbjI1MDA6XFx0XFx0c3RydWN0IHpvbmUgKnpvbmU7XFxuMjUwMTpcXHRcXHRzdHJ1Y3Qgem9uZXJlZiAqejtcXG4yNTAyOlxcdFxcbjI1MDM6XFx0XFx0LypcXG4yNTA0OlxcdFxcdCAqIE1ha2Ugc3VyZSBhdCBsZWFzdCBvbmUgem9uZSB3b3VsZCBwYXNzIF9fY29tcGFjdGlvbl9zdWl0YWJsZSBpZiB3ZSBjb250aW51ZVxcbjI1MDU6XFx0XFx0ICogcmV0cnlpbmcgdGhlIHJlY2xhaW0uXFxuMjUwNjpcXHRcXHQgKi9cXG4yNTA3OlxcdFxcdGZvcl9lYWNoX3pvbmVfem9uZWxpc3Rfbm9kZW1hc2soem9uZSwgeiwgYWMtXFx1MDAzZXpvbmVsaXN0LFxcbjI1MDg6XFx0XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCwgYWMtXFx1MDAzZW5vZGVtYXNrKSB7XFxuMjUwOTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGF2YWlsYWJsZTtcXG4yNTEwOlxcdFxcbjI1MTE6XFx0XFx0XFx0aWYgKGNwdXNldHNfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IChhbGxvY19mbGFncyBcXHUwMDI2IEFMTE9DX0NQVVNFVCkgXFx1MDAyNlxcdTAwMjZcXG4yNTEyOlxcdFxcdFxcdCAgICAhX19jcHVzZXRfem9uZV9hbGxvd2VkKHpvbmUsIGdmcF9tYXNrKSlcXG4yNTEzOlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjI1MTQ6XFx0XFxuMjUxNTpcXHRcXHRcXHQvKlxcbjI1MTY6XFx0XFx0XFx0ICogRG8gbm90IGNvbnNpZGVyIGFsbCB0aGUgcmVjbGFpbWFibGUgbWVtb3J5IGJlY2F1c2Ugd2UgZG8gbm90XFxuMjUxNzpcXHRcXHRcXHQgKiB3YW50IHRvIHRyYXNoIGp1c3QgZm9yIGEgc2luZ2xlIGhpZ2ggb3JkZXIgYWxsb2NhdGlvbiB3aGljaFxcbjI1MTg6XFx0XFx0XFx0ICogaXMgZXZlbiBub3QgZ3VhcmFudGVlZCB0byBhcHBlYXIgZXZlbiBpZiBfX2NvbXBhY3Rpb25fc3VpdGFibGVcXG4yNTE5OlxcdFxcdFxcdCAqIGlzIGhhcHB5IGFib3V0IHRoZSB3YXRlcm1hcmsgY2hlY2suXFxuMjUyMDpcXHRcXHRcXHQgKi9cXG4yNTIxOlxcdFxcdFxcdGF2YWlsYWJsZSA9IHpvbmVfcmVjbGFpbWFibGVfcGFnZXMoem9uZSkgLyBvcmRlcjtcXG4yNTIyOlxcdFxcdFxcdGF2YWlsYWJsZSArPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgTlJfRlJFRV9QQUdFUyk7XFxuMjUyMzpcXHRcXHRcXHRpZiAoX19jb21wYWN0aW9uX3N1aXRhYmxlKHpvbmUsIG9yZGVyLCBtaW5fd21hcmtfcGFnZXMoem9uZSksXFxuMjUyNDpcXHRcXHRcXHRcXHRcXHRcXHQgIGFjLVxcdTAwM2VoaWdoZXN0X3pvbmVpZHgsIGF2YWlsYWJsZSkpXFxuMjUyNTpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4yNTI2OlxcdFxcdH1cXG4yNTI3OlxcdFxcbjI1Mjg6XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjI1Mjk6XFx0fVxcbjI1MzA6XFx0XFxuMjUzMTpcXHQvKipcXG4yNTMyOlxcdCAqIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMgLSBnZXQgZnJlZSBwYWdlcyByZWxldmFudCB0byBhbGxvY2F0aW9uIG9yZGVyXFxuMjUzMzpcXHQgKiBAem9uZTogICAgICAgdGFyZ2V0IHpvbmVcXG4yNTM0OlxcdCAqIEBvcmRlcjogICAgICBhbGxvY2F0aW9uIG9yZGVyXFxuMjUzNTpcXHQgKiBAdXNlX2Jsb2NrczogaWYgdHJ1ZSwgdXNlIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTXFxuMjUzNjpcXHQgKlxcbjI1Mzc6XFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGUgYmxvY2tzIHRvIGF2b2lkXFxuMjUzODpcXHQgKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2hcXG4yNTM5OlxcdCAqIHRoaXMgb24gaXRzIG93biBhbmQgbmVlZHMga2NvbXBhY3RkIHN1cHBvcnQuXFxuMjU0MDpcXHQgKlxcbjI1NDE6XFx0ICogV2hlbiBtVEhQIGFsd2F5cy1lbmFibGVkIG9yZGVycyBhcmUgY29uZmlndXJlZCwgY291bnQgb25seSBmcmVlIHBhZ2VzXFxuMjU0MjpcXHQgKiBpbiBibG9ja3MgXFx1MDAzZT0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFBcXG4yNTQzOlxcdCAqIGFsbG9jYXRpb25zLlxcbjI1NDQ6XFx0ICovXFxuMjU0NTpcXHR1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXFxuMjU0NjpcXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsXFxuMjU0NzpcXHRcXHRcXHRcXHRcXHRcXHRib29sIHVzZV9ibG9ja3MpXFxuMjU0ODpcXHR7XFxuMjU0OTpcXHRcXHRpZiAodXNlX2Jsb2NrcylcXG4yNTUwOlxcdFxcdFxcdHJldHVybiB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFU19CTE9DS1MpO1xcbjI1NTE6XFx0XFxuMjU1MjpcXHRcXHRpZiAoUkVBRF9PTkNFKGh1Z2VfYW5vbl9vcmRlcnNfYWx3YXlzKSBcXHUwMDI2XFx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcXG4yNTUzOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgZnJlZV9wYWdlcyA9IDA7XFxuMjU1NDpcXHRcXG4yNTU1OlxcdFxcdFxcdGZvciAoaW50IG8gPSBvcmRlcjsgbyBcXHUwMDNjIE5SX1BBR0VfT1JERVJTOyBvKyspXFxuMjU1NjpcXHRcXHRcXHRcXHRmcmVlX3BhZ2VzICs9IHpvbmUtXFx1MDAzZWZyZWVfYXJlYVtvXS5ucl9mcmVlIFxcdTAwM2NcXHUwMDNjIG87XFxuMjU1NzpcXHRcXHRcXHRyZXR1cm4gZnJlZV9wYWdlcztcXG4yNTU4OlxcdFxcdH1cXG4yNTU5OlxcdFxcbjI1NjA6XFx0XFx0cmV0dXJuIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTKTtcXG4yNTYxOlxcdH1cXG4yNTYyOlxcdFxcbjI1NjM6XFx0LypcXG4yNTY0OlxcdCAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci5cXG4yNTY1OlxcdCAqIFJldHVybiBDT01QQUNUX1NVQ0NFU1MgaWYgYWxsb2NhdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGNhbiBiZSBhbHJlYWR5XFxuMjU2NjpcXHQgKiBzYXRpc2ZpZWRcXG4yNTY3OlxcdCAqIFJldHVybiBDT01QQUNUX1NLSVBQRUQgaWYgY29tcGFjdGlvbiBmb3IgdGFyZ2V0IG9yZGVyIGlzIGxpa2VseSB0byBmYWlsXFxuMjU2ODpcXHQgKiBSZXR1cm4gQ09NUEFDVF9DT05USU5VRSBpZiBjb21wYWN0aW9uIGZvciB0YXJnZXQgb3JkZXIgc2hvdWxkIGJlIHJhblxcbjI1Njk6XFx0ICovXFxuMjU3MDpcXHRzdGF0aWMgZW51bSBjb21wYWN0X3Jlc3VsdFxcbjI1NzE6XFx0Y29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcixcXG4yNTcyOlxcdFxcdFxcdFxcdFxcdCBpbnQgaGlnaGVzdF96b25laWR4LCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXFxuMjU3MzpcXHRcXHRcXHRcXHRcXHQgYm9vbCBhc3luYywgYm9vbCBrY29tcGFjdGQpXFxuMjU3NDpcXHR7XFxuMjU3NTpcXHRcXHR1bnNpZ25lZCBsb25nIGZyZWVfcGFnZXM7XFxuMjU3NjpcXHRcXHR1bnNpZ25lZCBsb25nIHdhdGVybWFyaztcXG4yNTc3OlxcdFxcbjI1Nzg6XFx0XFx0ZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsXFxuMjU3OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAga2NvbXBhY3RkIFxcdTAwMjZcXHUwMDI2IGRlZnJhZ19tb2RlKTtcXG4yNTgwOlxcdFxcbjI1ODE6XFx0XFx0d2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXFx1MDAyNiBBTExPQ19XTUFSS19NQVNLKTtcXG4yNTgyOlxcdFxcdGlmIChfX3pvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLCB3YXRlcm1hcmssIGhpZ2hlc3Rfem9uZWlkeCxcXG4yNTgzOlxcdFxcdFxcdFxcdFxcdGFsbG9jX2ZsYWdzLCBmcmVlX3BhZ2VzKSlcXG4yNTg0OlxcdFxcdFxcdHJldHVybiBDT01QQUNUX1NVQ0NFU1M7XFxuMjU4NTpcXHRcXG4yNTg2OlxcdFxcdC8qXFxuMjU4NzpcXHRcXHQgKiBGb3IgdW5tb3ZhYmxlIGFsbG9jYXRpb25zICh3aXRob3V0IEFMTE9DX0NNQSksIGNoZWNrIGlmIHRoZXJlIGlzIGVub3VnaFxcbjI1ODg6XFx0XFx0ICogZnJlZSBtZW1vcnkgaW4gdGhlIG5vbi1DTUEgcGFnZWJsb2Nrcy4gT3RoZXJ3aXNlIGNvbXBhY3Rpb24gY291bGQgZm9ybVxcbjI1ODk6XFx0XFx0ICogdGhlIGhpZ2gtb3JkZXIgcGFnZSBpbiBDTUEgcGFnZWJsb2Nrcywgd2hpY2ggd291bGQgbm90IGhlbHAgdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjAzLjQ0NTUyNzI3OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMwOTg0OTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBDb21wYWN0aW9uIENvZGUgUGF0aCoqXG5cbkFscmlnaHQsIEknbSB0cmFjaW5nIHRocm91Z2ggdGhlIG1lbW9yeSBjb21wYWN0aW9uIGNvZGUsIGFuZCBpdCdzIHF1aWNrbHkgYXBwYXJlbnQgdGhhdCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgKmRvZXNuJ3QqIGRpcmVjdGx5IGxldmVyYWdlIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYC4gVGhhdCdzIGEgYml0IHN1cnByaXNpbmcuIEknZCBhc3N1bWVkIHRoZXJlIHdhcyBhIGRpcmVjdCBsaW5rIHRoZXJlLCBhIHF1aWNrIGNoZWNrIHRvIHNlZSBpZiBhIHpvbmVsaXN0IGlzIGV2ZW4gKnBvdGVudGlhbGx5KiB2aWFibGUgYmVmb3JlIGdldHRpbmcgdG9vIGRlZXAuXG5cbk5vdyBob2xkIG9uLi4uIEkga25vdyBJJ3ZlIHNlZW4gYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGJlaW5nIGNhbGxlZCBkdXJpbmcgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MgKnNvbWV3aGVyZSouIEFoLCBoZXJlIHdlIGdvLCBgY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXJgIGRvZXMgY2FsbCBpdC4gVGhhdCBtYWtlcyBtb3JlIHNlbnNlLCByaWdodD8gSXQgc291bmRzIGxpa2UgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYCB3b3VsZCBmaWx0ZXIgYSBsaXN0IG9mIGNhbmRpZGF0ZSB6b25lcy5cblxuQnV0IG5vdyBJIG5lZWQgdG8gZ28gb25lIGxheWVyIGRlZXBlcjsgKndobyogY2FsbHMgYGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyYD8gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjayBhbmQgdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoLiBLbm93aW5nIHdobydzIGNhbGxpbmcgaXQgaXMgY3J1Y2lhbCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IG9mIGNvbnRyb2wgYW5kIGRldGVybWluZSB0aGUgY29tcGxldGUgbG9naWMgaW4gcGxhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNTUxLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzowNy43NzY1MTQ2MjlaIiwiU2VxIjo0MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODY0MzE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9jb21wYWN0aW9uLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vY29tcGFjdGlvbi5jPTI1NzA9c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHRcXG5tbS9jb21wYWN0aW9uLmM6MjU3MTpjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxcbm1tL2NvbXBhY3Rpb24uYy0yNTcyLVxcdFxcdFxcdFxcdCBpbnQgaGlnaGVzdF96b25laWR4LCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MjYxMD1jb21wYWN0X3pvbmUoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MsIHN0cnVjdCBjYXB0dXJlX2NvbnRyb2wgKmNhcGMpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjYzNS1cXHRpZiAoIWlzX3ZpYV9jb21wYWN0X21lbW9yeShjYy1cXHUwMDNlb3JkZXIpKSB7XFxubW0vY29tcGFjdGlvbi5jOjI2MzY6XFx0XFx0cmV0ID0gY29tcGFjdGlvbl9zdWl0X2FsbG9jYXRpb25fb3JkZXIoY2MtXFx1MDAzZXpvbmUsIGNjLVxcdTAwM2VvcmRlcixcXG5tbS9jb21wYWN0aW9uLmMtMjYzNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgY2MtXFx1MDAzZWhpZ2hlc3Rfem9uZWlkeCxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0zMTA2PXN0YXRpYyBib29sIGtjb21wYWN0ZF9ub2RlX3N1aXRhYmxlKHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMzEyMC1cXG5tbS9jb21wYWN0aW9uLmM6MzEyMTpcXHRcXHRyZXQgPSBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcih6b25lLFxcbm1tL2NvbXBhY3Rpb24uYy0zMTIyLVxcdFxcdFxcdFxcdHBnZGF0LVxcdTAwM2VrY29tcGFjdGRfbWF4X29yZGVyLFxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTMxMzI9c3RhdGljIHZvaWQga2NvbXBhY3RkX2RvX3dvcmsocGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0zMTY0LVxcbm1tL2NvbXBhY3Rpb24uYzozMTY1OlxcdFxcdHJldCA9IGNvbXBhY3Rpb25fc3VpdF9hbGxvY2F0aW9uX29yZGVyKHpvbmUsXFxubW0vY29tcGFjdGlvbi5jLTMxNjYtXFx0XFx0XFx0XFx0Y2Mub3JkZXIsIHpvbmVpZCwgY2MuYWxsb2NfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjA3LjkyNTE2MjI1M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzMxNjIyMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGNvbXBhY3Rfem9uZWAgRnVuY3Rpb24gQ2FsbCoqXG5cbk9rYXksIHNvIHRoZSBjb2RlJ3MgdXNpbmcgYGNvbXBhY3Rfem9uZWAuICBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgdW5kZXJzdGFuZCB0aGUgY29udGV4dC4gSSBtZWFuLCBgY29tcGFjdF96b25lYCAqZG9lcyogd2hhdCwgZXhhY3RseT8gSXMgdGhpcyBzb21lIHNvcnQgb2YgbWVtb3J5IG9wdGltaXphdGlvbiwgZGF0YSBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uLCBvciBtYXliZSBhIFVJIGxheW91dCByb3V0aW5lPyAgVGhlIG5hbWUgaXRzZWxmIGlzIHN1Z2dlc3RpdmUsIGJ1dCB3aXRob3V0IGtub3dpbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGl0J3MganVzdCBhIGxhYmVsLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggcG9zc2libGUgc2NlbmFyaW9zIGJhc2VkIG9uIHRoZSB0eXBpY2FsIGFwcGxpY2F0aW9ucyBvZiBcImNvbXBhY3RpbmdcIiBvciBcInpvbmluZ1wiIGRhdGEuXG5cblRoZSBjcnVjaWFsIHF1ZXN0aW9uIG5vdyBpczogKndobyogaXMgY2FsbGluZyBgY29tcGFjdF96b25lYD8gVW5kZXJzdGFuZGluZyB0aGUgY2FsbGVyIGlzIGtleS4gSXMgaXQgYSBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZXI/IEEgaGlnaC1sZXZlbCBkYXRhIHByb2Nlc3NpbmcgZnVuY3Rpb24/IEEgVUkgY29tcG9uZW50IHJlZnJlc2hpbmcgcm91dGluZT8gIEtub3dpbmcgdGhlIGNhbGxlciB3aWxsIHByb3ZpZGUgYSBodWdlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9sZSBhbmQgcHVycG9zZSBvZiBgY29tcGFjdF96b25lYC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGNhbGwgYW5kIGRldGVybWluZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCB3b3JrZmxvdy4gIFRoYXQgd2lsbCBxdWlja2x5IHRlbGwgbWUgaWYgdGhpcyBpcyBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIHNlY3Rpb24sIG9yIHNvbWV0aGluZyBsZXNzIHVyZ2VudC4gV2l0aG91dCB0aGF0IGNvbnRleHQsIEknbSBqdXN0IGd1ZXNzaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzMxMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjEyLjI1Njc4Nzc5MloiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUwOTg5OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29tcGFjdF96b25lXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2NvbXBhY3Rpb24uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9jb21wYWN0aW9uLmM9MjEwNz1zdGF0aWMgaXNvbGF0ZV9taWdyYXRlX3QgaXNvbGF0ZV9taWdyYXRlcGFnZXMoc3RydWN0IGNvbXBhY3RfY29udHJvbCAqY2MpXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjExOS1cXHQgKiBTdGFydCBhdCB3aGVyZSB3ZSBsYXN0IHN0b3BwZWQsIG9yIGJlZ2lubmluZyBvZiB0aGUgem9uZSBhc1xcbm1tL2NvbXBhY3Rpb24uYzoyMTIwOlxcdCAqIGluaXRpYWxpemVkIGJ5IGNvbXBhY3Rfem9uZSgpLiBUaGUgZmlyc3QgZmFpbHVyZSB3aWxsIHVzZVxcbm1tL2NvbXBhY3Rpb24uYy0yMTIxLVxcdCAqIHRoZSBsb3dlc3QgUEZOIGFzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgbGluZWFyIHNjYW5uaW5nLlxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTIxOTgtXFx0XFx0ICogRWl0aGVyIHdlIGlzb2xhdGVkIHNvbWV0aGluZyBhbmQgcHJvY2VlZCB3aXRoIG1pZ3JhdGlvbi4gT3JcXG5tbS9jb21wYWN0aW9uLmM6MjE5OTpcXHRcXHQgKiB3ZSBmYWlsZWQgYW5kIGNvbXBhY3Rfem9uZSBzaG91bGQgZGVjaWRlIGlmIHdlIHNob3VsZFxcbm1tL2NvbXBhY3Rpb24uYy0yMjAwLVxcdFxcdCAqIGNvbnRpbnVlIG9yIG5vdC5cXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yNjA5PXN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0XFxubW0vY29tcGFjdGlvbi5jOjI2MTA6Y29tcGFjdF96b25lKHN0cnVjdCBjb21wYWN0X2NvbnRyb2wgKmNjLCBzdHJ1Y3QgY2FwdHVyZV9jb250cm9sICpjYXBjKVxcbm1tL2NvbXBhY3Rpb24uYy0yNjExLXtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODQ3LVxcbm1tL2NvbXBhY3Rpb24uYzoyODQ4OnN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IGNvbXBhY3Rfem9uZV9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLFxcbm1tL2NvbXBhY3Rpb24uYy0yODQ5LVxcdFxcdGdmcF90IGdmcF9tYXNrLCBlbnVtIGNvbXBhY3RfcHJpb3JpdHkgcHJpbyxcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYy0yODY3LVxcbm1tL2NvbXBhY3Rpb24uYzoyODY4OlxcdHJldHVybiBjb21wYWN0X3pvbmUoXFx1MDAyNmNjLCBjYXBjKTtcXG5tbS9jb21wYWN0aW9uLmMtMjg2OS19XFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9Mjg4Mj1lbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjkxMi1cXG5tbS9jb21wYWN0aW9uLmM6MjkxMzpcXHRcXHRzdGF0dXMgPSBjb21wYWN0X3pvbmVfb3JkZXIoem9uZSwgb3JkZXIsIGdmcF9tYXNrLCBwcmlvLFxcbm1tL2NvbXBhY3Rpb24uYy0yOTE0LVxcdFxcdFxcdFxcdGFsbG9jX2ZsYWdzLCBhYy1cXHUwMDNlaGlnaGVzdF96b25laWR4LCBjYXBjKTtcXG4tLVxcbm1tL2NvbXBhY3Rpb24uYz0yOTcwPXN0YXRpYyBpbnQgY29tcGFjdF9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIGJvb2wgcHJvYWN0aXZlKVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTI5OTItXFxubW0vY29tcGFjdGlvbi5jOjI5OTM6XFx0XFx0Y29tcGFjdF96b25lKFxcdTAwMjZjYywgTlVMTCk7XFxubW0vY29tcGFjdGlvbi5jLTI5OTQtXFxuLS1cXG5tbS9jb21wYWN0aW9uLmM9MzEzMj1zdGF0aWMgdm9pZCBrY29tcGFjdGRfZG9fd29yayhwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vY29tcGFjdGlvbi5jLTMxNzQtXFx0XFx0Y2Muem9uZSA9IHpvbmU7XFxubW0vY29tcGFjdGlvbi5jOjMxNzU6XFx0XFx0c3RhdHVzID0gY29tcGFjdF96b25lKFxcdTAwMjZjYywgTlVMTCk7XFxubW0vY29tcGFjdGlvbi5jLTMxNzYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjEyLjMwMTg5Mzc0MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODg1NjM5NDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQgaW4gbXkgZmllbGQuXG5cbioqRGVjb25zdHJ1Y3RpbmcgdGhlIFBhZ2UgQ29tcGFjdGlvbiBQcm9jZXNzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgZnVuY3Rpb24uIEkgc2VlIGl0J3MgY2FsbGluZyBgY29tcGFjdF96b25lX29yZGVyYCwgd2hpY2ggaW4gdHVybiwgSSBwcmVzdW1lLCB1dGlsaXplcyBgY29tcGFjdF96b25lYC4gVGhpcyBpcyB0aGUgdHlwaWNhbCBzdHJ1Y3R1cmUgSSdkIGV4cGVjdCBmb3IgcGFnZSBjb21wYWN0aW9uIOKAkyBhIHRvcC1sZXZlbCBmdW5jdGlvbiBvcmNoZXN0cmF0aW5nIHRoZSBwcm9jZXNzLCBhIG1pZGRsZSBsYXllciBwb3RlbnRpYWxseSBoYW5kbGluZyBzb21lIG9yZGVyaW5nIG9yIHpvbmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMsIGFuZCB0aGVuIHRoZSBhY3R1YWwgem9uZSBjb21wYWN0aW9uIGJlaW5nIHBlcmZvcm1lZCBieSB0aGUgYGNvbXBhY3Rfem9uZWAgZnVuY3Rpb24uIFRoZSBmYWN0IHRoYXQgYHRyeV90b19jb21wYWN0X3BhZ2VzYCBpcyBub24tc3RhdGljIGFuZCBleHBvcnRlZCBpcyBzaWduaWZpY2FudDsgaXQgc3VnZ2VzdHMgdGhpcyBpcyBhIHB1YmxpY2x5IGFjY2Vzc2libGUgZnVuY3Rpb24sIG1lYW5pbmcgb3RoZXIgY29tcG9uZW50cyBvciBtb2R1bGVzIGFyZSBsaWtlbHkgcmVseWluZyBvbiBpdCB0byBpbml0aWF0ZSBjb21wYWN0aW9uLiBHaXZlbiB0aGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgaXQncyB3b3J0aCBkaWdnaW5nIGludG8gdGhhdCBmaXJzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93ICppdCogd29ya3MsIGFuZCBmaWd1cmUgb3V0IHRoZSBjaGFpbiBvZiBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBjb25maXJtIHRoZSBhc3N1bXB0aW9ucyBJIG1hZGUgYWJvdXQgaG93IHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMgcmVsYXRlIHRvIHRoZSBwcm9jZXNzIG9mIHBhZ2UgY29tcGFjdGlvbiBpbiBnZW5lcmFsLiBMZXQncyBzZWUgd2hhdCdzIHJlYWxseSBnb2luZyBvbiB1bmRlciB0aGUgaG9vZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NDQyOTMsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoxNi4xODc1MzY2NDlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjUyMDkyMTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmg9MTE9ZW51bSBjb21wYWN0X3ByaW9yaXR5IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oLTIwLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oOjIxOi8qIFJldHVybiB2YWx1ZXMgZm9yIGNvbXBhY3Rfem9uZSgpIGFuZCB0cnlfdG9fY29tcGFjdF9wYWdlcygpICovXFxuaW5jbHVkZS9saW51eC9jb21wYWN0aW9uLmgtMjItLyogV2hlbiBhZGRpbmcgbmV3IHN0YXRlcywgcGxlYXNlIGFkanVzdCBpbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmggKi9cXG4tLVxcbmluY2x1ZGUvbGludXgvY29tcGFjdGlvbi5oPTkyPWV4dGVybiBpbnQgZnJhZ21lbnRhdGlvbl9pbmRleChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaDo5MzpleHRlcm4gZW51bSBjb21wYWN0X3Jlc3VsdCB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfdCBnZnBfbWFzayxcXG5pbmNsdWRlL2xpbnV4L2NvbXBhY3Rpb24uaC05NC1cXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncyxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaD0xMzE9VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl9lbmQsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMTY0LVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2NvbXBhY3Rpb24uaDoxNjU6VFJBQ0VfRVZFTlQobW1fY29tcGFjdGlvbl90cnlfdG9fY29tcGFjdF9wYWdlcyxcXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9jb21wYWN0aW9uLmgtMTY2LVxcbi0tXFxubW0vY29tcGFjdGlvbi5jPTI4NDg9c3RhdGljIGVudW0gY29tcGFjdF9yZXN1bHQgY29tcGFjdF96b25lX29yZGVyKHN0cnVjdCB6b25lICp6b25lLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjg3MS0vKipcXG5tbS9jb21wYWN0aW9uLmM6Mjg3MjogKiB0cnlfdG9fY29tcGFjdF9wYWdlcyAtIERpcmVjdCBjb21wYWN0IHRvIHNhdGlzZnkgYSBoaWdoLW9yZGVyIGFsbG9jYXRpb25cXG5tbS9jb21wYWN0aW9uLmMtMjg3My0gKiBAZ2ZwX21hc2s6IFRoZSBHRlAgbWFzayBvZiB0aGUgY3VycmVudCBhbGxvY2F0aW9uXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjg4MS0gKi9cXG5tbS9jb21wYWN0aW9uLmM6Mjg4MjplbnVtIGNvbXBhY3RfcmVzdWx0IHRyeV90b19jb21wYWN0X3BhZ2VzKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxubW0vY29tcGFjdGlvbi5jLTI4ODMtXFx0XFx0dW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBjb25zdCBzdHJ1Y3QgYWxsb2NfY29udGV4dCAqYWMsXFxuLS1cXG5tbS9jb21wYWN0aW9uLmMtMjg5Mi1cXG5tbS9jb21wYWN0aW9uLmM6Mjg5MzpcXHR0cmFjZV9tbV9jb21wYWN0aW9uX3RyeV90b19jb21wYWN0X3BhZ2VzKG9yZGVyLCBnZnBfbWFzaywgcHJpbyk7XFxubW0vY29tcGFjdGlvbi5jLTI4OTQtXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmM9NDEzOT1fX2FsbG9jX3BhZ2VzX2RpcmVjdF9jb21wYWN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtNDE4NC1cXG5tbS9wYWdlX2FsbG9jLmM6NDE4NTpcXHQqY29tcGFjdF9yZXN1bHQgPSB0cnlfdG9fY29tcGFjdF9wYWdlcyhnZnBfbWFzaywgY29tcGFjdF9vcmRlcixcXG5tbS9wYWdlX2FsbG9jLmMtNDE4Ni1cXHRcXHRcXHRcXHRcXHQgICAgICAgYWxsb2NfZmxhZ3MsIGFjLCBwcmlvLCBcXHUwMDI2Y2FwYyk7XFxuLS1cXG5tbS92bXNjYW4uYz02MDg2PXN0YXRpYyBib29sIGluX3JlY2xhaW1fY29tcGFjdGlvbihzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYwOTktICogdHJ1ZSBpZiBtb3JlIHBhZ2VzIHNob3VsZCBiZSByZWNsYWltZWQgc3VjaCB0aGF0IHdoZW4gdGhlIHBhZ2UgYWxsb2NhdG9yXFxubW0vdm1zY2FuLmM6NjEwMDogKiBjYWxscyB0cnlfdG9fY29tcGFjdF9wYWdlcygpIHRoYXQgaXQgd2lsbCBoYXZlIGVub3VnaCBmcmVlIHBhZ2VzIHRvIHN1Y2NlZWQuXFxubW0vdm1zY2FuLmMtNjEwMS0gKiBJdCB3aWxsIGdpdmUgdXAgZWFybGllciB0aGFuIHRoYXQgaWYgdGhlcmUgaXMgZGlmZmljdWx0eSByZWNsYWltaW5nIHBhZ2VzLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzoxNy43NTI3NTMwMTRaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ3MTMxMjY3MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTY29wZSBmb3IgRnV6emluZyB0aGlzIE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSdtIGlkZW50aWZ5aW5nIGtleSBmdW5jdGlvbnMgb3IgXCJmb2N1cyBzeW1ib2xzXCIgd2l0aGluIHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBtZW1vcnkgY29tcGFjdGlvbiwgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIHN1cHBvcnRpbmcgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gYHRyeV90b19jb21wYWN0X3BhZ2VzYCBzdGFuZHMgb3V0IGltbWVkaWF0ZWx5OyBpdCdzIG5vbi1zdGF0aWMsIG1ha2luZyBpdCBhIHZpYWJsZSB0YXJnZXQgZm9yIGZ1enppbmcsIGFuZCBpdCdzIHRoZSBjb3JlIGVudHJ5IHBvaW50IGZvciBkaXJlY3QgY29tcGFjdGlvbi4gSG93ZXZlciwgSSBuZWVkIHRvIGNvbnNpZGVyIGhvdyBnZW5lcmljIGl0IGlzLlxuXG5UaGUgb3RoZXIgcHJpbWFyeSB0YXJnZXRzIGFyZTogYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgLCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAsIGB3YWtldXBfa3N3YXBkYCwgYHdha2V1cF9rY29tcGFjdGRgLCBhbmQgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgLlxuXG5JIGFtIHRyeWluZyB0byBjb25maXJtLCBhbmQgY29uZmlybSBhZ2FpbiwgdGhhdCBgdHJ5X3RvX2NvbXBhY3RfcGFnZXNgIGlzIG5vdCBhIHZlcnkgaG90LXBhdGggb3IgZ2VuZXJpYyBmdW5jdGlvbiwgbGlrZSBga21hbGxvY2Agb3IgYHBhZ2VfYWxsb2NgLCBidXQgc3BlY2lmaWNhbGx5IHVzZWQgaW4gY29tcGFjdGlvbi4gSXQgaXMsIHNvIHRoYXQncyBnb29kLlxuXG5OZXh0LCBJJ20gcmV2aWV3aW5nIHRoZSByZXF1aXJlZCBrZXJuZWwgY29uZmlncy4gSXQgYXBwZWFycyB0aGlzIHBhdGNoIHJlbGllcyBvbiBgQ09NUEFDVElPTmAgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAuIEknbSBjb25maXJtaW5nIHRoYXQgYENPTVBBQ1RJT05gIGRlcGVuZHMgb24gYE1NVWAsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRlcGVuZHMgb24gYEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYW5kIGBNTVVgLiBUaGlzIG1ha2VzIHNlbnNlIGZvciB0aGUgZnVuY3Rpb25hbGl0eSBiZWluZyBtb2RpZmllZC5cblxuSSBhbSBxdWlja2x5IHZlcmlmeWluZyB0aGUgc291cmNlIGZpbGVzIGZvciB0aGUgZm9jdXMgc3ltYm9scyB0byBtYWtlIHN1cmUgdGhleSBhcmUgY29tcGlsZWQuIFRoaXMgY29uZmlybXMgdGhlIHJlYWNoYWJpbGl0eSBvZiB0aGUgZnVuY3Rpb25zIGluIHF1ZXN0aW9uLiBTcGVjaWZpY2FsbHk6XG5cbi0gYHRyeV90b19jb21wYWN0X3BhZ2VzYFxuLSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2Bcbi0gYGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVgXG4tIGB3YWtldXBfa3N3YXBkYFxuLSBgd2FrZXVwX2tjb21wYWN0ZGBcbi0gYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgXG5cblRoZXkgYXJlIGFsbCBpbiBgbW0vY29tcGFjdGlvbi5jYCBvciBgbW0vdm1zY2FuLmNgLlxuXG5JJ20gdmVyaWZ5aW5nIHRoYXQgYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGlzIG5vdCBleHBvcnRlZCAoaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIGZ1enppbmcgY2FwYWJpbGl0aWVzKSwgYnV0IGl0IGlzICpub3QqIHN0YXRpYywgc28gdGhlIGZ1enplciBjYW4gdHJhY2UgaXQuXG5cbkkgdGhlbiBjaGVjayB0byBzZWUgaG93IGBodWdlX2Fub25fb3JkZXJzX2Fsd2F5c2AgaXMgdXNlZCwgYXMgaXQgc2VlbXMgcmVsZXZhbnQuIEl0J3MgdXNlZCB3aXRoaW4gYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAgd2hpY2ggaXMgdXNlZCBpbiBzZXZlcmFsIGltcG9ydGFudCBmdW5jdGlvbnMgcmVsYXRlZCB0byBjb21wYWN0aW9uLCBzdWl0YWJpbGl0eSwgYW5kIHNjb3JpbmcuIFRoYXQgbWFrZXMgdGhpcyB2ZXJ5IHJlbGV2YW50LiBUaGlzIGNvbmZpcm1zIHRoYXQgdGhlIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIGNvbXBhY3Rpb24gbG9naWMgdG8gaGFuZGxlIG11bHRpLXNpemUgVEhQIGFsbG9jYXRpb24gYnkgdXNpbmcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAgaW5zdGVhZCBvZiBgQ09NUEFDVElPTl9IUEFHRV9PUkRFUmAuXG5cblRoZSBjb3JlIHJlYXNvbmluZyBmb3IgdGhpcyBwYXRjaCBpcyB0aGF0IGl0IG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gbG9naWMgdG8gc3VwcG9ydCBtdWx0aS1zaXplIFRIUHMuIEl0IGluY2x1ZGVzIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCwgdXBkYXRlcyBjb21wYWN0aW9uIGNoZWNrcywgYW5kIG1vZGlmaWVzIGBrY29tcGFjdGRgIGFuZCBga3N3YXBkYCBiZWhhdmlvci4gVGhlc2UgYXJlIGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCB3aWxsIGJlIHRlc3RlZCB3aGVuIHZpcnR1YWxpemVkLlxuXG5JbiBzdW1tYXJ5LCB0aGUga2V5IGNvbXBvbmVudHMgSSdtIGZvY3VzaW5nIG9uIGZvciBmdXp6aW5nIGFyZTpcblxuKiAgIENvbmZpZ3M6IGBDT01QQUNUSU9OYCwgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYFxuKiAgIEZvY3VzIHN5bWJvbHM6XG4gICAgKiAgIGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgKHByaW1hcnkgZW50cnkgcG9pbnQpXG4gICAgKiAgIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzYCAoc3BlY2lmaWMgdG8gdGhlIHBhdGNoKVxuICAgICogICBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgKHJlbGF0ZWQgdG8gcGF0Y2gpXG4gICAgKiAgIGB3YWtldXBfa3N3YXBkYFxuICAgICogICBgd2FrZXVwX2tjb21wYWN0ZGBcbiAgICAqICAgYGtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NgXG5cbkkgYW0gcmUtZXZhbHVhdGluZyB0aGF0IGB0cnlfdG9fY29tcGFjdF9wYWdlc2AgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgdG8gY29uZmlybSBpdCBpcyBzcGVjaWZpYyBlbm91Z2ggdG8gY29tcGFjdGlvbi4gYHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNgIGFuZCBgY29tcGFjdGlvbl96b25lbGlzdF9zdWl0YWJsZWAgYXJlIGJldHRlci4gTm93IEkgd2lsbCBzZXQgdGhlIHJlc3VsdHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NDEyLCJPdXRwdXRUb2tlbnMiOjIwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MzIuNDY1ODgzNzQyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzAyMjM5MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcInpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndha2V1cF9rY29tcGFjdGRcIixcbiAgICBcImtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTVBBQ1RJT05cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidHJ5X3RvX2NvbXBhY3RfcGFnZXNcIixcbiAgICBcInpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXNcIixcbiAgICBcImNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGVcIixcbiAgICBcIndha2V1cF9rc3dhcGRcIixcbiAgICBcIndha2V1cF9rY29tcGFjdGRcIixcbiAgICBcImtzd2FwZF90cnlfY2xlYXJfaG9wZWxlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGktc2l6ZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChtVEhQKS4gSXQgaW50cm9kdWNlcyBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlc2AgdG8gY2FsY3VsYXRlIGZyZWUgcGFnZXMgcmVsZXZhbnQgdG8gdGhlIGFsbG9jYXRpb24gb3JkZXIgYW5kIHVwZGF0ZXMgY29tcGFjdGlvbiBzdWl0YWJpbGl0eSBjaGVja3MsIGZyYWdtZW50YXRpb24gc2NvcmluZywgYW5kIGtjb21wYWN0ZC9rc3dhcGQgYmVoYXZpb3IgdG8gdXNlIHRoZSBuZXcgYGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKWAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzozMi41MzYxMTQxNDlaIiwiU2VxIjo0OSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Njk0OTczNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjVUMDU6MDc6MzIuNTM2NTQzMDg5WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE0Njk0NTQxMjg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY29tcGFjdGlvbiBhbmQgdm1zY2FuIGhldXJpc3RpY3MsIHN1Y2ggYXMgZnJhZ21lbnRhdGlvbiBzY29yaW5nIGFuZCBlZmZlY3RpdmUgZnJlZSBwYWdlcyBjYWxjdWxhdGlvbiBmb3IgVEhQIChUcmFuc3BhcmVudCBIdWdlIFBhZ2VzKS4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGFkZCBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgKHN1Y2ggYXMgbG9naWMgZXJyb3JzIGluIHdhdGVybWFyayBjYWxjdWxhdGlvbnMgb3IgdGhlIGBkZWZyYWdfbW9kZSBcXHUwMDI2IG9yZGVyYCBiaXR3aXNlIG9wZXJhdGlvbikgd291bGQgcmVzdWx0IGluIHBlcmZvcm1hbmNlIGlzc3VlcywgT09Ncywgb3IgZ2VuZXJhbCBtZW1vcnkgY29ycnVwdGlvbiwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVmYXVsdCBkZWJ1ZyB0b29scy4gVGhlcmUgaXMgbm8gc3BlY2lmaWMgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2UgdGhhdCByZXF1aXJlcyBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyYmY5MTZkZDRiYTA2YmY1YWM3NjhkN2IwNDNiYzVjYzRkNGY5ZTU0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMjUgMDU6MDU6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9jb21wYWN0aW9uLmMgYi9tbS9jb21wYWN0aW9uLmNcbmluZGV4IGEwNDk0MTU1MTJjNjcuLjI5YmU3MjU5NzQxNTYgMTAwNjQ0XG4tLS0gYS9tbS9jb21wYWN0aW9uLmNcbisrKyBiL21tL2NvbXBhY3Rpb24uY1xuQEAgLTI0LDYgKzI0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlX293bmVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2kuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NwdXNldC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZV9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJwYWdlX2FsbG9jLmhcIlxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gXG5AQCAtODEsNiArODIsMTUgQEAgc3RhdGljIGlubGluZSBib29sIGlzX3ZpYV9jb21wYWN0X21lbW9yeShpbnQgb3JkZXIpIHsgcmV0dXJuIGZhbHNlOyB9XG4gI2RlZmluZSBDT01QQUNUSU9OX0hQQUdFX09SREVSXHQoUE1EX1NISUZUIC0gUEFHRV9TSElGVClcbiAjZW5kaWZcbiBcbitzdGF0aWMgaW5saW5lIGludCBjb21wYWN0X2hwYWdlX29yZGVyKHZvaWQpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBvcmRlcnMgPSBSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpO1xuK1xuK1x0aWYgKG9yZGVycylcbitcdFx0cmV0dXJuIF9fZmZzKG9yZGVycyk7XG4rXHRyZXR1cm4gQ09NUEFDVElPTl9IUEFHRV9PUkRFUjtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBwYWdlICptYXJrX2FsbG9jYXRlZF9ub3Byb2Yoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvcmRlciwgZ2ZwX3QgZ2ZwX2ZsYWdzKVxuIHtcbiBcdHBvc3RfYWxsb2NfaG9vayhwYWdlLCBvcmRlciwgX19HRlBfTU9WQUJMRSwgQUxMT0NfREVGQVVMVCk7XG5AQCAtODI3LDYgKzgzNywxMiBAQCBzdGF0aWMgYm9vbCBza2lwX2lzb2xhdGlvbl9vbl9vcmRlcihpbnQgb3JkZXIsIGludCB0YXJnZXRfb3JkZXIpXG4gXHQgKi9cbiBcdGlmICghaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzZT0gdGFyZ2V0X29yZGVyKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdC8qIFdlIGFyZSBjb21wYWN0aW5nIGZvciBtdWx0aS1zaXplIFRIUCBhbGxvY2F0aW9uICovXG4rXHRpZiAoaXNfdmlhX2NvbXBhY3RfbWVtb3J5KHRhcmdldF9vcmRlcikgXHUwMDI2XHUwMDI2IG9yZGVyIFx1MDAzZT0gY29tcGFjdF9ocGFnZV9vcmRlcigpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIFJFQURfT05DRShodWdlX2Fub25fb3JkZXJzX2Fsd2F5cykpXG4rXHRcdHJldHVybiB0cnVlO1xuK1xuIFx0LypcbiBcdCAqIFdlIGxpbWl0IG1lbW9yeSBjb21wYWN0aW9uIHRvIHBhZ2VibG9ja3MgYW5kIHdvbid0IHRyeVxuIFx0ICogY3JlYXRpbmcgZnJlZSBibG9ja3Mgb2YgbWVtb3J5IHRoYXQgYXJlIGxhcmdlciB0aGFuIHRoYXQuXG5AQCAtMjIwOCwxNiArMjIyNCwxNiBAQCBzdGF0aWMgYm9vbCBrc3dhcGRfaXNfcnVubmluZyhwZ19kYXRhX3QgKnBnZGF0KVxuIFxuIC8qXG4gICogQSB6b25lJ3MgZnJhZ21lbnRhdGlvbiBzY29yZSBpcyB0aGUgZXh0ZXJuYWwgZnJhZ21lbnRhdGlvbiB3cnQgdG8gdGhlXG4tICogQ09NUEFDVElPTl9IUEFHRV9PUkRFUi4gSXQgcmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSBbMCwgMTAwXS5cbisgKiBjb21wYWN0X2hwYWdlX29yZGVyKCkuIEl0IHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4tXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgQ09NUEFDVElPTl9IUEFHRV9PUkRFUik7XG4rXHRyZXR1cm4gZXh0ZnJhZ19mb3Jfb3JkZXIoem9uZSwgb3JkZXIpO1xuIH1cbiBcbiAvKlxuICAqIEEgd2VpZ2h0ZWQgem9uZSdzIGZyYWdtZW50YXRpb24gc2NvcmUgaXMgdGhlIGV4dGVybmFsIGZyYWdtZW50YXRpb25cbi0gKiB3cnQgdG8gdGhlIENPTVBBQ1RJT05fSFBBR0VfT1JERVIgc2NhbGVkIGJ5IHRoZSB6b25lJ3Mgc2l6ZS4gSXRcbisgKiB3cnQgdG8gdGhlIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSBzY2FsZWQgYnkgdGhlIHpvbmUncyBzaXplLiBJdFxuICAqIHJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgWzAsIDEwMF0uXG4gICpcbiAgKiBUaGUgc2NhbGluZyBmYWN0b3IgZW5zdXJlcyB0aGF0IHByb2FjdGl2ZSBjb21wYWN0aW9uIGZvY3VzZXMgb24gbGFyZ2VyXG5AQCAtMjIyNSwxMSArMjI0MSwxMSBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSlcbiAgKiBaT05FX0RNQTMyLiBGb3Igc21hbGxlciB6b25lcywgdGhlIHNjb3JlIHZhbHVlIHJlbWFpbnMgY2xvc2UgdG8gemVybyxcbiAgKiBhbmQgdGh1cyBuZXZlciBleGNlZWRzIHRoZSBoaWdoIHRocmVzaG9sZCBmb3IgcHJvYWN0aXZlIGNvbXBhY3Rpb24uXG4gICovXG4tc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGludCBvcmRlcilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHNjb3JlO1xuIFxuLVx0c2NvcmUgPSB6b25lLVx1MDAzZXByZXNlbnRfcGFnZXMgKiBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoem9uZSk7XG4rXHRzY29yZSA9IHpvbmUtXHUwMDNlcHJlc2VudF9wYWdlcyAqIGZyYWdtZW50YXRpb25fc2NvcmVfem9uZSh6b25lLCBvcmRlcik7XG4gXHRyZXR1cm4gZGl2NjRfdWwoc2NvcmUsIHpvbmUtXHUwMDNlem9uZV9wZ2RhdC1cdTAwM2Vub2RlX3ByZXNlbnRfcGFnZXMgKyAxKTtcbiB9XG4gXG5AQCAtMjI0MCw3ICsyMjU2LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmVfd2VpZ2h0ZWQoc3RydWN0IHpvbmUgKnpvbmUpXG4gICogdGhlIG5vZGUncyBzY29yZSBmYWxscyBiZWxvdyB0aGUgbG93IHRocmVzaG9sZCwgb3Igb25lIG9mIHRoZSBiYWNrLW9mZlxuICAqIGNvbmRpdGlvbnMgaXMgbWV0LlxuICAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4rc3RhdGljIHVuc2lnbmVkIGludCBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgdW5zaWduZWQgaW50IG9yZGVyKVxuIHtcbiBcdHVuc2lnbmVkIGludCBzY29yZSA9IDA7XG4gXHRpbnQgem9uZWlkO1xuQEAgLTIyNTEsNyArMjI2Nyw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpXG4gXHRcdHpvbmUgPSBcdTAwMjZwZ2RhdC1cdTAwM2Vub2RlX3pvbmVzW3pvbmVpZF07XG4gXHRcdGlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpXG4gXHRcdFx0Y29udGludWU7XG4tXHRcdHNjb3JlICs9IGZyYWdtZW50YXRpb25fc2NvcmVfem9uZV93ZWlnaHRlZCh6b25lKTtcbitcdFx0c2NvcmUgKz0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lX3dlaWdodGVkKHpvbmUsIG9yZGVyKTtcbiBcdH1cbiBcbiBcdHJldHVybiBzY29yZTtcbkBAIC0yMjY5LDEyICsyMjg1LDEzIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZnJhZ21lbnRhdGlvbl9zY29yZV93bWFyayhib29sIGxvdylcbiBzdGF0aWMgYm9vbCBzaG91bGRfcHJvYWN0aXZlX2NvbXBhY3Rfbm9kZShwZ19kYXRhX3QgKnBnZGF0KVxuIHtcbiBcdGludCB3bWFya19oaWdoO1xuK1x0dW5zaWduZWQgaW50IG9yZGVyID0gY29tcGFjdF9ocGFnZV9vcmRlcigpO1xuIFxuIFx0aWYgKCFzeXNjdGxfY29tcGFjdGlvbl9wcm9hY3RpdmVuZXNzIHx8IGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0d21hcmtfaGlnaCA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsoZmFsc2UpO1xuLVx0cmV0dXJuIGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCkgXHUwMDNlIHdtYXJrX2hpZ2g7XG4rXHRyZXR1cm4gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcikgXHUwMDNlIHdtYXJrX2hpZ2g7XG4gfVxuIFxuIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbkBAIC0yMzA2LDEyICsyMzIzLDEzIEBAIHN0YXRpYyBlbnVtIGNvbXBhY3RfcmVzdWx0IF9fY29tcGFjdF9maW5pc2hlZChzdHJ1Y3QgY29tcGFjdF9jb250cm9sICpjYylcbiBcdGlmIChjYy1cdTAwM2Vwcm9hY3RpdmVfY29tcGFjdGlvbikge1xuIFx0XHRpbnQgc2NvcmUsIHdtYXJrX2xvdztcbiBcdFx0cGdfZGF0YV90ICpwZ2RhdDtcbitcdFx0Ym9vbCBjb3N0bHkgPSBjb21wYWN0X2hwYWdlX29yZGVyKCkgXHUwMDNlIFBBR0VfQUxMT0NfQ09TVExZX09SREVSO1xuIFxuIFx0XHRwZ2RhdCA9IGNjLVx1MDAzZXpvbmUtXHUwMDNlem9uZV9wZ2RhdDtcbi1cdFx0aWYgKGtzd2FwZF9pc19ydW5uaW5nKHBnZGF0KSlcbitcdFx0aWYgKGNvc3RseSBcdTAwMjZcdTAwMjYga3N3YXBkX2lzX3J1bm5pbmcocGdkYXQpKVxuIFx0XHRcdHJldHVybiBDT01QQUNUX1BBUlRJQUxfU0tJUFBFRDtcbiBcbi1cdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX3pvbmUoY2MtXHUwMDNlem9uZSk7XG4rXHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV96b25lKGNjLVx1MDAzZXpvbmUsIGNvbXBhY3RfaHBhZ2Vfb3JkZXIoKSk7XG4gXHRcdHdtYXJrX2xvdyA9IGZyYWdtZW50YXRpb25fc2NvcmVfd21hcmsodHJ1ZSk7XG4gXG4gXHRcdGlmIChzY29yZSBcdTAwM2Ugd21hcmtfbG93KVxuQEAgLTI1MTAsNiArMjUyOCwzOCBAQCBib29sIGNvbXBhY3Rpb25fem9uZWxpc3Rfc3VpdGFibGUoc3RydWN0IGFsbG9jX2NvbnRleHQgKmFjLCBpbnQgb3JkZXIsXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuKy8qKlxuKyAqIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMgLSBnZXQgZnJlZSBwYWdlcyByZWxldmFudCB0byBhbGxvY2F0aW9uIG9yZGVyXG4rICogQHpvbmU6ICAgICAgIHRhcmdldCB6b25lXG4rICogQG9yZGVyOiAgICAgIGFsbG9jYXRpb24gb3JkZXJcbisgKiBAdXNlX2Jsb2NrczogaWYgdHJ1ZSwgdXNlIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTXG4rICpcbisgKiBJbiBkZWZyYWdfbW9kZSwgd2F0ZXJtYXJrcyBtdXN0IGJlIG1ldCBpbiB3aG9sZSBibG9ja3MgdG8gYXZvaWRcbisgKiBwb2xsdXRpbmcgYWxsb2NhdG9yIGZhbGxiYWNrcy4ga3N3YXBkIHVzdWFsbHkgY2Fubm90IGFjY29tcGxpc2hcbisgKiB0aGlzIG9uIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LlxuKyAqXG4rICogV2hlbiBtVEhQIGFsd2F5cy1lbmFibGVkIG9yZGVycyBhcmUgY29uZmlndXJlZCwgY291bnQgb25seSBmcmVlIHBhZ2VzXG4rICogaW4gYmxvY2tzIFx1MDAzZT0gbWluIG1USFAgb3JkZXIsIGFzIHNtYWxsZXIgZnJhZ21lbnRzIGNhbm5vdCBzYXRpc2Z5IG1USFBcbisgKiBhbGxvY2F0aW9ucy5cbisgKi9cbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0Ym9vbCB1c2VfYmxvY2tzKVxuK3tcbitcdGlmICh1c2VfYmxvY2tzKVxuK1x0XHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVNfQkxPQ0tTKTtcbitcbitcdGlmIChSRUFEX09OQ0UoaHVnZV9hbm9uX29yZGVyc19hbHdheXMpIFx1MDAyNlx1MDAyNiBvcmRlciA9PSBjb21wYWN0X2hwYWdlX29yZGVyKCkpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzID0gMDtcbitcbitcdFx0Zm9yIChpbnQgbyA9IG9yZGVyOyBvIFx1MDAzYyBOUl9QQUdFX09SREVSUzsgbysrKVxuK1x0XHRcdGZyZWVfcGFnZXMgKz0gem9uZS1cdTAwM2VmcmVlX2FyZWFbb10ubnJfZnJlZSBcdTAwM2NcdTAwM2MgbztcbitcdFx0cmV0dXJuIGZyZWVfcGFnZXM7XG4rXHR9XG4rXG4rXHRyZXR1cm4gem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMpO1xuK31cbitcbiAvKlxuICAqIFNob3VsZCB3ZSBkbyBjb21wYWN0aW9uIGZvciB0YXJnZXQgYWxsb2NhdGlvbiBvcmRlci5cbiAgKiBSZXR1cm4gQ09NUEFDVF9TVUNDRVNTIGlmIGFsbG9jYXRpb24gZm9yIHRhcmdldCBvcmRlciBjYW4gYmUgYWxyZWFkeVxuQEAgLTI1MjUsMTAgKzI1NzUsOCBAQCBjb21wYWN0aW9uX3N1aXRfYWxsb2NhdGlvbl9vcmRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgaW50IG9yZGVyLFxuIFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFx0dW5zaWduZWQgbG9uZyB3YXRlcm1hcms7XG4gXG4tXHRpZiAoa2NvbXBhY3RkIFx1MDAyNlx1MDAyNiBkZWZyYWdfbW9kZSlcbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTX0JMT0NLUyk7XG4tXHRlbHNlXG4tXHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfRlJFRV9QQUdFUyk7XG4rXHRmcmVlX3BhZ2VzID0gem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcyh6b25lLCBvcmRlcixcbitcdFx0XHRcdFx0ICAgICAgIGtjb21wYWN0ZCBcdTAwMjZcdTAwMjYgZGVmcmFnX21vZGUpO1xuIFxuIFx0d2F0ZXJtYXJrID0gd21hcmtfcGFnZXMoem9uZSwgYWxsb2NfZmxhZ3MgXHUwMDI2IEFMTE9DX1dNQVJLX01BU0spO1xuIFx0aWYgKF9fem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIHdhdGVybWFyaywgaGlnaGVzdF96b25laWR4LFxuQEAgLTMyMzgsMTAgKzMyODYsMTEgQEAgc3RhdGljIGludCBrY29tcGFjdGQodm9pZCAqcClcbiBcdFx0dGltZW91dCA9IGRlZmF1bHRfdGltZW91dDtcbiBcdFx0aWYgKHNob3VsZF9wcm9hY3RpdmVfY29tcGFjdF9ub2RlKHBnZGF0KSkge1xuIFx0XHRcdHVuc2lnbmVkIGludCBwcmV2X3Njb3JlLCBzY29yZTtcbitcdFx0XHR1bnNpZ25lZCBpbnQgb3JkZXIgPSBjb21wYWN0X2hwYWdlX29yZGVyKCk7XG4gXG4tXHRcdFx0cHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCk7XG4rXHRcdFx0cHJldl9zY29yZSA9IGZyYWdtZW50YXRpb25fc2NvcmVfbm9kZShwZ2RhdCwgb3JkZXIpO1xuIFx0XHRcdGNvbXBhY3Rfbm9kZShwZ2RhdCwgdHJ1ZSk7XG4tXHRcdFx0c2NvcmUgPSBmcmFnbWVudGF0aW9uX3Njb3JlX25vZGUocGdkYXQpO1xuK1x0XHRcdHNjb3JlID0gZnJhZ21lbnRhdGlvbl9zY29yZV9ub2RlKHBnZGF0LCBvcmRlcik7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBEZWZlciBwcm9hY3RpdmUgY29tcGFjdGlvbiBpZiB0aGUgZnJhZ21lbnRhdGlvblxuIFx0XHRcdCAqIHNjb3JlIGRpZCBub3QgZ28gZG93biBpLmUuIG5vIHByb2dyZXNzIG1hZGUuXG5kaWZmIC0tZ2l0IGEvbW0vaW50ZXJuYWwuaCBiL21tL2ludGVybmFsLmhcbmluZGV4IDM4YjExNjUyMTJjOTQuLjE0YmI5NTQzODc5YjQgMTAwNjQ0XG4tLS0gYS9tbS9pbnRlcm5hbC5oXG4rKysgYi9tbS9pbnRlcm5hbC5oXG5AQCAtMTY1NCw0ICsxNjU0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNhbl9zcGluX3RyeWxvY2sodm9pZClcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbit1bnNpZ25lZCBsb25nIHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoc3RydWN0IHpvbmUgKnpvbmUsXG4rXHRcdFx0XHRcdHVuc2lnbmVkIGludCBvcmRlcixcbitcdFx0XHRcdFx0Ym9vbCB1c2VfYmxvY2tzKTtcbiAjZW5kaWZcdC8qIF9fTU1fSU5URVJOQUxfSCAqL1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmE0MTlhMmMyZmNhNDAgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC02OTY2LDcgKzY5NjYsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHQgKiBtZWV0IHdhdGVybWFya3MuXG4gXHQgKi9cbiBcdGZvcl9lYWNoX21hbmFnZWRfem9uZV9wZ2RhdCh6b25lLCBwZ2RhdCwgaSwgaGlnaGVzdF96b25laWR4KSB7XG4tXHRcdGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdFx0dW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzO1xuIFxuIFx0XHRpZiAoc3lzY3RsX251bWFfYmFsYW5jaW5nX21vZGUgXHUwMDI2IE5VTUFfQkFMQU5DSU5HX01FTU9SWV9USUVSSU5HKVxuQEAgLTY5NzQsMjEgKzY5NzMsNiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdGVsc2VcbiBcdFx0XHRtYXJrID0gaGlnaF93bWFya19wYWdlcyh6b25lKTtcbiBcbi1cdFx0Lypcbi1cdFx0ICogSW4gZGVmcmFnX21vZGUsIHdhdGVybWFya3MgbXVzdCBiZSBtZXQgaW4gd2hvbGVcbi1cdFx0ICogYmxvY2tzIHRvIGF2b2lkIHBvbGx1dGluZyBhbGxvY2F0b3IgZmFsbGJhY2tzLlxuLVx0XHQgKlxuLVx0XHQgKiBIb3dldmVyLCBrc3dhcGQgdXN1YWxseSBjYW5ub3QgYWNjb21wbGlzaCB0aGlzIG9uXG4tXHRcdCAqIGl0cyBvd24gYW5kIG5lZWRzIGtjb21wYWN0ZCBzdXBwb3J0LiBPbmNlIGl0J3Ncbi1cdFx0ICogcmVjbGFpbWVkIGEgY29tcGFjdGlvbiBnYXAsIGFuZCBrc3dhcGRfc2hyaW5rX25vZGVcbi1cdFx0ICogaGFzIGRyb3BwZWQgb3JkZXIsIHNpbXBseSBlbnN1cmUgdGhlcmUgYXJlIGVub3VnaFxuLVx0XHQgKiBiYXNlIHBhZ2VzIGZvciBjb21wYWN0aW9uLCB3YWtlIGtjb21wYWN0ZCBcdTAwMjYgc2xlZXAuXG4tXHRcdCAqL1xuLVx0XHRpZiAoZGVmcmFnX21vZGUgXHUwMDI2XHUwMDI2IG9yZGVyKVxuLVx0XHRcdGl0ZW0gPSBOUl9GUkVFX1BBR0VTX0JMT0NLUztcbi1cdFx0ZWxzZVxuLVx0XHRcdGl0ZW0gPSBOUl9GUkVFX1BBR0VTO1xuLVxuIFx0XHQvKlxuIFx0XHQgKiBXaGVuIHRoZXJlIGlzIGEgaGlnaCBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtLFxuIFx0XHQgKiB0aGUgY3VtdWxhdGl2ZSBlcnJvciBmcm9tIHRoZSB2bXN0YXQgcGVyLWNwdSBjYWNoZVxuQEAgLTcwMDEsOSArNjk4NSwxMiBAQCBzdGF0aWMgYm9vbCBwZ2RhdF9iYWxhbmNlZChwZ19kYXRhX3QgKnBnZGF0LCBpbnQgb3JkZXIsIGludCBoaWdoZXN0X3pvbmVpZHgpXG4gXHRcdCAqIGNvdW50ZXIgd29uJ3QgYWN0dWFsbHkgYmUgcGVyLWNwdSBjYWNoZWQuIEJ1dCBrZWVwXG4gXHRcdCAqIHRoaW5ncyBzaW1wbGUgZm9yIG5vdzsgcmV2aXNpdCB3aGVuIHNvbWVib2R5IGNhcmVzLlxuIFx0XHQgKi9cbi1cdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBpdGVtKTtcbitcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfZWZmZWN0aXZlX2ZyZWVfcGFnZXMoem9uZSwgb3JkZXIsXG4rXHRcdFx0XHRcdFx0ICAgICAgIGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcik7XG4gXHRcdGlmICh6b25lLVx1MDAzZXBlcmNwdV9kcmlmdF9tYXJrIFx1MDAyNlx1MDAyNiBmcmVlX3BhZ2VzIFx1MDAzYyB6b25lLVx1MDAzZXBlcmNwdV9kcmlmdF9tYXJrKVxuLVx0XHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSwgaXRlbSk7XG4rXHRcdFx0ZnJlZV9wYWdlcyA9IHpvbmVfcGFnZV9zdGF0ZV9zbmFwc2hvdCh6b25lLFxuK1x0XHRcdFx0XHRkZWZyYWdfbW9kZSBcdTAwMjYgb3JkZXIgP1xuK1x0XHRcdFx0XHROUl9GUkVFX1BBR0VTX0JMT0NLUyA6IE5SX0ZSRUVfUEFHRVMpO1xuIFxuIFx0XHRpZiAoX196b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWFyaywgaGlnaGVzdF96b25laWR4LFxuIFx0XHRcdFx0XHQwLCBmcmVlX3BhZ2VzKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI1VDA1OjA3OjMyLjUzNjU0Mzc3OVoiLCJTZXEiOjUxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDY5NDUyMjg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmluaXRpYWxpemVkIE1lbW9yeSBSaXNrIEFzc2Vzc21lbnQ6IE1lbW9yeSBDb21wYWN0aW9uIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIHRpbmtlcmluZyB3aXRoIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gd2l0aGluIHRoZSBrZXJuZWwg4oCTIHNwZWNpZmljYWxseSwgaG93IGZyZWUgcGFnZXMgYXJlIGNhbGN1bGF0ZWQsIGZyYWdtZW50YXRpb24gaXMgc2NvcmVkLCBhbmQgY29tcGFjdGlvbiBpcyB0cmlnZ2VyZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSBhc3Nlc3MgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLlxuXG5GaXJzdCwgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCdzIGJlaW5nIGNoYW5nZWQuIFRoZSBwYXRjaCBtb2RpZmllcyBgY29tcGFjdF9ocGFnZV9vcmRlcigpYCBiYXNlZCBvbiBgaHVnZV9hbm9uX29yZGVyc19hbHdheXNgLiBJdCBpbnRyb2R1Y2VzIGB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKClgIGFuZCBtb2RpZmllcyB0aGUgZnJhZ21lbnRhdGlvbiBzY29yaW5nIGZ1bmN0aW9ucyB0byB0YWtlIGFuIG9yZGVyIHBhcmFtZXRlci4gVGhlIGBrc3dhcGRfaXNfcnVubmluZ2AgY2hlY2sgaW4gYF9fY29tcGFjdF9maW5pc2hlZGAgbm93IG9ubHkgb2NjdXJzIGlmIGl0J3MgXCJjb3N0bHlcIi5cblxuTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoaXM6IFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbTsgcGFnZSBhbGxvY2F0aW9uLCBjb21wYWN0aW9uLCBhbmQgdm1zY2FuLiBDcnVjaWFsbHksIG5vIG5ldyBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGV4cG9zZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSBhcmVuJ3QgYW55IGJyYW5kLW5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgd2l0aGluIHRoZXNlIGNoYW5nZXMuIFRoZSBwYXRjaCBkb2Vzbid0IGludm9sdmUgYW55IG1vZGlmaWNhdGlvbnMgdG8gYm91bmRzIGNoZWNrcyBvciBsZW5ndGggY2FsY3VsYXRpb25zIHRoYXQgbWlnaHQgYWxsb3cgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MgdW5pbml0aWFsaXplZCBieXRlcy4gVGhpcyBpcyBhbGwgYWJvdXQgdGhlIGxvZ2ljIG9mIHdoZW4gdG8gY29tcGFjdCBhbmQgaG93IHRvIHNjb3JlIGZyYWdtZW50YXRpb24sIHJhdGhlciB0aGFuIGRpcmVjdCBtZW1vcnkgYWNjZXNzLlxuXG5BbnkgcG90ZW50aWFsIGJ1Z3MgaGVyZSBhcmUgbW9zdCBsaWtlbHkgbG9naWMgYnVnc+KAlHRoaW5ncyBsaWtlIGluZmluaXRlIGxvb3BzLCBpbmNvcnJlY3Qgd2F0ZXJtYXJrcywgb3V0LW9mLW1lbW9yeSBlcnJvcnPigJRvciwgYXQgd29yc3QsIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBLQVNBTiB3b3VsZCBjYXRjaC4gQ3J1Y2lhbGx5LCB0aGlzIGRvZXNu4oCZdCBzZWVtIGxpa2UgYSBzY2VuYXJpbyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSB3b3VsZCBsZWFrIHRvIHVzZXJzcGFjZSBvciBiZSB1c2VkIGluIGNvbnRyb2wgZmxvdyAoZS5nLiwgaW4gc3RhY2sgdmFyaWFibGVzKSBpbiBhIHdheSB0aGF0ICpzcGVjaWZpY2FsbHkqIGNhbGxzIGZvciBLTVNBTi5cblxuTGV0J3MgcXVpY2tseSBzY2FuIHRoZSBgem9uZV9lZmZlY3RpdmVfZnJlZV9wYWdlcygpYCBjb2RlOiBUaGlzIGNvZGUganVzdCByZWFkcyB2YWx1ZXMgZnJvbSBgem9uZS1cdTAwM2VmcmVlX2FyZWFbb10ubnJfZnJlZWAsIHNvIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUuXG5cbk5vdywgbGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY2hhbmdlcyB3aXRoaW4gYHZtc2Nhbi5jYC4gSXQgaGFzOlxuXG5gYGBjXG4tXHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGUoem9uZSwgaXRlbSk7XG4rXHRcdGZyZWVfcGFnZXMgPSB6b25lX2VmZmVjdGl2ZV9mcmVlX3BhZ2VzKHpvbmUsIG9yZGVyLFxuK1x0XHRcdFx0XHRcdCAgICAgICBkZWZyYWdfbW9kZSBcdTAwMjYgb3JkZXIpO1xuIFx0XHRpZiAoem9uZS1cdTAwM2VwZXJjcHVfZHJpZnRfbWFyayBcdTAwMjZcdTAwMjYgZnJlZV9wYWdlcyBcdTAwM2Mgem9uZS1cdTAwM2VwZXJjcHVfZHJpZnRfbWFyaylcbi1cdFx0XHRmcmVlX3BhZ2VzID0gem9uZV9wYWdlX3N0YXRlX3NuYXBzaG90KHpvbmUsIGl0ZW0pO1xuK1x0XHRcdGZyZWVfcGFnZXMgPSB6b25lX3BhZ2Vfc3RhdGVfc25hcHNob3Qoem9uZSxcbitcdFx0XHRcdFx0ZGVmcmFnX21vZGUgXHUwMDI2IG9yZGVyID9cbitcdFx0XHRcdFx0TlJfRlJFRV9QQUdFU19CTE9DS1MgOiBOUl9GUkVFX1BBR0VTKTtcbmBgYFxuXG5Pa2F5LCB0aGUgY3J1Y2lhbCBjaGFuZ2UgaXMgYGRlZnJhZ19tb2RlIFx1MDAyNiBvcmRlcmAuIFByZXZpb3VzbHksIGl0IHdhcyBgZGVmcmFnX21vZGUgXHUwMDI2XHUwMDI2IG9yZGVyYC4gTm93LCB3aGlsZSBgZGVmcmFnX21vZGVgIGlzIGxpa2VseSBhIGJvb2xlYW4gb3IgaW50ZWdlciwgdGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0byBjaGVjay4gSWYgYGRlZnJhZ19tb2RlYCBpc24ndCAxLCB0aGlzIGNoYW5nZSBtaWdodCByZXN1bHQgaW4gYSBidWcuIEl0IGFwcGVhcnMgdG8gYmUgYSBidWcgaWYgYGRlZnJhZ19tb2RlYCBpcyBub3QgMS4gRXZlbiBzbywgaXQncyBhIGxvZ2ljIGJ1Zywgbm90IGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9uZS5cblxuKipDb25jbHVzaW9uOioqIEJhc2VkIG9uIHRoaXMgcmV2aWV3LCB0aGlzIHBhdGNoIGRvZXNuJ3QgcG9zZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UgcmVxdWlyaW5nIGEgS01TQU4gY2hlY2suIFRoZSBjaGFuZ2VzIGFyZSBjb25jZW50cmF0ZWQgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGNvbXBhY3Rpb24gaGV1cmlzdGljcyBhbmQgZnJlZSBwYWdlIGNhbGN1bGF0aW9ucywgd2l0aG91dCBpbnRyb2R1Y2luZyBkYXRhIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2Ugb3IgY29tcGxleCBhbGxvY2F0aW9ucy4gQW55IGludHJvZHVjZWQgYnVncywgbGlrZSBpbiB3YXRlcm1hcmsgY2FsY3VsYXRpb25zLCB3b3VsZCBsZWFkIHRvIHByb2JsZW1zIHRoYXQgc3RhbmRhcmQgS0FTQU4gYW5kIG1lbW9yeSBkZWJ1Z2dpbmcgdG9vbHMgd291bGQgYmUgYWJsZSB0byBjYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTExOCwiT3V0cHV0VG9rZW5zIjoxNTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OTcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNVQwNTowNzo0Ny4yMzEwNjkzMzhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gaGV1cmlzdGljcywgc3VjaCBhcyBmcmFnbWVudGF0aW9uIHNjb3JpbmcgYW5kIGVmZmVjdGl2ZSBmcmVlIHBhZ2VzIGNhbGN1bGF0aW9uIGZvciBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMgaW4gd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucyBvciB0aGUgYGRlZnJhZ19tb2RlIFxcdTAwMjYgb3JkZXJgIGJpdHdpc2Ugb3BlcmF0aW9uKSB3b3VsZCByZXN1bHQgaW4gcGVyZm9ybWFuY2UgaXNzdWVzLCBPT01zLCBvciBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnIHRvb2xzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB0aGF0IHJlcXVpcmVzIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjb21wYWN0aW9uIGFuZCB2bXNjYW4gaGV1cmlzdGljcywgc3VjaCBhcyBmcmFnbWVudGF0aW9uIHNjb3JpbmcgYW5kIGVmZmVjdGl2ZSBmcmVlIHBhZ2VzIGNhbGN1bGF0aW9uIGZvciBUSFAgKFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMpLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgYWRkIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyAoc3VjaCBhcyBsb2dpYyBlcnJvcnMgaW4gd2F0ZXJtYXJrIGNhbGN1bGF0aW9ucyBvciB0aGUgYGRlZnJhZ19tb2RlIFxcdTAwMjYgb3JkZXJgIGJpdHdpc2Ugb3BlcmF0aW9uKSB3b3VsZCByZXN1bHQgaW4gcGVyZm9ybWFuY2UgaXNzdWVzLCBPT01zLCBvciBnZW5lcmFsIG1lbW9yeSBjb3JydXB0aW9uLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWZhdWx0IGRlYnVnIHRvb2xzLiBUaGVyZSBpcyBubyBzcGVjaWZpYyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSB0aGF0IHJlcXVpcmVzIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ql2t[1] Phase: Succeeded StartedAt: 2026-08-25 05:07:58 +0000 UTC FinishedAt: 2026-08-25 05:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-25 05:07:58 +0000 UTC FinishedAt: 2026-08-25 05:07:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2] Phase: Running StartedAt: 2026-08-25 05:07:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Running StartedAt: 2026-08-25 05:07:58 +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":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-25 05:07:58 +0000 UTC FinishedAt: 2026-08-25 05:08:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-25 05:07:58 +0000 UTC FinishedAt: 2026-08-25 05:08:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow6ql2t/series-workflow6ql2t-convert-artifact-2855836242/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-25 05:08:08 +0000 UTC FinishedAt: 2026-08-25 05:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-25 05:08:08 +0000 UTC FinishedAt: 2026-08-25 05:23:57 +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:*75483d0e-4c6b-40fd-9be4-2e3b2f5df8fd,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-workflow6ql2t/series-workflow6ql2t-convert-artifact-2855836242/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": "8b6eb14d-f269-4063-a135-aac4a5061ffb", "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-workflow6ql2t/series-workflow6ql2t-build-action-2774011600/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-25 05:08:08 +0000 UTC FinishedAt: 2026-08-25 05:23:47 +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:*75483d0e-4c6b-40fd-9be4-2e3b2f5df8fd,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-workflow6ql2t/series-workflow6ql2t-convert-artifact-2855836242/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": "8b6eb14d-f269-4063-a135-aac4a5061ffb", "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-workflow6ql2t/series-workflow6ql2t-build-action-2774011600/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-25 05:23:57 +0000 UTC FinishedAt: 2026-08-25 05:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-25 05:23:57 +0000 UTC FinishedAt: 2026-08-25 05:23:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-25 05:23:57 +0000 UTC FinishedAt: 2026-08-25 05:24:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-25 05:23:57 +0000 UTC FinishedAt: 2026-08-25 05:24:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflow6ql2t/series-workflow6ql2t-convert-artifact-1233708397/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-25 05:24:07 +0000 UTC FinishedAt: 2026-08-25 05:26:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-25 05:24:07 +0000 UTC FinishedAt: 2026-08-25 05:26:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*8b6eb14d-f269-4063-a135-aac4a5061ffb,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-workflow6ql2t/series-workflow6ql2t-build-action-2774011600/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-25 05:26:17 +0000 UTC FinishedAt: 2026-08-25 05:26:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-25 05:26:17 +0000 UTC FinishedAt: 2026-08-25 05:26:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-25 05:26:17 +0000 UTC FinishedAt: 2026-08-25 05:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-25 05:26:17 +0000 UTC FinishedAt: 2026-08-25 05:43:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*75483d0e-4c6b-40fd-9be4-2e3b2f5df8fd,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-workflow6ql2t/series-workflow6ql2t-convert-artifact-1233708397/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": "1957aae1-4fef-4710-a31e-5d41d648cd09", "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-workflow6ql2t/series-workflow6ql2t-build-action-2649724617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-25 05:26:17 +0000 UTC FinishedAt: 2026-08-25 05:43:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*75483d0e-4c6b-40fd-9be4-2e3b2f5df8fd,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-workflow6ql2t/series-workflow6ql2t-convert-artifact-1233708397/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": "1957aae1-4fef-4710-a31e-5d41d648cd09", "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-workflow6ql2t/series-workflow6ql2t-build-action-2649724617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-25 05:43:23 +0000 UTC FinishedAt: 2026-08-25 05:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-25 05:43:23 +0000 UTC FinishedAt: 2026-08-25 05:43:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Running StartedAt: 2026-08-25 05:43:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6ql2t[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["try_to_compact_pages","zone_effective_free_pages","compaction_zonelist_suitable","wakeup_kswapd","wakeup_kcompactd","kswapd_try_clear_hopeless"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70ff9f9ec393d5be1d5bea709d3b105ad4233a7f","config_name":"upstream-apparmor-kasan.config","enable_configs":["COMPACTION","TRANSPARENT_HUGEPAGE"],"series_id":"092c4c43-e7c2-4385-a65a-681ee2b037d7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Running StartedAt: 2026-08-25 05:43:23 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*1957aae1-4fef-4710-a31e-5d41d648cd09,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6ql2t/series-workflow6ql2t-build-action-2649724617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil