Name: series-workflowfpvvk Phase: Succeeded StartedAt: 2026-08-09 12:02:36 +0000 UTC FinishedAt: 2026-08-09 16:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[0] Phase: Succeeded StartedAt: 2026-08-09 12:02:36 +0000 UTC FinishedAt: 2026-08-09 12:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[0].run-triage Phase: Succeeded StartedAt: 2026-08-09 12:02:36 +0000 UTC FinishedAt: 2026-08-09 12:28:18 +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": "486d992fddf1e26f35a924d85bfbfd8d866a2ac2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSMALLOC", "ZRAM", "ZSWAP" ], "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": "486d992fddf1e26f35a924d85bfbfd8d866a2ac2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSMALLOC", "ZRAM", "ZSWAP" ], "series_id": "27822a28-c953-4f3c-95d3-a23c0b2fcb4e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zs_lookup_class_index", "zs_malloc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19sb29rdXBfY2xhc3NfaW5kZXgmIzM0OywKICAgICYjMzQ7enNfbWFsbG9jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgZmFpbGVkIHRvIGFjY291bnQgZm9yIGBaU19IQU5ETEVfU0laRWAgd2hlbiBsb29raW5nIHVwIHRoZSBzaXplIGNsYXNzIGluZGV4LCBjYXVzaW5nIGl0IHRvIHJldHVybiBhbiBpbmNvcnJlY3QgKHNtYWxsZXIpIGNsYXNzIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseSB1c2VkIGJ5IHpyYW0gdG8gZGV0ZXJtaW5lIGlmIHJlY29tcHJlc3NpbmcgYW4gb2JqZWN0IGlzIGJlbmVmaWNpYWwgYnkgY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjbGFzcyBpbmRpY2VzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBidXQgaXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIGlzc3VlcyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCB3YXMgcmV0dXJuaW5nIHRoZSB3cm9uZyBjbGFzcyBpbmRleCBiZWNhdXNlIGl0IGRpZG4mIzM5O3QgYWRkIGBaU19IQU5ETEVfU0laRWAgdG8gdGhlIHNpemUsIHVubGlrZSBgenNfbWFsbG9jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHpzbWFsbG9jIGFsbG9jYXRvciBsb2dpYywgd2hpY2ggaXMgdXNlZCBieSB6cmFtIGFuZCB6c3dhcC4gRnV6emluZyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ0N2NlNDZiYzEyNTA3MmJkYTA2OGJlNjA0Y2EzYTY0MDg0ZmFhNDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDEyOjIwOjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzbWFsbG9jLmMgYi9tbS96c21hbGxvYy5jXG5pbmRleCA4M2Y1ODIwYzQ1ZjkzLi40MWIwM2E5ZWNlYzI1IDEwMDY0NFxuLS0tIGEvbW0venNtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venNtYWxsb2MuY1xuQEAgLTQ3OCw2ICYjNDM7NDc4LDExIEBAIHN0YXRpYyBpbnQgZ2V0X3NpemVfY2xhc3NfaW5kZXgoaW50IHNpemUpXG4gXHRyZXR1cm4gbWluX3QoaW50LCBaU19TSVpFX0NMQVNTRVMgLSAxLCBpZHgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBzaXplX2NsYXNzICpsb29rdXBfc2l6ZV9jbGFzcyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUgJiM0MzsgWlNfSEFORExFX1NJWkUpXTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xhc3Nfc3RhdF9hZGQoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBpbnQgdHlwZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBjbnQpXG4ge1xuQEAgLTEwMjEsNyAmIzQzOzEwMjYsNyBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4gXG4tXHRjbGFzcyA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07XG4mIzQzO1x0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcbiBcbiBcdHJldHVybiBjbGFzcy1cdTAwM2VpbmRleDtcbiB9XG5AQCAtMTMxMSw5ICYjNDM7MTMxNiw3IEBAIHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxuIFx0aWYgKCFoYW5kbGUpXG4gXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0LyogZXh0cmEgc3BhY2UgaW4gY2h1bmsgdG8ga2VlcCB0aGUgaGFuZGxlICovXG4tXHRzaXplICYjNDM7PSBaU19IQU5ETEVfU0laRTtcbi1cdGNsYXNzID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcbiYjNDM7XHRjbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpO1xuIFxuIFx0LyogY2xhc3MtXHUwMDNlbG9jayBlZmZlY3RpdmVseSBwcm90ZWN0cyB0aGUgenBhZ2UgbWlncmF0aW9uICovXG4gXHRzcGluX2xvY2soXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19sb29rdXBfY2xhc3NfaW5kZXgmIzM0OywKICAgICYjMzQ7enNfbWFsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdoZXJlIGl0IHdhcyByZXR1cm5pbmcgdGhlIHdyb25nIGNsYXNzIGluZGV4IGJlY2F1c2UgaXQgZGlkbiYjMzk7dCBhZGQgYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSwgdW5saWtlIGB6c19tYWxsb2NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgenNtYWxsb2MgYWxsb2NhdG9yIGxvZ2ljLCB3aGljaCBpcyB1c2VkIGJ5IHpyYW0gYW5kIHpzd2FwLiBGdXp6aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDQ3Y2U0NmJjMTI1MDcyYmRhMDY4YmU2MDRjYTNhNjQwODRmYWE0NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDkgMTI6MjA6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuYwppbmRleCA4M2Y1ODIwYzQ1ZjkzLi40MWIwM2E5ZWNlYzI1IDEwMDY0NAotLS0gYS9tbS96c21hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzbWFsbG9jLmMKQEAgLTQ3OCw2ICYjNDM7NDc4LDExIEBAIHN0YXRpYyBpbnQgZ2V0X3NpemVfY2xhc3NfaW5kZXgoaW50IHNpemUpCiAJcmV0dXJuIG1pbl90KGludCwgWlNfU0laRV9DTEFTU0VTIC0gMSwgaWR4KTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqbG9va3VwX3NpemVfY2xhc3Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBvb2wtJmd0O3NpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSAmIzQzOyBaU19IQU5ETEVfU0laRSldOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGFzc19zdGF0X2FkZChzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsIGludCB0eXBlLAogCQkJCSAgdW5zaWduZWQgbG9uZyBjbnQpCiB7CkBAIC0xMDIxLDcgJiM0MzsxMDI2LDcgQEAgdW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzOwogCi0JY2xhc3MgPSBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTsKJiM0MzsJY2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTsKIAogCXJldHVybiBjbGFzcy0mZ3Q7aW5kZXg7CiB9CkBAIC0xMzExLDkgJiM0MzsxMzE2LDcgQEAgdW5zaWduZWQgbG9uZyB6c19tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsCiAJaWYgKCFoYW5kbGUpCiAJCXJldHVybiAodW5zaWduZWQgbG9uZylFUlJfUFRSKC1FTk9NRU0pOwogCi0JLyogZXh0cmEgc3BhY2UgaW4gY2h1bmsgdG8ga2VlcCB0aGUgaGFuZGxlICovCi0Jc2l6ZSAmIzQzOz0gWlNfSEFORExFX1NJWkU7Ci0JY2xhc3MgPSBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTsKJiM0MzsJY2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTsKIAogCS8qIGNsYXNzLSZndDtsb2NrIGVmZmVjdGl2ZWx5IHByb3RlY3RzIHRoZSB6cGFnZSBtaWdyYXRpb24gKi8KIAlzcGluX2xvY2soJmFtcDtjbGFzcy0mZ3Q7bG9jayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBac21hbGxvYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3pzbWFsbG9jLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBhIG5ldyBmdW5jdGlvbiwgYGxvb2t1cF9zaXplX2NsYXNzYC4gVGhleSYjMzk7cmUgdXNpbmcgaXQgaW4gYm90aCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AuIExldCYjMzk7cyBzZWUuLi4gdGhlIGFsdGVyYXRpb24gdG8gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDoKCmBgYGMKLQljbGFzcyA9IHBvb2wtJmd0O3NpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSldOwomIzQzOwljbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpOwpgYGAKCkJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBsb29rdXBfc2l6ZV9jbGFzc2AgaXMgKmFkZGluZyogYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgaW5wdXQgYHNpemVgICpiZWZvcmUqIGNhbGxpbmcgYGdldF9zaXplX2NsYXNzX2luZGV4YC4gU28sIGVmZmVjdGl2ZWx5LCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBub3cgKmluY29ycG9yYXRpbmcqIGBaU19IQU5ETEVfU0laRWAgaW50byBpdHMgc2l6ZSBjYWxjdWxhdGlvbiEgVGhhdCYjMzk7cyBhIGRlZmluaXRlIGJlaGF2aW9yIHNoaWZ0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpOb3csIGluIGB6c19tYWxsb2NgLCBpdCYjMzk7cyBiZWVuIHJlZmFjdG9yZWQgaW4gYSBzaW1pbGFyIHdheToKCmBgYGMKLQkvKiBleHRyYSBzcGFjZSBpbiBjaHVuayB0byBrZWVwIHRoZSBoYW5kbGUgKi8KLQlzaXplICYjNDM7PSBaU19IQU5ETEVfU0laRTsKLQljbGFzcyA9IHBvb2wtJmd0O3NpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSldOwomIzQzOwljbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpOwpgYGAKCkhlcmUsIGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZy4gSSYjMzk7bSB0YWtpbmcgdGhlIHByZXZpb3VzIGFkZGl0aW9uIG9mIGBaU19IQU5ETEVfU0laRWAgYW5kIG1vdmluZyBpdCBpbnRvIGBsb29rdXBfc2l6ZV9jbGFzc2AuIFRoYXQmIzM5O3MgY2xlYW5lciwgc3VyZSwgYnV0IHRoZSBlZmZlY3Qgb2YgdGhlIGNoYW5nZSBpcyBuZXV0cmFsLCB3aGVyZWFzIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIHN1YnRsZSBjaGFuZ2UgaW4gdGhlIGV4cGVjdGVkIGJlaGF2aW9yLgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayB0aGlzIGlzIGEgYml0IGRlY2VwdGl2ZSwgYXMgaXQgZG9lc24mIzM5O3QgaW1tZWRpYXRlbHkgcmV2ZWFsIHRoZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yLiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBidXQgaXQmIzM5O3MgKmZ1bmN0aW9uYWxseSogY2hhbmdpbmcgaG93IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIG9wZXJhdGVzLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBkZWVwZXIgaW50byBob3cgYFpTX0hBTkRMRV9TSVpFYCBpcyBhY3R1YWxseSAqdXNlZCogdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQsIGFuZCBpZiBzbywgaXQgbmVlZHMgdmVyeSBjYXJlZnVsIGRvY3VtZW50YXRpb24uIExldCYjMzk7cyBkaWcgaW50byBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhZ2FpbiBhbmQgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enNfbG9va3VwX2NsYXNzX2luZGV4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzc6XHRjbGFzc19pbmRleF9vbGQgPSB6c19sb29rdXBfY2xhc3NfaW5kZXgoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW5fb2xkKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzg6XHRjbGFzc19pbmRleF9uZXcgPSB6c19sb29rdXBfY2xhc3NfaW5kZXgoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW5fbmV3KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzktXG4tLVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oPTM3PXVuc2lnbmVkIGxvbmcgenNfY29tcGFjdChzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzgtXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg6Mzk6dW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpO1xuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTQwLVxuLS1cbm1tL3pzbWFsbG9jLmM9MTAwOT1zdGF0aWMgYm9vbCB6c3BhZ2VfZW1wdHkoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuLS1cbm1tL3pzbWFsbG9jLmMtMTAxNC0vKipcbm1tL3pzbWFsbG9jLmM6MTAxNTogKiB6c19sb29rdXBfY2xhc3NfaW5kZXgoKSAtIFJldHVybnMgaW5kZXggb2YgdGhlIHpzbWFsbG9jIFx1MDAyNnNpemVfY2xhc3Ncbm1tL3pzbWFsbG9jLmMtMTAxNi0gKiB0aGF0IGhvbGQgb2JqZWN0cyBvZiB0aGUgcHJvdmlkZWQgc2l6ZS5cbi0tXG5tbS96c21hbGxvYy5jLTEwMjQtICovXG5tbS96c21hbGxvYy5jOjEwMjU6dW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpXG5tbS96c21hbGxvYy5jLTEwMjYte1xuLS1cbm1tL3pzbWFsbG9jLmMtMTAzMi19XG5tbS96c21hbGxvYy5jOjEwMzM6RVhQT1JUX1NZTUJPTF9HUEwoenNfbG9va3VwX2NsYXNzX2luZGV4KTtcbm1tL3pzbWFsbG9jLmMtMTAzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB6c21hbGxvYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLiBUaGUgY3J1Y2lhbCBkZXRhaWwgaXMgdGhhdCBpdCYjMzk7cyAqYWRkaW5nKiBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplIGNhbGN1bGF0aW9uLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSBoYW5kbGVzIHdpdGhpbiBgenNtYWxsb2NgLCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgaW5kZXggY2FsY3VsYXRpb24gb24gb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgYW5kIGZyYWdtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNoYW5nZSBpcyBuZWNlc3NhcnkuCgpUaGUgY29kZSBwYXRoIGludm9sdmVkLCBhdCBsZWFzdCBiYXNlZCBvbiB0aGUgY29udGV4dCBoZXJlLCBpcyBgcmVjb21wcmVzc19zbG90YCBpbiBgenJhbV9kcnYuY2AuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiBpbXBhY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIG9wZXJhdGlvbnMgaW4gYHpyYW1gLgoKQmVmb3JlIGRpZ2dpbmcgaW50byB0aGUgY29kZSB0b28gZGVlcGx5LCBJIHdpbGwgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZSAtIGBDT05GSUdfWlJBTWAgYW5kIGBDT05GSUdfWlNNQUxMT0NgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhvc2UgdG8gZW5zdXJlIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHNjb3BlIG9mIHRoaXMgY2hhbmdlIGFyZSBvbiBwb2ludCBiZWZvcmUgZ2V0dGluZyBhbnkgZGVlcGVyLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcCB0aGF0IEkgc2hvdWxkbiYjMzk7dCBza2lwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU01BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy0xMjQtXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0Ncbm1tL0tjb25maWctMTI2LVx0dHJpc3RhdGVcbi0tXG5tbS9LY29uZmlnPTEzMz1jb21tZW50IFwmIzM0O1pzbWFsbG9jIGlzIGEgY29tbW9uIGJhY2tlbmQgYWxsb2NhdG9yIGZvciB6c3dhcCBcdTAwMjYgenJhbVwmIzM0O1xubW0vS2NvbmZpZy0xMzQtXG5tbS9LY29uZmlnOjEzNTpjb25maWcgWlNNQUxMT0NfU1RBVFxubW0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O0V4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMtXG5tbS9LY29uZmlnOjE0NDpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxubW0vS2NvbmZpZy0xNDUtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlpSQU0gQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgY29uZmlnIFpSQU1gLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIHdoZW4gY29uc2lkZXJpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgZXNwZWNpYWxseSBmb3IgcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzIG9yIHN5c3RlbXMgd2l0aCBwb3RlbnRpYWxseSBoZWF2eSBJL08gd29ya2xvYWRzLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiBaUkFNIGlzIGN1cnJlbnRseSBlbmFibGVkLCBhbmQgaWYgc28sIHdoYXQgdGhlIGV4aXN0aW5nIHBhcmFtZXRlcnMgYXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIHZpdGFsIGJlZm9yZSB3ZSBjYW4gYXNzZXNzIGl0cyBlZmZlY3RpdmVuZXNzIG9yIGNvbnNpZGVyIGFueSBvcHRpbWl6YXRpb25zLiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGFsbG9jYXRlZCBzaXplLCBjb21wcmVzc2lvbiBhbGdvcml0aG0sIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgdHVuYWJsZSBwYXJhbWV0ZXJzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGN1cnJlbnQgc3RhdGUuIEZyb20gdGhlcmUsIHdlIGNhbiBiZWdpbiB0byB0cm91Ymxlc2hvb3QgYW5kIHNlZSBpZiB3ZSBjYW4gZG8gYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjpjb25maWcgWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7bHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjk6Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7enN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7ODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cdGRlcGVuZHMgb24gWlJBTVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU0LVx0Ym9vbCBcJiMzNDtsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0OyBpZiAhWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7bHpvLXJsZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Njk6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7bHo0aGNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgxOmNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cdHN0cmluZ1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEwNzpjb25maWcgWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcJiMzNDtXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMTpjb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cdGJvb2wgXCYjMzQ7VHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXHRib29sIFwmIzM0O0VuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYzMwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogRml4aW5nIGEgWlJBTSBNZW1vcnkgQWxsb2NhdGlvbiBCdWcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBtb2RpZnlpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0byBtYWtlIGl0IGNhbGwgYGxvb2t1cF9zaXplX2NsYXNzYCBhbmQsIGNyaXRpY2FsbHksICphZGQqIGBaU19IQU5ETEVfU0laRWAgdG8gdGhlIHNpemUgYmVpbmcgbG9va2VkIHVwLiBBaCwgdGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIGFsbW9zdCBjZXJ0YWlubHkgcmVzb2x2ZXMgYSBidWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYHpzX21hbGxvY2Agd2FzIGFkZGluZyBgWlNfSEFORExFX1NJWkVgIHdoZW4gKmFsbG9jYXRpbmcqIG1lbW9yeSwgYnV0IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdhc24mIzM5O3QgYWNjb3VudGluZyBmb3IgaXQgd2hlbiBkZXRlcm1pbmluZyB0aGUgKmNsYXNzKiBvZiB0aGF0IGFsbG9jYXRpb24uIFNvLCB0aGUgaW5kZXggd2FzIG9mZiwgbGVhZGluZyB0by4uLiB3ZWxsLCB3aG8ga25vd3Mgd2hhdCBraW5kIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIHBlcmZvcm1hbmNlIGlzc3Vlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNsZWFyIGFuZCBlc3NlbnRpYWwgZml4LgoKVGhlIGZ1bmN0aW9ucyB0byByZWFsbHkgZm9jdXMgb24gaGVyZSBhcmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhvc2UsIGxpbmUgYnkgbGluZSwgdG8gc2VlIHRoZSBleGFjdCBjb250ZXh0LiBBbmQgdGhlbiwgdGhlcmUmIzM5O3MgYHJlY29tcHJlc3Nfc2xvdGAgaW4gYHpyYW1fZHJ2LmNgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZTsgaXQgc2VlbXMgdG8gYmUgdXNpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGNvZGViYXNlIHRvIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJdCBjb3VsZCBiZSBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb21wcmVzc19zbG90JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzNzg9c3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3JfcmVjb21wcmVzcyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIG1vZGUsIHUzMiBwcmlvLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MjItICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDIzOnN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQyNC1cdFx0XHQgICB1NjQgKm51bV9yZWNvbXBfcGFnZXMsIHUzMiB0aHJlc2hvbGQsIHUzMiBwcmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI1Mjk9c3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjY1MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI2NTE6XHRcdGVyciA9IHJlY29tcHJlc3Nfc2xvdCh6cmFtLCBwcHMtXHUwMDNlaW5kZXgsIHBhZ2UsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNjUyLVx0XHRcdFx0ICAgICAgXHUwMDI2bnVtX3JlY29tcF9wYWdlcywgdGhyZXNob2xkLCBwcmlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbXByZXNzaW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHJlY29tcHJlc3Nfc3RvcmVgIGF0dHJpYnV0ZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgc3lzZnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIG1lbW9yeSBjb21wcmVzc2lvbiBsYW5kc2NhcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGhvdyBgWlJBTWAgYW5kIGBaU01BTExPQ2AgYXJlIGNvbmZpZ3VyZWQuIE9mIGNvdXJzZSwgYFpSQU1gIHJlbGllcyBvbiBgQkxPQ0tgLCBzbyB0aGF0JiMzOTtzIGEgZGVwZW5kZW5jeSBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBBbmQgaXQgbG9va3MgbGlrZSBgWlNNQUxMT0NgIGRlcGVuZHMgb24gYE1NVWAuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gYnJpZWZseSBjaGVjayBvdXQgYFpTV0FQYCBhbmQgaXRzIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhlIGNvZGUgY2hhbmdlIGlzIG5lc3RsZWQgd2l0aGluIGBtbS96c21hbGxvYy5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLiBJIGFscmVhZHkga25vdyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBleHBvcnRlZCwgYW5kIGB6cmFtX2Rydi5jYCBsZXZlcmFnZXMgaXQuIFNpbWlsYXJseSwgYHpzX21hbGxvY2AgaXMgZXhwb3NlZCBmb3IgdXNlIGJ5IGJvdGggYHpyYW1fZHJ2LmNgIGFuZCBgenN3YXAuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB0byB1bmRlcnN0YW5kIHRoZSBleHRlbnQgb2YgdGhlIGNoYW5nZSwgc28gbGV0JiMzOTtzIGNoZWNrIHdobyYjMzk7cyBjYWxsaW5nIGB6c19tYWxsb2NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHVzaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c19tYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Q9MTA9b3IgeW91IGNhbiBkaXJlY3RseSByZXF1ZXN0IHBhZ2VzIGZyb20gdGhlIHBhZ2UgYWxsb2NhdG9yIHdpdGhcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTExLWBhbGxvY19wYWdlc2AuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIG1vcmUgc3BlY2lhbGl6ZWQgYWxsb2NhdG9ycyxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0OjEyOmZvciBpbnN0YW5jZSBgY21hX2FsbG9jYCBvciBgenNfbWFsbG9jYC5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTEzLVxuLS1cbkRvY3VtZW50YXRpb24vbW0venNtYWxsb2MucnN0PTIyPXVuY29tcHJlc3NlZCBmb3JtKS4gRm9yIGFsbG9jYXRpb24gcmVxdWVzdHMgbGFyZ2VyIHRoYW4gdGhpcyBzaXplLCBmYWlsdXJlXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdDoyMzppcyByZXR1cm5lZCAoc2VlIHpzX21hbGxvYykuXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdC0yNC1cbkRvY3VtZW50YXRpb24vbW0venNtYWxsb2MucnN0OjI1OkFkZGl0aW9uYWxseSwgenNfbWFsbG9jKCkgZG9lcyBub3QgcmV0dXJuIGEgZGVyZWZlcmVuY2VhYmxlIHBvaW50ZXIuXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdC0yNi1JbnN0ZWFkLCBpdCByZXR1cm5zIGFuIG9wYXF1ZSBoYW5kbGUgKHVuc2lnbmVkIGxvbmcpIHdoaWNoIGVuY29kZXMgYWN0dWFsXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0PTE5PUxpbnV45Li65YaF5a2Y5YiG6YWN5o+Q5L6b5LqG5aSa56eNQVBJ44CC5L2g5Y+v5Lul5L2/55SoIGBrbWFsbG9jYCDmiJYgYGttZW1fY2FjaGVfYWxsb2NgXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTIxLeS9oOWPr+S7peeUqCBhbGxvY19wYWdlcyDnm7TmjqXlkJHpobXpnaLliIbphY3lmajor7fmsYLpobXpnaLjgILkuZ/lj6/ku6Xkvb/nlKjmm7TkuJPkuJrnmoTliIbphY3lmajvvIxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdDoyMjrkvovlpoIgYGNtYV9hbGxvY2Ag5oiWIGB6c19tYWxsb2NgIOOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTIzLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdD0xMD16c21hbGxvY1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdC0yMy3opoHmsYLvvIjlnKjmnIDlnY/nmoTmg4XlhrXkuIvvvIzpobXpnaLmmK/kuI3lj6/ljovnvKnnmoTvvIzlm6DmraTku6VcJiMzNDvljp/moLdcJiMzNDvljbPmnKrljovnvKnnmoTlvaLlvI/lrZjlgqjvvInjgILlr7nkuo7lpKfkuo7ov5lcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdDoyNDrkuKrlpKflsI/nmoTliIbphY3or7fmsYLvvIzkvJrov5Tlm57lpLHotKXvvIjop4F6c19tYWxsb2PvvInjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdC0yNS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdDoyNjrmraTlpJbvvIx6c19tYWxsb2MoKeW5tuS4jei/lOWbnuS4gOS4quWPr+mHjeWkjeW8leeUqOeahOaMh+mSiOOAguebuOWPje+8jOWug+i/lOWbnuS4gOS4quS4jemAj+aYjueahOWPpeafhO+8iOaXoOespuWPt1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0venNtYWxsb2MucnN0LTI3LemVv++8ie+8jOWug+e8lueggeS6huiiq+WIhumFjeWvueixoeeahOWunumZheS9jee9ruOAgui/meenjemXtOaOpeaAp+eahOWOn+WboOaYr3pzbWFsbG9j5bm25LiN5L+d5oyBenNwYWdlc+eahOawuOS5hVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjk9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjM5LVx0ICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQwOlx0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIFBBR0VfU0laRSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDEtXHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNzA9c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMi1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMDM6XHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzA0LVx0XHRcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDIzPXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDUtXHQgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MDY6XHRoYW5kbGVfbmV3ID0genNfbWFsbG9jKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX25ldyxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDctXHRcdFx0ICAgICAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbi0tXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg9Mjg9dm9pZCB6c19kZXN0cm95X3Bvb2woc3RydWN0IHpzX3Bvb2wgKnBvb2wpO1xuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTI5LVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjMwOnVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzEtXHRcdFx0Y29uc3QgaW50IG5pZCk7XG4tLVxubW0venNtYWxsb2MuYz0xMjQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG9ial9tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4tLVxubW0venNtYWxsb2MuYy0xMjkwLS8qKlxubW0venNtYWxsb2MuYzoxMjkxOiAqIHpzX21hbGxvYyAtIEFsbG9jYXRlIGJsb2NrIG9mIGdpdmVuIHNpemUgZnJvbSBwb29sLlxubW0venNtYWxsb2MuYy0xMjkyLSAqIEBwb29sOiBwb29sIHRvIGFsbG9jYXRlIGZyb21cbi0tXG5tbS96c21hbGxvYy5jLTEzMDAtICovXG5tbS96c21hbGxvYy5jOjEzMDE6dW5zaWduZWQgbG9uZyB6c19tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsXG5tbS96c21hbGxvYy5jLTEzMDItXHRcdFx0Y29uc3QgaW50IG5pZClcbi0tXG5tbS96c21hbGxvYy5jLTEzNTUtfVxubW0venNtYWxsb2MuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7XG5tbS96c21hbGxvYy5jLTEzNTctXG4tLVxubW0venNtYWxsb2MuYz0yMDc0PXN0cnVjdCB6c19wb29sICp6c19jcmVhdGVfcG9vbChjb25zdCBjaGFyICpuYW1lKVxuLS1cbm1tL3pzbWFsbG9jLmMtMjExOS1cdFx0XHQgKiBUaGUgb2JqZWN0IHVzZXMgWlNfSEFORExFX1NJWkUgYnl0ZXMgdG8gc3RvcmUgdGhlXG5tbS96c21hbGxvYy5jOjIxMjA6XHRcdFx0ICogaGFuZGxlLiBXZSBuZWVkIHRvIHN1YnRyYWN0IGl0LCBiZWNhdXNlIHpzX21hbGxvYygpXG5tbS96c21hbGxvYy5jLTIxMjEtXHRcdFx0ICogdW5jb25kaXRpb25hbGx5IGFkZHMgaGFuZGxlIHNpemUgYmVmb3JlIGl0IHBlcmZvcm1zXG4tLVxubW0venN3YXAuYz04NDA9c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4tLVxubW0venN3YXAuYy04OTktXHRnZnAgPSBHRlBfTk9XQUlUIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFO1xubW0venN3YXAuYzo5MDA6XHRoYW5kbGUgPSB6c19tYWxsb2MocG9vbC1cdTAwM2V6c19wb29sLCBkbGVuLCBnZnAsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbm1tL3pzd2FwLmMtOTAxLVx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBac21hbGxvYyBQYXRjaCBmb3IgRW5oYW5jZWQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIGFkZHJlc3NpbmcgYW4gaXNzdWUgd2l0aGluIHRoZSBgenNtYWxsb2NgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBgenJhbV9kcnYuY2AgYW5kIGB6c3dhcC5jYC4gTXkgaW5pdGlhbCBhbmFseXNpcyBwb2ludHMgdG8gYSBmbGF3IGluIGhvdyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBjYWxjdWxhdGVzIHRoZSBjbGFzcyBpbmRleCB3aGVuIGFsbG9jYXRpbmcgbWVtb3J5LCBwYXJ0aWN1bGFybHkgaW4gdGhlIGB6cmFtYCBhbmQgYHpzd2FwYCBjb250ZXh0cy4gVGhlIGJ1ZyBpbnZvbHZlcyBhIG1pc3NpbmcgYFpTX0hBTkRMRV9TSVpFYCBhZGRpdGlvbiwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgaW5kZXhpbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYnVnIGZpeCwgYXMgaXQgZGlyZWN0bHkgaW1wYWN0cyBtZW1vcnkgYWxsb2NhdGlvbi4KCk15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCwgdGhlIGtleSBmdW5jdGlvbnMgaGVyZS4gVG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlIHBhdGNoJiMzOTtzIHNjb3BlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgWlNNQUxMT0NgLCBgWlJBTWAsIGFuZCBgWlNXQVBgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgZGVwZW5kZW5jaWVzLiBgWlNNQUxMT0NgIGRlcGVuZHMgb24gYE1NVWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgWlJBTWAgcmVsaWVzIG9uIGBCTE9DS2AsIGFuZCBgWlNXQVBgIGNsZWFybHkgbmVlZHMgYFNXQVBgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSnVzdCB0byBjb25maXJtLCBsZXQmIzM5O3MgcmUtdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXM6IGBaU1dBUGAgZGVwZW5kcyBvbiBgU1dBUGAsIGBaUkFNYCBkZXBlbmRzIG9uIGBCTE9DS2AsIGFuZCBgWlNNQUxMT0NgIGhhcyB0aGUgYE1NVWAgcmVxdWlyZW1lbnQuIFNlZW1zIEkmIzM5O20gcmlnaHQgYWJvdXQgYFpSQU1gJiMzOTtzIGRlcGVuZGVuY2llcyB0b28uIEFsbCB0aGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvcnJlY3QgY29udGV4dCBmb3IgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpSQU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjIzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDt6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzYtXHRib29sIFwmIzM0O2RlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDE6Y29uZmlnIFpSQU1fQkFDS0VORF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDs4NDIgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVx0ZGVwZW5kcyBvbiBaUkFNXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo1Mzpjb25maWcgWlJBTV9CQUNLRU5EX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXHRib29sIFwmIzM0O2x6byBhbmQgbHpvLXJsZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7IGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjA9Y2hvaWNlXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2NTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9STEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVx0Ym9vbCBcJiMzNDtsem8tcmxlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtsem9cJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzQtXHRib29sIFwmIzM0O2x6NFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Nzc6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtsejRoY1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4OTpjb25maWcgWlJBTV9ERUZfQ09NUF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz05Mz1lbmRjaG9pY2VcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk2LVx0c3RyaW5nXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVx0Ym9vbCBcJiMzNDtUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O1RyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTQwOmNvbmZpZyBaUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipaUkFNIERlcGVuZGVuY2llczogQSBRdWljayBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgWlJBTWAgbW9kdWxlJiMzOTtzIGFyY2hpdGVjdHVyZSBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGxhdGVzdCBjaGFuZ2VzLiBJIGhhZCBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IGl0IHdhc24mIzM5O3QgYXMgc2VsZi1jb250YWluZWQgYXMgSSBpbml0aWFsbHkgdGhvdWdodCwgYW5kIHN1cmUgZW5vdWdoLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGF0IGl0cyBrZXkgZGVwZW5kZW5jaWVzIGFyZS4gUmlnaHQsIHNvIGBaUkFNYCByZWxpZXMgb24gYEJMT0NLYCwgbmF0dXJhbGx5LCBhbmQgdGhlbiB3ZSBoYXZlIGBTWVNGU2AgZm9yIHRoZSBpbnRlcmZhY2UsIGFuZCBhbHNvIGBaU01BTExPQ2AgZm9yIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uLiBGaW5hbGx5LCBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IGludGVncmF0ZXMgd2l0aCBgQ1JZUFRPYCBmb3IgY29tcHJlc3Npb24gYW5kLCBwb3NzaWJseSwgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBjb21wcmVzc2VkIFJBTSBkaXNrLiBHaXZlbiB0aGlzIHNldHVwLCBhIHF1aWNrIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2Agd2lsbCBwcm9iYWJseSBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IGZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBjaGVjayBpdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0Y29uZmlnIFpSQU1cbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgTU1VXG4gICA1Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgQ3JlYXRlcyB2aXJ0dWFsIGJsb2NrIGRldmljZXMgY2FsbGVkIC9kZXYvenJhbVggKFggPSAwLCAxLCAuLi4pLlxuICAgODpcdFx0ICBQYWdlcyB3cml0dGVuIHRvIHRoZXNlIGRpc2tzIGFyZSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gbWVtb3J5XG4gICA5Olx0XHQgIGl0c2VsZi4gVGhlc2UgZGlza3MgYWxsb3cgdmVyeSBmYXN0IEkvTyBhbmQgY29tcHJlc3Npb24gcHJvdmlkZXNcbiAgMTA6XHRcdCAgZ29vZCBhbW91bnRzIG9mIG1lbW9yeSBzYXZpbmdzLlxuICAxMTpcdFxuICAxMjpcdFx0ICBJdCBoYXMgc2V2ZXJhbCB1c2UgY2FzZXMsIGZvciBleGFtcGxlOiAvdG1wIHN0b3JhZ2UsIHVzZSBhcyBzd2FwXG4gIDEzOlx0XHQgIGRpc2tzIGFuZCBtYXliZSBtYW55IG1vcmUuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XG4gIDE4Olx0XHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgMjA6XHRcdHNlbGVjdCBMWjRfQ09NUFJFU1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGZpcnN0LXBlcnNvbiBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBpdCBzZWVtcyB0aGUgYFpSQU1gIG1vZHVsZSBpcyBzZXQgdXAgdG8gdXRpbGl6ZSBgWlNNQUxMT0NgIGZvciBpdHMgdW5kZXJseWluZyBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgWlNXQVBgIGRlcGVuZHMgb24gYFpQT09MYCwgd2hpY2gsIGluIHR1cm4sICphbHNvKiB1dGlsaXplcyBgWlNNQUxMT0NgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgc2hvdWxkIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24gYW5kIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZ2V0IHRoZSBzb3VyY2UgY29kZSBvdXQgYW5kIGRpZyBpbnRvIGBtbS9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEl04oCZcyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4gIDMyOlx0XHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcbiAgMzM6XHRcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbiAgMzY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAzNgoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAyNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFpTV0FQL1pTTUFMTE9DIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCB0aGUgc3lzdGVtIGlzIGNob29zaW5nIGBaU01BTExPQ2Agd2hlbiBgWlNXQVBgIGlzIHNlbGVjdGVkLCB3aGljaCBtYWtlcyBzZW5zZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIFRvIGVuYWJsZSB0aGlzIGFyZWEgZm9yIHRlc3RpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpTTUFMTE9DYCwgYFpSQU1gLCBhbmQgYFpTV0FQYCBhcmUgYWxsIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgbXkgaW52ZXN0aWdhdGlvbiBhcmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLgoKQWhhISBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBvbmx5IHVzZWQgd2l0aGluIGB6cmFtX2Rydi5jYCwgd2hpY2ggZ2l2ZXMgbWUgYSBzbWFsbGVyLCBtb3JlIGZvY3VzZWQgYXJlYSB0byBleHBsb3JlIGluaXRpYWxseS4gV2hlcmVhcyBgenNfbWFsbG9jYCBpcyB1c2VkIGJ5IGJvdGggYHpyYW1fZHJ2LmNgIGFuZCBgenN3YXAuY2AuCgpJdCBsb29rcyBsaWtlIHRoZSBwcm92aWRlZCBwYXRjaCBhZGRyZXNzZXMgYW4gZXJyb3IgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgdGhhdCB3YXMgaW5jb3JyZWN0bHkgY2FsY3VsYXRpbmcgdGhlIGNsYXNzIGluZGV4LiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhIGNsYXNzIGluZGV4IGVycm9yLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcgdG8gZXhwbG9yZSB0aGUgc3lzdGVtIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHNpbmNlIGl0IGRlYWxzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQuCgpUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyB0byBgdHJ1ZWAuIE15IGBFbmFibGVDb25maWdzYCB3aWxsIGluY2x1ZGUgYFpTTUFMTE9DYCwgYFpSQU1gLCBhbmQgYFpTV0FQYCwgYW5kIG15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gRXhjZWxsZW50LCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTCh6c19sb29rdXBfY2xhc3NfaW5kZXgpO2AgYW5kIGB6c19tYWxsb2NgIGlzIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7YC4gTm93IHRoYXQgSSYjMzk7dmUgY29uZmlybWVkIGFsbCBvZiB0aGF0LCBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBteSBuZXh0IHN0ZXBzLgoKSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19sb29rdXBfY2xhc3NfaW5kZXgmIzM0OywKICAgICYjMzQ7enNfbWFsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdoZXJlIGl0IHdhcyByZXR1cm5pbmcgdGhlIHdyb25nIGNsYXNzIGluZGV4IGJlY2F1c2UgaXQgZGlkbiYjMzk7dCBhZGQgYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSwgdW5saWtlIGB6c19tYWxsb2NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgenNtYWxsb2MgYWxsb2NhdG9yIGxvZ2ljLCB3aGljaCBpcyB1c2VkIGJ5IHpyYW0gYW5kIHpzd2FwLiBGdXp6aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU01BTExPQyYjMzQ7LAogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enNfbG9va3VwX2NsYXNzX2luZGV4JiMzNDssCiAgICAmIzM0O3pzX21hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCB3YXMgcmV0dXJuaW5nIHRoZSB3cm9uZyBjbGFzcyBpbmRleCBiZWNhdXNlIGl0IGRpZG4mIzM5O3QgYWRkIGBaU19IQU5ETEVfU0laRWAgdG8gdGhlIHNpemUsIHVubGlrZSBgenNfbWFsbG9jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHpzbWFsbG9jIGFsbG9jYXRvciBsb2dpYywgd2hpY2ggaXMgdXNlZCBieSB6cmFtIGFuZCB6c3dhcC4gRnV6emluZyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCBmYWlsZWQgdG8gYWNjb3VudCBmb3IgYFpTX0hBTkRMRV9TSVpFYCB3aGVuIGxvb2tpbmcgdXAgdGhlIHNpemUgY2xhc3MgaW5kZXgsIGNhdXNpbmcgaXQgdG8gcmV0dXJuIGFuIGluY29ycmVjdCAoc21hbGxlcikgY2xhc3MgaW5kZXguIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHVzZWQgYnkgenJhbSB0byBkZXRlcm1pbmUgaWYgcmVjb21wcmVzc2luZyBhbiBvYmplY3QgaXMgYmVuZWZpY2lhbCBieSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNsYXNzIGluZGljZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVjb21wcmVzc2lvbiBkZWNpc2lvbnMsIGJ1dCBpdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgaXNzdWVzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ0N2NlNDZiYzEyNTA3MmJkYTA2OGJlNjA0Y2EzYTY0MDg0ZmFhNDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyA5IDEyOjIwOjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmMKaW5kZXggODNmNTgyMGM0NWY5My4uNDFiMDNhOWVjZWMyNSAxMDA2NDQKLS0tIGEvbW0venNtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c21hbGxvYy5jCkBAIC00NzgsNiAmIzQzOzQ3OCwxMSBAQCBzdGF0aWMgaW50IGdldF9zaXplX2NsYXNzX2luZGV4KGludCBzaXplKQogCXJldHVybiBtaW5fdChpbnQsIFpTX1NJWkVfQ0xBU1NFUyAtIDEsIGlkeCk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHNpemVfY2xhc3MgKmxvb2t1cF9zaXplX2NsYXNzKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUgJiM0MzsgWlNfSEFORExFX1NJWkUpXTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgY2xhc3Nfc3RhdF9hZGQoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBpbnQgdHlwZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgY250KQogewpAQCAtMTAyMSw3ICYjNDM7MTAyNiw3IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCBzaXplX2NsYXNzICpjbGFzczsKIAotCWNsYXNzID0gcG9vbC0mZ3Q7c2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07CiYjNDM7CWNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7CiAKIAlyZXR1cm4gY2xhc3MtJmd0O2luZGV4OwogfQpAQCAtMTMxMSw5ICYjNDM7MTMxNiw3IEBAIHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLAogCWlmICghaGFuZGxlKQogCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PTUVNKTsKIAotCS8qIGV4dHJhIHNwYWNlIGluIGNodW5rIHRvIGtlZXAgdGhlIGhhbmRsZSAqLwotCXNpemUgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFOwotCWNsYXNzID0gcG9vbC0mZ3Q7c2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07CiYjNDM7CWNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7CiAKIAkvKiBjbGFzcy0mZ3Q7bG9jayBlZmZlY3RpdmVseSBwcm90ZWN0cyB0aGUgenBhZ2UgbWlncmF0aW9uICovCiAJc3Bpbl9sb2NrKCZhbXA7Y2xhc3MtJmd0O2xvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpzbWFsbG9jIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBtbS96c21hbGxvYy5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHNwZWNpZmljIGlzc3VlIGluIGhvdyBzaXplIGNsYXNzZXMgYXJlIGxvb2tlZCB1cC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgaW50cm9kdWNpbmcgdGhlIGhlbHBlciBgbG9va3VwX3NpemVfY2xhc3NgIHRvIGhhbmRsZSB0aGUgYWRkaXRpb24gb2YgYFpTX0hBTkRMRV9TSVpFYCBiZWZvcmUgY2FsbGluZyBgZ2V0X3NpemVfY2xhc3NfaW5kZXgoKWAuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgZGlyZWN0IGFycmF5IGxvb2t1cHMgd2l0aCB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIGNyaXRpY2FsIGNoYW5nZXMgYXJlIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCwgd2hlcmUgdGhlIG9yaWdpbmFsIGRpcmVjdCBhcnJheSBhY2Nlc3NlcyBhcmUgYmVpbmcgcmVwbGFjZWQgYnkgY2FsbHMgdG8gdGhpcyBoZWxwZXIuCgpIYW5nIG9uLi4uIGxldCBtZSBmb2N1cyBpbiBvbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtgLiBOb3csIGl0JiMzOTtzIHVzaW5nIGBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKWAsIHdoaWNoIGV4cGxpY2l0bHkgYWRkcyBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplICpiZWZvcmUqIGNhbGN1bGF0aW5nIHRoZSBpbmRleC4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgLSB0aGlzIHNlZW1zIHRvIGJlIGNvcnJlY3RpbmcgYSBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgd2FzbiYjMzk7dCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciBgWlNfSEFORExFX1NJWkVgIGR1cmluZyB0aGUgaW5kZXggbG9va3VwLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgb24gbWVtb3J5IG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgcG9zc2libGUgY29uc2VxdWVuY2VzIGFuZCB3aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLiBUaGlzIGxpa2VseSBmaXhlcyBhIGJ1ZzogZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yLCBtb3JlIHN1YnRseSwgdGhlIHVzZSBvZiBhbiBpbmNvcnJlY3Qgc2l6ZSBjbGFzcyBpbmRleC4gVGhpcyB3b3VsZCBiZSBhIGJpZyBkZWFsIC0gbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzLiBBIHNtYWxsZXIgY2xhc3MgaW5kZXggdGhhbiBleHBlY3RlZCBpcyBhIG1lbW9yeSBpc3N1ZSwgYmVjYXVzZSBpdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyBhIHNtYWxsZXIgY2xhc3MgYW5kIHRodXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpJIHdvbmRlciBhYm91dCB0aGUgc3BlY2lmaWNzIG9mIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0IG1lIGNvbnNpZGVyIHRoZSBzY2VuYXJpby4gSWYgaXQgZG9lcyByZXR1cm4gYSBzbWFsbGVyIHNpemUgY2xhc3MsIHRoZSBjbGFzcyBpbmRleCByZXR1cm5lZCBjb3VsZCBiZSB3cm9uZy4gSWYgdGhpcyBpbmRleCBpcyB1c2VkLCBkb2VzIHRoaXMgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkPyBObywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IGEgd3Jvbmcgc2l6ZSBjbGFzcyAtIGl0JiMzOTtzIHN0aWxsIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0IG9mIGJvdW5kcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgS0FTQU4gY2FuZGlkYXRlLCB0aGF0JiMzOTtzIGZvciBzdXJlLgoKSSBuZWVkIHRvIGFuYWx5emUgd2hlcmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgaXMgYmVpbmcgdXNlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzX2xvb2t1cF9jbGFzc19pbmRleCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venNtYWxsb2MuYz0xMDA5PXN0YXRpYyBib29sIHpzcGFnZV9lbXB0eShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy0xMDE0LS8qKlxubW0venNtYWxsb2MuYzoxMDE1OiAqIHpzX2xvb2t1cF9jbGFzc19pbmRleCgpIC0gUmV0dXJucyBpbmRleCBvZiB0aGUgenNtYWxsb2MgXHUwMDI2c2l6ZV9jbGFzc1xubW0venNtYWxsb2MuYy0xMDE2LSAqIHRoYXQgaG9sZCBvYmplY3RzIG9mIHRoZSBwcm92aWRlZCBzaXplLlxuLS1cbm1tL3pzbWFsbG9jLmMtMTAyNC0gKi9cbm1tL3pzbWFsbG9jLmM6MTAyNTp1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbm1tL3pzbWFsbG9jLmMtMTAyNi17XG4tLVxubW0venNtYWxsb2MuYy0xMDMyLX1cbm1tL3pzbWFsbG9jLmM6MTAzMzpFWFBPUlRfU1lNQk9MX0dQTCh6c19sb29rdXBfY2xhc3NfaW5kZXgpO1xubW0venNtYWxsb2MuYy0xMDM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgVXNhZ2UqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCAqc3BlY2lmaWNhbGx5KiBvdXRzaWRlIG9mIGBtbS96c21hbGxvYy5jYC4gV2UgYWxyZWFkeSBrbm93IGl0JiMzOTtzICp3aXRoaW4qIHRoZSB6c21hbGxvYyBpbXBsZW1lbnRhdGlvbiwgc28gdHJhY2tpbmcgZG93biB0aG9zZSBpbnRlcm5hbCB1c2VzIGlzbiYjMzk7dCB0aGUgcHJpb3JpdHkgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSAqZXh0ZXJuYWwqIGRlcGVuZGVuY2llcywgb3IgaWYgaXQmIzM5O3MgbW9yZSBzZWxmLWNvbnRhaW5lZC4gTG9jYXRpbmcgdGhlIGV4dGVybmFsIGNhbGxzIGlzIHdoZXJlIEkgc2hvdWxkIHN0YXJ0LiBJIHdpbGwgbmVlZCB0byB1c2UgYSB0b29sIHRvIGxvY2F0ZSBjcm9zcyBmaWxlIHJlZmVyZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzX2xvb2t1cF9jbGFzc19pbmRleCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDIzPXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDc3Olx0Y2xhc3NfaW5kZXhfb2xkID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX29sZCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDc4Olx0Y2xhc3NfaW5kZXhfbmV3ID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX25ldyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDc5LVxuLS1cbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaD0zNz11bnNpZ25lZCBsb25nIHpzX2NvbXBhY3Qoc3RydWN0IHpzX3Bvb2wgKnBvb2wpO1xuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTM4LVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjM5OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTtcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaC00MC1cbi0tXG5tbS96c21hbGxvYy5jPTEwMDk9c3RhdGljIGJvb2wgenNwYWdlX2VtcHR5KHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTEwMTQtLyoqXG5tbS96c21hbGxvYy5jOjEwMTU6ICogenNfbG9va3VwX2NsYXNzX2luZGV4KCkgLSBSZXR1cm5zIGluZGV4IG9mIHRoZSB6c21hbGxvYyBcdTAwMjZzaXplX2NsYXNzXG5tbS96c21hbGxvYy5jLTEwMTYtICogdGhhdCBob2xkIG9iamVjdHMgb2YgdGhlIHByb3ZpZGVkIHNpemUuXG4tLVxubW0venNtYWxsb2MuYy0xMDI0LSAqL1xubW0venNtYWxsb2MuYzoxMDI1OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKVxubW0venNtYWxsb2MuYy0xMDI2LXtcbi0tXG5tbS96c21hbGxvYy5jLTEwMzItfVxubW0venNtYWxsb2MuYzoxMDMzOkVYUE9SVF9TWU1CT0xfR1BMKHpzX2xvb2t1cF9jbGFzc19pbmRleCk7XG5tbS96c21hbGxvYy5jLTEwMzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgWlJBTSBSZWNvbXByZXNzaW9uIExvZ2ljIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQgaW4gYHpyYW1fZHJ2LmNgIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBiZWluZyB1c2VkIHRvIGRldGVybWluZSBpZiBhIHJlY29tcHJlc3Npb24gaXMgd29ydGh3aGlsZS4gVGhlIGNvZGUgY29tcGFyZXMgYGNsYXNzX2luZGV4X29sZGAgYW5kIGBjbGFzc19pbmRleF9uZXdgIHRvIGRlY2lkZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IG1heWJlIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLiBJIHdvbmRlcmVkIGlmIHRoZSBmdW5jdGlvbiB3YXNuJiMzOTt0IGhhbmRsaW5nIGBaU19IQU5ETEVfU0laRWAgY29ycmVjdGx5LCBhbmQgbWF5YmUgcmV0dXJuaW5nIGFuIG9mZi1ieS1vbmUgY2xhc3MgaW5kZXguIElmIHRoYXQgd2VyZSB0aGUgY2FzZSwgaXQgY291bGQgbGVhZCB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoLCBvZiBjb3Vyc2UsIHdvdWxkIGJlIGEgbXVjaCBiaWdnZXIgcHJvYmxlbS4KCkJ1dCB3YWl0LCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyAqanVzdCogcmV0dXJuaW5nIGFuIGluZGV4LiBJdCYjMzk7cyBub3QgaW52b2x2ZWQgd2l0aCBhbnkgbWVtb3J5IGFsbG9jYXRpb24gb3IgYWNjZXNzIGRpcmVjdGx5LiBTbywgSSBkb24mIzM5O3QgdGhpbmsgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIGlzc3VlIGhlcmUuCgpBaCwgSSBzZWUgaXQgbm93LiBUaGUgZml4IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIEl0IHdhc24mIzM5O3QgYWNjb3VudGluZyBmb3IgYFpTX0hBTkRMRV9TSVpFYCwgd2hpY2ggaXMgYWRkZWQgZHVyaW5nIHRoZSBgenNfbWFsbG9jYCBvcGVyYXRpb24uIFNvLCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3YXMgdXNpbmcgdGhlICpyZXF1ZXN0ZWQqIHNpemUsIGJ1dCBgenNfbWFsbG9jYCB3YXMgYWN0dWFsbHkgYWxsb2NhdGluZyB3aXRoIHRoZSAqcmVxdWVzdGVkKiBzaXplICpwbHVzKiBgWlNfSEFORExFX1NJWkVgLgoKVGhhdCBtYWtlcyBzZW5zZS4gVGhpcyBtZWFucyBgenJhbWAgY291bGQgaW5jb3JyZWN0bHkgYmVsaWV2ZSB0aGF0IGFuIG9iamVjdCB3aWxsIGZpdCBpbiBhIHNtYWxsZXIgbWVtb3J5IGNsYXNzIHRoYW4gaXQgYWN0dWFsbHkgZG9lcy4gVGhpcyBsZWFkcyB0byB0aGUgcG9zc2liaWxpdHkgb2YgbWFraW5nIHN1Ym9wdGltYWwgcmVjb21wcmVzc2lvbiBjaG9pY2VzLiBUaGUgc3lzdGVtIG1pZ2h0IHRoaW5rIGl0IGlzIHNhdmluZyBzcGFjZSwgd2hlbiBpbiBmYWN0IGl0IGlzIG5vdC4gVGhpcyBtZWFucyB0aGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgYnVnLiBJdCB3b3VsZG4mIzM5O3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBidXQgb25seSBhZmZlY3RzIHRoZSBjb21wYXJpc29uIG9mIGBjbGFzc19pbmRleF9vbGRgIGFuZCBgY2xhc3NfaW5kZXhfbmV3YCBkdXJpbmcgcmVjb21wcmVzc2lvbiBpbiB6cmFtLiBUaGlzIHdvdWxkIHByb2JhYmx5IG5vdCBldmVuIHRyaWdnZXIgS0FTQU4sIHVubGVzcyBpdCByZXN1bHRzIGluIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGRvd24gdGhlIGxpbmUuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGByZWNvbXByZXNzX3Nsb3RgIGZ1bmN0aW9uIGluIGB6cmFtX2Rydi5jYCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbGFzc19pbmRleF9vbGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDIzPXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MzAtXHR1bnNpZ25lZCBpbnQgY29tcF9sZW5fbmV3O1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQzMTpcdHVuc2lnbmVkIGludCBjbGFzc19pbmRleF9vbGQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDMyLVx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X25ldztcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDc2LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3NzpcdGNsYXNzX2luZGV4X29sZCA9IHpzX2xvb2t1cF9jbGFzc19pbmRleCh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9vbGQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3OC1cdGNsYXNzX2luZGV4X25ldyA9IHpzX2xvb2t1cF9jbGFzc19pbmRleCh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9uZXcpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3OS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0ODA6XHRpZiAoY2xhc3NfaW5kZXhfbmV3IFx1MDAzZT0gY2xhc3NfaW5kZXhfb2xkIHx8XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDgxLVx0ICAgICh0aHJlc2hvbGQgXHUwMDI2XHUwMDI2IGNvbXBfbGVuX25ldyBcdTAwM2U9IHRocmVzaG9sZCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ4NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZyBpbiBacmFtIENvbXByZXNzaW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIHBpbm5lZCB0aGlzIGRvd24uIFRoZSBwcm9ibGVtYXRpYyBhcmVhIGlzIHNvbGVseSB3aXRoaW4gdGhlIGBpZiAoY2xhc3NfaW5kZXhfbmV3ICZndDs9IGNsYXNzX2luZGV4X29sZClgIGNvbmRpdGlvbi4gVGhlIHBvdGVudGlhbCBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIHpyYW0gY29tcHJlc3Npb24gYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHksIGlzIG1ha2luZyBmbGF3ZWQgZGVjaXNpb25zIGFib3V0IHdoZW4gdG8gcmV0YWluIGEgcmVjb21wcmVzc2VkIG9iamVjdC4gSXTigJlzIGEgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiBUaGF0JiMzOTtzIGEgcmVsaWVmOyBLTVNBTiBpc24mIzM5O3QgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5IGZvciBkZWJ1Z2dpbmcgdGhpcy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBiZWNhdXNlIEkmIzM5O20gb24gdGhlIHNjZW50IGhlcmUsIGFuZCBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlICpubyogb3RoZXIgdXNlcyBvZiBgbG9va3VwX3NpemVfY2xhc3NgIHdpdGhpbiB0aGlzIHBhdGNoIHRoYXQgY291bGQgY29udHJpYnV0ZSB0byB0aGUgaXNzdWUuCgpSaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVzIGB6c19tYWxsb2NgIHRvIHJlcGxhY2Ugc29tZSBvbGQgY29kZS4gSXQmIzM5O3MgdXNpbmcgYGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpYCBub3csIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNvZGUsIHdoaWNoIHdhcyBsaWtlIGBzaXplICYjNDM7PSBaU19IQU5ETEVfU0laRTsgY2xhc3MgPSBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtgLiBOb3csIHdhaXQgYSBtaW51dGUsIHRoZSBvcmlnaW5hbCBjb2RlIGFkZGVkIGBaU19IQU5ETEVfU0laRWAgdG8gdGhlIGBzaXplYCB2YXJpYWJsZS4gQnV0IGl0JiMzOTtzIHBhc3NlZCBieSB2YWx1ZSEgRG9lcyB0aGF0IGBzaXplYCB2YXJpYWJsZSBnZXQgdXNlZCBsYXRlciBpbiB0aGUgYHpzX21hbGxvY2AgZnVuY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzX21hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venNtYWxsb2MuYz0xMjQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG9ial9tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4tLVxubW0venNtYWxsb2MuYy0xMjkwLS8qKlxubW0venNtYWxsb2MuYzoxMjkxOiAqIHpzX21hbGxvYyAtIEFsbG9jYXRlIGJsb2NrIG9mIGdpdmVuIHNpemUgZnJvbSBwb29sLlxubW0venNtYWxsb2MuYy0xMjkyLSAqIEBwb29sOiBwb29sIHRvIGFsbG9jYXRlIGZyb21cbi0tXG5tbS96c21hbGxvYy5jLTEzMDAtICovXG5tbS96c21hbGxvYy5jOjEzMDE6dW5zaWduZWQgbG9uZyB6c19tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsXG5tbS96c21hbGxvYy5jLTEzMDItXHRcdFx0Y29uc3QgaW50IG5pZClcbi0tXG5tbS96c21hbGxvYy5jLTEzNTUtfVxubW0venNtYWxsb2MuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7XG5tbS96c21hbGxvYy5jLTEzNTctXG4tLVxubW0venNtYWxsb2MuYz0yMDc0PXN0cnVjdCB6c19wb29sICp6c19jcmVhdGVfcG9vbChjb25zdCBjaGFyICpuYW1lKVxuLS1cbm1tL3pzbWFsbG9jLmMtMjExOS1cdFx0XHQgKiBUaGUgb2JqZWN0IHVzZXMgWlNfSEFORExFX1NJWkUgYnl0ZXMgdG8gc3RvcmUgdGhlXG5tbS96c21hbGxvYy5jOjIxMjA6XHRcdFx0ICogaGFuZGxlLiBXZSBuZWVkIHRvIHN1YnRyYWN0IGl0LCBiZWNhdXNlIHpzX21hbGxvYygpXG5tbS96c21hbGxvYy5jLTIxMjEtXHRcdFx0ICogdW5jb25kaXRpb25hbGx5IGFkZHMgaGFuZGxlIHNpemUgYmVmb3JlIGl0IHBlcmZvcm1zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHpzX21hbGxvY2AmIzM5O3MgTWVtb3J5IEFsbG9jYXRpb24gTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHpzX21hbGxvY2AgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZSBgc2l6ZWAgdmFyaWFibGUgaXMgaGFuZGxlZCAqYWZ0ZXIqIHRoYXQgY3JpdGljYWwgYHNpemUgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFO2AgbGluZS4gSXQmIzM5O3MgYSB0ZXh0Ym9vayBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBlZmZpY2llbmN5IGJvdHRsZW5lY2ssIHJpZ2h0PyBJIHdhbnQgdG8gY29uZmlybSBpZiBgc2l6ZWAgaXMgc3Vic2VxdWVudGx5IHVzZWQgY29ycmVjdGx5IHRvIGRldGVybWluZSB0aGUgYWN0dWFsIGFsbG9jYXRpb24gc2l6ZSBhbmQgdXNhZ2UsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycyBvciBtZW1vcnkgbWlzbWFuYWdlbWVudC4gV2UgbmVlZCB0byBiZSBlc3BlY2lhbGx5IGFsZXJ0IGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBpbmFkdmVydGVudGx5IHVzZSB0aGUgb3JpZ2luYWwgKHByZS1pbmNyZW1lbnQpIGBzaXplYCBpbiBjcml0aWNhbCBjYWxjdWxhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHRyYWNlIHdoZXJlIGBzaXplYCBpcyB1c2VkLCBsb29raW5nIGZvciBob3cgdGhlIGluY3JlbWVudGVkIHZhbHVlIGltcGFjdHMgdGhlIGFsbG9jYXRpb24sIGJvdW5kcyBjaGVja2luZywgYW5kIGFueSBwb3RlbnRpYWwgaGFuZGxlIG1hbmFnZW1lbnQgcm91dGluZXMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMDA6XHQgKi9cbjEzMDE6XHR1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCxcbjEzMDI6XHRcdFx0XHRjb25zdCBpbnQgbmlkKVxuMTMwMzpcdHtcbjEzMDQ6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuMTMwNTpcdFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xuMTMwNjpcdFx0aW50IG5ld2ZnO1xuMTMwNzpcdFx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xuMTMwODpcdFxuMTMwOTpcdFx0aWYgKHVubGlrZWx5KCFzaXplKSlcbjEzMTA6XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVJTlZBTCk7XG4xMzExOlx0XG4xMzEyOlx0XHRpZiAodW5saWtlbHkoc2l6ZSBcdTAwM2UgWlNfTUFYX0FMTE9DX1NJWkUpKVxuMTMxMzpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PU1BDKTtcbjEzMTQ6XHRcbjEzMTU6XHRcdGhhbmRsZSA9IGNhY2hlX2FsbG9jX2hhbmRsZShnZnApO1xuMTMxNjpcdFx0aWYgKCFoYW5kbGUpXG4xMzE3Olx0XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylFUlJfUFRSKC1FTk9NRU0pO1xuMTMxODpcdFxuMTMxOTpcdFx0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcbjEzMjA6XHRcbjEzMjE6XHRcdC8qIGNsYXNzLVx1MDAzZWxvY2sgZWZmZWN0aXZlbHkgcHJvdGVjdHMgdGhlIHpwYWdlIG1pZ3JhdGlvbiAqL1xuMTMyMjpcdFx0c3Bpbl9sb2NrKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuMTMyMzpcdFx0enNwYWdlID0gZmluZF9nZXRfenNwYWdlKGNsYXNzKTtcbjEzMjQ6XHRcdGlmIChsaWtlbHkoenNwYWdlKSkge1xuMTMyNTpcdFx0XHRvYmpfbWFsbG9jKHBvb2wsIHpzcGFnZSwgaGFuZGxlKTtcbjEzMjY6XHRcdFx0LyogTm93IG1vdmUgdGhlIHpzcGFnZSB0byBhbm90aGVyIGZ1bGxuZXNzIGdyb3VwLCBpZiByZXF1aXJlZCAqL1xuMTMyNzpcdFx0XHRmaXhfZnVsbG5lc3NfZ3JvdXAoY2xhc3MsIHpzcGFnZSk7XG4xMzI4Olx0XHRcdGNsYXNzX3N0YXRfYWRkKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcbjEzMjk6XHRcbjEzMzA6XHRcdFx0Z290byBvdXQ7XG4xMzMxOlx0XHR9XG4xMzMyOlx0XG4xMzMzOlx0XHRzcGluX3VubG9jayhcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbjEzMzQ6XHRcbjEzMzU6XHRcdHpzcGFnZSA9IGFsbG9jX3pzcGFnZShwb29sLCBjbGFzcywgZ2ZwLCBuaWQpO1xuMTMzNjpcdFx0aWYgKCF6c3BhZ2UpIHtcbjEzMzc6XHRcdFx0Y2FjaGVfZnJlZV9oYW5kbGUoaGFuZGxlKTtcbjEzMzg6XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVOT01FTSk7XG4xMzM5Olx0XHR9XG4xMzQwOlx0XG4xMzQxOlx0XHRzcGluX2xvY2soXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4xMzQyOlx0XHRvYmpfbWFsbG9jKHBvb2wsIHpzcGFnZSwgaGFuZGxlKTtcbjEzNDM6XHRcdG5ld2ZnID0gZ2V0X2Z1bGxuZXNzX2dyb3VwKGNsYXNzLCB6c3BhZ2UpO1xuMTM0NDpcdFx0aW5zZXJ0X3pzcGFnZShjbGFzcywgenNwYWdlLCBuZXdmZyk7XG4xMzQ1Olx0XHRhdG9taWNfbG9uZ19hZGQoY2xhc3MtXHUwMDNlcGFnZXNfcGVyX3pzcGFnZSwgXHUwMDI2cG9vbC1cdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xuMTM0NjpcdFx0Y2xhc3Nfc3RhdF9hZGQoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELCBjbGFzcy1cdTAwM2VvYmpzX3Blcl96c3BhZ2UpO1xuMTM0NzpcdFx0Y2xhc3Nfc3RhdF9hZGQoY2xhc3MsIFpTX09CSlNfSU5VU0UsIDEpO1xuMTM0ODpcdFxuMTM0OTpcdFx0LyogV2UgY29tcGxldGVseSBzZXQgdXAgenNwYWdlIHNvIG1hcmsgdGhlbSBhcyBtb3ZhYmxlICovXG4xMzUwOlx0XHRTZXRac1BhZ2VNb3ZhYmxlKHBvb2wsIHpzcGFnZSk7XG4xMzUxOlx0b3V0OlxuMTM1MjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4xMzUzOlx0XG4xMzU0Olx0XHRyZXR1cm4gaGFuZGxlO1xuMTM1NTpcdH1cbjEzNTY6XHRFWFBPUlRfU1lNQk9MX0dQTCh6c19tYWxsb2MpO1xuMTM1NzpcdFxuMTM1ODpcdHN0YXRpYyB2b2lkIG9ial9mcmVlKGludCBjbGFzc19zaXplLCB1bnNpZ25lZCBsb25nIG9iailcbjEzNTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDMKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBaUkFNIFBhdGNoKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGluIGB6c19tYWxsb2NgIGl0c2VsZiwgYnV0IGluIHRoZSBmdW5jdGlvbiBpdCYjMzk7cyBjYWxsaW5nOiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gSSBzZWUgdGhhdCB0aGUgYHNpemVgIHZhcmlhYmxlLCBvYnRhaW5lZCBhZnRlciBjYWxsaW5nIGBsb29rdXBfc2l6ZV9jbGFzc2AsIGlzbiYjMzk7dCBldmVuIHVzZWQgbGF0ZXIgaW4gYHpzX21hbGxvY2AuIFNvLCB0aGUgcmVmYWN0b3JpbmcgaXMgZXNzZW50aWFsbHkgYSBzaWRlLWVmZmVjdCwgdGhlIHJlYWwgYWN0aW9uIGlzIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLgoKVGhlIGtleSBjb3JyZWN0aW9uIGhlcmUgbGllcyB3aXRoaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIEl0JiMzOTtzIG5vdyBjb3JyZWN0bHkgZmFjdG9yaW5nIGluIGBaU19IQU5ETEVfU0laRWAuIFRoaXMgd2FzIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLiBJdCBzZWVtcyB0aGUgZnVuY3Rpb24gd2FzIHJldHVybmluZyBhbiBpbmNvcnJlY3Qgc2l6ZSBjbGFzcyBpbmRleC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gWlJBTSBiZWNhdXNlIHRoZSBzaXplIGNsYXNzIGluZGV4aW5nIGlzIHdoYXQgZGV0ZXJtaW5lcyBpZiB0aGUgb2JqZWN0IHNob3VsZCBiZSByZWNvbXByZXNzZWQgb3Igbm90LiBBIHNtYWxsZXIgaW5kZXggcmV0dXJuZWQgbWVhbnQgdGhlIG9iamVjdCBtaWdodCBub3QgYmUgcmVjb21wcmVzc2VkIGFwcHJvcHJpYXRlbHkuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBLTVNBTiBhc3BlY3QuIFRoZSBpc3N1ZSBhdCBoYW5kIGlzbiYjMzk7dCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYW55IGluZm8tbGVha3MsIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBsb2dpY2FsIGVycm9yLCBhIG1pc2NhbGN1bGF0aW9uIGluIHRoZSBzaXplIGNsYXNzIGluZGV4LiBXaGlsZSBpbmNvcnJlY3QsIGl0JiMzOTtzIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUgcGVyIHNlLiBTdGFuZGFyZCBLQVNBTiwgd2l0aCBpdHMgYWJpbGl0eSB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGlzIHN1ZmZpY2llbnQgdG8gZGVhbCB3aXRoIGFueSBwb3NzaWJsZSBwcm9ibGVtcywgaWYgdGhleSB3ZXJlIHRvIG9jY3VyLiBTbywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaW4gdGhpcyBjYXNlLiBNeSB0YWtlIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBjb3JyZWN0cyBhIGxvZ2ljIGVycm9yIGluIGRldGVybWluaW5nIHRoZSBzaXplIGNsYXNzIGluZGV4LCBhbmQgd2hpbGUgaXQgY291bGQgbGVhZCB0byBzdWJvcHRpbWFsIHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBpdCBkb2VzbiYjMzk7dCBvcGVuIHRoZSBkb29yIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHNpbWlsYXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCBmYWlsZWQgdG8gYWNjb3VudCBmb3IgYFpTX0hBTkRMRV9TSVpFYCB3aGVuIGxvb2tpbmcgdXAgdGhlIHNpemUgY2xhc3MgaW5kZXgsIGNhdXNpbmcgaXQgdG8gcmV0dXJuIGFuIGluY29ycmVjdCAoc21hbGxlcikgY2xhc3MgaW5kZXguIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHVzZWQgYnkgenJhbSB0byBkZXRlcm1pbmUgaWYgcmVjb21wcmVzc2luZyBhbiBvYmplY3QgaXMgYmVuZWZpY2lhbCBieSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNsYXNzIGluZGljZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVjb21wcmVzc2lvbiBkZWNpc2lvbnMsIGJ1dCBpdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgaXNzdWVzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCBmYWlsZWQgdG8gYWNjb3VudCBmb3IgYFpTX0hBTkRMRV9TSVpFYCB3aGVuIGxvb2tpbmcgdXAgdGhlIHNpemUgY2xhc3MgaW5kZXgsIGNhdXNpbmcgaXQgdG8gcmV0dXJuIGFuIGluY29ycmVjdCAoc21hbGxlcikgY2xhc3MgaW5kZXguIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHVzZWQgYnkgenJhbSB0byBkZXRlcm1pbmUgaWYgcmVjb21wcmVzc2luZyBhbiBvYmplY3QgaXMgYmVuZWZpY2lhbCBieSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNsYXNzIGluZGljZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVjb21wcmVzc2lvbiBkZWNpc2lvbnMsIGJ1dCBpdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgaXNzdWVzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjIwOjE4LjU3NzQ2Mjc4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODQ1NjI4MjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU01BTExPQ1wiLFxuICAgIFwiWlJBTVwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c19sb29rdXBfY2xhc3NfaW5kZXhcIixcbiAgICBcInpzX21hbGxvY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgZmFpbGVkIHRvIGFjY291bnQgZm9yIGBaU19IQU5ETEVfU0laRWAgd2hlbiBsb29raW5nIHVwIHRoZSBzaXplIGNsYXNzIGluZGV4LCBjYXVzaW5nIGl0IHRvIHJldHVybiBhbiBpbmNvcnJlY3QgKHNtYWxsZXIpIGNsYXNzIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseSB1c2VkIGJ5IHpyYW0gdG8gZGV0ZXJtaW5lIGlmIHJlY29tcHJlc3NpbmcgYW4gb2JqZWN0IGlzIGJlbmVmaWNpYWwgYnkgY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjbGFzcyBpbmRpY2VzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBidXQgaXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIGlzc3VlcyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdoZXJlIGl0IHdhcyByZXR1cm5pbmcgdGhlIHdyb25nIGNsYXNzIGluZGV4IGJlY2F1c2UgaXQgZGlkbid0IGFkZCBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplLCB1bmxpa2UgYHpzX21hbGxvY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB6c21hbGxvYyBhbGxvY2F0b3IgbG9naWMsIHdoaWNoIGlzIHVzZWQgYnkgenJhbSBhbmQgenN3YXAuIEZ1enppbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjA6MTguNTc3NDcyMjc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAyNzk2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNDdjZTQ2YmMxMjUwNzJiZGEwNjhiZTYwNGNhM2E2NDA4NGZhYTQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMTI6MjA6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmNcXG5pbmRleCA4M2Y1ODIwYzQ1ZjkzLi40MWIwM2E5ZWNlYzI1IDEwMDY0NFxcbi0tLSBhL21tL3pzbWFsbG9jLmNcXG4rKysgYi9tbS96c21hbGxvYy5jXFxuQEAgLTQ3OCw2ICs0NzgsMTEgQEAgc3RhdGljIGludCBnZXRfc2l6ZV9jbGFzc19pbmRleChpbnQgc2l6ZSlcXG4gXFx0cmV0dXJuIG1pbl90KGludCwgWlNfU0laRV9DTEFTU0VTIC0gMSwgaWR4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBzaXplX2NsYXNzICpsb29rdXBfc2l6ZV9jbGFzcyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIHBvb2wtXFx1MDAzZXNpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSArIFpTX0hBTkRMRV9TSVpFKV07XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGFzc19zdGF0X2FkZChzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsIGludCB0eXBlLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgY250KVxcbiB7XFxuQEAgLTEwMjEsNyArMTAyNiw3IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcXG4gXFxuLVxcdGNsYXNzID0gcG9vbC1cXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07XFxuK1xcdGNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7XFxuIFxcbiBcXHRyZXR1cm4gY2xhc3MtXFx1MDAzZWluZGV4O1xcbiB9XFxuQEAgLTEzMTEsOSArMTMxNiw3IEBAIHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxcbiBcXHRpZiAoIWhhbmRsZSlcXG4gXFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbi1cXHQvKiBleHRyYSBzcGFjZSBpbiBjaHVuayB0byBrZWVwIHRoZSBoYW5kbGUgKi9cXG4tXFx0c2l6ZSArPSBaU19IQU5ETEVfU0laRTtcXG4tXFx0Y2xhc3MgPSBwb29sLVxcdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcXG4rXFx0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcXG4gXFxuIFxcdC8qIGNsYXNzLVxcdTAwM2Vsb2NrIGVmZmVjdGl2ZWx5IHByb3RlY3RzIHRoZSB6cGFnZSBtaWdyYXRpb24gKi9cXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjIwOjE5LjAwODM3NzQxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5MjIyMTk3OTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU01BTExPQ1wiLFxuICAgIFwiWlJBTVwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c19sb29rdXBfY2xhc3NfaW5kZXhcIixcbiAgICBcInpzX21hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdoZXJlIGl0IHdhcyByZXR1cm5pbmcgdGhlIHdyb25nIGNsYXNzIGluZGV4IGJlY2F1c2UgaXQgZGlkbid0IGFkZCBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplLCB1bmxpa2UgYHpzX21hbGxvY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB6c21hbGxvYyBhbGxvY2F0b3IgbG9naWMsIHdoaWNoIGlzIHVzZWQgYnkgenJhbSBhbmQgenN3YXAuIEZ1enppbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDQ3Y2U0NmJjMTI1MDcyYmRhMDY4YmU2MDRjYTNhNjQwODRmYWE0N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMTI6MjA6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuY1xuaW5kZXggODNmNTgyMGM0NWY5My4uNDFiMDNhOWVjZWMyNSAxMDA2NDRcbi0tLSBhL21tL3pzbWFsbG9jLmNcbisrKyBiL21tL3pzbWFsbG9jLmNcbkBAIC00NzgsNiArNDc4LDExIEBAIHN0YXRpYyBpbnQgZ2V0X3NpemVfY2xhc3NfaW5kZXgoaW50IHNpemUpXG4gXHRyZXR1cm4gbWluX3QoaW50LCBaU19TSVpFX0NMQVNTRVMgLSAxLCBpZHgpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHNpemVfY2xhc3MgKmxvb2t1cF9zaXplX2NsYXNzKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRyZXR1cm4gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUgKyBaU19IQU5ETEVfU0laRSldO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xhc3Nfc3RhdF9hZGQoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBpbnQgdHlwZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBjbnQpXG4ge1xuQEAgLTEwMjEsNyArMTAyNiw3IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbiBcbi1cdGNsYXNzID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcbitcdGNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7XG4gXG4gXHRyZXR1cm4gY2xhc3MtXHUwMDNlaW5kZXg7XG4gfVxuQEAgLTEzMTEsOSArMTMxNiw3IEBAIHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxuIFx0aWYgKCFoYW5kbGUpXG4gXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0LyogZXh0cmEgc3BhY2UgaW4gY2h1bmsgdG8ga2VlcCB0aGUgaGFuZGxlICovXG4tXHRzaXplICs9IFpTX0hBTkRMRV9TSVpFO1xuLVx0Y2xhc3MgPSBwb29sLVx1MDAzZXNpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSldO1xuK1x0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcbiBcbiBcdC8qIGNsYXNzLVx1MDAzZWxvY2sgZWZmZWN0aXZlbHkgcHJvdGVjdHMgdGhlIHpwYWdlIG1pZ3JhdGlvbiAqL1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjA6MTkuMDA4Mzc4NTE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ5ODE4MzU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzbWFsbG9jIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3pzbWFsbG9jLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBhIG5ldyBmdW5jdGlvbiwgYGxvb2t1cF9zaXplX2NsYXNzYC4gVGhleSdyZSB1c2luZyBpdCBpbiBib3RoIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYC4gTGV0J3Mgc2VlLi4uIHRoZSBhbHRlcmF0aW9uIHRvIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g6XG5cbmBgYGNcbi1cdGNsYXNzID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcbitcdGNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7XG5gYGBcblxuQnV0IHdhaXQgYSBzZWNvbmQuLi4gYGxvb2t1cF9zaXplX2NsYXNzYCBpcyAqYWRkaW5nKiBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBpbnB1dCBgc2l6ZWAgKmJlZm9yZSogY2FsbGluZyBgZ2V0X3NpemVfY2xhc3NfaW5kZXhgLiBTbywgZWZmZWN0aXZlbHksIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGlzIG5vdyAqaW5jb3Jwb3JhdGluZyogYFpTX0hBTkRMRV9TSVpFYCBpbnRvIGl0cyBzaXplIGNhbGN1bGF0aW9uISBUaGF0J3MgYSBkZWZpbml0ZSBiZWhhdmlvciBzaGlmdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5Ob3csIGluIGB6c19tYWxsb2NgLCBpdCdzIGJlZW4gcmVmYWN0b3JlZCBpbiBhIHNpbWlsYXIgd2F5OlxuXG5gYGBjXG4tXHQvKiBleHRyYSBzcGFjZSBpbiBjaHVuayB0byBrZWVwIHRoZSBoYW5kbGUgKi9cbi1cdHNpemUgKz0gWlNfSEFORExFX1NJWkU7XG4tXHRjbGFzcyA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07XG4rXHRjbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpO1xuYGBgXG5cbkhlcmUsIGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZy4gSSdtIHRha2luZyB0aGUgcHJldmlvdXMgYWRkaXRpb24gb2YgYFpTX0hBTkRMRV9TSVpFYCBhbmQgbW92aW5nIGl0IGludG8gYGxvb2t1cF9zaXplX2NsYXNzYC4gVGhhdCdzIGNsZWFuZXIsIHN1cmUsIGJ1dCB0aGUgZWZmZWN0IG9mIHRoZSBjaGFuZ2UgaXMgbmV1dHJhbCwgd2hlcmVhcyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCwgaXQncyBpbnRyb2R1Y2luZyBhIHN1YnRsZSBjaGFuZ2UgaW4gdGhlIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgdGhpcyBpcyBhIGJpdCBkZWNlcHRpdmUsIGFzIGl0IGRvZXNuJ3QgaW1tZWRpYXRlbHkgcmV2ZWFsIHRoZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yLiBJdCdzIGEgcmVmYWN0b3JpbmcsIGJ1dCBpdCdzICpmdW5jdGlvbmFsbHkqIGNoYW5naW5nIGhvdyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBvcGVyYXRlcy4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBkZWVwZXIgaW50byBob3cgYFpTX0hBTkRMRV9TSVpFYCBpcyBhY3R1YWxseSAqdXNlZCogdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQsIGFuZCBpZiBzbywgaXQgbmVlZHMgdmVyeSBjYXJlZnVsIGRvY3VtZW50YXRpb24uIExldCdzIGRpZyBpbnRvIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFnYWluIGFuZCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjA6MjcuNTA2NTY1MTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODYzMjkzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienNfbG9va3VwX2NsYXNzX2luZGV4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzc6XFx0Y2xhc3NfaW5kZXhfb2xkID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9vbGQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzg6XFx0Y2xhc3NfaW5kZXhfbmV3ID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9uZXcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg9Mzc9dW5zaWduZWQgbG9uZyB6c19jb21wYWN0KHN0cnVjdCB6c19wb29sICpwb29sKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzgtXFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjM5OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtNDAtXFxuLS1cXG5tbS96c21hbGxvYy5jPTEwMDk9c3RhdGljIGJvb2wgenNwYWdlX2VtcHR5KHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAxNC0vKipcXG5tbS96c21hbGxvYy5jOjEwMTU6ICogenNfbG9va3VwX2NsYXNzX2luZGV4KCkgLSBSZXR1cm5zIGluZGV4IG9mIHRoZSB6c21hbGxvYyBcXHUwMDI2c2l6ZV9jbGFzc1xcbm1tL3pzbWFsbG9jLmMtMTAxNi0gKiB0aGF0IGhvbGQgb2JqZWN0cyBvZiB0aGUgcHJvdmlkZWQgc2l6ZS5cXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAyNC0gKi9cXG5tbS96c21hbGxvYy5jOjEwMjU6dW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpXFxubW0venNtYWxsb2MuYy0xMDI2LXtcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAzMi19XFxubW0venNtYWxsb2MuYzoxMDMzOkVYUE9SVF9TWU1CT0xfR1BMKHpzX2xvb2t1cF9jbGFzc19pbmRleCk7XFxubW0venNtYWxsb2MuYy0xMDM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyMDoyOS4zOTI4OTkzNTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDMzODI1NDI1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB6c21hbGxvYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIFRoZSBjcnVjaWFsIGRldGFpbCBpcyB0aGF0IGl0J3MgKmFkZGluZyogYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSBjYWxjdWxhdGlvbi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHdlJ3JlIG1hbmFnaW5nIHRoZSBoYW5kbGVzIHdpdGhpbiBgenNtYWxsb2NgLCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgaW5kZXggY2FsY3VsYXRpb24gb24gb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgYW5kIGZyYWdtZW50YXRpb24uIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeS5cblxuVGhlIGNvZGUgcGF0aCBpbnZvbHZlZCwgYXQgbGVhc3QgYmFzZWQgb24gdGhlIGNvbnRleHQgaGVyZSwgaXMgYHJlY29tcHJlc3Nfc2xvdGAgaW4gYHpyYW1fZHJ2LmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgaW1wYWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBvcGVyYXRpb25zIGluIGB6cmFtYC5cblxuQmVmb3JlIGRpZ2dpbmcgaW50byB0aGUgY29kZSB0b28gZGVlcGx5LCBJIHdpbGwgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIC0gYENPTkZJR19aUkFNYCBhbmQgYENPTkZJR19aU01BTExPQ2AuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRob3NlIHRvIGVuc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzY29wZSBvZiB0aGlzIGNoYW5nZSBhcmUgb24gcG9pbnQgYmVmb3JlIGdldHRpbmcgYW55IGRlZXBlci4gVGhhdCdzIGEgZnVuZGFtZW50YWwgc3RlcCB0aGF0IEkgc2hvdWxkbid0IHNraXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyMzo1Mi43NzU0NDUyNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzODkzMDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNNQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMTQ9Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbi0tXFxubW0vS2NvbmZpZy0xMjQtXFxubW0vS2NvbmZpZzoxMjU6Y29uZmlnIFpTTUFMTE9DXFxubW0vS2NvbmZpZy0xMjYtXFx0dHJpc3RhdGVcXG4tLVxcbm1tL0tjb25maWc9MTMzPWNvbW1lbnQgXFxcIlpzbWFsbG9jIGlzIGEgY29tbW9uIGJhY2tlbmQgYWxsb2NhdG9yIGZvciB6c3dhcCBcXHUwMDI2IHpyYW1cXFwiXFxubW0vS2NvbmZpZy0xMzQtXFxubW0vS2NvbmZpZzoxMzU6Y29uZmlnIFpTTUFMTE9DX1NUQVRcXG5tbS9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJFeHBvcnQgenNtYWxsb2Mgc3RhdGlzdGljc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQzLVxcbm1tL0tjb25maWc6MTQ0OmNvbmZpZyBaU01BTExPQ19DSEFJTl9TSVpFXFxubW0vS2NvbmZpZy0xNDUtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiBwaHlzaWNhbCBwYWdlcyBwZXItenNwYWdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyMzo1NC44MTQzODU4ODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE1NTk3MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqWlJBTSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgY29uZmlnIFpSQU1gLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIHdoZW4gY29uc2lkZXJpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgZXNwZWNpYWxseSBmb3IgcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzIG9yIHN5c3RlbXMgd2l0aCBwb3RlbnRpYWxseSBoZWF2eSBJL08gd29ya2xvYWRzLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiBaUkFNIGlzIGN1cnJlbnRseSBlbmFibGVkLCBhbmQgaWYgc28sIHdoYXQgdGhlIGV4aXN0aW5nIHBhcmFtZXRlcnMgYXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIHZpdGFsIGJlZm9yZSB3ZSBjYW4gYXNzZXNzIGl0cyBlZmZlY3RpdmVuZXNzIG9yIGNvbnNpZGVyIGFueSBvcHRpbWl6YXRpb25zLiBXZSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgYWxsb2NhdGVkIHNpemUsIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgYW5kIGFueSBvdGhlciByZWxldmFudCB0dW5hYmxlIHBhcmFtZXRlcnMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY3VycmVudCBzdGF0ZS4gRnJvbSB0aGVyZSwgd2UgY2FuIGJlZ2luIHRvIHRyb3VibGVzaG9vdCBhbmQgc2VlIGlmIHdlIGNhbiBkbyBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI0OjA2Ljk3MDM1OTIxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI4MjY2NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaUkFNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNDowOC4zOTg2MzEyNzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjI4MTc2MTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogRml4aW5nIGEgWlJBTSBNZW1vcnkgQWxsb2NhdGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgbW9kaWZ5aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdG8gbWFrZSBpdCBjYWxsIGBsb29rdXBfc2l6ZV9jbGFzc2AgYW5kLCBjcml0aWNhbGx5LCAqYWRkKiBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplIGJlaW5nIGxvb2tlZCB1cC4gQWgsIHRoYXQncyB0aGUga2V5LiBUaGlzIGFsbW9zdCBjZXJ0YWlubHkgcmVzb2x2ZXMgYSBidWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYHpzX21hbGxvY2Agd2FzIGFkZGluZyBgWlNfSEFORExFX1NJWkVgIHdoZW4gKmFsbG9jYXRpbmcqIG1lbW9yeSwgYnV0IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdhc24ndCBhY2NvdW50aW5nIGZvciBpdCB3aGVuIGRldGVybWluaW5nIHRoZSAqY2xhc3MqIG9mIHRoYXQgYWxsb2NhdGlvbi4gU28sIHRoZSBpbmRleCB3YXMgb2ZmLCBsZWFkaW5nIHRvLi4uIHdlbGwsIHdobyBrbm93cyB3aGF0IGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gb3IgcGVyZm9ybWFuY2UgaXNzdWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgY2xlYXIgYW5kIGVzc2VudGlhbCBmaXguXG5cblRoZSBmdW5jdGlvbnMgdG8gcmVhbGx5IGZvY3VzIG9uIGhlcmUgYXJlIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCwgb2YgY291cnNlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhvc2UsIGxpbmUgYnkgbGluZSwgdG8gc2VlIHRoZSBleGFjdCBjb250ZXh0LiBBbmQgdGhlbiwgdGhlcmUncyBgcmVjb21wcmVzc19zbG90YCBpbiBgenJhbV9kcnYuY2AuIFRoYXQncyBhbiBpbnRlcmVzdGluZyBvbmU7IGl0IHNlZW1zIHRvIGJlIHVzaW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFzIHdlbGwuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGNvZGViYXNlIHRvIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJdCBjb3VsZCBiZSBhZmZlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYzMywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNDozNC42ODAzOTYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3MDIzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29tcHJlc3Nfc2xvdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzc4PXN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3JlY29tcHJlc3Moc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLCB1MzIgcHJpbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MjItICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQyMzpzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDI0LVxcdFxcdFxcdCAgIHU2NCAqbnVtX3JlY29tcF9wYWdlcywgdTMyIHRocmVzaG9sZCwgdTMyIHByaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNTI5PXN0YXRpYyBzc2l6ZV90IHJlY29tcHJlc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjY1MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNjUxOlxcdFxcdGVyciA9IHJlY29tcHJlc3Nfc2xvdCh6cmFtLCBwcHMtXFx1MDAzZWluZGV4LCBwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI2NTItXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm51bV9yZWNvbXBfcGFnZXMsIHRocmVzaG9sZCwgcHJpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI0OjM2LjE5NzQyNjc4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY4MjMyODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbXByZXNzaW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGByZWNvbXByZXNzX3N0b3JlYCBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHN5c2ZzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBtZW1vcnkgY29tcHJlc3Npb24gbGFuZHNjYXBlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0J3Mgc2VlIGhvdyBgWlJBTWAgYW5kIGBaU01BTExPQ2AgYXJlIGNvbmZpZ3VyZWQuIE9mIGNvdXJzZSwgYFpSQU1gIHJlbGllcyBvbiBgQkxPQ0tgLCBzbyB0aGF0J3MgYSBkZXBlbmRlbmN5IEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEFuZCBpdCBsb29rcyBsaWtlIGBaU01BTExPQ2AgZGVwZW5kcyBvbiBgTU1VYC4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBicmllZmx5IGNoZWNrIG91dCBgWlNXQVBgIGFuZCBpdHMgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDA0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjQ6NDAuNjY1NjYyMjEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxMDIwMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNDo0Mi4xMzY2ODk3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzUwODY5MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBjaGFuZ2UgaXMgbmVzdGxlZCB3aXRoaW4gYG1tL3pzbWFsbG9jLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29udGV4dC4gTXkgaW5pdGlhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AuIEkgYWxyZWFkeSBrbm93IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGlzIGV4cG9ydGVkLCBhbmQgYHpyYW1fZHJ2LmNgIGxldmVyYWdlcyBpdC4gU2ltaWxhcmx5LCBgenNfbWFsbG9jYCBpcyBleHBvc2VkIGZvciB1c2UgYnkgYm90aCBgenJhbV9kcnYuY2AgYW5kIGB6c3dhcC5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiB0aGUgY2hhbmdlLCBzbyBsZXQncyBjaGVjayB3aG8ncyBjYWxsaW5nIGB6c19tYWxsb2NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgdXNpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNDo0NS44ODc1NjExN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMzA3MTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c19tYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Q9MTA9b3IgeW91IGNhbiBkaXJlY3RseSByZXF1ZXN0IHBhZ2VzIGZyb20gdGhlIHBhZ2UgYWxsb2NhdG9yIHdpdGhcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdC0xMS1gYWxsb2NfcGFnZXNgLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBtb3JlIHNwZWNpYWxpemVkIGFsbG9jYXRvcnMsXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Q6MTI6Zm9yIGluc3RhbmNlIGBjbWFfYWxsb2NgIG9yIGB6c19tYWxsb2NgLlxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTEzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS96c21hbGxvYy5yc3Q9MjI9dW5jb21wcmVzc2VkIGZvcm0pLiBGb3IgYWxsb2NhdGlvbiByZXF1ZXN0cyBsYXJnZXIgdGhhbiB0aGlzIHNpemUsIGZhaWx1cmVcXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdDoyMzppcyByZXR1cm5lZCAoc2VlIHpzX21hbGxvYykuXFxuRG9jdW1lbnRhdGlvbi9tbS96c21hbGxvYy5yc3QtMjQtXFxuRG9jdW1lbnRhdGlvbi9tbS96c21hbGxvYy5yc3Q6MjU6QWRkaXRpb25hbGx5LCB6c19tYWxsb2MoKSBkb2VzIG5vdCByZXR1cm4gYSBkZXJlZmVyZW5jZWFibGUgcG9pbnRlci5cXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdC0yNi1JbnN0ZWFkLCBpdCByZXR1cm5zIGFuIG9wYXF1ZSBoYW5kbGUgKHVuc2lnbmVkIGxvbmcpIHdoaWNoIGVuY29kZXMgYWN0dWFsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Q9MTk9TGludXjkuLrlhoXlrZjliIbphY3mj5DkvpvkuoblpJrnp41BUEnjgILkvaDlj6/ku6Xkvb/nlKggYGttYWxsb2NgIOaIliBga21lbV9jYWNoZV9hbGxvY2BcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdC0yMS3kvaDlj6/ku6XnlKggYWxsb2NfcGFnZXMg55u05o6l5ZCR6aG16Z2i5YiG6YWN5Zmo6K+35rGC6aG16Z2i44CC5Lmf5Y+v5Lul5L2/55So5pu05LiT5Lia55qE5YiG6YWN5Zmo77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0OjIyOuS+i+WmgiBgY21hX2FsbG9jYCDmiJYgYHpzX21hbGxvY2Ag44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTIzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0venNtYWxsb2MucnN0PTEwPXpzbWFsbG9jXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS96c21hbGxvYy5yc3QtMjMt6KaB5rGC77yI5Zyo5pyA5Z2P55qE5oOF5Ya15LiL77yM6aG16Z2i5piv5LiN5Y+v5Y6L57yp55qE77yM5Zug5q2k5LulXFxcIuWOn+agt1xcXCLljbPmnKrljovnvKnnmoTlvaLlvI/lrZjlgqjvvInjgILlr7nkuo7lpKfkuo7ov5lcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS96c21hbGxvYy5yc3Q6MjQ65Liq5aSn5bCP55qE5YiG6YWN6K+35rGC77yM5Lya6L+U5Zue5aSx6LSl77yI6KeBenNfbWFsbG9j77yJ44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0venNtYWxsb2MucnN0LTI1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdDoyNjrmraTlpJbvvIx6c19tYWxsb2MoKeW5tuS4jei/lOWbnuS4gOS4quWPr+mHjeWkjeW8leeUqOeahOaMh+mSiOOAguebuOWPje+8jOWug+i/lOWbnuS4gOS4quS4jemAj+aYjueahOWPpeafhO+8iOaXoOespuWPt1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdC0yNy3plb/vvInvvIzlroPnvJbnoIHkuobooqvliIbphY3lr7nosaHnmoTlrp7pmYXkvY3nva7jgILov5nnp43pl7TmjqXmgKfnmoTljp/lm6DmmK96c21hbGxvY+W5tuS4jeS/neaMgXpzcGFnZXPnmoTmsLjkuYVcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjk9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMzktXFx0ICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI0MDpcXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIFBBR0VfU0laRSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQxLVxcdFxcdFxcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNzA9c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzAyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMDM6XFx0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzA0LVxcdFxcdFxcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTA1LVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MDY6XFx0aGFuZGxlX25ldyA9IHpzX21hbGxvYyh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgY29tcF9sZW5fbmV3LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDctXFx0XFx0XFx0ICAgICAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcXG4tLVxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaD0yOD12b2lkIHpzX2Rlc3Ryb3lfcG9vbChzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTI5LVxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaDozMDp1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLFxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaC0zMS1cXHRcXHRcXHRjb25zdCBpbnQgbmlkKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTI0OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBvYmpfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLFxcbi0tXFxubW0venNtYWxsb2MuYy0xMjkwLS8qKlxcbm1tL3pzbWFsbG9jLmM6MTI5MTogKiB6c19tYWxsb2MgLSBBbGxvY2F0ZSBibG9jayBvZiBnaXZlbiBzaXplIGZyb20gcG9vbC5cXG5tbS96c21hbGxvYy5jLTEyOTItICogQHBvb2w6IHBvb2wgdG8gYWxsb2NhdGUgZnJvbVxcbi0tXFxubW0venNtYWxsb2MuYy0xMzAwLSAqL1xcbm1tL3pzbWFsbG9jLmM6MTMwMTp1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCxcXG5tbS96c21hbGxvYy5jLTEzMDItXFx0XFx0XFx0Y29uc3QgaW50IG5pZClcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTM1NS19XFxubW0venNtYWxsb2MuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7XFxubW0venNtYWxsb2MuYy0xMzU3LVxcbi0tXFxubW0venNtYWxsb2MuYz0yMDc0PXN0cnVjdCB6c19wb29sICp6c19jcmVhdGVfcG9vbChjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubW0venNtYWxsb2MuYy0yMTE5LVxcdFxcdFxcdCAqIFRoZSBvYmplY3QgdXNlcyBaU19IQU5ETEVfU0laRSBieXRlcyB0byBzdG9yZSB0aGVcXG5tbS96c21hbGxvYy5jOjIxMjA6XFx0XFx0XFx0ICogaGFuZGxlLiBXZSBuZWVkIHRvIHN1YnRyYWN0IGl0LCBiZWNhdXNlIHpzX21hbGxvYygpXFxubW0venNtYWxsb2MuYy0yMTIxLVxcdFxcdFxcdCAqIHVuY29uZGl0aW9uYWxseSBhZGRzIGhhbmRsZSBzaXplIGJlZm9yZSBpdCBwZXJmb3Jtc1xcbi0tXFxubW0venN3YXAuYz04NDA9c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTg5OS1cXHRnZnAgPSBHRlBfTk9XQUlUIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFO1xcbm1tL3pzd2FwLmM6OTAwOlxcdGhhbmRsZSA9IHpzX21hbGxvYyhwb29sLVxcdTAwM2V6c19wb29sLCBkbGVuLCBnZnAsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG5tbS96c3dhcC5jLTkwMS1cXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjQ6NDcuMzEwNjQwNjU3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0Mjg1NTYzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac21hbGxvYyBQYXRjaCBmb3IgRW5oYW5jZWQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gYWRkcmVzc2luZyBhbiBpc3N1ZSB3aXRoaW4gdGhlIGB6c21hbGxvY2Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIGB6cmFtX2Rydi5jYCBhbmQgYHpzd2FwLmNgLiBNeSBpbml0aWFsIGFuYWx5c2lzIHBvaW50cyB0byBhIGZsYXcgaW4gaG93IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGNhbGN1bGF0ZXMgdGhlIGNsYXNzIGluZGV4IHdoZW4gYWxsb2NhdGluZyBtZW1vcnksIHBhcnRpY3VsYXJseSBpbiB0aGUgYHpyYW1gIGFuZCBgenN3YXBgIGNvbnRleHRzLiBUaGUgYnVnIGludm9sdmVzIGEgbWlzc2luZyBgWlNfSEFORExFX1NJWkVgIGFkZGl0aW9uLCB3aGljaCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSBpbmRleGluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBidWcgZml4LCBhcyBpdCBkaXJlY3RseSBpbXBhY3RzIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5NeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AsIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIFRvIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBwYXRjaCdzIHNjb3BlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgWlNNQUxMT0NgLCBgWlJBTWAsIGFuZCBgWlNXQVBgLiBJdCdzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgZGVwZW5kZW5jaWVzLiBgWlNNQUxMT0NgIGRlcGVuZHMgb24gYE1NVWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgWlJBTWAgcmVsaWVzIG9uIGBCTE9DS2AsIGFuZCBgWlNXQVBgIGNsZWFybHkgbmVlZHMgYFNXQVBgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBKdXN0IHRvIGNvbmZpcm0sIGxldCdzIHJlLXZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzOiBgWlNXQVBgIGRlcGVuZHMgb24gYFNXQVBgLCBgWlJBTWAgZGVwZW5kcyBvbiBgQkxPQ0tgLCBhbmQgYFpTTUFMTE9DYCBoYXMgdGhlIGBNTVVgIHJlcXVpcmVtZW50LiBTZWVtcyBJJ20gcmlnaHQgYWJvdXQgYFpSQU1gJ3MgZGVwZW5kZW5jaWVzIHRvby4gQWxsIHRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29ycmVjdCBjb250ZXh0IGZvciB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQ1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI0OjUzLjczOTE5OTgxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MDE0NzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cXHRkZXBlbmRzIG9uIFpSQU1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVxcdGJvb2wgXFxcImx6by1ybGVcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcImx6NGhjXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cXHRib29sIFxcXCJUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cXHRib29sIFxcXCJFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjQ6NTUuNTI5MzUyNDk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODAyOTcyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWlJBTSBEZXBlbmRlbmNpZXM6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgc28gSSdtIGp1c3QgcXVpY2tseSB0cnlpbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBaUkFNYCBtb2R1bGUncyBhcmNoaXRlY3R1cmUgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBsYXRlc3QgY2hhbmdlcy4gSSBoYWQgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBpdCB3YXNuJ3QgYXMgc2VsZi1jb250YWluZWQgYXMgSSBpbml0aWFsbHkgdGhvdWdodCwgYW5kIHN1cmUgZW5vdWdoLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGF0IGl0cyBrZXkgZGVwZW5kZW5jaWVzIGFyZS4gUmlnaHQsIHNvIGBaUkFNYCByZWxpZXMgb24gYEJMT0NLYCwgbmF0dXJhbGx5LCBhbmQgdGhlbiB3ZSBoYXZlIGBTWVNGU2AgZm9yIHRoZSBpbnRlcmZhY2UsIGFuZCBhbHNvIGBaU01BTExPQ2AgZm9yIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uLiBGaW5hbGx5LCBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IGludGVncmF0ZXMgd2l0aCBgQ1JZUFRPYCBmb3IgY29tcHJlc3Npb24gYW5kLCBwb3NzaWJseSwgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBjb21wcmVzc2VkIFJBTSBkaXNrLiBHaXZlbiB0aGlzIHNldHVwLCBhIHF1aWNrIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2Agd2lsbCBwcm9iYWJseSBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IGZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBjaGVjayBpdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjQ6NTkuNTA5NjUyMzI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0Y29uZmlnIFpSQU1cXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0sgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgTU1VXFxuICAgNTpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgQ3JlYXRlcyB2aXJ0dWFsIGJsb2NrIGRldmljZXMgY2FsbGVkIC9kZXYvenJhbVggKFggPSAwLCAxLCAuLi4pLlxcbiAgIDg6XFx0XFx0ICBQYWdlcyB3cml0dGVuIHRvIHRoZXNlIGRpc2tzIGFyZSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gbWVtb3J5XFxuICAgOTpcXHRcXHQgIGl0c2VsZi4gVGhlc2UgZGlza3MgYWxsb3cgdmVyeSBmYXN0IEkvTyBhbmQgY29tcHJlc3Npb24gcHJvdmlkZXNcXG4gIDEwOlxcdFxcdCAgZ29vZCBhbW91bnRzIG9mIG1lbW9yeSBzYXZpbmdzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIEl0IGhhcyBzZXZlcmFsIHVzZSBjYXNlcywgZm9yIGV4YW1wbGU6IC90bXAgc3RvcmFnZSwgdXNlIGFzIHN3YXBcXG4gIDEzOlxcdFxcdCAgZGlza3MgYW5kIG1heWJlIG1hbnkgbW9yZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ibG9ja2Rldi96cmFtLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcXG4gIDE4OlxcdFxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICAyMDpcXHRcXHRzZWxlY3QgTFo0X0NPTVBSRVNTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI0OjU5LjUwOTcxODM5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE4MDI1OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGZpcnN0LXBlcnNvbiBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBpdCBzZWVtcyB0aGUgYFpSQU1gIG1vZHVsZSBpcyBzZXQgdXAgdG8gdXRpbGl6ZSBgWlNNQUxMT0NgIGZvciBpdHMgdW5kZXJseWluZyBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgWlNXQVBgIGRlcGVuZHMgb24gYFpQT09MYCwgd2hpY2gsIGluIHR1cm4sICphbHNvKiB1dGlsaXplcyBgWlNNQUxMT0NgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBzaG91bGQgdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbiBhbmQgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIExldCdzIGdldCB0aGUgc291cmNlIGNvZGUgb3V0IGFuZCBkaWcgaW50byBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJdOKAmXMgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzdWNoIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTE2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNTowMy4yMjc3NDc2MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0XFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgWlNXQVBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFNXQVBcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDI2OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xcbiAgMjk6XFx0XFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cXG4gIDMwOlxcdFxcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cXG4gIDMxOlxcdFxcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXFxuICAzMjpcXHRcXHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcXG4gIDMzOlxcdFxcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuICAzNjpcXHRcXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNTowMy4yMjc5MDE3NjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkyNzcxMDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWlNXQVAvWlNNQUxMT0MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIHN5c3RlbSBpcyBjaG9vc2luZyBgWlNNQUxMT0NgIHdoZW4gYFpTV0FQYCBpcyBzZWxlY3RlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLiBUbyBlbmFibGUgdGhpcyBhcmVhIGZvciB0ZXN0aW5nLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBaU01BTExPQ2AsIGBaUkFNYCwgYW5kIGBaU1dBUGAgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IHdpbGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIG15IGludmVzdGlnYXRpb24gYXJlIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYC5cblxuQWhhISBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBvbmx5IHVzZWQgd2l0aGluIGB6cmFtX2Rydi5jYCwgd2hpY2ggZ2l2ZXMgbWUgYSBzbWFsbGVyLCBtb3JlIGZvY3VzZWQgYXJlYSB0byBleHBsb3JlIGluaXRpYWxseS4gV2hlcmVhcyBgenNfbWFsbG9jYCBpcyB1c2VkIGJ5IGJvdGggYHpyYW1fZHJ2LmNgIGFuZCBgenN3YXAuY2AuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIHByb3ZpZGVkIHBhdGNoIGFkZHJlc3NlcyBhbiBlcnJvciBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB0aGF0IHdhcyBpbmNvcnJlY3RseSBjYWxjdWxhdGluZyB0aGUgY2xhc3MgaW5kZXguIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGEgY2xhc3MgaW5kZXggZXJyb3IsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZyB0byBleHBsb3JlIHRoZSBzeXN0ZW0gYmVoYXZpb3IgdW5kZXIgdmFyaW91cyBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgc2luY2UgaXQgZGVhbHMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudC5cblxuVGhlcmVmb3JlLCBJJ20gc2V0dGluZyB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyB0byBgdHJ1ZWAuIE15IGBFbmFibGVDb25maWdzYCB3aWxsIGluY2x1ZGUgYFpTTUFMTE9DYCwgYFpSQU1gLCBhbmQgYFpTV0FQYCwgYW5kIG15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuIEV4Y2VsbGVudCwgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUEwoenNfbG9va3VwX2NsYXNzX2luZGV4KTtgIGFuZCBgenNfbWFsbG9jYCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTCh6c19tYWxsb2MpO2AuIE5vdyB0aGF0IEkndmUgY29uZmlybWVkIGFsbCBvZiB0aGF0LCBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBteSBuZXh0IHN0ZXBzLlxuXG5JIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAzNiwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNToxMS4xNTU2MTQ4MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc0MDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNNQUxMT0NcIixcbiAgICBcIlpSQU1cIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienNfbG9va3VwX2NsYXNzX2luZGV4XCIsXG4gICAgXCJ6c19tYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCB3YXMgcmV0dXJuaW5nIHRoZSB3cm9uZyBjbGFzcyBpbmRleCBiZWNhdXNlIGl0IGRpZG4ndCBhZGQgYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSwgdW5saWtlIGB6c19tYWxsb2NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgenNtYWxsb2MgYWxsb2NhdG9yIGxvZ2ljLCB3aGljaCBpcyB1c2VkIGJ5IHpyYW0gYW5kIHpzd2FwLiBGdXp6aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNNQUxMT0NcIixcbiAgICBcIlpSQU1cIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienNfbG9va3VwX2NsYXNzX2luZGV4XCIsXG4gICAgXCJ6c19tYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCB3YXMgcmV0dXJuaW5nIHRoZSB3cm9uZyBjbGFzcyBpbmRleCBiZWNhdXNlIGl0IGRpZG4ndCBhZGQgYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSwgdW5saWtlIGB6c19tYWxsb2NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgenNtYWxsb2MgYWxsb2NhdG9yIGxvZ2ljLCB3aGljaCBpcyB1c2VkIGJ5IHpyYW0gYW5kIHpzd2FwLiBGdXp6aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI1OjExLjIzMDM2MTE4N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODAzMzczMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjU6MTEuMjMwNzc0MjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3NTgwMjk1NTIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgZmFpbGVkIHRvIGFjY291bnQgZm9yIGBaU19IQU5ETEVfU0laRWAgd2hlbiBsb29raW5nIHVwIHRoZSBzaXplIGNsYXNzIGluZGV4LCBjYXVzaW5nIGl0IHRvIHJldHVybiBhbiBpbmNvcnJlY3QgKHNtYWxsZXIpIGNsYXNzIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseSB1c2VkIGJ5IHpyYW0gdG8gZGV0ZXJtaW5lIGlmIHJlY29tcHJlc3NpbmcgYW4gb2JqZWN0IGlzIGJlbmVmaWNpYWwgYnkgY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjbGFzcyBpbmRpY2VzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBidXQgaXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIGlzc3VlcyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0N2NlNDZiYzEyNTA3MmJkYTA2OGJlNjA0Y2EzYTY0MDg0ZmFhNDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDEyOjIwOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmNcbmluZGV4IDgzZjU4MjBjNDVmOTMuLjQxYjAzYTllY2VjMjUgMTAwNjQ0XG4tLS0gYS9tbS96c21hbGxvYy5jXG4rKysgYi9tbS96c21hbGxvYy5jXG5AQCAtNDc4LDYgKzQ3OCwxMSBAQCBzdGF0aWMgaW50IGdldF9zaXplX2NsYXNzX2luZGV4KGludCBzaXplKVxuIFx0cmV0dXJuIG1pbl90KGludCwgWlNfU0laRV9DTEFTU0VTIC0gMSwgaWR4KTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBzaXplX2NsYXNzICpsb29rdXBfc2l6ZV9jbGFzcyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUpXG4re1xuK1x0cmV0dXJuIHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplICsgWlNfSEFORExFX1NJWkUpXTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGNsYXNzX3N0YXRfYWRkKHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcywgaW50IHR5cGUsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgY250KVxuIHtcbkBAIC0xMDIxLDcgKzEwMjYsNyBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4gXG4tXHRjbGFzcyA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07XG4rXHRjbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpO1xuIFxuIFx0cmV0dXJuIGNsYXNzLVx1MDAzZWluZGV4O1xuIH1cbkBAIC0xMzExLDkgKzEzMTYsNyBAQCB1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCxcbiBcdGlmICghaGFuZGxlKVxuIFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PTUVNKTtcbiBcbi1cdC8qIGV4dHJhIHNwYWNlIGluIGNodW5rIHRvIGtlZXAgdGhlIGhhbmRsZSAqL1xuLVx0c2l6ZSArPSBaU19IQU5ETEVfU0laRTtcbi1cdGNsYXNzID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcbitcdGNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7XG4gXG4gXHQvKiBjbGFzcy1cdTAwM2Vsb2NrIGVmZmVjdGl2ZWx5IHByb3RlY3RzIHRoZSB6cGFnZSBtaWdyYXRpb24gKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI1OjExLjIzMDc3NTE3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDA0NjA4MzU5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac21hbGxvYyBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBtbS96c21hbGxvYy5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgaXNzdWUgaW4gaG93IHNpemUgY2xhc3NlcyBhcmUgbG9va2VkIHVwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGludHJvZHVjaW5nIHRoZSBoZWxwZXIgYGxvb2t1cF9zaXplX2NsYXNzYCB0byBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIGBaU19IQU5ETEVfU0laRWAgYmVmb3JlIGNhbGxpbmcgYGdldF9zaXplX2NsYXNzX2luZGV4KClgLiBFc3NlbnRpYWxseSwgaXQncyByZXBsYWNpbmcgZGlyZWN0IGFycmF5IGxvb2t1cHMgd2l0aCB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIGNyaXRpY2FsIGNoYW5nZXMgYXJlIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCwgd2hlcmUgdGhlIG9yaWdpbmFsIGRpcmVjdCBhcnJheSBhY2Nlc3NlcyBhcmUgYmVpbmcgcmVwbGFjZWQgYnkgY2FsbHMgdG8gdGhpcyBoZWxwZXIuXG5cbkhhbmcgb24uLi4gbGV0IG1lIGZvY3VzIGluIG9uIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgYSBzdHJhaWdodGZvcndhcmQgYHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07YC4gTm93LCBpdCdzIHVzaW5nIGBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKWAsIHdoaWNoIGV4cGxpY2l0bHkgYWRkcyBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplICpiZWZvcmUqIGNhbGN1bGF0aW5nIHRoZSBpbmRleC4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgLSB0aGlzIHNlZW1zIHRvIGJlIGNvcnJlY3RpbmcgYSBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgd2Fzbid0IHByb3Blcmx5IGFjY291bnRpbmcgZm9yIGBaU19IQU5ETEVfU0laRWAgZHVyaW5nIHRoZSBpbmRleCBsb29rdXAuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBvbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgcG9zc2libGUgY29uc2VxdWVuY2VzIGFuZCB3aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLiBUaGlzIGxpa2VseSBmaXhlcyBhIGJ1ZzogZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yLCBtb3JlIHN1YnRseSwgdGhlIHVzZSBvZiBhbiBpbmNvcnJlY3Qgc2l6ZSBjbGFzcyBpbmRleC4gVGhpcyB3b3VsZCBiZSBhIGJpZyBkZWFsIC0gbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzLiBBIHNtYWxsZXIgY2xhc3MgaW5kZXggdGhhbiBleHBlY3RlZCBpcyBhIG1lbW9yeSBpc3N1ZSwgYmVjYXVzZSBpdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyBhIHNtYWxsZXIgY2xhc3MgYW5kIHRodXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cbkkgd29uZGVyIGFib3V0IHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCB0aGUgcG90ZW50aWFsIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQgbWUgY29uc2lkZXIgdGhlIHNjZW5hcmlvLiBJZiBpdCBkb2VzIHJldHVybiBhIHNtYWxsZXIgc2l6ZSBjbGFzcywgdGhlIGNsYXNzIGluZGV4IHJldHVybmVkIGNvdWxkIGJlIHdyb25nLiBJZiB0aGlzIGluZGV4IGlzIHVzZWQsIGRvZXMgdGhpcyBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQ/IE5vLCBpdCBsb29rcyBsaWtlIGl0J3MganVzdCBhIHdyb25nIHNpemUgY2xhc3MgLSBpdCdzIHN0aWxsIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0IG9mIGJvdW5kcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgS0FTQU4gY2FuZGlkYXRlLCB0aGF0J3MgZm9yIHN1cmUuXG5cbkkgbmVlZCB0byBhbmFseXplIHdoZXJlIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGlzIGJlaW5nIHVzZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjUwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6Mjc6MzEuNjkxNjE0NzYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQ0ODkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienNfbG9va3VwX2NsYXNzX2luZGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venNtYWxsb2MuYz0xMDA5PXN0YXRpYyBib29sIHpzcGFnZV9lbXB0eShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTEwMTQtLyoqXFxubW0venNtYWxsb2MuYzoxMDE1OiAqIHpzX2xvb2t1cF9jbGFzc19pbmRleCgpIC0gUmV0dXJucyBpbmRleCBvZiB0aGUgenNtYWxsb2MgXFx1MDAyNnNpemVfY2xhc3NcXG5tbS96c21hbGxvYy5jLTEwMTYtICogdGhhdCBob2xkIG9iamVjdHMgb2YgdGhlIHByb3ZpZGVkIHNpemUuXFxuLS1cXG5tbS96c21hbGxvYy5jLTEwMjQtICovXFxubW0venNtYWxsb2MuYzoxMDI1OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKVxcbm1tL3pzbWFsbG9jLmMtMTAyNi17XFxuLS1cXG5tbS96c21hbGxvYy5jLTEwMzItfVxcbm1tL3pzbWFsbG9jLmM6MTAzMzpFWFBPUlRfU1lNQk9MX0dQTCh6c19sb29rdXBfY2xhc3NfaW5kZXgpO1xcbm1tL3pzbWFsbG9jLmMtMTAzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6Mjc6MzIuMDM2MTA5MzQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTU0MTU2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgVXNhZ2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsICpzcGVjaWZpY2FsbHkqIG91dHNpZGUgb2YgYG1tL3pzbWFsbG9jLmNgLiBXZSBhbHJlYWR5IGtub3cgaXQncyAqd2l0aGluKiB0aGUgenNtYWxsb2MgaW1wbGVtZW50YXRpb24sIHNvIHRyYWNraW5nIGRvd24gdGhvc2UgaW50ZXJuYWwgdXNlcyBpc24ndCB0aGUgcHJpb3JpdHkgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSAqZXh0ZXJuYWwqIGRlcGVuZGVuY2llcywgb3IgaWYgaXQncyBtb3JlIHNlbGYtY29udGFpbmVkLiBMb2NhdGluZyB0aGUgZXh0ZXJuYWwgY2FsbHMgaXMgd2hlcmUgSSBzaG91bGQgc3RhcnQuIEkgd2lsbCBuZWVkIHRvIHVzZSBhIHRvb2wgdG8gbG9jYXRlIGNyb3NzIGZpbGUgcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI3OjM1Ljg1MTUyODQxOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjE3Mjg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c19sb29rdXBfY2xhc3NfaW5kZXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzc6XFx0Y2xhc3NfaW5kZXhfb2xkID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9vbGQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzg6XFx0Y2xhc3NfaW5kZXhfbmV3ID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9uZXcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg9Mzc9dW5zaWduZWQgbG9uZyB6c19jb21wYWN0KHN0cnVjdCB6c19wb29sICpwb29sKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzgtXFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjM5OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtNDAtXFxuLS1cXG5tbS96c21hbGxvYy5jPTEwMDk9c3RhdGljIGJvb2wgenNwYWdlX2VtcHR5KHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAxNC0vKipcXG5tbS96c21hbGxvYy5jOjEwMTU6ICogenNfbG9va3VwX2NsYXNzX2luZGV4KCkgLSBSZXR1cm5zIGluZGV4IG9mIHRoZSB6c21hbGxvYyBcXHUwMDI2c2l6ZV9jbGFzc1xcbm1tL3pzbWFsbG9jLmMtMTAxNi0gKiB0aGF0IGhvbGQgb2JqZWN0cyBvZiB0aGUgcHJvdmlkZWQgc2l6ZS5cXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAyNC0gKi9cXG5tbS96c21hbGxvYy5jOjEwMjU6dW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpXFxubW0venNtYWxsb2MuYy0xMDI2LXtcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAzMi19XFxubW0venNtYWxsb2MuYzoxMDMzOkVYUE9SVF9TWU1CT0xfR1BMKHpzX2xvb2t1cF9jbGFzc19pbmRleCk7XFxubW0venNtYWxsb2MuYy0xMDM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzozNy4zMTM3MDcwNzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMjAxNzQ4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgWlJBTSBSZWNvbXByZXNzaW9uIExvZ2ljIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0IGluIGB6cmFtX2Rydi5jYCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYmVpbmcgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSByZWNvbXByZXNzaW9uIGlzIHdvcnRod2hpbGUuIFRoZSBjb2RlIGNvbXBhcmVzIGBjbGFzc19pbmRleF9vbGRgIGFuZCBgY2xhc3NfaW5kZXhfbmV3YCB0byBkZWNpZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBtYXliZSBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCByZWNvbXByZXNzaW9uIGRlY2lzaW9ucy4gSSB3b25kZXJlZCBpZiB0aGUgZnVuY3Rpb24gd2Fzbid0IGhhbmRsaW5nIGBaU19IQU5ETEVfU0laRWAgY29ycmVjdGx5LCBhbmQgbWF5YmUgcmV0dXJuaW5nIGFuIG9mZi1ieS1vbmUgY2xhc3MgaW5kZXguIElmIHRoYXQgd2VyZSB0aGUgY2FzZSwgaXQgY291bGQgbGVhZCB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoLCBvZiBjb3Vyc2UsIHdvdWxkIGJlIGEgbXVjaCBiaWdnZXIgcHJvYmxlbS5cblxuQnV0IHdhaXQsIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGlzICpqdXN0KiByZXR1cm5pbmcgYW4gaW5kZXguIEl0J3Mgbm90IGludm9sdmVkIHdpdGggYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGFjY2VzcyBkaXJlY3RseS4gU28sIEkgZG9uJ3QgdGhpbmsgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIGlzc3VlIGhlcmUuXG5cbkFoLCBJIHNlZSBpdCBub3cuIFRoZSBmaXggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gSXQgd2Fzbid0IGFjY291bnRpbmcgZm9yIGBaU19IQU5ETEVfU0laRWAsIHdoaWNoIGlzIGFkZGVkIGR1cmluZyB0aGUgYHpzX21hbGxvY2Agb3BlcmF0aW9uLiBTbywgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2FzIHVzaW5nIHRoZSAqcmVxdWVzdGVkKiBzaXplLCBidXQgYHpzX21hbGxvY2Agd2FzIGFjdHVhbGx5IGFsbG9jYXRpbmcgd2l0aCB0aGUgKnJlcXVlc3RlZCogc2l6ZSAqcGx1cyogYFpTX0hBTkRMRV9TSVpFYC5cblxuVGhhdCBtYWtlcyBzZW5zZS4gVGhpcyBtZWFucyBgenJhbWAgY291bGQgaW5jb3JyZWN0bHkgYmVsaWV2ZSB0aGF0IGFuIG9iamVjdCB3aWxsIGZpdCBpbiBhIHNtYWxsZXIgbWVtb3J5IGNsYXNzIHRoYW4gaXQgYWN0dWFsbHkgZG9lcy4gVGhpcyBsZWFkcyB0byB0aGUgcG9zc2liaWxpdHkgb2YgbWFraW5nIHN1Ym9wdGltYWwgcmVjb21wcmVzc2lvbiBjaG9pY2VzLiBUaGUgc3lzdGVtIG1pZ2h0IHRoaW5rIGl0IGlzIHNhdmluZyBzcGFjZSwgd2hlbiBpbiBmYWN0IGl0IGlzIG5vdC4gVGhpcyBtZWFucyB0aGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgYnVnLiBJdCB3b3VsZG4ndCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1dCBvbmx5IGFmZmVjdHMgdGhlIGNvbXBhcmlzb24gb2YgYGNsYXNzX2luZGV4X29sZGAgYW5kIGBjbGFzc19pbmRleF9uZXdgIGR1cmluZyByZWNvbXByZXNzaW9uIGluIHpyYW0uIFRoaXMgd291bGQgcHJvYmFibHkgbm90IGV2ZW4gdHJpZ2dlciBLQVNBTiwgdW5sZXNzIGl0IHJlc3VsdHMgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZG93biB0aGUgbGluZS5cblxuSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgcmVjb21wcmVzc19zbG90YCBmdW5jdGlvbiBpbiBgenJhbV9kcnYuY2AgdG8gYmUgc3VyZSBJJ3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI3OjQ4LjMzMzg4NDc5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNjgyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2xhc3NfaW5kZXhfb2xkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDMwLVxcdHVuc2lnbmVkIGludCBjb21wX2xlbl9uZXc7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQzMTpcXHR1bnNpZ25lZCBpbnQgY2xhc3NfaW5kZXhfb2xkO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MzItXFx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X25ldztcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3NzpcXHRjbGFzc19pbmRleF9vbGQgPSB6c19sb29rdXBfY2xhc3NfaW5kZXgoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX29sZCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3OC1cXHRjbGFzc19pbmRleF9uZXcgPSB6c19sb29rdXBfY2xhc3NfaW5kZXgoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX25ldyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3OS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDgwOlxcdGlmIChjbGFzc19pbmRleF9uZXcgXFx1MDAzZT0gY2xhc3NfaW5kZXhfb2xkIHx8XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ4MS1cXHQgICAgKHRocmVzaG9sZCBcXHUwMDI2XFx1MDAyNiBjb21wX2xlbl9uZXcgXFx1MDAzZT0gdGhyZXNob2xkKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzo0OC4zODEyNTg5ODZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MjgwNjk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBpbiBacmFtIENvbXByZXNzaW9uKipcblxuT2theSwgc28gSSd2ZSBwaW5uZWQgdGhpcyBkb3duLiBUaGUgcHJvYmxlbWF0aWMgYXJlYSBpcyBzb2xlbHkgd2l0aGluIHRoZSBgaWYgKGNsYXNzX2luZGV4X25ldyBcdTAwM2U9IGNsYXNzX2luZGV4X29sZClgIGNvbmRpdGlvbi4gVGhlIHBvdGVudGlhbCBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIHpyYW0gY29tcHJlc3Npb24gYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHksIGlzIG1ha2luZyBmbGF3ZWQgZGVjaXNpb25zIGFib3V0IHdoZW4gdG8gcmV0YWluIGEgcmVjb21wcmVzc2VkIG9iamVjdC4gSXTigJlzIGEgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiBUaGF0J3MgYSByZWxpZWY7IEtNU0FOIGlzbid0IGdvaW5nIHRvIGJlIG5lY2Vzc2FyeSBmb3IgZGVidWdnaW5nIHRoaXMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBiZWNhdXNlIEknbSBvbiB0aGUgc2NlbnQgaGVyZSwgYW5kIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgKm5vKiBvdGhlciB1c2VzIG9mIGBsb29rdXBfc2l6ZV9jbGFzc2Agd2l0aGluIHRoaXMgcGF0Y2ggdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIHRoZSBpc3N1ZS5cblxuUmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgenNfbWFsbG9jYCB0byByZXBsYWNlIHNvbWUgb2xkIGNvZGUuIEl0J3MgdXNpbmcgYGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpYCBub3csIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNvZGUsIHdoaWNoIHdhcyBsaWtlIGBzaXplICs9IFpTX0hBTkRMRV9TSVpFOyBjbGFzcyA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07YC4gTm93LCB3YWl0IGEgbWludXRlLCB0aGUgb3JpZ2luYWwgY29kZSBhZGRlZCBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBgc2l6ZWAgdmFyaWFibGUuIEJ1dCBpdCdzIHBhc3NlZCBieSB2YWx1ZSEgRG9lcyB0aGF0IGBzaXplYCB2YXJpYWJsZSBnZXQgdXNlZCBsYXRlciBpbiB0aGUgYHpzX21hbGxvY2AgZnVuY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6Mjc6NTQuMzY0MDY5NTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzY3NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzX21hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c21hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzbWFsbG9jLmM9MTI0OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBvYmpfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLFxcbi0tXFxubW0venNtYWxsb2MuYy0xMjkwLS8qKlxcbm1tL3pzbWFsbG9jLmM6MTI5MTogKiB6c19tYWxsb2MgLSBBbGxvY2F0ZSBibG9jayBvZiBnaXZlbiBzaXplIGZyb20gcG9vbC5cXG5tbS96c21hbGxvYy5jLTEyOTItICogQHBvb2w6IHBvb2wgdG8gYWxsb2NhdGUgZnJvbVxcbi0tXFxubW0venNtYWxsb2MuYy0xMzAwLSAqL1xcbm1tL3pzbWFsbG9jLmM6MTMwMTp1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCxcXG5tbS96c21hbGxvYy5jLTEzMDItXFx0XFx0XFx0Y29uc3QgaW50IG5pZClcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTM1NS19XFxubW0venNtYWxsb2MuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7XFxubW0venNtYWxsb2MuYy0xMzU3LVxcbi0tXFxubW0venNtYWxsb2MuYz0yMDc0PXN0cnVjdCB6c19wb29sICp6c19jcmVhdGVfcG9vbChjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubW0venNtYWxsb2MuYy0yMTE5LVxcdFxcdFxcdCAqIFRoZSBvYmplY3QgdXNlcyBaU19IQU5ETEVfU0laRSBieXRlcyB0byBzdG9yZSB0aGVcXG5tbS96c21hbGxvYy5jOjIxMjA6XFx0XFx0XFx0ICogaGFuZGxlLiBXZSBuZWVkIHRvIHN1YnRyYWN0IGl0LCBiZWNhdXNlIHpzX21hbGxvYygpXFxubW0venNtYWxsb2MuYy0yMTIxLVxcdFxcdFxcdCAqIHVuY29uZGl0aW9uYWxseSBhZGRzIGhhbmRsZSBzaXplIGJlZm9yZSBpdCBwZXJmb3Jtc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzo1NC40MDk0NDQ0MDlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNjUyNjY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB6c19tYWxsb2NgJ3MgTWVtb3J5IEFsbG9jYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGB6c19tYWxsb2NgIGltcGxlbWVudGF0aW9uLiBJJ20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZSBgc2l6ZWAgdmFyaWFibGUgaXMgaGFuZGxlZCAqYWZ0ZXIqIHRoYXQgY3JpdGljYWwgYHNpemUgKz0gWlNfSEFORExFX1NJWkU7YCBsaW5lLiBJdCdzIGEgdGV4dGJvb2sgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgZWZmaWNpZW5jeSBib3R0bGVuZWNrLCByaWdodD8gSSB3YW50IHRvIGNvbmZpcm0gaWYgYHNpemVgIGlzIHN1YnNlcXVlbnRseSB1c2VkIGNvcnJlY3RseSB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIHNpemUgYW5kIHVzYWdlLCBvciBpZiB0aGVyZSdzIGEgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycyBvciBtZW1vcnkgbWlzbWFuYWdlbWVudC4gV2UgbmVlZCB0byBiZSBlc3BlY2lhbGx5IGFsZXJ0IGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBpbmFkdmVydGVudGx5IHVzZSB0aGUgb3JpZ2luYWwgKHByZS1pbmNyZW1lbnQpIGBzaXplYCBpbiBjcml0aWNhbCBjYWxjdWxhdGlvbnMuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgdHJhY2Ugd2hlcmUgYHNpemVgIGlzIHVzZWQsIGxvb2tpbmcgZm9yIGhvdyB0aGUgaW5jcmVtZW50ZWQgdmFsdWUgaW1wYWN0cyB0aGUgYWxsb2NhdGlvbiwgYm91bmRzIGNoZWNraW5nLCBhbmQgYW55IHBvdGVudGlhbCBoYW5kbGUgbWFuYWdlbWVudCByb3V0aW5lcy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzo1OC41MzU5NzM5NTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3pzbWFsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMwMDpcXHQgKi9cXG4xMzAxOlxcdHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxcbjEzMDI6XFx0XFx0XFx0XFx0Y29uc3QgaW50IG5pZClcXG4xMzAzOlxcdHtcXG4xMzA0OlxcdFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbjEzMDU6XFx0XFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xcbjEzMDY6XFx0XFx0aW50IG5ld2ZnO1xcbjEzMDc6XFx0XFx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xcbjEzMDg6XFx0XFxuMTMwOTpcXHRcXHRpZiAodW5saWtlbHkoIXNpemUpKVxcbjEzMTA6XFx0XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVJTlZBTCk7XFxuMTMxMTpcXHRcXG4xMzEyOlxcdFxcdGlmICh1bmxpa2VseShzaXplIFxcdTAwM2UgWlNfTUFYX0FMTE9DX1NJWkUpKVxcbjEzMTM6XFx0XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVOT1NQQyk7XFxuMTMxNDpcXHRcXG4xMzE1OlxcdFxcdGhhbmRsZSA9IGNhY2hlX2FsbG9jX2hhbmRsZShnZnApO1xcbjEzMTY6XFx0XFx0aWYgKCFoYW5kbGUpXFxuMTMxNzpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PTUVNKTtcXG4xMzE4OlxcdFxcbjEzMTk6XFx0XFx0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcXG4xMzIwOlxcdFxcbjEzMjE6XFx0XFx0LyogY2xhc3MtXFx1MDAzZWxvY2sgZWZmZWN0aXZlbHkgcHJvdGVjdHMgdGhlIHpwYWdlIG1pZ3JhdGlvbiAqL1xcbjEzMjI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuMTMyMzpcXHRcXHR6c3BhZ2UgPSBmaW5kX2dldF96c3BhZ2UoY2xhc3MpO1xcbjEzMjQ6XFx0XFx0aWYgKGxpa2VseSh6c3BhZ2UpKSB7XFxuMTMyNTpcXHRcXHRcXHRvYmpfbWFsbG9jKHBvb2wsIHpzcGFnZSwgaGFuZGxlKTtcXG4xMzI2OlxcdFxcdFxcdC8qIE5vdyBtb3ZlIHRoZSB6c3BhZ2UgdG8gYW5vdGhlciBmdWxsbmVzcyBncm91cCwgaWYgcmVxdWlyZWQgKi9cXG4xMzI3OlxcdFxcdFxcdGZpeF9mdWxsbmVzc19ncm91cChjbGFzcywgenNwYWdlKTtcXG4xMzI4OlxcdFxcdFxcdGNsYXNzX3N0YXRfYWRkKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcXG4xMzI5OlxcdFxcbjEzMzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTMzMTpcXHRcXHR9XFxuMTMzMjpcXHRcXG4xMzMzOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuMTMzNDpcXHRcXG4xMzM1OlxcdFxcdHpzcGFnZSA9IGFsbG9jX3pzcGFnZShwb29sLCBjbGFzcywgZ2ZwLCBuaWQpO1xcbjEzMzY6XFx0XFx0aWYgKCF6c3BhZ2UpIHtcXG4xMzM3OlxcdFxcdFxcdGNhY2hlX2ZyZWVfaGFuZGxlKGhhbmRsZSk7XFxuMTMzODpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PTUVNKTtcXG4xMzM5OlxcdFxcdH1cXG4xMzQwOlxcdFxcbjEzNDE6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuMTM0MjpcXHRcXHRvYmpfbWFsbG9jKHBvb2wsIHpzcGFnZSwgaGFuZGxlKTtcXG4xMzQzOlxcdFxcdG5ld2ZnID0gZ2V0X2Z1bGxuZXNzX2dyb3VwKGNsYXNzLCB6c3BhZ2UpO1xcbjEzNDQ6XFx0XFx0aW5zZXJ0X3pzcGFnZShjbGFzcywgenNwYWdlLCBuZXdmZyk7XFxuMTM0NTpcXHRcXHRhdG9taWNfbG9uZ19hZGQoY2xhc3MtXFx1MDAzZXBhZ2VzX3Blcl96c3BhZ2UsIFxcdTAwMjZwb29sLVxcdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xcbjEzNDY6XFx0XFx0Y2xhc3Nfc3RhdF9hZGQoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELCBjbGFzcy1cXHUwMDNlb2Jqc19wZXJfenNwYWdlKTtcXG4xMzQ3OlxcdFxcdGNsYXNzX3N0YXRfYWRkKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcXG4xMzQ4OlxcdFxcbjEzNDk6XFx0XFx0LyogV2UgY29tcGxldGVseSBzZXQgdXAgenNwYWdlIHNvIG1hcmsgdGhlbSBhcyBtb3ZhYmxlICovXFxuMTM1MDpcXHRcXHRTZXRac1BhZ2VNb3ZhYmxlKHBvb2wsIHpzcGFnZSk7XFxuMTM1MTpcXHRvdXQ6XFxuMTM1MjpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y2xhc3MtXFx1MDAzZWxvY2spO1xcbjEzNTM6XFx0XFxuMTM1NDpcXHRcXHRyZXR1cm4gaGFuZGxlO1xcbjEzNTU6XFx0fVxcbjEzNTY6XFx0RVhQT1JUX1NZTUJPTF9HUEwoenNfbWFsbG9jKTtcXG4xMzU3OlxcdFxcbjEzNTg6XFx0c3RhdGljIHZvaWQgb2JqX2ZyZWUoaW50IGNsYXNzX3NpemUsIHVuc2lnbmVkIGxvbmcgb2JqKVxcbjEzNTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzo1OC41MzYwOTYyNDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ5NzYxMTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWlJBTSBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXNuJ3QgaW4gYHpzX21hbGxvY2AgaXRzZWxmLCBidXQgaW4gdGhlIGZ1bmN0aW9uIGl0J3MgY2FsbGluZzogYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIEkgc2VlIHRoYXQgdGhlIGBzaXplYCB2YXJpYWJsZSwgb2J0YWluZWQgYWZ0ZXIgY2FsbGluZyBgbG9va3VwX3NpemVfY2xhc3NgLCBpc24ndCBldmVuIHVzZWQgbGF0ZXIgaW4gYHpzX21hbGxvY2AuIFNvLCB0aGUgcmVmYWN0b3JpbmcgaXMgZXNzZW50aWFsbHkgYSBzaWRlLWVmZmVjdCwgdGhlIHJlYWwgYWN0aW9uIGlzIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLlxuXG5UaGUga2V5IGNvcnJlY3Rpb24gaGVyZSBsaWVzIHdpdGhpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gSXQncyBub3cgY29ycmVjdGx5IGZhY3RvcmluZyBpbiBgWlNfSEFORExFX1NJWkVgLiBUaGlzIHdhcyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gSXQgc2VlbXMgdGhlIGZ1bmN0aW9uIHdhcyByZXR1cm5pbmcgYW4gaW5jb3JyZWN0IHNpemUgY2xhc3MgaW5kZXguIFRoaXMgaXMgcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIFpSQU0gYmVjYXVzZSB0aGUgc2l6ZSBjbGFzcyBpbmRleGluZyBpcyB3aGF0IGRldGVybWluZXMgaWYgdGhlIG9iamVjdCBzaG91bGQgYmUgcmVjb21wcmVzc2VkIG9yIG5vdC4gQSBzbWFsbGVyIGluZGV4IHJldHVybmVkIG1lYW50IHRoZSBvYmplY3QgbWlnaHQgbm90IGJlIHJlY29tcHJlc3NlZCBhcHByb3ByaWF0ZWx5LlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIEtNU0FOIGFzcGVjdC4gVGhlIGlzc3VlIGF0IGhhbmQgaXNuJ3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIHBhdGNoIHJlc29sdmVzIGEgbG9naWNhbCBlcnJvciwgYSBtaXNjYWxjdWxhdGlvbiBpbiB0aGUgc2l6ZSBjbGFzcyBpbmRleC4gV2hpbGUgaW5jb3JyZWN0LCBpdCdzIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUgcGVyIHNlLiBTdGFuZGFyZCBLQVNBTiwgd2l0aCBpdHMgYWJpbGl0eSB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGlzIHN1ZmZpY2llbnQgdG8gZGVhbCB3aXRoIGFueSBwb3NzaWJsZSBwcm9ibGVtcywgaWYgdGhleSB3ZXJlIHRvIG9jY3VyLiBTbywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaW4gdGhpcyBjYXNlLiBNeSB0YWtlIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBjb3JyZWN0cyBhIGxvZ2ljIGVycm9yIGluIGRldGVybWluaW5nIHRoZSBzaXplIGNsYXNzIGluZGV4LCBhbmQgd2hpbGUgaXQgY291bGQgbGVhZCB0byBzdWJvcHRpbWFsIHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBpdCBkb2Vzbid0IG9wZW4gdGhlIGRvb3IgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igc2ltaWxhciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDMsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6Mjg6MDcuMDMzNzEwOTU0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCBmYWlsZWQgdG8gYWNjb3VudCBmb3IgYFpTX0hBTkRMRV9TSVpFYCB3aGVuIGxvb2tpbmcgdXAgdGhlIHNpemUgY2xhc3MgaW5kZXgsIGNhdXNpbmcgaXQgdG8gcmV0dXJuIGFuIGluY29ycmVjdCAoc21hbGxlcikgY2xhc3MgaW5kZXguIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHVzZWQgYnkgenJhbSB0byBkZXRlcm1pbmUgaWYgcmVjb21wcmVzc2luZyBhbiBvYmplY3QgaXMgYmVuZWZpY2lhbCBieSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNsYXNzIGluZGljZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVjb21wcmVzc2lvbiBkZWNpc2lvbnMsIGJ1dCBpdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgaXNzdWVzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgZmFpbGVkIHRvIGFjY291bnQgZm9yIGBaU19IQU5ETEVfU0laRWAgd2hlbiBsb29raW5nIHVwIHRoZSBzaXplIGNsYXNzIGluZGV4LCBjYXVzaW5nIGl0IHRvIHJldHVybiBhbiBpbmNvcnJlY3QgKHNtYWxsZXIpIGNsYXNzIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseSB1c2VkIGJ5IHpyYW0gdG8gZGV0ZXJtaW5lIGlmIHJlY29tcHJlc3NpbmcgYW4gb2JqZWN0IGlzIGJlbmVmaWNpYWwgYnkgY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjbGFzcyBpbmRpY2VzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBidXQgaXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIGlzc3VlcyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowfpvvk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-09 12:02:36 +0000 UTC FinishedAt: 2026-08-09 12:28:09 +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": "486d992fddf1e26f35a924d85bfbfd8d866a2ac2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSMALLOC", "ZRAM", "ZSWAP" ], "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": "486d992fddf1e26f35a924d85bfbfd8d866a2ac2", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSMALLOC", "ZRAM", "ZSWAP" ], "series_id": "27822a28-c953-4f3c-95d3-a23c0b2fcb4e" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "zs_lookup_class_index", "zs_malloc" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+N208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19sb29rdXBfY2xhc3NfaW5kZXgmIzM0OywKICAgICYjMzQ7enNfbWFsbG9jJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgZmFpbGVkIHRvIGFjY291bnQgZm9yIGBaU19IQU5ETEVfU0laRWAgd2hlbiBsb29raW5nIHVwIHRoZSBzaXplIGNsYXNzIGluZGV4LCBjYXVzaW5nIGl0IHRvIHJldHVybiBhbiBpbmNvcnJlY3QgKHNtYWxsZXIpIGNsYXNzIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseSB1c2VkIGJ5IHpyYW0gdG8gZGV0ZXJtaW5lIGlmIHJlY29tcHJlc3NpbmcgYW4gb2JqZWN0IGlzIGJlbmVmaWNpYWwgYnkgY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjbGFzcyBpbmRpY2VzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBidXQgaXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIGlzc3VlcyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCB3YXMgcmV0dXJuaW5nIHRoZSB3cm9uZyBjbGFzcyBpbmRleCBiZWNhdXNlIGl0IGRpZG4mIzM5O3QgYWRkIGBaU19IQU5ETEVfU0laRWAgdG8gdGhlIHNpemUsIHVubGlrZSBgenNfbWFsbG9jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHpzbWFsbG9jIGFsbG9jYXRvciBsb2dpYywgd2hpY2ggaXMgdXNlZCBieSB6cmFtIGFuZCB6c3dhcC4gRnV6emluZyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQ0N2NlNDZiYzEyNTA3MmJkYTA2OGJlNjA0Y2EzYTY0MDg0ZmFhNDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDEyOjIwOjE3IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3pzbWFsbG9jLmMgYi9tbS96c21hbGxvYy5jXG5pbmRleCA4M2Y1ODIwYzQ1ZjkzLi40MWIwM2E5ZWNlYzI1IDEwMDY0NFxuLS0tIGEvbW0venNtYWxsb2MuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venNtYWxsb2MuY1xuQEAgLTQ3OCw2ICYjNDM7NDc4LDExIEBAIHN0YXRpYyBpbnQgZ2V0X3NpemVfY2xhc3NfaW5kZXgoaW50IHNpemUpXG4gXHRyZXR1cm4gbWluX3QoaW50LCBaU19TSVpFX0NMQVNTRVMgLSAxLCBpZHgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBzaXplX2NsYXNzICpsb29rdXBfc2l6ZV9jbGFzcyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUgJiM0MzsgWlNfSEFORExFX1NJWkUpXTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xhc3Nfc3RhdF9hZGQoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBpbnQgdHlwZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBjbnQpXG4ge1xuQEAgLTEwMjEsNyAmIzQzOzEwMjYsNyBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4gXG4tXHRjbGFzcyA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07XG4mIzQzO1x0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcbiBcbiBcdHJldHVybiBjbGFzcy1cdTAwM2VpbmRleDtcbiB9XG5AQCAtMTMxMSw5ICYjNDM7MTMxNiw3IEBAIHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxuIFx0aWYgKCFoYW5kbGUpXG4gXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0LyogZXh0cmEgc3BhY2UgaW4gY2h1bmsgdG8ga2VlcCB0aGUgaGFuZGxlICovXG4tXHRzaXplICYjNDM7PSBaU19IQU5ETEVfU0laRTtcbi1cdGNsYXNzID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcbiYjNDM7XHRjbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpO1xuIFxuIFx0LyogY2xhc3MtXHUwMDNlbG9jayBlZmZlY3RpdmVseSBwcm90ZWN0cyB0aGUgenBhZ2UgbWlncmF0aW9uICovXG4gXHRzcGluX2xvY2soXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19sb29rdXBfY2xhc3NfaW5kZXgmIzM0OywKICAgICYjMzQ7enNfbWFsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdoZXJlIGl0IHdhcyByZXR1cm5pbmcgdGhlIHdyb25nIGNsYXNzIGluZGV4IGJlY2F1c2UgaXQgZGlkbiYjMzk7dCBhZGQgYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSwgdW5saWtlIGB6c19tYWxsb2NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgenNtYWxsb2MgYWxsb2NhdG9yIGxvZ2ljLCB3aGljaCBpcyB1c2VkIGJ5IHpyYW0gYW5kIHpzd2FwLiBGdXp6aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDQ3Y2U0NmJjMTI1MDcyYmRhMDY4YmU2MDRjYTNhNjQwODRmYWE0NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gQXVnIDkgMTI6MjA6MTcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuYwppbmRleCA4M2Y1ODIwYzQ1ZjkzLi40MWIwM2E5ZWNlYzI1IDEwMDY0NAotLS0gYS9tbS96c21hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzbWFsbG9jLmMKQEAgLTQ3OCw2ICYjNDM7NDc4LDExIEBAIHN0YXRpYyBpbnQgZ2V0X3NpemVfY2xhc3NfaW5kZXgoaW50IHNpemUpCiAJcmV0dXJuIG1pbl90KGludCwgWlNfU0laRV9DTEFTU0VTIC0gMSwgaWR4KTsKIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3Qgc2l6ZV9jbGFzcyAqbG9va3VwX3NpemVfY2xhc3Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplKQomIzQzO3sKJiM0MzsJcmV0dXJuIHBvb2wtJmd0O3NpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSAmIzQzOyBaU19IQU5ETEVfU0laRSldOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGFzc19zdGF0X2FkZChzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsIGludCB0eXBlLAogCQkJCSAgdW5zaWduZWQgbG9uZyBjbnQpCiB7CkBAIC0xMDIxLDcgJiM0MzsxMDI2LDcgQEAgdW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzOwogCi0JY2xhc3MgPSBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTsKJiM0MzsJY2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTsKIAogCXJldHVybiBjbGFzcy0mZ3Q7aW5kZXg7CiB9CkBAIC0xMzExLDkgJiM0MzsxMzE2LDcgQEAgdW5zaWduZWQgbG9uZyB6c19tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsCiAJaWYgKCFoYW5kbGUpCiAJCXJldHVybiAodW5zaWduZWQgbG9uZylFUlJfUFRSKC1FTk9NRU0pOwogCi0JLyogZXh0cmEgc3BhY2UgaW4gY2h1bmsgdG8ga2VlcCB0aGUgaGFuZGxlICovCi0Jc2l6ZSAmIzQzOz0gWlNfSEFORExFX1NJWkU7Ci0JY2xhc3MgPSBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTsKJiM0MzsJY2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTsKIAogCS8qIGNsYXNzLSZndDtsb2NrIGVmZmVjdGl2ZWx5IHByb3RlY3RzIHRoZSB6cGFnZSBtaWdyYXRpb24gKi8KIAlzcGluX2xvY2soJmFtcDtjbGFzcy0mZ3Q7bG9jayk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNTMKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyNzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBac21hbGxvYyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3pzbWFsbG9jLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBhIG5ldyBmdW5jdGlvbiwgYGxvb2t1cF9zaXplX2NsYXNzYC4gVGhleSYjMzk7cmUgdXNpbmcgaXQgaW4gYm90aCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AuIExldCYjMzk7cyBzZWUuLi4gdGhlIGFsdGVyYXRpb24gdG8gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgbG9va3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaDoKCmBgYGMKLQljbGFzcyA9IHBvb2wtJmd0O3NpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSldOwomIzQzOwljbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpOwpgYGAKCkJ1dCB3YWl0IGEgc2Vjb25kLi4uIGBsb29rdXBfc2l6ZV9jbGFzc2AgaXMgKmFkZGluZyogYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgaW5wdXQgYHNpemVgICpiZWZvcmUqIGNhbGxpbmcgYGdldF9zaXplX2NsYXNzX2luZGV4YC4gU28sIGVmZmVjdGl2ZWx5LCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBub3cgKmluY29ycG9yYXRpbmcqIGBaU19IQU5ETEVfU0laRWAgaW50byBpdHMgc2l6ZSBjYWxjdWxhdGlvbiEgVGhhdCYjMzk7cyBhIGRlZmluaXRlIGJlaGF2aW9yIHNoaWZ0LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGluIG1pbmQuCgpOb3csIGluIGB6c19tYWxsb2NgLCBpdCYjMzk7cyBiZWVuIHJlZmFjdG9yZWQgaW4gYSBzaW1pbGFyIHdheToKCmBgYGMKLQkvKiBleHRyYSBzcGFjZSBpbiBjaHVuayB0byBrZWVwIHRoZSBoYW5kbGUgKi8KLQlzaXplICYjNDM7PSBaU19IQU5ETEVfU0laRTsKLQljbGFzcyA9IHBvb2wtJmd0O3NpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSldOwomIzQzOwljbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpOwpgYGAKCkhlcmUsIGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZy4gSSYjMzk7bSB0YWtpbmcgdGhlIHByZXZpb3VzIGFkZGl0aW9uIG9mIGBaU19IQU5ETEVfU0laRWAgYW5kIG1vdmluZyBpdCBpbnRvIGBsb29rdXBfc2l6ZV9jbGFzc2AuIFRoYXQmIzM5O3MgY2xlYW5lciwgc3VyZSwgYnV0IHRoZSBlZmZlY3Qgb2YgdGhlIGNoYW5nZSBpcyBuZXV0cmFsLCB3aGVyZWFzIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLCBpdCYjMzk7cyBpbnRyb2R1Y2luZyBhIHN1YnRsZSBjaGFuZ2UgaW4gdGhlIGV4cGVjdGVkIGJlaGF2aW9yLgoKSSYjMzk7bSBzdGFydGluZyB0byB0aGluayB0aGlzIGlzIGEgYml0IGRlY2VwdGl2ZSwgYXMgaXQgZG9lc24mIzM5O3QgaW1tZWRpYXRlbHkgcmV2ZWFsIHRoZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yLiBJdCYjMzk7cyBhIHJlZmFjdG9yaW5nLCBidXQgaXQmIzM5O3MgKmZ1bmN0aW9uYWxseSogY2hhbmdpbmcgaG93IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIG9wZXJhdGVzLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBkZWVwZXIgaW50byBob3cgYFpTX0hBTkRMRV9TSVpFYCBpcyBhY3R1YWxseSAqdXNlZCogdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQsIGFuZCBpZiBzbywgaXQgbmVlZHMgdmVyeSBjYXJlZnVsIGRvY3VtZW50YXRpb24uIExldCYjMzk7cyBkaWcgaW50byBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhZ2FpbiBhbmQgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7enNfbG9va3VwX2NsYXNzX2luZGV4JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3Ni1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzc6XHRjbGFzc19pbmRleF9vbGQgPSB6c19sb29rdXBfY2xhc3NfaW5kZXgoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW5fb2xkKTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzg6XHRjbGFzc19pbmRleF9uZXcgPSB6c19sb29rdXBfY2xhc3NfaW5kZXgoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW5fbmV3KTtcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzktXG4tLVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oPTM3PXVuc2lnbmVkIGxvbmcgenNfY29tcGFjdChzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzgtXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg6Mzk6dW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpO1xuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTQwLVxuLS1cbm1tL3pzbWFsbG9jLmM9MTAwOT1zdGF0aWMgYm9vbCB6c3BhZ2VfZW1wdHkoc3RydWN0IHpzcGFnZSAqenNwYWdlKVxuLS1cbm1tL3pzbWFsbG9jLmMtMTAxNC0vKipcbm1tL3pzbWFsbG9jLmM6MTAxNTogKiB6c19sb29rdXBfY2xhc3NfaW5kZXgoKSAtIFJldHVybnMgaW5kZXggb2YgdGhlIHpzbWFsbG9jIFx1MDAyNnNpemVfY2xhc3Ncbm1tL3pzbWFsbG9jLmMtMTAxNi0gKiB0aGF0IGhvbGQgb2JqZWN0cyBvZiB0aGUgcHJvdmlkZWQgc2l6ZS5cbi0tXG5tbS96c21hbGxvYy5jLTEwMjQtICovXG5tbS96c21hbGxvYy5jOjEwMjU6dW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpXG5tbS96c21hbGxvYy5jLTEwMjYte1xuLS1cbm1tL3pzbWFsbG9jLmMtMTAzMi19XG5tbS96c21hbGxvYy5jOjEwMzM6RVhQT1JUX1NZTUJPTF9HUEwoenNfbG9va3VwX2NsYXNzX2luZGV4KTtcbm1tL3pzbWFsbG9jLmMtMTAzNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB6c21hbGxvYyBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHR3ZWFraW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLiBUaGUgY3J1Y2lhbCBkZXRhaWwgaXMgdGhhdCBpdCYjMzk7cyAqYWRkaW5nKiBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplIGNhbGN1bGF0aW9uLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIG1hbmFnaW5nIHRoZSBoYW5kbGVzIHdpdGhpbiBgenNtYWxsb2NgLCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgaW5kZXggY2FsY3VsYXRpb24gb24gb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgYW5kIGZyYWdtZW50YXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGNoYW5nZSBpcyBuZWNlc3NhcnkuCgpUaGUgY29kZSBwYXRoIGludm9sdmVkLCBhdCBsZWFzdCBiYXNlZCBvbiB0aGUgY29udGV4dCBoZXJlLCBpcyBgcmVjb21wcmVzc19zbG90YCBpbiBgenJhbV9kcnYuY2AuIEdvb2QsIHRoYXQgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiBpbXBhY3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBiZWluZyB1dGlsaXplZCB3aXRoaW4gdGhhdCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoZSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIG9wZXJhdGlvbnMgaW4gYHpyYW1gLgoKQmVmb3JlIGRpZ2dpbmcgaW50byB0aGUgY29kZSB0b28gZGVlcGx5LCBJIHdpbGwgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0JiMzOTtzIHNlZSAtIGBDT05GSUdfWlJBTWAgYW5kIGBDT05GSUdfWlNNQUxMT0NgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgY2hlY2sgdGhvc2UgdG8gZW5zdXJlIG15IGFzc3VtcHRpb25zIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHNjb3BlIG9mIHRoaXMgY2hhbmdlIGFyZSBvbiBwb2ludCBiZWZvcmUgZ2V0dGluZyBhbnkgZGVlcGVyLiBUaGF0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcCB0aGF0IEkgc2hvdWxkbiYjMzk7dCBza2lwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaU01BTExPQyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTExND1jb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXG4tLVxubW0vS2NvbmZpZy0xMjQtXG5tbS9LY29uZmlnOjEyNTpjb25maWcgWlNNQUxMT0Ncbm1tL0tjb25maWctMTI2LVx0dHJpc3RhdGVcbi0tXG5tbS9LY29uZmlnPTEzMz1jb21tZW50IFwmIzM0O1pzbWFsbG9jIGlzIGEgY29tbW9uIGJhY2tlbmQgYWxsb2NhdG9yIGZvciB6c3dhcCBcdTAwMjYgenJhbVwmIzM0O1xubW0vS2NvbmZpZy0xMzQtXG5tbS9LY29uZmlnOjEzNTpjb25maWcgWlNNQUxMT0NfU1RBVFxubW0vS2NvbmZpZy0xMzYtXHRib29sIFwmIzM0O0V4cG9ydCB6c21hbGxvYyBzdGF0aXN0aWNzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDMtXG5tbS9LY29uZmlnOjE0NDpjb25maWcgWlNNQUxMT0NfQ0hBSU5fU0laRVxubW0vS2NvbmZpZy0xNDUtXHRpbnQgXCYjMzQ7TWF4aW11bSBudW1iZXIgb2YgcGh5c2ljYWwgcGFnZXMgcGVyLXpzcGFnZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKlpSQU0gQ29uZmlndXJhdGlvbiBDaGVjayoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgY29uZmlnIFpSQU1gLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIHdoZW4gY29uc2lkZXJpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgZXNwZWNpYWxseSBmb3IgcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzIG9yIHN5c3RlbXMgd2l0aCBwb3RlbnRpYWxseSBoZWF2eSBJL08gd29ya2xvYWRzLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiBaUkFNIGlzIGN1cnJlbnRseSBlbmFibGVkLCBhbmQgaWYgc28sIHdoYXQgdGhlIGV4aXN0aW5nIHBhcmFtZXRlcnMgYXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIHZpdGFsIGJlZm9yZSB3ZSBjYW4gYXNzZXNzIGl0cyBlZmZlY3RpdmVuZXNzIG9yIGNvbnNpZGVyIGFueSBvcHRpbWl6YXRpb25zLiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIGFsbG9jYXRlZCBzaXplLCBjb21wcmVzc2lvbiBhbGdvcml0aG0sIGFuZCBhbnkgb3RoZXIgcmVsZXZhbnQgdHVuYWJsZSBwYXJhbWV0ZXJzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGN1cnJlbnQgc3RhdGUuIEZyb20gdGhlcmUsIHdlIGNhbiBiZWdpbiB0byB0cm91Ymxlc2hvb3QgYW5kIHNlZSBpZiB3ZSBjYW4gZG8gYmV0dGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBaUkFNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjpjb25maWcgWlJBTVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O0NvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yNC1cdGJvb2wgXCYjMzQ7bHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Mjk6Y29uZmlnIFpSQU1fQkFDS0VORF9aU1REXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7enN0ZCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Mi1cdGJvb2wgXCYjMzQ7ODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQ3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cdGRlcGVuZHMgb24gWlJBTVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTU0LVx0Ym9vbCBcJiMzNDtsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0OyBpZiAhWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02Ni1cdGJvb2wgXCYjMzQ7bHpvLXJsZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Njk6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7bHpvXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVx0Ym9vbCBcJiMzNDtsejRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7bHo0aGNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjgxOmNvbmZpZyBaUkFNX0RFRl9DT01QX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cdGJvb2wgXCYjMzQ7ZGVmbGF0ZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cdHN0cmluZ1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEwNzpjb25maWcgWlJBTV9XUklURUJBQ0tcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcJiMzNDtXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjEyMTpjb25maWcgWlJBTV9UUkFDS19FTlRSWV9BQ1RJTUVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cdGJvb2wgXCYjMzQ7VHJhY2sgYWNjZXNzIHRpbWUgb2YgenJhbSBlbnRyaWVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTI4LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVx0Ym9vbCBcJiMzNDtUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNDEtXHRib29sIFwmIzM0O0VuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTYzMwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQYXRjaDogRml4aW5nIGEgWlJBTSBNZW1vcnkgQWxsb2NhdGlvbiBCdWcqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSBtb2RpZnlpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIFRoZSBjb3JlIGNoYW5nZSBpcyB0byBtYWtlIGl0IGNhbGwgYGxvb2t1cF9zaXplX2NsYXNzYCBhbmQsIGNyaXRpY2FsbHksICphZGQqIGBaU19IQU5ETEVfU0laRWAgdG8gdGhlIHNpemUgYmVpbmcgbG9va2VkIHVwLiBBaCwgdGhhdCYjMzk7cyB0aGUga2V5LiBUaGlzIGFsbW9zdCBjZXJ0YWlubHkgcmVzb2x2ZXMgYSBidWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYHpzX21hbGxvY2Agd2FzIGFkZGluZyBgWlNfSEFORExFX1NJWkVgIHdoZW4gKmFsbG9jYXRpbmcqIG1lbW9yeSwgYnV0IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdhc24mIzM5O3QgYWNjb3VudGluZyBmb3IgaXQgd2hlbiBkZXRlcm1pbmluZyB0aGUgKmNsYXNzKiBvZiB0aGF0IGFsbG9jYXRpb24uIFNvLCB0aGUgaW5kZXggd2FzIG9mZiwgbGVhZGluZyB0by4uLiB3ZWxsLCB3aG8ga25vd3Mgd2hhdCBraW5kIG9mIG1lbW9yeSBjb3JydXB0aW9uIG9yIHBlcmZvcm1hbmNlIGlzc3Vlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGNsZWFyIGFuZCBlc3NlbnRpYWwgZml4LgoKVGhlIGZ1bmN0aW9ucyB0byByZWFsbHkgZm9jdXMgb24gaGVyZSBhcmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLCBvZiBjb3Vyc2UuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gdGhvc2UsIGxpbmUgYnkgbGluZSwgdG8gc2VlIHRoZSBleGFjdCBjb250ZXh0LiBBbmQgdGhlbiwgdGhlcmUmIzM5O3MgYHJlY29tcHJlc3Nfc2xvdGAgaW4gYHpyYW1fZHJ2LmNgLiBUaGF0JiMzOTtzIGFuIGludGVyZXN0aW5nIG9uZTsgaXQgc2VlbXMgdG8gYmUgdXNpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYXMgd2VsbC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBpZiB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGNvZGViYXNlIHRvIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJdCBjb3VsZCBiZSBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjb21wcmVzc19zbG90JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIzNzg9c3RhdGljIHZvaWQgc2Nhbl9zbG90c19mb3JfcmVjb21wcmVzcyhzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIG1vZGUsIHUzMiBwcmlvLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MjItICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDIzOnN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQyNC1cdFx0XHQgICB1NjQgKm51bV9yZWNvbXBfcGFnZXMsIHUzMiB0aHJlc2hvbGQsIHUzMiBwcmlvKVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI1Mjk9c3RhdGljIHNzaXplX3QgcmVjb21wcmVzc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjY1MC1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI2NTE6XHRcdGVyciA9IHJlY29tcHJlc3Nfc2xvdCh6cmFtLCBwcHMtXHUwMDNlaW5kZXgsIHBhZ2UsXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNjUyLVx0XHRcdFx0ICAgICAgXHUwMDI2bnVtX3JlY29tcF9wYWdlcywgdGhyZXNob2xkLCBwcmlvKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbXByZXNzaW9uIE9wdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHJlY29tcHJlc3Nfc3RvcmVgIGF0dHJpYnV0ZSwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgc3lzZnMuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGRlbHZlIGludG8gdGhlIG1lbW9yeSBjb21wcmVzc2lvbiBsYW5kc2NhcGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIGhvdyBgWlJBTWAgYW5kIGBaU01BTExPQ2AgYXJlIGNvbmZpZ3VyZWQuIE9mIGNvdXJzZSwgYFpSQU1gIHJlbGllcyBvbiBgQkxPQ0tgLCBzbyB0aGF0JiMzOTtzIGEgZGVwZW5kZW5jeSBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBBbmQgaXQgbG9va3MgbGlrZSBgWlNNQUxMT0NgIGRlcGVuZHMgb24gYE1NVWAuIEp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGFsc28gYnJpZWZseSBjaGVjayBvdXQgYFpTV0FQYCBhbmQgaXRzIGNvbmZpZ3VyYXRpb24uIEkgd2FudCB0byBidWlsZCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGxhbmRzY2FwZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpTV0FQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTI9bWVudWNvbmZpZyBTV0FQXG4tLVxubW0vS2NvbmZpZy0yMS1cbm1tL0tjb25maWc6MjI6Y29uZmlnIFpTV0FQXG5tbS9LY29uZmlnLTIzLVx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0zNC1cbm1tL0tjb25maWc6MzU6Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbm1tL0tjb25maWctMzYtXHRib29sIFwmIzM0O0VuYWJsZSB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy00NC1cbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cbm1tL0tjb25maWctNDYtXHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbi0tXG5tbS9LY29uZmlnPTU5PWNob2ljZVxuLS1cbm1tL0tjb25maWctNzYtXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxubW0vS2NvbmZpZy03OC1cdGJvb2wgXCYjMzQ7RGVmbGF0ZVwmIzM0O1xuLS1cbm1tL0tjb25maWctODItXG5tbS9LY29uZmlnOjgzOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFpPXG5tbS9LY29uZmlnLTg0LVx0Ym9vbCBcJiMzNDtMWk9cJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg4LVxubW0vS2NvbmZpZzo4OTpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXzg0MlxubW0vS2NvbmZpZy05MC1cdGJvb2wgXCYjMzQ7ODQyXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05NC1cbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcbm1tL0tjb25maWctOTYtXHRib29sIFwmIzM0O0xaNFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTAwLVxubW0vS2NvbmZpZzoxMDE6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRIQ1xubW0vS2NvbmZpZy0xMDItXHRib29sIFwmIzM0O0xaNEhDXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xMDYtXG5tbS9LY29uZmlnOjEwNzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX1pTVERcbm1tL0tjb25maWctMTA4LVx0Ym9vbCBcJiMzNDt6c3RkXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz0xMTI9ZW5kY2hvaWNlXG5tbS9LY29uZmlnLTExMy1cbm1tL0tjb25maWc6MTE0OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRcbm1tL0tjb25maWctMTE1LSAgICAgICBzdHJpbmdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE2NQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gdGhlIGNvZGUgY2hhbmdlIGlzIG5lc3RsZWQgd2l0aGluIGBtbS96c21hbGxvYy5jYCwgd2hpY2ggbWFrZXMgc2Vuc2UgZ2l2ZW4gdGhlIGNvbnRleHQuIE15IGluaXRpYWwgZm9jdXMgbmVlZHMgdG8gYmUgb24gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLiBJIGFscmVhZHkga25vdyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBleHBvcnRlZCwgYW5kIGB6cmFtX2Rydi5jYCBsZXZlcmFnZXMgaXQuIFNpbWlsYXJseSwgYHpzX21hbGxvY2AgaXMgZXhwb3NlZCBmb3IgdXNlIGJ5IGJvdGggYHpyYW1fZHJ2LmNgIGFuZCBgenN3YXAuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB0byB1bmRlcnN0YW5kIHRoZSBleHRlbnQgb2YgdGhlIGNoYW5nZSwgc28gbGV0JiMzOTtzIGNoZWNrIHdobyYjMzk7cyBjYWxsaW5nIGB6c19tYWxsb2NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIHVzaW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt6c19tYWxsb2MmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Q9MTA9b3IgeW91IGNhbiBkaXJlY3RseSByZXF1ZXN0IHBhZ2VzIGZyb20gdGhlIHBhZ2UgYWxsb2NhdG9yIHdpdGhcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTExLWBhbGxvY19wYWdlc2AuIEl0IGlzIGFsc28gcG9zc2libGUgdG8gdXNlIG1vcmUgc3BlY2lhbGl6ZWQgYWxsb2NhdG9ycyxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0OjEyOmZvciBpbnN0YW5jZSBgY21hX2FsbG9jYCBvciBgenNfbWFsbG9jYC5cbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTEzLVxuLS1cbkRvY3VtZW50YXRpb24vbW0venNtYWxsb2MucnN0PTIyPXVuY29tcHJlc3NlZCBmb3JtKS4gRm9yIGFsbG9jYXRpb24gcmVxdWVzdHMgbGFyZ2VyIHRoYW4gdGhpcyBzaXplLCBmYWlsdXJlXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdDoyMzppcyByZXR1cm5lZCAoc2VlIHpzX21hbGxvYykuXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdC0yNC1cbkRvY3VtZW50YXRpb24vbW0venNtYWxsb2MucnN0OjI1OkFkZGl0aW9uYWxseSwgenNfbWFsbG9jKCkgZG9lcyBub3QgcmV0dXJuIGEgZGVyZWZlcmVuY2VhYmxlIHBvaW50ZXIuXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdC0yNi1JbnN0ZWFkLCBpdCByZXR1cm5zIGFuIG9wYXF1ZSBoYW5kbGUgKHVuc2lnbmVkIGxvbmcpIHdoaWNoIGVuY29kZXMgYWN0dWFsXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0PTE5PUxpbnV45Li65YaF5a2Y5YiG6YWN5o+Q5L6b5LqG5aSa56eNQVBJ44CC5L2g5Y+v5Lul5L2/55SoIGBrbWFsbG9jYCDmiJYgYGttZW1fY2FjaGVfYWxsb2NgXG4tLVxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTIxLeS9oOWPr+S7peeUqCBhbGxvY19wYWdlcyDnm7TmjqXlkJHpobXpnaLliIbphY3lmajor7fmsYLpobXpnaLjgILkuZ/lj6/ku6Xkvb/nlKjmm7TkuJPkuJrnmoTliIbphY3lmajvvIxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdDoyMjrkvovlpoIgYGNtYV9hbGxvY2Ag5oiWIGB6c19tYWxsb2NgIOOAglxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTIzLVxuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdD0xMD16c21hbGxvY1xuLS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdC0yMy3opoHmsYLvvIjlnKjmnIDlnY/nmoTmg4XlhrXkuIvvvIzpobXpnaLmmK/kuI3lj6/ljovnvKnnmoTvvIzlm6DmraTku6VcJiMzNDvljp/moLdcJiMzNDvljbPmnKrljovnvKnnmoTlvaLlvI/lrZjlgqjvvInjgILlr7nkuo7lpKfkuo7ov5lcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdDoyNDrkuKrlpKflsI/nmoTliIbphY3or7fmsYLvvIzkvJrov5Tlm57lpLHotKXvvIjop4F6c19tYWxsb2PvvInjgIJcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdC0yNS1cbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdDoyNjrmraTlpJbvvIx6c19tYWxsb2MoKeW5tuS4jei/lOWbnuS4gOS4quWPr+mHjeWkjeW8leeUqOeahOaMh+mSiOOAguebuOWPje+8jOWug+i/lOWbnuS4gOS4quS4jemAj+aYjueahOWPpeafhO+8iOaXoOespuWPt1xuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0venNtYWxsb2MucnN0LTI3LemVv++8ie+8jOWug+e8lueggeS6huiiq+WIhumFjeWvueixoeeahOWunumZheS9jee9ruOAgui/meenjemXtOaOpeaAp+eahOWOn+WboOaYr3pzbWFsbG9j5bm25LiN5L+d5oyBenNwYWdlc+eahOawuOS5hVxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjk9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjM5LVx0ICovXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyMjQwOlx0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIFBBR0VfU0laRSxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyNDEtXHRcdFx0ICAgR0ZQX05PSU8gfCBfX0dGUF9OT1dBUk4gfFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNzA9c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjMwMi1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMDM6XHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cdTAwM2VtZW1fcG9vbCwgY29tcF9sZW4sXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzA0LVx0XHRcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDIzPXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDUtXHQgKi9cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MDY6XHRoYW5kbGVfbmV3ID0genNfbWFsbG9jKHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX25ldyxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDctXHRcdFx0ICAgICAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcbi0tXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg9Mjg9dm9pZCB6c19kZXN0cm95X3Bvb2woc3RydWN0IHpzX3Bvb2wgKnBvb2wpO1xuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTI5LVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjMwOnVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzEtXHRcdFx0Y29uc3QgaW50IG5pZCk7XG4tLVxubW0venNtYWxsb2MuYz0xMjQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG9ial9tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4tLVxubW0venNtYWxsb2MuYy0xMjkwLS8qKlxubW0venNtYWxsb2MuYzoxMjkxOiAqIHpzX21hbGxvYyAtIEFsbG9jYXRlIGJsb2NrIG9mIGdpdmVuIHNpemUgZnJvbSBwb29sLlxubW0venNtYWxsb2MuYy0xMjkyLSAqIEBwb29sOiBwb29sIHRvIGFsbG9jYXRlIGZyb21cbi0tXG5tbS96c21hbGxvYy5jLTEzMDAtICovXG5tbS96c21hbGxvYy5jOjEzMDE6dW5zaWduZWQgbG9uZyB6c19tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsXG5tbS96c21hbGxvYy5jLTEzMDItXHRcdFx0Y29uc3QgaW50IG5pZClcbi0tXG5tbS96c21hbGxvYy5jLTEzNTUtfVxubW0venNtYWxsb2MuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7XG5tbS96c21hbGxvYy5jLTEzNTctXG4tLVxubW0venNtYWxsb2MuYz0yMDc0PXN0cnVjdCB6c19wb29sICp6c19jcmVhdGVfcG9vbChjb25zdCBjaGFyICpuYW1lKVxuLS1cbm1tL3pzbWFsbG9jLmMtMjExOS1cdFx0XHQgKiBUaGUgb2JqZWN0IHVzZXMgWlNfSEFORExFX1NJWkUgYnl0ZXMgdG8gc3RvcmUgdGhlXG5tbS96c21hbGxvYy5jOjIxMjA6XHRcdFx0ICogaGFuZGxlLiBXZSBuZWVkIHRvIHN1YnRyYWN0IGl0LCBiZWNhdXNlIHpzX21hbGxvYygpXG5tbS96c21hbGxvYy5jLTIxMjEtXHRcdFx0ICogdW5jb25kaXRpb25hbGx5IGFkZHMgaGFuZGxlIHNpemUgYmVmb3JlIGl0IHBlcmZvcm1zXG4tLVxubW0venN3YXAuYz04NDA9c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4tLVxubW0venN3YXAuYy04OTktXHRnZnAgPSBHRlBfTk9XQUlUIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFO1xubW0venN3YXAuYzo5MDA6XHRoYW5kbGUgPSB6c19tYWxsb2MocG9vbC1cdTAwM2V6c19wb29sLCBkbGVuLCBnZnAsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcbm1tL3pzd2FwLmMtOTAxLVx0aWYgKElTX0VSUl9WQUxVRShoYW5kbGUpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAyNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBac21hbGxvYyBQYXRjaCBmb3IgRW5oYW5jZWQgTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gdGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIGFkZHJlc3NpbmcgYW4gaXNzdWUgd2l0aGluIHRoZSBgenNtYWxsb2NgIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGltcGFjdGluZyBgenJhbV9kcnYuY2AgYW5kIGB6c3dhcC5jYC4gTXkgaW5pdGlhbCBhbmFseXNpcyBwb2ludHMgdG8gYSBmbGF3IGluIGhvdyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBjYWxjdWxhdGVzIHRoZSBjbGFzcyBpbmRleCB3aGVuIGFsbG9jYXRpbmcgbWVtb3J5LCBwYXJ0aWN1bGFybHkgaW4gdGhlIGB6cmFtYCBhbmQgYHpzd2FwYCBjb250ZXh0cy4gVGhlIGJ1ZyBpbnZvbHZlcyBhIG1pc3NpbmcgYFpTX0hBTkRMRV9TSVpFYCBhZGRpdGlvbiwgd2hpY2ggaXMgY3J1Y2lhbCBmb3IgYWNjdXJhdGUgaW5kZXhpbmcuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgYnVnIGZpeCwgYXMgaXQgZGlyZWN0bHkgaW1wYWN0cyBtZW1vcnkgYWxsb2NhdGlvbi4KCk15IGZvY3VzIG5lZWRzIHRvIGJlIG9uIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCwgdGhlIGtleSBmdW5jdGlvbnMgaGVyZS4gVG8gcHJvcGVybHkgZXZhbHVhdGUgdGhlIHBhdGNoJiMzOTtzIHNjb3BlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgWlNNQUxMT0NgLCBgWlJBTWAsIGFuZCBgWlNXQVBgLiBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gZW5zdXJlIHRoZXNlIGFyZSBlbmFibGVkIGFuZCBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgZGVwZW5kZW5jaWVzLiBgWlNNQUxMT0NgIGRlcGVuZHMgb24gYE1NVWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgWlJBTWAgcmVsaWVzIG9uIGBCTE9DS2AsIGFuZCBgWlNXQVBgIGNsZWFybHkgbmVlZHMgYFNXQVBgLiBUaGF0JiMzOTtzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gSnVzdCB0byBjb25maXJtLCBsZXQmIzM5O3MgcmUtdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXM6IGBaU1dBUGAgZGVwZW5kcyBvbiBgU1dBUGAsIGBaUkFNYCBkZXBlbmRzIG9uIGBCTE9DS2AsIGFuZCBgWlNNQUxMT0NgIGhhcyB0aGUgYE1NVWAgcmVxdWlyZW1lbnQuIFNlZW1zIEkmIzM5O20gcmlnaHQgYWJvdXQgYFpSQU1gJiMzOTtzIGRlcGVuZGVuY2llcyB0b28uIEFsbCB0aGlzIGluZm9ybWF0aW9uIGlzIGNyaXRpY2FsIGluIHVuZGVyc3RhbmRpbmcgdGhlIGNvcnJlY3QgY29udGV4dCBmb3IgdGhpcyBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFpSQU0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7Q29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xOC1cdGJvb2wgXCYjMzQ7bHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjIzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVx0Ym9vbCBcJiMzNDtsejRoYyBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDt6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMzYtXHRib29sIFwmIzM0O2RlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDE6Y29uZmlnIFpSQU1fQkFDS0VORF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVx0Ym9vbCBcJiMzNDs4NDIgY29tcHJlc3Npb24gc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVx0ZGVwZW5kcyBvbiBaUkFNXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo1Mzpjb25maWcgWlJBTV9CQUNLRU5EX0xaT1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXHRib29sIFwmIzM0O2x6byBhbmQgbHpvLXJsZSBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7IGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9NjA9Y2hvaWNlXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2NTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9STEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVx0Ym9vbCBcJiMzNDtsem8tcmxlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVx0Ym9vbCBcJiMzNDtsem9cJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzQtXHRib29sIFwmIzM0O2x6NFwmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6Nzc6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFo0SENcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVx0Ym9vbCBcJiMzNDtsejRoY1wmIzM0O1xuLS1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXHRib29sIFwmIzM0O3pzdGRcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg2LVx0Ym9vbCBcJiMzNDtkZWZsYXRlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4OTpjb25maWcgWlJBTV9ERUZfQ09NUF84NDJcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVx0Ym9vbCBcJiMzNDs4NDJcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz05Mz1lbmRjaG9pY2VcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk2LVx0c3RyaW5nXG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA2LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFwmIzM0O1dyaXRlIGJhY2sgaW5jb21wcmVzc2libGUgb3IgaWRsZSBwYWdlIHRvIGJhY2tpbmcgZGV2aWNlXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIwLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVx0Ym9vbCBcJiMzNDtUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcJiMzNDtcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMzAtXHRib29sIFwmIzM0O1RyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXCYjMzQ7XG4tLVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTQwOmNvbmZpZyBaUkFNX01VTFRJX0NPTVBcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cdGJvb2wgXCYjMzQ7RW5hYmxlIG11bHRpcGxlIGNvbXByZXNzaW9uIHN0cmVhbXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA5NDcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipaUkFNIERlcGVuZGVuY2llczogQSBRdWljayBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBqdXN0IHF1aWNrbHkgdHJ5aW5nIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBgWlJBTWAgbW9kdWxlJiMzOTtzIGFyY2hpdGVjdHVyZSBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGxhdGVzdCBjaGFuZ2VzLiBJIGhhZCBhIG5hZ2dpbmcgZmVlbGluZyB0aGF0IGl0IHdhc24mIzM5O3QgYXMgc2VsZi1jb250YWluZWQgYXMgSSBpbml0aWFsbHkgdGhvdWdodCwgYW5kIHN1cmUgZW5vdWdoLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGF0IGl0cyBrZXkgZGVwZW5kZW5jaWVzIGFyZS4gUmlnaHQsIHNvIGBaUkFNYCByZWxpZXMgb24gYEJMT0NLYCwgbmF0dXJhbGx5LCBhbmQgdGhlbiB3ZSBoYXZlIGBTWVNGU2AgZm9yIHRoZSBpbnRlcmZhY2UsIGFuZCBhbHNvIGBaU01BTExPQ2AgZm9yIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uLiBGaW5hbGx5LCBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IGludGVncmF0ZXMgd2l0aCBgQ1JZUFRPYCBmb3IgY29tcHJlc3Npb24gYW5kLCBwb3NzaWJseSwgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBjb21wcmVzc2VkIFJBTSBkaXNrLiBHaXZlbiB0aGlzIHNldHVwLCBhIHF1aWNrIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2Agd2lsbCBwcm9iYWJseSBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IGZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBjaGVjayBpdCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9ibG9jay96cmFtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0Y29uZmlnIFpSQU1cbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbXByZXNzZWQgUkFNIGJsb2NrIGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIEJMT0NLIFx1MDAyNlx1MDAyNiBTWVNGUyBcdTAwMjZcdTAwMjYgTU1VXG4gICA1Olx0XHRzZWxlY3QgWlNNQUxMT0NcbiAgIDY6XHRcdGhlbHBcbiAgIDc6XHRcdCAgQ3JlYXRlcyB2aXJ0dWFsIGJsb2NrIGRldmljZXMgY2FsbGVkIC9kZXYvenJhbVggKFggPSAwLCAxLCAuLi4pLlxuICAgODpcdFx0ICBQYWdlcyB3cml0dGVuIHRvIHRoZXNlIGRpc2tzIGFyZSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gbWVtb3J5XG4gICA5Olx0XHQgIGl0c2VsZi4gVGhlc2UgZGlza3MgYWxsb3cgdmVyeSBmYXN0IEkvTyBhbmQgY29tcHJlc3Npb24gcHJvdmlkZXNcbiAgMTA6XHRcdCAgZ29vZCBhbW91bnRzIG9mIG1lbW9yeSBzYXZpbmdzLlxuICAxMTpcdFxuICAxMjpcdFx0ICBJdCBoYXMgc2V2ZXJhbCB1c2UgY2FzZXMsIGZvciBleGFtcGxlOiAvdG1wIHN0b3JhZ2UsIHVzZSBhcyBzd2FwXG4gIDEzOlx0XHQgIGRpc2tzIGFuZCBtYXliZSBtYW55IG1vcmUuXG4gIDE0Olx0XG4gIDE1Olx0XHQgIFNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2Jsb2NrZGV2L3pyYW0ucnN0IGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAxNjpcdFxuICAxNzpcdGNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XG4gIDE4Olx0XHRib29sIFwmIzM0O2x6NCBjb21wcmVzc2lvbiBzdXBwb3J0XCYjMzQ7XG4gIDE5Olx0XHRkZXBlbmRzIG9uIFpSQU1cbiAgMjA6XHRcdHNlbGVjdCBMWjRfQ09NUFJFU1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1MTYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGZpcnN0LXBlcnNvbiBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQgaW4gdGhlIEtlcm5lbCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCBpdCBzZWVtcyB0aGUgYFpSQU1gIG1vZHVsZSBpcyBzZXQgdXAgdG8gdXRpbGl6ZSBgWlNNQUxMT0NgIGZvciBpdHMgdW5kZXJseWluZyBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgWlNXQVBgIGRlcGVuZHMgb24gYFpQT09MYCwgd2hpY2gsIGluIHR1cm4sICphbHNvKiB1dGlsaXplcyBgWlNNQUxMT0NgLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIEkgc2hvdWxkIHZlcmlmeSB0aGlzIGFzc3VtcHRpb24gYW5kIGRvdWJsZSBjaGVjayB0aGUgZGVwZW5kZW5jaWVzLiBMZXQmIzM5O3MgZ2V0IHRoZSBzb3VyY2UgY29kZSBvdXQgYW5kIGRpZyBpbnRvIGBtbS9LY29uZmlnYCB0byBjb25maXJtIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIEl04oCZcyBhbHdheXMgZ29vZCB0byBiZSBjZXJ0YWluLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHN1Y2ggY3JpdGljYWwgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAyMDpcdFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxuICAyMTpcdFxuICAyMjpcdGNvbmZpZyBaU1dBUFxuICAyMzpcdFx0Ym9vbCBcJiMzNDtDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXCYjMzQ7XG4gIDI0Olx0XHRkZXBlbmRzIG9uIFNXQVBcbiAgMjU6XHRcdHNlbGVjdCBDUllQVE9cbiAgMjY6XHRcdHNlbGVjdCBaU01BTExPQ1xuICAyNzpcdFx0aGVscFxuICAyODpcdFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xuICAyOTpcdFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cbiAgMzA6XHRcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cbiAgMzE6XHRcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXG4gIDMyOlx0XHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcbiAgMzM6XHRcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXG4gIDM0Olx0XG4gIDM1Olx0Y29uZmlnIFpTV0FQX0RFRkFVTFRfT05cbiAgMzY6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcJiMzNDtcbiAgMzc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgMzg6XHRcdGhlbHBcbiAgMzk6XHRcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjAzNgoJCQkJCQkJb3V0cHV0OiAxNjUKCQkJCQkJCXRob3VnaHRzOiAyNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFpTV0FQL1pTTUFMTE9DIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBzZWUgdGhhdCB0aGUgc3lzdGVtIGlzIGNob29zaW5nIGBaU01BTExPQ2Agd2hlbiBgWlNXQVBgIGlzIHNlbGVjdGVkLCB3aGljaCBtYWtlcyBzZW5zZSBmcm9tIGEgcGVyZm9ybWFuY2UgcGVyc3BlY3RpdmUuIFRvIGVuYWJsZSB0aGlzIGFyZWEgZm9yIHRlc3RpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgYFpTTUFMTE9DYCwgYFpSQU1gLCBhbmQgYFpTV0FQYCBhcmUgYWxsIGVuYWJsZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIFRoYXQgd2lsbCBiZSBteSBzdGFydGluZyBwb2ludC4gVGhlIGNydWNpYWwgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBkdXJpbmcgbXkgaW52ZXN0aWdhdGlvbiBhcmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLgoKQWhhISBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBvbmx5IHVzZWQgd2l0aGluIGB6cmFtX2Rydi5jYCwgd2hpY2ggZ2l2ZXMgbWUgYSBzbWFsbGVyLCBtb3JlIGZvY3VzZWQgYXJlYSB0byBleHBsb3JlIGluaXRpYWxseS4gV2hlcmVhcyBgenNfbWFsbG9jYCBpcyB1c2VkIGJ5IGJvdGggYHpyYW1fZHJ2LmNgIGFuZCBgenN3YXAuY2AuCgpJdCBsb29rcyBsaWtlIHRoZSBwcm92aWRlZCBwYXRjaCBhZGRyZXNzZXMgYW4gZXJyb3IgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgdGhhdCB3YXMgaW5jb3JyZWN0bHkgY2FsY3VsYXRpbmcgdGhlIGNsYXNzIGluZGV4LiBHaXZlbiB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiBhIGNsYXNzIGluZGV4IGVycm9yLCB0aGlzIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdvcnRoIGZ1enppbmcgdG8gZXhwbG9yZSB0aGUgc3lzdGVtIGJlaGF2aW9yIHVuZGVyIHZhcmlvdXMgc2NlbmFyaW9zLCBlc3BlY2lhbGx5IHNpbmNlIGl0IGRlYWxzIHdpdGggbWVtb3J5IGFsbG9jYXRpb24gYW5kIG1hbmFnZW1lbnQuCgpUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyB0byBgdHJ1ZWAuIE15IGBFbmFibGVDb25maWdzYCB3aWxsIGluY2x1ZGUgYFpTTUFMTE9DYCwgYFpSQU1gLCBhbmQgYFpTV0FQYCwgYW5kIG15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoYXQgdGhlc2UgZnVuY3Rpb25zIGFyZSBleHBvcnRlZC4gRXhjZWxsZW50LCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTCh6c19sb29rdXBfY2xhc3NfaW5kZXgpO2AgYW5kIGB6c19tYWxsb2NgIGlzIGV4cG9ydGVkIHdpdGggYEVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7YC4gTm93IHRoYXQgSSYjMzk7dmUgY29uZmlybWVkIGFsbCBvZiB0aGF0LCBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBteSBuZXh0IHN0ZXBzLgoKSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTTUFMTE9DJiMzNDssCiAgICAmIzM0O1pSQU0mIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c19sb29rdXBfY2xhc3NfaW5kZXgmIzM0OywKICAgICYjMzQ7enNfbWFsbG9jJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdoZXJlIGl0IHdhcyByZXR1cm5pbmcgdGhlIHdyb25nIGNsYXNzIGluZGV4IGJlY2F1c2UgaXQgZGlkbiYjMzk7dCBhZGQgYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSwgdW5saWtlIGB6c19tYWxsb2NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgenNtYWxsb2MgYWxsb2NhdG9yIGxvZ2ljLCB3aGljaCBpcyB1c2VkIGJ5IHpyYW0gYW5kIHpzd2FwLiBGdXp6aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtaU01BTExPQyYjMzQ7LAogICAgJiMzNDtaUkFNJiMzNDssCiAgICAmIzM0O1pTV0FQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7enNfbG9va3VwX2NsYXNzX2luZGV4JiMzNDssCiAgICAmIzM0O3pzX21hbGxvYyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCB3YXMgcmV0dXJuaW5nIHRoZSB3cm9uZyBjbGFzcyBpbmRleCBiZWNhdXNlIGl0IGRpZG4mIzM5O3QgYWRkIGBaU19IQU5ETEVfU0laRWAgdG8gdGhlIHNpemUsIHVubGlrZSBgenNfbWFsbG9jYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIHpzbWFsbG9jIGFsbG9jYXRvciBsb2dpYywgd2hpY2ggaXMgdXNlZCBieSB6cmFtIGFuZCB6c3dhcC4gRnV6emluZyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZml4IGlzIGNvcnJlY3QgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCBmYWlsZWQgdG8gYWNjb3VudCBmb3IgYFpTX0hBTkRMRV9TSVpFYCB3aGVuIGxvb2tpbmcgdXAgdGhlIHNpemUgY2xhc3MgaW5kZXgsIGNhdXNpbmcgaXQgdG8gcmV0dXJuIGFuIGluY29ycmVjdCAoc21hbGxlcikgY2xhc3MgaW5kZXguIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHVzZWQgYnkgenJhbSB0byBkZXRlcm1pbmUgaWYgcmVjb21wcmVzc2luZyBhbiBvYmplY3QgaXMgYmVuZWZpY2lhbCBieSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNsYXNzIGluZGljZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVjb21wcmVzc2lvbiBkZWNpc2lvbnMsIGJ1dCBpdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgaXNzdWVzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ0N2NlNDZiYzEyNTA3MmJkYTA2OGJlNjA0Y2EzYTY0MDg0ZmFhNDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyA5IDEyOjIwOjE3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmMKaW5kZXggODNmNTgyMGM0NWY5My4uNDFiMDNhOWVjZWMyNSAxMDA2NDQKLS0tIGEvbW0venNtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS96c21hbGxvYy5jCkBAIC00NzgsNiAmIzQzOzQ3OCwxMSBAQCBzdGF0aWMgaW50IGdldF9zaXplX2NsYXNzX2luZGV4KGludCBzaXplKQogCXJldHVybiBtaW5fdChpbnQsIFpTX1NJWkVfQ0xBU1NFUyAtIDEsIGlkeCk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IHNpemVfY2xhc3MgKmxvb2t1cF9zaXplX2NsYXNzKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUgJiM0MzsgWlNfSEFORExFX1NJWkUpXTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgY2xhc3Nfc3RhdF9hZGQoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBpbnQgdHlwZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgY250KQogewpAQCAtMTAyMSw3ICYjNDM7MTAyNiw3IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCBzaXplX2NsYXNzICpjbGFzczsKIAotCWNsYXNzID0gcG9vbC0mZ3Q7c2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07CiYjNDM7CWNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7CiAKIAlyZXR1cm4gY2xhc3MtJmd0O2luZGV4OwogfQpAQCAtMTMxMSw5ICYjNDM7MTMxNiw3IEBAIHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLAogCWlmICghaGFuZGxlKQogCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PTUVNKTsKIAotCS8qIGV4dHJhIHNwYWNlIGluIGNodW5rIHRvIGtlZXAgdGhlIGhhbmRsZSAqLwotCXNpemUgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFOwotCWNsYXNzID0gcG9vbC0mZ3Q7c2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07CiYjNDM7CWNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7CiAKIAkvKiBjbGFzcy0mZ3Q7bG9jayBlZmZlY3RpdmVseSBwcm90ZWN0cyB0aGUgenBhZ2UgbWlncmF0aW9uICovCiAJc3Bpbl9sb2NrKCZhbXA7Y2xhc3MtJmd0O2xvY2spOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI1MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFpzbWFsbG9jIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBtbS96c21hbGxvYy5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBhIHNwZWNpZmljIGlzc3VlIGluIGhvdyBzaXplIGNsYXNzZXMgYXJlIGxvb2tlZCB1cC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgaXQmIzM5O3MgaW50cm9kdWNpbmcgdGhlIGhlbHBlciBgbG9va3VwX3NpemVfY2xhc3NgIHRvIGhhbmRsZSB0aGUgYWRkaXRpb24gb2YgYFpTX0hBTkRMRV9TSVpFYCBiZWZvcmUgY2FsbGluZyBgZ2V0X3NpemVfY2xhc3NfaW5kZXgoKWAuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyByZXBsYWNpbmcgZGlyZWN0IGFycmF5IGxvb2t1cHMgd2l0aCB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIGNyaXRpY2FsIGNoYW5nZXMgYXJlIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCwgd2hlcmUgdGhlIG9yaWdpbmFsIGRpcmVjdCBhcnJheSBhY2Nlc3NlcyBhcmUgYmVpbmcgcmVwbGFjZWQgYnkgY2FsbHMgdG8gdGhpcyBoZWxwZXIuCgpIYW5nIG9uLi4uIGxldCBtZSBmb2N1cyBpbiBvbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gVGhlIG9yaWdpbmFsIGNvZGUgd2FzIGEgc3RyYWlnaHRmb3J3YXJkIGBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtgLiBOb3csIGl0JiMzOTtzIHVzaW5nIGBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKWAsIHdoaWNoIGV4cGxpY2l0bHkgYWRkcyBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplICpiZWZvcmUqIGNhbGN1bGF0aW5nIHRoZSBpbmRleC4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgLSB0aGlzIHNlZW1zIHRvIGJlIGNvcnJlY3RpbmcgYSBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgd2FzbiYjMzk7dCBwcm9wZXJseSBhY2NvdW50aW5nIGZvciBgWlNfSEFORExFX1NJWkVgIGR1cmluZyB0aGUgaW5kZXggbG9va3VwLiBUaGlzIGhhcyB0aGUgcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBpbXBsaWNhdGlvbnMgb24gbWVtb3J5IG1hbmFnZW1lbnQuCgpOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgcG9zc2libGUgY29uc2VxdWVuY2VzIGFuZCB3aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLiBUaGlzIGxpa2VseSBmaXhlcyBhIGJ1ZzogZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yLCBtb3JlIHN1YnRseSwgdGhlIHVzZSBvZiBhbiBpbmNvcnJlY3Qgc2l6ZSBjbGFzcyBpbmRleC4gVGhpcyB3b3VsZCBiZSBhIGJpZyBkZWFsIC0gbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzLiBBIHNtYWxsZXIgY2xhc3MgaW5kZXggdGhhbiBleHBlY3RlZCBpcyBhIG1lbW9yeSBpc3N1ZSwgYmVjYXVzZSBpdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyBhIHNtYWxsZXIgY2xhc3MgYW5kIHRodXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuCgpJIHdvbmRlciBhYm91dCB0aGUgc3BlY2lmaWNzIG9mIG1lbW9yeSBjb3JydXB0aW9uLCBhbmQgdGhlIHBvdGVudGlhbCBmb3IgcmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0IG1lIGNvbnNpZGVyIHRoZSBzY2VuYXJpby4gSWYgaXQgZG9lcyByZXR1cm4gYSBzbWFsbGVyIHNpemUgY2xhc3MsIHRoZSBjbGFzcyBpbmRleCByZXR1cm5lZCBjb3VsZCBiZSB3cm9uZy4gSWYgdGhpcyBpbmRleCBpcyB1c2VkLCBkb2VzIHRoaXMgbGVhZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyBleHBvc2VkPyBObywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IGEgd3Jvbmcgc2l6ZSBjbGFzcyAtIGl0JiMzOTtzIHN0aWxsIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0IG9mIGJvdW5kcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgS0FTQU4gY2FuZGlkYXRlLCB0aGF0JiMzOTtzIGZvciBzdXJlLgoKSSBuZWVkIHRvIGFuYWx5emUgd2hlcmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgaXMgYmVpbmcgdXNlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzX2xvb2t1cF9jbGFzc19pbmRleCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venNtYWxsb2MuYz0xMDA5PXN0YXRpYyBib29sIHpzcGFnZV9lbXB0eShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXG4tLVxubW0venNtYWxsb2MuYy0xMDE0LS8qKlxubW0venNtYWxsb2MuYzoxMDE1OiAqIHpzX2xvb2t1cF9jbGFzc19pbmRleCgpIC0gUmV0dXJucyBpbmRleCBvZiB0aGUgenNtYWxsb2MgXHUwMDI2c2l6ZV9jbGFzc1xubW0venNtYWxsb2MuYy0xMDE2LSAqIHRoYXQgaG9sZCBvYmplY3RzIG9mIHRoZSBwcm92aWRlZCBzaXplLlxuLS1cbm1tL3pzbWFsbG9jLmMtMTAyNC0gKi9cbm1tL3pzbWFsbG9jLmM6MTAyNTp1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbm1tL3pzbWFsbG9jLmMtMTAyNi17XG4tLVxubW0venNtYWxsb2MuYy0xMDMyLX1cbm1tL3pzbWFsbG9jLmM6MTAzMzpFWFBPUlRfU1lNQk9MX0dQTCh6c19sb29rdXBfY2xhc3NfaW5kZXgpO1xubW0venNtYWxsb2MuYy0xMDM0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDY4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkludmVzdGlnYXRpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgVXNhZ2UqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IGFsbCB0aGUgcGxhY2VzIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCAqc3BlY2lmaWNhbGx5KiBvdXRzaWRlIG9mIGBtbS96c21hbGxvYy5jYC4gV2UgYWxyZWFkeSBrbm93IGl0JiMzOTtzICp3aXRoaW4qIHRoZSB6c21hbGxvYyBpbXBsZW1lbnRhdGlvbiwgc28gdHJhY2tpbmcgZG93biB0aG9zZSBpbnRlcm5hbCB1c2VzIGlzbiYjMzk7dCB0aGUgcHJpb3JpdHkgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSAqZXh0ZXJuYWwqIGRlcGVuZGVuY2llcywgb3IgaWYgaXQmIzM5O3MgbW9yZSBzZWxmLWNvbnRhaW5lZC4gTG9jYXRpbmcgdGhlIGV4dGVybmFsIGNhbGxzIGlzIHdoZXJlIEkgc2hvdWxkIHN0YXJ0LiBJIHdpbGwgbmVlZCB0byB1c2UgYSB0b29sIHRvIGxvY2F0ZSBjcm9zcyBmaWxlIHJlZmVyZW5jZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzX2xvb2t1cF9jbGFzc19pbmRleCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDIzPXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzYtXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDc3Olx0Y2xhc3NfaW5kZXhfb2xkID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX29sZCk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDc4Olx0Y2xhc3NfaW5kZXhfbmV3ID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX25ldyk7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDc5LVxuLS1cbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaD0zNz11bnNpZ25lZCBsb25nIHpzX2NvbXBhY3Qoc3RydWN0IHpzX3Bvb2wgKnBvb2wpO1xuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTM4LVxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjM5OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTtcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaC00MC1cbi0tXG5tbS96c21hbGxvYy5jPTEwMDk9c3RhdGljIGJvb2wgenNwYWdlX2VtcHR5KHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcbi0tXG5tbS96c21hbGxvYy5jLTEwMTQtLyoqXG5tbS96c21hbGxvYy5jOjEwMTU6ICogenNfbG9va3VwX2NsYXNzX2luZGV4KCkgLSBSZXR1cm5zIGluZGV4IG9mIHRoZSB6c21hbGxvYyBcdTAwMjZzaXplX2NsYXNzXG5tbS96c21hbGxvYy5jLTEwMTYtICogdGhhdCBob2xkIG9iamVjdHMgb2YgdGhlIHByb3ZpZGVkIHNpemUuXG4tLVxubW0venNtYWxsb2MuYy0xMDI0LSAqL1xubW0venNtYWxsb2MuYzoxMDI1OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKVxubW0venNtYWxsb2MuYy0xMDI2LXtcbi0tXG5tbS96c21hbGxvYy5jLTEwMzItfVxubW0venNtYWxsb2MuYzoxMDMzOkVYUE9SVF9TWU1CT0xfR1BMKHpzX2xvb2t1cF9jbGFzc19pbmRleCk7XG5tbS96c21hbGxvYy5jLTEwMzQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMDgKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0MjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgWlJBTSBSZWNvbXByZXNzaW9uIExvZ2ljIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQgaW4gYHpyYW1fZHJ2LmNgIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBiZWluZyB1c2VkIHRvIGRldGVybWluZSBpZiBhIHJlY29tcHJlc3Npb24gaXMgd29ydGh3aGlsZS4gVGhlIGNvZGUgY29tcGFyZXMgYGNsYXNzX2luZGV4X29sZGAgYW5kIGBjbGFzc19pbmRleF9uZXdgIHRvIGRlY2lkZS4gTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0aGF0IG1heWJlIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLiBJIHdvbmRlcmVkIGlmIHRoZSBmdW5jdGlvbiB3YXNuJiMzOTt0IGhhbmRsaW5nIGBaU19IQU5ETEVfU0laRWAgY29ycmVjdGx5LCBhbmQgbWF5YmUgcmV0dXJuaW5nIGFuIG9mZi1ieS1vbmUgY2xhc3MgaW5kZXguIElmIHRoYXQgd2VyZSB0aGUgY2FzZSwgaXQgY291bGQgbGVhZCB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoLCBvZiBjb3Vyc2UsIHdvdWxkIGJlIGEgbXVjaCBiaWdnZXIgcHJvYmxlbS4KCkJ1dCB3YWl0LCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyAqanVzdCogcmV0dXJuaW5nIGFuIGluZGV4LiBJdCYjMzk7cyBub3QgaW52b2x2ZWQgd2l0aCBhbnkgbWVtb3J5IGFsbG9jYXRpb24gb3IgYWNjZXNzIGRpcmVjdGx5LiBTbywgSSBkb24mIzM5O3QgdGhpbmsgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIGlzc3VlIGhlcmUuCgpBaCwgSSBzZWUgaXQgbm93LiBUaGUgZml4IHNwZWNpZmljYWxseSBhZGRyZXNzZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIEl0IHdhc24mIzM5O3QgYWNjb3VudGluZyBmb3IgYFpTX0hBTkRMRV9TSVpFYCwgd2hpY2ggaXMgYWRkZWQgZHVyaW5nIHRoZSBgenNfbWFsbG9jYCBvcGVyYXRpb24uIFNvLCBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3YXMgdXNpbmcgdGhlICpyZXF1ZXN0ZWQqIHNpemUsIGJ1dCBgenNfbWFsbG9jYCB3YXMgYWN0dWFsbHkgYWxsb2NhdGluZyB3aXRoIHRoZSAqcmVxdWVzdGVkKiBzaXplICpwbHVzKiBgWlNfSEFORExFX1NJWkVgLgoKVGhhdCBtYWtlcyBzZW5zZS4gVGhpcyBtZWFucyBgenJhbWAgY291bGQgaW5jb3JyZWN0bHkgYmVsaWV2ZSB0aGF0IGFuIG9iamVjdCB3aWxsIGZpdCBpbiBhIHNtYWxsZXIgbWVtb3J5IGNsYXNzIHRoYW4gaXQgYWN0dWFsbHkgZG9lcy4gVGhpcyBsZWFkcyB0byB0aGUgcG9zc2liaWxpdHkgb2YgbWFraW5nIHN1Ym9wdGltYWwgcmVjb21wcmVzc2lvbiBjaG9pY2VzLiBUaGUgc3lzdGVtIG1pZ2h0IHRoaW5rIGl0IGlzIHNhdmluZyBzcGFjZSwgd2hlbiBpbiBmYWN0IGl0IGlzIG5vdC4gVGhpcyBtZWFucyB0aGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgYnVnLiBJdCB3b3VsZG4mIzM5O3QgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSBidXQgb25seSBhZmZlY3RzIHRoZSBjb21wYXJpc29uIG9mIGBjbGFzc19pbmRleF9vbGRgIGFuZCBgY2xhc3NfaW5kZXhfbmV3YCBkdXJpbmcgcmVjb21wcmVzc2lvbiBpbiB6cmFtLiBUaGlzIHdvdWxkIHByb2JhYmx5IG5vdCBldmVuIHRyaWdnZXIgS0FTQU4sIHVubGVzcyBpdCByZXN1bHRzIGluIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIGRvd24gdGhlIGxpbmUuCgpJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIGByZWNvbXByZXNzX3Nsb3RgIGZ1bmN0aW9uIGluIGB6cmFtX2Rydi5jYCB0byBiZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjbGFzc19pbmRleF9vbGQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNDIzPXN0YXRpYyBpbnQgcmVjb21wcmVzc19zbG90KHN0cnVjdCB6cmFtICp6cmFtLCB1MzIgaW5kZXgsIHN0cnVjdCBwYWdlICpwYWdlLFxuLS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MzAtXHR1bnNpZ25lZCBpbnQgY29tcF9sZW5fbmV3O1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQzMTpcdHVuc2lnbmVkIGludCBjbGFzc19pbmRleF9vbGQ7XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDMyLVx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X25ldztcbi0tXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDc2LVxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3NzpcdGNsYXNzX2luZGV4X29sZCA9IHpzX2xvb2t1cF9jbGFzc19pbmRleCh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9vbGQpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3OC1cdGNsYXNzX2luZGV4X25ldyA9IHpzX2xvb2t1cF9jbGFzc19pbmRleCh6cmFtLVx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9uZXcpO1xuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3OS1cbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0ODA6XHRpZiAoY2xhc3NfaW5kZXhfbmV3IFx1MDAzZT0gY2xhc3NfaW5kZXhfb2xkIHx8XG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDgxLVx0ICAgICh0aHJlc2hvbGQgXHUwMDI2XHUwMDI2IGNvbXBfbGVuX25ldyBcdTAwM2U9IHRocmVzaG9sZCkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDkgMTI6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTQ4NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEJ1ZyBpbiBacmFtIENvbXByZXNzaW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIHBpbm5lZCB0aGlzIGRvd24uIFRoZSBwcm9ibGVtYXRpYyBhcmVhIGlzIHNvbGVseSB3aXRoaW4gdGhlIGBpZiAoY2xhc3NfaW5kZXhfbmV3ICZndDs9IGNsYXNzX2luZGV4X29sZClgIGNvbmRpdGlvbi4gVGhlIHBvdGVudGlhbCBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIHpyYW0gY29tcHJlc3Npb24gYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHksIGlzIG1ha2luZyBmbGF3ZWQgZGVjaXNpb25zIGFib3V0IHdoZW4gdG8gcmV0YWluIGEgcmVjb21wcmVzc2VkIG9iamVjdC4gSXTigJlzIGEgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiBUaGF0JiMzOTtzIGEgcmVsaWVmOyBLTVNBTiBpc24mIzM5O3QgZ29pbmcgdG8gYmUgbmVjZXNzYXJ5IGZvciBkZWJ1Z2dpbmcgdGhpcy4KCk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBiZWNhdXNlIEkmIzM5O20gb24gdGhlIHNjZW50IGhlcmUsIGFuZCBJIHdhbnQgdG8gYmUgKmFic29sdXRlbHkqIHN1cmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlcmUgYXJlICpubyogb3RoZXIgdXNlcyBvZiBgbG9va3VwX3NpemVfY2xhc3NgIHdpdGhpbiB0aGlzIHBhdGNoIHRoYXQgY291bGQgY29udHJpYnV0ZSB0byB0aGUgaXNzdWUuCgpSaWdodCwgdGhlIHBhdGNoIG1vZGlmaWVzIGB6c19tYWxsb2NgIHRvIHJlcGxhY2Ugc29tZSBvbGQgY29kZS4gSXQmIzM5O3MgdXNpbmcgYGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpYCBub3csIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNvZGUsIHdoaWNoIHdhcyBsaWtlIGBzaXplICYjNDM7PSBaU19IQU5ETEVfU0laRTsgY2xhc3MgPSBwb29sLSZndDtzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtgLiBOb3csIHdhaXQgYSBtaW51dGUsIHRoZSBvcmlnaW5hbCBjb2RlIGFkZGVkIGBaU19IQU5ETEVfU0laRWAgdG8gdGhlIGBzaXplYCB2YXJpYWJsZS4gQnV0IGl0JiMzOTtzIHBhc3NlZCBieSB2YWx1ZSEgRG9lcyB0aGF0IGBzaXplYCB2YXJpYWJsZSBnZXQgdXNlZCBsYXRlciBpbiB0aGUgYHpzX21hbGxvY2AgZnVuY3Rpb24/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3pzX21hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0venNtYWxsb2MuYz0xMjQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIG9ial9tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsXG4tLVxubW0venNtYWxsb2MuYy0xMjkwLS8qKlxubW0venNtYWxsb2MuYzoxMjkxOiAqIHpzX21hbGxvYyAtIEFsbG9jYXRlIGJsb2NrIG9mIGdpdmVuIHNpemUgZnJvbSBwb29sLlxubW0venNtYWxsb2MuYy0xMjkyLSAqIEBwb29sOiBwb29sIHRvIGFsbG9jYXRlIGZyb21cbi0tXG5tbS96c21hbGxvYy5jLTEzMDAtICovXG5tbS96c21hbGxvYy5jOjEzMDE6dW5zaWduZWQgbG9uZyB6c19tYWxsb2Moc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHNpemVfdCBzaXplLCBnZnBfdCBnZnAsXG5tbS96c21hbGxvYy5jLTEzMDItXHRcdFx0Y29uc3QgaW50IG5pZClcbi0tXG5tbS96c21hbGxvYy5jLTEzNTUtfVxubW0venNtYWxsb2MuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7XG5tbS96c21hbGxvYy5jLTEzNTctXG4tLVxubW0venNtYWxsb2MuYz0yMDc0PXN0cnVjdCB6c19wb29sICp6c19jcmVhdGVfcG9vbChjb25zdCBjaGFyICpuYW1lKVxuLS1cbm1tL3pzbWFsbG9jLmMtMjExOS1cdFx0XHQgKiBUaGUgb2JqZWN0IHVzZXMgWlNfSEFORExFX1NJWkUgYnl0ZXMgdG8gc3RvcmUgdGhlXG5tbS96c21hbGxvYy5jOjIxMjA6XHRcdFx0ICogaGFuZGxlLiBXZSBuZWVkIHRvIHN1YnRyYWN0IGl0LCBiZWNhdXNlIHpzX21hbGxvYygpXG5tbS96c21hbGxvYy5jLTIxMjEtXHRcdFx0ICogdW5jb25kaXRpb25hbGx5IGFkZHMgaGFuZGxlIHNpemUgYmVmb3JlIGl0IHBlcmZvcm1zXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzNTEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYHpzX21hbGxvY2AmIzM5O3MgTWVtb3J5IEFsbG9jYXRpb24gTG9naWMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgYHpzX21hbGxvY2AgaW1wbGVtZW50YXRpb24uIEkmIzM5O20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZSBgc2l6ZWAgdmFyaWFibGUgaXMgaGFuZGxlZCAqYWZ0ZXIqIHRoYXQgY3JpdGljYWwgYHNpemUgJiM0Mzs9IFpTX0hBTkRMRV9TSVpFO2AgbGluZS4gSXQmIzM5O3MgYSB0ZXh0Ym9vayBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBvciBlZmZpY2llbmN5IGJvdHRsZW5lY2ssIHJpZ2h0PyBJIHdhbnQgdG8gY29uZmlybSBpZiBgc2l6ZWAgaXMgc3Vic2VxdWVudGx5IHVzZWQgY29ycmVjdGx5IHRvIGRldGVybWluZSB0aGUgYWN0dWFsIGFsbG9jYXRpb24gc2l6ZSBhbmQgdXNhZ2UsIG9yIGlmIHRoZXJlJiMzOTtzIGEgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycyBvciBtZW1vcnkgbWlzbWFuYWdlbWVudC4gV2UgbmVlZCB0byBiZSBlc3BlY2lhbGx5IGFsZXJ0IGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBpbmFkdmVydGVudGx5IHVzZSB0aGUgb3JpZ2luYWwgKHByZS1pbmNyZW1lbnQpIGBzaXplYCBpbiBjcml0aWNhbCBjYWxjdWxhdGlvbnMuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHRyYWNlIHdoZXJlIGBzaXplYCBpcyB1c2VkLCBsb29raW5nIGZvciBob3cgdGhlIGluY3JlbWVudGVkIHZhbHVlIGltcGFjdHMgdGhlIGFsbG9jYXRpb24sIGJvdW5kcyBjaGVja2luZywgYW5kIGFueSBwb3RlbnRpYWwgaGFuZGxlIG1hbmFnZW1lbnQgcm91dGluZXMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3pzbWFsbG9jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzMDA6XHQgKi9cbjEzMDE6XHR1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCxcbjEzMDI6XHRcdFx0XHRjb25zdCBpbnQgbmlkKVxuMTMwMzpcdHtcbjEzMDQ6XHRcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xuMTMwNTpcdFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xuMTMwNjpcdFx0aW50IG5ld2ZnO1xuMTMwNzpcdFx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xuMTMwODpcdFxuMTMwOTpcdFx0aWYgKHVubGlrZWx5KCFzaXplKSlcbjEzMTA6XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVJTlZBTCk7XG4xMzExOlx0XG4xMzEyOlx0XHRpZiAodW5saWtlbHkoc2l6ZSBcdTAwM2UgWlNfTUFYX0FMTE9DX1NJWkUpKVxuMTMxMzpcdFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PU1BDKTtcbjEzMTQ6XHRcbjEzMTU6XHRcdGhhbmRsZSA9IGNhY2hlX2FsbG9jX2hhbmRsZShnZnApO1xuMTMxNjpcdFx0aWYgKCFoYW5kbGUpXG4xMzE3Olx0XHRcdHJldHVybiAodW5zaWduZWQgbG9uZylFUlJfUFRSKC1FTk9NRU0pO1xuMTMxODpcdFxuMTMxOTpcdFx0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcbjEzMjA6XHRcbjEzMjE6XHRcdC8qIGNsYXNzLVx1MDAzZWxvY2sgZWZmZWN0aXZlbHkgcHJvdGVjdHMgdGhlIHpwYWdlIG1pZ3JhdGlvbiAqL1xuMTMyMjpcdFx0c3Bpbl9sb2NrKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuMTMyMzpcdFx0enNwYWdlID0gZmluZF9nZXRfenNwYWdlKGNsYXNzKTtcbjEzMjQ6XHRcdGlmIChsaWtlbHkoenNwYWdlKSkge1xuMTMyNTpcdFx0XHRvYmpfbWFsbG9jKHBvb2wsIHpzcGFnZSwgaGFuZGxlKTtcbjEzMjY6XHRcdFx0LyogTm93IG1vdmUgdGhlIHpzcGFnZSB0byBhbm90aGVyIGZ1bGxuZXNzIGdyb3VwLCBpZiByZXF1aXJlZCAqL1xuMTMyNzpcdFx0XHRmaXhfZnVsbG5lc3NfZ3JvdXAoY2xhc3MsIHpzcGFnZSk7XG4xMzI4Olx0XHRcdGNsYXNzX3N0YXRfYWRkKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcbjEzMjk6XHRcbjEzMzA6XHRcdFx0Z290byBvdXQ7XG4xMzMxOlx0XHR9XG4xMzMyOlx0XG4xMzMzOlx0XHRzcGluX3VubG9jayhcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbjEzMzQ6XHRcbjEzMzU6XHRcdHpzcGFnZSA9IGFsbG9jX3pzcGFnZShwb29sLCBjbGFzcywgZ2ZwLCBuaWQpO1xuMTMzNjpcdFx0aWYgKCF6c3BhZ2UpIHtcbjEzMzc6XHRcdFx0Y2FjaGVfZnJlZV9oYW5kbGUoaGFuZGxlKTtcbjEzMzg6XHRcdFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVOT01FTSk7XG4xMzM5Olx0XHR9XG4xMzQwOlx0XG4xMzQxOlx0XHRzcGluX2xvY2soXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4xMzQyOlx0XHRvYmpfbWFsbG9jKHBvb2wsIHpzcGFnZSwgaGFuZGxlKTtcbjEzNDM6XHRcdG5ld2ZnID0gZ2V0X2Z1bGxuZXNzX2dyb3VwKGNsYXNzLCB6c3BhZ2UpO1xuMTM0NDpcdFx0aW5zZXJ0X3pzcGFnZShjbGFzcywgenNwYWdlLCBuZXdmZyk7XG4xMzQ1Olx0XHRhdG9taWNfbG9uZ19hZGQoY2xhc3MtXHUwMDNlcGFnZXNfcGVyX3pzcGFnZSwgXHUwMDI2cG9vbC1cdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xuMTM0NjpcdFx0Y2xhc3Nfc3RhdF9hZGQoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELCBjbGFzcy1cdTAwM2VvYmpzX3Blcl96c3BhZ2UpO1xuMTM0NzpcdFx0Y2xhc3Nfc3RhdF9hZGQoY2xhc3MsIFpTX09CSlNfSU5VU0UsIDEpO1xuMTM0ODpcdFxuMTM0OTpcdFx0LyogV2UgY29tcGxldGVseSBzZXQgdXAgenNwYWdlIHNvIG1hcmsgdGhlbSBhcyBtb3ZhYmxlICovXG4xMzUwOlx0XHRTZXRac1BhZ2VNb3ZhYmxlKHBvb2wsIHpzcGFnZSk7XG4xMzUxOlx0b3V0OlxuMTM1MjpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y2xhc3MtXHUwMDNlbG9jayk7XG4xMzUzOlx0XG4xMzU0Olx0XHRyZXR1cm4gaGFuZGxlO1xuMTM1NTpcdH1cbjEzNTY6XHRFWFBPUlRfU1lNQk9MX0dQTCh6c19tYWxsb2MpO1xuMTM1NzpcdFxuMTM1ODpcdHN0YXRpYyB2b2lkIG9ial9mcmVlKGludCBjbGFzc19zaXplLCB1bnNpZ25lZCBsb25nIG9iailcbjEzNTk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA5IDEyOjI3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NDMKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMjY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBaUkFNIFBhdGNoKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGluIGB6c19tYWxsb2NgIGl0c2VsZiwgYnV0IGluIHRoZSBmdW5jdGlvbiBpdCYjMzk7cyBjYWxsaW5nOiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gSSBzZWUgdGhhdCB0aGUgYHNpemVgIHZhcmlhYmxlLCBvYnRhaW5lZCBhZnRlciBjYWxsaW5nIGBsb29rdXBfc2l6ZV9jbGFzc2AsIGlzbiYjMzk7dCBldmVuIHVzZWQgbGF0ZXIgaW4gYHpzX21hbGxvY2AuIFNvLCB0aGUgcmVmYWN0b3JpbmcgaXMgZXNzZW50aWFsbHkgYSBzaWRlLWVmZmVjdCwgdGhlIHJlYWwgYWN0aW9uIGlzIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLgoKVGhlIGtleSBjb3JyZWN0aW9uIGhlcmUgbGllcyB3aXRoaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIEl0JiMzOTtzIG5vdyBjb3JyZWN0bHkgZmFjdG9yaW5nIGluIGBaU19IQU5ETEVfU0laRWAuIFRoaXMgd2FzIHRoZSByb290IG9mIHRoZSBwcm9ibGVtLiBJdCBzZWVtcyB0aGUgZnVuY3Rpb24gd2FzIHJldHVybmluZyBhbiBpbmNvcnJlY3Qgc2l6ZSBjbGFzcyBpbmRleC4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgcmVsZXZhbnQgdG8gWlJBTSBiZWNhdXNlIHRoZSBzaXplIGNsYXNzIGluZGV4aW5nIGlzIHdoYXQgZGV0ZXJtaW5lcyBpZiB0aGUgb2JqZWN0IHNob3VsZCBiZSByZWNvbXByZXNzZWQgb3Igbm90LiBBIHNtYWxsZXIgaW5kZXggcmV0dXJuZWQgbWVhbnQgdGhlIG9iamVjdCBtaWdodCBub3QgYmUgcmVjb21wcmVzc2VkIGFwcHJvcHJpYXRlbHkuCgpOb3csIGxldCYjMzk7cyBhZGRyZXNzIHRoZSBLTVNBTiBhc3BlY3QuIFRoZSBpc3N1ZSBhdCBoYW5kIGlzbiYjMzk7dCBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSwgb3IgYW55IGluZm8tbGVha3MsIG9yIG1lbW9yeSBjb3JydXB0aW9uLiBUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBsb2dpY2FsIGVycm9yLCBhIG1pc2NhbGN1bGF0aW9uIGluIHRoZSBzaXplIGNsYXNzIGluZGV4LiBXaGlsZSBpbmNvcnJlY3QsIGl0JiMzOTtzIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUgcGVyIHNlLiBTdGFuZGFyZCBLQVNBTiwgd2l0aCBpdHMgYWJpbGl0eSB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGlzIHN1ZmZpY2llbnQgdG8gZGVhbCB3aXRoIGFueSBwb3NzaWJsZSBwcm9ibGVtcywgaWYgdGhleSB3ZXJlIHRvIG9jY3VyLiBTbywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaW4gdGhpcyBjYXNlLiBNeSB0YWtlIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBjb3JyZWN0cyBhIGxvZ2ljIGVycm9yIGluIGRldGVybWluaW5nIHRoZSBzaXplIGNsYXNzIGluZGV4LCBhbmQgd2hpbGUgaXQgY291bGQgbGVhZCB0byBzdWJvcHRpbWFsIHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBpdCBkb2VzbiYjMzk7dCBvcGVuIHRoZSBkb29yIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIHNpbWlsYXIgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wOSAxMjoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCBmYWlsZWQgdG8gYWNjb3VudCBmb3IgYFpTX0hBTkRMRV9TSVpFYCB3aGVuIGxvb2tpbmcgdXAgdGhlIHNpemUgY2xhc3MgaW5kZXgsIGNhdXNpbmcgaXQgdG8gcmV0dXJuIGFuIGluY29ycmVjdCAoc21hbGxlcikgY2xhc3MgaW5kZXguIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHVzZWQgYnkgenJhbSB0byBkZXRlcm1pbmUgaWYgcmVjb21wcmVzc2luZyBhbiBvYmplY3QgaXMgYmVuZWZpY2lhbCBieSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNsYXNzIGluZGljZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVjb21wcmVzc2lvbiBkZWNpc2lvbnMsIGJ1dCBpdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgaXNzdWVzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCBmYWlsZWQgdG8gYWNjb3VudCBmb3IgYFpTX0hBTkRMRV9TSVpFYCB3aGVuIGxvb2tpbmcgdXAgdGhlIHNpemUgY2xhc3MgaW5kZXgsIGNhdXNpbmcgaXQgdG8gcmV0dXJuIGFuIGluY29ycmVjdCAoc21hbGxlcikgY2xhc3MgaW5kZXguIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHVzZWQgYnkgenJhbSB0byBkZXRlcm1pbmUgaWYgcmVjb21wcmVzc2luZyBhbiBvYmplY3QgaXMgYmVuZWZpY2lhbCBieSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNsYXNzIGluZGljZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVjb21wcmVzc2lvbiBkZWNpc2lvbnMsIGJ1dCBpdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgaXNzdWVzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjIwOjE4LjU3NzQ2Mjc4OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODQ1NjI4MjY2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU01BTExPQ1wiLFxuICAgIFwiWlJBTVwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c19sb29rdXBfY2xhc3NfaW5kZXhcIixcbiAgICBcInpzX21hbGxvY1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgZmFpbGVkIHRvIGFjY291bnQgZm9yIGBaU19IQU5ETEVfU0laRWAgd2hlbiBsb29raW5nIHVwIHRoZSBzaXplIGNsYXNzIGluZGV4LCBjYXVzaW5nIGl0IHRvIHJldHVybiBhbiBpbmNvcnJlY3QgKHNtYWxsZXIpIGNsYXNzIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseSB1c2VkIGJ5IHpyYW0gdG8gZGV0ZXJtaW5lIGlmIHJlY29tcHJlc3NpbmcgYW4gb2JqZWN0IGlzIGJlbmVmaWNpYWwgYnkgY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjbGFzcyBpbmRpY2VzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBidXQgaXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIGlzc3VlcyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdoZXJlIGl0IHdhcyByZXR1cm5pbmcgdGhlIHdyb25nIGNsYXNzIGluZGV4IGJlY2F1c2UgaXQgZGlkbid0IGFkZCBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplLCB1bmxpa2UgYHpzX21hbGxvY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB6c21hbGxvYyBhbGxvY2F0b3IgbG9naWMsIHdoaWNoIGlzIHVzZWQgYnkgenJhbSBhbmQgenN3YXAuIEZ1enppbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjA6MTguNTc3NDcyMjc4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MzAyNzk2MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkNDdjZTQ2YmMxMjUwNzJiZGEwNjhiZTYwNGNhM2E2NDA4NGZhYTQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTdW4gQXVnIDkgMTI6MjA6MTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmNcXG5pbmRleCA4M2Y1ODIwYzQ1ZjkzLi40MWIwM2E5ZWNlYzI1IDEwMDY0NFxcbi0tLSBhL21tL3pzbWFsbG9jLmNcXG4rKysgYi9tbS96c21hbGxvYy5jXFxuQEAgLTQ3OCw2ICs0NzgsMTEgQEAgc3RhdGljIGludCBnZXRfc2l6ZV9jbGFzc19pbmRleChpbnQgc2l6ZSlcXG4gXFx0cmV0dXJuIG1pbl90KGludCwgWlNfU0laRV9DTEFTU0VTIC0gMSwgaWR4KTtcXG4gfVxcbiBcXG4rc3RhdGljIHN0cnVjdCBzaXplX2NsYXNzICpsb29rdXBfc2l6ZV9jbGFzcyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0cmV0dXJuIHBvb2wtXFx1MDAzZXNpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSArIFpTX0hBTkRMRV9TSVpFKV07XFxuK31cXG4rXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGFzc19zdGF0X2FkZChzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3MsIGludCB0eXBlLFxcbiBcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgY250KVxcbiB7XFxuQEAgLTEwMjEsNyArMTAyNiw3IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKVxcbiB7XFxuIFxcdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcXG4gXFxuLVxcdGNsYXNzID0gcG9vbC1cXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07XFxuK1xcdGNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7XFxuIFxcbiBcXHRyZXR1cm4gY2xhc3MtXFx1MDAzZWluZGV4O1xcbiB9XFxuQEAgLTEzMTEsOSArMTMxNiw3IEBAIHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxcbiBcXHRpZiAoIWhhbmRsZSlcXG4gXFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVOT01FTSk7XFxuIFxcbi1cXHQvKiBleHRyYSBzcGFjZSBpbiBjaHVuayB0byBrZWVwIHRoZSBoYW5kbGUgKi9cXG4tXFx0c2l6ZSArPSBaU19IQU5ETEVfU0laRTtcXG4tXFx0Y2xhc3MgPSBwb29sLVxcdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcXG4rXFx0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcXG4gXFxuIFxcdC8qIGNsYXNzLVxcdTAwM2Vsb2NrIGVmZmVjdGl2ZWx5IHByb3RlY3RzIHRoZSB6cGFnZSBtaWdyYXRpb24gKi9cXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjIwOjE5LjAwODM3NzQxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI5MjIyMTk3OTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU01BTExPQ1wiLFxuICAgIFwiWlJBTVwiLFxuICAgIFwiWlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c19sb29rdXBfY2xhc3NfaW5kZXhcIixcbiAgICBcInpzX21hbGxvY1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdoZXJlIGl0IHdhcyByZXR1cm5pbmcgdGhlIHdyb25nIGNsYXNzIGluZGV4IGJlY2F1c2UgaXQgZGlkbid0IGFkZCBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplLCB1bmxpa2UgYHpzX21hbGxvY2AuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSB6c21hbGxvYyBhbGxvY2F0b3IgbG9naWMsIHdoaWNoIGlzIHVzZWQgYnkgenJhbSBhbmQgenN3YXAuIEZ1enppbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgIGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpeCBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDQ3Y2U0NmJjMTI1MDcyYmRhMDY4YmU2MDRjYTNhNjQwODRmYWE0N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDkgMTI6MjA6MTcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS96c21hbGxvYy5jIGIvbW0venNtYWxsb2MuY1xuaW5kZXggODNmNTgyMGM0NWY5My4uNDFiMDNhOWVjZWMyNSAxMDA2NDRcbi0tLSBhL21tL3pzbWFsbG9jLmNcbisrKyBiL21tL3pzbWFsbG9jLmNcbkBAIC00NzgsNiArNDc4LDExIEBAIHN0YXRpYyBpbnQgZ2V0X3NpemVfY2xhc3NfaW5kZXgoaW50IHNpemUpXG4gXHRyZXR1cm4gbWluX3QoaW50LCBaU19TSVpFX0NMQVNTRVMgLSAxLCBpZHgpO1xuIH1cbiBcbitzdGF0aWMgc3RydWN0IHNpemVfY2xhc3MgKmxvb2t1cF9zaXplX2NsYXNzKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRyZXR1cm4gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUgKyBaU19IQU5ETEVfU0laRSldO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgY2xhc3Nfc3RhdF9hZGQoc3RydWN0IHNpemVfY2xhc3MgKmNsYXNzLCBpbnQgdHlwZSxcbiBcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBjbnQpXG4ge1xuQEAgLTEwMjEsNyArMTAyNiw3IEBAIHVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKVxuIHtcbiBcdHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcztcbiBcbi1cdGNsYXNzID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcbitcdGNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7XG4gXG4gXHRyZXR1cm4gY2xhc3MtXHUwMDNlaW5kZXg7XG4gfVxuQEAgLTEzMTEsOSArMTMxNiw3IEBAIHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxuIFx0aWYgKCFoYW5kbGUpXG4gXHRcdHJldHVybiAodW5zaWduZWQgbG9uZylFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0LyogZXh0cmEgc3BhY2UgaW4gY2h1bmsgdG8ga2VlcCB0aGUgaGFuZGxlICovXG4tXHRzaXplICs9IFpTX0hBTkRMRV9TSVpFO1xuLVx0Y2xhc3MgPSBwb29sLVx1MDAzZXNpemVfY2xhc3NbZ2V0X3NpemVfY2xhc3NfaW5kZXgoc2l6ZSldO1xuK1x0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcbiBcbiBcdC8qIGNsYXNzLVx1MDAzZWxvY2sgZWZmZWN0aXZlbHkgcHJvdGVjdHMgdGhlIHpwYWdlIG1pZ3JhdGlvbiAqL1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmNsYXNzLVx1MDAzZWxvY2spO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjA6MTkuMDA4Mzc4NTE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ5ODE4MzU1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFpzbWFsbG9jIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgYG1tL3pzbWFsbG9jLmNgLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBhIG5ldyBmdW5jdGlvbiwgYGxvb2t1cF9zaXplX2NsYXNzYC4gVGhleSdyZSB1c2luZyBpdCBpbiBib3RoIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYC4gTGV0J3Mgc2VlLi4uIHRoZSBhbHRlcmF0aW9uIHRvIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGxvb2tzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g6XG5cbmBgYGNcbi1cdGNsYXNzID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcbitcdGNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7XG5gYGBcblxuQnV0IHdhaXQgYSBzZWNvbmQuLi4gYGxvb2t1cF9zaXplX2NsYXNzYCBpcyAqYWRkaW5nKiBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBpbnB1dCBgc2l6ZWAgKmJlZm9yZSogY2FsbGluZyBgZ2V0X3NpemVfY2xhc3NfaW5kZXhgLiBTbywgZWZmZWN0aXZlbHksIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGlzIG5vdyAqaW5jb3Jwb3JhdGluZyogYFpTX0hBTkRMRV9TSVpFYCBpbnRvIGl0cyBzaXplIGNhbGN1bGF0aW9uISBUaGF0J3MgYSBkZWZpbml0ZSBiZWhhdmlvciBzaGlmdC4gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLlxuXG5Ob3csIGluIGB6c19tYWxsb2NgLCBpdCdzIGJlZW4gcmVmYWN0b3JlZCBpbiBhIHNpbWlsYXIgd2F5OlxuXG5gYGBjXG4tXHQvKiBleHRyYSBzcGFjZSBpbiBjaHVuayB0byBrZWVwIHRoZSBoYW5kbGUgKi9cbi1cdHNpemUgKz0gWlNfSEFORExFX1NJWkU7XG4tXHRjbGFzcyA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07XG4rXHRjbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpO1xuYGBgXG5cbkhlcmUsIGl0IHNlZW1zIGxpa2UgYSByZWZhY3RvcmluZy4gSSdtIHRha2luZyB0aGUgcHJldmlvdXMgYWRkaXRpb24gb2YgYFpTX0hBTkRMRV9TSVpFYCBhbmQgbW92aW5nIGl0IGludG8gYGxvb2t1cF9zaXplX2NsYXNzYC4gVGhhdCdzIGNsZWFuZXIsIHN1cmUsIGJ1dCB0aGUgZWZmZWN0IG9mIHRoZSBjaGFuZ2UgaXMgbmV1dHJhbCwgd2hlcmVhcyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCwgaXQncyBpbnRyb2R1Y2luZyBhIHN1YnRsZSBjaGFuZ2UgaW4gdGhlIGV4cGVjdGVkIGJlaGF2aW9yLlxuXG5JJ20gc3RhcnRpbmcgdG8gdGhpbmsgdGhpcyBpcyBhIGJpdCBkZWNlcHRpdmUsIGFzIGl0IGRvZXNuJ3QgaW1tZWRpYXRlbHkgcmV2ZWFsIHRoZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yLiBJdCdzIGEgcmVmYWN0b3JpbmcsIGJ1dCBpdCdzICpmdW5jdGlvbmFsbHkqIGNoYW5naW5nIGhvdyBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBvcGVyYXRlcy4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBkZWVwZXIgaW50byBob3cgYFpTX0hBTkRMRV9TSVpFYCBpcyBhY3R1YWxseSAqdXNlZCogdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBjaGFuZ2UgaXMgaW50ZW5kZWQsIGFuZCBpZiBzbywgaXQgbmVlZHMgdmVyeSBjYXJlZnVsIGRvY3VtZW50YXRpb24uIExldCdzIGRpZyBpbnRvIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFnYWluIGFuZCBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjUzLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjc5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjA6MjcuNTA2NTY1MTI0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4ODYzMjkzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienNfbG9va3VwX2NsYXNzX2luZGV4XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzc6XFx0Y2xhc3NfaW5kZXhfb2xkID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9vbGQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzg6XFx0Y2xhc3NfaW5kZXhfbmV3ID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9uZXcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg9Mzc9dW5zaWduZWQgbG9uZyB6c19jb21wYWN0KHN0cnVjdCB6c19wb29sICpwb29sKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzgtXFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjM5OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtNDAtXFxuLS1cXG5tbS96c21hbGxvYy5jPTEwMDk9c3RhdGljIGJvb2wgenNwYWdlX2VtcHR5KHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAxNC0vKipcXG5tbS96c21hbGxvYy5jOjEwMTU6ICogenNfbG9va3VwX2NsYXNzX2luZGV4KCkgLSBSZXR1cm5zIGluZGV4IG9mIHRoZSB6c21hbGxvYyBcXHUwMDI2c2l6ZV9jbGFzc1xcbm1tL3pzbWFsbG9jLmMtMTAxNi0gKiB0aGF0IGhvbGQgb2JqZWN0cyBvZiB0aGUgcHJvdmlkZWQgc2l6ZS5cXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAyNC0gKi9cXG5tbS96c21hbGxvYy5jOjEwMjU6dW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpXFxubW0venNtYWxsb2MuYy0xMDI2LXtcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAzMi19XFxubW0venNtYWxsb2MuYzoxMDMzOkVYUE9SVF9TWU1CT0xfR1BMKHpzX2xvb2t1cF9jbGFzc19pbmRleCk7XFxubW0venNtYWxsb2MuYy0xMDM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyMDoyOS4zOTI4OTkzNTlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMDMzODI1NDI1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB6c21hbGxvYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdHdlYWtpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIFRoZSBjcnVjaWFsIGRldGFpbCBpcyB0aGF0IGl0J3MgKmFkZGluZyogYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSBjYWxjdWxhdGlvbi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHdlJ3JlIG1hbmFnaW5nIHRoZSBoYW5kbGVzIHdpdGhpbiBgenNtYWxsb2NgLCBhbmQgdGhlIGltcGFjdCBvZiB0aGUgaW5kZXggY2FsY3VsYXRpb24gb24gb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgYW5kIGZyYWdtZW50YXRpb24uIEknbGwgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgY2hhbmdlIGlzIG5lY2Vzc2FyeS5cblxuVGhlIGNvZGUgcGF0aCBpbnZvbHZlZCwgYXQgbGVhc3QgYmFzZWQgb24gdGhlIGNvbnRleHQgaGVyZSwgaXMgYHJlY29tcHJlc3Nfc2xvdGAgaW4gYHpyYW1fZHJ2LmNgLiBHb29kLCB0aGF0IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2YgaW1wYWN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgaXMgYmVpbmcgdXRpbGl6ZWQgd2l0aGluIHRoYXQgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBvcGVyYXRpb25zIGluIGB6cmFtYC5cblxuQmVmb3JlIGRpZ2dpbmcgaW50byB0aGUgY29kZSB0b28gZGVlcGx5LCBJIHdpbGwgcXVpY2tseSB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTGV0J3Mgc2VlIC0gYENPTkZJR19aUkFNYCBhbmQgYENPTkZJR19aU01BTExPQ2AuIEknbSBnb2luZyB0byBxdWlja2x5IGNoZWNrIHRob3NlIHRvIGVuc3VyZSBteSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBzY29wZSBvZiB0aGlzIGNoYW5nZSBhcmUgb24gcG9pbnQgYmVmb3JlIGdldHRpbmcgYW55IGRlZXBlci4gVGhhdCdzIGEgZnVuZGFtZW50YWwgc3RlcCB0aGF0IEkgc2hvdWxkbid0IHNraXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1ODcsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyMzo1Mi43NzU0NDUyNzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzODkzMDE2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlNNQUxMT0NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMTQ9Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVFxcbi0tXFxubW0vS2NvbmZpZy0xMjQtXFxubW0vS2NvbmZpZzoxMjU6Y29uZmlnIFpTTUFMTE9DXFxubW0vS2NvbmZpZy0xMjYtXFx0dHJpc3RhdGVcXG4tLVxcbm1tL0tjb25maWc9MTMzPWNvbW1lbnQgXFxcIlpzbWFsbG9jIGlzIGEgY29tbW9uIGJhY2tlbmQgYWxsb2NhdG9yIGZvciB6c3dhcCBcXHUwMDI2IHpyYW1cXFwiXFxubW0vS2NvbmZpZy0xMzQtXFxubW0vS2NvbmZpZzoxMzU6Y29uZmlnIFpTTUFMTE9DX1NUQVRcXG5tbS9LY29uZmlnLTEzNi1cXHRib29sIFxcXCJFeHBvcnQgenNtYWxsb2Mgc3RhdGlzdGljc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQzLVxcbm1tL0tjb25maWc6MTQ0OmNvbmZpZyBaU01BTExPQ19DSEFJTl9TSVpFXFxubW0vS2NvbmZpZy0xNDUtXFx0aW50IFxcXCJNYXhpbXVtIG51bWJlciBvZiBwaHlzaWNhbCBwYWdlcyBwZXItenNwYWdlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyMzo1NC44MTQzODU4ODRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE1NTk3MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqWlJBTSBDb25maWd1cmF0aW9uIENoZWNrKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgY29uZmlnIFpSQU1gLiBUaGlzIGlzIGEgY3J1Y2lhbCBmaXJzdCBzdGVwIHdoZW4gY29uc2lkZXJpbmcgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ2llcywgZXNwZWNpYWxseSBmb3IgcmVzb3VyY2UtY29uc3RyYWluZWQgZW52aXJvbm1lbnRzIG9yIHN5c3RlbXMgd2l0aCBwb3RlbnRpYWxseSBoZWF2eSBJL08gd29ya2xvYWRzLiBXZSBuZWVkIHRvIGFzY2VydGFpbiBpZiBaUkFNIGlzIGN1cnJlbnRseSBlbmFibGVkLCBhbmQgaWYgc28sIHdoYXQgdGhlIGV4aXN0aW5nIHBhcmFtZXRlcnMgYXJlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb25maWd1cmF0aW9uIGlzIHZpdGFsIGJlZm9yZSB3ZSBjYW4gYXNzZXNzIGl0cyBlZmZlY3RpdmVuZXNzIG9yIGNvbnNpZGVyIGFueSBvcHRpbWl6YXRpb25zLiBXZSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSB0aGUgYWxsb2NhdGVkIHNpemUsIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgYW5kIGFueSBvdGhlciByZWxldmFudCB0dW5hYmxlIHBhcmFtZXRlcnMgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgY3VycmVudCBzdGF0ZS4gRnJvbSB0aGVyZSwgd2UgY2FuIGJlZ2luIHRvIHRyb3VibGVzaG9vdCBhbmQgc2VlIGlmIHdlIGNhbiBkbyBiZXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI0OjA2Ljk3MDM1OTIxNFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI4MjY2NjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaUkFNXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI6Y29uZmlnIFpSQU1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE3OmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFo0XFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTgtXFx0Ym9vbCBcXFwibHo0IGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yMi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyMzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjQtXFx0Ym9vbCBcXFwibHo0aGMgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjI5OmNvbmZpZyBaUkFNX0JBQ0tFTkRfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTMwLVxcdGJvb2wgXFxcInpzdGQgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjM1OmNvbmZpZyBaUkFNX0JBQ0tFTkRfREVGTEFURVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTM2LVxcdGJvb2wgXFxcImRlZmxhdGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQwLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjQxOmNvbmZpZyBaUkFNX0JBQ0tFTkRfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDItXFx0Ym9vbCBcXFwiODQyIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0Nzpjb25maWcgWlJBTV9CQUNLRU5EX0ZPUkNFX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQ4LVxcdGRlcGVuZHMgb24gWlJBTVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NTM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy01NC1cXHRib29sIFxcXCJsem8gYW5kIGx6by1ybGUgY29tcHJlc3Npb24gc3VwcG9ydFxcXCIgaWYgIVpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTYwPWNob2ljZVxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NjU6Y29uZmlnIFpSQU1fREVGX0NPTVBfTFpPUkxFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNjYtXFx0Ym9vbCBcXFwibHpvLXJsZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY5OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcwLVxcdGJvb2wgXFxcImx6b1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTcyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjczOmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc0LVxcdGJvb2wgXFxcImx6NFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjc3OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaNEhDXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNzgtXFx0Ym9vbCBcXFwibHo0aGNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4MTpjb25maWcgWlJBTV9ERUZfQ09NUF9aU1REXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODItXFx0Ym9vbCBcXFwienN0ZFxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04Ni1cXHRib29sIFxcXCJkZWZsYXRlXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODk6Y29uZmlnIFpSQU1fREVGX0NPTVBfODQyXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTAtXFx0Ym9vbCBcXFwiODQyXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc9OTM9ZW5kY2hvaWNlXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTQtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6OTU6Y29uZmlnIFpSQU1fREVGX0NPTVBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy05Ni1cXHRzdHJpbmdcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMDc6Y29uZmlnIFpSQU1fV1JJVEVCQUNLXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTA4LSAgICAgICBib29sIFxcXCJXcml0ZSBiYWNrIGluY29tcHJlc3NpYmxlIG9yIGlkbGUgcGFnZSB0byBiYWNraW5nIGRldmljZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjE6Y29uZmlnIFpSQU1fVFJBQ0tfRU5UUllfQUNUSU1FXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTIyLVxcdGJvb2wgXFxcIlRyYWNrIGFjY2VzcyB0aW1lIG9mIHpyYW0gZW50cmllc1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxMjk6Y29uZmlnIFpSQU1fTUVNT1JZX1RSQUNLSU5HXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTMwLVxcdGJvb2wgXFxcIlRyYWNrIHpSYW0gYmxvY2sgc3RhdHVzXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTM5LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjE0MDpjb25maWcgWlJBTV9NVUxUSV9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMTQxLVxcdGJvb2wgXFxcIkVuYWJsZSBtdWx0aXBsZSBjb21wcmVzc2lvbiBzdHJlYW1zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNDowOC4zOTg2MzEyNzJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjI4MTc2MTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQYXRjaDogRml4aW5nIGEgWlJBTSBNZW1vcnkgQWxsb2NhdGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgbW9kaWZ5aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdG8gbWFrZSBpdCBjYWxsIGBsb29rdXBfc2l6ZV9jbGFzc2AgYW5kLCBjcml0aWNhbGx5LCAqYWRkKiBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplIGJlaW5nIGxvb2tlZCB1cC4gQWgsIHRoYXQncyB0aGUga2V5LiBUaGlzIGFsbW9zdCBjZXJ0YWlubHkgcmVzb2x2ZXMgYSBidWcuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgYHpzX21hbGxvY2Agd2FzIGFkZGluZyBgWlNfSEFORExFX1NJWkVgIHdoZW4gKmFsbG9jYXRpbmcqIG1lbW9yeSwgYnV0IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIHdhc24ndCBhY2NvdW50aW5nIGZvciBpdCB3aGVuIGRldGVybWluaW5nIHRoZSAqY2xhc3MqIG9mIHRoYXQgYWxsb2NhdGlvbi4gU28sIHRoZSBpbmRleCB3YXMgb2ZmLCBsZWFkaW5nIHRvLi4uIHdlbGwsIHdobyBrbm93cyB3aGF0IGtpbmQgb2YgbWVtb3J5IGNvcnJ1cHRpb24gb3IgcGVyZm9ybWFuY2UgaXNzdWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgY2xlYXIgYW5kIGVzc2VudGlhbCBmaXguXG5cblRoZSBmdW5jdGlvbnMgdG8gcmVhbGx5IGZvY3VzIG9uIGhlcmUgYXJlIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCwgb2YgY291cnNlLiBJJ2xsIG5lZWQgdG8gZGlnIGludG8gdGhvc2UsIGxpbmUgYnkgbGluZSwgdG8gc2VlIHRoZSBleGFjdCBjb250ZXh0LiBBbmQgdGhlbiwgdGhlcmUncyBgcmVjb21wcmVzc19zbG90YCBpbiBgenJhbV9kcnYuY2AuIFRoYXQncyBhbiBpbnRlcmVzdGluZyBvbmU7IGl0IHNlZW1zIHRvIGJlIHVzaW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFzIHdlbGwuIEknbGwgbmVlZCB0byBjaGVjayBpZiB0aGF0IGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHJlYWNoYWJsZSB3aXRoaW4gdGhlIGNvZGViYXNlIHRvIGZ1bGx5IGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJdCBjb3VsZCBiZSBhZmZlY3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTYzMywiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNDozNC42ODAzOTYxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTE3MDIzMjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlY29tcHJlc3Nfc2xvdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yMzc4PXN0YXRpYyB2b2lkIHNjYW5fc2xvdHNfZm9yX3JlY29tcHJlc3Moc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBtb2RlLCB1MzIgcHJpbyxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MjItICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQyMzpzdGF0aWMgaW50IHJlY29tcHJlc3Nfc2xvdChzdHJ1Y3QgenJhbSAqenJhbSwgdTMyIGluZGV4LCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDI0LVxcdFxcdFxcdCAgIHU2NCAqbnVtX3JlY29tcF9wYWdlcywgdTMyIHRocmVzaG9sZCwgdTMyIHByaW8pXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYz0yNTI5PXN0YXRpYyBzc2l6ZV90IHJlY29tcHJlc3Nfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjY1MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNjUxOlxcdFxcdGVyciA9IHJlY29tcHJlc3Nfc2xvdCh6cmFtLCBwcHMtXFx1MDAzZWluZGV4LCBwYWdlLFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI2NTItXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm51bV9yZWNvbXBfcGFnZXMsIHRocmVzaG9sZCwgcHJpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI0OjM2LjE5NzQyNjc4NVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDY4MjMyODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTWVtb3J5IENvbXByZXNzaW9uIE9wdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGByZWNvbXByZXNzX3N0b3JlYCBhdHRyaWJ1dGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHN5c2ZzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBkZWx2ZSBpbnRvIHRoZSBtZW1vcnkgY29tcHJlc3Npb24gbGFuZHNjYXBlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gTGV0J3Mgc2VlIGhvdyBgWlJBTWAgYW5kIGBaU01BTExPQ2AgYXJlIGNvbmZpZ3VyZWQuIE9mIGNvdXJzZSwgYFpSQU1gIHJlbGllcyBvbiBgQkxPQ0tgLCBzbyB0aGF0J3MgYSBkZXBlbmRlbmN5IEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIEFuZCBpdCBsb29rcyBsaWtlIGBaU01BTExPQ2AgZGVwZW5kcyBvbiBgTU1VYC4gSnVzdCB0byBiZSB0aG9yb3VnaCwgSSBzaG91bGQgYWxzbyBicmllZmx5IGNoZWNrIG91dCBgWlNXQVBgIGFuZCBpdHMgY29uZmlndXJhdGlvbi4gSSB3YW50IHRvIGJ1aWxkIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgbGFuZHNjYXBlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDA0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjQ6NDAuNjY1NjYyMjEzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcxMDIwMDI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBaU1dBUFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEyPW1lbnVjb25maWcgU1dBUFxcbi0tXFxubW0vS2NvbmZpZy0yMS1cXG5tbS9LY29uZmlnOjIyOmNvbmZpZyBaU1dBUFxcbm1tL0tjb25maWctMjMtXFx0Ym9vbCBcXFwiQ29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlc1xcXCJcXG4tLVxcbm1tL0tjb25maWctMzQtXFxubW0vS2NvbmZpZzozNTpjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbm1tL0tjb25maWctMzYtXFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTQ0LVxcbm1tL0tjb25maWc6NDU6Y29uZmlnIFpTV0FQX1NIUklOS0VSX0RFRkFVTFRfT05cXG5tbS9LY29uZmlnLTQ2LVxcdGJvb2wgXFxcIlNocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTU5PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy03Ni1cXG5tbS9LY29uZmlnOjc3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfREVGTEFURVxcbm1tL0tjb25maWctNzgtXFx0Ym9vbCBcXFwiRGVmbGF0ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODItXFxubW0vS2NvbmZpZzo4Mzpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUX0xaT1xcbm1tL0tjb25maWctODQtXFx0Ym9vbCBcXFwiTFpPXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OC1cXG5tbS9LY29uZmlnOjg5OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfODQyXFxubW0vS2NvbmZpZy05MC1cXHRib29sIFxcXCI4NDJcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk0LVxcbm1tL0tjb25maWc6OTU6Y29uZmlnIFpTV0FQX0NPTVBSRVNTT1JfREVGQVVMVF9MWjRcXG5tbS9LY29uZmlnLTk2LVxcdGJvb2wgXFxcIkxaNFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTAwLVxcbm1tL0tjb25maWc6MTAxOmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfTFo0SENcXG5tbS9LY29uZmlnLTEwMi1cXHRib29sIFxcXCJMWjRIQ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTA2LVxcbm1tL0tjb25maWc6MTA3OmNvbmZpZyBaU1dBUF9DT01QUkVTU09SX0RFRkFVTFRfWlNURFxcbm1tL0tjb25maWctMTA4LVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5tbS9LY29uZmlnPTExMj1lbmRjaG9pY2VcXG5tbS9LY29uZmlnLTExMy1cXG5tbS9LY29uZmlnOjExNDpjb25maWcgWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUXFxubW0vS2NvbmZpZy0xMTUtICAgICAgIHN0cmluZ1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNDo0Mi4xMzY2ODk3NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzUwODY5MzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBjaGFuZ2UgaXMgbmVzdGxlZCB3aXRoaW4gYG1tL3pzbWFsbG9jLmNgLCB3aGljaCBtYWtlcyBzZW5zZSBnaXZlbiB0aGUgY29udGV4dC4gTXkgaW5pdGlhbCBmb2N1cyBuZWVkcyB0byBiZSBvbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AuIEkgYWxyZWFkeSBrbm93IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGlzIGV4cG9ydGVkLCBhbmQgYHpyYW1fZHJ2LmNgIGxldmVyYWdlcyBpdC4gU2ltaWxhcmx5LCBgenNfbWFsbG9jYCBpcyBleHBvc2VkIGZvciB1c2UgYnkgYm90aCBgenJhbV9kcnYuY2AgYW5kIGB6c3dhcC5jYC4gTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGV4dGVudCBvZiB0aGUgY2hhbmdlLCBzbyBsZXQncyBjaGVjayB3aG8ncyBjYWxsaW5nIGB6c19tYWxsb2NgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgdXNpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcxNjUsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNDo0NS44ODc1NjExN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMzA3MTc1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c19tYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Q9MTA9b3IgeW91IGNhbiBkaXJlY3RseSByZXF1ZXN0IHBhZ2VzIGZyb20gdGhlIHBhZ2UgYWxsb2NhdG9yIHdpdGhcXG5Eb2N1bWVudGF0aW9uL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdC0xMS1gYWxsb2NfcGFnZXNgLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBtb3JlIHNwZWNpYWxpemVkIGFsbG9jYXRvcnMsXFxuRG9jdW1lbnRhdGlvbi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Q6MTI6Zm9yIGluc3RhbmNlIGBjbWFfYWxsb2NgIG9yIGB6c19tYWxsb2NgLlxcbkRvY3VtZW50YXRpb24vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTEzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS96c21hbGxvYy5yc3Q9MjI9dW5jb21wcmVzc2VkIGZvcm0pLiBGb3IgYWxsb2NhdGlvbiByZXF1ZXN0cyBsYXJnZXIgdGhhbiB0aGlzIHNpemUsIGZhaWx1cmVcXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdDoyMzppcyByZXR1cm5lZCAoc2VlIHpzX21hbGxvYykuXFxuRG9jdW1lbnRhdGlvbi9tbS96c21hbGxvYy5yc3QtMjQtXFxuRG9jdW1lbnRhdGlvbi9tbS96c21hbGxvYy5yc3Q6MjU6QWRkaXRpb25hbGx5LCB6c19tYWxsb2MoKSBkb2VzIG5vdCByZXR1cm4gYSBkZXJlZmVyZW5jZWFibGUgcG9pbnRlci5cXG5Eb2N1bWVudGF0aW9uL21tL3pzbWFsbG9jLnJzdC0yNi1JbnN0ZWFkLCBpdCByZXR1cm5zIGFuIG9wYXF1ZSBoYW5kbGUgKHVuc2lnbmVkIGxvbmcpIHdoaWNoIGVuY29kZXMgYWN0dWFsXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9jb3JlLWFwaS9tZW1vcnktYWxsb2NhdGlvbi5yc3Q9MTk9TGludXjkuLrlhoXlrZjliIbphY3mj5DkvpvkuoblpJrnp41BUEnjgILkvaDlj6/ku6Xkvb/nlKggYGttYWxsb2NgIOaIliBga21lbV9jYWNoZV9hbGxvY2BcXG4tLVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL2NvcmUtYXBpL21lbW9yeS1hbGxvY2F0aW9uLnJzdC0yMS3kvaDlj6/ku6XnlKggYWxsb2NfcGFnZXMg55u05o6l5ZCR6aG16Z2i5YiG6YWN5Zmo6K+35rGC6aG16Z2i44CC5Lmf5Y+v5Lul5L2/55So5pu05LiT5Lia55qE5YiG6YWN5Zmo77yMXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0OjIyOuS+i+WmgiBgY21hX2FsbG9jYCDmiJYgYHpzX21hbGxvY2Ag44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vY29yZS1hcGkvbWVtb3J5LWFsbG9jYXRpb24ucnN0LTIzLVxcbi0tXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0venNtYWxsb2MucnN0PTEwPXpzbWFsbG9jXFxuLS1cXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS96c21hbGxvYy5yc3QtMjMt6KaB5rGC77yI5Zyo5pyA5Z2P55qE5oOF5Ya15LiL77yM6aG16Z2i5piv5LiN5Y+v5Y6L57yp55qE77yM5Zug5q2k5LulXFxcIuWOn+agt1xcXCLljbPmnKrljovnvKnnmoTlvaLlvI/lrZjlgqjvvInjgILlr7nkuo7lpKfkuo7ov5lcXG5Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS96c21hbGxvYy5yc3Q6MjQ65Liq5aSn5bCP55qE5YiG6YWN6K+35rGC77yM5Lya6L+U5Zue5aSx6LSl77yI6KeBenNfbWFsbG9j77yJ44CCXFxuRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0venNtYWxsb2MucnN0LTI1LVxcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdDoyNjrmraTlpJbvvIx6c19tYWxsb2MoKeW5tuS4jei/lOWbnuS4gOS4quWPr+mHjeWkjeW8leeUqOeahOaMh+mSiOOAguebuOWPje+8jOWug+i/lOWbnuS4gOS4quS4jemAj+aYjueahOWPpeafhO+8iOaXoOespuWPt1xcbkRvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL3pzbWFsbG9jLnJzdC0yNy3plb/vvInvvIzlroPnvJbnoIHkuobooqvliIbphY3lr7nosaHnmoTlrp7pmYXkvY3nva7jgILov5nnp43pl7TmjqXmgKfnmoTljp/lm6DmmK96c21hbGxvY+W5tuS4jeS/neaMgXpzcGFnZXPnmoTmsLjkuYVcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyMjk9c3RhdGljIGludCB3cml0ZV9pbmNvbXByZXNzaWJsZV9wYWdlKHN0cnVjdCB6cmFtICp6cmFtLCBzdHJ1Y3QgcGFnZSAqcGFnZSxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTIyMzktXFx0ICovXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjI0MDpcXHRoYW5kbGUgPSB6c19tYWxsb2MoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIFBBR0VfU0laRSxcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMjQxLVxcdFxcdFxcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTIyNzA9c3RhdGljIGludCB6cmFtX3dyaXRlX3BhZ2Uoc3RydWN0IHpyYW0gKnpyYW0sIHN0cnVjdCBwYWdlICpwYWdlLCB1MzIgaW5kZXgpXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzAyLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjIzMDM6XFx0aGFuZGxlID0genNfbWFsbG9jKHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbixcXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yMzA0LVxcdFxcdFxcdCAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNTA1LVxcdCAqL1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI1MDY6XFx0aGFuZGxlX25ldyA9IHpzX21hbGxvYyh6cmFtLVxcdTAwM2VtZW1fcG9vbCwgY29tcF9sZW5fbmV3LFxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI1MDctXFx0XFx0XFx0ICAgICAgIEdGUF9OT0lPIHwgX19HRlBfTk9XQVJOIHxcXG4tLVxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaD0yOD12b2lkIHpzX2Rlc3Ryb3lfcG9vbChzdHJ1Y3QgenNfcG9vbCAqcG9vbCk7XFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oLTI5LVxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaDozMDp1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLFxcbmluY2x1ZGUvbGludXgvenNtYWxsb2MuaC0zMS1cXHRcXHRcXHRjb25zdCBpbnQgbmlkKTtcXG4tLVxcbm1tL3pzbWFsbG9jLmM9MTI0OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBvYmpfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLFxcbi0tXFxubW0venNtYWxsb2MuYy0xMjkwLS8qKlxcbm1tL3pzbWFsbG9jLmM6MTI5MTogKiB6c19tYWxsb2MgLSBBbGxvY2F0ZSBibG9jayBvZiBnaXZlbiBzaXplIGZyb20gcG9vbC5cXG5tbS96c21hbGxvYy5jLTEyOTItICogQHBvb2w6IHBvb2wgdG8gYWxsb2NhdGUgZnJvbVxcbi0tXFxubW0venNtYWxsb2MuYy0xMzAwLSAqL1xcbm1tL3pzbWFsbG9jLmM6MTMwMTp1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCxcXG5tbS96c21hbGxvYy5jLTEzMDItXFx0XFx0XFx0Y29uc3QgaW50IG5pZClcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTM1NS19XFxubW0venNtYWxsb2MuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7XFxubW0venNtYWxsb2MuYy0xMzU3LVxcbi0tXFxubW0venNtYWxsb2MuYz0yMDc0PXN0cnVjdCB6c19wb29sICp6c19jcmVhdGVfcG9vbChjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubW0venNtYWxsb2MuYy0yMTE5LVxcdFxcdFxcdCAqIFRoZSBvYmplY3QgdXNlcyBaU19IQU5ETEVfU0laRSBieXRlcyB0byBzdG9yZSB0aGVcXG5tbS96c21hbGxvYy5jOjIxMjA6XFx0XFx0XFx0ICogaGFuZGxlLiBXZSBuZWVkIHRvIHN1YnRyYWN0IGl0LCBiZWNhdXNlIHpzX21hbGxvYygpXFxubW0venNtYWxsb2MuYy0yMTIxLVxcdFxcdFxcdCAqIHVuY29uZGl0aW9uYWxseSBhZGRzIGhhbmRsZSBzaXplIGJlZm9yZSBpdCBwZXJmb3Jtc1xcbi0tXFxubW0venN3YXAuYz04NDA9c3RhdGljIGJvb2wgenN3YXBfY29tcHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXFxuLS1cXG5tbS96c3dhcC5jLTg5OS1cXHRnZnAgPSBHRlBfTk9XQUlUIHwgX19HRlBfTk9SRVRSWSB8IF9fR0ZQX0hJR0hNRU0gfCBfX0dGUF9NT1ZBQkxFO1xcbm1tL3pzd2FwLmM6OTAwOlxcdGhhbmRsZSA9IHpzX21hbGxvYyhwb29sLVxcdTAwM2V6c19wb29sLCBkbGVuLCBnZnAsIHBhZ2VfdG9fbmlkKHBhZ2UpKTtcXG5tbS96c3dhcC5jLTkwMS1cXHRpZiAoSVNfRVJSX1ZBTFVFKGhhbmRsZSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjQ6NDcuMzEwNjQwNjU3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0Mjg1NTYzOTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac21hbGxvYyBQYXRjaCBmb3IgRW5oYW5jZWQgTWVtb3J5IE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gYWRkcmVzc2luZyBhbiBpc3N1ZSB3aXRoaW4gdGhlIGB6c21hbGxvY2Agc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgaW1wYWN0aW5nIGB6cmFtX2Rydi5jYCBhbmQgYHpzd2FwLmNgLiBNeSBpbml0aWFsIGFuYWx5c2lzIHBvaW50cyB0byBhIGZsYXcgaW4gaG93IGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGNhbGN1bGF0ZXMgdGhlIGNsYXNzIGluZGV4IHdoZW4gYWxsb2NhdGluZyBtZW1vcnksIHBhcnRpY3VsYXJseSBpbiB0aGUgYHpyYW1gIGFuZCBgenN3YXBgIGNvbnRleHRzLiBUaGUgYnVnIGludm9sdmVzIGEgbWlzc2luZyBgWlNfSEFORExFX1NJWkVgIGFkZGl0aW9uLCB3aGljaCBpcyBjcnVjaWFsIGZvciBhY2N1cmF0ZSBpbmRleGluZy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBidWcgZml4LCBhcyBpdCBkaXJlY3RseSBpbXBhY3RzIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5NeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBhbmQgYHpzX21hbGxvY2AsIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuIFRvIHByb3Blcmx5IGV2YWx1YXRlIHRoZSBwYXRjaCdzIHNjb3BlLCBJIHNob3VsZCB2ZXJpZnkgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgWlNNQUxMT0NgLCBgWlJBTWAsIGFuZCBgWlNXQVBgLiBJdCdzIGVzc2VudGlhbCB0byBlbnN1cmUgdGhlc2UgYXJlIGVuYWJsZWQgYW5kIGZ1bmN0aW9uaW5nIGFzIGV4cGVjdGVkLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgZGVwZW5kZW5jaWVzLiBgWlNNQUxMT0NgIGRlcGVuZHMgb24gYE1NVWAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgWlJBTWAgcmVsaWVzIG9uIGBCTE9DS2AsIGFuZCBgWlNXQVBgIGNsZWFybHkgbmVlZHMgYFNXQVBgLiBUaGF0J3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLiBKdXN0IHRvIGNvbmZpcm0sIGxldCdzIHJlLXZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzOiBgWlNXQVBgIGRlcGVuZHMgb24gYFNXQVBgLCBgWlJBTWAgZGVwZW5kcyBvbiBgQkxPQ0tgLCBhbmQgYFpTTUFMTE9DYCBoYXMgdGhlIGBNTVVgIHJlcXVpcmVtZW50LiBTZWVtcyBJJ20gcmlnaHQgYWJvdXQgYFpSQU1gJ3MgZGVwZW5kZW5jaWVzIHRvby4gQWxsIHRoaXMgaW5mb3JtYXRpb24gaXMgY3JpdGljYWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgY29ycmVjdCBjb250ZXh0IGZvciB0aGlzIHBhdGNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDQ1LCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI0OjUzLjczOTE5OTgxOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc5MDE0NzYwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWlJBTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOmNvbmZpZyBaUkFNXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiQ29tcHJlc3NlZCBSQU0gYmxvY2sgZGV2aWNlIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xNi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNzpjb25maWcgWlJBTV9CQUNLRU5EX0xaNFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE4LVxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctMjItXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MjM6Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTI0LVxcdGJvb2wgXFxcImx6NGhjIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0yOC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoyOTpjb25maWcgWlJBTV9CQUNLRU5EX1pTVERcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zMC1cXHRib29sIFxcXCJ6c3RkIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzozNTpjb25maWcgWlJBTV9CQUNLRU5EX0RFRkxBVEVcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0zNi1cXHRib29sIFxcXCJkZWZsYXRlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00MC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo0MTpjb25maWcgWlJBTV9CQUNLRU5EXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTQyLVxcdGJvb2wgXFxcIjg0MiBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6NDc6Y29uZmlnIFpSQU1fQkFDS0VORF9GT1JDRV9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy00OC1cXHRkZXBlbmRzIG9uIFpSQU1cXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTUyLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjUzOmNvbmZpZyBaUkFNX0JBQ0tFTkRfTFpPXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctNTQtXFx0Ym9vbCBcXFwibHpvIGFuZCBsem8tcmxlIGNvbXByZXNzaW9uIHN1cHBvcnRcXFwiIGlmICFaUkFNX0JBQ0tFTkRfRk9SQ0VfTFpPXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZz02MD1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjY1OmNvbmZpZyBaUkFNX0RFRl9DT01QX0xaT1JMRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTY2LVxcdGJvb2wgXFxcImx6by1ybGVcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy02OC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo2OTpjb25maWcgWlJBTV9ERUZfQ09NUF9MWk9cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03MC1cXHRib29sIFxcXCJsem9cXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Mi1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Mzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRcXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03NC1cXHRib29sIFxcXCJsejRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy03Ni1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo3Nzpjb25maWcgWlJBTV9ERUZfQ09NUF9MWjRIQ1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTc4LVxcdGJvb2wgXFxcImx6NGhjXFxcIlxcbi0tXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6ODE6Y29uZmlnIFpSQU1fREVGX0NPTVBfWlNURFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTgyLVxcdGJvb2wgXFxcInpzdGRcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy04NC1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzo4NTpjb25maWcgWlJBTV9ERUZfQ09NUF9ERUZMQVRFXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctODYtXFx0Ym9vbCBcXFwiZGVmbGF0ZVxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTg4LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjg5OmNvbmZpZyBaUkFNX0RFRl9DT01QXzg0MlxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTkwLVxcdGJvb2wgXFxcIjg0MlxcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnPTkzPWVuZGNob2ljZVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTk0LVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnOjk1OmNvbmZpZyBaUkFNX0RFRl9DT01QXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWctOTYtXFx0c3RyaW5nXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTA3OmNvbmZpZyBaUkFNX1dSSVRFQkFDS1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEwOC0gICAgICAgYm9vbCBcXFwiV3JpdGUgYmFjayBpbmNvbXByZXNzaWJsZSBvciBpZGxlIHBhZ2UgdG8gYmFja2luZyBkZXZpY2VcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjAtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTIxOmNvbmZpZyBaUkFNX1RSQUNLX0VOVFJZX0FDVElNRVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEyMi1cXHRib29sIFxcXCJUcmFjayBhY2Nlc3MgdGltZSBvZiB6cmFtIGVudHJpZXNcXFwiXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9ibG9jay96cmFtL0tjb25maWc6MTI5OmNvbmZpZyBaUkFNX01FTU9SWV9UUkFDS0lOR1xcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzMC1cXHRib29sIFxcXCJUcmFjayB6UmFtIGJsb2NrIHN0YXR1c1xcXCJcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTEzOS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZzoxNDA6Y29uZmlnIFpSQU1fTVVMVElfQ09NUFxcbmRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnLTE0MS1cXHRib29sIFxcXCJFbmFibGUgbXVsdGlwbGUgY29tcHJlc3Npb24gc3RyZWFtc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjQ6NTUuNTI5MzUyNDk1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5ODAyOTcyNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWlJBTSBEZXBlbmRlbmNpZXM6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgc28gSSdtIGp1c3QgcXVpY2tseSB0cnlpbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGBaUkFNYCBtb2R1bGUncyBhcmNoaXRlY3R1cmUgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBsYXRlc3QgY2hhbmdlcy4gSSBoYWQgYSBuYWdnaW5nIGZlZWxpbmcgdGhhdCBpdCB3YXNuJ3QgYXMgc2VsZi1jb250YWluZWQgYXMgSSBpbml0aWFsbHkgdGhvdWdodCwgYW5kIHN1cmUgZW5vdWdoLCBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiB3aGF0IGl0cyBrZXkgZGVwZW5kZW5jaWVzIGFyZS4gUmlnaHQsIHNvIGBaUkFNYCByZWxpZXMgb24gYEJMT0NLYCwgbmF0dXJhbGx5LCBhbmQgdGhlbiB3ZSBoYXZlIGBTWVNGU2AgZm9yIHRoZSBpbnRlcmZhY2UsIGFuZCBhbHNvIGBaU01BTExPQ2AgZm9yIHRoZSB1bmRlcmx5aW5nIG1lbW9yeSBhbGxvY2F0aW9uLiBGaW5hbGx5LCBpdCBtYWtlcyBzZW5zZSB0aGF0IGl0IGludGVncmF0ZXMgd2l0aCBgQ1JZUFRPYCBmb3IgY29tcHJlc3Npb24gYW5kLCBwb3NzaWJseSwgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgd2l0aGluIHRoZSBjb21wcmVzc2VkIFJBTSBkaXNrLiBHaXZlbiB0aGlzIHNldHVwLCBhIHF1aWNrIGxvb2sgYXQgdGhlIGBLY29uZmlnYCBmaWxlIGluIGBkcml2ZXJzL2Jsb2NrL3pyYW0vS2NvbmZpZ2Agd2lsbCBwcm9iYWJseSBjbGFyaWZ5IHRoZSByZWxhdGlvbnNoaXBzIGFuZCBwb3RlbnRpYWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGF0IGZpbGUgc2hvdWxkIHByb3ZpZGUgdGhlIGRlZmluaXRpdmUgbGlzdCBvZiBkZXBlbmRlbmNpZXMgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBjaGVjayBpdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTQ3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjQ6NTkuNTA5NjUyMzI3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvYmxvY2svenJhbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0Y29uZmlnIFpSQU1cXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJDb21wcmVzc2VkIFJBTSBibG9jayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gICA0OlxcdFxcdGRlcGVuZHMgb24gQkxPQ0sgXFx1MDAyNlxcdTAwMjYgU1lTRlMgXFx1MDAyNlxcdTAwMjYgTU1VXFxuICAgNTpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gICA2OlxcdFxcdGhlbHBcXG4gICA3OlxcdFxcdCAgQ3JlYXRlcyB2aXJ0dWFsIGJsb2NrIGRldmljZXMgY2FsbGVkIC9kZXYvenJhbVggKFggPSAwLCAxLCAuLi4pLlxcbiAgIDg6XFx0XFx0ICBQYWdlcyB3cml0dGVuIHRvIHRoZXNlIGRpc2tzIGFyZSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gbWVtb3J5XFxuICAgOTpcXHRcXHQgIGl0c2VsZi4gVGhlc2UgZGlza3MgYWxsb3cgdmVyeSBmYXN0IEkvTyBhbmQgY29tcHJlc3Npb24gcHJvdmlkZXNcXG4gIDEwOlxcdFxcdCAgZ29vZCBhbW91bnRzIG9mIG1lbW9yeSBzYXZpbmdzLlxcbiAgMTE6XFx0XFxuICAxMjpcXHRcXHQgIEl0IGhhcyBzZXZlcmFsIHVzZSBjYXNlcywgZm9yIGV4YW1wbGU6IC90bXAgc3RvcmFnZSwgdXNlIGFzIHN3YXBcXG4gIDEzOlxcdFxcdCAgZGlza3MgYW5kIG1heWJlIG1hbnkgbW9yZS5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0XFx0ICBTZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9ibG9ja2Rldi96cmFtLnJzdCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE2OlxcdFxcbiAgMTc6XFx0Y29uZmlnIFpSQU1fQkFDS0VORF9MWjRcXG4gIDE4OlxcdFxcdGJvb2wgXFxcImx6NCBjb21wcmVzc2lvbiBzdXBwb3J0XFxcIlxcbiAgMTk6XFx0XFx0ZGVwZW5kcyBvbiBaUkFNXFxuICAyMDpcXHRcXHRzZWxlY3QgTFo0X0NPTVBSRVNTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI0OjU5LjUwOTcxODM5NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzE4MDI1OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGZpcnN0LXBlcnNvbiBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBpbiB0aGUgS2VybmVsKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBpdCBzZWVtcyB0aGUgYFpSQU1gIG1vZHVsZSBpcyBzZXQgdXAgdG8gdXRpbGl6ZSBgWlNNQUxMT0NgIGZvciBpdHMgdW5kZXJseWluZyBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBBbmQgaWYgSSByZWNhbGwgY29ycmVjdGx5LCBgWlNXQVBgIGRlcGVuZHMgb24gYFpQT09MYCwgd2hpY2gsIGluIHR1cm4sICphbHNvKiB1dGlsaXplcyBgWlNNQUxMT0NgLiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZy4gSSBzaG91bGQgdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbiBhbmQgZG91YmxlIGNoZWNrIHRoZSBkZXBlbmRlbmNpZXMuIExldCdzIGdldCB0aGUgc291cmNlIGNvZGUgb3V0IGFuZCBkaWcgaW50byBgbW0vS2NvbmZpZ2AgdG8gY29uZmlybSB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBJdOKAmXMgYWx3YXlzIGdvb2QgdG8gYmUgY2VydGFpbiwgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBzdWNoIGNyaXRpY2FsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTE2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNTowMy4yMjc3NDc2MzVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM4OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgMjA6XFx0XFx0ICBpbiB5b3VyIGNvbXB1dGVyLiAgSWYgdW5zdXJlIHNheSBZLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRjb25maWcgWlNXQVBcXG4gIDIzOlxcdFxcdGJvb2wgXFxcIkNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcXFwiXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIFNXQVBcXG4gIDI1OlxcdFxcdHNlbGVjdCBDUllQVE9cXG4gIDI2OlxcdFxcdHNlbGVjdCBaU01BTExPQ1xcbiAgMjc6XFx0XFx0aGVscFxcbiAgMjg6XFx0XFx0ICBBIGxpZ2h0d2VpZ2h0IGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMuICBJdCB0YWtlc1xcbiAgMjk6XFx0XFx0ICBwYWdlcyB0aGF0IGFyZSBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBzd2FwcGVkIG91dCBhbmQgYXR0ZW1wdHMgdG9cXG4gIDMwOlxcdFxcdCAgY29tcHJlc3MgdGhlbSBpbnRvIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIFJBTS1iYXNlZCBtZW1vcnkgcG9vbC5cXG4gIDMxOlxcdFxcdCAgVGhpcyBjYW4gcmVzdWx0IGluIGEgc2lnbmlmaWNhbnQgSS9PIHJlZHVjdGlvbiBvbiBzd2FwIGRldmljZSBhbmQsXFxuICAzMjpcXHRcXHQgIGluIHRoZSBjYXNlIHdoZXJlIGRlY29tcHJlc3NpbmcgZnJvbSBSQU0gaXMgZmFzdGVyIHRoYW4gc3dhcCBkZXZpY2VcXG4gIDMzOlxcdFxcdCAgcmVhZHMsIGNhbiBhbHNvIGltcHJvdmUgd29ya2xvYWQgcGVyZm9ybWFuY2UuXFxuICAzNDpcXHRcXG4gIDM1OlxcdGNvbmZpZyBaU1dBUF9ERUZBVUxUX09OXFxuICAzNjpcXHRcXHRib29sIFxcXCJFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFxcXCJcXG4gIDM3OlxcdFxcdGRlcGVuZHMgb24gWlNXQVBcXG4gIDM4OlxcdFxcdGhlbHBcXG4gIDM5OlxcdFxcdCAgSWYgc2VsZWN0ZWQsIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIHdpbGwgYmUgZW5hYmxlZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNTowMy4yMjc5MDE3NjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzkyNzcxMDYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWlNXQVAvWlNNQUxMT0MgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgc2VlIHRoYXQgdGhlIHN5c3RlbSBpcyBjaG9vc2luZyBgWlNNQUxMT0NgIHdoZW4gYFpTV0FQYCBpcyBzZWxlY3RlZCwgd2hpY2ggbWFrZXMgc2Vuc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNwZWN0aXZlLiBUbyBlbmFibGUgdGhpcyBhcmVhIGZvciB0ZXN0aW5nLCBJIG5lZWQgdG8gbWFrZSBzdXJlIGBaU01BTExPQ2AsIGBaUkFNYCwgYW5kIGBaU1dBUGAgYXJlIGFsbCBlbmFibGVkIGluIHRoZSBjb25maWd1cmF0aW9uLiBUaGF0IHdpbGwgYmUgbXkgc3RhcnRpbmcgcG9pbnQuIFRoZSBjcnVjaWFsIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gZHVyaW5nIG15IGludmVzdGlnYXRpb24gYXJlIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYC5cblxuQWhhISBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBpcyBvbmx5IHVzZWQgd2l0aGluIGB6cmFtX2Rydi5jYCwgd2hpY2ggZ2l2ZXMgbWUgYSBzbWFsbGVyLCBtb3JlIGZvY3VzZWQgYXJlYSB0byBleHBsb3JlIGluaXRpYWxseS4gV2hlcmVhcyBgenNfbWFsbG9jYCBpcyB1c2VkIGJ5IGJvdGggYHpyYW1fZHJ2LmNgIGFuZCBgenN3YXAuY2AuXG5cbkl0IGxvb2tzIGxpa2UgdGhlIHByb3ZpZGVkIHBhdGNoIGFkZHJlc3NlcyBhbiBlcnJvciBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB0aGF0IHdhcyBpbmNvcnJlY3RseSBjYWxjdWxhdGluZyB0aGUgY2xhc3MgaW5kZXguIEdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGEgY2xhc3MgaW5kZXggZXJyb3IsIHRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgd29ydGggZnV6emluZyB0byBleHBsb3JlIHRoZSBzeXN0ZW0gYmVoYXZpb3IgdW5kZXIgdmFyaW91cyBzY2VuYXJpb3MsIGVzcGVjaWFsbHkgc2luY2UgaXQgZGVhbHMgd2l0aCBtZW1vcnkgYWxsb2NhdGlvbiBhbmQgbWFuYWdlbWVudC5cblxuVGhlcmVmb3JlLCBJJ20gc2V0dGluZyB0aGUgYFdvcnRoRnV6emluZ2AgZmxhZyB0byBgdHJ1ZWAuIE15IGBFbmFibGVDb25maWdzYCB3aWxsIGluY2x1ZGUgYFpTTUFMTE9DYCwgYFpSQU1gLCBhbmQgYFpTV0FQYCwgYW5kIG15IGBGb2N1c1N5bWJvbHNgIHdpbGwgYmUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYW5kIGB6c19tYWxsb2NgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSdsbCBxdWlja2x5IHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQuIEV4Y2VsbGVudCwgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgaXMgZXhwb3J0ZWQgd2l0aCBgRVhQT1JUX1NZTUJPTF9HUEwoenNfbG9va3VwX2NsYXNzX2luZGV4KTtgIGFuZCBgenNfbWFsbG9jYCBpcyBleHBvcnRlZCB3aXRoIGBFWFBPUlRfU1lNQk9MX0dQTCh6c19tYWxsb2MpO2AuIE5vdyB0aGF0IEkndmUgY29uZmlybWVkIGFsbCBvZiB0aGF0LCBJIGNhbiBtb3ZlIGZvcndhcmQgd2l0aCBteSBuZXh0IHN0ZXBzLlxuXG5JIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAzNiwiT3V0cHV0VG9rZW5zIjoxNjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNToxMS4xNTU2MTQ4MDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc0MDAwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNNQUxMT0NcIixcbiAgICBcIlpSQU1cIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienNfbG9va3VwX2NsYXNzX2luZGV4XCIsXG4gICAgXCJ6c19tYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCB3YXMgcmV0dXJuaW5nIHRoZSB3cm9uZyBjbGFzcyBpbmRleCBiZWNhdXNlIGl0IGRpZG4ndCBhZGQgYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSwgdW5saWtlIGB6c19tYWxsb2NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgenNtYWxsb2MgYWxsb2NhdG9yIGxvZ2ljLCB3aGljaCBpcyB1c2VkIGJ5IHpyYW0gYW5kIHpzd2FwLiBGdXp6aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNNQUxMT0NcIixcbiAgICBcIlpSQU1cIixcbiAgICBcIlpTV0FQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwienNfbG9va3VwX2NsYXNzX2luZGV4XCIsXG4gICAgXCJ6c19tYWxsb2NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCB3YXMgcmV0dXJuaW5nIHRoZSB3cm9uZyBjbGFzcyBpbmRleCBiZWNhdXNlIGl0IGRpZG4ndCBhZGQgYFpTX0hBTkRMRV9TSVpFYCB0byB0aGUgc2l6ZSwgdW5saWtlIGB6c19tYWxsb2NgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgenNtYWxsb2MgYWxsb2NhdG9yIGxvZ2ljLCB3aGljaCBpcyB1c2VkIGJ5IHpyYW0gYW5kIHpzd2FwLiBGdXp6aW5nIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXggaXMgY29ycmVjdCBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI1OjExLjIzMDM2MTE4N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc1ODAzMzczMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6MjU6MTEuMjMwNzc0MjA3WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE3NTgwMjk1NTIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgZmFpbGVkIHRvIGFjY291bnQgZm9yIGBaU19IQU5ETEVfU0laRWAgd2hlbiBsb29raW5nIHVwIHRoZSBzaXplIGNsYXNzIGluZGV4LCBjYXVzaW5nIGl0IHRvIHJldHVybiBhbiBpbmNvcnJlY3QgKHNtYWxsZXIpIGNsYXNzIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseSB1c2VkIGJ5IHpyYW0gdG8gZGV0ZXJtaW5lIGlmIHJlY29tcHJlc3NpbmcgYW4gb2JqZWN0IGlzIGJlbmVmaWNpYWwgYnkgY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjbGFzcyBpbmRpY2VzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBidXQgaXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIGlzc3VlcyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQ0N2NlNDZiYzEyNTA3MmJkYTA2OGJlNjA0Y2EzYTY0MDg0ZmFhNDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEF1ZyA5IDEyOjIwOjE3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0venNtYWxsb2MuYyBiL21tL3pzbWFsbG9jLmNcbmluZGV4IDgzZjU4MjBjNDVmOTMuLjQxYjAzYTllY2VjMjUgMTAwNjQ0XG4tLS0gYS9tbS96c21hbGxvYy5jXG4rKysgYi9tbS96c21hbGxvYy5jXG5AQCAtNDc4LDYgKzQ3OCwxMSBAQCBzdGF0aWMgaW50IGdldF9zaXplX2NsYXNzX2luZGV4KGludCBzaXplKVxuIFx0cmV0dXJuIG1pbl90KGludCwgWlNfU0laRV9DTEFTU0VTIC0gMSwgaWR4KTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBzaXplX2NsYXNzICpsb29rdXBfc2l6ZV9jbGFzcyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUpXG4re1xuK1x0cmV0dXJuIHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplICsgWlNfSEFORExFX1NJWkUpXTtcbit9XG4rXG4gc3RhdGljIGlubGluZSB2b2lkIGNsYXNzX3N0YXRfYWRkKHN0cnVjdCBzaXplX2NsYXNzICpjbGFzcywgaW50IHR5cGUsXG4gXHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgY250KVxuIHtcbkBAIC0xMDIxLDcgKzEwMjYsNyBAQCB1bnNpZ25lZCBpbnQgenNfbG9va3VwX2NsYXNzX2luZGV4KHN0cnVjdCB6c19wb29sICpwb29sLCB1bnNpZ25lZCBpbnQgc2l6ZSlcbiB7XG4gXHRzdHJ1Y3Qgc2l6ZV9jbGFzcyAqY2xhc3M7XG4gXG4tXHRjbGFzcyA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07XG4rXHRjbGFzcyA9IGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpO1xuIFxuIFx0cmV0dXJuIGNsYXNzLVx1MDAzZWluZGV4O1xuIH1cbkBAIC0xMzExLDkgKzEzMTYsNyBAQCB1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCxcbiBcdGlmICghaGFuZGxlKVxuIFx0XHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PTUVNKTtcbiBcbi1cdC8qIGV4dHJhIHNwYWNlIGluIGNodW5rIHRvIGtlZXAgdGhlIGhhbmRsZSAqL1xuLVx0c2l6ZSArPSBaU19IQU5ETEVfU0laRTtcbi1cdGNsYXNzID0gcG9vbC1cdTAwM2VzaXplX2NsYXNzW2dldF9zaXplX2NsYXNzX2luZGV4KHNpemUpXTtcbitcdGNsYXNzID0gbG9va3VwX3NpemVfY2xhc3MocG9vbCwgc2l6ZSk7XG4gXG4gXHQvKiBjbGFzcy1cdTAwM2Vsb2NrIGVmZmVjdGl2ZWx5IHByb3RlY3RzIHRoZSB6cGFnZSBtaWdyYXRpb24gKi9cbiBcdHNwaW5fbG9jayhcdTAwMjZjbGFzcy1cdTAwM2Vsb2NrKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI1OjExLjIzMDc3NTE3N1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDA0NjA4MzU5MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBac21hbGxvYyBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFpbWVkIGF0IGBtbS96c21hbGxvYy5jYCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQncyBhZGRyZXNzaW5nIGEgc3BlY2lmaWMgaXNzdWUgaW4gaG93IHNpemUgY2xhc3NlcyBhcmUgbG9va2VkIHVwLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCdzIGludHJvZHVjaW5nIHRoZSBoZWxwZXIgYGxvb2t1cF9zaXplX2NsYXNzYCB0byBoYW5kbGUgdGhlIGFkZGl0aW9uIG9mIGBaU19IQU5ETEVfU0laRWAgYmVmb3JlIGNhbGxpbmcgYGdldF9zaXplX2NsYXNzX2luZGV4KClgLiBFc3NlbnRpYWxseSwgaXQncyByZXBsYWNpbmcgZGlyZWN0IGFycmF5IGxvb2t1cHMgd2l0aCB0aGlzIG5ldyBmdW5jdGlvbi4gVGhlIGNyaXRpY2FsIGNoYW5nZXMgYXJlIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGFuZCBgenNfbWFsbG9jYCwgd2hlcmUgdGhlIG9yaWdpbmFsIGRpcmVjdCBhcnJheSBhY2Nlc3NlcyBhcmUgYmVpbmcgcmVwbGFjZWQgYnkgY2FsbHMgdG8gdGhpcyBoZWxwZXIuXG5cbkhhbmcgb24uLi4gbGV0IG1lIGZvY3VzIGluIG9uIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLiBUaGUgb3JpZ2luYWwgY29kZSB3YXMgYSBzdHJhaWdodGZvcndhcmQgYHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07YC4gTm93LCBpdCdzIHVzaW5nIGBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKWAsIHdoaWNoIGV4cGxpY2l0bHkgYWRkcyBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBzaXplICpiZWZvcmUqIGNhbGN1bGF0aW5nIHRoZSBpbmRleC4gVGhhdCBpbW1lZGlhdGVseSBjbGlja3MgLSB0aGlzIHNlZW1zIHRvIGJlIGNvcnJlY3RpbmcgYSBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgd2Fzbid0IHByb3Blcmx5IGFjY291bnRpbmcgZm9yIGBaU19IQU5ETEVfU0laRWAgZHVyaW5nIHRoZSBpbmRleCBsb29rdXAuIFRoaXMgaGFzIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25pZmljYW50IGltcGxpY2F0aW9ucyBvbiBtZW1vcnkgbWFuYWdlbWVudC5cblxuTm93LCBsZXQncyBjb25zaWRlciB0aGUgcG9zc2libGUgY29uc2VxdWVuY2VzIGFuZCB3aGF0IG1pZ2h0IGJlIGdvaW5nIG9uLiBUaGlzIGxpa2VseSBmaXhlcyBhIGJ1ZzogZWl0aGVyIGFuIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yLCBtb3JlIHN1YnRseSwgdGhlIHVzZSBvZiBhbiBpbmNvcnJlY3Qgc2l6ZSBjbGFzcyBpbmRleC4gVGhpcyB3b3VsZCBiZSBhIGJpZyBkZWFsIC0gbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgcmVhZHMvd3JpdGVzLCBhbGwgdGhlIHVzdWFsIHN1c3BlY3RzLiBBIHNtYWxsZXIgY2xhc3MgaW5kZXggdGhhbiBleHBlY3RlZCBpcyBhIG1lbW9yeSBpc3N1ZSwgYmVjYXVzZSBpdCBjb3VsZCBsZWFkIHRvIGFjY2Vzc2luZyBhIHNtYWxsZXIgY2xhc3MgYW5kIHRodXMgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG5cbkkgd29uZGVyIGFib3V0IHRoZSBzcGVjaWZpY3Mgb2YgbWVtb3J5IGNvcnJ1cHRpb24sIGFuZCB0aGUgcG90ZW50aWFsIGZvciByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQgbWUgY29uc2lkZXIgdGhlIHNjZW5hcmlvLiBJZiBpdCBkb2VzIHJldHVybiBhIHNtYWxsZXIgc2l6ZSBjbGFzcywgdGhlIGNsYXNzIGluZGV4IHJldHVybmVkIGNvdWxkIGJlIHdyb25nLiBJZiB0aGlzIGluZGV4IGlzIHVzZWQsIGRvZXMgdGhpcyBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIGV4cG9zZWQ/IE5vLCBpdCBsb29rcyBsaWtlIGl0J3MganVzdCBhIHdyb25nIHNpemUgY2xhc3MgLSBpdCdzIHN0aWxsIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0IG9mIGJvdW5kcy4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgS0FTQU4gY2FuZGlkYXRlLCB0aGF0J3MgZm9yIHN1cmUuXG5cbkkgbmVlZCB0byBhbmFseXplIHdoZXJlIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGlzIGJlaW5nIHVzZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjUwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6Mjc6MzEuNjkxNjE0NzYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDQ0ODkwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwienNfbG9va3VwX2NsYXNzX2luZGV4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3pzbWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0venNtYWxsb2MuYz0xMDA5PXN0YXRpYyBib29sIHpzcGFnZV9lbXB0eShzdHJ1Y3QgenNwYWdlICp6c3BhZ2UpXFxuLS1cXG5tbS96c21hbGxvYy5jLTEwMTQtLyoqXFxubW0venNtYWxsb2MuYzoxMDE1OiAqIHpzX2xvb2t1cF9jbGFzc19pbmRleCgpIC0gUmV0dXJucyBpbmRleCBvZiB0aGUgenNtYWxsb2MgXFx1MDAyNnNpemVfY2xhc3NcXG5tbS96c21hbGxvYy5jLTEwMTYtICogdGhhdCBob2xkIG9iamVjdHMgb2YgdGhlIHByb3ZpZGVkIHNpemUuXFxuLS1cXG5tbS96c21hbGxvYy5jLTEwMjQtICovXFxubW0venNtYWxsb2MuYzoxMDI1OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKVxcbm1tL3pzbWFsbG9jLmMtMTAyNi17XFxuLS1cXG5tbS96c21hbGxvYy5jLTEwMzItfVxcbm1tL3pzbWFsbG9jLmM6MTAzMzpFWFBPUlRfU1lNQk9MX0dQTCh6c19sb29rdXBfY2xhc3NfaW5kZXgpO1xcbm1tL3pzbWFsbG9jLmMtMTAzNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6Mjc6MzIuMDM2MTA5MzQxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4MTU0MTU2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkludmVzdGlnYXRpbmcgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgVXNhZ2UqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgYWxsIHRoZSBwbGFjZXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsICpzcGVjaWZpY2FsbHkqIG91dHNpZGUgb2YgYG1tL3pzbWFsbG9jLmNgLiBXZSBhbHJlYWR5IGtub3cgaXQncyAqd2l0aGluKiB0aGUgenNtYWxsb2MgaW1wbGVtZW50YXRpb24sIHNvIHRyYWNraW5nIGRvd24gdGhvc2UgaW50ZXJuYWwgdXNlcyBpc24ndCB0aGUgcHJpb3JpdHkgZm9yIG15IGN1cnJlbnQgaW52ZXN0aWdhdGlvbi4gTXkgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgaWYgdGhlcmUgYXJlIGFueSAqZXh0ZXJuYWwqIGRlcGVuZGVuY2llcywgb3IgaWYgaXQncyBtb3JlIHNlbGYtY29udGFpbmVkLiBMb2NhdGluZyB0aGUgZXh0ZXJuYWwgY2FsbHMgaXMgd2hlcmUgSSBzaG91bGQgc3RhcnQuIEkgd2lsbCBuZWVkIHRvIHVzZSBhIHRvb2wgdG8gbG9jYXRlIGNyb3NzIGZpbGUgcmVmZXJlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ2OCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI3OjM1Ljg1MTUyODQxOFoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2MjE3Mjg5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ6c19sb29rdXBfY2xhc3NfaW5kZXhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDc2LVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzc6XFx0Y2xhc3NfaW5kZXhfb2xkID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9vbGQpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jOjI0Nzg6XFx0Y2xhc3NfaW5kZXhfbmV3ID0genNfbG9va3VwX2NsYXNzX2luZGV4KHpyYW0tXFx1MDAzZW1lbV9wb29sLCBjb21wX2xlbl9uZXcpO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmg9Mzc9dW5zaWduZWQgbG9uZyB6c19jb21wYWN0KHN0cnVjdCB6c19wb29sICpwb29sKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtMzgtXFxuaW5jbHVkZS9saW51eC96c21hbGxvYy5oOjM5OnVuc2lnbmVkIGludCB6c19sb29rdXBfY2xhc3NfaW5kZXgoc3RydWN0IHpzX3Bvb2wgKnBvb2wsIHVuc2lnbmVkIGludCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L3pzbWFsbG9jLmgtNDAtXFxuLS1cXG5tbS96c21hbGxvYy5jPTEwMDk9c3RhdGljIGJvb2wgenNwYWdlX2VtcHR5KHN0cnVjdCB6c3BhZ2UgKnpzcGFnZSlcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAxNC0vKipcXG5tbS96c21hbGxvYy5jOjEwMTU6ICogenNfbG9va3VwX2NsYXNzX2luZGV4KCkgLSBSZXR1cm5zIGluZGV4IG9mIHRoZSB6c21hbGxvYyBcXHUwMDI2c2l6ZV9jbGFzc1xcbm1tL3pzbWFsbG9jLmMtMTAxNi0gKiB0aGF0IGhvbGQgb2JqZWN0cyBvZiB0aGUgcHJvdmlkZWQgc2l6ZS5cXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAyNC0gKi9cXG5tbS96c21hbGxvYy5jOjEwMjU6dW5zaWduZWQgaW50IHpzX2xvb2t1cF9jbGFzc19pbmRleChzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgdW5zaWduZWQgaW50IHNpemUpXFxubW0venNtYWxsb2MuYy0xMDI2LXtcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTAzMi19XFxubW0venNtYWxsb2MuYzoxMDMzOkVYUE9SVF9TWU1CT0xfR1BMKHpzX2xvb2t1cF9jbGFzc19pbmRleCk7XFxubW0venNtYWxsb2MuYy0xMDM0LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzozNy4zMTM3MDcwNzVaIiwiU2VxIjoyOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTEwMjAxNzQ4ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgWlJBTSBSZWNvbXByZXNzaW9uIExvZ2ljIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0IGluIGB6cmFtX2Rydi5jYCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgYmVpbmcgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSByZWNvbXByZXNzaW9uIGlzIHdvcnRod2hpbGUuIFRoZSBjb2RlIGNvbXBhcmVzIGBjbGFzc19pbmRleF9vbGRgIGFuZCBgY2xhc3NfaW5kZXhfbmV3YCB0byBkZWNpZGUuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBtYXliZSBhIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCBjb3VsZCBsZWFkIHRvIGluY29ycmVjdCByZWNvbXByZXNzaW9uIGRlY2lzaW9ucy4gSSB3b25kZXJlZCBpZiB0aGUgZnVuY3Rpb24gd2Fzbid0IGhhbmRsaW5nIGBaU19IQU5ETEVfU0laRWAgY29ycmVjdGx5LCBhbmQgbWF5YmUgcmV0dXJuaW5nIGFuIG9mZi1ieS1vbmUgY2xhc3MgaW5kZXguIElmIHRoYXQgd2VyZSB0aGUgY2FzZSwgaXQgY291bGQgbGVhZCB0byBwb3RlbnRpYWwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIHdoaWNoLCBvZiBjb3Vyc2UsIHdvdWxkIGJlIGEgbXVjaCBiaWdnZXIgcHJvYmxlbS5cblxuQnV0IHdhaXQsIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgIGlzICpqdXN0KiByZXR1cm5pbmcgYW4gaW5kZXguIEl0J3Mgbm90IGludm9sdmVkIHdpdGggYW55IG1lbW9yeSBhbGxvY2F0aW9uIG9yIGFjY2VzcyBkaXJlY3RseS4gU28sIEkgZG9uJ3QgdGhpbmsgdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgdGhlIGlzc3VlIGhlcmUuXG5cbkFoLCBJIHNlZSBpdCBub3cuIFRoZSBmaXggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gSXQgd2Fzbid0IGFjY291bnRpbmcgZm9yIGBaU19IQU5ETEVfU0laRWAsIHdoaWNoIGlzIGFkZGVkIGR1cmluZyB0aGUgYHpzX21hbGxvY2Agb3BlcmF0aW9uLiBTbywgYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2FzIHVzaW5nIHRoZSAqcmVxdWVzdGVkKiBzaXplLCBidXQgYHpzX21hbGxvY2Agd2FzIGFjdHVhbGx5IGFsbG9jYXRpbmcgd2l0aCB0aGUgKnJlcXVlc3RlZCogc2l6ZSAqcGx1cyogYFpTX0hBTkRMRV9TSVpFYC5cblxuVGhhdCBtYWtlcyBzZW5zZS4gVGhpcyBtZWFucyBgenJhbWAgY291bGQgaW5jb3JyZWN0bHkgYmVsaWV2ZSB0aGF0IGFuIG9iamVjdCB3aWxsIGZpdCBpbiBhIHNtYWxsZXIgbWVtb3J5IGNsYXNzIHRoYW4gaXQgYWN0dWFsbHkgZG9lcy4gVGhpcyBsZWFkcyB0byB0aGUgcG9zc2liaWxpdHkgb2YgbWFraW5nIHN1Ym9wdGltYWwgcmVjb21wcmVzc2lvbiBjaG9pY2VzLiBUaGUgc3lzdGVtIG1pZ2h0IHRoaW5rIGl0IGlzIHNhdmluZyBzcGFjZSwgd2hlbiBpbiBmYWN0IGl0IGlzIG5vdC4gVGhpcyBtZWFucyB0aGlzIGlzIGEgcHVyZWx5IGxvZ2ljYWwgYnVnLiBJdCB3b3VsZG4ndCBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJ1dCBvbmx5IGFmZmVjdHMgdGhlIGNvbXBhcmlzb24gb2YgYGNsYXNzX2luZGV4X29sZGAgYW5kIGBjbGFzc19pbmRleF9uZXdgIGR1cmluZyByZWNvbXByZXNzaW9uIGluIHpyYW0uIFRoaXMgd291bGQgcHJvYmFibHkgbm90IGV2ZW4gdHJpZ2dlciBLQVNBTiwgdW5sZXNzIGl0IHJlc3VsdHMgaW4gYW4gb3V0LW9mLWJvdW5kcyBhY2Nlc3MgZG93biB0aGUgbGluZS5cblxuSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgcmVjb21wcmVzc19zbG90YCBmdW5jdGlvbiBpbiBgenJhbV9kcnYuY2AgdG8gYmUgc3VyZSBJJ3ZlIGdvdCB0aGUgZnVsbCBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA5VDEyOjI3OjQ4LjMzMzg4NDc5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDczNjgyODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY2xhc3NfaW5kZXhfb2xkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jPTI0MjM9c3RhdGljIGludCByZWNvbXByZXNzX3Nsb3Qoc3RydWN0IHpyYW0gKnpyYW0sIHUzMiBpbmRleCwgc3RydWN0IHBhZ2UgKnBhZ2UsXFxuLS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYy0yNDMwLVxcdHVuc2lnbmVkIGludCBjb21wX2xlbl9uZXc7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQzMTpcXHR1bnNpZ25lZCBpbnQgY2xhc3NfaW5kZXhfb2xkO1xcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0MzItXFx0dW5zaWduZWQgaW50IGNsYXNzX2luZGV4X25ldztcXG4tLVxcbmRyaXZlcnMvYmxvY2svenJhbS96cmFtX2Rydi5jLTI0NzYtXFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmM6MjQ3NzpcXHRjbGFzc19pbmRleF9vbGQgPSB6c19sb29rdXBfY2xhc3NfaW5kZXgoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX29sZCk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3OC1cXHRjbGFzc19pbmRleF9uZXcgPSB6c19sb29rdXBfY2xhc3NfaW5kZXgoenJhbS1cXHUwMDNlbWVtX3Bvb2wsIGNvbXBfbGVuX25ldyk7XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ3OS1cXG5kcml2ZXJzL2Jsb2NrL3pyYW0venJhbV9kcnYuYzoyNDgwOlxcdGlmIChjbGFzc19pbmRleF9uZXcgXFx1MDAzZT0gY2xhc3NfaW5kZXhfb2xkIHx8XFxuZHJpdmVycy9ibG9jay96cmFtL3pyYW1fZHJ2LmMtMjQ4MS1cXHQgICAgKHRocmVzaG9sZCBcXHUwMDI2XFx1MDAyNiBjb21wX2xlbl9uZXcgXFx1MDAzZT0gdGhyZXNob2xkKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzo0OC4zODEyNTg5ODZaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MjgwNjk3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEJ1ZyBpbiBacmFtIENvbXByZXNzaW9uKipcblxuT2theSwgc28gSSd2ZSBwaW5uZWQgdGhpcyBkb3duLiBUaGUgcHJvYmxlbWF0aWMgYXJlYSBpcyBzb2xlbHkgd2l0aGluIHRoZSBgaWYgKGNsYXNzX2luZGV4X25ldyBcdTAwM2U9IGNsYXNzX2luZGV4X29sZClgIGNvbmRpdGlvbi4gVGhlIHBvdGVudGlhbCBpc3N1ZSBoZXJlIGlzIHRoYXQgdGhlIHpyYW0gY29tcHJlc3Npb24gYWxnb3JpdGhtLCBzcGVjaWZpY2FsbHksIGlzIG1ha2luZyBmbGF3ZWQgZGVjaXNpb25zIGFib3V0IHdoZW4gdG8gcmV0YWluIGEgcmVjb21wcmVzc2VkIG9iamVjdC4gSXTigJlzIGEgbG9naWMgZXJyb3IsIG5vdCBhIG1lbW9yeSBjb3JydXB0aW9uIGlzc3VlIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiBUaGF0J3MgYSByZWxpZWY7IEtNU0FOIGlzbid0IGdvaW5nIHRvIGJlIG5lY2Vzc2FyeSBmb3IgZGVidWdnaW5nIHRoaXMuXG5cbk5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrLCBiZWNhdXNlIEknbSBvbiB0aGUgc2NlbnQgaGVyZSwgYW5kIEkgd2FudCB0byBiZSAqYWJzb2x1dGVseSogc3VyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgKm5vKiBvdGhlciB1c2VzIG9mIGBsb29rdXBfc2l6ZV9jbGFzc2Agd2l0aGluIHRoaXMgcGF0Y2ggdGhhdCBjb3VsZCBjb250cmlidXRlIHRvIHRoZSBpc3N1ZS5cblxuUmlnaHQsIHRoZSBwYXRjaCBtb2RpZmllcyBgenNfbWFsbG9jYCB0byByZXBsYWNlIHNvbWUgb2xkIGNvZGUuIEl0J3MgdXNpbmcgYGxvb2t1cF9zaXplX2NsYXNzKHBvb2wsIHNpemUpYCBub3csIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGNvZGUsIHdoaWNoIHdhcyBsaWtlIGBzaXplICs9IFpTX0hBTkRMRV9TSVpFOyBjbGFzcyA9IHBvb2wtXHUwMDNlc2l6ZV9jbGFzc1tnZXRfc2l6ZV9jbGFzc19pbmRleChzaXplKV07YC4gTm93LCB3YWl0IGEgbWludXRlLCB0aGUgb3JpZ2luYWwgY29kZSBhZGRlZCBgWlNfSEFORExFX1NJWkVgIHRvIHRoZSBgc2l6ZWAgdmFyaWFibGUuIEJ1dCBpdCdzIHBhc3NlZCBieSB2YWx1ZSEgRG9lcyB0aGF0IGBzaXplYCB2YXJpYWJsZSBnZXQgdXNlZCBsYXRlciBpbiB0aGUgYHpzX21hbGxvY2AgZnVuY3Rpb24/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0ODcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6Mjc6NTQuMzY0MDY5NTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzY3NDU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInpzX21hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS96c21hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3pzbWFsbG9jLmM9MTI0OD1zdGF0aWMgdW5zaWduZWQgbG9uZyBvYmpfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLFxcbi0tXFxubW0venNtYWxsb2MuYy0xMjkwLS8qKlxcbm1tL3pzbWFsbG9jLmM6MTI5MTogKiB6c19tYWxsb2MgLSBBbGxvY2F0ZSBibG9jayBvZiBnaXZlbiBzaXplIGZyb20gcG9vbC5cXG5tbS96c21hbGxvYy5jLTEyOTItICogQHBvb2w6IHBvb2wgdG8gYWxsb2NhdGUgZnJvbVxcbi0tXFxubW0venNtYWxsb2MuYy0xMzAwLSAqL1xcbm1tL3pzbWFsbG9jLmM6MTMwMTp1bnNpZ25lZCBsb25nIHpzX21hbGxvYyhzdHJ1Y3QgenNfcG9vbCAqcG9vbCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCxcXG5tbS96c21hbGxvYy5jLTEzMDItXFx0XFx0XFx0Y29uc3QgaW50IG5pZClcXG4tLVxcbm1tL3pzbWFsbG9jLmMtMTM1NS19XFxubW0venNtYWxsb2MuYzoxMzU2OkVYUE9SVF9TWU1CT0xfR1BMKHpzX21hbGxvYyk7XFxubW0venNtYWxsb2MuYy0xMzU3LVxcbi0tXFxubW0venNtYWxsb2MuYz0yMDc0PXN0cnVjdCB6c19wb29sICp6c19jcmVhdGVfcG9vbChjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubW0venNtYWxsb2MuYy0yMTE5LVxcdFxcdFxcdCAqIFRoZSBvYmplY3QgdXNlcyBaU19IQU5ETEVfU0laRSBieXRlcyB0byBzdG9yZSB0aGVcXG5tbS96c21hbGxvYy5jOjIxMjA6XFx0XFx0XFx0ICogaGFuZGxlLiBXZSBuZWVkIHRvIHN1YnRyYWN0IGl0LCBiZWNhdXNlIHpzX21hbGxvYygpXFxubW0venNtYWxsb2MuYy0yMTIxLVxcdFxcdFxcdCAqIHVuY29uZGl0aW9uYWxseSBhZGRzIGhhbmRsZSBzaXplIGJlZm9yZSBpdCBwZXJmb3Jtc1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzo1NC40MDk0NDQ0MDlaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDEyNjUyNjY4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIGB6c19tYWxsb2NgJ3MgTWVtb3J5IEFsbG9jYXRpb24gTG9naWMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGB6c19tYWxsb2NgIGltcGxlbWVudGF0aW9uLiBJJ20gc3BlY2lmaWNhbGx5IGN1cmlvdXMgYWJvdXQgaG93IHRoZSBgc2l6ZWAgdmFyaWFibGUgaXMgaGFuZGxlZCAqYWZ0ZXIqIHRoYXQgY3JpdGljYWwgYHNpemUgKz0gWlNfSEFORExFX1NJWkU7YCBsaW5lLiBJdCdzIGEgdGV4dGJvb2sgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdHkgb3IgZWZmaWNpZW5jeSBib3R0bGVuZWNrLCByaWdodD8gSSB3YW50IHRvIGNvbmZpcm0gaWYgYHNpemVgIGlzIHN1YnNlcXVlbnRseSB1c2VkIGNvcnJlY3RseSB0byBkZXRlcm1pbmUgdGhlIGFjdHVhbCBhbGxvY2F0aW9uIHNpemUgYW5kIHVzYWdlLCBvciBpZiB0aGVyZSdzIGEgcG90ZW50aWFsIGZvciBvZmYtYnktb25lIGVycm9ycyBvciBtZW1vcnkgbWlzbWFuYWdlbWVudC4gV2UgbmVlZCB0byBiZSBlc3BlY2lhbGx5IGFsZXJ0IGZvciBhbnkgbG9naWMgdGhhdCBtaWdodCBpbmFkdmVydGVudGx5IHVzZSB0aGUgb3JpZ2luYWwgKHByZS1pbmNyZW1lbnQpIGBzaXplYCBpbiBjcml0aWNhbCBjYWxjdWxhdGlvbnMuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgdHJhY2Ugd2hlcmUgYHNpemVgIGlzIHVzZWQsIGxvb2tpbmcgZm9yIGhvdyB0aGUgaW5jcmVtZW50ZWQgdmFsdWUgaW1wYWN0cyB0aGUgYWxsb2NhdGlvbiwgYm91bmRzIGNoZWNraW5nLCBhbmQgYW55IHBvdGVudGlhbCBoYW5kbGUgbWFuYWdlbWVudCByb3V0aW5lcy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzNTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzo1OC41MzU5NzM5NTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIxMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3pzbWFsbG9jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMwMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMwMDpcXHQgKi9cXG4xMzAxOlxcdHVuc2lnbmVkIGxvbmcgenNfbWFsbG9jKHN0cnVjdCB6c19wb29sICpwb29sLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwLFxcbjEzMDI6XFx0XFx0XFx0XFx0Y29uc3QgaW50IG5pZClcXG4xMzAzOlxcdHtcXG4xMzA0OlxcdFxcdHVuc2lnbmVkIGxvbmcgaGFuZGxlO1xcbjEzMDU6XFx0XFx0c3RydWN0IHNpemVfY2xhc3MgKmNsYXNzO1xcbjEzMDY6XFx0XFx0aW50IG5ld2ZnO1xcbjEzMDc6XFx0XFx0c3RydWN0IHpzcGFnZSAqenNwYWdlO1xcbjEzMDg6XFx0XFxuMTMwOTpcXHRcXHRpZiAodW5saWtlbHkoIXNpemUpKVxcbjEzMTA6XFx0XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVJTlZBTCk7XFxuMTMxMTpcXHRcXG4xMzEyOlxcdFxcdGlmICh1bmxpa2VseShzaXplIFxcdTAwM2UgWlNfTUFYX0FMTE9DX1NJWkUpKVxcbjEzMTM6XFx0XFx0XFx0cmV0dXJuICh1bnNpZ25lZCBsb25nKUVSUl9QVFIoLUVOT1NQQyk7XFxuMTMxNDpcXHRcXG4xMzE1OlxcdFxcdGhhbmRsZSA9IGNhY2hlX2FsbG9jX2hhbmRsZShnZnApO1xcbjEzMTY6XFx0XFx0aWYgKCFoYW5kbGUpXFxuMTMxNzpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PTUVNKTtcXG4xMzE4OlxcdFxcbjEzMTk6XFx0XFx0Y2xhc3MgPSBsb29rdXBfc2l6ZV9jbGFzcyhwb29sLCBzaXplKTtcXG4xMzIwOlxcdFxcbjEzMjE6XFx0XFx0LyogY2xhc3MtXFx1MDAzZWxvY2sgZWZmZWN0aXZlbHkgcHJvdGVjdHMgdGhlIHpwYWdlIG1pZ3JhdGlvbiAqL1xcbjEzMjI6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuMTMyMzpcXHRcXHR6c3BhZ2UgPSBmaW5kX2dldF96c3BhZ2UoY2xhc3MpO1xcbjEzMjQ6XFx0XFx0aWYgKGxpa2VseSh6c3BhZ2UpKSB7XFxuMTMyNTpcXHRcXHRcXHRvYmpfbWFsbG9jKHBvb2wsIHpzcGFnZSwgaGFuZGxlKTtcXG4xMzI2OlxcdFxcdFxcdC8qIE5vdyBtb3ZlIHRoZSB6c3BhZ2UgdG8gYW5vdGhlciBmdWxsbmVzcyBncm91cCwgaWYgcmVxdWlyZWQgKi9cXG4xMzI3OlxcdFxcdFxcdGZpeF9mdWxsbmVzc19ncm91cChjbGFzcywgenNwYWdlKTtcXG4xMzI4OlxcdFxcdFxcdGNsYXNzX3N0YXRfYWRkKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcXG4xMzI5OlxcdFxcbjEzMzA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMTMzMTpcXHRcXHR9XFxuMTMzMjpcXHRcXG4xMzMzOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuMTMzNDpcXHRcXG4xMzM1OlxcdFxcdHpzcGFnZSA9IGFsbG9jX3pzcGFnZShwb29sLCBjbGFzcywgZ2ZwLCBuaWQpO1xcbjEzMzY6XFx0XFx0aWYgKCF6c3BhZ2UpIHtcXG4xMzM3OlxcdFxcdFxcdGNhY2hlX2ZyZWVfaGFuZGxlKGhhbmRsZSk7XFxuMTMzODpcXHRcXHRcXHRyZXR1cm4gKHVuc2lnbmVkIGxvbmcpRVJSX1BUUigtRU5PTUVNKTtcXG4xMzM5OlxcdFxcdH1cXG4xMzQwOlxcdFxcbjEzNDE6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjbGFzcy1cXHUwMDNlbG9jayk7XFxuMTM0MjpcXHRcXHRvYmpfbWFsbG9jKHBvb2wsIHpzcGFnZSwgaGFuZGxlKTtcXG4xMzQzOlxcdFxcdG5ld2ZnID0gZ2V0X2Z1bGxuZXNzX2dyb3VwKGNsYXNzLCB6c3BhZ2UpO1xcbjEzNDQ6XFx0XFx0aW5zZXJ0X3pzcGFnZShjbGFzcywgenNwYWdlLCBuZXdmZyk7XFxuMTM0NTpcXHRcXHRhdG9taWNfbG9uZ19hZGQoY2xhc3MtXFx1MDAzZXBhZ2VzX3Blcl96c3BhZ2UsIFxcdTAwMjZwb29sLVxcdTAwM2VwYWdlc19hbGxvY2F0ZWQpO1xcbjEzNDY6XFx0XFx0Y2xhc3Nfc3RhdF9hZGQoY2xhc3MsIFpTX09CSlNfQUxMT0NBVEVELCBjbGFzcy1cXHUwMDNlb2Jqc19wZXJfenNwYWdlKTtcXG4xMzQ3OlxcdFxcdGNsYXNzX3N0YXRfYWRkKGNsYXNzLCBaU19PQkpTX0lOVVNFLCAxKTtcXG4xMzQ4OlxcdFxcbjEzNDk6XFx0XFx0LyogV2UgY29tcGxldGVseSBzZXQgdXAgenNwYWdlIHNvIG1hcmsgdGhlbSBhcyBtb3ZhYmxlICovXFxuMTM1MDpcXHRcXHRTZXRac1BhZ2VNb3ZhYmxlKHBvb2wsIHpzcGFnZSk7XFxuMTM1MTpcXHRvdXQ6XFxuMTM1MjpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Y2xhc3MtXFx1MDAzZWxvY2spO1xcbjEzNTM6XFx0XFxuMTM1NDpcXHRcXHRyZXR1cm4gaGFuZGxlO1xcbjEzNTU6XFx0fVxcbjEzNTY6XFx0RVhQT1JUX1NZTUJPTF9HUEwoenNfbWFsbG9jKTtcXG4xMzU3OlxcdFxcbjEzNTg6XFx0c3RhdGljIHZvaWQgb2JqX2ZyZWUoaW50IGNsYXNzX3NpemUsIHVuc2lnbmVkIGxvbmcgb2JqKVxcbjEzNTk6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wOVQxMjoyNzo1OC41MzYwOTYyNDZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODQ5NzYxMTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgWlJBTSBQYXRjaCoqXG5cbk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIEl0IHNlZW1zIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggaXNuJ3QgaW4gYHpzX21hbGxvY2AgaXRzZWxmLCBidXQgaW4gdGhlIGZ1bmN0aW9uIGl0J3MgY2FsbGluZzogYHpzX2xvb2t1cF9jbGFzc19pbmRleGAuIEkgc2VlIHRoYXQgdGhlIGBzaXplYCB2YXJpYWJsZSwgb2J0YWluZWQgYWZ0ZXIgY2FsbGluZyBgbG9va3VwX3NpemVfY2xhc3NgLCBpc24ndCBldmVuIHVzZWQgbGF0ZXIgaW4gYHpzX21hbGxvY2AuIFNvLCB0aGUgcmVmYWN0b3JpbmcgaXMgZXNzZW50aWFsbHkgYSBzaWRlLWVmZmVjdCwgdGhlIHJlYWwgYWN0aW9uIGlzIGluIGB6c19sb29rdXBfY2xhc3NfaW5kZXhgLlxuXG5UaGUga2V5IGNvcnJlY3Rpb24gaGVyZSBsaWVzIHdpdGhpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YC4gSXQncyBub3cgY29ycmVjdGx5IGZhY3RvcmluZyBpbiBgWlNfSEFORExFX1NJWkVgLiBUaGlzIHdhcyB0aGUgcm9vdCBvZiB0aGUgcHJvYmxlbS4gSXQgc2VlbXMgdGhlIGZ1bmN0aW9uIHdhcyByZXR1cm5pbmcgYW4gaW5jb3JyZWN0IHNpemUgY2xhc3MgaW5kZXguIFRoaXMgaXMgcGFydGljdWxhcmx5IHJlbGV2YW50IHRvIFpSQU0gYmVjYXVzZSB0aGUgc2l6ZSBjbGFzcyBpbmRleGluZyBpcyB3aGF0IGRldGVybWluZXMgaWYgdGhlIG9iamVjdCBzaG91bGQgYmUgcmVjb21wcmVzc2VkIG9yIG5vdC4gQSBzbWFsbGVyIGluZGV4IHJldHVybmVkIG1lYW50IHRoZSBvYmplY3QgbWlnaHQgbm90IGJlIHJlY29tcHJlc3NlZCBhcHByb3ByaWF0ZWx5LlxuXG5Ob3csIGxldCdzIGFkZHJlc3MgdGhlIEtNU0FOIGFzcGVjdC4gVGhlIGlzc3VlIGF0IGhhbmQgaXNuJ3QgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnksIG9yIGFueSBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlIHBhdGNoIHJlc29sdmVzIGEgbG9naWNhbCBlcnJvciwgYSBtaXNjYWxjdWxhdGlvbiBpbiB0aGUgc2l6ZSBjbGFzcyBpbmRleC4gV2hpbGUgaW5jb3JyZWN0LCBpdCdzIG5vdCBhIG1lbW9yeSBzYWZldHkgaXNzdWUgcGVyIHNlLiBTdGFuZGFyZCBLQVNBTiwgd2l0aCBpdHMgYWJpbGl0eSB0byBkZXRlY3Qgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGlzIHN1ZmZpY2llbnQgdG8gZGVhbCB3aXRoIGFueSBwb3NzaWJsZSBwcm9ibGVtcywgaWYgdGhleSB3ZXJlIHRvIG9jY3VyLiBTbywgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaW4gdGhpcyBjYXNlLiBNeSB0YWtlIGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBjb3JyZWN0cyBhIGxvZ2ljIGVycm9yIGluIGRldGVybWluaW5nIHRoZSBzaXplIGNsYXNzIGluZGV4LCBhbmQgd2hpbGUgaXQgY291bGQgbGVhZCB0byBzdWJvcHRpbWFsIHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBpdCBkb2Vzbid0IG9wZW4gdGhlIGRvb3IgdG8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3Igc2ltaWxhciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NDMsIk91dHB1dFRva2VucyI6MTYzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDlUMTI6Mjg6MDcuMDMzNzEwOTU0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGxvZ2ljIGJ1ZyBpbiBgenNfbG9va3VwX2NsYXNzX2luZGV4YCB3aGVyZSBpdCBmYWlsZWQgdG8gYWNjb3VudCBmb3IgYFpTX0hBTkRMRV9TSVpFYCB3aGVuIGxvb2tpbmcgdXAgdGhlIHNpemUgY2xhc3MgaW5kZXgsIGNhdXNpbmcgaXQgdG8gcmV0dXJuIGFuIGluY29ycmVjdCAoc21hbGxlcikgY2xhc3MgaW5kZXguIFRoaXMgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHVzZWQgYnkgenJhbSB0byBkZXRlcm1pbmUgaWYgcmVjb21wcmVzc2luZyBhbiBvYmplY3QgaXMgYmVuZWZpY2lhbCBieSBjb21wYXJpbmcgdGhlIG9sZCBhbmQgbmV3IGNsYXNzIGluZGljZXMuIFRoZSBidWcgY291bGQgbGVhZCB0byBpbmNvcnJlY3QgcmVjb21wcmVzc2lvbiBkZWNpc2lvbnMsIGJ1dCBpdCBkb2VzIG5vdCBpbnZvbHZlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBpbmZvLWxlYWtzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IG91dC1vZi1ib3VuZHMgaXNzdWVzIGlmIHRoZXkgd2VyZSB0byBvY2N1ciwgYW5kIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBsb2dpYyBidWcgaW4gYHpzX2xvb2t1cF9jbGFzc19pbmRleGAgd2hlcmUgaXQgZmFpbGVkIHRvIGFjY291bnQgZm9yIGBaU19IQU5ETEVfU0laRWAgd2hlbiBsb29raW5nIHVwIHRoZSBzaXplIGNsYXNzIGluZGV4LCBjYXVzaW5nIGl0IHRvIHJldHVybiBhbiBpbmNvcnJlY3QgKHNtYWxsZXIpIGNsYXNzIGluZGV4LiBUaGlzIGZ1bmN0aW9uIGlzIHByaW1hcmlseSB1c2VkIGJ5IHpyYW0gdG8gZGV0ZXJtaW5lIGlmIHJlY29tcHJlc3NpbmcgYW4gb2JqZWN0IGlzIGJlbmVmaWNpYWwgYnkgY29tcGFyaW5nIHRoZSBvbGQgYW5kIG5ldyBjbGFzcyBpbmRpY2VzLiBUaGUgYnVnIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlY29tcHJlc3Npb24gZGVjaXNpb25zLCBidXQgaXQgZG9lcyBub3QgaW52b2x2ZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgaW5mby1sZWFrcywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBvdXQtb2YtYm91bmRzIGlzc3VlcyBpZiB0aGV5IHdlcmUgdG8gb2NjdXIsIGFuZCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowfpvvk[1] Phase: Succeeded StartedAt: 2026-08-09 12:28:18 +0000 UTC FinishedAt: 2026-08-09 12:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-09 12:28:18 +0000 UTC FinishedAt: 2026-08-09 12:28:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2] Phase: Succeeded StartedAt: 2026-08-09 12:28:18 +0000 UTC FinishedAt: 2026-08-09 16:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-09 12:28:18 +0000 UTC FinishedAt: 2026-08-09 16:12:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:28:18 +0000 UTC FinishedAt: 2026-08-09 12:28:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:28:18 +0000 UTC FinishedAt: 2026-08-09 12:28:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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-workflowfpvvk/series-workflowfpvvk-convert-artifact-2758519932/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:28:28 +0000 UTC FinishedAt: 2026-08-09 12:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:28:28 +0000 UTC FinishedAt: 2026-08-09 12:44:37 +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:*0bb87d1f-274e-40b6-a535-026951368ee8,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-workflowfpvvk/series-workflowfpvvk-convert-artifact-2758519932/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": "a769dc8d-6cf4-4de4-8214-1d5449c8c463", "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-workflowfpvvk/series-workflowfpvvk-build-action-655861674/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:28:28 +0000 UTC FinishedAt: 2026-08-09 12:44:27 +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:*0bb87d1f-274e-40b6-a535-026951368ee8,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-workflowfpvvk/series-workflowfpvvk-convert-artifact-2758519932/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": "a769dc8d-6cf4-4de4-8214-1d5449c8c463", "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-workflowfpvvk/series-workflowfpvvk-build-action-655861674/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:44:37 +0000 UTC FinishedAt: 2026-08-09 12:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:44:37 +0000 UTC FinishedAt: 2026-08-09 12:44:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:44:37 +0000 UTC FinishedAt: 2026-08-09 12:44:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:44:37 +0000 UTC FinishedAt: 2026-08-09 12:44:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-workflowfpvvk/series-workflowfpvvk-convert-artifact-1104805563/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:44:47 +0000 UTC FinishedAt: 2026-08-09 12:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:44:47 +0000 UTC FinishedAt: 2026-08-09 12:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a769dc8d-6cf4-4de4-8214-1d5449c8c463,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-workflowfpvvk/series-workflowfpvvk-build-action-655861674/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-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:47:27 +0000 UTC FinishedAt: 2026-08-09 12:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:47:27 +0000 UTC FinishedAt: 2026-08-09 12:47:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:47:27 +0000 UTC FinishedAt: 2026-08-09 13:04:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:47:27 +0000 UTC FinishedAt: 2026-08-09 13:04:00 +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:*0bb87d1f-274e-40b6-a535-026951368ee8,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-workflowfpvvk/series-workflowfpvvk-convert-artifact-1104805563/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": "d16e609e-aecc-480b-bfe0-73953a3edcd1", "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-workflowfpvvk/series-workflowfpvvk-build-action-418544095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 12:47:27 +0000 UTC FinishedAt: 2026-08-09 13:03:50 +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:*0bb87d1f-274e-40b6-a535-026951368ee8,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-workflowfpvvk/series-workflowfpvvk-convert-artifact-1104805563/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": "d16e609e-aecc-480b-bfe0-73953a3edcd1", "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-workflowfpvvk/series-workflowfpvvk-build-action-418544095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 13:04:00 +0000 UTC FinishedAt: 2026-08-09 13:04:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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-09 13:04:00 +0000 UTC FinishedAt: 2026-08-09 13:04:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-09 13:04:00 +0000 UTC FinishedAt: 2026-08-09 13:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","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: Succeeded StartedAt: 2026-08-09 13:04:00 +0000 UTC FinishedAt: 2026-08-09 13:06:12 +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:*d16e609e-aecc-480b-bfe0-73953a3edcd1,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-workflowfpvvk/series-workflowfpvvk-build-action-418544095/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-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-09 13:06:22 +0000 UTC FinishedAt: 2026-08-09 16:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-09 13:06:22 +0000 UTC FinishedAt: 2026-08-09 16:12:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a769dc8d-6cf4-4de4-8214-1d5449c8c463,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d16e609e-aecc-480b-bfe0-73953a3edcd1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpvvk/series-workflowfpvvk-build-action-655861674/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpvvk/series-workflowfpvvk-build-action-418544095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-09 13:06:22 +0000 UTC FinishedAt: 2026-08-09 13:06:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-09 13:06:22 +0000 UTC FinishedAt: 2026-08-09 13:06:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpvvk/series-workflowfpvvk-convert-artifact-292671412/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-09 13:06:22 +0000 UTC FinishedAt: 2026-08-09 13:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-09 13:06:22 +0000 UTC FinishedAt: 2026-08-09 13:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-09 13:06:22 +0000 UTC FinishedAt: 2026-08-09 13:06:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-09 13:06:32 +0000 UTC FinishedAt: 2026-08-09 16:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfpvvk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"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":["zs_lookup_class_index","zs_malloc"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"486d992fddf1e26f35a924d85bfbfd8d866a2ac2","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSMALLOC","ZRAM","ZSWAP"],"series_id":"27822a28-c953-4f3c-95d3-a23c0b2fcb4e","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-09 13:06:32 +0000 UTC FinishedAt: 2026-08-09 16:12:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a769dc8d-6cf4-4de4-8214-1d5449c8c463,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d16e609e-aecc-480b-bfe0-73953a3edcd1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpvvk/series-workflowfpvvk-build-action-655861674/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpvvk/series-workflowfpvvk-build-action-418544095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowfpvvk/series-workflowfpvvk-convert-artifact-292671412/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}