Name: series-workflowp4ns6 Phase: Succeeded StartedAt: 2026-09-07 17:43:47 +0000 UTC FinishedAt: 2026-09-07 21:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[0] Phase: Succeeded StartedAt: 2026-09-07 17:43:47 +0000 UTC FinishedAt: 2026-09-07 17:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 17:43:47 +0000 UTC FinishedAt: 2026-09-07 17:48:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "bc35965f6940a9bf834d54187b6088b8eb09206d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "bc35965f6940a9bf834d54187b6088b8eb09206d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_calc_xattr_init", "ocfs2_mknod" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX21rbm9kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSB0cml2aWFsIGNvZGUgY2xlYW51cCBpbiBmcy9vY2ZzMi94YXR0ci5jIHJlbW92aW5nIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBDIGNvZGUgaW4gZnMvb2NmczIveGF0dHIuYyBieSBjbGVhbmluZyB1cCByZXR1cm4gdmFsdWVzIGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uL21rbm9kIGluIE9DRlMyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBPQ0ZTMiBzdXBwb3J0IGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNTQ3MjFmNDY0M2MzNWZjMDE3OGQyNjA4ZmE3ZDJlZjg5OGVkNjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNzo0NzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggMzViY2JiMGZmNjA3Yi4uYWIzYjY0NTk4M2M5NiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02NDAsNyAmIzQzOzY0MCw2IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxuIFx0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSlcbiB7XG4tXHRpbnQgcmV0ID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuIFx0aW50IHNfc2l6ZSA9IDAsIGFfc2l6ZSA9IDAsIGFjbF9sZW4gPSAwLCBuZXdfY2x1c3RlcnM7XG4gXG5AQCAtNjYyLDcgJiM0Mzs2NjEsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHR9XG4gXG4gXHRpZiAoIShzX3NpemUgJiM0MzsgYV9zaXplKSlcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBtYXggc3BhY2Ugb2Ygc2VjdXJpdHkgeGF0dHIgdGFrZW4gaW5saW5lIGlzXG5AQCAtNzI5LDcgJiM0Mzs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9ta25vZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIEMgY29kZSBpbiBmcy9vY2ZzMi94YXR0ci5jIGJ5IGNsZWFuaW5nIHVwIHJldHVybiB2YWx1ZXMgaW4gb2NmczJfY2FsY194YXR0cl9pbml0KCksIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24vbWtub2QgaW4gT0NGUzIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIE9DRlMyIHN1cHBvcnQgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1NDcyMWY0NjQzYzM1ZmMwMTc4ZDI2MDhmYTdkMmVmODk4ZWQ2NmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE3OjQ3OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggMzViY2JiMGZmNjA3Yi4uYWIzYjY0NTk4M2M5NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5jCkBAIC02NDAsNyAmIzQzOzY0MCw2IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKIAkJCSAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsCiAJCQkgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpCiB7Ci0JaW50IHJldCA9IDA7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItJmd0O2lfc2IpOwogCWludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzOwogCkBAIC02NjIsNyAmIzQzOzY2MSw3IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKIAl9CiAKIAlpZiAoIShzX3NpemUgJiM0MzsgYV9zaXplKSkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAwOwogCiAJLyoKIAkgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpcwpAQCAtNzI5LDcgJiM0Mzs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsCiAJCX0KIAl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQgbW9kaWZpZXMgYGZzL29jZnMyL3hhdHRyLmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24uIFRoZSBwYXRjaCByZW1vdmVzIGFuIHVudXNlZCB2YXJpYWJsZSBgaW50IHJldCA9IDA7YCBhbmQgcmVwbGFjZXMgdGhlIGByZXR1cm4gcmV0O2Agd2l0aCBgcmV0dXJuIDA7YC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCByaWdodD8KCkJ1dCB3YWl0IGEgbWludXRlLCBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogY29kZT8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBiZWZvcmUgd2Ugc3BlbmQgYW55IG1vcmUgdGltZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBmcy9vY2ZzMi94YXR0ci5jYCBpdHNlbGYgYW5kIHRoZSByZWxhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBwYXRoIHRoYXQgY291bGQgcmVhbGlzdGljYWxseSBiZSBoaXQgYW5kIGlzIHRoZXJlZm9yZSB3b3J0aCBmdXp6aW5nLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgcmV2aWV3IHRoZSBndWlkZWxpbmVzIGFnYWluLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRoZSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGNhdGVnb3JpZXMuIE9rYXksIHNvIG5vIGRvY3VtZW50YXRpb24sIG5vIHVzZXItc3BhY2UgdG9vbHMsIG5vdCBkZWNvcmF0aXZlIGxvZ2dpbmcsIGFuZCBubyBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IEMgbG9naWMuIEFsc28sIG5vIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkga25vdyB0aGF0IE9DRlMyIGlzIGEgZmlsZSBzeXN0ZW0uIERvZXMgdGhpcyBnZXQgdHJpZ2dlcmVkIHVuZGVyIHN5emthbGxlci9RRU1VPyBPQ0ZTMiBjYW4gYmUgbW91bnRlZCB1c2luZyBsb29wYmFjayBkZXZpY2VzIG9yIHRocm91Z2ggaW1hZ2UgbW91bnRpbmcgYW5kIHN5c2NhbGxzLCBzbyBpdCBpcyBwcm9iYWJseSByZWFjaGFibGUuIEkgc2hvdWxkIGNoZWNrIEtjb25maWcgZm9yIE9DRlMyIHRvIGNvbmZpcm0uIE9rYXksIGFzc3VtaW5nIGl0IGlzIGVuYWJsZWQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHRoaXMgaXMgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBmaWxlcywgZXhwcmVzc2VkIGFzIGlmIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlbToKCioqRGl2aW5nIGludG8gT0NGUzIgWGF0dHIgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgZGlnIGludG8gaG93IE9DRlMyIGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIGBmcy9vY2ZzMi9LY29uZmlnYCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZDsgaXQgc2hvdWxkIG91dGxpbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHhhdHRyIHN1cHBvcnQgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBUaGlzIHdpbGwgcmVtaW5kIG1lIG9mIHdoYXQgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGluIGFuZCBob3cgdGhleSBtaWdodCBhZmZlY3QgdGhlIGltcGxlbWVudGF0aW9uIEkmIzM5O20gYWJvdXQgdG8gbG9vayBhdC4KClRoZW4sIEkmIzM5O2xsIGJlIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgZnMvb2NmczIveGF0dHIuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgaGFwcGVuLCByaWdodD8gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiwgb3IgY29kZSBuZWFyIGl0LCB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbml0aWFsIHZhbHVlcyByZWxhdGVkIHRvIHhhdHRycy4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBjYWxjdWxhdGVzIHNpemVzLCBhbGxvY2F0ZXMgc3BhY2UsIGFuZCBwb3NzaWJseSBoYW5kbGVzIGFueSBpbml0aWFsIGRlZmF1bHQgYXR0cmlidXRlcyBvciBtZXRhZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByZXNlbnQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yIGEgbmV3IGlub2RlIGlzIGNyZWF0ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBzdGVwcy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggYmxvY2sgYWxsb2NhdGlvbiBvciBpbm9kZSBkYXRhLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgaW5pdGlhbGl6YXRpb24gdGllcyBpbnRvIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgbW9kZWwgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgc2NhbGFiaWxpdHkgb2YgdGhlIE9DRlMyIHhhdHRyIGltcGxlbWVudGF0aW9uLiBBcmUgdGhleSBzdG9yZWQgaW5saW5lLCBpbiBhIHNlcGFyYXRlIGJsb2NrLCBvciB0aHJvdWdoIHNvbWUgY2xldmVyIGNvbWJpbmF0aW9uPyBJJiMzOTttIGxvb2tpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcywgd2hpY2ggc2hvdWxkIGJlIHdlbGwgZG9jdW1lbnRlZCBpbiBjb21tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgT0NGUzJfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG4gICA1Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDY6XHRcdHNlbGVjdCBKQkQyXG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBRVU9UQVxuICAgOTpcdFx0c2VsZWN0IFFVT1RBX1RSRUVcbiAgMTA6XHRcdHNlbGVjdCBGU19QT1NJWF9BQ0xcbiAgMTE6XHRcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIE9DRlMyIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGV4dGVudCBiYXNlZCBzaGFyZWQgZGlzayBjbHVzdGVyIGZpbGVcbiAgMTQ6XHRcdCAgc3lzdGVtIHdpdGggbWFueSBzaW1pbGFyaXRpZXMgdG8gZXh0My4gSXQgc3VwcG9ydHMgNjQgYml0IGlub2RlXG4gIDE1Olx0XHQgIG51bWJlcnMsIGFuZCBoYXMgYXV0b21hdGljYWxseSBleHRlbmRpbmcgbWV0YWRhdGEgZ3JvdXBzIHdoaWNoIG1heVxuICAxNjpcdFx0ICBhbHNvIG1ha2UgaXQgYXR0cmFjdGl2ZSBmb3Igbm9uLWNsdXN0ZXJlZCB1c2UuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIFlvdSYjMzk7bGwgd2FudCB0byBpbnN0YWxsIHRoZSBvY2ZzMi10b29scyBwYWNrYWdlIGluIG9yZGVyIHRvIGF0IGxlYXN0XG4gIDE5Olx0XHQgIGdldCBcJiMzNDttb3VudC5vY2ZzMlwmIzM0Oy5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgUHJvamVjdCB3ZWIgcGFnZTogICAgaHR0cHM6Ly9vY2ZzMi53aWtpLmtlcm5lbC5vcmcvXG4gIDIyOlx0XHQgIFRvb2xzIHdlYiBwYWdlOiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZmFzaGVoL29jZnMyLXRvb2xzXG4gIDIzOlx0XHQgIE9DRlMyIG1haWxpbmcgbGlzdHM6IGh0dHBzOi8vc3Vic3BhY2Uua2VybmVsLm9yZy9saXN0cy5saW51eC5kZXYuaHRtbFxuICAyNDpcdFxuICAyNTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBPQ0ZTMiwgc2VlIHRoZSBmaWxlXG4gIDI2Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vY2ZzMi5yc3RcdTAwM2UuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuICAzMTpcdFx0ZGVmYXVsdCB5XG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIE9DRlMyIGluY2x1ZGVzIGEgc2ltcGxlIGtlcm5lbHNwYWNlIGNsdXN0ZXJpbmcgcGFja2FnZSwgdGhlIE9DRlMyXG4gIDM0Olx0XHQgIENsdXN0ZXIgQmFzZS4gIEl0IG9ubHkgcmVxdWlyZXMgYSB2ZXJ5IHNtYWxsIHVzZXJzcGFjZSBjb21wb25lbnRcbiAgMzU6XHRcdCAgdG8gY29uZmlndXJlIGl0LiBUaGlzIGNvbWVzIHdpdGggdGhlIHN0YW5kYXJkIG9jZnMyLXRvb2xzIHBhY2thZ2UuXG4gIDM2Olx0XHQgIE8yQ0IgaXMgbGltaXRlZCB0byBtYWludGFpbmluZyBhIGNsdXN0ZXIgZm9yIE9DRlMyIGZpbGUgc3lzdGVtcy5cbiAgMzc6XHRcdCAgSXQgY2Fubm90IG1hbmFnZSBhbnkgb3RoZXIgY2x1c3RlciBhcHBsaWNhdGlvbnMuXG4gIDM4Olx0XG4gIDM5Olx0XHQgIEl0IGlzIGFsd2F5cyBzYWZlIHRvIHNheSBZIGhlcmUsIGFzIHRoZSBjbHVzdGVyaW5nIG1ldGhvZCBpc1xuICA0MDpcdFx0ICBydW4tdGltZSBzZWxlY3RhYmxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKlhhdHRyIEludmVzdGlnYXRpb24gQmVnaW5zKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBvY2ZzMmAgZXh0ZW5kZWQgYXR0cmlidXRlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGZzL29jZnMyL3hhdHRyLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBob3cgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQuIEkgd2FudCB0byBzZWUgKndoZXJlKiBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0gY29kZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBwcm9iYWJseSBpbiB0aGUgcHJvY2VzcyBvZiBjYWxjdWxhdGluZyBzcGFjZSBuZWVkZWQgdG8gc3RvcmUgdGhlIGF0dHJpYnV0ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gbG9va3MgbGlrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL29jZnMyL3hhdHRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MzU6XHRcdHJldHVybiByZXQ7XG4gNjM2Olx0fVxuIDYzNzpcdFxuIDYzODpcdGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiA2Mzk6XHRcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbiA2NDA6XHRcdFx0XHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxuIDY0MTpcdFx0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSlcbiA2NDI6XHR7XG4gNjQzOlx0XHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbiA2NDQ6XHRcdGludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzO1xuIDY0NTpcdFxuIDY0NjpcdFx0aWYgKHNpLVx1MDAzZWVuYWJsZSlcbiA2NDc6XHRcdFx0c19zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKHN0cmxlbihzaS1cdTAwM2VuYW1lKSxcbiA2NDg6XHRcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gNjQ5Olx0XG4gNjUwOlx0XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiA2NTE6XHRcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuIDY1MjpcdFx0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4gNjUzOlx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiA2NTQ6XHRcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiA2NTU6XHRcdFx0fVxuIDY1NjpcdFx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuIDY1NzpcdFx0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuIDY1ODpcdFx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4gNjU5Olx0XHRcdFx0YV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4gNjYwOlx0XHRcdH1cbiA2NjE6XHRcdH1cbiA2NjI6XHRcbiA2NjM6XHRcdGlmICghKHNfc2l6ZSAmIzQzOyBhX3NpemUpKVxuIDY2NDpcdFx0XHRyZXR1cm4gMDtcbiA2NjU6XHRcbiA2NjY6XHRcdC8qXG4gNjY3Olx0XHQgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpc1xuIDY2ODpcdFx0ICogMjU2KG5hbWUpICYjNDM7IDgwKHZhbHVlKSAmIzQzOyAxNihlbnRyeSkgPSAzNTIgYnl0ZXMsXG4gNjY5Olx0XHQgKiBUaGUgbWF4IHNwYWNlIG9mIGFjbCB4YXR0ciB0YWtlbiBpbmxpbmUgaXNcbiA2NzA6XHRcdCAqIDgwKHZhbHVlKSAmIzQzOyAxNihlbnRyeSkgKiAyKGlmIGRpcmVjdG9yeSkgPSAxOTIgYnl0ZXMsXG4gNjcxOlx0XHQgKiB3aGVuIGJsb2Nrc2l6ZSA9IDUxMiwgbWF5IHJlc2VydmUgb25lIG1vcmUgY2x1c3RlciBmb3JcbiA2NzI6XHRcdCAqIHhhdHRyIGJ1Y2tldCwgb3RoZXJ3aXNlIHJlc2VydmUgb25lIG1ldGFkYXRhIGJsb2NrXG4gNjczOlx0XHQgKiBmb3IgdGhlbSBpcyBvay5cbiA2NzQ6XHRcdCAqIElmIHRoaXMgaXMgYSBuZXcgZGlyZWN0b3J5IHdpdGggaW5saW5lIGRhdGEsXG4gNjc1Olx0XHQgKiB3ZSBjaG9vc2UgdG8gcmVzZXJ2ZSB0aGUgZW50aXJlIGlubGluZSBhcmVhIGZvclxuIDY3NjpcdFx0ICogZGlyZWN0b3J5IGNvbnRlbnRzIGFuZCBmb3JjZSBhbiBleHRlcm5hbCB4YXR0ciBibG9jay5cbiA2Nzc6XHRcdCAqL1xuIDY3ODpcdFx0aWYgKGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUgfHxcbiA2Nzk6XHRcdCAgICAoU19JU0RJUihtb2RlKSBcdTAwMjZcdTAwMjYgb2NmczJfc3VwcG9ydHNfaW5saW5lX2RhdGEob3NiKSkgfHxcbiA2ODA6XHRcdCAgICAoc19zaXplICYjNDM7IGFfc2l6ZSkgXHUwMDNlIE9DRlMyX1hBVFRSX0ZSRUVfSU5fSUJPRFkpIHtcbiA2ODE6XHRcdFx0KndhbnRfbWV0YSA9ICp3YW50X21ldGEgJiM0MzsgMTtcbiA2ODI6XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IE9DRlMyX1hBVFRSX0JMT0NLX0NSRUFURV9DUkVESVRTO1xuIDY4MzpcdFx0fVxuIDY4NDpcdFxuIDY4NTpcdFx0aWYgKGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUgXHUwMDI2XHUwMDI2XG4gNjg2Olx0XHQgICAgKHNfc2l6ZSAmIzQzOyBhX3NpemUpIFx1MDAzZSBPQ0ZTMl9YQVRUUl9GUkVFX0lOX0JMT0NLKGRpcikpIHtcbiA2ODc6XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IDE7XG4gNjg4Olx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChkaXItXHUwMDNlaV9zYik7XG4gNjg5Olx0XHR9XG4gNjkwOlx0XG4gNjkxOlx0XHQvKlxuIDY5MjpcdFx0ICogcmVzZXJ2ZSBjcmVkaXRzIGFuZCBjbHVzdGVycyBmb3IgeGF0dHJzIHdoaWNoIGhhcyBsYXJnZSB2YWx1ZVxuIDY5MzpcdFx0ICogYW5kIGhhdmUgdG8gYmUgc2V0IG91dHNpZGVcbiA2OTQ6XHRcdCAqL1xuIDY5NTpcdFx0aWYgKHNpLVx1MDAzZWVuYWJsZSBcdTAwMjZcdTAwMjYgc2ktXHUwMDNldmFsdWVfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuIDY5NjpcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4gNjk3Olx0XHRcdFx0XHRcdFx0XHRzaS1cdTAwM2V2YWx1ZV9sZW4pO1xuIDY5ODpcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuIDY5OTpcdFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiA3MDA6XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiA3MDE6XHRcdH1cbiA3MDI6XHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuIDcwMzpcdFx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4gNzA0Olx0XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbiA3MDU6XHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuIDcwNjpcdFx0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuIDcwNzpcdFx0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbiA3MDg6XHRcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuIDcwOTpcdFx0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4gNzEwOlx0XHRcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz1cbiA3MTE6XHRcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuIDcxMjpcdFx0XHRcdFx0XHRcdFx0XHQgbmV3X2NsdXN0ZXJzKTtcbiA3MTM6XHRcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4gNzE0Olx0XHRcdFx0fVxuIDcxNTpcdFx0XHR9XG4gNzE2Olx0XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4gNzE3Olx0XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4gNzE4Olx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiA3MTk6XHRcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiA3MjA6XHRcdFx0XHRcdG5ld19jbHVzdGVycyA9XG4gNzIxOlx0XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiA3MjI6XHRcdFx0XHRcdFx0XHRcdFx0IGFjbF9sZW4pO1xuIDcyMzpcdFx0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9XG4gNzI0Olx0XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbiA3MjU6XHRcdFx0XHRcdFx0XHRcdFx0IG5ld19jbHVzdGVycyk7XG4gNzI2Olx0XHRcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuIDcyNzpcdFx0XHRcdH1cbiA3Mjg6XHRcdFx0fVxuIDcyOTpcdFx0fVxuIDczMDpcdFxuIDczMTpcdFx0cmV0dXJuIDA7XG4gNzMyOlx0fVxuIDczMzpcdFxuIDczNDpcdHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGZ1bmN0aW9uIGNhbGw6CgoqKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgb2NmczJfY2FsY194YXR0cl9pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBvYmplY3RpdmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0gY29kZS4gS25vd2luZyBpdHMgY2FsbGVycyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgYW55IGRlcGVuZGVuY2llcyBpdCBoYXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIElzIHRoZXJlIGEgcGFydGljdWxhciBjb25jZXJuLCBvciBhcmUgd2UganVzdCByZXZpZXdpbmcgdGhlIGNvZGUgaW4gZGV0YWlsPyBMZXQgbWUgc3RhcnQgYnkgaWRlbnRpZnlpbmcgd2hlcmUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgY2FsbGVkIGZyb20uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gZ3JlcCwgY3Njb3BlLCBvciBwb3NzaWJseSBhIG1vcmUgYWR2YW5jZWQgY29kZSBuYXZpZ2F0aW9uIHRvb2wsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2UgLSB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBjYWxsLiBBcyBhbiBleHBlcnQsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgcGF0dGVybnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGluLCB0aGUgY29udGV4dCBvZiB0aGUgaW5pdGlhbGl6YXRpb24sIGFuZCBob3cgdGhlIHJldHVybiB2YWx1ZSAoaWYgYW55KSBpcyBiZWluZyB1c2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBzZXR1cCwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCB3aXRoIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmc/IEkgd2lsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBjaGVja2luZyByZWxhdGVkIHRvIHRoZSByZXR1cm4gdmFsdWUsIGJlY2F1c2UgdGhhdCB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgcm9idXN0bmVzcyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gd2lsbCB3YW50IHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvdWxkIHRlbGwgbWUgYWJvdXQgYW55IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIG9yIHdoZXRoZXIgdGhlcmUgbWlnaHQgYmUgcmFjZSBjb25kaXRpb25zIHRoYXQgbmVlZCBmdXJ0aGVyIHNjcnV0aW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9uYW1laS5jPTIzMD1zdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMzM4LVx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG5mcy9vY2ZzMi9uYW1laS5jOjMzOTpcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuZnMvb2NmczIvbmFtZWkuYy0zNDAtXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjAwPWludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIveGF0dHIuYy02MzctXG5mcy9vY2ZzMi94YXR0ci5jOjYzODppbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG5mcy9vY2ZzMi94YXR0ci5jLTYzOS1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTYxPXN0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG5mcy9vY2ZzMi94YXR0ci5oOjYyOmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbmZzL29jZnMyL3hhdHRyLmgtNjMtXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBmcy9vY2ZzMi94YXR0ci5jKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSB0aGUgYFdvcnRoRnV6emluZ2AgZGVjaXNpb24uIEkgaGF2ZSB0aGUgcnVsZXMgaW4gZnJvbnQgb2YgbWUsIHNvIGxldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlbS4gUnVsZSBudW1iZXIgdHdvIHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIG9ubHkgaWYgYWxsIHRoZSBtb2RpZmllZCBjb2RlIGZhbGxzICpzdHJpY3RseSogaW50byBvbmUgb2YgdGhlIHNwZWNpZmllZCBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIHRoaXJkIHJ1bGUgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCBpZiBpdCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuCgpOb3csIG15IHBhdGNoIHRvdWNoZXMgQyBleGVjdXRhYmxlIGNvZGUgc3BlY2lmaWNhbGx5IGluIGBmcy9vY2ZzMi94YXR0ci5jYC4gVGhpcyBpcyBhbiBpbi10cmVlIGZpbGVzeXN0ZW0gZHJpdmVyLCBhIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgYSBsb29wIGRldmljZSBvciBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuIEV2ZW4gdGhvdWdoIHRoZSBwYXRjaCBzZWVtcyBtaW5vciwganVzdCByZW1vdmluZyBhbiB1bnVzZWQgbG9jYWwgdmFyaWFibGUgYHJldGAsIEkgbmVlZCB0byBiZSBjYXJlZnVsLCBhbmQgdGhlIHJ1bGVzIGhpZ2hsaWdodCB0aGlzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBjYXV0aW9uIGFnYWluc3QgYmxpbmRseSB0cnVzdGluZyBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yICYjMzQ7cmVmYWN0b3JpbmcuJiMzNDsgVGhleSBzYXkgaWYgKmFueSogcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBJICptdXN0KiBmdXp6IGl0LgoKVGhpcyBjb2RlIGluIGBmcy9vY2ZzMmAgZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSDigJMgZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgbG9nZ2luZywgYnVpbGQgc3lzdGVtIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCB0ZWFyZG93biBjYWxsYmFja3MsIG9yIGFyY2gtc3BlY2lmaWMgY29kZSDigJMgc28gYmFzZWQgb24gdGhlIHJ1bGVzLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93IHRoYXQgSSYjMzk7dmUgZGVjaWRlZCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLCBJIHNob3VsZCBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgdG8gZm9jdXMgb24uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEkgdGhpbmsgSSBoYXZlIHRvIGlkZW50aWZ5IGFueSBvdGhlciBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcy4gYG9jZnMyX21rbm9kYCBpcyBhIGNhbGxlciBmdW5jdGlvbiBmcm9tIGBmcy9vY2ZzMi9uYW1laS5jYCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zMzgtXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbmZzL29jZnMyL25hbWVpLmM6MzM5Olx0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG5mcy9vY2ZzMi9uYW1laS5jLTM0MC1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsXG4tLVxuZnMvb2NmczIveGF0dHIuYz02MDA9aW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTYzNy1cbmZzL29jZnMyL3hhdHRyLmM6NjM4OmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbmZzL29jZnMyL3hhdHRyLmMtNjM5LVx0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuLS1cbmZzL29jZnMyL3hhdHRyLmg9NjE9c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbmZzL29jZnMyL3hhdHRyLmg6NjI6aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuZnMvb2NmczIveGF0dHIuaC02My1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcxNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnZlc3RpZ2F0aW9uIGludG8gT0NGUzIgWGF0dHIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIEkga25vdyBpcyBpbiBgZnMvb2NmczIveGF0dHIuY2AuIEkmIzM5O20gYWxzbyBnb2luZyB0byBrZWVwIGFuIGV5ZSBvbiBgb2NmczJfbWtub2RgLCBzaW5jZSB0aGF0JiMzOTtzIGEga2V5IGVudHJ5IHBvaW50IGZvciB0aGluZ3MgbGlrZSBgbWtkaXJgLCBgY3JlYXRlYCwgYHN5bWxpbmtgLCBhbmQgYG1rbm9kYCBvcGVyYXRpb25zIHdpdGhpbiBPQ0ZTMiwgYWNjb3JkaW5nIHRvIG15IHVuZGVyc3RhbmRpbmcuIEl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgaXQsIGV2ZW4gaWYgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgYXBwZWFycyB0byBiZSB0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBoZXJlLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgYEVuYWJsZUNvbmZpZ3NgIGFuZCB0aGVuIGBmcy9vY2ZzMi9NYWtlZmlsZWAgdG8gZXN0YWJsaXNoIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjY2ZsYWdzLXkgOj0gLUkkKHNyYylcbiAgIDM6XHRcbiAgIDQ6XHRvYmotJChDT05GSUdfT0NGUzJfRlMpICYjNDM7PSBcdFxcXG4gICA1Olx0XHRvY2ZzMi5vXHRcdFx0XFxcbiAgIDY6XHRcdG9jZnMyX3N0YWNrZ2x1ZS5vXG4gICA3Olx0XG4gICA4Olx0b2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICYjNDM7PSBvY2ZzMl9zdGFja19vMmNiLm9cbiAgIDk6XHRvYmotJChDT05GSUdfT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVIpICYjNDM7PSBvY2ZzMl9zdGFja191c2VyLm9cbiAgMTA6XHRcbiAgMTE6XHRvY2ZzMi1vYmpzIDo9IFxcXG4gIDEyOlx0XHRhbGxvYy5vIFx0XHRcXFxuICAxMzpcdFx0YW9wcy5vIFx0XHRcdFxcXG4gIDE0Olx0XHRibG9ja2NoZWNrLm9cdFx0XFxcbiAgMTU6XHRcdGJ1ZmZlcl9oZWFkX2lvLm9cdFxcXG4gIDE2Olx0XHRkY2FjaGUubyBcdFx0XFxcbiAgMTc6XHRcdGRpci5vIFx0XHRcdFxcXG4gIDE4Olx0XHRkbG1nbHVlLm8gXHRcdFxcXG4gIDE5Olx0XHRleHBvcnQubyBcdFx0XFxcbiAgMjA6XHRcdGV4dGVudF9tYXAubyBcdFx0XFxcbiAgMjE6XHRcdGZpbGUubyBcdFx0XHRcXFxuICAyMjpcdFx0aGVhcnRiZWF0Lm8gXHRcdFxcXG4gIDIzOlx0XHRpbm9kZS5vIFx0XHRcXFxuICAyNDpcdFx0aW9jdGwubyBcdFx0XFxcbiAgMjU6XHRcdGpvdXJuYWwubyBcdFx0XFxcbiAgMjY6XHRcdGxvY2FsYWxsb2MubyBcdFx0XFxcbiAgMjc6XHRcdGxvY2tzLm9cdFx0XHRcXFxuICAyODpcdFx0bW1hcC5vIFx0XHRcdFxcXG4gIDI5Olx0XHRuYW1laS5vIFx0XHRcXFxuICAzMDpcdFx0cmVmY291bnR0cmVlLm9cdFx0XFxcbiAgMzE6XHRcdHJlc2VydmF0aW9ucy5vXHRcdFxcXG4gIDMyOlx0XHRtb3ZlX2V4dGVudHMub1x0XHRcXFxuICAzMzpcdFx0cmVzaXplLm9cdFx0XFxcbiAgMzQ6XHRcdHNsb3RfbWFwLm8gXHRcdFxcXG4gIDM1Olx0XHRzdWJhbGxvYy5vIFx0XHRcXFxuICAzNjpcdFx0c3VwZXIubyBcdFx0XFxcbiAgMzc6XHRcdHN5bWxpbmsubyBcdFx0XFxcbiAgMzg6XHRcdHN5c2ZpbGUubyBcdFx0XFxcbiAgMzk6XHRcdHVwdG9kYXRlLm9cdFx0XFxcbiAgNDA6XHRcdHF1b3RhX2xvY2FsLm9cdFx0XFxcbiAgNDE6XHRcdHF1b3RhX2dsb2JhbC5vXHRcdFxcXG4gIDQyOlx0XHR4YXR0ci5vXHRcdFx0XFxcbiAgNDM6XHRcdGFjbC5vXHRcXFxuICA0NDpcdFx0ZmlsZWNoZWNrLm9cbiAgNDU6XHRcbiAgNDY6XHRvY2ZzMl9zdGFja2dsdWUtb2JqcyA6PSBzdGFja2dsdWUub1xuICA0NzpcdG9jZnMyX3N0YWNrX28yY2Itb2JqcyA6PSBzdGFja19vMmNiLm9cbiAgNDg6XHRvY2ZzMl9zdGFja191c2VyLW9ianMgOj0gc3RhY2tfdXNlci5vXG4gIDQ5Olx0XG4gIDUwOlx0b2JqLSQoQ09ORklHX09DRlMyX0ZTKSAmIzQzOz0gZGxtZnMvXG4gIDUxOlx0IyBjbHVzdGVyLyBpcyBhbHdheXMgbmVlZGVkIHdoZW4gT0NGUzJfRlMgZm9yIG1hc2tsb2cgc3VwcG9ydFxuICA1MjpcdG9iai0kKENPTkZJR19PQ0ZTMl9GUykgJiM0Mzs9IGNsdXN0ZXIvXG4gIDUzOlx0b2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICYjNDM7PSBkbG0vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODYyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9DRlMyIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBrZXkuIFRoYXQgYnVpbGRzIGBvY2ZzMi5vYCwgYW5kIGltcG9ydGFudGx5LCB0aGF0IGluY2x1ZGVzIGB4YXR0ci5vYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIHNlZSBpZiBJIG5lZWQgdG8gYWRqdXN0IGFueSBrZXJuZWwgb3B0aW9ucyBmb3IgbXkgc3BlY2lmaWMgc2V0dXAuIExldCYjMzk7cyBzZWUgd2hhdCBgZnMvb2NmczIvS2NvbmZpZ2AgdGVsbHMgbWUuCgpSaWdodCwgYENPTkZJR19PQ0ZTMl9GU2AgZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBUaGF0JiMzOTtzIHJlYXNvbmFibGU7IG5ldHdvcmsgZnVuY3Rpb25hbGl0eSwgc3lzdGVtIGZpbGUgc3VwcG9ydCwgYW5kIGNvbmZpZ2ZzLCBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCB0aGVuIHRoZXJlIGFyZSBhIGJ1bmNoIG9mICYjMzQ7c2VsZWN0JiMzNDsgc3RhdGVtZW50czogYEJVRkZFUl9IRUFEYCwgYEpCRDJgLCBgQ1JDMzJgLCBgUVVPVEFgLCBgUVVPVEFfVFJFRWAsIGBGU19QT1NJWF9BQ0xgLCBhbmQgYExFR0FDWV9ESVJFQ1RfSU9gLiBPa2F5LCB0aGVzZSBhcmUgYWxsIHN1cHBvcnRpbmcgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGF0IGFyZSBiZWluZyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBJIGNob29zZSBPQ0ZTMi4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aG9zZSBmb3IgbGF0ZXIsIG1heWJlIHRoZXkgYXJlIGdvb2QgZGVmYXVsdHMuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgdGhhdCBgT0NGUzJfRlNgIGRvZXNuJiMzOTt0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYElORVRgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBhcmUgcHJldHR5IHN0YW5kYXJkIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlYWwgd2l0aCB0aG9zZS4gU28sIG15IGNvcmUgbmVlZHMgYXJlIHJlYWxseSBqdXN0IGBPQ0ZTMl9GU2AuIEkmIzM5O2xsIGNyb3NzIHJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIG5vdGVzLiBMZXQmIzM5O3MgZG8gYSBxdWljayBjaGVjaywgbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcsIGNoZWNraW5nIGZvciBhbnkga2VybmVsIGNvbmZpZyBmbGFncyB0aGF0ICphcmVuJiMzOTt0KiBwcmVmaXhlZCB3aXRoIGBDT05GSUdfYC4gSnVzdCBsb29raW5nIGF0IHRoZSBwcmltYXJ5IG9uZXMuCgpJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgcmVsYXRlZCB0byBBQ0xzIHdpdGhpbiBPQ0ZTMiBpdHNlbGYuIEkmIzM5O2xsIHNlYXJjaCBmb3IgQUNMLXJlbGF0ZWQgY29uZmlncyBkaXJlY3RseSB3aXRoaW4gYGZzL29jZnMyYC4gSSBoYXZlIGEgZmVlbGluZyBgT0NGUzJfRlNfUE9TSVhfQUNMYCBpcyB3aGF0IEkgYW0gbG9va2luZyBmb3IgYnV0IGEgcXVpY2sgZ3JlcCBpcyBwcm9iYWJseSB0aGUgYmVzdCB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FDTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWc9Mj1jb25maWcgT0NGUzJfRlNcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTktXHRzZWxlY3QgUVVPVEFfVFJFRVxuZnMvb2NmczIvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19QT1NJWF9BQ0xcbmZzL29jZnMyL0tjb25maWctMTEtXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuLS1cbmZzL29jZnMyL2FjbC5jPTM0PXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9hY2xfZnJvbV94YXR0cihjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4tLVxuZnMvb2NmczIvYWNsLmMtNTUtXHRcdHN3aXRjaChhY2wtXHUwMDNlYV9lbnRyaWVzW25dLmVfdGFnKSB7XG5mcy9vY2ZzMi9hY2wuYzo1NjpcdFx0Y2FzZSBBQ0xfVVNFUjpcbmZzL29jZnMyL2FjbC5jLTU3LVx0XHRcdGFjbC1cdTAwM2VhX2VudHJpZXNbbl0uZV91aWQgPVxuLS1cbmZzL29jZnMyL2FjbC5jLTYwLVx0XHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmM6NjE6XHRcdGNhc2UgQUNMX0dST1VQOlxuZnMvb2NmczIvYWNsLmMtNjItXHRcdFx0YWNsLVx1MDAzZWFfZW50cmllc1tuXS5lX2dpZCA9XG4tLVxuZnMvb2NmczIvYWNsLmM9Nzg9c3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbi0tXG5mcy9vY2ZzMi9hY2wuYy05NC1cdFx0c3dpdGNoKGFjbC1cdTAwM2VhX2VudHJpZXNbbl0uZV90YWcpIHtcbmZzL29jZnMyL2FjbC5jOjk1Olx0XHRjYXNlIEFDTF9VU0VSOlxuZnMvb2NmczIvYWNsLmMtOTYtXHRcdFx0ZW50cnktXHUwMDNlZV9pZCA9IGNwdV90b19sZTMyKFxuLS1cbmZzL29jZnMyL2FjbC5jLTk5LVx0XHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmM6MTAwOlx0XHRjYXNlIEFDTF9HUk9VUDpcbmZzL29jZnMyL2FjbC5jLTEwMS1cdFx0XHRlbnRyeS1cdTAwM2VlX2lkID0gY3B1X3RvX2xlMzIoXG4tLVxuZnMvb2NmczIvYWNsLmMtMTA1LVx0XHRkZWZhdWx0OlxuZnMvb2NmczIvYWNsLmM6MTA2Olx0XHRcdGVudHJ5LVx1MDAzZWVfaWQgPSBjcHVfdG9fbGUzMihBQ0xfVU5ERUZJTkVEX0lEKTtcbmZzL29jZnMyL2FjbC5jLTEwNy1cdFx0XHRicmVhaztcbi0tXG5mcy9vY2ZzMi9hY2wuYz0xMTM9c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxuLS1cbmZzL29jZnMyL2FjbC5jLTEyMS1cdHN3aXRjaCAodHlwZSkge1xuZnMvb2NmczIvYWNsLmM6MTIyOlx0Y2FzZSBBQ0xfVFlQRV9BQ0NFU1M6XG5mcy9vY2ZzMi9hY2wuYzoxMjM6XHRcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTO1xuZnMvb2NmczIvYWNsLmMtMTI0LVx0XHRicmVhaztcbmZzL29jZnMyL2FjbC5jOjEyNTpcdGNhc2UgQUNMX1RZUEVfREVGQVVMVDpcbmZzL29jZnMyL2FjbC5jOjEyNjpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xuZnMvb2NmczIvYWNsLmMtMTI3LVx0XHRicmVhaztcbi0tXG5mcy9vY2ZzMi9hY2wuYz0xNTg9c3RhdGljIGludCBvY2ZzMl9hY2xfc2V0X21vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yMTEtLypcbmZzL29jZnMyL2FjbC5jOjIxMjogKiBTZXQgdGhlIGFjY2VzcyBvciBkZWZhdWx0IEFDTCBvZiBhbiBpbm9kZS5cbmZzL29jZnMyL2FjbC5jLTIxMy0gKi9cbmZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yMzAtXHRzd2l0Y2ggKHR5cGUpIHtcbmZzL29jZnMyL2FjbC5jOjIzMTpcdGNhc2UgQUNMX1RZUEVfQUNDRVNTOlxuZnMvb2NmczIvYWNsLmM6MjMyOlx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUztcbmZzL29jZnMyL2FjbC5jLTIzMy1cdFx0YnJlYWs7XG5mcy9vY2ZzMi9hY2wuYzoyMzQ6XHRjYXNlIEFDTF9UWVBFX0RFRkFVTFQ6XG5mcy9vY2ZzMi9hY2wuYzoyMzU6XHRcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDtcbmZzL29jZnMyL2FjbC5jLTIzNi1cdFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4tLVxuZnMvb2NmczIvYWNsLmM9MjYzPWludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL29jZnMyL2FjbC5jLTI3My1cdFx0cmV0dXJuIGhhZF9sb2NrO1xuZnMvb2NmczIvYWNsLmM6Mjc0Olx0aWYgKHR5cGUgPT0gQUNMX1RZUEVfQUNDRVNTIFx1MDAyNlx1MDAyNiBhY2wpIHtcbmZzL29jZnMyL2FjbC5jLTI3NS1cdFx0dW1vZGVfdCBtb2RlO1xuLS1cbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzA0LVx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9vY2ZzMi9hY2wuYzozMDU6XHRpZiAoIShvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkpXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzI5LVxuZnMvb2NmczIvYWNsLmM6MzMwOlx0aWYgKCEob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxuZnMvb2NmczIvYWNsLmMtMzMxLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zMzMtXHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbmZzL29jZnMyL2FjbC5jOjMzNDpcdGFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGJoKTtcbmZzL29jZnMyL2FjbC5jLTMzNS1cdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zNDAtXHRcdHJldHVybiByZXQ7XG5mcy9vY2ZzMi9hY2wuYzozNDE6XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBBQ0xfVFlQRV9BQ0NFU1MsXG5mcy9vY2ZzMi9hY2wuYy0zNDItXHRcdFx0ICAgIGFjbCwgTlVMTCwgTlVMTCk7XG4tLVxuZnMvb2NmczIvYWNsLmMtMzQ3LS8qXG5mcy9vY2ZzMi9hY2wuYzozNDg6ICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXG5mcy9vY2ZzMi9hY2wuYy0zNDktICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxuLS1cbmZzL29jZnMyL2FjbC5jPTM1OT1pbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zNzItXG5mcy9vY2ZzMi9hY2wuYzozNzM6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL2FjbC5jLTM3NC1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuZnMvb2NmczIvYWNsLmMtMzc1LVx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG5mcy9vY2ZzMi9hY2wuYzozNzY6XHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuZnMvb2NmczIvYWNsLmMtMzc3LVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLS1cbmZzL29jZnMyL2FjbC5jPTQxND1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy00MjUtXG5mcy9vY2ZzMi9hY2wuYzo0MjY6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL2FjbC5jLTQyNy1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbmZzL29jZnMyL2FjbC5jLTQyOC1cdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuZnMvb2NmczIvYWNsLmM6NDI5Olx0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCxcbmZzL29jZnMyL2FjbC5jLTQzMC1cdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuLS1cbmZzL29jZnMyL2FjbC5jLTQ0Mi1cbmZzL29jZnMyL2FjbC5jOjQ0MzpcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuZnMvb2NmczIvYWNsLmMtNDQ0LVx0XHRpZiAoc3RhdGUtXHUwMDNlYWNsKSB7XG5mcy9vY2ZzMi9hY2wuYy00NDUtXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbmZzL29jZnMyL2FjbC5jOjQ0NjpcdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXHUwMDNlYWNsLFxuZnMvb2NmczIvYWNsLmMtNDQ3LVx0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4tLVxuZnMvb2NmczIvYWNsLmgtNy1cbmZzL29jZnMyL2FjbC5oOjg6I2lmbmRlZiBPQ0ZTMl9BQ0xfSFxuZnMvb2NmczIvYWNsLmg6OTojZGVmaW5lIE9DRlMyX0FDTF9IXG5mcy9vY2ZzMi9hY2wuaC0xMC1cbi0tXG5mcy9vY2ZzMi9hY2wuaD0zMz1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9hY2wuaC0zOC1cbmZzL29jZnMyL2FjbC5oOjM5OiNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuLS1cbmZzL29jZnMyL29jZnMyLmg9MjU3PWVudW0gb2NmczJfbW91bnRfb3B0aW9uc1xuLS1cbmZzL29jZnMyL29jZnMyLmgtMjY2LVx0T0NGUzJfTU9VTlRfSU5PREU2NCA9IDEgXHUwMDNjXHUwMDNjIDcsXHQvKiBBbGxvdyBpbm9kZSBudW1iZXJzIFx1MDAzZSAyXjMyICovXG5mcy9vY2ZzMi9vY2ZzMi5oOjI2NzpcdE9DRlMyX01PVU5UX1BPU0lYX0FDTCA9IDEgXHUwMDNjXHUwMDNjIDgsXHQvKiBGb3JjZSBQT1NJWCBhY2Nlc3MgY29udHJvbCBsaXN0cyAqL1xuZnMvb2NmczIvb2NmczIuaDoyNjg6XHRPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wgPSAxIFx1MDAzY1x1MDAzYyA5LFx0LyogRGlzYWJsZSBQT1NJWCBhY2Nlc3NcbmZzL29jZnMyL29jZnMyLmgtMjY5LVx0XHRcdFx0XHRcdCAgIGNvbnRyb2wgbGlzdHMgKi9cbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTYwNz1zdGF0aWMgaW50IG9jZnMyX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTcxNi1cbmZzL29jZnMyL3N1cGVyLmM6NzE3Olx0XHRzYi1cdTAwM2VzX2ZsYWdzID0gKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IH5TQl9QT1NJWEFDTCkgfFxuZnMvb2NmczIvc3VwZXIuYzo3MTg6XHRcdFx0KChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgP1xuZnMvb2NmczIvc3VwZXIuYzo3MTk6XHRcdFx0XHRcdFx0XHRTQl9QT1NJWEFDTCA6IDApO1xuZnMvb2NmczIvc3VwZXIuYy03MjAtXHR9XG4tLVxuZnMvb2NmczIvc3VwZXIuYz05NzM9c3RhdGljIGludCBvY2ZzMl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjMtXG5mcy9vY2ZzMi9zdXBlci5jOjEwMjQ6XHRzYi1cdTAwM2VzX2ZsYWdzID0gKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IH4oU0JfUE9TSVhBQ0wgfCBTQl9OT1NFQykpIHxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcdFx0KChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgPyBTQl9QT1NJWEFDTCA6IDApO1xuZnMvb2NmczIvc3VwZXIuYy0xMDI2LVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9MTIzMj1zdGF0aWMgaW50IG9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVx0fVxuZnMvb2NmczIvc3VwZXIuYzoxMjYxOlx0aWYgKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXHUwMDI2XHUwMDI2XG5mcy9vY2ZzMi9zdXBlci5jLTEyNjItXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xuZnMvb2NmczIvc3VwZXIuYzoxMjYzOlx0XHRtbG9nKE1MX0VSUk9SLCBcJiMzNDtBQ0wgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgXCYjMzQ7XG5mcy9vY2ZzMi9zdXBlci5jLTEyNjQtXHRcdCAgICAgXCYjMzQ7ZmVhdHVyZSBpcyBub3QgZW5hYmxlZFxcblwmIzM0Oyk7XG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMjY2LVx0fVxuZnMvb2NmczIvc3VwZXIuYzoxMjY3Olx0LyogTm8gQUNMIHNldHRpbmcgc3BlY2lmaWVkPyBVc2UgWEFUVFIgZmVhdHVyZS4uLiAqL1xuZnMvb2NmczIvc3VwZXIuYzoxMjY4Olx0aWYgKCEob3B0aW9ucy1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2IChPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgfFxuZnMvb2NmczIvc3VwZXIuYzoxMjY5Olx0XHRcdFx0ICAgIE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTCkpKSB7XG5mcy9vY2ZzMi9zdXBlci5jLTEyNzAtXHRcdGlmIChPQ0ZTMl9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUikpXG5mcy9vY2ZzMi9zdXBlci5jOjEyNzE6XHRcdFx0b3B0aW9ucy1cdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMjcyLVx0XHRlbHNlXG5mcy9vY2ZzMi9zdXBlci5jOjEyNzM6XHRcdFx0b3B0aW9ucy1cdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMjc0LVx0fVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9MTI3OD1zdGF0aWMgaW50IG9jZnMyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMzg0LVx0XHRpZiAocmVzdWx0Lm5lZ2F0ZWQpIHtcbmZzL29jZnMyL3N1cGVyLmM6MTM4NTpcdFx0XHRtb3B0LVx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODY6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+T0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMzg3LVx0XHR9IGVsc2Uge1xuZnMvb2NmczIvc3VwZXIuYzoxMzg4Olx0XHRcdG1vcHQtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmM6MTM4OTpcdFx0XHRtb3B0LVx1MDAzZW1vdW50X29wdCBcdTAwMjY9IH5PQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XG5mcy9vY2ZzMi9zdXBlci5jLTEzOTAtXHRcdH1cbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTE0MTY9c3RhdGljIGludCBvY2ZzMl9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTQ4NC1cbmZzL29jZnMyL3N1cGVyLmM6MTQ4NTpcdGlmIChvcHRzIFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODYtXHRcdHNlcV9wcmludGYocywgXCYjMzQ7LGFjbFwmIzM0Oyk7XG4tLVxuZnMvb2NmczIveGF0dHIuYz0xMDE9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3Qgb2NmczJfeGF0dHJfaGFuZGxlcl9tYXBbT0NGUzJfWEFUVFJfTUFYXSA9IHtcbmZzL29jZnMyL3hhdHRyLmMtMTAyLVx0W09DRlMyX1hBVFRSX0lOREVYX1VTRVJdXHRcdD0gXHUwMDI2b2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyLFxuZnMvb2NmczIveGF0dHIuYzoxMDM6XHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU11cdD0gXHUwMDI2bm9wX3Bvc2l4X2FjbF9hY2Nlc3MsXG5mcy9vY2ZzMi94YXR0ci5jOjEwNDpcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVF1cdD0gXHUwMDI2bm9wX3Bvc2l4X2FjbF9kZWZhdWx0LFxuZnMvb2NmczIveGF0dHIuYy0xMDUtXHRbT0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRF1cdFx0PSBcdTAwMjZvY2ZzMl94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG4tLVxuZnMvb2NmczIveGF0dHIuYz02Mzg9aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjQ5LVxuZnMvb2NmczIveGF0dHIuYzo2NTA6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL3hhdHRyLmMtNjUxLVx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDEtXHR9XG5mcy9vY2ZzMi94YXR0ci5jOjcwMjpcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuZnMvb2NmczIveGF0dHIuYy03MDMtXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTkxMj1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX2xpc3RfZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTkyNy1cbmZzL29jZnMyL3hhdHRyLmM6OTI4Olx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTOlxuZnMvb2NmczIveGF0dHIuYzo5Mjk6XHRjYXNlIE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUOlxuZnMvb2NmczIveGF0dHIuYzo5MzA6XHRcdGlmICghKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX1BPU0lYQUNMKSlcbmZzL29jZnMyL3hhdHRyLmMtOTMxLVx0XHRcdHJldHVybiAwO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9MzU1NT1zdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtMzY5MS0vKlxuZnMvb2NmczIveGF0dHIuYzozNjkyOiAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlXG5mcy9vY2ZzMi94YXR0ci5jLTM2OTMtICogdGhhdCBpcyBzdGlsbCB1bnB1Ymxpc2hlZCwgdW5oYXNoZWQsIGFuZCB1bmF0dGFjaGVkIHRvIGEgZGVudHJ5LlxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NzM2Nz1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfbm9fc2VjdXJpdHkoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSlcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTczNzEtXHRyZXR1cm4gdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSBcdTAwMjZcdTAwMjZcbmZzL29jZnMyL3hhdHRyLmM6NzM3MjpcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MgXHUwMDI2XHUwMDI2XG5mcy9vY2ZzMi94YXR0ci5jOjczNzM6XHQgICAgICAgdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDtcbmZzL29jZnMyL3hhdHRyLmMtNzM3NC19XG4tLVxuZnMvb2NmczIveGF0dHIuaD0xND1lbnVtIG9jZnMyX3hhdHRyX3R5cGUge1xuZnMvb2NmczIveGF0dHIuaC0xNS1cdE9DRlMyX1hBVFRSX0lOREVYX1VTRVIgPSAxLFxuZnMvb2NmczIveGF0dHIuaDoxNjpcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MsXG5mcy9vY2ZzMi94YXR0ci5oOjE3Olx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG5mcy9vY2ZzMi94YXR0ci5oLTE4LVx0T0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MDIKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbmFsaXppbmcgdGhlIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgdGltZSB0byB3cmFwIHRoaXMgdXAuIEkgbmVlZCB0byBkb2N1bWVudCB0aGUgZXNzZW50aWFsIHBhcmFtZXRlcnMgZm9yIGZ1enppbmcgdGhpcyBzcGVjaWZpYyBjb2RlLiBGaXJzdCwgdGhlIG9idmlvdXM6IGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLiBUaGUgY2hhbmdlcyBJJiMzOTttIGZvY3VzaW5nIG9uIOKAkyBzcGVjaWZpY2FsbHkgd2l0aGluIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGFuZCBgb2NmczJfbWtub2RgIOKAkyBhcmUgdGhlIGtleSBwb2ludHMgdG8gaGl0LiBUaG9zZSBhcmUgZ29pbmcgc3RyYWlnaHQgaW50byBgRm9jdXNTeW1ib2xzYC4gQW5kIG5hdHVyYWxseSwgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocywgYEVuYWJsZUNvbmZpZ3NgIG5lZWRzIHRvIGluY2x1ZGUgYE9DRlMyX0ZTYC4KCkNydWNpYWxseSwgSSBuZWVkIHRvIG1ha2UgdGhlIHJlYXNvbmluZyBjcnlzdGFsIGNsZWFyLiBUaGlzIHNldCBvZiBtb2RpZmljYXRpb25zIGluIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGRpcmVjdGx5IGltcGFjdHMgcmVhY2hhYmxlIGtlcm5lbCBmaWxlc3lzdGVtIGNvZGUsIGFuZCBiZWNhdXNlIG9mIHRoaXMsIGZ1enppbmcgdW5kZXIgYE9DRlMyX0ZTYCBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gVGhhdCBjb25jaXNlbHkgZXhwbGFpbnMgdGhlIG5lZWQgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gTm93LCBJIGp1c3QgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHdlIGNhbiBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfbWtub2QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBDIGNvZGUgaW4gZnMvb2NmczIveGF0dHIuYyBieSBjbGVhbmluZyB1cCByZXR1cm4gdmFsdWVzIGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uL21rbm9kIGluIE9DRlMyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBPQ0ZTMiBzdXBwb3J0IGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX21rbm9kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgQyBjb2RlIGluIGZzL29jZnMyL3hhdHRyLmMgYnkgY2xlYW5pbmcgdXAgcmV0dXJuIHZhbHVlcyBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKSwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbi9ta25vZCBpbiBPQ0ZTMi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggT0NGUzIgc3VwcG9ydCBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSB0cml2aWFsIGNvZGUgY2xlYW51cCBpbiBmcy9vY2ZzMi94YXR0ci5jIHJlbW92aW5nIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1NDcyMWY0NjQzYzM1ZmMwMTc4ZDI2MDhmYTdkMmVmODk4ZWQ2NmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE3OjQ3OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggMzViY2JiMGZmNjA3Yi4uYWIzYjY0NTk4M2M5NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5jCkBAIC02NDAsNyAmIzQzOzY0MCw2IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKIAkJCSAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsCiAJCQkgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpCiB7Ci0JaW50IHJldCA9IDA7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItJmd0O2lfc2IpOwogCWludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzOwogCkBAIC02NjIsNyAmIzQzOzY2MSw3IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKIAl9CiAKIAlpZiAoIShzX3NpemUgJiM0MzsgYV9zaXplKSkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAwOwogCiAJLyoKIAkgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpcwpAQCAtNzI5LDcgJiM0Mzs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsCiAJCX0KIAl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWGF0dHIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgYW5kIGl0cyBpbW1lZGlhdGUgY29udGV4dC4gVGhpcyBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpYCBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBHaXZlbiB0aGF0LCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGF0IGZpbGUgYW5kLCBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgNjQwLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBnaXZlbiB0aGUgZnVuY3Rpb24gYW5kIGZpbGUgdGhlIHBhdGNoIHBvaW50cyB0by4gV2UgY2FuIGdldCBhIHF1aWNrIGltcHJlc3Npb24gb2Ygd2hhdCB0aGlzIGNvZGUgaXMgYXR0ZW1wdGluZyB0byBjaGFuZ2UgYW5kIGFjY29tcGxpc2ggaGVyZS4gRnJvbSB0aGVyZSwgd2UgY2FuIGFuYWx5emUgaG93IHRoZSB4YXR0ciBtb2RpZmljYXRpb25zIGFyZSBpbnRlbmRlZCB0byBiZWhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb2NmczIveGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzNTpcdFx0cmV0dXJuIHJldDtcbiA2MzY6XHR9XG4gNjM3Olx0XG4gNjM4Olx0aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuIDYzOTpcdFx0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuIDY0MDpcdFx0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4gNjQxOlx0XHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIDY0MjpcdHtcbiA2NDM6XHRcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuIDY0NDpcdFx0aW50IHNfc2l6ZSA9IDAsIGFfc2l6ZSA9IDAsIGFjbF9sZW4gPSAwLCBuZXdfY2x1c3RlcnM7XG4gNjQ1Olx0XG4gNjQ2Olx0XHRpZiAoc2ktXHUwMDNlZW5hYmxlKVxuIDY0NzpcdFx0XHRzX3NpemUgPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoc3RybGVuKHNpLVx1MDAzZW5hbWUpLFxuIDY0ODpcdFx0XHRcdFx0XHRcdCAgICAgc2ktXHUwMDNldmFsdWVfbGVuKTtcbiA2NDk6XHRcbiA2NTA6XHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuIDY1MTpcdFx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4gNjUyOlx0XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbiA2NTM6XHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuIDY1NDpcdFx0XHRcdGFfc2l6ZSAmIzQzOz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIDY1NTpcdFx0XHR9XG4gNjU2Olx0XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4gNjU3Olx0XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4gNjU4Olx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiA2NTk6XHRcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiA2NjA6XHRcdFx0fVxuIDY2MTpcdFx0fVxuIDY2MjpcdFxuIDY2MzpcdFx0aWYgKCEoc19zaXplICYjNDM7IGFfc2l6ZSkpXG4gNjY0Olx0XHRcdHJldHVybiAwO1xuIDY2NTpcdFxuIDY2NjpcdFx0LypcbiA2Njc6XHRcdCAqIFRoZSBtYXggc3BhY2Ugb2Ygc2VjdXJpdHkgeGF0dHIgdGFrZW4gaW5saW5lIGlzXG4gNjY4Olx0XHQgKiAyNTYobmFtZSkgJiM0MzsgODAodmFsdWUpICYjNDM7IDE2KGVudHJ5KSA9IDM1MiBieXRlcyxcbiA2Njk6XHRcdCAqIFRoZSBtYXggc3BhY2Ugb2YgYWNsIHhhdHRyIHRha2VuIGlubGluZSBpc1xuIDY3MDpcdFx0ICogODAodmFsdWUpICYjNDM7IDE2KGVudHJ5KSAqIDIoaWYgZGlyZWN0b3J5KSA9IDE5MiBieXRlcyxcbiA2NzE6XHRcdCAqIHdoZW4gYmxvY2tzaXplID0gNTEyLCBtYXkgcmVzZXJ2ZSBvbmUgbW9yZSBjbHVzdGVyIGZvclxuIDY3MjpcdFx0ICogeGF0dHIgYnVja2V0LCBvdGhlcndpc2UgcmVzZXJ2ZSBvbmUgbWV0YWRhdGEgYmxvY2tcbiA2NzM6XHRcdCAqIGZvciB0aGVtIGlzIG9rLlxuIDY3NDpcdFx0ICogSWYgdGhpcyBpcyBhIG5ldyBkaXJlY3Rvcnkgd2l0aCBpbmxpbmUgZGF0YSxcbiA2NzU6XHRcdCAqIHdlIGNob29zZSB0byByZXNlcnZlIHRoZSBlbnRpcmUgaW5saW5lIGFyZWEgZm9yXG4gNjc2Olx0XHQgKiBkaXJlY3RvcnkgY29udGVudHMgYW5kIGZvcmNlIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLlxuIDY3NzpcdFx0ICovXG4gNjc4Olx0XHRpZiAoZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSB8fFxuIDY3OTpcdFx0ICAgIChTX0lTRElSKG1vZGUpIFx1MDAyNlx1MDAyNiBvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB8fFxuIDY4MDpcdFx0ICAgIChzX3NpemUgJiM0MzsgYV9zaXplKSBcdTAwM2UgT0NGUzJfWEFUVFJfRlJFRV9JTl9JQk9EWSkge1xuIDY4MTpcdFx0XHQqd2FudF9tZXRhID0gKndhbnRfbWV0YSAmIzQzOyAxO1xuIDY4MjpcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz0gT0NGUzJfWEFUVFJfQkxPQ0tfQ1JFQVRFX0NSRURJVFM7XG4gNjgzOlx0XHR9XG4gNjg0Olx0XG4gNjg1Olx0XHRpZiAoZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSBcdTAwMjZcdTAwMjZcbiA2ODY6XHRcdCAgICAoc19zaXplICYjNDM7IGFfc2l6ZSkgXHUwMDNlIE9DRlMyX1hBVFRSX0ZSRUVfSU5fQkxPQ0soZGlyKSkge1xuIDY4NzpcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gMTtcbiA2ODg6XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGRpci1cdTAwM2VpX3NiKTtcbiA2ODk6XHRcdH1cbiA2OTA6XHRcbiA2OTE6XHRcdC8qXG4gNjkyOlx0XHQgKiByZXNlcnZlIGNyZWRpdHMgYW5kIGNsdXN0ZXJzIGZvciB4YXR0cnMgd2hpY2ggaGFzIGxhcmdlIHZhbHVlXG4gNjkzOlx0XHQgKiBhbmQgaGF2ZSB0byBiZSBzZXQgb3V0c2lkZVxuIDY5NDpcdFx0ICovXG4gNjk1Olx0XHRpZiAoc2ktXHUwMDNlZW5hYmxlIFx1MDAyNlx1MDAyNiBzaS1cdTAwM2V2YWx1ZV9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4gNjk2Olx0XHRcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiA2OTc6XHRcdFx0XHRcdFx0XHRcdHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gNjk4Olx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4gNjk5Olx0XHRcdFx0XHRcdFx0XHQgICBuZXdfY2x1c3RlcnMpO1xuIDcwMDpcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuIDcwMTpcdFx0fVxuIDcwMjpcdFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4gNzAzOlx0XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbiA3MDQ6XHRcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuIDcwNTpcdFx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4gNzA2Olx0XHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4gNzA3Olx0XHRcdFx0XHRuZXdfY2x1c3RlcnMgPVxuIDcwODpcdFx0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4gNzA5Olx0XHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbiA3MTA6XHRcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PVxuIDcxMTpcdFx0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4gNzEyOlx0XHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuIDcxMzpcdFx0XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiA3MTQ6XHRcdFx0XHR9XG4gNzE1Olx0XHRcdH1cbiA3MTY6XHRcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbiA3MTc6XHRcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbiA3MTg6XHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuIDcxOTpcdFx0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuIDcyMDpcdFx0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbiA3MjE6XHRcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuIDcyMjpcdFx0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4gNzIzOlx0XHRcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz1cbiA3MjQ6XHRcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuIDcyNTpcdFx0XHRcdFx0XHRcdFx0XHQgbmV3X2NsdXN0ZXJzKTtcbiA3MjY6XHRcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4gNzI3Olx0XHRcdFx0fVxuIDcyODpcdFx0XHR9XG4gNzI5Olx0XHR9XG4gNzMwOlx0XG4gNzMxOlx0XHRyZXR1cm4gMDtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0c3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzMxCgkJCQkJCQlvdXRwdXQ6IDExMQoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBUcml2aWFsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRjaCBoZXJlIOKAkyBpdCByZW1vdmVzIGEgbG9jYWwsIHVudXNlZCBpbnRlZ2VyIHZhcmlhYmxlLCBgcmV0YCwgZnJvbSB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24gaW4gYGZzL29jZnMyL3hhdHRyLmNgIGFuZCByZXBsYWNlcyB0aGUgcmV0dXJuIHN0YXRlbWVudCB1c2luZyB0aGUgbm93LWRlbGV0ZWQgdmFyaWFibGUgd2l0aCBhIGRpcmVjdCByZXR1cm4gb2YgYDBgLgoKRXNzZW50aWFsbHksIHRoaXMgaXMganVzdCBhIGNvZGUgY2xlYW51cCBleGVyY2lzZTsgaXTigJlzIGEgZGlyZWN0IHJlcGxhY2VtZW50IG9mIHJldHVybmluZyBhIHZhcmlhYmxlIGNvbnRhaW5pbmcgMCB3aXRoIHJldHVybmluZyAwIGl0c2VsZi4gVGhlcmUmIzM5O3Mgbm8gZnVuY3Rpb25hbCBjaGFuZ2Ugd2hhdHNvZXZlciwgd2hpY2ggaXMgdGhlIGtleSBoZXJlLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUsIG5vdCB0b3VjaGVkLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogRGVmaW5pdGVseSBub3QuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbj8qKiBOb3QgaGFwcGVuaW5nLgo0LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBhY2Nlc3MgdG8gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBieXRlcz8qKiBOZWdhdGl2ZS4KClRoZXJlZm9yZSwgc2luY2UgdGhpcyBpcyBqdXN0IGEgc21hbGwgY2xlYW51cCwgdGhpcyBwYXRjaCBjbGVhcmx5ICoqZG9lcyBub3QgcmVxdWlyZSBLTVNBTioqLgoKVG8gc29saWRpZnkgdGhlIHJlYXNvbmluZywgbGV04oCZcyByZXZpc2l0IHRoZSBjb3JlIGRpZmZlcmVuY2VzIGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOLiBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIGZvciB0aGUgdXN1YWwgbWVtb3J5IGVycm9ycyDigJMgVXNlLUFmdGVyLUZyZWUsIE91dC1vZi1Cb3VuZHMsIHRoYXQga2luZCBvZiB0aGluZy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLgoKR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgKm5vdGhpbmcqIHRoYXQgY291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbnZvbHZlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGludGVyYWN0IHdpdGggYnVmZmVycywgb3IgbWFrZSBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbiYjMzk7dCBuZWVkZWQuCgpPa2F5LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmcuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHRyaXZpYWwgY29kZSBjbGVhbnVwIGluIGZzL29jZnMyL3hhdHRyLmMgcmVtb3ZpbmcgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlICYjMzk7cmV0JiMzOTsgYW5kIHJldHVybmluZyAwIGRpcmVjdGx5IGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLiBJdCBkb2VzIG5vdCBhbHRlciBydW50aW1lIGJlaGF2aW9yLCBhbGxvY2F0ZS9hY2Nlc3MgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSB0cml2aWFsIGNvZGUgY2xlYW51cCBpbiBmcy9vY2ZzMi94YXR0ci5jIHJlbW92aW5nIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MjcuODgzODY4NTc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNDQyMjc5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX21rbm9kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHRyaXZpYWwgY29kZSBjbGVhbnVwIGluIGZzL29jZnMyL3hhdHRyLmMgcmVtb3ZpbmcgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlICdyZXQnIGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIEMgY29kZSBpbiBmcy9vY2ZzMi94YXR0ci5jIGJ5IGNsZWFuaW5nIHVwIHJldHVybiB2YWx1ZXMgaW4gb2NmczJfY2FsY194YXR0cl9pbml0KCksIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24vbWtub2QgaW4gT0NGUzIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIE9DRlMyIHN1cHBvcnQgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MjcuODgzODgwNjQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg4ODMwOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzU0NzIxZjQ2NDNjMzVmYzAxNzhkMjYwOGZhN2QyZWY4OThlZDY2YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDE3OjQ3OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXFxuaW5kZXggMzViY2JiMGZmNjA3Yi4uYWIzYjY0NTk4M2M5NiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXFxuKysrIGIvZnMvb2NmczIveGF0dHIuY1xcbkBAIC02NDAsNyArNjQwLDYgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbiBcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXFxuIHtcXG4tXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG4gXFx0aW50IHNfc2l6ZSA9IDAsIGFfc2l6ZSA9IDAsIGFjbF9sZW4gPSAwLCBuZXdfY2x1c3RlcnM7XFxuIFxcbkBAIC02NjIsNyArNjYxLDcgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIShzX3NpemUgKyBhX3NpemUpKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBtYXggc3BhY2Ugb2Ygc2VjdXJpdHkgeGF0dHIgdGFrZW4gaW5saW5lIGlzXFxuQEAgLTcyOSw3ICs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MjkuMzczMzE4MTIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjQxNzkxNTE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfbWtub2RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIEMgY29kZSBpbiBmcy9vY2ZzMi94YXR0ci5jIGJ5IGNsZWFuaW5nIHVwIHJldHVybiB2YWx1ZXMgaW4gb2NmczJfY2FsY194YXR0cl9pbml0KCksIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24vbWtub2QgaW4gT0NGUzIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIE9DRlMyIHN1cHBvcnQgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNTQ3MjFmNDY0M2MzNWZjMDE3OGQyNjA4ZmE3ZDJlZjg5OGVkNjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNzo0NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCAzNWJjYmIwZmY2MDdiLi5hYjNiNjQ1OTgzYzk2IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuKysrIGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTY0MCw3ICs2NDAsNiBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbiBcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuLVx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbiBcdGludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzO1xuIFxuQEAgLTY2Miw3ICs2NjEsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHR9XG4gXG4gXHRpZiAoIShzX3NpemUgKyBhX3NpemUpKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpc1xuQEAgLTcyOSw3ICs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MjkuMzczMzE5OTkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg4MDYwNTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBpdCBtb2RpZmllcyBgZnMvb2NmczIveGF0dHIuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBhIHNpbXBsZSBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBgb2NmczJfY2FsY194YXR0cl9pbml0YCBmdW5jdGlvbi4gVGhlIHBhdGNoIHJlbW92ZXMgYW4gdW51c2VkIHZhcmlhYmxlIGBpbnQgcmV0ID0gMDtgIGFuZCByZXBsYWNlcyB0aGUgYHJldHVybiByZXQ7YCB3aXRoIGByZXR1cm4gMDtgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIHJpZ2h0P1xuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGNvZGU/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIHdlIHNwZW5kIGFueSBtb3JlIHRpbWUuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBmcy9vY2ZzMi94YXR0ci5jYCBpdHNlbGYgYW5kIHRoZSByZWxhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBwYXRoIHRoYXQgY291bGQgcmVhbGlzdGljYWxseSBiZSBoaXQgYW5kIGlzIHRoZXJlZm9yZSB3b3J0aCBmdXp6aW5nLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCByZXZpZXcgdGhlIGd1aWRlbGluZXMgYWdhaW4uIFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGZhbGwgaW50byB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjYXRlZ29yaWVzLiBPa2F5LCBzbyBubyBkb2N1bWVudGF0aW9uLCBubyB1c2VyLXNwYWNlIHRvb2xzLCBub3QgZGVjb3JhdGl2ZSBsb2dnaW5nLCBhbmQgbm8gYnVpbGQgc3lzdGVtIGNoYW5nZXMuIFRoaXMgaXMgZGVmaW5pdGVseSBDIGxvZ2ljLiBBbHNvLCBubyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5MZXQncyBzZWXigKYgSSBrbm93IHRoYXQgT0NGUzIgaXMgYSBmaWxlIHN5c3RlbS4gRG9lcyB0aGlzIGdldCB0cmlnZ2VyZWQgdW5kZXIgc3l6a2FsbGVyL1FFTVU/IE9DRlMyIGNhbiBiZSBtb3VudGVkIHVzaW5nIGxvb3BiYWNrIGRldmljZXMgb3IgdGhyb3VnaCBpbWFnZSBtb3VudGluZyBhbmQgc3lzY2FsbHMsIHNvIGl0IGlzIHByb2JhYmx5IHJlYWNoYWJsZS4gSSBzaG91bGQgY2hlY2sgS2NvbmZpZyBmb3IgT0NGUzIgdG8gY29uZmlybS4gT2theSwgYXNzdW1pbmcgaXQgaXMgZW5hYmxlZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MzUuMjUzOTI4MzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTAxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MzUuMzAwNzQzNTIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzMDI4MDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGZpbGVzLCBleHByZXNzZWQgYXMgaWYgSSdtIHRoaW5raW5nIGFib3V0IHRoZW06XG5cbioqRGl2aW5nIGludG8gT0NGUzIgWGF0dHIgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBkaWcgaW50byBob3cgT0NGUzIgaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyBgZnMvb2NmczIvS2NvbmZpZ2AgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQ7IGl0IHNob3VsZCBvdXRsaW5lIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB4YXR0ciBzdXBwb3J0IHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gVGhpcyB3aWxsIHJlbWluZCBtZSBvZiB3aGF0IGZlYXR1cmVzIGFyZSBjb21waWxlZCBpbiBhbmQgaG93IHRoZXkgbWlnaHQgYWZmZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiBJJ20gYWJvdXQgdG8gbG9vayBhdC5cblxuVGhlbiwgSSdsbCBiZSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGZzL29jZnMyL3hhdHRyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgb2NmczJfY2FsY194YXR0cl9pbml0YCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGhhcHBlbiwgcmlnaHQ/IEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiwgb3IgY29kZSBuZWFyIGl0LCB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbml0aWFsIHZhbHVlcyByZWxhdGVkIHRvIHhhdHRycy4gSSdtIGludGVyZXN0ZWQgaW4gaG93IGl0IGNhbGN1bGF0ZXMgc2l6ZXMsIGFsbG9jYXRlcyBzcGFjZSwgYW5kIHBvc3NpYmx5IGhhbmRsZXMgYW55IGluaXRpYWwgZGVmYXVsdCBhdHRyaWJ1dGVzIG9yIG1ldGFkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcHJlc2VudCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3IgYSBuZXcgaW5vZGUgaXMgY3JlYXRlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgc3RlcHMuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW50ZXJhY3Rpb24gd2l0aCBibG9jayBhbGxvY2F0aW9uIG9yIGlub2RlIGRhdGEuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBpbml0aWFsaXphdGlvbiB0aWVzIGludG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBtb2RlbCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBzY2FsYWJpbGl0eSBvZiB0aGUgT0NGUzIgeGF0dHIgaW1wbGVtZW50YXRpb24uIEFyZSB0aGV5IHN0b3JlZCBpbmxpbmUsIGluIGEgc2VwYXJhdGUgYmxvY2ssIG9yIHRocm91Z2ggc29tZSBjbGV2ZXIgY29tYmluYXRpb24/IEknbSBsb29raW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMsIHdoaWNoIHNob3VsZCBiZSB3ZWxsIGRvY3VtZW50ZWQgaW4gY29tbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0NzozOC4xMzEwMjc3NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgT0NGUzJfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuICAgNTpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA2OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBRVU9UQVxcbiAgIDk6XFx0XFx0c2VsZWN0IFFVT1RBX1RSRUVcXG4gIDEwOlxcdFxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4gIDExOlxcdFxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIE9DRlMyIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGV4dGVudCBiYXNlZCBzaGFyZWQgZGlzayBjbHVzdGVyIGZpbGVcXG4gIDE0OlxcdFxcdCAgc3lzdGVtIHdpdGggbWFueSBzaW1pbGFyaXRpZXMgdG8gZXh0My4gSXQgc3VwcG9ydHMgNjQgYml0IGlub2RlXFxuICAxNTpcXHRcXHQgIG51bWJlcnMsIGFuZCBoYXMgYXV0b21hdGljYWxseSBleHRlbmRpbmcgbWV0YWRhdGEgZ3JvdXBzIHdoaWNoIG1heVxcbiAgMTY6XFx0XFx0ICBhbHNvIG1ha2UgaXQgYXR0cmFjdGl2ZSBmb3Igbm9uLWNsdXN0ZXJlZCB1c2UuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgWW91J2xsIHdhbnQgdG8gaW5zdGFsbCB0aGUgb2NmczItdG9vbHMgcGFja2FnZSBpbiBvcmRlciB0byBhdCBsZWFzdFxcbiAgMTk6XFx0XFx0ICBnZXQgXFxcIm1vdW50Lm9jZnMyXFxcIi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBQcm9qZWN0IHdlYiBwYWdlOiAgICBodHRwczovL29jZnMyLndpa2kua2VybmVsLm9yZy9cXG4gIDIyOlxcdFxcdCAgVG9vbHMgd2ViIHBhZ2U6ICAgICAgaHR0cHM6Ly9naXRodWIuY29tL21hcmtmYXNoZWgvb2NmczItdG9vbHNcXG4gIDIzOlxcdFxcdCAgT0NGUzIgbWFpbGluZyBsaXN0czogaHR0cHM6Ly9zdWJzcGFjZS5rZXJuZWwub3JnL2xpc3RzLmxpbnV4LmRldi5odG1sXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gT0NGUzIsIHNlZSB0aGUgZmlsZVxcbiAgMjY6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnJzdFxcdTAwM2UuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xcbiAgMzE6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMjpcXHRcXHRoZWxwXFxuICAzMzpcXHRcXHQgIE9DRlMyIGluY2x1ZGVzIGEgc2ltcGxlIGtlcm5lbHNwYWNlIGNsdXN0ZXJpbmcgcGFja2FnZSwgdGhlIE9DRlMyXFxuICAzNDpcXHRcXHQgIENsdXN0ZXIgQmFzZS4gIEl0IG9ubHkgcmVxdWlyZXMgYSB2ZXJ5IHNtYWxsIHVzZXJzcGFjZSBjb21wb25lbnRcXG4gIDM1OlxcdFxcdCAgdG8gY29uZmlndXJlIGl0LiBUaGlzIGNvbWVzIHdpdGggdGhlIHN0YW5kYXJkIG9jZnMyLXRvb2xzIHBhY2thZ2UuXFxuICAzNjpcXHRcXHQgIE8yQ0IgaXMgbGltaXRlZCB0byBtYWludGFpbmluZyBhIGNsdXN0ZXIgZm9yIE9DRlMyIGZpbGUgc3lzdGVtcy5cXG4gIDM3OlxcdFxcdCAgSXQgY2Fubm90IG1hbmFnZSBhbnkgb3RoZXIgY2x1c3RlciBhcHBsaWNhdGlvbnMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgSXQgaXMgYWx3YXlzIHNhZmUgdG8gc2F5IFkgaGVyZSwgYXMgdGhlIGNsdXN0ZXJpbmcgbWV0aG9kIGlzXFxuICA0MDpcXHRcXHQgIHJ1bi10aW1lIHNlbGVjdGFibGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjM4LjEzMTEwMDQ1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzUzNzQ0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqWGF0dHIgSW52ZXN0aWdhdGlvbiBCZWdpbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgb2NmczJgIGV4dGVuZGVkIGF0dHJpYnV0ZSBjb2RlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gYGZzL29jZnMyL3hhdHRyLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBob3cgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQuIEkgd2FudCB0byBzZWUgKndoZXJlKiBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbSBjb2RlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIGFuZCBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24sIHByb2JhYmx5IGluIHRoZSBwcm9jZXNzIG9mIGNhbGN1bGF0aW5nIHNwYWNlIG5lZWRlZCB0byBzdG9yZSB0aGUgYXR0cmlidXRlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjM5Ljc2NjQ3NjgzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzU6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjM2OlxcdH1cXG4gNjM3OlxcdFxcbiA2Mzg6XFx0aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiA2Mzk6XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXFxuIDY0MDpcXHRcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbiA2NDE6XFx0XFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxcbiA2NDI6XFx0e1xcbiA2NDM6XFx0XFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXFx1MDAzZWlfc2IpO1xcbiA2NDQ6XFx0XFx0aW50IHNfc2l6ZSA9IDAsIGFfc2l6ZSA9IDAsIGFjbF9sZW4gPSAwLCBuZXdfY2x1c3RlcnM7XFxuIDY0NTpcXHRcXG4gNjQ2OlxcdFxcdGlmIChzaS1cXHUwMDNlZW5hYmxlKVxcbiA2NDc6XFx0XFx0XFx0c19zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKHN0cmxlbihzaS1cXHUwMDNlbmFtZSksXFxuIDY0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpLVxcdTAwM2V2YWx1ZV9sZW4pO1xcbiA2NDk6XFx0XFxuIDY1MDpcXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbiA2NTE6XFx0XFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbiA2NTI6XFx0XFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wtXFx1MDAzZWFfY291bnQgKlxcbiA2NTM6XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuIDY1NDpcXHRcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbiA2NTU6XFx0XFx0XFx0fVxcbiA2NTY6XFx0XFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlYWNsKSB7XFxuIDY1NzpcXHRcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbiA2NTg6XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuIDY1OTpcXHRcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbiA2NjA6XFx0XFx0XFx0fVxcbiA2NjE6XFx0XFx0fVxcbiA2NjI6XFx0XFxuIDY2MzpcXHRcXHRpZiAoIShzX3NpemUgKyBhX3NpemUpKVxcbiA2NjQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY2NTpcXHRcXG4gNjY2OlxcdFxcdC8qXFxuIDY2NzpcXHRcXHQgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpc1xcbiA2Njg6XFx0XFx0ICogMjU2KG5hbWUpICsgODAodmFsdWUpICsgMTYoZW50cnkpID0gMzUyIGJ5dGVzLFxcbiA2Njk6XFx0XFx0ICogVGhlIG1heCBzcGFjZSBvZiBhY2wgeGF0dHIgdGFrZW4gaW5saW5lIGlzXFxuIDY3MDpcXHRcXHQgKiA4MCh2YWx1ZSkgKyAxNihlbnRyeSkgKiAyKGlmIGRpcmVjdG9yeSkgPSAxOTIgYnl0ZXMsXFxuIDY3MTpcXHRcXHQgKiB3aGVuIGJsb2Nrc2l6ZSA9IDUxMiwgbWF5IHJlc2VydmUgb25lIG1vcmUgY2x1c3RlciBmb3JcXG4gNjcyOlxcdFxcdCAqIHhhdHRyIGJ1Y2tldCwgb3RoZXJ3aXNlIHJlc2VydmUgb25lIG1ldGFkYXRhIGJsb2NrXFxuIDY3MzpcXHRcXHQgKiBmb3IgdGhlbSBpcyBvay5cXG4gNjc0OlxcdFxcdCAqIElmIHRoaXMgaXMgYSBuZXcgZGlyZWN0b3J5IHdpdGggaW5saW5lIGRhdGEsXFxuIDY3NTpcXHRcXHQgKiB3ZSBjaG9vc2UgdG8gcmVzZXJ2ZSB0aGUgZW50aXJlIGlubGluZSBhcmVhIGZvclxcbiA2NzY6XFx0XFx0ICogZGlyZWN0b3J5IGNvbnRlbnRzIGFuZCBmb3JjZSBhbiBleHRlcm5hbCB4YXR0ciBibG9jay5cXG4gNjc3OlxcdFxcdCAqL1xcbiA2Nzg6XFx0XFx0aWYgKGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSB8fFxcbiA2Nzk6XFx0XFx0ICAgIChTX0lTRElSKG1vZGUpIFxcdTAwMjZcXHUwMDI2IG9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHx8XFxuIDY4MDpcXHRcXHQgICAgKHNfc2l6ZSArIGFfc2l6ZSkgXFx1MDAzZSBPQ0ZTMl9YQVRUUl9GUkVFX0lOX0lCT0RZKSB7XFxuIDY4MTpcXHRcXHRcXHQqd2FudF9tZXRhID0gKndhbnRfbWV0YSArIDE7XFxuIDY4MjpcXHRcXHRcXHQqeGF0dHJfY3JlZGl0cyArPSBPQ0ZTMl9YQVRUUl9CTE9DS19DUkVBVEVfQ1JFRElUUztcXG4gNjgzOlxcdFxcdH1cXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0aWYgKGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSBcXHUwMDI2XFx1MDAyNlxcbiA2ODY6XFx0XFx0ICAgIChzX3NpemUgKyBhX3NpemUpIFxcdTAwM2UgT0NGUzJfWEFUVFJfRlJFRV9JTl9CTE9DSyhkaXIpKSB7XFxuIDY4NzpcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSAxO1xcbiA2ODg6XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoZGlyLVxcdTAwM2VpX3NiKTtcXG4gNjg5OlxcdFxcdH1cXG4gNjkwOlxcdFxcbiA2OTE6XFx0XFx0LypcXG4gNjkyOlxcdFxcdCAqIHJlc2VydmUgY3JlZGl0cyBhbmQgY2x1c3RlcnMgZm9yIHhhdHRycyB3aGljaCBoYXMgbGFyZ2UgdmFsdWVcXG4gNjkzOlxcdFxcdCAqIGFuZCBoYXZlIHRvIGJlIHNldCBvdXRzaWRlXFxuIDY5NDpcXHRcXHQgKi9cXG4gNjk1OlxcdFxcdGlmIChzaS1cXHUwMDNlZW5hYmxlIFxcdTAwMjZcXHUwMDI2IHNpLVxcdTAwM2V2YWx1ZV9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbiA2OTY6XFx0XFx0XFx0bmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4gNjk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpLVxcdTAwM2V2YWx1ZV9sZW4pO1xcbiA2OTg6XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cXHUwMDNlaV9zYixcXG4gNjk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuIDcwMDpcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIDcwMTpcXHRcXHR9XFxuIDcwMjpcXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbiA3MDM6XFx0XFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbiA3MDQ6XFx0XFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wtXFx1MDAzZWFfY291bnQgKlxcbiA3MDU6XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuIDcwNjpcXHRcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPVxcbiA3MDg6XFx0XFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4gNzA5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBhY2xfbGVuKTtcXG4gNzEwOlxcdFxcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9XFxuIDcxMTpcXHRcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbiA3MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19jbHVzdGVycyk7XFxuIDcxMzpcXHRcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIDcxNDpcXHRcXHRcXHRcXHR9XFxuIDcxNTpcXHRcXHRcXHR9XFxuIDcxNjpcXHRcXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VhY2wpIHtcXG4gNzE3OlxcdFxcdFxcdFxcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXFx1MDAzZWFjbC1cXHUwMDNlYV9jb3VudCAqXFxuIDcxODpcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4gNzE5OlxcdFxcdFxcdFxcdGlmIChhY2xfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4gNzIwOlxcdFxcdFxcdFxcdFxcdG5ld19jbHVzdGVycyA9XFxuIDcyMTpcXHRcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVxcdTAwM2VpX3NiLFxcbiA3MjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFjbF9sZW4pO1xcbiA3MjM6XFx0XFx0XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz1cXG4gNzI0OlxcdFxcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuIDcyNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmV3X2NsdXN0ZXJzKTtcXG4gNzI2OlxcdFxcdFxcdFxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4gNzI3OlxcdFxcdFxcdFxcdH1cXG4gNzI4OlxcdFxcdFxcdH1cXG4gNzI5OlxcdFxcdH1cXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0cmV0dXJuIDA7XFxuIDczMjpcXHR9XFxuIDczMzpcXHRcXG4gNzM0OlxcdHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MzkuNzY2NzczOTU3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3MTQ1NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBmdW5jdGlvbiBjYWxsOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgb2NmczJfY2FsY194YXR0cl9pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtIGNvZGUuIEtub3dpbmcgaXRzIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGl0cyBwdXJwb3NlIGFuZCwgcG90ZW50aWFsbHksIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJcyB0aGVyZSBhIHBhcnRpY3VsYXIgY29uY2Vybiwgb3IgYXJlIHdlIGp1c3QgcmV2aWV3aW5nIHRoZSBjb2RlIGluIGRldGFpbD8gTGV0IG1lIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHdoZXJlIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIGNhbGxlZCBmcm9tLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gZ3JlcCwgY3Njb3BlLCBvciBwb3NzaWJseSBhIG1vcmUgYWR2YW5jZWQgY29kZSBuYXZpZ2F0aW9uIHRvb2wsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2UgLSB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBjYWxsLiBBcyBhbiBleHBlcnQsIEknbSBleHBlY3Rpbmcgc29tZSBzcGVjaWZpYyBwYXR0ZXJucy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBpbiwgdGhlIGNvbnRleHQgb2YgdGhlIGluaXRpYWxpemF0aW9uLCBhbmQgaG93IHRoZSByZXR1cm4gdmFsdWUgKGlmIGFueSkgaXMgYmVpbmcgdXNlZC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgc2V0dXAsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBkeW5hbWljIGFsbG9jYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nPyBJIHdpbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgY2hlY2tpbmcgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHZhbHVlLCBiZWNhdXNlIHRoYXQgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN5c3RlbS4gSSBhbHNvIHdpbGwgd2FudCB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gVGhpcyBjb3VsZCB0ZWxsIG1lIGFib3V0IGFueSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBvciB3aGV0aGVyIHRoZXJlIG1pZ2h0IGJlIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgZnVydGhlciBzY3J1dGlueS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6NDIuMDM4MjMyMjg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyNjc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzM4LVxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbmZzL29jZnMyL25hbWVpLmM6MzM5OlxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuZnMvb2NmczIvbmFtZWkuYy0zNDAtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcXHUwMDI2d2FudF9tZXRhLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MDA9aW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjM3LVxcbmZzL29jZnMyL3hhdHRyLmM6NjM4OmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTYzOS1cXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9NjE9c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcXG5mcy9vY2ZzMi94YXR0ci5oOjYyOmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG5mcy9vY2ZzMi94YXR0ci5oLTYzLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0Nzo0Mi4wODc2NjQ5NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ3MTE2NzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGZzL29jZnMyL3hhdHRyLmMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSB0aGUgYFdvcnRoRnV6emluZ2AgZGVjaXNpb24uIEkgaGF2ZSB0aGUgcnVsZXMgaW4gZnJvbnQgb2YgbWUsIHNvIGxldCdzIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZW0uIFJ1bGUgbnVtYmVyIHR3byBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBvbmx5IGlmIGFsbCB0aGUgbW9kaWZpZWQgY29kZSBmYWxscyAqc3RyaWN0bHkqIGludG8gb25lIG9mIHRoZSBzcGVjaWZpZWQgbmVnYXRpdmUgY3JpdGVyaWEuIFRoZSB0aGlyZCBydWxlIHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgaXQgdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLlxuXG5Ob3csIG15IHBhdGNoIHRvdWNoZXMgQyBleGVjdXRhYmxlIGNvZGUgc3BlY2lmaWNhbGx5IGluIGBmcy9vY2ZzMi94YXR0ci5jYC4gVGhpcyBpcyBhbiBpbi10cmVlIGZpbGVzeXN0ZW0gZHJpdmVyLCBhIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgYW5kIGl0J3MgcmVhY2hhYmxlIHZpYSBhIGxvb3AgZGV2aWNlIG9yIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gRXZlbiB0aG91Z2ggdGhlIHBhdGNoIHNlZW1zIG1pbm9yLCBqdXN0IHJlbW92aW5nIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZSBgcmV0YCwgSSBuZWVkIHRvIGJlIGNhcmVmdWwsIGFuZCB0aGUgcnVsZXMgaGlnaGxpZ2h0IHRoaXMuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhdXRpb24gYWdhaW5zdCBibGluZGx5IHRydXN0aW5nIGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZy5cIiBUaGV5IHNheSBpZiAqYW55KiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIEkgKm11c3QqIGZ1enogaXQuXG5cblRoaXMgY29kZSBpbiBgZnMvb2NmczJgIGRvZXNuJ3QgZmFsbCBpbnRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSDigJMgZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgbG9nZ2luZywgYnVpbGQgc3lzdGVtIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCB0ZWFyZG93biBjYWxsYmFja3MsIG9yIGFyY2gtc3BlY2lmaWMgY29kZSDigJMgc28gYmFzZWQgb24gdGhlIHJ1bGVzLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3cgdGhhdCBJJ3ZlIGRlY2lkZWQgaXQncyB3b3J0aCBmdXp6aW5nLCBJIHNob3VsZCBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgdG8gZm9jdXMgb24uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEkgdGhpbmsgSSBoYXZlIHRvIGlkZW50aWZ5IGFueSBvdGhlciBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcy4gYG9jZnMyX21rbm9kYCBpcyBhIGNhbGxlciBmdW5jdGlvbiBmcm9tIGBmcy9vY2ZzMi9uYW1laS5jYCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6NDcuNTU4ODQwMTU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk2MjY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzM4LVxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbmZzL29jZnMyL25hbWVpLmM6MzM5OlxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuZnMvb2NmczIvbmFtZWkuYy0zNDAtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcXHUwMDI2d2FudF9tZXRhLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MDA9aW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjM3LVxcbmZzL29jZnMyL3hhdHRyLmM6NjM4OmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTYzOS1cXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9NjE9c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcXG5mcy9vY2ZzMi94YXR0ci5oOjYyOmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG5mcy9vY2ZzMi94YXR0ci5oLTYzLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0Nzo0Ny42MDk4MDc5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM3NjU3OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBPQ0ZTMiBYYXR0ciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIEkga25vdyBpcyBpbiBgZnMvb2NmczIveGF0dHIuY2AuIEknbSBhbHNvIGdvaW5nIHRvIGtlZXAgYW4gZXllIG9uIGBvY2ZzMl9ta25vZGAsIHNpbmNlIHRoYXQncyBhIGtleSBlbnRyeSBwb2ludCBmb3IgdGhpbmdzIGxpa2UgYG1rZGlyYCwgYGNyZWF0ZWAsIGBzeW1saW5rYCwgYW5kIGBta25vZGAgb3BlcmF0aW9ucyB3aXRoaW4gT0NGUzIsIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nLiBJdCBtYWtlcyBzZW5zZSB0byBpbmNsdWRlIGl0LCBldmVuIGlmIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGFwcGVhcnMgdG8gYmUgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaGVyZS5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgYEVuYWJsZUNvbmZpZ3NgIGFuZCB0aGVuIGBmcy9vY2ZzMi9NYWtlZmlsZWAgdG8gZXN0YWJsaXNoIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0Nzo0OS44NDc0NjgxNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjY2ZsYWdzLXkgOj0gLUkkKHNyYylcXG4gICAzOlxcdFxcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSBcXHRcXFxcXFxuICAgNTpcXHRcXHRvY2ZzMi5vXFx0XFx0XFx0XFxcXFxcbiAgIDY6XFx0XFx0b2NmczJfc3RhY2tnbHVlLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0b2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICs9IG9jZnMyX3N0YWNrX28yY2Iub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX09DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSKSArPSBvY2ZzMl9zdGFja191c2VyLm9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0b2NmczItb2JqcyA6PSBcXFxcXFxuICAxMjpcXHRcXHRhbGxvYy5vIFxcdFxcdFxcXFxcXG4gIDEzOlxcdFxcdGFvcHMubyBcXHRcXHRcXHRcXFxcXFxuICAxNDpcXHRcXHRibG9ja2NoZWNrLm9cXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRidWZmZXJfaGVhZF9pby5vXFx0XFxcXFxcbiAgMTY6XFx0XFx0ZGNhY2hlLm8gXFx0XFx0XFxcXFxcbiAgMTc6XFx0XFx0ZGlyLm8gXFx0XFx0XFx0XFxcXFxcbiAgMTg6XFx0XFx0ZGxtZ2x1ZS5vIFxcdFxcdFxcXFxcXG4gIDE5OlxcdFxcdGV4cG9ydC5vIFxcdFxcdFxcXFxcXG4gIDIwOlxcdFxcdGV4dGVudF9tYXAubyBcXHRcXHRcXFxcXFxuICAyMTpcXHRcXHRmaWxlLm8gXFx0XFx0XFx0XFxcXFxcbiAgMjI6XFx0XFx0aGVhcnRiZWF0Lm8gXFx0XFx0XFxcXFxcbiAgMjM6XFx0XFx0aW5vZGUubyBcXHRcXHRcXFxcXFxuICAyNDpcXHRcXHRpb2N0bC5vIFxcdFxcdFxcXFxcXG4gIDI1OlxcdFxcdGpvdXJuYWwubyBcXHRcXHRcXFxcXFxuICAyNjpcXHRcXHRsb2NhbGFsbG9jLm8gXFx0XFx0XFxcXFxcbiAgMjc6XFx0XFx0bG9ja3Mub1xcdFxcdFxcdFxcXFxcXG4gIDI4OlxcdFxcdG1tYXAubyBcXHRcXHRcXHRcXFxcXFxuICAyOTpcXHRcXHRuYW1laS5vIFxcdFxcdFxcXFxcXG4gIDMwOlxcdFxcdHJlZmNvdW50dHJlZS5vXFx0XFx0XFxcXFxcbiAgMzE6XFx0XFx0cmVzZXJ2YXRpb25zLm9cXHRcXHRcXFxcXFxuICAzMjpcXHRcXHRtb3ZlX2V4dGVudHMub1xcdFxcdFxcXFxcXG4gIDMzOlxcdFxcdHJlc2l6ZS5vXFx0XFx0XFxcXFxcbiAgMzQ6XFx0XFx0c2xvdF9tYXAubyBcXHRcXHRcXFxcXFxuICAzNTpcXHRcXHRzdWJhbGxvYy5vIFxcdFxcdFxcXFxcXG4gIDM2OlxcdFxcdHN1cGVyLm8gXFx0XFx0XFxcXFxcbiAgMzc6XFx0XFx0c3ltbGluay5vIFxcdFxcdFxcXFxcXG4gIDM4OlxcdFxcdHN5c2ZpbGUubyBcXHRcXHRcXFxcXFxuICAzOTpcXHRcXHR1cHRvZGF0ZS5vXFx0XFx0XFxcXFxcbiAgNDA6XFx0XFx0cXVvdGFfbG9jYWwub1xcdFxcdFxcXFxcXG4gIDQxOlxcdFxcdHF1b3RhX2dsb2JhbC5vXFx0XFx0XFxcXFxcbiAgNDI6XFx0XFx0eGF0dHIub1xcdFxcdFxcdFxcXFxcXG4gIDQzOlxcdFxcdGFjbC5vXFx0XFxcXFxcbiAgNDQ6XFx0XFx0ZmlsZWNoZWNrLm9cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0b2NmczJfc3RhY2tnbHVlLW9ianMgOj0gc3RhY2tnbHVlLm9cXG4gIDQ3OlxcdG9jZnMyX3N0YWNrX28yY2Itb2JqcyA6PSBzdGFja19vMmNiLm9cXG4gIDQ4OlxcdG9jZnMyX3N0YWNrX3VzZXItb2JqcyA6PSBzdGFja191c2VyLm9cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0b2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSBkbG1mcy9cXG4gIDUxOlxcdCMgY2x1c3Rlci8gaXMgYWx3YXlzIG5lZWRlZCB3aGVuIE9DRlMyX0ZTIGZvciBtYXNrbG9nIHN1cHBvcnRcXG4gIDUyOlxcdG9iai0kKENPTkZJR19PQ0ZTMl9GUykgKz0gY2x1c3Rlci9cXG4gIDUzOlxcdG9iai0kKENPTkZJR19PQ0ZTMl9GU19PMkNCKSArPSBkbG0vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjQ5Ljg0NzU0MzAxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTY3NDc2MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE9DRlMyIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYENPTkZJR19PQ0ZTMl9GU2AgaXMgdGhlIGtleS4gVGhhdCBidWlsZHMgYG9jZnMyLm9gLCBhbmQgaW1wb3J0YW50bHksIHRoYXQgaW5jbHVkZXMgYHhhdHRyLm9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdG8gc2VlIGlmIEkgbmVlZCB0byBhZGp1c3QgYW55IGtlcm5lbCBvcHRpb25zIGZvciBteSBzcGVjaWZpYyBzZXR1cC4gTGV0J3Mgc2VlIHdoYXQgYGZzL29jZnMyL0tjb25maWdgIHRlbGxzIG1lLlxuXG5SaWdodCwgYENPTkZJR19PQ0ZTMl9GU2AgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTYC4gVGhhdCdzIHJlYXNvbmFibGU7IG5ldHdvcmsgZnVuY3Rpb25hbGl0eSwgc3lzdGVtIGZpbGUgc3VwcG9ydCwgYW5kIGNvbmZpZ2ZzLCBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCB0aGVuIHRoZXJlIGFyZSBhIGJ1bmNoIG9mIFwic2VsZWN0XCIgc3RhdGVtZW50czogYEJVRkZFUl9IRUFEYCwgYEpCRDJgLCBgQ1JDMzJgLCBgUVVPVEFgLCBgUVVPVEFfVFJFRWAsIGBGU19QT1NJWF9BQ0xgLCBhbmQgYExFR0FDWV9ESVJFQ1RfSU9gLiBPa2F5LCB0aGVzZSBhcmUgYWxsIHN1cHBvcnRpbmcgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGF0IGFyZSBiZWluZyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBJIGNob29zZSBPQ0ZTMi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRob3NlIGZvciBsYXRlciwgbWF5YmUgdGhleSBhcmUgZ29vZCBkZWZhdWx0cy5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYE9DRlMyX0ZTYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYElORVRgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBhcmUgcHJldHR5IHN0YW5kYXJkIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlYWwgd2l0aCB0aG9zZS4gU28sIG15IGNvcmUgbmVlZHMgYXJlIHJlYWxseSBqdXN0IGBPQ0ZTMl9GU2AuIEknbGwgY3Jvc3MgcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgbm90ZXMuIExldCdzIGRvIGEgcXVpY2sgY2hlY2ssIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBjaGVja2luZyBmb3IgYW55IGtlcm5lbCBjb25maWcgZmxhZ3MgdGhhdCAqYXJlbid0KiBwcmVmaXhlZCB3aXRoIGBDT05GSUdfYC4gSnVzdCBsb29raW5nIGF0IHRoZSBwcmltYXJ5IG9uZXMuXG5cbkkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyByZWxhdGVkIHRvIEFDTHMgd2l0aGluIE9DRlMyIGl0c2VsZi4gSSdsbCBzZWFyY2ggZm9yIEFDTC1yZWxhdGVkIGNvbmZpZ3MgZGlyZWN0bHkgd2l0aGluIGBmcy9vY2ZzMmAuIEkgaGF2ZSBhIGZlZWxpbmcgYE9DRlMyX0ZTX1BPU0lYX0FDTGAgaXMgd2hhdCBJIGFtIGxvb2tpbmcgZm9yIGJ1dCBhIHF1aWNrIGdyZXAgaXMgcHJvYmFibHkgdGhlIGJlc3Qgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjU0LjAxNTAyMjI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjUxNTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBQ0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy05LVxcdHNlbGVjdCBRVU9UQV9UUkVFXFxuZnMvb2NmczIvS2NvbmZpZzoxMDpcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbi0tXFxuZnMvb2NmczIvYWNsLmM9MzQ9c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2FjbF9mcm9tX3hhdHRyKGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTU1LVxcdFxcdHN3aXRjaChhY2wtXFx1MDAzZWFfZW50cmllc1tuXS5lX3RhZykge1xcbmZzL29jZnMyL2FjbC5jOjU2OlxcdFxcdGNhc2UgQUNMX1VTRVI6XFxuZnMvb2NmczIvYWNsLmMtNTctXFx0XFx0XFx0YWNsLVxcdTAwM2VhX2VudHJpZXNbbl0uZV91aWQgPVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtNjAtXFx0XFx0XFx0YnJlYWs7XFxuZnMvb2NmczIvYWNsLmM6NjE6XFx0XFx0Y2FzZSBBQ0xfR1JPVVA6XFxuZnMvb2NmczIvYWNsLmMtNjItXFx0XFx0XFx0YWNsLVxcdTAwM2VhX2VudHJpZXNbbl0uZV9naWQgPVxcbi0tXFxuZnMvb2NmczIvYWNsLmM9Nzg9c3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTk0LVxcdFxcdHN3aXRjaChhY2wtXFx1MDAzZWFfZW50cmllc1tuXS5lX3RhZykge1xcbmZzL29jZnMyL2FjbC5jOjk1OlxcdFxcdGNhc2UgQUNMX1VTRVI6XFxuZnMvb2NmczIvYWNsLmMtOTYtXFx0XFx0XFx0ZW50cnktXFx1MDAzZWVfaWQgPSBjcHVfdG9fbGUzMihcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTk5LVxcdFxcdFxcdGJyZWFrO1xcbmZzL29jZnMyL2FjbC5jOjEwMDpcXHRcXHRjYXNlIEFDTF9HUk9VUDpcXG5mcy9vY2ZzMi9hY2wuYy0xMDEtXFx0XFx0XFx0ZW50cnktXFx1MDAzZWVfaWQgPSBjcHVfdG9fbGUzMihcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTEwNS1cXHRcXHRkZWZhdWx0OlxcbmZzL29jZnMyL2FjbC5jOjEwNjpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlZV9pZCA9IGNwdV90b19sZTMyKEFDTF9VTkRFRklORURfSUQpO1xcbmZzL29jZnMyL2FjbC5jLTEwNy1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTExMz1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0xMjEtXFx0c3dpdGNoICh0eXBlKSB7XFxuZnMvb2NmczIvYWNsLmM6MTIyOlxcdGNhc2UgQUNMX1RZUEVfQUNDRVNTOlxcbmZzL29jZnMyL2FjbC5jOjEyMzpcXHRcXHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUztcXG5mcy9vY2ZzMi9hY2wuYy0xMjQtXFx0XFx0YnJlYWs7XFxuZnMvb2NmczIvYWNsLmM6MTI1OlxcdGNhc2UgQUNMX1RZUEVfREVGQVVMVDpcXG5mcy9vY2ZzMi9hY2wuYzoxMjY6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL2FjbC5jLTEyNy1cXHRcXHRicmVhaztcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTE1OD1zdGF0aWMgaW50IG9jZnMyX2FjbF9zZXRfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMjExLS8qXFxuZnMvb2NmczIvYWNsLmM6MjEyOiAqIFNldCB0aGUgYWNjZXNzIG9yIGRlZmF1bHQgQUNMIG9mIGFuIGlub2RlLlxcbmZzL29jZnMyL2FjbC5jLTIxMy0gKi9cXG5mcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yMzAtXFx0c3dpdGNoICh0eXBlKSB7XFxuZnMvb2NmczIvYWNsLmM6MjMxOlxcdGNhc2UgQUNMX1RZUEVfQUNDRVNTOlxcbmZzL29jZnMyL2FjbC5jOjIzMjpcXHRcXHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUztcXG5mcy9vY2ZzMi9hY2wuYy0yMzMtXFx0XFx0YnJlYWs7XFxuZnMvb2NmczIvYWNsLmM6MjM0OlxcdGNhc2UgQUNMX1RZUEVfREVGQVVMVDpcXG5mcy9vY2ZzMi9hY2wuYzoyMzU6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL2FjbC5jLTIzNi1cXHRcXHRpZiAoIVNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0yNjM9aW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yNzMtXFx0XFx0cmV0dXJuIGhhZF9sb2NrO1xcbmZzL29jZnMyL2FjbC5jOjI3NDpcXHRpZiAodHlwZSA9PSBBQ0xfVFlQRV9BQ0NFU1MgXFx1MDAyNlxcdTAwMjYgYWNsKSB7XFxuZnMvb2NmczIvYWNsLmMtMjc1LVxcdFxcdHVtb2RlX3QgbW9kZTtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zMDQtXFx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL29jZnMyL2FjbC5jOjMwNTpcXHRpZiAoIShvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSlcXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0zMjE9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzI5LVxcbmZzL29jZnMyL2FjbC5jOjMzMDpcXHRpZiAoIShvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSlcXG5mcy9vY2ZzMi9hY2wuYy0zMzEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zMzMtXFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG5mcy9vY2ZzMi9hY2wuYzozMzQ6XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYmgpO1xcbmZzL29jZnMyL2FjbC5jLTMzNS1cXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTM0MC1cXHRcXHRyZXR1cm4gcmV0O1xcbmZzL29jZnMyL2FjbC5jOjM0MTpcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBBQ0xfVFlQRV9BQ0NFU1MsXFxuZnMvb2NmczIvYWNsLmMtMzQyLVxcdFxcdFxcdCAgICBhY2wsIE5VTEwsIE5VTEwpO1xcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzQ3LS8qXFxuZnMvb2NmczIvYWNsLmM6MzQ4OiAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxcbmZzL29jZnMyL2FjbC5jLTM0OS0gKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0zNTk9aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zNzItXFxuZnMvb2NmczIvYWNsLmM6MzczOlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIvYWNsLmMtMzc0LVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbmZzL29jZnMyL2FjbC5jLTM3NS1cXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPVxcbmZzL29jZnMyL2FjbC5jOjM3NjpcXHRcXHRcXHRvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsIGRpcl9iaCk7XFxuZnMvb2NmczIvYWNsLmMtMzc3LVxcdFxcdHVwX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTQxND1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTQyNS1cXG5mcy9vY2ZzMi9hY2wuYzo0MjY6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi9hY2wuYy00MjctXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKSB7XFxuZnMvb2NmczIvYWNsLmMtNDI4LVxcdFxcdFxcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXFxuZnMvb2NmczIvYWNsLmM6NDI5OlxcdFxcdFxcdFxcdFxcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxcbmZzL29jZnMyL2FjbC5jLTQzMC1cXHRcXHRcXHRcXHRcXHQgICAgc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtNDQyLVxcbmZzL29jZnMyL2FjbC5jOjQ0MzpcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbmZzL29jZnMyL2FjbC5jLTQ0NC1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWFjbCkge1xcbmZzL29jZnMyL2FjbC5jLTQ0NS1cXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxcbmZzL29jZnMyL2FjbC5jOjQ0NjpcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cXHUwMDNlYWNsLFxcbmZzL29jZnMyL2FjbC5jLTQ0Ny1cXHRcXHRcXHRcXHRcXHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuaC03LVxcbmZzL29jZnMyL2FjbC5oOjg6I2lmbmRlZiBPQ0ZTMl9BQ0xfSFxcbmZzL29jZnMyL2FjbC5oOjk6I2RlZmluZSBPQ0ZTMl9BQ0xfSFxcbmZzL29jZnMyL2FjbC5oLTEwLVxcbi0tXFxuZnMvb2NmczIvYWNsLmg9MzM9aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuaC0zOC1cXG5mcy9vY2ZzMi9hY2wuaDozOTojZW5kaWYgLyogT0NGUzJfQUNMX0ggKi9cXG4tLVxcbmZzL29jZnMyL29jZnMyLmg9MjU3PWVudW0gb2NmczJfbW91bnRfb3B0aW9uc1xcbi0tXFxuZnMvb2NmczIvb2NmczIuaC0yNjYtXFx0T0NGUzJfTU9VTlRfSU5PREU2NCA9IDEgXFx1MDAzY1xcdTAwM2MgNyxcXHQvKiBBbGxvdyBpbm9kZSBudW1iZXJzIFxcdTAwM2UgMl4zMiAqL1xcbmZzL29jZnMyL29jZnMyLmg6MjY3OlxcdE9DRlMyX01PVU5UX1BPU0lYX0FDTCA9IDEgXFx1MDAzY1xcdTAwM2MgOCxcXHQvKiBGb3JjZSBQT1NJWCBhY2Nlc3MgY29udHJvbCBsaXN0cyAqL1xcbmZzL29jZnMyL29jZnMyLmg6MjY4OlxcdE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTCA9IDEgXFx1MDAzY1xcdTAwM2MgOSxcXHQvKiBEaXNhYmxlIFBPU0lYIGFjY2Vzc1xcbmZzL29jZnMyL29jZnMyLmgtMjY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnRyb2wgbGlzdHMgKi9cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9NjA3PXN0YXRpYyBpbnQgb2NmczJfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy03MTYtXFxuZnMvb2NmczIvc3VwZXIuYzo3MTc6XFx0XFx0c2ItXFx1MDAzZXNfZmxhZ3MgPSAoc2ItXFx1MDAzZXNfZmxhZ3MgXFx1MDAyNiB+U0JfUE9TSVhBQ0wpIHxcXG5mcy9vY2ZzMi9zdXBlci5jOjcxODpcXHRcXHRcXHQoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID9cXG5mcy9vY2ZzMi9zdXBlci5jOjcxOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRTQl9QT1NJWEFDTCA6IDApO1xcbmZzL29jZnMyL3N1cGVyLmMtNzIwLVxcdH1cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9OTczPXN0YXRpYyBpbnQgb2NmczJfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjMtXFxuZnMvb2NmczIvc3VwZXIuYzoxMDI0OlxcdHNiLVxcdTAwM2VzX2ZsYWdzID0gKHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgfihTQl9QT1NJWEFDTCB8IFNCX05PU0VDKSkgfFxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcXHRcXHQoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID8gU0JfUE9TSVhBQ0wgOiAwKTtcXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjYtXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTEyMzI9c3RhdGljIGludCBvY2ZzMl9jaGVja19zZXRfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVxcdH1cXG5mcy9vY2ZzMi9zdXBlci5jOjEyNjE6XFx0aWYgKG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcXHUwMDI2XFx1MDAyNlxcbmZzL29jZnMyL3N1cGVyLmMtMTI2Mi1cXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xcbmZzL29jZnMyL3N1cGVyLmM6MTI2MzpcXHRcXHRtbG9nKE1MX0VSUk9SLCBcXFwiQUNMIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBleHRlbmRlZCBhdHRyaWJ1dGVzIFxcXCJcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNjQtXFx0XFx0ICAgICBcXFwiZmVhdHVyZSBpcyBub3QgZW5hYmxlZFxcXFxuXFxcIik7XFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTEyNjYtXFx0fVxcbmZzL29jZnMyL3N1cGVyLmM6MTI2NzpcXHQvKiBObyBBQ0wgc2V0dGluZyBzcGVjaWZpZWQ/IFVzZSBYQVRUUiBmZWF0dXJlLi4uICovXFxuZnMvb2NmczIvc3VwZXIuYzoxMjY4OlxcdGlmICghKG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2IChPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgfFxcbmZzL29jZnMyL3N1cGVyLmM6MTI2OTpcXHRcXHRcXHRcXHQgICAgT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMKSkpIHtcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNzAtXFx0XFx0aWYgKE9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSlcXG5mcy9vY2ZzMi9zdXBlci5jOjEyNzE6XFx0XFx0XFx0b3B0aW9ucy1cXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNzItXFx0XFx0ZWxzZVxcbmZzL29jZnMyL3N1cGVyLmM6MTI3MzpcXHRcXHRcXHRvcHRpb25zLVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmMtMTI3NC1cXHR9XFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTEyNzg9c3RhdGljIGludCBvY2ZzMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMzg0LVxcdFxcdGlmIChyZXN1bHQubmVnYXRlZCkge1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4NTpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4NjpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgXFx1MDAyNj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEzODctXFx0XFx0fSBlbHNlIHtcXG5mcy9vY2ZzMi9zdXBlci5jOjEzODg6XFx0XFx0XFx0bW9wdC1cXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jOjEzODk6XFx0XFx0XFx0bW9wdC1cXHUwMDNlbW91bnRfb3B0IFxcdTAwMjY9IH5PQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XFxuZnMvb2NmczIvc3VwZXIuYy0xMzkwLVxcdFxcdH1cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTQxNj1zdGF0aWMgaW50IG9jZnMyX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODQtXFxuZnMvb2NmczIvc3VwZXIuYzoxNDg1OlxcdGlmIChvcHRzIFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKVxcbmZzL29jZnMyL3N1cGVyLmMtMTQ4Ni1cXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIsYWNsXFxcIik7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBvY2ZzMl94YXR0cl9oYW5kbGVyX21hcFtPQ0ZTMl9YQVRUUl9NQVhdID0ge1xcbmZzL29jZnMyL3hhdHRyLmMtMTAyLVxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXVxcdFxcdD0gXFx1MDAyNm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlcixcXG5mcy9vY2ZzMi94YXR0ci5jOjEwMzpcXHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU11cXHQ9IFxcdTAwMjZub3BfcG9zaXhfYWNsX2FjY2VzcyxcXG5mcy9vY2ZzMi94YXR0ci5jOjEwNDpcXHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFRdXFx0PSBcXHUwMDI2bm9wX3Bvc2l4X2FjbF9kZWZhdWx0LFxcbmZzL29jZnMyL3hhdHRyLmMtMTA1LVxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVEXVxcdFxcdD0gXFx1MDAyNm9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NjM4PWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjQ5LVxcbmZzL29jZnMyL3hhdHRyLmM6NjUwOlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIveGF0dHIuYy02NTEtXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDEtXFx0fVxcbmZzL29jZnMyL3hhdHRyLmM6NzAyOlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIveGF0dHIuYy03MDMtXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz05MTI9c3RhdGljIGludCBvY2ZzMl94YXR0cl9saXN0X2VudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTkyNy1cXG5mcy9vY2ZzMi94YXR0ci5jOjkyODpcXHRjYXNlIE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M6XFxuZnMvb2NmczIveGF0dHIuYzo5Mjk6XFx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDpcXG5mcy9vY2ZzMi94YXR0ci5jOjkzMDpcXHRcXHRpZiAoIShzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX1BPU0lYQUNMKSlcXG5mcy9vY2ZzMi94YXR0ci5jLTkzMS1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9MzU1NT1zdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy0zNjkxLS8qXFxuZnMvb2NmczIveGF0dHIuYzozNjkyOiAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlXFxuZnMvb2NmczIveGF0dHIuYy0zNjkzLSAqIHRoYXQgaXMgc3RpbGwgdW5wdWJsaXNoZWQsIHVuaGFzaGVkLCBhbmQgdW5hdHRhY2hlZCB0byBhIGRlbnRyeS5cXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NzM2Nz1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfbm9fc2VjdXJpdHkoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSlcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzM3MS1cXHRyZXR1cm4gdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSBcXHUwMDI2XFx1MDAyNlxcbmZzL29jZnMyL3hhdHRyLmM6NzM3MjpcXHQgICAgICAgdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTIFxcdTAwMjZcXHUwMDI2XFxuZnMvb2NmczIveGF0dHIuYzo3MzczOlxcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL3hhdHRyLmMtNzM3NC19XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTE0PWVudW0gb2NmczJfeGF0dHJfdHlwZSB7XFxuZnMvb2NmczIveGF0dHIuaC0xNS1cXHRPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSID0gMSxcXG5mcy9vY2ZzMi94YXR0ci5oOjE2OlxcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MsXFxuZnMvb2NmczIveGF0dHIuaDoxNzpcXHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcXG5mcy9vY2ZzMi94YXR0ci5oLTE4LVxcdE9DRlMyX1hBVFRSX0lOREVYX1RSVVNURUQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjU0LjA2NzU0Mzg3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjQwNTc1OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmFsaXppbmcgdGhlIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCB0aW1lIHRvIHdyYXAgdGhpcyB1cC4gSSBuZWVkIHRvIGRvY3VtZW50IHRoZSBlc3NlbnRpYWwgcGFyYW1ldGVycyBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIGNvZGUuIEZpcnN0LCB0aGUgb2J2aW91czogYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuIFRoZSBjaGFuZ2VzIEknbSBmb2N1c2luZyBvbiDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiBgb2NmczJfY2FsY194YXR0cl9pbml0YCBhbmQgYG9jZnMyX21rbm9kYCDigJMgYXJlIHRoZSBrZXkgcG9pbnRzIHRvIGhpdC4gVGhvc2UgYXJlIGdvaW5nIHN0cmFpZ2h0IGludG8gYEZvY3VzU3ltYm9sc2AuIEFuZCBuYXR1cmFsbHksIHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMsIGBFbmFibGVDb25maWdzYCBuZWVkcyB0byBpbmNsdWRlIGBPQ0ZTMl9GU2AuXG5cbkNydWNpYWxseSwgSSBuZWVkIHRvIG1ha2UgdGhlIHJlYXNvbmluZyBjcnlzdGFsIGNsZWFyLiBUaGlzIHNldCBvZiBtb2RpZmljYXRpb25zIGluIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGRpcmVjdGx5IGltcGFjdHMgcmVhY2hhYmxlIGtlcm5lbCBmaWxlc3lzdGVtIGNvZGUsIGFuZCBiZWNhdXNlIG9mIHRoaXMsIGZ1enppbmcgdW5kZXIgYE9DRlMyX0ZTYCBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gVGhhdCBjb25jaXNlbHkgZXhwbGFpbnMgdGhlIG5lZWQgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gTm93LCBJIGp1c3QgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHdlIGNhbiBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUwMiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDg6MDEuNzA4MTIzODI5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMxMDQ0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl9ta25vZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgQyBjb2RlIGluIGZzL29jZnMyL3hhdHRyLmMgYnkgY2xlYW5pbmcgdXAgcmV0dXJuIHZhbHVlcyBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKSwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbi9ta25vZCBpbiBPQ0ZTMi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggT0NGUzIgc3VwcG9ydCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl9ta25vZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgQyBjb2RlIGluIGZzL29jZnMyL3hhdHRyLmMgYnkgY2xlYW5pbmcgdXAgcmV0dXJuIHZhbHVlcyBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKSwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbi9ta25vZCBpbiBPQ0ZTMi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggT0NGUzIgc3VwcG9ydCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0ODowMS43OTEyMzgxOTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzY4NDk1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0ODowMS43OTE4MjUxMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MjM2MjU4MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHRyaXZpYWwgY29kZSBjbGVhbnVwIGluIGZzL29jZnMyL3hhdHRyLmMgcmVtb3ZpbmcgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlICdyZXQnIGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNTQ3MjFmNDY0M2MzNWZjMDE3OGQyNjA4ZmE3ZDJlZjg5OGVkNjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNzo0NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCAzNWJjYmIwZmY2MDdiLi5hYjNiNjQ1OTgzYzk2IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuKysrIGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTY0MCw3ICs2NDAsNiBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbiBcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuLVx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbiBcdGludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzO1xuIFxuQEAgLTY2Miw3ICs2NjEsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHR9XG4gXG4gXHRpZiAoIShzX3NpemUgKyBhX3NpemUpKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpc1xuQEAgLTcyOSw3ICs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDg6MDEuNzkxODI2NTQ2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NDYzMDczMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYYXR0ciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgYW5kIGl0cyBpbW1lZGlhdGUgY29udGV4dC4gVGhpcyBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpYCBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBHaXZlbiB0aGF0LCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoYXQgZmlsZSBhbmQsIHNwZWNpZmljYWxseSwgSSdsbCB6ZXJvIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDY0MC4gVGhhdCdzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBnaXZlbiB0aGUgZnVuY3Rpb24gYW5kIGZpbGUgdGhlIHBhdGNoIHBvaW50cyB0by4gV2UgY2FuIGdldCBhIHF1aWNrIGltcHJlc3Npb24gb2Ygd2hhdCB0aGlzIGNvZGUgaXMgYXR0ZW1wdGluZyB0byBjaGFuZ2UgYW5kIGFjY29tcGxpc2ggaGVyZS4gRnJvbSB0aGVyZSwgd2UgY2FuIGFuYWx5emUgaG93IHRoZSB4YXR0ciBtb2RpZmljYXRpb25zIGFyZSBpbnRlbmRlZCB0byBiZWhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ4OjA2LjQzODEzNTk4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIveGF0dHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzUsXG4gIFwiTGluZUNvdW50XCI6IDEwNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdFxcdHJldHVybiByZXQ7XFxuIDYzNjpcXHR9XFxuIDYzNzpcXHRcXG4gNjM4OlxcdGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG4gNjM5OlxcdFxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcbiA2NDA6XFx0XFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcXG4gNjQxOlxcdFxcdFxcdFxcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSlcXG4gNjQyOlxcdHtcXG4gNjQzOlxcdFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG4gNjQ0OlxcdFxcdGludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzO1xcbiA2NDU6XFx0XFxuIDY0NjpcXHRcXHRpZiAoc2ktXFx1MDAzZWVuYWJsZSlcXG4gNjQ3OlxcdFxcdFxcdHNfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZShzdHJsZW4oc2ktXFx1MDAzZW5hbWUpLFxcbiA2NDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gNjQ5OlxcdFxcbiA2NTA6XFx0XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4gNjUxOlxcdFxcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIobW9kZSkpIHtcXG4gNjUyOlxcdFxcdFxcdFxcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4gNjUzOlxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbiA2NTQ6XFx0XFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gNjU1OlxcdFxcdFxcdH1cXG4gNjU2OlxcdFxcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbiA2NTc6XFx0XFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4gNjU4OlxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbiA2NTk6XFx0XFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gNjYwOlxcdFxcdFxcdH1cXG4gNjYxOlxcdFxcdH1cXG4gNjYyOlxcdFxcbiA2NjM6XFx0XFx0aWYgKCEoc19zaXplICsgYV9zaXplKSlcXG4gNjY0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2NjU6XFx0XFxuIDY2NjpcXHRcXHQvKlxcbiA2Njc6XFx0XFx0ICogVGhlIG1heCBzcGFjZSBvZiBzZWN1cml0eSB4YXR0ciB0YWtlbiBpbmxpbmUgaXNcXG4gNjY4OlxcdFxcdCAqIDI1NihuYW1lKSArIDgwKHZhbHVlKSArIDE2KGVudHJ5KSA9IDM1MiBieXRlcyxcXG4gNjY5OlxcdFxcdCAqIFRoZSBtYXggc3BhY2Ugb2YgYWNsIHhhdHRyIHRha2VuIGlubGluZSBpc1xcbiA2NzA6XFx0XFx0ICogODAodmFsdWUpICsgMTYoZW50cnkpICogMihpZiBkaXJlY3RvcnkpID0gMTkyIGJ5dGVzLFxcbiA2NzE6XFx0XFx0ICogd2hlbiBibG9ja3NpemUgPSA1MTIsIG1heSByZXNlcnZlIG9uZSBtb3JlIGNsdXN0ZXIgZm9yXFxuIDY3MjpcXHRcXHQgKiB4YXR0ciBidWNrZXQsIG90aGVyd2lzZSByZXNlcnZlIG9uZSBtZXRhZGF0YSBibG9ja1xcbiA2NzM6XFx0XFx0ICogZm9yIHRoZW0gaXMgb2suXFxuIDY3NDpcXHRcXHQgKiBJZiB0aGlzIGlzIGEgbmV3IGRpcmVjdG9yeSB3aXRoIGlubGluZSBkYXRhLFxcbiA2NzU6XFx0XFx0ICogd2UgY2hvb3NlIHRvIHJlc2VydmUgdGhlIGVudGlyZSBpbmxpbmUgYXJlYSBmb3JcXG4gNjc2OlxcdFxcdCAqIGRpcmVjdG9yeSBjb250ZW50cyBhbmQgZm9yY2UgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2suXFxuIDY3NzpcXHRcXHQgKi9cXG4gNjc4OlxcdFxcdGlmIChkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUgfHxcXG4gNjc5OlxcdFxcdCAgICAoU19JU0RJUihtb2RlKSBcXHUwMDI2XFx1MDAyNiBvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB8fFxcbiA2ODA6XFx0XFx0ICAgIChzX3NpemUgKyBhX3NpemUpIFxcdTAwM2UgT0NGUzJfWEFUVFJfRlJFRV9JTl9JQk9EWSkge1xcbiA2ODE6XFx0XFx0XFx0KndhbnRfbWV0YSA9ICp3YW50X21ldGEgKyAxO1xcbiA2ODI6XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz0gT0NGUzJfWEFUVFJfQkxPQ0tfQ1JFQVRFX0NSRURJVFM7XFxuIDY4MzpcXHRcXHR9XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdGlmIChkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4gNjg2OlxcdFxcdCAgICAoc19zaXplICsgYV9zaXplKSBcXHUwMDNlIE9DRlMyX1hBVFRSX0ZSRUVfSU5fQkxPQ0soZGlyKSkge1xcbiA2ODc6XFx0XFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gMTtcXG4gNjg4OlxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGRpci1cXHUwMDNlaV9zYik7XFxuIDY4OTpcXHRcXHR9XFxuIDY5MDpcXHRcXG4gNjkxOlxcdFxcdC8qXFxuIDY5MjpcXHRcXHQgKiByZXNlcnZlIGNyZWRpdHMgYW5kIGNsdXN0ZXJzIGZvciB4YXR0cnMgd2hpY2ggaGFzIGxhcmdlIHZhbHVlXFxuIDY5MzpcXHRcXHQgKiBhbmQgaGF2ZSB0byBiZSBzZXQgb3V0c2lkZVxcbiA2OTQ6XFx0XFx0ICovXFxuIDY5NTpcXHRcXHRpZiAoc2ktXFx1MDAzZWVuYWJsZSBcXHUwMDI2XFx1MDAyNiBzaS1cXHUwMDNldmFsdWVfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4gNjk2OlxcdFxcdFxcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsXFxuIDY5NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gNjk4OlxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuIDY5OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbiA3MDA6XFx0XFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xcbiA3MDE6XFx0XFx0fVxcbiA3MDI6XFx0XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4gNzAzOlxcdFxcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIobW9kZSkpIHtcXG4gNzA0OlxcdFxcdFxcdFxcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4gNzA1OlxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbiA3MDY6XFx0XFx0XFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbiA3MDc6XFx0XFx0XFx0XFx0XFx0bmV3X2NsdXN0ZXJzID1cXG4gNzA4OlxcdFxcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsXFxuIDcwOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWNsX2xlbik7XFxuIDcxMDpcXHRcXHRcXHRcXHRcXHQqeGF0dHJfY3JlZGl0cyArPVxcbiA3MTE6XFx0XFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cXHUwMDNlaV9zYixcXG4gNzEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZXdfY2x1c3RlcnMpO1xcbiA3MTM6XFx0XFx0XFx0XFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xcbiA3MTQ6XFx0XFx0XFx0XFx0fVxcbiA3MTU6XFx0XFx0XFx0fVxcbiA3MTY6XFx0XFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlYWNsKSB7XFxuIDcxNzpcXHRcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbiA3MTg6XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuIDcxOTpcXHRcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuIDcyMDpcXHRcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPVxcbiA3MjE6XFx0XFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4gNzIyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBhY2xfbGVuKTtcXG4gNzIzOlxcdFxcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9XFxuIDcyNDpcXHRcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbiA3MjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19jbHVzdGVycyk7XFxuIDcyNjpcXHRcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIDcyNzpcXHRcXHRcXHRcXHR9XFxuIDcyODpcXHRcXHRcXHR9XFxuIDcyOTpcXHRcXHR9XFxuIDczMDpcXHRcXG4gNzMxOlxcdFxcdHJldHVybiAwO1xcbiA3MzI6XFx0fVxcbiA3MzM6XFx0XFxuIDczNDpcXHRzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2V4dGVuZF9hbGxvY2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ4OjA2LjQzODY0MjQxOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTg5NDIxODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFRyaXZpYWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRjaCBoZXJlIOKAkyBpdCByZW1vdmVzIGEgbG9jYWwsIHVudXNlZCBpbnRlZ2VyIHZhcmlhYmxlLCBgcmV0YCwgZnJvbSB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24gaW4gYGZzL29jZnMyL3hhdHRyLmNgIGFuZCByZXBsYWNlcyB0aGUgcmV0dXJuIHN0YXRlbWVudCB1c2luZyB0aGUgbm93LWRlbGV0ZWQgdmFyaWFibGUgd2l0aCBhIGRpcmVjdCByZXR1cm4gb2YgYDBgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBqdXN0IGEgY29kZSBjbGVhbnVwIGV4ZXJjaXNlOyBpdOKAmXMgYSBkaXJlY3QgcmVwbGFjZW1lbnQgb2YgcmV0dXJuaW5nIGEgdmFyaWFibGUgY29udGFpbmluZyAwIHdpdGggcmV0dXJuaW5nIDAgaXRzZWxmLiBUaGVyZSdzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlIHdoYXRzb2V2ZXIsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS5cblxuTm93LCBsZXQncyBnbyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBub3QgdG91Y2hlZC5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBEZWZpbml0ZWx5IG5vdC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbj8qKiBOb3QgaGFwcGVuaW5nLlxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgYWNjZXNzIHRvIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTmVnYXRpdmUuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBpcyBqdXN0IGEgc21hbGwgY2xlYW51cCwgdGhpcyBwYXRjaCBjbGVhcmx5ICoqZG9lcyBub3QgcmVxdWlyZSBLTVNBTioqLlxuXG5UbyBzb2xpZGlmeSB0aGUgcmVhc29uaW5nLCBsZXTigJlzIHJldmlzaXQgdGhlIGNvcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIEtBU0FOIGFuZCBzdGFuZGFyZCB0b29scyBhcmUgZm9yIHRoZSB1c3VhbCBtZW1vcnkgZXJyb3JzIOKAkyBVc2UtQWZ0ZXItRnJlZSwgT3V0LW9mLUJvdW5kcywgdGhhdCBraW5kIG9mIHRoaW5nLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSB0YWlsb3JlZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MuXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzICpub3RoaW5nKiB0aGF0IGNvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW52b2x2ZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBpbnRlcmFjdCB3aXRoIGJ1ZmZlcnMsIG9yIG1ha2UgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpc24ndCBuZWVkZWQuXG5cbk9rYXksIHRoYXQncyBldmVyeXRoaW5nLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzMSwiT3V0cHV0VG9rZW5zIjoxMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0ODoxMC4wMjgwNjc5OTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgdHJpdmlhbCBjb2RlIGNsZWFudXAgaW4gZnMvb2NmczIveGF0dHIuYyByZW1vdmluZyBhbiB1bnVzZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgYW5kIHJldHVybmluZyAwIGRpcmVjdGx5IGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLiBJdCBkb2VzIG5vdCBhbHRlciBydW50aW1lIGJlaGF2aW9yLCBhbGxvY2F0ZS9hY2Nlc3MgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgdHJpdmlhbCBjb2RlIGNsZWFudXAgaW4gZnMvb2NmczIveGF0dHIuYyByZW1vdmluZyBhbiB1bnVzZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgYW5kIHJldHVybmluZyAwIGRpcmVjdGx5IGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLiBJdCBkb2VzIG5vdCBhbHRlciBydW50aW1lIGJlaGF2aW9yLCBhbGxvY2F0ZS9hY2Nlc3MgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowp4ns6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 17:43:47 +0000 UTC FinishedAt: 2026-09-07 17:48:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "bc35965f6940a9bf834d54187b6088b8eb09206d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "bc35965f6940a9bf834d54187b6088b8eb09206d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OCFS2_FS" ], "series_id": "4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "ocfs2_calc_xattr_init", "ocfs2_mknod" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX21rbm9kJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSB0cml2aWFsIGNvZGUgY2xlYW51cCBpbiBmcy9vY2ZzMi94YXR0ci5jIHJlbW92aW5nIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBDIGNvZGUgaW4gZnMvb2NmczIveGF0dHIuYyBieSBjbGVhbmluZyB1cCByZXR1cm4gdmFsdWVzIGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uL21rbm9kIGluIE9DRlMyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBPQ0ZTMiBzdXBwb3J0IGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjNTQ3MjFmNDY0M2MzNWZjMDE3OGQyNjA4ZmE3ZDJlZjg5OGVkNjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNzo0NzoyNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9vY2ZzMi94YXR0ci5jIGIvZnMvb2NmczIveGF0dHIuY1xuaW5kZXggMzViY2JiMGZmNjA3Yi4uYWIzYjY0NTk4M2M5NiAxMDA2NDRcbi0tLSBhL2ZzL29jZnMyL3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL29jZnMyL3hhdHRyLmNcbkBAIC02NDAsNyAmIzQzOzY0MCw2IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiBcdFx0XHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxuIFx0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSlcbiB7XG4tXHRpbnQgcmV0ID0gMDtcbiBcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuIFx0aW50IHNfc2l6ZSA9IDAsIGFfc2l6ZSA9IDAsIGFjbF9sZW4gPSAwLCBuZXdfY2x1c3RlcnM7XG4gXG5AQCAtNjYyLDcgJiM0Mzs2NjEsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHR9XG4gXG4gXHRpZiAoIShzX3NpemUgJiM0MzsgYV9zaXplKSlcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldHVybiAwO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBtYXggc3BhY2Ugb2Ygc2VjdXJpdHkgeGF0dHIgdGFrZW4gaW5saW5lIGlzXG5AQCAtNzI5LDcgJiM0Mzs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPQ0ZTMl9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICAgJiMzNDtvY2ZzMl9ta25vZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIEMgY29kZSBpbiBmcy9vY2ZzMi94YXR0ci5jIGJ5IGNsZWFuaW5nIHVwIHJldHVybiB2YWx1ZXMgaW4gb2NmczJfY2FsY194YXR0cl9pbml0KCksIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24vbWtub2QgaW4gT0NGUzIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIE9DRlMyIHN1cHBvcnQgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1NDcyMWY0NjQzYzM1ZmMwMTc4ZDI2MDhmYTdkMmVmODk4ZWQ2NmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE3OjQ3OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggMzViY2JiMGZmNjA3Yi4uYWIzYjY0NTk4M2M5NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5jCkBAIC02NDAsNyAmIzQzOzY0MCw2IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKIAkJCSAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsCiAJCQkgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpCiB7Ci0JaW50IHJldCA9IDA7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItJmd0O2lfc2IpOwogCWludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzOwogCkBAIC02NjIsNyAmIzQzOzY2MSw3IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKIAl9CiAKIAlpZiAoIShzX3NpemUgJiM0MzsgYV9zaXplKSkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAwOwogCiAJLyoKIAkgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpcwpAQCAtNzI5LDcgJiM0Mzs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsCiAJCX0KIAl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTk4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQgbW9kaWZpZXMgYGZzL29jZnMyL3hhdHRyLmNgLiBTcGVjaWZpY2FsbHksIGl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24uIFRoZSBwYXRjaCByZW1vdmVzIGFuIHVudXNlZCB2YXJpYWJsZSBgaW50IHJldCA9IDA7YCBhbmQgcmVwbGFjZXMgdGhlIGByZXR1cm4gcmV0O2Agd2l0aCBgcmV0dXJuIDA7YC4gU2VlbXMgc3RyYWlnaHRmb3J3YXJkLCByaWdodD8KCkJ1dCB3YWl0IGEgbWludXRlLCBpcyB0aGlzIGV2ZW4gKnJlYWNoYWJsZSogY29kZT8gV2UgbmVlZCB0byB2ZXJpZnkgdGhhdCBiZWZvcmUgd2Ugc3BlbmQgYW55IG1vcmUgdGltZS4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGNoZWNraW5nIGBmcy9vY2ZzMi94YXR0ci5jYCBpdHNlbGYgYW5kIHRoZSByZWxhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBwYXRoIHRoYXQgY291bGQgcmVhbGlzdGljYWxseSBiZSBoaXQgYW5kIGlzIHRoZXJlZm9yZSB3b3J0aCBmdXp6aW5nLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgcmV2aWV3IHRoZSBndWlkZWxpbmVzIGFnYWluLiBUaGUgZ3VpZGVsaW5lcyBhcmUgcHJldHR5IGNsZWFyLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRoZSAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGNhdGVnb3JpZXMuIE9rYXksIHNvIG5vIGRvY3VtZW50YXRpb24sIG5vIHVzZXItc3BhY2UgdG9vbHMsIG5vdCBkZWNvcmF0aXZlIGxvZ2dpbmcsIGFuZCBubyBidWlsZCBzeXN0ZW0gY2hhbmdlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IEMgbG9naWMuIEFsc28sIG5vIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZSBvciB1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMuCgpMZXQmIzM5O3Mgc2Vl4oCmIEkga25vdyB0aGF0IE9DRlMyIGlzIGEgZmlsZSBzeXN0ZW0uIERvZXMgdGhpcyBnZXQgdHJpZ2dlcmVkIHVuZGVyIHN5emthbGxlci9RRU1VPyBPQ0ZTMiBjYW4gYmUgbW91bnRlZCB1c2luZyBsb29wYmFjayBkZXZpY2VzIG9yIHRocm91Z2ggaW1hZ2UgbW91bnRpbmcgYW5kIHN5c2NhbGxzLCBzbyBpdCBpcyBwcm9iYWJseSByZWFjaGFibGUuIEkgc2hvdWxkIGNoZWNrIEtjb25maWcgZm9yIE9DRlMyIHRvIGNvbmZpcm0uIE9rYXksIGFzc3VtaW5nIGl0IGlzIGVuYWJsZWQsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcsIHRoaXMgaXMgd29ydGggZnV6emluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0NGUzJfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXG5mcy9vY2ZzMi9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4tLVxuZnMvb2NmczIvS2NvbmZpZy0yNy1cbmZzL29jZnMyL0tjb25maWc6Mjg6Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbmZzL29jZnMyL0tjb25maWctMjktXHR0cmlzdGF0ZSBcJiMzNDtPMkNCIEtlcm5lbHNwYWNlIENsdXN0ZXJpbmdcJiMzNDtcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTQxLVxuZnMvb2NmczIvS2NvbmZpZzo0Mjpjb25maWcgT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVJcbmZzL29jZnMyL0tjb25maWctNDMtXHR0cmlzdGF0ZSBcJiMzNDtPQ0ZTMiBVc2Vyc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuLS1cbmZzL29jZnMyL0tjb25maWctNTMtXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xuZnMvb2NmczIvS2NvbmZpZy01NS1cdGJvb2wgXCYjMzQ7T0NGUzIgc3RhdGlzdGljc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBmaWxlcywgZXhwcmVzc2VkIGFzIGlmIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlbToKCioqRGl2aW5nIGludG8gT0NGUzIgWGF0dHIgSW5pdGlhbGl6YXRpb24qKgoKQWxyaWdodCwgdGltZSB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgZGlnIGludG8gaG93IE9DRlMyIGhhbmRsZXMgZXh0ZW5kZWQgYXR0cmlidXRlcyAoeGF0dHJzKSBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgcmV2aWV3aW5nIGBmcy9vY2ZzMi9LY29uZmlnYCB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZDsgaXQgc2hvdWxkIG91dGxpbmUgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgYW55IGRlcGVuZGVuY2llcyByZWxhdGVkIHRvIHhhdHRyIHN1cHBvcnQgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtLiBUaGlzIHdpbGwgcmVtaW5kIG1lIG9mIHdoYXQgZmVhdHVyZXMgYXJlIGNvbXBpbGVkIGluIGFuZCBob3cgdGhleSBtaWdodCBhZmZlY3QgdGhlIGltcGxlbWVudGF0aW9uIEkmIzM5O20gYWJvdXQgdG8gbG9vayBhdC4KClRoZW4sIEkmIzM5O2xsIGJlIGZvY3VzaW5nIHNwZWNpZmljYWxseSBvbiBgZnMvb2NmczIveGF0dHIuY2AsIHBhcnRpY3VsYXJseSBhcm91bmQgdGhlIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGZ1bmN0aW9uLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBzaG91bGQgaGFwcGVuLCByaWdodD8gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiwgb3IgY29kZSBuZWFyIGl0LCB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbml0aWFsIHZhbHVlcyByZWxhdGVkIHRvIHhhdHRycy4gSSYjMzk7bSBpbnRlcmVzdGVkIGluIGhvdyBpdCBjYWxjdWxhdGVzIHNpemVzLCBhbGxvY2F0ZXMgc3BhY2UsIGFuZCBwb3NzaWJseSBoYW5kbGVzIGFueSBpbml0aWFsIGRlZmF1bHQgYXR0cmlidXRlcyBvciBtZXRhZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHByZXNlbnQgd2hlbiB0aGUgZmlsZXN5c3RlbSBpcyBtb3VudGVkIG9yIGEgbmV3IGlub2RlIGlzIGNyZWF0ZWQuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBzdGVwcy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggYmxvY2sgYWxsb2NhdGlvbiBvciBpbm9kZSBkYXRhLiBVbmRlcnN0YW5kaW5nIGhvdyB0aGUgaW5pdGlhbGl6YXRpb24gdGllcyBpbnRvIHRoZSB1bmRlcmx5aW5nIHN0b3JhZ2UgbW9kZWwgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcyBhbmQgc2NhbGFiaWxpdHkgb2YgdGhlIE9DRlMyIHhhdHRyIGltcGxlbWVudGF0aW9uLiBBcmUgdGhleSBzdG9yZWQgaW5saW5lLCBpbiBhIHNlcGFyYXRlIGJsb2NrLCBvciB0aHJvdWdoIHNvbWUgY2xldmVyIGNvbWJpbmF0aW9uPyBJJiMzOTttIGxvb2tpbmcgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24gYW5kIGFueSBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgdHJhZGUtb2Zmcywgd2hpY2ggc2hvdWxkIGJlIHdlbGwgZG9jdW1lbnRlZCBpbiBjb21tZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgT0NGUzJfRlNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O09DRlMyIGZpbGUgc3lzdGVtIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTXG4gICA1Olx0XHRzZWxlY3QgQlVGRkVSX0hFQURcbiAgIDY6XHRcdHNlbGVjdCBKQkQyXG4gICA3Olx0XHRzZWxlY3QgQ1JDMzJcbiAgIDg6XHRcdHNlbGVjdCBRVU9UQVxuICAgOTpcdFx0c2VsZWN0IFFVT1RBX1RSRUVcbiAgMTA6XHRcdHNlbGVjdCBGU19QT1NJWF9BQ0xcbiAgMTE6XHRcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXG4gIDEyOlx0XHRoZWxwXG4gIDEzOlx0XHQgIE9DRlMyIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGV4dGVudCBiYXNlZCBzaGFyZWQgZGlzayBjbHVzdGVyIGZpbGVcbiAgMTQ6XHRcdCAgc3lzdGVtIHdpdGggbWFueSBzaW1pbGFyaXRpZXMgdG8gZXh0My4gSXQgc3VwcG9ydHMgNjQgYml0IGlub2RlXG4gIDE1Olx0XHQgIG51bWJlcnMsIGFuZCBoYXMgYXV0b21hdGljYWxseSBleHRlbmRpbmcgbWV0YWRhdGEgZ3JvdXBzIHdoaWNoIG1heVxuICAxNjpcdFx0ICBhbHNvIG1ha2UgaXQgYXR0cmFjdGl2ZSBmb3Igbm9uLWNsdXN0ZXJlZCB1c2UuXG4gIDE3Olx0XG4gIDE4Olx0XHQgIFlvdSYjMzk7bGwgd2FudCB0byBpbnN0YWxsIHRoZSBvY2ZzMi10b29scyBwYWNrYWdlIGluIG9yZGVyIHRvIGF0IGxlYXN0XG4gIDE5Olx0XHQgIGdldCBcJiMzNDttb3VudC5vY2ZzMlwmIzM0Oy5cbiAgMjA6XHRcbiAgMjE6XHRcdCAgUHJvamVjdCB3ZWIgcGFnZTogICAgaHR0cHM6Ly9vY2ZzMi53aWtpLmtlcm5lbC5vcmcvXG4gIDIyOlx0XHQgIFRvb2xzIHdlYiBwYWdlOiAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXJrZmFzaGVoL29jZnMyLXRvb2xzXG4gIDIzOlx0XHQgIE9DRlMyIG1haWxpbmcgbGlzdHM6IGh0dHBzOi8vc3Vic3BhY2Uua2VybmVsLm9yZy9saXN0cy5saW51eC5kZXYuaHRtbFxuICAyNDpcdFxuICAyNTpcdFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBPQ0ZTMiwgc2VlIHRoZSBmaWxlXG4gIDI2Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9vY2ZzMi5yc3RcdTAwM2UuXG4gIDI3Olx0XG4gIDI4Olx0Y29uZmlnIE9DRlMyX0ZTX08yQ0JcbiAgMjk6XHRcdHRyaXN0YXRlIFwmIzM0O08yQ0IgS2VybmVsc3BhY2UgQ2x1c3RlcmluZ1wmIzM0O1xuICAzMDpcdFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xuICAzMTpcdFx0ZGVmYXVsdCB5XG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIE9DRlMyIGluY2x1ZGVzIGEgc2ltcGxlIGtlcm5lbHNwYWNlIGNsdXN0ZXJpbmcgcGFja2FnZSwgdGhlIE9DRlMyXG4gIDM0Olx0XHQgIENsdXN0ZXIgQmFzZS4gIEl0IG9ubHkgcmVxdWlyZXMgYSB2ZXJ5IHNtYWxsIHVzZXJzcGFjZSBjb21wb25lbnRcbiAgMzU6XHRcdCAgdG8gY29uZmlndXJlIGl0LiBUaGlzIGNvbWVzIHdpdGggdGhlIHN0YW5kYXJkIG9jZnMyLXRvb2xzIHBhY2thZ2UuXG4gIDM2Olx0XHQgIE8yQ0IgaXMgbGltaXRlZCB0byBtYWludGFpbmluZyBhIGNsdXN0ZXIgZm9yIE9DRlMyIGZpbGUgc3lzdGVtcy5cbiAgMzc6XHRcdCAgSXQgY2Fubm90IG1hbmFnZSBhbnkgb3RoZXIgY2x1c3RlciBhcHBsaWNhdGlvbnMuXG4gIDM4Olx0XG4gIDM5Olx0XHQgIEl0IGlzIGFsd2F5cyBzYWZlIHRvIHNheSBZIGhlcmUsIGFzIHRoZSBjbHVzdGVyaW5nIG1ldGhvZCBpc1xuICA0MDpcdFx0ICBydW4tdGltZSBzZWxlY3RhYmxlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzNjQKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKlhhdHRyIEludmVzdGlnYXRpb24gQmVnaW5zKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBvY2ZzMmAgZXh0ZW5kZWQgYXR0cmlidXRlIGNvZGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBqdW1wIGludG8gYGZzL29jZnMyL3hhdHRyLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBob3cgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQuIEkgd2FudCB0byBzZWUgKndoZXJlKiBpdCYjMzk7cyBiZWluZyBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0gY29kZS4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgcHVycG9zZSBhbmQgY29udGV4dCBvZiB0aGF0IGZ1bmN0aW9uLCBwcm9iYWJseSBpbiB0aGUgcHJvY2VzcyBvZiBjYWxjdWxhdGluZyBzcGFjZSBuZWVkZWQgdG8gc3RvcmUgdGhlIGF0dHJpYnV0ZXMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgaW1wbGVtZW50YXRpb24gbG9va3MgbGlrZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL29jZnMyL3hhdHRyLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MzU6XHRcdHJldHVybiByZXQ7XG4gNjM2Olx0fVxuIDYzNzpcdFxuIDYzODpcdGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbiA2Mzk6XHRcdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbiA2NDA6XHRcdFx0XHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxuIDY0MTpcdFx0XHRcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSlcbiA2NDI6XHR7XG4gNjQzOlx0XHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbiA2NDQ6XHRcdGludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzO1xuIDY0NTpcdFxuIDY0NjpcdFx0aWYgKHNpLVx1MDAzZWVuYWJsZSlcbiA2NDc6XHRcdFx0c19zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKHN0cmxlbihzaS1cdTAwM2VuYW1lKSxcbiA2NDg6XHRcdFx0XHRcdFx0XHQgICAgIHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gNjQ5Olx0XG4gNjUwOlx0XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbiA2NTE6XHRcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCBcdTAwMjZcdTAwMjYgU19JU0RJUihtb2RlKSkge1xuIDY1MjpcdFx0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wtXHUwMDNlYV9jb3VudCAqXG4gNjUzOlx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiA2NTQ6XHRcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiA2NTU6XHRcdFx0fVxuIDY1NjpcdFx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWFjbCkge1xuIDY1NzpcdFx0XHRcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXHUwMDNlYWNsLVx1MDAzZWFfY291bnQgKlxuIDY1ODpcdFx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4gNjU5Olx0XHRcdFx0YV9zaXplICYjNDM7PSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoMCwgYWNsX2xlbik7XG4gNjYwOlx0XHRcdH1cbiA2NjE6XHRcdH1cbiA2NjI6XHRcbiA2NjM6XHRcdGlmICghKHNfc2l6ZSAmIzQzOyBhX3NpemUpKVxuIDY2NDpcdFx0XHRyZXR1cm4gMDtcbiA2NjU6XHRcbiA2NjY6XHRcdC8qXG4gNjY3Olx0XHQgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpc1xuIDY2ODpcdFx0ICogMjU2KG5hbWUpICYjNDM7IDgwKHZhbHVlKSAmIzQzOyAxNihlbnRyeSkgPSAzNTIgYnl0ZXMsXG4gNjY5Olx0XHQgKiBUaGUgbWF4IHNwYWNlIG9mIGFjbCB4YXR0ciB0YWtlbiBpbmxpbmUgaXNcbiA2NzA6XHRcdCAqIDgwKHZhbHVlKSAmIzQzOyAxNihlbnRyeSkgKiAyKGlmIGRpcmVjdG9yeSkgPSAxOTIgYnl0ZXMsXG4gNjcxOlx0XHQgKiB3aGVuIGJsb2Nrc2l6ZSA9IDUxMiwgbWF5IHJlc2VydmUgb25lIG1vcmUgY2x1c3RlciBmb3JcbiA2NzI6XHRcdCAqIHhhdHRyIGJ1Y2tldCwgb3RoZXJ3aXNlIHJlc2VydmUgb25lIG1ldGFkYXRhIGJsb2NrXG4gNjczOlx0XHQgKiBmb3IgdGhlbSBpcyBvay5cbiA2NzQ6XHRcdCAqIElmIHRoaXMgaXMgYSBuZXcgZGlyZWN0b3J5IHdpdGggaW5saW5lIGRhdGEsXG4gNjc1Olx0XHQgKiB3ZSBjaG9vc2UgdG8gcmVzZXJ2ZSB0aGUgZW50aXJlIGlubGluZSBhcmVhIGZvclxuIDY3NjpcdFx0ICogZGlyZWN0b3J5IGNvbnRlbnRzIGFuZCBmb3JjZSBhbiBleHRlcm5hbCB4YXR0ciBibG9jay5cbiA2Nzc6XHRcdCAqL1xuIDY3ODpcdFx0aWYgKGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUgfHxcbiA2Nzk6XHRcdCAgICAoU19JU0RJUihtb2RlKSBcdTAwMjZcdTAwMjYgb2NmczJfc3VwcG9ydHNfaW5saW5lX2RhdGEob3NiKSkgfHxcbiA2ODA6XHRcdCAgICAoc19zaXplICYjNDM7IGFfc2l6ZSkgXHUwMDNlIE9DRlMyX1hBVFRSX0ZSRUVfSU5fSUJPRFkpIHtcbiA2ODE6XHRcdFx0KndhbnRfbWV0YSA9ICp3YW50X21ldGEgJiM0MzsgMTtcbiA2ODI6XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IE9DRlMyX1hBVFRSX0JMT0NLX0NSRUFURV9DUkVESVRTO1xuIDY4MzpcdFx0fVxuIDY4NDpcdFxuIDY4NTpcdFx0aWYgKGRpci1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUgXHUwMDI2XHUwMDI2XG4gNjg2Olx0XHQgICAgKHNfc2l6ZSAmIzQzOyBhX3NpemUpIFx1MDAzZSBPQ0ZTMl9YQVRUUl9GUkVFX0lOX0JMT0NLKGRpcikpIHtcbiA2ODc6XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IDE7XG4gNjg4Olx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9ibG9ja3NfcGVyX3hhdHRyX2J1Y2tldChkaXItXHUwMDNlaV9zYik7XG4gNjg5Olx0XHR9XG4gNjkwOlx0XG4gNjkxOlx0XHQvKlxuIDY5MjpcdFx0ICogcmVzZXJ2ZSBjcmVkaXRzIGFuZCBjbHVzdGVycyBmb3IgeGF0dHJzIHdoaWNoIGhhcyBsYXJnZSB2YWx1ZVxuIDY5MzpcdFx0ICogYW5kIGhhdmUgdG8gYmUgc2V0IG91dHNpZGVcbiA2OTQ6XHRcdCAqL1xuIDY5NTpcdFx0aWYgKHNpLVx1MDAzZWVuYWJsZSBcdTAwMjZcdTAwMjYgc2ktXHUwMDNldmFsdWVfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuIDY5NjpcdFx0XHRuZXdfY2x1c3RlcnMgPSBvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4gNjk3Olx0XHRcdFx0XHRcdFx0XHRzaS1cdTAwM2V2YWx1ZV9sZW4pO1xuIDY5ODpcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuIDY5OTpcdFx0XHRcdFx0XHRcdFx0ICAgbmV3X2NsdXN0ZXJzKTtcbiA3MDA6XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiA3MDE6XHRcdH1cbiA3MDI6XHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuIDcwMzpcdFx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4gNzA0Olx0XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbiA3MDU6XHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuIDcwNjpcdFx0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuIDcwNzpcdFx0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbiA3MDg6XHRcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuIDcwOTpcdFx0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4gNzEwOlx0XHRcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz1cbiA3MTE6XHRcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuIDcxMjpcdFx0XHRcdFx0XHRcdFx0XHQgbmV3X2NsdXN0ZXJzKTtcbiA3MTM6XHRcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4gNzE0Olx0XHRcdFx0fVxuIDcxNTpcdFx0XHR9XG4gNzE2Olx0XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4gNzE3Olx0XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4gNzE4Olx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiA3MTk6XHRcdFx0XHRpZiAoYWNsX2xlbiBcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcbiA3MjA6XHRcdFx0XHRcdG5ld19jbHVzdGVycyA9XG4gNzIxOlx0XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiA3MjI6XHRcdFx0XHRcdFx0XHRcdFx0IGFjbF9sZW4pO1xuIDcyMzpcdFx0XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9XG4gNzI0Olx0XHRcdFx0XHRcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXHUwMDNlaV9zYixcbiA3MjU6XHRcdFx0XHRcdFx0XHRcdFx0IG5ld19jbHVzdGVycyk7XG4gNzI2Olx0XHRcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuIDcyNzpcdFx0XHRcdH1cbiA3Mjg6XHRcdFx0fVxuIDcyOTpcdFx0fVxuIDczMDpcdFxuIDczMTpcdFx0cmV0dXJuIDA7XG4gNzMyOlx0fVxuIDczMzpcdFxuIDczNDpcdHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MzY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGZ1bmN0aW9uIGNhbGw6CgoqKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgb2NmczJfY2FsY194YXR0cl9pbml0YCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBvYmplY3RpdmUgaXMgdG8gdW5kZXJzdGFuZCBob3cgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgYmVpbmcgdXNlZCB3aXRoaW4gdGhlIE9DRlMyIGZpbGVzeXN0ZW0gY29kZS4gS25vd2luZyBpdHMgY2FsbGVycyB3aWxsIHRlbGwgbWUgYSBsb3QgYWJvdXQgaXRzIHB1cnBvc2UgYW5kLCBwb3RlbnRpYWxseSwgYW55IGRlcGVuZGVuY2llcyBpdCBoYXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIHdlIGFyZSBpbnRlcmVzdGVkIGluIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIElzIHRoZXJlIGEgcGFydGljdWxhciBjb25jZXJuLCBvciBhcmUgd2UganVzdCByZXZpZXdpbmcgdGhlIGNvZGUgaW4gZGV0YWlsPyBMZXQgbWUgc3RhcnQgYnkgaWRlbnRpZnlpbmcgd2hlcmUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgY2FsbGVkIGZyb20uIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gZ3JlcCwgY3Njb3BlLCBvciBwb3NzaWJseSBhIG1vcmUgYWR2YW5jZWQgY29kZSBuYXZpZ2F0aW9uIHRvb2wsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2UgLSB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBjYWxsLiBBcyBhbiBleHBlcnQsIEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgc3BlY2lmaWMgcGF0dGVybnMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgcGFzc2VkIGluLCB0aGUgY29udGV4dCBvZiB0aGUgaW5pdGlhbGl6YXRpb24sIGFuZCBob3cgdGhlIHJldHVybiB2YWx1ZSAoaWYgYW55KSBpcyBiZWluZyB1c2VkLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhIHNpbXBsZSBzZXR1cCwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCB3aXRoIGR5bmFtaWMgYWxsb2NhdGlvbiBhbmQgZXJyb3IgaGFuZGxpbmc/IEkgd2lsbCBiZSBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBlcnJvciBjaGVja2luZyByZWxhdGVkIHRvIHRoZSByZXR1cm4gdmFsdWUsIGJlY2F1c2UgdGhhdCB3aWxsIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZCB0aGUgcm9idXN0bmVzcyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gd2lsbCB3YW50IHRvIGNvbnNpZGVyIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiBUaGlzIGNvdWxkIHRlbGwgbWUgYWJvdXQgYW55IHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIG9yIHdoZXRoZXIgdGhlcmUgbWlnaHQgYmUgcmFjZSBjb25kaXRpb25zIHRoYXQgbmVlZCBmdXJ0aGVyIHNjcnV0aW55LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9vY2ZzMiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9vY2ZzMi9uYW1laS5jPTIzMD1zdGF0aWMgaW50IG9jZnMyX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL29jZnMyL25hbWVpLmMtMzM4LVx0LyogY2FsY3VsYXRlIG1ldGEgZGF0YS9jbHVzdGVycyBmb3Igc2V0dGluZyBzZWN1cml0eSBhbmQgYWNsIHhhdHRyICovXG5mcy9vY2ZzMi9uYW1laS5jOjMzOTpcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFx1MDAyNnNpLCBcdTAwMjZ3YW50X2NsdXN0ZXJzLFxuZnMvb2NmczIvbmFtZWkuYy0zNDAtXHRcdFx0XHQgICAgICAgXHUwMDI2eGF0dHJfY3JlZGl0cywgXHUwMDI2d2FudF9tZXRhLFxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NjAwPWludCBvY2ZzMl9jYWxjX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsXG4tLVxuZnMvb2NmczIveGF0dHIuYy02MzctXG5mcy9vY2ZzMi94YXR0ci5jOjYzODppbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG5mcy9vY2ZzMi94YXR0ci5jLTYzOS1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbi0tXG5mcy9vY2ZzMi94YXR0ci5oPTYxPXN0cnVjdCBvY2ZzMl9hY2xfc3RhdGU7XG5mcy9vY2ZzMi94YXR0ci5oOjYyOmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbmZzL29jZnMyL3hhdHRyLmgtNjMtXHRcdFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgxMTEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nIERlY2lzaW9uIGZvciBmcy9vY2ZzMi94YXR0ci5jKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSB0aGUgYFdvcnRoRnV6emluZ2AgZGVjaXNpb24uIEkgaGF2ZSB0aGUgcnVsZXMgaW4gZnJvbnQgb2YgbWUsIHNvIGxldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBmb2xsb3dpbmcgdGhlbS4gUnVsZSBudW1iZXIgdHdvIHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIG9ubHkgaWYgYWxsIHRoZSBtb2RpZmllZCBjb2RlIGZhbGxzICpzdHJpY3RseSogaW50byBvbmUgb2YgdGhlIHNwZWNpZmllZCBuZWdhdGl2ZSBjcml0ZXJpYS4gVGhlIHRoaXJkIHJ1bGUgc2F5cyB0byByZXR1cm4gYFdvcnRoRnV6emluZz10cnVlYCBpZiBpdCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUuCgpOb3csIG15IHBhdGNoIHRvdWNoZXMgQyBleGVjdXRhYmxlIGNvZGUgc3BlY2lmaWNhbGx5IGluIGBmcy9vY2ZzMi94YXR0ci5jYC4gVGhpcyBpcyBhbiBpbi10cmVlIGZpbGVzeXN0ZW0gZHJpdmVyLCBhIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgYW5kIGl0JiMzOTtzIHJlYWNoYWJsZSB2aWEgYSBsb29wIGRldmljZSBvciBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuIEV2ZW4gdGhvdWdoIHRoZSBwYXRjaCBzZWVtcyBtaW5vciwganVzdCByZW1vdmluZyBhbiB1bnVzZWQgbG9jYWwgdmFyaWFibGUgYHJldGAsIEkgbmVlZCB0byBiZSBjYXJlZnVsLCBhbmQgdGhlIHJ1bGVzIGhpZ2hsaWdodCB0aGlzLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBjYXV0aW9uIGFnYWluc3QgYmxpbmRseSB0cnVzdGluZyBjbGFpbXMgb2YgJiMzNDtubyBmdW5jdGlvbmFsIGNoYW5nZSYjMzQ7IG9yICYjMzQ7cmVmYWN0b3JpbmcuJiMzNDsgVGhleSBzYXkgaWYgKmFueSogcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBJICptdXN0KiBmdXp6IGl0LgoKVGhpcyBjb2RlIGluIGBmcy9vY2ZzMmAgZG9lc24mIzM5O3QgZmFsbCBpbnRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSDigJMgZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgbG9nZ2luZywgYnVpbGQgc3lzdGVtIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCB0ZWFyZG93biBjYWxsYmFja3MsIG9yIGFyY2gtc3BlY2lmaWMgY29kZSDigJMgc28gYmFzZWQgb24gdGhlIHJ1bGVzLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93IHRoYXQgSSYjMzk7dmUgZGVjaWRlZCBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLCBJIHNob3VsZCBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgdG8gZm9jdXMgb24uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEkgdGhpbmsgSSBoYXZlIHRvIGlkZW50aWZ5IGFueSBvdGhlciBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcy4gYG9jZnMyX21rbm9kYCBpcyBhIGNhbGxlciBmdW5jdGlvbiBmcm9tIGBmcy9vY2ZzMi9uYW1laS5jYCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29jZnMyX2NhbGNfeGF0dHJfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL25hbWVpLmM9MjMwPXN0YXRpYyBpbnQgb2NmczJfbWtub2Qoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvb2NmczIvbmFtZWkuYy0zMzgtXHQvKiBjYWxjdWxhdGUgbWV0YSBkYXRhL2NsdXN0ZXJzIGZvciBzZXR0aW5nIHNlY3VyaXR5IGFuZCBhY2wgeGF0dHIgKi9cbmZzL29jZnMyL25hbWVpLmM6MzM5Olx0c3RhdHVzID0gb2NmczJfY2FsY194YXR0cl9pbml0KGRpciwgbW9kZSwgXHUwMDI2c2ksIFx1MDAyNndhbnRfY2x1c3RlcnMsXG5mcy9vY2ZzMi9uYW1laS5jLTM0MC1cdFx0XHRcdCAgICAgICBcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcdTAwMjZ3YW50X21ldGEsXG4tLVxuZnMvb2NmczIveGF0dHIuYz02MDA9aW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTYzNy1cbmZzL29jZnMyL3hhdHRyLmM6NjM4OmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcbmZzL29jZnMyL3hhdHRyLmMtNjM5LVx0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuLS1cbmZzL29jZnMyL3hhdHRyLmg9NjE9c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcbmZzL29jZnMyL3hhdHRyLmg6NjI6aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuZnMvb2NmczIveGF0dHIuaC02My1cdFx0XHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcxNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnZlc3RpZ2F0aW9uIGludG8gT0NGUzIgWGF0dHIgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIEkga25vdyBpcyBpbiBgZnMvb2NmczIveGF0dHIuY2AuIEkmIzM5O20gYWxzbyBnb2luZyB0byBrZWVwIGFuIGV5ZSBvbiBgb2NmczJfbWtub2RgLCBzaW5jZSB0aGF0JiMzOTtzIGEga2V5IGVudHJ5IHBvaW50IGZvciB0aGluZ3MgbGlrZSBgbWtkaXJgLCBgY3JlYXRlYCwgYHN5bWxpbmtgLCBhbmQgYG1rbm9kYCBvcGVyYXRpb25zIHdpdGhpbiBPQ0ZTMiwgYWNjb3JkaW5nIHRvIG15IHVuZGVyc3RhbmRpbmcuIEl0IG1ha2VzIHNlbnNlIHRvIGluY2x1ZGUgaXQsIGV2ZW4gaWYgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgYXBwZWFycyB0byBiZSB0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBpbnRlcmVzdCBoZXJlLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgYEVuYWJsZUNvbmZpZ3NgIGFuZCB0aGVuIGBmcy9vY2ZzMi9NYWtlZmlsZWAgdG8gZXN0YWJsaXNoIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJlcXVpcmVtZW50cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9vY2ZzMi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjY2ZsYWdzLXkgOj0gLUkkKHNyYylcbiAgIDM6XHRcbiAgIDQ6XHRvYmotJChDT05GSUdfT0NGUzJfRlMpICYjNDM7PSBcdFxcXG4gICA1Olx0XHRvY2ZzMi5vXHRcdFx0XFxcbiAgIDY6XHRcdG9jZnMyX3N0YWNrZ2x1ZS5vXG4gICA3Olx0XG4gICA4Olx0b2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICYjNDM7PSBvY2ZzMl9zdGFja19vMmNiLm9cbiAgIDk6XHRvYmotJChDT05GSUdfT0NGUzJfRlNfVVNFUlNQQUNFX0NMVVNURVIpICYjNDM7PSBvY2ZzMl9zdGFja191c2VyLm9cbiAgMTA6XHRcbiAgMTE6XHRvY2ZzMi1vYmpzIDo9IFxcXG4gIDEyOlx0XHRhbGxvYy5vIFx0XHRcXFxuICAxMzpcdFx0YW9wcy5vIFx0XHRcdFxcXG4gIDE0Olx0XHRibG9ja2NoZWNrLm9cdFx0XFxcbiAgMTU6XHRcdGJ1ZmZlcl9oZWFkX2lvLm9cdFxcXG4gIDE2Olx0XHRkY2FjaGUubyBcdFx0XFxcbiAgMTc6XHRcdGRpci5vIFx0XHRcdFxcXG4gIDE4Olx0XHRkbG1nbHVlLm8gXHRcdFxcXG4gIDE5Olx0XHRleHBvcnQubyBcdFx0XFxcbiAgMjA6XHRcdGV4dGVudF9tYXAubyBcdFx0XFxcbiAgMjE6XHRcdGZpbGUubyBcdFx0XHRcXFxuICAyMjpcdFx0aGVhcnRiZWF0Lm8gXHRcdFxcXG4gIDIzOlx0XHRpbm9kZS5vIFx0XHRcXFxuICAyNDpcdFx0aW9jdGwubyBcdFx0XFxcbiAgMjU6XHRcdGpvdXJuYWwubyBcdFx0XFxcbiAgMjY6XHRcdGxvY2FsYWxsb2MubyBcdFx0XFxcbiAgMjc6XHRcdGxvY2tzLm9cdFx0XHRcXFxuICAyODpcdFx0bW1hcC5vIFx0XHRcdFxcXG4gIDI5Olx0XHRuYW1laS5vIFx0XHRcXFxuICAzMDpcdFx0cmVmY291bnR0cmVlLm9cdFx0XFxcbiAgMzE6XHRcdHJlc2VydmF0aW9ucy5vXHRcdFxcXG4gIDMyOlx0XHRtb3ZlX2V4dGVudHMub1x0XHRcXFxuICAzMzpcdFx0cmVzaXplLm9cdFx0XFxcbiAgMzQ6XHRcdHNsb3RfbWFwLm8gXHRcdFxcXG4gIDM1Olx0XHRzdWJhbGxvYy5vIFx0XHRcXFxuICAzNjpcdFx0c3VwZXIubyBcdFx0XFxcbiAgMzc6XHRcdHN5bWxpbmsubyBcdFx0XFxcbiAgMzg6XHRcdHN5c2ZpbGUubyBcdFx0XFxcbiAgMzk6XHRcdHVwdG9kYXRlLm9cdFx0XFxcbiAgNDA6XHRcdHF1b3RhX2xvY2FsLm9cdFx0XFxcbiAgNDE6XHRcdHF1b3RhX2dsb2JhbC5vXHRcdFxcXG4gIDQyOlx0XHR4YXR0ci5vXHRcdFx0XFxcbiAgNDM6XHRcdGFjbC5vXHRcXFxuICA0NDpcdFx0ZmlsZWNoZWNrLm9cbiAgNDU6XHRcbiAgNDY6XHRvY2ZzMl9zdGFja2dsdWUtb2JqcyA6PSBzdGFja2dsdWUub1xuICA0NzpcdG9jZnMyX3N0YWNrX28yY2Itb2JqcyA6PSBzdGFja19vMmNiLm9cbiAgNDg6XHRvY2ZzMl9zdGFja191c2VyLW9ianMgOj0gc3RhY2tfdXNlci5vXG4gIDQ5Olx0XG4gIDUwOlx0b2JqLSQoQ09ORklHX09DRlMyX0ZTKSAmIzQzOz0gZGxtZnMvXG4gIDUxOlx0IyBjbHVzdGVyLyBpcyBhbHdheXMgbmVlZGVkIHdoZW4gT0NGUzJfRlMgZm9yIG1hc2tsb2cgc3VwcG9ydFxuICA1MjpcdG9iai0kKENPTkZJR19PQ0ZTMl9GUykgJiM0Mzs9IGNsdXN0ZXIvXG4gIDUzOlx0b2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICYjNDM7PSBkbG0vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODYyCgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE9DRlMyIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGBDT05GSUdfT0NGUzJfRlNgIGlzIHRoZSBrZXkuIFRoYXQgYnVpbGRzIGBvY2ZzMi5vYCwgYW5kIGltcG9ydGFudGx5LCB0aGF0IGluY2x1ZGVzIGB4YXR0ci5vYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHRvIHNlZSBpZiBJIG5lZWQgdG8gYWRqdXN0IGFueSBrZXJuZWwgb3B0aW9ucyBmb3IgbXkgc3BlY2lmaWMgc2V0dXAuIExldCYjMzk7cyBzZWUgd2hhdCBgZnMvb2NmczIvS2NvbmZpZ2AgdGVsbHMgbWUuCgpSaWdodCwgYENPTkZJR19PQ0ZTMl9GU2AgZGVwZW5kcyBvbiBgSU5FVCAmYW1wOyZhbXA7IFNZU0ZTICZhbXA7JmFtcDsgQ09ORklHRlNfRlNgLiBUaGF0JiMzOTtzIHJlYXNvbmFibGU7IG5ldHdvcmsgZnVuY3Rpb25hbGl0eSwgc3lzdGVtIGZpbGUgc3VwcG9ydCwgYW5kIGNvbmZpZ2ZzLCBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCB0aGVuIHRoZXJlIGFyZSBhIGJ1bmNoIG9mICYjMzQ7c2VsZWN0JiMzNDsgc3RhdGVtZW50czogYEJVRkZFUl9IRUFEYCwgYEpCRDJgLCBgQ1JDMzJgLCBgUVVPVEFgLCBgUVVPVEFfVFJFRWAsIGBGU19QT1NJWF9BQ0xgLCBhbmQgYExFR0FDWV9ESVJFQ1RfSU9gLiBPa2F5LCB0aGVzZSBhcmUgYWxsIHN1cHBvcnRpbmcgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGF0IGFyZSBiZWluZyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBJIGNob29zZSBPQ0ZTMi4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aG9zZSBmb3IgbGF0ZXIsIG1heWJlIHRoZXkgYXJlIGdvb2QgZGVmYXVsdHMuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgdGhhdCBgT0NGUzJfRlNgIGRvZXNuJiMzOTt0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYElORVRgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBhcmUgcHJldHR5IHN0YW5kYXJkIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlYWwgd2l0aCB0aG9zZS4gU28sIG15IGNvcmUgbmVlZHMgYXJlIHJlYWxseSBqdXN0IGBPQ0ZTMl9GU2AuIEkmIzM5O2xsIGNyb3NzIHJlZmVyZW5jZSB0aGlzIHdpdGggdGhlIG5vdGVzLiBMZXQmIzM5O3MgZG8gYSBxdWljayBjaGVjaywgbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcsIGNoZWNraW5nIGZvciBhbnkga2VybmVsIGNvbmZpZyBmbGFncyB0aGF0ICphcmVuJiMzOTt0KiBwcmVmaXhlZCB3aXRoIGBDT05GSUdfYC4gSnVzdCBsb29raW5nIGF0IHRoZSBwcmltYXJ5IG9uZXMuCgpJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIG9wdGlvbnMgcmVsYXRlZCB0byBBQ0xzIHdpdGhpbiBPQ0ZTMiBpdHNlbGYuIEkmIzM5O2xsIHNlYXJjaCBmb3IgQUNMLXJlbGF0ZWQgY29uZmlncyBkaXJlY3RseSB3aXRoaW4gYGZzL29jZnMyYC4gSSBoYXZlIGEgZmVlbGluZyBgT0NGUzJfRlNfUE9TSVhfQUNMYCBpcyB3aGF0IEkgYW0gbG9va2luZyBmb3IgYnV0IGEgcXVpY2sgZ3JlcCBpcyBwcm9iYWJseSB0aGUgYmVzdCB3YXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0FDTCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL29jZnMyJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL29jZnMyL0tjb25maWc9Mj1jb25maWcgT0NGUzJfRlNcbi0tXG5mcy9vY2ZzMi9LY29uZmlnLTktXHRzZWxlY3QgUVVPVEFfVFJFRVxuZnMvb2NmczIvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19QT1NJWF9BQ0xcbmZzL29jZnMyL0tjb25maWctMTEtXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xuLS1cbmZzL29jZnMyL2FjbC5jPTM0PXN0YXRpYyBzdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9hY2xfZnJvbV94YXR0cihjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpXG4tLVxuZnMvb2NmczIvYWNsLmMtNTUtXHRcdHN3aXRjaChhY2wtXHUwMDNlYV9lbnRyaWVzW25dLmVfdGFnKSB7XG5mcy9vY2ZzMi9hY2wuYzo1NjpcdFx0Y2FzZSBBQ0xfVVNFUjpcbmZzL29jZnMyL2FjbC5jLTU3LVx0XHRcdGFjbC1cdTAwM2VhX2VudHJpZXNbbl0uZV91aWQgPVxuLS1cbmZzL29jZnMyL2FjbC5jLTYwLVx0XHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmM6NjE6XHRcdGNhc2UgQUNMX0dST1VQOlxuZnMvb2NmczIvYWNsLmMtNjItXHRcdFx0YWNsLVx1MDAzZWFfZW50cmllc1tuXS5lX2dpZCA9XG4tLVxuZnMvb2NmczIvYWNsLmM9Nzg9c3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcbi0tXG5mcy9vY2ZzMi9hY2wuYy05NC1cdFx0c3dpdGNoKGFjbC1cdTAwM2VhX2VudHJpZXNbbl0uZV90YWcpIHtcbmZzL29jZnMyL2FjbC5jOjk1Olx0XHRjYXNlIEFDTF9VU0VSOlxuZnMvb2NmczIvYWNsLmMtOTYtXHRcdFx0ZW50cnktXHUwMDNlZV9pZCA9IGNwdV90b19sZTMyKFxuLS1cbmZzL29jZnMyL2FjbC5jLTk5LVx0XHRcdGJyZWFrO1xuZnMvb2NmczIvYWNsLmM6MTAwOlx0XHRjYXNlIEFDTF9HUk9VUDpcbmZzL29jZnMyL2FjbC5jLTEwMS1cdFx0XHRlbnRyeS1cdTAwM2VlX2lkID0gY3B1X3RvX2xlMzIoXG4tLVxuZnMvb2NmczIvYWNsLmMtMTA1LVx0XHRkZWZhdWx0OlxuZnMvb2NmczIvYWNsLmM6MTA2Olx0XHRcdGVudHJ5LVx1MDAzZWVfaWQgPSBjcHVfdG9fbGUzMihBQ0xfVU5ERUZJTkVEX0lEKTtcbmZzL29jZnMyL2FjbC5jLTEwNy1cdFx0XHRicmVhaztcbi0tXG5mcy9vY2ZzMi9hY2wuYz0xMTM9c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2dldF9hY2xfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLFxuLS1cbmZzL29jZnMyL2FjbC5jLTEyMS1cdHN3aXRjaCAodHlwZSkge1xuZnMvb2NmczIvYWNsLmM6MTIyOlx0Y2FzZSBBQ0xfVFlQRV9BQ0NFU1M6XG5mcy9vY2ZzMi9hY2wuYzoxMjM6XHRcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTO1xuZnMvb2NmczIvYWNsLmMtMTI0LVx0XHRicmVhaztcbmZzL29jZnMyL2FjbC5jOjEyNTpcdGNhc2UgQUNMX1RZUEVfREVGQVVMVDpcbmZzL29jZnMyL2FjbC5jOjEyNjpcdFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xuZnMvb2NmczIvYWNsLmMtMTI3LVx0XHRicmVhaztcbi0tXG5mcy9vY2ZzMi9hY2wuYz0xNTg9c3RhdGljIGludCBvY2ZzMl9hY2xfc2V0X21vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpkaV9iaCxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yMTEtLypcbmZzL29jZnMyL2FjbC5jOjIxMjogKiBTZXQgdGhlIGFjY2VzcyBvciBkZWZhdWx0IEFDTCBvZiBhbiBpbm9kZS5cbmZzL29jZnMyL2FjbC5jLTIxMy0gKi9cbmZzL29jZnMyL2FjbC5jPTIxND1zdGF0aWMgaW50IG9jZnMyX3NldF9hY2woaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy0yMzAtXHRzd2l0Y2ggKHR5cGUpIHtcbmZzL29jZnMyL2FjbC5jOjIzMTpcdGNhc2UgQUNMX1RZUEVfQUNDRVNTOlxuZnMvb2NmczIvYWNsLmM6MjMyOlx0XHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUztcbmZzL29jZnMyL2FjbC5jLTIzMy1cdFx0YnJlYWs7XG5mcy9vY2ZzMi9hY2wuYzoyMzQ6XHRjYXNlIEFDTF9UWVBFX0RFRkFVTFQ6XG5mcy9vY2ZzMi9hY2wuYzoyMzU6XHRcdG5hbWVfaW5kZXggPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDtcbmZzL29jZnMyL2FjbC5jLTIzNi1cdFx0aWYgKCFTX0lTRElSKGlub2RlLVx1MDAzZWlfbW9kZSkpXG4tLVxuZnMvb2NmczIvYWNsLmM9MjYzPWludCBvY2ZzMl9pb3Bfc2V0X2FjbChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxuLS1cbmZzL29jZnMyL2FjbC5jLTI3My1cdFx0cmV0dXJuIGhhZF9sb2NrO1xuZnMvb2NmczIvYWNsLmM6Mjc0Olx0aWYgKHR5cGUgPT0gQUNMX1RZUEVfQUNDRVNTIFx1MDAyNlx1MDAyNiBhY2wpIHtcbmZzL29jZnMyL2FjbC5jLTI3NS1cdFx0dW1vZGVfdCBtb2RlO1xuLS1cbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzA0LVx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXHUwMDNlaV9zYik7XG5mcy9vY2ZzMi9hY2wuYzozMDU6XHRpZiAoIShvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkpXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL29jZnMyL2FjbC5jPTMyMT1pbnQgb2NmczJfYWNsX2NobW9kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpXG4tLVxuZnMvb2NmczIvYWNsLmMtMzI5LVxuZnMvb2NmczIvYWNsLmM6MzMwOlx0aWYgKCEob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpKVxuZnMvb2NmczIvYWNsLmMtMzMxLVx0XHRyZXR1cm4gMDtcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zMzMtXHRkb3duX3JlYWQoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbmZzL29jZnMyL2FjbC5jOjMzNDpcdGFjbCA9IG9jZnMyX2dldF9hY2xfbm9sb2NrKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGJoKTtcbmZzL29jZnMyL2FjbC5jLTMzNS1cdHVwX3JlYWQoXHUwMDI2T0NGUzJfSShpbm9kZSktXHUwMDNlaXBfeGF0dHJfc2VtKTtcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zNDAtXHRcdHJldHVybiByZXQ7XG5mcy9vY2ZzMi9hY2wuYzozNDE6XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBBQ0xfVFlQRV9BQ0NFU1MsXG5mcy9vY2ZzMi9hY2wuYy0zNDItXHRcdFx0ICAgIGFjbCwgTlVMTCwgTlVMTCk7XG4tLVxuZnMvb2NmczIvYWNsLmMtMzQ3LS8qXG5mcy9vY2ZzMi9hY2wuYzozNDg6ICogSW5pdGlhbGl6ZSB0aGUgQUNMcyBvZiBhIG5ldyBpbm9kZS4gSWYgcGFyZW50IGRpcmVjdG9yeSBoYXMgZGVmYXVsdCBBQ0wsXG5mcy9vY2ZzMi9hY2wuYy0zNDktICogdGhlbiBjbG9uZSB0byBuZXcgaW5vZGUuIENhbGxlZCBmcm9tIG9jZnMyX21rbm9kLlxuLS1cbmZzL29jZnMyL2FjbC5jPTM1OT1pbnQgb2NmczJfYWNsX2luaXRfcHJlcGFyZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbi0tXG5mcy9vY2ZzMi9hY2wuYy0zNzItXG5mcy9vY2ZzMi9hY2wuYzozNzM6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL2FjbC5jLTM3NC1cdFx0ZG93bl9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuZnMvb2NmczIvYWNsLmMtMzc1LVx0XHRzdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbCA9XG5mcy9vY2ZzMi9hY2wuYzozNzY6XHRcdFx0b2NmczJfZ2V0X2FjbF9ub2xvY2soZGlyLCBBQ0xfVFlQRV9ERUZBVUxULCBkaXJfYmgpO1xuZnMvb2NmczIvYWNsLmMtMzc3LVx0XHR1cF9yZWFkKFx1MDAyNk9DRlMyX0koZGlyKS1cdTAwM2VpcF94YXR0cl9zZW0pO1xuLS1cbmZzL29jZnMyL2FjbC5jPTQxND1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9hY2wuYy00MjUtXG5mcy9vY2ZzMi9hY2wuYzo0MjY6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL2FjbC5jLTQyNy1cdFx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSBcdTAwMjZcdTAwMjYgc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wpIHtcbmZzL29jZnMyL2FjbC5jLTQyOC1cdFx0XHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxuZnMvb2NmczIvYWNsLmM6NDI5Olx0XHRcdFx0XHQgICAgQUNMX1RZUEVfREVGQVVMVCxcbmZzL29jZnMyL2FjbC5jLTQzMC1cdFx0XHRcdFx0ICAgIHN0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxuLS1cbmZzL29jZnMyL2FjbC5jLTQ0Mi1cbmZzL29jZnMyL2FjbC5jOjQ0MzpcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuZnMvb2NmczIvYWNsLmMtNDQ0LVx0XHRpZiAoc3RhdGUtXHUwMDNlYWNsKSB7XG5mcy9vY2ZzMi9hY2wuYy00NDUtXHRcdFx0cmV0ID0gb2NmczJfc2V0X2FjbChoYW5kbGUsIGlub2RlLCBkaV9iaCxcbmZzL29jZnMyL2FjbC5jOjQ0NjpcdFx0XHRcdFx0ICAgIEFDTF9UWVBFX0FDQ0VTUywgc3RhdGUtXHUwMDNlYWNsLFxuZnMvb2NmczIvYWNsLmMtNDQ3LVx0XHRcdFx0XHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XG4tLVxuZnMvb2NmczIvYWNsLmgtNy1cbmZzL29jZnMyL2FjbC5oOjg6I2lmbmRlZiBPQ0ZTMl9BQ0xfSFxuZnMvb2NmczIvYWNsLmg6OTojZGVmaW5lIE9DRlMyX0FDTF9IXG5mcy9vY2ZzMi9hY2wuaC0xMC1cbi0tXG5mcy9vY2ZzMi9hY2wuaD0zMz1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9vY2ZzMi9hY2wuaC0zOC1cbmZzL29jZnMyL2FjbC5oOjM5OiNlbmRpZiAvKiBPQ0ZTMl9BQ0xfSCAqL1xuLS1cbmZzL29jZnMyL29jZnMyLmg9MjU3PWVudW0gb2NmczJfbW91bnRfb3B0aW9uc1xuLS1cbmZzL29jZnMyL29jZnMyLmgtMjY2LVx0T0NGUzJfTU9VTlRfSU5PREU2NCA9IDEgXHUwMDNjXHUwMDNjIDcsXHQvKiBBbGxvdyBpbm9kZSBudW1iZXJzIFx1MDAzZSAyXjMyICovXG5mcy9vY2ZzMi9vY2ZzMi5oOjI2NzpcdE9DRlMyX01PVU5UX1BPU0lYX0FDTCA9IDEgXHUwMDNjXHUwMDNjIDgsXHQvKiBGb3JjZSBQT1NJWCBhY2Nlc3MgY29udHJvbCBsaXN0cyAqL1xuZnMvb2NmczIvb2NmczIuaDoyNjg6XHRPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0wgPSAxIFx1MDAzY1x1MDAzYyA5LFx0LyogRGlzYWJsZSBQT1NJWCBhY2Nlc3NcbmZzL29jZnMyL29jZnMyLmgtMjY5LVx0XHRcdFx0XHRcdCAgIGNvbnRyb2wgbGlzdHMgKi9cbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTYwNz1zdGF0aWMgaW50IG9jZnMyX3JlY29uZmlndXJlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTcxNi1cbmZzL29jZnMyL3N1cGVyLmM6NzE3Olx0XHRzYi1cdTAwM2VzX2ZsYWdzID0gKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IH5TQl9QT1NJWEFDTCkgfFxuZnMvb2NmczIvc3VwZXIuYzo3MTg6XHRcdFx0KChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgP1xuZnMvb2NmczIvc3VwZXIuYzo3MTk6XHRcdFx0XHRcdFx0XHRTQl9QT1NJWEFDTCA6IDApO1xuZnMvb2NmczIvc3VwZXIuYy03MjAtXHR9XG4tLVxuZnMvb2NmczIvc3VwZXIuYz05NzM9c3RhdGljIGludCBvY2ZzMl9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbi0tXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjMtXG5mcy9vY2ZzMi9zdXBlci5jOjEwMjQ6XHRzYi1cdTAwM2VzX2ZsYWdzID0gKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IH4oU0JfUE9TSVhBQ0wgfCBTQl9OT1NFQykpIHxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcdFx0KChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkgPyBTQl9QT1NJWEFDTCA6IDApO1xuZnMvb2NmczIvc3VwZXIuYy0xMDI2LVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9MTIzMj1zdGF0aWMgaW50IG9jZnMyX2NoZWNrX3NldF9vcHRpb25zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVx0fVxuZnMvb2NmczIvc3VwZXIuYzoxMjYxOlx0aWYgKG9wdGlvbnMtXHUwMDNlbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgXHUwMDI2XHUwMDI2XG5mcy9vY2ZzMi9zdXBlci5jLTEyNjItXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xuZnMvb2NmczIvc3VwZXIuYzoxMjYzOlx0XHRtbG9nKE1MX0VSUk9SLCBcJiMzNDtBQ0wgc3VwcG9ydCByZXF1ZXN0ZWQgYnV0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgXCYjMzQ7XG5mcy9vY2ZzMi9zdXBlci5jLTEyNjQtXHRcdCAgICAgXCYjMzQ7ZmVhdHVyZSBpcyBub3QgZW5hYmxlZFxcblwmIzM0Oyk7XG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMjY2LVx0fVxuZnMvb2NmczIvc3VwZXIuYzoxMjY3Olx0LyogTm8gQUNMIHNldHRpbmcgc3BlY2lmaWVkPyBVc2UgWEFUVFIgZmVhdHVyZS4uLiAqL1xuZnMvb2NmczIvc3VwZXIuYzoxMjY4Olx0aWYgKCEob3B0aW9ucy1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2IChPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgfFxuZnMvb2NmczIvc3VwZXIuYzoxMjY5Olx0XHRcdFx0ICAgIE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTCkpKSB7XG5mcy9vY2ZzMi9zdXBlci5jLTEyNzAtXHRcdGlmIChPQ0ZTMl9IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgT0NGUzJfRkVBVFVSRV9JTkNPTVBBVF9YQVRUUikpXG5mcy9vY2ZzMi9zdXBlci5jOjEyNzE6XHRcdFx0b3B0aW9ucy1cdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMjcyLVx0XHRlbHNlXG5mcy9vY2ZzMi9zdXBlci5jOjEyNzM6XHRcdFx0b3B0aW9ucy1cdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMjc0LVx0fVxuLS1cbmZzL29jZnMyL3N1cGVyLmM9MTI3OD1zdGF0aWMgaW50IG9jZnMyX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXG4tLVxuZnMvb2NmczIvc3VwZXIuYy0xMzg0LVx0XHRpZiAocmVzdWx0Lm5lZ2F0ZWQpIHtcbmZzL29jZnMyL3N1cGVyLmM6MTM4NTpcdFx0XHRtb3B0LVx1MDAzZW1vdW50X29wdCB8PSBPQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XG5mcy9vY2ZzMi9zdXBlci5jOjEzODY6XHRcdFx0bW9wdC1cdTAwM2Vtb3VudF9vcHQgXHUwMDI2PSB+T0NGUzJfTU9VTlRfUE9TSVhfQUNMO1xuZnMvb2NmczIvc3VwZXIuYy0xMzg3LVx0XHR9IGVsc2Uge1xuZnMvb2NmczIvc3VwZXIuYzoxMzg4Olx0XHRcdG1vcHQtXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcbmZzL29jZnMyL3N1cGVyLmM6MTM4OTpcdFx0XHRtb3B0LVx1MDAzZW1vdW50X29wdCBcdTAwMjY9IH5PQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XG5mcy9vY2ZzMi9zdXBlci5jLTEzOTAtXHRcdH1cbi0tXG5mcy9vY2ZzMi9zdXBlci5jPTE0MTY9c3RhdGljIGludCBvY2ZzMl9zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuLS1cbmZzL29jZnMyL3N1cGVyLmMtMTQ4NC1cbmZzL29jZnMyL3N1cGVyLmM6MTQ4NTpcdGlmIChvcHRzIFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODYtXHRcdHNlcV9wcmludGYocywgXCYjMzQ7LGFjbFwmIzM0Oyk7XG4tLVxuZnMvb2NmczIveGF0dHIuYz0xMDE9c3RhdGljIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3Qgb2NmczJfeGF0dHJfaGFuZGxlcl9tYXBbT0NGUzJfWEFUVFJfTUFYXSA9IHtcbmZzL29jZnMyL3hhdHRyLmMtMTAyLVx0W09DRlMyX1hBVFRSX0lOREVYX1VTRVJdXHRcdD0gXHUwMDI2b2NmczJfeGF0dHJfdXNlcl9oYW5kbGVyLFxuZnMvb2NmczIveGF0dHIuYzoxMDM6XHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU11cdD0gXHUwMDI2bm9wX3Bvc2l4X2FjbF9hY2Nlc3MsXG5mcy9vY2ZzMi94YXR0ci5jOjEwNDpcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVF1cdD0gXHUwMDI2bm9wX3Bvc2l4X2FjbF9kZWZhdWx0LFxuZnMvb2NmczIveGF0dHIuYy0xMDUtXHRbT0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRF1cdFx0PSBcdTAwMjZvY2ZzMl94YXR0cl90cnVzdGVkX2hhbmRsZXIsXG4tLVxuZnMvb2NmczIveGF0dHIuYz02Mzg9aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtNjQ5LVxuZnMvb2NmczIveGF0dHIuYzo2NTA6XHRpZiAob3NiLVx1MDAzZXNfbW91bnRfb3B0IFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcbmZzL29jZnMyL3hhdHRyLmMtNjUxLVx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4tLVxuZnMvb2NmczIveGF0dHIuYy03MDEtXHR9XG5mcy9vY2ZzMi94YXR0ci5jOjcwMjpcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuZnMvb2NmczIveGF0dHIuYy03MDMtXHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbi0tXG5mcy9vY2ZzMi94YXR0ci5jPTkxMj1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX2xpc3RfZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTkyNy1cbmZzL29jZnMyL3hhdHRyLmM6OTI4Olx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTOlxuZnMvb2NmczIveGF0dHIuYzo5Mjk6XHRjYXNlIE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUOlxuZnMvb2NmczIveGF0dHIuYzo5MzA6XHRcdGlmICghKHNiLVx1MDAzZXNfZmxhZ3MgXHUwMDI2IFNCX1BPU0lYQUNMKSlcbmZzL29jZnMyL3hhdHRyLmMtOTMxLVx0XHRcdHJldHVybiAwO1xuLS1cbmZzL29jZnMyL3hhdHRyLmM9MzU1NT1zdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL29jZnMyL3hhdHRyLmMtMzY5MS0vKlxuZnMvb2NmczIveGF0dHIuYzozNjkyOiAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlXG5mcy9vY2ZzMi94YXR0ci5jLTM2OTMtICogdGhhdCBpcyBzdGlsbCB1bnB1Ymxpc2hlZCwgdW5oYXNoZWQsIGFuZCB1bmF0dGFjaGVkIHRvIGEgZGVudHJ5LlxuLS1cbmZzL29jZnMyL3hhdHRyLmM9NzM2Nz1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfbm9fc2VjdXJpdHkoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSlcbi0tXG5mcy9vY2ZzMi94YXR0ci5jLTczNzEtXHRyZXR1cm4gdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSBcdTAwMjZcdTAwMjZcbmZzL29jZnMyL3hhdHRyLmM6NzM3MjpcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MgXHUwMDI2XHUwMDI2XG5mcy9vY2ZzMi94YXR0ci5jOjczNzM6XHQgICAgICAgdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDtcbmZzL29jZnMyL3hhdHRyLmMtNzM3NC19XG4tLVxuZnMvb2NmczIveGF0dHIuaD0xND1lbnVtIG9jZnMyX3hhdHRyX3R5cGUge1xuZnMvb2NmczIveGF0dHIuaC0xNS1cdE9DRlMyX1hBVFRSX0lOREVYX1VTRVIgPSAxLFxuZnMvb2NmczIveGF0dHIuaDoxNjpcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MsXG5mcy9vY2ZzMi94YXR0ci5oOjE3Olx0T0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFQsXG5mcy9vY2ZzMi94YXR0ci5oLTE4LVx0T0NGUzJfWEFUVFJfSU5ERVhfVFJVU1RFRCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MDIKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogMTAxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZpbmFsaXppbmcgdGhlIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgdGltZSB0byB3cmFwIHRoaXMgdXAuIEkgbmVlZCB0byBkb2N1bWVudCB0aGUgZXNzZW50aWFsIHBhcmFtZXRlcnMgZm9yIGZ1enppbmcgdGhpcyBzcGVjaWZpYyBjb2RlLiBGaXJzdCwgdGhlIG9idmlvdXM6IGBXb3J0aEZ1enppbmdgIGlzIGRlZmluaXRlbHkgYHRydWVgLiBUaGUgY2hhbmdlcyBJJiMzOTttIGZvY3VzaW5nIG9uIOKAkyBzcGVjaWZpY2FsbHkgd2l0aGluIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGFuZCBgb2NmczJfbWtub2RgIOKAkyBhcmUgdGhlIGtleSBwb2ludHMgdG8gaGl0LiBUaG9zZSBhcmUgZ29pbmcgc3RyYWlnaHQgaW50byBgRm9jdXNTeW1ib2xzYC4gQW5kIG5hdHVyYWxseSwgdG8gdHJpZ2dlciB0aGUgcmVsZXZhbnQgY29kZSBwYXRocywgYEVuYWJsZUNvbmZpZ3NgIG5lZWRzIHRvIGluY2x1ZGUgYE9DRlMyX0ZTYC4KCkNydWNpYWxseSwgSSBuZWVkIHRvIG1ha2UgdGhlIHJlYXNvbmluZyBjcnlzdGFsIGNsZWFyLiBUaGlzIHNldCBvZiBtb2RpZmljYXRpb25zIGluIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGRpcmVjdGx5IGltcGFjdHMgcmVhY2hhYmxlIGtlcm5lbCBmaWxlc3lzdGVtIGNvZGUsIGFuZCBiZWNhdXNlIG9mIHRoaXMsIGZ1enppbmcgdW5kZXIgYE9DRlMyX0ZTYCBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gVGhhdCBjb25jaXNlbHkgZXhwbGFpbnMgdGhlIG5lZWQgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gTm93LCBJIGp1c3QgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHdlIGNhbiBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0NGUzJfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtvY2ZzMl9jYWxjX3hhdHRyX2luaXQmIzM0OywKICAgICYjMzQ7b2NmczJfbWtub2QmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXhlY3V0YWJsZSBDIGNvZGUgaW4gZnMvb2NmczIveGF0dHIuYyBieSBjbGVhbmluZyB1cCByZXR1cm4gdmFsdWVzIGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLCB3aGljaCBpcyBjYWxsZWQgZHVyaW5nIGlub2RlIGNyZWF0aW9uL21rbm9kIGluIE9DRlMyLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgd2l0aCBPQ0ZTMiBzdXBwb3J0IGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09DRlMyX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7b2NmczJfY2FsY194YXR0cl9pbml0JiMzNDssCiAgICAmIzM0O29jZnMyX21rbm9kJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgQyBjb2RlIGluIGZzL29jZnMyL3hhdHRyLmMgYnkgY2xlYW5pbmcgdXAgcmV0dXJuIHZhbHVlcyBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKSwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbi9ta25vZCBpbiBPQ0ZTMi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggT0NGUzIgc3VwcG9ydCBlbmFibGVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSB0cml2aWFsIGNvZGUgY2xlYW51cCBpbiBmcy9vY2ZzMi94YXR0ci5jIHJlbW92aW5nIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM1NDcyMWY0NjQzYzM1ZmMwMTc4ZDI2MDhmYTdkMmVmODk4ZWQ2NmIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDE3OjQ3OjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggMzViY2JiMGZmNjA3Yi4uYWIzYjY0NTk4M2M5NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9vY2ZzMi94YXR0ci5jCkBAIC02NDAsNyAmIzQzOzY0MCw2IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKIAkJCSAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsCiAJCQkgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpCiB7Ci0JaW50IHJldCA9IDA7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItJmd0O2lfc2IpOwogCWludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzOwogCkBAIC02NjIsNyAmIzQzOzY2MSw3IEBAIGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSwKIAl9CiAKIAlpZiAoIShzX3NpemUgJiM0MzsgYV9zaXplKSkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiAwOwogCiAJLyoKIAkgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpcwpAQCAtNzI5LDcgJiM0Mzs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsCiAJCX0KIAl9CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTc6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgWGF0dHIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgYW5kIGl0cyBpbW1lZGlhdGUgY29udGV4dC4gVGhpcyBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpYCBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBHaXZlbiB0aGF0LCBJJiMzOTtsbCBnbyBkaXJlY3RseSB0byB0aGF0IGZpbGUgYW5kLCBzcGVjaWZpY2FsbHksIEkmIzM5O2xsIHplcm8gaW4gb24gdGhlIHZpY2luaXR5IG9mIGxpbmUgNjQwLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBnaXZlbiB0aGUgZnVuY3Rpb24gYW5kIGZpbGUgdGhlIHBhdGNoIHBvaW50cyB0by4gV2UgY2FuIGdldCBhIHF1aWNrIGltcHJlc3Npb24gb2Ygd2hhdCB0aGlzIGNvZGUgaXMgYXR0ZW1wdGluZyB0byBjaGFuZ2UgYW5kIGFjY29tcGxpc2ggaGVyZS4gRnJvbSB0aGVyZSwgd2UgY2FuIGFuYWx5emUgaG93IHRoZSB4YXR0ciBtb2RpZmljYXRpb25zIGFyZSBpbnRlbmRlZCB0byBiZWhhdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDE3OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvb2NmczIveGF0dHIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYzNTpcdFx0cmV0dXJuIHJldDtcbiA2MzY6XHR9XG4gNjM3Olx0XG4gNjM4Olx0aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxuIDYzOTpcdFx0XHRcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxuIDY0MDpcdFx0XHRcdCAgaW50ICp3YW50X2NsdXN0ZXJzLCBpbnQgKnhhdHRyX2NyZWRpdHMsXG4gNjQxOlx0XHRcdFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxuIDY0MjpcdHtcbiA2NDM6XHRcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpO1xuIDY0NDpcdFx0aW50IHNfc2l6ZSA9IDAsIGFfc2l6ZSA9IDAsIGFjbF9sZW4gPSAwLCBuZXdfY2x1c3RlcnM7XG4gNjQ1Olx0XG4gNjQ2Olx0XHRpZiAoc2ktXHUwMDNlZW5hYmxlKVxuIDY0NzpcdFx0XHRzX3NpemUgPSBvY2ZzMl94YXR0cl9lbnRyeV9yZWFsX3NpemUoc3RybGVuKHNpLVx1MDAzZW5hbWUpLFxuIDY0ODpcdFx0XHRcdFx0XHRcdCAgICAgc2ktXHUwMDNldmFsdWVfbGVuKTtcbiA2NDk6XHRcbiA2NTA6XHRcdGlmIChvc2ItXHUwMDNlc19tb3VudF9vcHQgXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xuIDY1MTpcdFx0XHRpZiAoYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsIFx1MDAyNlx1MDAyNiBTX0lTRElSKG1vZGUpKSB7XG4gNjUyOlx0XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VkZWZhdWx0X2FjbC1cdTAwM2VhX2NvdW50ICpcbiA2NTM6XHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuIDY1NDpcdFx0XHRcdGFfc2l6ZSAmIzQzOz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xuIDY1NTpcdFx0XHR9XG4gNjU2Olx0XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlYWNsKSB7XG4gNjU3Olx0XHRcdFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cdTAwM2VhY2wtXHUwMDNlYV9jb3VudCAqXG4gNjU4Olx0XHRcdFx0XHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcbiA2NTk6XHRcdFx0XHRhX3NpemUgJiM0Mzs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcbiA2NjA6XHRcdFx0fVxuIDY2MTpcdFx0fVxuIDY2MjpcdFxuIDY2MzpcdFx0aWYgKCEoc19zaXplICYjNDM7IGFfc2l6ZSkpXG4gNjY0Olx0XHRcdHJldHVybiAwO1xuIDY2NTpcdFxuIDY2NjpcdFx0LypcbiA2Njc6XHRcdCAqIFRoZSBtYXggc3BhY2Ugb2Ygc2VjdXJpdHkgeGF0dHIgdGFrZW4gaW5saW5lIGlzXG4gNjY4Olx0XHQgKiAyNTYobmFtZSkgJiM0MzsgODAodmFsdWUpICYjNDM7IDE2KGVudHJ5KSA9IDM1MiBieXRlcyxcbiA2Njk6XHRcdCAqIFRoZSBtYXggc3BhY2Ugb2YgYWNsIHhhdHRyIHRha2VuIGlubGluZSBpc1xuIDY3MDpcdFx0ICogODAodmFsdWUpICYjNDM7IDE2KGVudHJ5KSAqIDIoaWYgZGlyZWN0b3J5KSA9IDE5MiBieXRlcyxcbiA2NzE6XHRcdCAqIHdoZW4gYmxvY2tzaXplID0gNTEyLCBtYXkgcmVzZXJ2ZSBvbmUgbW9yZSBjbHVzdGVyIGZvclxuIDY3MjpcdFx0ICogeGF0dHIgYnVja2V0LCBvdGhlcndpc2UgcmVzZXJ2ZSBvbmUgbWV0YWRhdGEgYmxvY2tcbiA2NzM6XHRcdCAqIGZvciB0aGVtIGlzIG9rLlxuIDY3NDpcdFx0ICogSWYgdGhpcyBpcyBhIG5ldyBkaXJlY3Rvcnkgd2l0aCBpbmxpbmUgZGF0YSxcbiA2NzU6XHRcdCAqIHdlIGNob29zZSB0byByZXNlcnZlIHRoZSBlbnRpcmUgaW5saW5lIGFyZWEgZm9yXG4gNjc2Olx0XHQgKiBkaXJlY3RvcnkgY29udGVudHMgYW5kIGZvcmNlIGFuIGV4dGVybmFsIHhhdHRyIGJsb2NrLlxuIDY3NzpcdFx0ICovXG4gNjc4Olx0XHRpZiAoZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSB8fFxuIDY3OTpcdFx0ICAgIChTX0lTRElSKG1vZGUpIFx1MDAyNlx1MDAyNiBvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB8fFxuIDY4MDpcdFx0ICAgIChzX3NpemUgJiM0MzsgYV9zaXplKSBcdTAwM2UgT0NGUzJfWEFUVFJfRlJFRV9JTl9JQk9EWSkge1xuIDY4MTpcdFx0XHQqd2FudF9tZXRhID0gKndhbnRfbWV0YSAmIzQzOyAxO1xuIDY4MjpcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz0gT0NGUzJfWEFUVFJfQkxPQ0tfQ1JFQVRFX0NSRURJVFM7XG4gNjgzOlx0XHR9XG4gNjg0Olx0XG4gNjg1Olx0XHRpZiAoZGlyLVx1MDAzZWlfc2ItXHUwMDNlc19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSBcdTAwMjZcdTAwMjZcbiA2ODY6XHRcdCAgICAoc19zaXplICYjNDM7IGFfc2l6ZSkgXHUwMDNlIE9DRlMyX1hBVFRSX0ZSRUVfSU5fQkxPQ0soZGlyKSkge1xuIDY4NzpcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gMTtcbiA2ODg6XHRcdFx0KnhhdHRyX2NyZWRpdHMgJiM0Mzs9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGRpci1cdTAwM2VpX3NiKTtcbiA2ODk6XHRcdH1cbiA2OTA6XHRcbiA2OTE6XHRcdC8qXG4gNjkyOlx0XHQgKiByZXNlcnZlIGNyZWRpdHMgYW5kIGNsdXN0ZXJzIGZvciB4YXR0cnMgd2hpY2ggaGFzIGxhcmdlIHZhbHVlXG4gNjkzOlx0XHQgKiBhbmQgaGF2ZSB0byBiZSBzZXQgb3V0c2lkZVxuIDY5NDpcdFx0ICovXG4gNjk1Olx0XHRpZiAoc2ktXHUwMDNlZW5hYmxlIFx1MDAyNlx1MDAyNiBzaS1cdTAwM2V2YWx1ZV9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4gNjk2Olx0XHRcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXHUwMDNlaV9zYixcbiA2OTc6XHRcdFx0XHRcdFx0XHRcdHNpLVx1MDAzZXZhbHVlX2xlbik7XG4gNjk4Olx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PSBvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4gNjk5Olx0XHRcdFx0XHRcdFx0XHQgICBuZXdfY2x1c3RlcnMpO1xuIDcwMDpcdFx0XHQqd2FudF9jbHVzdGVycyAmIzQzOz0gbmV3X2NsdXN0ZXJzO1xuIDcwMTpcdFx0fVxuIDcwMjpcdFx0aWYgKG9zYi1cdTAwM2VzX21vdW50X29wdCBcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XG4gNzAzOlx0XHRcdGlmIChhY2xfc3RhdGUtXHUwMDNlZGVmYXVsdF9hY2wgXHUwMDI2XHUwMDI2IFNfSVNESVIobW9kZSkpIHtcbiA3MDQ6XHRcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWRlZmF1bHRfYWNsLVx1MDAzZWFfY291bnQgKlxuIDcwNTpcdFx0XHRcdFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XG4gNzA2Olx0XHRcdFx0aWYgKGFjbF9sZW4gXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XG4gNzA3Olx0XHRcdFx0XHRuZXdfY2x1c3RlcnMgPVxuIDcwODpcdFx0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVx1MDAzZWlfc2IsXG4gNzA5Olx0XHRcdFx0XHRcdFx0XHRcdCBhY2xfbGVuKTtcbiA3MTA6XHRcdFx0XHRcdCp4YXR0cl9jcmVkaXRzICYjNDM7PVxuIDcxMTpcdFx0XHRcdFx0XHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVx1MDAzZWlfc2IsXG4gNzEyOlx0XHRcdFx0XHRcdFx0XHRcdCBuZXdfY2x1c3RlcnMpO1xuIDcxMzpcdFx0XHRcdFx0KndhbnRfY2x1c3RlcnMgJiM0Mzs9IG5ld19jbHVzdGVycztcbiA3MTQ6XHRcdFx0XHR9XG4gNzE1Olx0XHRcdH1cbiA3MTY6XHRcdFx0aWYgKGFjbF9zdGF0ZS1cdTAwM2VhY2wpIHtcbiA3MTc6XHRcdFx0XHRhY2xfbGVuID0gYWNsX3N0YXRlLVx1MDAzZWFjbC1cdTAwM2VhX2NvdW50ICpcbiA3MTg6XHRcdFx0XHRcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xuIDcxOTpcdFx0XHRcdGlmIChhY2xfbGVuIFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xuIDcyMDpcdFx0XHRcdFx0bmV3X2NsdXN0ZXJzID1cbiA3MjE6XHRcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cdTAwM2VpX3NiLFxuIDcyMjpcdFx0XHRcdFx0XHRcdFx0XHQgYWNsX2xlbik7XG4gNzIzOlx0XHRcdFx0XHQqeGF0dHJfY3JlZGl0cyAmIzQzOz1cbiA3MjQ6XHRcdFx0XHRcdFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cdTAwM2VpX3NiLFxuIDcyNTpcdFx0XHRcdFx0XHRcdFx0XHQgbmV3X2NsdXN0ZXJzKTtcbiA3MjY6XHRcdFx0XHRcdCp3YW50X2NsdXN0ZXJzICYjNDM7PSBuZXdfY2x1c3RlcnM7XG4gNzI3Olx0XHRcdFx0fVxuIDcyODpcdFx0XHR9XG4gNzI5Olx0XHR9XG4gNzMwOlx0XG4gNzMxOlx0XHRyZXR1cm4gMDtcbiA3MzI6XHR9XG4gNzMzOlx0XG4gNzM0Olx0c3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzMxCgkJCQkJCQlvdXRwdXQ6IDExMQoJCQkJCQkJdGhvdWdodHM6IDMwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgVGhpcyBUcml2aWFsIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRjaCBoZXJlIOKAkyBpdCByZW1vdmVzIGEgbG9jYWwsIHVudXNlZCBpbnRlZ2VyIHZhcmlhYmxlLCBgcmV0YCwgZnJvbSB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24gaW4gYGZzL29jZnMyL3hhdHRyLmNgIGFuZCByZXBsYWNlcyB0aGUgcmV0dXJuIHN0YXRlbWVudCB1c2luZyB0aGUgbm93LWRlbGV0ZWQgdmFyaWFibGUgd2l0aCBhIGRpcmVjdCByZXR1cm4gb2YgYDBgLgoKRXNzZW50aWFsbHksIHRoaXMgaXMganVzdCBhIGNvZGUgY2xlYW51cCBleGVyY2lzZTsgaXTigJlzIGEgZGlyZWN0IHJlcGxhY2VtZW50IG9mIHJldHVybmluZyBhIHZhcmlhYmxlIGNvbnRhaW5pbmcgMCB3aXRoIHJldHVybmluZyAwIGl0c2VsZi4gVGhlcmUmIzM5O3Mgbm8gZnVuY3Rpb25hbCBjaGFuZ2Ugd2hhdHNvZXZlciwgd2hpY2ggaXMgdGhlIGtleSBoZXJlLgoKTm93LCBsZXQmIzM5O3MgZ28gdGhyb3VnaCBteSBtZW50YWwgY2hlY2tsaXN0OgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUsIG5vdCB0b3VjaGVkLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/KiogRGVmaW5pdGVseSBub3QuCjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbj8qKiBOb3QgaGFwcGVuaW5nLgo0LiAgKipCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBhY2Nlc3MgdG8gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBieXRlcz8qKiBOZWdhdGl2ZS4KClRoZXJlZm9yZSwgc2luY2UgdGhpcyBpcyBqdXN0IGEgc21hbGwgY2xlYW51cCwgdGhpcyBwYXRjaCBjbGVhcmx5ICoqZG9lcyBub3QgcmVxdWlyZSBLTVNBTioqLgoKVG8gc29saWRpZnkgdGhlIHJlYXNvbmluZywgbGV04oCZcyByZXZpc2l0IHRoZSBjb3JlIGRpZmZlcmVuY2VzIGJldHdlZW4gS0FTQU4gYW5kIEtNU0FOLiBLQVNBTiBhbmQgc3RhbmRhcmQgdG9vbHMgYXJlIGZvciB0aGUgdXN1YWwgbWVtb3J5IGVycm9ycyDigJMgVXNlLUFmdGVyLUZyZWUsIE91dC1vZi1Cb3VuZHMsIHRoYXQga2luZCBvZiB0aGluZy4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBpcyBzcGVjaWZpY2FsbHkgdGFpbG9yZWQgdG8gZGV0ZWN0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLCB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBsZWFkIHRvIGluZm9ybWF0aW9uIGxlYWtzLgoKR2l2ZW4gdGhhdCB0aGlzIHBhdGNoIHRvdWNoZXMgKm5vdGhpbmcqIHRoYXQgY291bGQgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbnZvbHZlIGFueSBtZW1vcnkgYWxsb2NhdGlvbnMsIGludGVyYWN0IHdpdGggYnVmZmVycywgb3IgbWFrZSBjb3BpZXMgdG8gdXNlciBzcGFjZSB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIGRhdGEsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzbiYjMzk7dCBuZWVkZWQuCgpPa2F5LCB0aGF0JiMzOTtzIGV2ZXJ5dGhpbmcuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxNzo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpcyBhIHRyaXZpYWwgY29kZSBjbGVhbnVwIGluIGZzL29jZnMyL3hhdHRyLmMgcmVtb3ZpbmcgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlICYjMzk7cmV0JiMzOTsgYW5kIHJldHVybmluZyAwIGRpcmVjdGx5IGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLiBJdCBkb2VzIG5vdCBhbHRlciBydW50aW1lIGJlaGF2aW9yLCBhbGxvY2F0ZS9hY2Nlc3MgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaXMgYSB0cml2aWFsIGNvZGUgY2xlYW51cCBpbiBmcy9vY2ZzMi94YXR0ci5jIHJlbW92aW5nIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZSAmIzM5O3JldCYjMzk7IGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MjcuODgzODY4NTc0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxNDQyMjc5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0NGUzJfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgICBcIm9jZnMyX21rbm9kXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHRyaXZpYWwgY29kZSBjbGVhbnVwIGluIGZzL29jZnMyL3hhdHRyLmMgcmVtb3ZpbmcgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlICdyZXQnIGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIEMgY29kZSBpbiBmcy9vY2ZzMi94YXR0ci5jIGJ5IGNsZWFuaW5nIHVwIHJldHVybiB2YWx1ZXMgaW4gb2NmczJfY2FsY194YXR0cl9pbml0KCksIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24vbWtub2QgaW4gT0NGUzIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIE9DRlMyIHN1cHBvcnQgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MjcuODgzODgwNjQzWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDg4ODMwOTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzU0NzIxZjQ2NDNjMzVmYzAxNzhkMjYwOGZhN2QyZWY4OThlZDY2YlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDE3OjQ3OjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXFxuaW5kZXggMzViY2JiMGZmNjA3Yi4uYWIzYjY0NTk4M2M5NiAxMDA2NDRcXG4tLS0gYS9mcy9vY2ZzMi94YXR0ci5jXFxuKysrIGIvZnMvb2NmczIveGF0dHIuY1xcbkBAIC02NDAsNyArNjQwLDYgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbiBcXHRcXHRcXHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXFxuIHtcXG4tXFx0aW50IHJldCA9IDA7XFxuIFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG4gXFx0aW50IHNfc2l6ZSA9IDAsIGFfc2l6ZSA9IDAsIGFjbF9sZW4gPSAwLCBuZXdfY2x1c3RlcnM7XFxuIFxcbkBAIC02NjIsNyArNjYxLDcgQEAgaW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiBcXHR9XFxuIFxcbiBcXHRpZiAoIShzX3NpemUgKyBhX3NpemUpKVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBtYXggc3BhY2Ugb2Ygc2VjdXJpdHkgeGF0dHIgdGFrZW4gaW5saW5lIGlzXFxuQEAgLTcyOSw3ICs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MjkuMzczMzE4MTIyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMjQxNzkxNTE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPQ0ZTMl9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm9jZnMyX2NhbGNfeGF0dHJfaW5pdFwiLFxuICAgIFwib2NmczJfbWtub2RcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleGVjdXRhYmxlIEMgY29kZSBpbiBmcy9vY2ZzMi94YXR0ci5jIGJ5IGNsZWFuaW5nIHVwIHJldHVybiB2YWx1ZXMgaW4gb2NmczJfY2FsY194YXR0cl9pbml0KCksIHdoaWNoIGlzIGNhbGxlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24vbWtub2QgaW4gT0NGUzIuIFRoaXMgY29kZSBpcyByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB3aXRoIE9DRlMyIHN1cHBvcnQgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNTQ3MjFmNDY0M2MzNWZjMDE3OGQyNjA4ZmE3ZDJlZjg5OGVkNjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNzo0NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCAzNWJjYmIwZmY2MDdiLi5hYjNiNjQ1OTgzYzk2IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuKysrIGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTY0MCw3ICs2NDAsNiBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbiBcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuLVx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbiBcdGludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzO1xuIFxuQEAgLTY2Miw3ICs2NjEsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHR9XG4gXG4gXHRpZiAoIShzX3NpemUgKyBhX3NpemUpKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpc1xuQEAgLTcyOSw3ICs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MjkuMzczMzE5OTkyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg4MDYwNTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBJIHNlZSBpdCBtb2RpZmllcyBgZnMvb2NmczIveGF0dHIuY2AuIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSBhIHNpbXBsZSBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSBgb2NmczJfY2FsY194YXR0cl9pbml0YCBmdW5jdGlvbi4gVGhlIHBhdGNoIHJlbW92ZXMgYW4gdW51c2VkIHZhcmlhYmxlIGBpbnQgcmV0ID0gMDtgIGFuZCByZXBsYWNlcyB0aGUgYHJldHVybiByZXQ7YCB3aXRoIGByZXR1cm4gMDtgLiBTZWVtcyBzdHJhaWdodGZvcndhcmQsIHJpZ2h0P1xuXG5CdXQgd2FpdCBhIG1pbnV0ZSwgaXMgdGhpcyBldmVuICpyZWFjaGFibGUqIGNvZGU/IFdlIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYmVmb3JlIHdlIHNwZW5kIGFueSBtb3JlIHRpbWUuIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGBmcy9vY2ZzMi94YXR0ci5jYCBpdHNlbGYgYW5kIHRoZSByZWxhdGVkIGBLY29uZmlnYCBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLCByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgZGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBwYXRoIHRoYXQgY291bGQgcmVhbGlzdGljYWxseSBiZSBoaXQgYW5kIGlzIHRoZXJlZm9yZSB3b3J0aCBmdXp6aW5nLlxuXG5CZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCByZXZpZXcgdGhlIGd1aWRlbGluZXMgYWdhaW4uIFRoZSBndWlkZWxpbmVzIGFyZSBwcmV0dHkgY2xlYXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2Vzbid0IGZhbGwgaW50byB0aGUgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIiBjYXRlZ29yaWVzLiBPa2F5LCBzbyBubyBkb2N1bWVudGF0aW9uLCBubyB1c2VyLXNwYWNlIHRvb2xzLCBub3QgZGVjb3JhdGl2ZSBsb2dnaW5nLCBhbmQgbm8gYnVpbGQgc3lzdGVtIGNoYW5nZXMuIFRoaXMgaXMgZGVmaW5pdGVseSBDIGxvZ2ljLiBBbHNvLCBubyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUgb3IgdW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzLlxuXG5MZXQncyBzZWXigKYgSSBrbm93IHRoYXQgT0NGUzIgaXMgYSBmaWxlIHN5c3RlbS4gRG9lcyB0aGlzIGdldCB0cmlnZ2VyZWQgdW5kZXIgc3l6a2FsbGVyL1FFTVU/IE9DRlMyIGNhbiBiZSBtb3VudGVkIHVzaW5nIGxvb3BiYWNrIGRldmljZXMgb3IgdGhyb3VnaCBpbWFnZSBtb3VudGluZyBhbmQgc3lzY2FsbHMsIHNvIGl0IGlzIHByb2JhYmx5IHJlYWNoYWJsZS4gSSBzaG91bGQgY2hlY2sgS2NvbmZpZyBmb3IgT0NGUzIgdG8gY29uZmlybS4gT2theSwgYXNzdW1pbmcgaXQgaXMgZW5hYmxlZCwgYmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyB3b3J0aCBmdXp6aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY5LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTk4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MzUuMjUzOTI4MzJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4MTAxNTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE9DRlMyX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL29jZnMyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL29jZnMyL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9vY2ZzMi9LY29uZmlnOjI6Y29uZmlnIE9DRlMyX0ZTXFxuZnMvb2NmczIvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy0yNy1cXG5mcy9vY2ZzMi9LY29uZmlnOjI4OmNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuZnMvb2NmczIvS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy00MS1cXG5mcy9vY2ZzMi9LY29uZmlnOjQyOmNvbmZpZyBPQ0ZTMl9GU19VU0VSU1BBQ0VfQ0xVU1RFUlxcbmZzL29jZnMyL0tjb25maWctNDMtXFx0dHJpc3RhdGUgXFxcIk9DRlMyIFVzZXJzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy01My1cXG5mcy9vY2ZzMi9LY29uZmlnOjU0OmNvbmZpZyBPQ0ZTMl9GU19TVEFUU1xcbmZzL29jZnMyL0tjb25maWctNTUtXFx0Ym9vbCBcXFwiT0NGUzIgc3RhdGlzdGljc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MzUuMzAwNzQzNTIyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjgzMDI4MDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGZpbGVzLCBleHByZXNzZWQgYXMgaWYgSSdtIHRoaW5raW5nIGFib3V0IHRoZW06XG5cbioqRGl2aW5nIGludG8gT0NGUzIgWGF0dHIgSW5pdGlhbGl6YXRpb24qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBkaWcgaW50byBob3cgT0NGUzIgaGFuZGxlcyBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cnMpIGR1cmluZyBpbml0aWFsaXphdGlvbi4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJldmlld2luZyBgZnMvb2NmczIvS2NvbmZpZ2AgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQ7IGl0IHNob3VsZCBvdXRsaW5lIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGFueSBkZXBlbmRlbmNpZXMgcmVsYXRlZCB0byB4YXR0ciBzdXBwb3J0IHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbS4gVGhpcyB3aWxsIHJlbWluZCBtZSBvZiB3aGF0IGZlYXR1cmVzIGFyZSBjb21waWxlZCBpbiBhbmQgaG93IHRoZXkgbWlnaHQgYWZmZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiBJJ20gYWJvdXQgdG8gbG9vayBhdC5cblxuVGhlbiwgSSdsbCBiZSBmb2N1c2luZyBzcGVjaWZpY2FsbHkgb24gYGZzL29jZnMyL3hhdHRyLmNgLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHRoZSBgb2NmczJfY2FsY194YXR0cl9pbml0YCBmdW5jdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgc2hvdWxkIGhhcHBlbiwgcmlnaHQ/IEknbSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiwgb3IgY29kZSBuZWFyIGl0LCB0byBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbml0aWFsIHZhbHVlcyByZWxhdGVkIHRvIHhhdHRycy4gSSdtIGludGVyZXN0ZWQgaW4gaG93IGl0IGNhbGN1bGF0ZXMgc2l6ZXMsIGFsbG9jYXRlcyBzcGFjZSwgYW5kIHBvc3NpYmx5IGhhbmRsZXMgYW55IGluaXRpYWwgZGVmYXVsdCBhdHRyaWJ1dGVzIG9yIG1ldGFkYXRhIHRoYXQgbmVlZHMgdG8gYmUgcHJlc2VudCB3aGVuIHRoZSBmaWxlc3lzdGVtIGlzIG1vdW50ZWQgb3IgYSBuZXcgaW5vZGUgaXMgY3JlYXRlZC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgc3RlcHMuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW50ZXJhY3Rpb24gd2l0aCBibG9jayBhbGxvY2F0aW9uIG9yIGlub2RlIGRhdGEuIFVuZGVyc3RhbmRpbmcgaG93IHRoZSBpbml0aWFsaXphdGlvbiB0aWVzIGludG8gdGhlIHVuZGVybHlpbmcgc3RvcmFnZSBtb2RlbCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGFuZCBzY2FsYWJpbGl0eSBvZiB0aGUgT0NGUzIgeGF0dHIgaW1wbGVtZW50YXRpb24uIEFyZSB0aGV5IHN0b3JlZCBpbmxpbmUsIGluIGEgc2VwYXJhdGUgYmxvY2ssIG9yIHRocm91Z2ggc29tZSBjbGV2ZXIgY29tYmluYXRpb24/IEknbSBsb29raW5nIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIG92ZXJhbGwgZGVzaWduIGFuZCBhbnkgcG90ZW50aWFsIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnMsIHdoaWNoIHNob3VsZCBiZSB3ZWxsIGRvY3VtZW50ZWQgaW4gY29tbWVudHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0NzozOC4xMzEwMjc3NzJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgT0NGUzJfRlNcXG4gICAzOlxcdFxcdHRyaXN0YXRlIFxcXCJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IFNZU0ZTIFxcdTAwMjZcXHUwMDI2IENPTkZJR0ZTX0ZTXFxuICAgNTpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA2OlxcdFxcdHNlbGVjdCBKQkQyXFxuICAgNzpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gICA4OlxcdFxcdHNlbGVjdCBRVU9UQVxcbiAgIDk6XFx0XFx0c2VsZWN0IFFVT1RBX1RSRUVcXG4gIDEwOlxcdFxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4gIDExOlxcdFxcdHNlbGVjdCBMRUdBQ1lfRElSRUNUX0lPXFxuICAxMjpcXHRcXHRoZWxwXFxuICAxMzpcXHRcXHQgIE9DRlMyIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGV4dGVudCBiYXNlZCBzaGFyZWQgZGlzayBjbHVzdGVyIGZpbGVcXG4gIDE0OlxcdFxcdCAgc3lzdGVtIHdpdGggbWFueSBzaW1pbGFyaXRpZXMgdG8gZXh0My4gSXQgc3VwcG9ydHMgNjQgYml0IGlub2RlXFxuICAxNTpcXHRcXHQgIG51bWJlcnMsIGFuZCBoYXMgYXV0b21hdGljYWxseSBleHRlbmRpbmcgbWV0YWRhdGEgZ3JvdXBzIHdoaWNoIG1heVxcbiAgMTY6XFx0XFx0ICBhbHNvIG1ha2UgaXQgYXR0cmFjdGl2ZSBmb3Igbm9uLWNsdXN0ZXJlZCB1c2UuXFxuICAxNzpcXHRcXG4gIDE4OlxcdFxcdCAgWW91J2xsIHdhbnQgdG8gaW5zdGFsbCB0aGUgb2NmczItdG9vbHMgcGFja2FnZSBpbiBvcmRlciB0byBhdCBsZWFzdFxcbiAgMTk6XFx0XFx0ICBnZXQgXFxcIm1vdW50Lm9jZnMyXFxcIi5cXG4gIDIwOlxcdFxcbiAgMjE6XFx0XFx0ICBQcm9qZWN0IHdlYiBwYWdlOiAgICBodHRwczovL29jZnMyLndpa2kua2VybmVsLm9yZy9cXG4gIDIyOlxcdFxcdCAgVG9vbHMgd2ViIHBhZ2U6ICAgICAgaHR0cHM6Ly9naXRodWIuY29tL21hcmtmYXNoZWgvb2NmczItdG9vbHNcXG4gIDIzOlxcdFxcdCAgT0NGUzIgbWFpbGluZyBsaXN0czogaHR0cHM6Ly9zdWJzcGFjZS5rZXJuZWwub3JnL2xpc3RzLmxpbnV4LmRldi5odG1sXFxuICAyNDpcXHRcXG4gIDI1OlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gT0NGUzIsIHNlZSB0aGUgZmlsZVxcbiAgMjY6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL29jZnMyLnJzdFxcdTAwM2UuXFxuICAyNzpcXHRcXG4gIDI4OlxcdGNvbmZpZyBPQ0ZTMl9GU19PMkNCXFxuICAyOTpcXHRcXHR0cmlzdGF0ZSBcXFwiTzJDQiBLZXJuZWxzcGFjZSBDbHVzdGVyaW5nXFxcIlxcbiAgMzA6XFx0XFx0ZGVwZW5kcyBvbiBPQ0ZTMl9GU1xcbiAgMzE6XFx0XFx0ZGVmYXVsdCB5XFxuICAzMjpcXHRcXHRoZWxwXFxuICAzMzpcXHRcXHQgIE9DRlMyIGluY2x1ZGVzIGEgc2ltcGxlIGtlcm5lbHNwYWNlIGNsdXN0ZXJpbmcgcGFja2FnZSwgdGhlIE9DRlMyXFxuICAzNDpcXHRcXHQgIENsdXN0ZXIgQmFzZS4gIEl0IG9ubHkgcmVxdWlyZXMgYSB2ZXJ5IHNtYWxsIHVzZXJzcGFjZSBjb21wb25lbnRcXG4gIDM1OlxcdFxcdCAgdG8gY29uZmlndXJlIGl0LiBUaGlzIGNvbWVzIHdpdGggdGhlIHN0YW5kYXJkIG9jZnMyLXRvb2xzIHBhY2thZ2UuXFxuICAzNjpcXHRcXHQgIE8yQ0IgaXMgbGltaXRlZCB0byBtYWludGFpbmluZyBhIGNsdXN0ZXIgZm9yIE9DRlMyIGZpbGUgc3lzdGVtcy5cXG4gIDM3OlxcdFxcdCAgSXQgY2Fubm90IG1hbmFnZSBhbnkgb3RoZXIgY2x1c3RlciBhcHBsaWNhdGlvbnMuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgSXQgaXMgYWx3YXlzIHNhZmUgdG8gc2F5IFkgaGVyZSwgYXMgdGhlIGNsdXN0ZXJpbmcgbWV0aG9kIGlzXFxuICA0MDpcXHRcXHQgIHJ1bi10aW1lIHNlbGVjdGFibGUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjM4LjEzMTEwMDQ1MloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MzUzNzQ0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqWGF0dHIgSW52ZXN0aWdhdGlvbiBCZWdpbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgb2NmczJgIGV4dGVuZGVkIGF0dHJpYnV0ZSBjb2RlLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBqdW1wIGludG8gYGZzL29jZnMyL3hhdHRyLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGFuZCBob3cgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgaXMgYWN0dWFsbHkgYmVpbmcgdXRpbGl6ZWQuIEkgd2FudCB0byBzZWUgKndoZXJlKiBpdCdzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiB0aGUgT0NGUzIgZmlsZXN5c3RlbSBjb2RlLiBUaGlzIHdpbGwgaGVscCBtZSB1bmRlcnN0YW5kIHRoZSBwdXJwb3NlIGFuZCBjb250ZXh0IG9mIHRoYXQgZnVuY3Rpb24sIHByb2JhYmx5IGluIHRoZSBwcm9jZXNzIG9mIGNhbGN1bGF0aW5nIHNwYWNlIG5lZWRlZCB0byBzdG9yZSB0aGUgYXR0cmlidXRlcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGltcGxlbWVudGF0aW9uIGxvb2tzIGxpa2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzNjQsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjM5Ljc2NjQ3NjgzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9vY2ZzMi94YXR0ci5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYzNSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzU6XFx0XFx0cmV0dXJuIHJldDtcXG4gNjM2OlxcdH1cXG4gNjM3OlxcdFxcbiA2Mzg6XFx0aW50IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwgdW1vZGVfdCBtb2RlLFxcbiA2Mzk6XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgb2NmczJfc2VjdXJpdHlfeGF0dHJfaW5mbyAqc2ksXFxuIDY0MDpcXHRcXHRcXHRcXHQgIGludCAqd2FudF9jbHVzdGVycywgaW50ICp4YXR0cl9jcmVkaXRzLFxcbiA2NDE6XFx0XFx0XFx0XFx0ICBpbnQgKndhbnRfbWV0YSwgc3RydWN0IG9jZnMyX2FjbF9zdGF0ZSAqYWNsX3N0YXRlKVxcbiA2NDI6XFx0e1xcbiA2NDM6XFx0XFx0c3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItXFx1MDAzZWlfc2IpO1xcbiA2NDQ6XFx0XFx0aW50IHNfc2l6ZSA9IDAsIGFfc2l6ZSA9IDAsIGFjbF9sZW4gPSAwLCBuZXdfY2x1c3RlcnM7XFxuIDY0NTpcXHRcXG4gNjQ2OlxcdFxcdGlmIChzaS1cXHUwMDNlZW5hYmxlKVxcbiA2NDc6XFx0XFx0XFx0c19zaXplID0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKHN0cmxlbihzaS1cXHUwMDNlbmFtZSksXFxuIDY0ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpLVxcdTAwM2V2YWx1ZV9sZW4pO1xcbiA2NDk6XFx0XFxuIDY1MDpcXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbiA2NTE6XFx0XFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbiA2NTI6XFx0XFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wtXFx1MDAzZWFfY291bnQgKlxcbiA2NTM6XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuIDY1NDpcXHRcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbiA2NTU6XFx0XFx0XFx0fVxcbiA2NTY6XFx0XFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlYWNsKSB7XFxuIDY1NzpcXHRcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbiA2NTg6XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuIDY1OTpcXHRcXHRcXHRcXHRhX3NpemUgKz0gb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKDAsIGFjbF9sZW4pO1xcbiA2NjA6XFx0XFx0XFx0fVxcbiA2NjE6XFx0XFx0fVxcbiA2NjI6XFx0XFxuIDY2MzpcXHRcXHRpZiAoIShzX3NpemUgKyBhX3NpemUpKVxcbiA2NjQ6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDY2NTpcXHRcXG4gNjY2OlxcdFxcdC8qXFxuIDY2NzpcXHRcXHQgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpc1xcbiA2Njg6XFx0XFx0ICogMjU2KG5hbWUpICsgODAodmFsdWUpICsgMTYoZW50cnkpID0gMzUyIGJ5dGVzLFxcbiA2Njk6XFx0XFx0ICogVGhlIG1heCBzcGFjZSBvZiBhY2wgeGF0dHIgdGFrZW4gaW5saW5lIGlzXFxuIDY3MDpcXHRcXHQgKiA4MCh2YWx1ZSkgKyAxNihlbnRyeSkgKiAyKGlmIGRpcmVjdG9yeSkgPSAxOTIgYnl0ZXMsXFxuIDY3MTpcXHRcXHQgKiB3aGVuIGJsb2Nrc2l6ZSA9IDUxMiwgbWF5IHJlc2VydmUgb25lIG1vcmUgY2x1c3RlciBmb3JcXG4gNjcyOlxcdFxcdCAqIHhhdHRyIGJ1Y2tldCwgb3RoZXJ3aXNlIHJlc2VydmUgb25lIG1ldGFkYXRhIGJsb2NrXFxuIDY3MzpcXHRcXHQgKiBmb3IgdGhlbSBpcyBvay5cXG4gNjc0OlxcdFxcdCAqIElmIHRoaXMgaXMgYSBuZXcgZGlyZWN0b3J5IHdpdGggaW5saW5lIGRhdGEsXFxuIDY3NTpcXHRcXHQgKiB3ZSBjaG9vc2UgdG8gcmVzZXJ2ZSB0aGUgZW50aXJlIGlubGluZSBhcmVhIGZvclxcbiA2NzY6XFx0XFx0ICogZGlyZWN0b3J5IGNvbnRlbnRzIGFuZCBmb3JjZSBhbiBleHRlcm5hbCB4YXR0ciBibG9jay5cXG4gNjc3OlxcdFxcdCAqL1xcbiA2Nzg6XFx0XFx0aWYgKGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSB8fFxcbiA2Nzk6XFx0XFx0ICAgIChTX0lTRElSKG1vZGUpIFxcdTAwMjZcXHUwMDI2IG9jZnMyX3N1cHBvcnRzX2lubGluZV9kYXRhKG9zYikpIHx8XFxuIDY4MDpcXHRcXHQgICAgKHNfc2l6ZSArIGFfc2l6ZSkgXFx1MDAzZSBPQ0ZTMl9YQVRUUl9GUkVFX0lOX0lCT0RZKSB7XFxuIDY4MTpcXHRcXHRcXHQqd2FudF9tZXRhID0gKndhbnRfbWV0YSArIDE7XFxuIDY4MjpcXHRcXHRcXHQqeGF0dHJfY3JlZGl0cyArPSBPQ0ZTMl9YQVRUUl9CTE9DS19DUkVBVEVfQ1JFRElUUztcXG4gNjgzOlxcdFxcdH1cXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0aWYgKGRpci1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUgPT0gT0NGUzJfTUlOX0JMT0NLU0laRSBcXHUwMDI2XFx1MDAyNlxcbiA2ODY6XFx0XFx0ICAgIChzX3NpemUgKyBhX3NpemUpIFxcdTAwM2UgT0NGUzJfWEFUVFJfRlJFRV9JTl9CTE9DSyhkaXIpKSB7XFxuIDY4NzpcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSAxO1xcbiA2ODg6XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfYmxvY2tzX3Blcl94YXR0cl9idWNrZXQoZGlyLVxcdTAwM2VpX3NiKTtcXG4gNjg5OlxcdFxcdH1cXG4gNjkwOlxcdFxcbiA2OTE6XFx0XFx0LypcXG4gNjkyOlxcdFxcdCAqIHJlc2VydmUgY3JlZGl0cyBhbmQgY2x1c3RlcnMgZm9yIHhhdHRycyB3aGljaCBoYXMgbGFyZ2UgdmFsdWVcXG4gNjkzOlxcdFxcdCAqIGFuZCBoYXZlIHRvIGJlIHNldCBvdXRzaWRlXFxuIDY5NDpcXHRcXHQgKi9cXG4gNjk1OlxcdFxcdGlmIChzaS1cXHUwMDNlZW5hYmxlIFxcdTAwMjZcXHUwMDI2IHNpLVxcdTAwM2V2YWx1ZV9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbiA2OTY6XFx0XFx0XFx0bmV3X2NsdXN0ZXJzID0gb2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4gNjk3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHNpLVxcdTAwM2V2YWx1ZV9sZW4pO1xcbiA2OTg6XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz0gb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cXHUwMDNlaV9zYixcXG4gNjk5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIG5ld19jbHVzdGVycyk7XFxuIDcwMDpcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIDcwMTpcXHRcXHR9XFxuIDcwMjpcXHRcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbiA3MDM6XFx0XFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbiA3MDQ6XFx0XFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wtXFx1MDAzZWFfY291bnQgKlxcbiA3MDU6XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuIDcwNjpcXHRcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuIDcwNzpcXHRcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPVxcbiA3MDg6XFx0XFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4gNzA5OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBhY2xfbGVuKTtcXG4gNzEwOlxcdFxcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9XFxuIDcxMTpcXHRcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbiA3MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19jbHVzdGVycyk7XFxuIDcxMzpcXHRcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIDcxNDpcXHRcXHRcXHRcXHR9XFxuIDcxNTpcXHRcXHRcXHR9XFxuIDcxNjpcXHRcXHRcXHRpZiAoYWNsX3N0YXRlLVxcdTAwM2VhY2wpIHtcXG4gNzE3OlxcdFxcdFxcdFxcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXFx1MDAzZWFjbC1cXHUwMDNlYV9jb3VudCAqXFxuIDcxODpcXHRcXHRcXHRcXHRcXHQgIHNpemVvZihzdHJ1Y3Qgb2NmczJfYWNsX2VudHJ5KTtcXG4gNzE5OlxcdFxcdFxcdFxcdGlmIChhY2xfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4gNzIwOlxcdFxcdFxcdFxcdFxcdG5ld19jbHVzdGVycyA9XFxuIDcyMTpcXHRcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc19mb3JfYnl0ZXMoZGlyLVxcdTAwM2VpX3NiLFxcbiA3MjI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGFjbF9sZW4pO1xcbiA3MjM6XFx0XFx0XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz1cXG4gNzI0OlxcdFxcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuIDcyNTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgbmV3X2NsdXN0ZXJzKTtcXG4gNzI2OlxcdFxcdFxcdFxcdFxcdCp3YW50X2NsdXN0ZXJzICs9IG5ld19jbHVzdGVycztcXG4gNzI3OlxcdFxcdFxcdFxcdH1cXG4gNzI4OlxcdFxcdFxcdH1cXG4gNzI5OlxcdFxcdH1cXG4gNzMwOlxcdFxcbiA3MzE6XFx0XFx0cmV0dXJuIDA7XFxuIDczMjpcXHR9XFxuIDczMzpcXHRcXG4gNzM0OlxcdHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfZXh0ZW5kX2FsbG9jYXRpb24oc3RydWN0IGlub2RlICppbm9kZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6MzkuNzY2NzczOTU3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI3MTQ1NTcwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhhdCBmdW5jdGlvbiBjYWxsOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbGVycyBvZiBgb2NmczJfY2FsY194YXR0cl9pbml0YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgb2JqZWN0aXZlIGlzIHRvIHVuZGVyc3RhbmQgaG93IGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBPQ0ZTMiBmaWxlc3lzdGVtIGNvZGUuIEtub3dpbmcgaXRzIGNhbGxlcnMgd2lsbCB0ZWxsIG1lIGEgbG90IGFib3V0IGl0cyBwdXJwb3NlIGFuZCwgcG90ZW50aWFsbHksIGFueSBkZXBlbmRlbmNpZXMgaXQgaGFzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2h5KiB3ZSBhcmUgaW50ZXJlc3RlZCBpbiB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uLiBJcyB0aGVyZSBhIHBhcnRpY3VsYXIgY29uY2Vybiwgb3IgYXJlIHdlIGp1c3QgcmV2aWV3aW5nIHRoZSBjb2RlIGluIGRldGFpbD8gTGV0IG1lIHN0YXJ0IGJ5IGlkZW50aWZ5aW5nIHdoZXJlIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGlzIGNhbGxlZCBmcm9tLiBJJ2xsIG5lZWQgdG8gdXNlIG15IHRvb2xzIC0gZ3JlcCwgY3Njb3BlLCBvciBwb3NzaWJseSBhIG1vcmUgYWR2YW5jZWQgY29kZSBuYXZpZ2F0aW9uIHRvb2wsIGRlcGVuZGluZyBvbiB0aGUgY29kZWJhc2UgLSB0byBmaW5kIGFsbCBpbnN0YW5jZXMgb2YgdGhhdCBmdW5jdGlvbiBjYWxsLiBBcyBhbiBleHBlcnQsIEknbSBleHBlY3Rpbmcgc29tZSBzcGVjaWZpYyBwYXR0ZXJucy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIHBhc3NlZCBpbiwgdGhlIGNvbnRleHQgb2YgdGhlIGluaXRpYWxpemF0aW9uLCBhbmQgaG93IHRoZSByZXR1cm4gdmFsdWUgKGlmIGFueSkgaXMgYmVpbmcgdXNlZC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgc2V0dXAsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggd2l0aCBkeW5hbWljIGFsbG9jYXRpb24gYW5kIGVycm9yIGhhbmRsaW5nPyBJIHdpbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZXJyb3IgY2hlY2tpbmcgcmVsYXRlZCB0byB0aGUgcmV0dXJuIHZhbHVlLCBiZWNhdXNlIHRoYXQgd2lsbCBiZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIHJvYnVzdG5lc3Mgb2YgdGhlIHN5c3RlbS4gSSBhbHNvIHdpbGwgd2FudCB0byBjb25zaWRlciB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhyZWFkcy4gVGhpcyBjb3VsZCB0ZWxsIG1lIGFib3V0IGFueSBzeW5jaHJvbml6YXRpb24gaXNzdWVzLCBvciB3aGV0aGVyIHRoZXJlIG1pZ2h0IGJlIHJhY2UgY29uZGl0aW9ucyB0aGF0IG5lZWQgZnVydGhlciBzY3J1dGlueS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzM2NiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6NDIuMDM4MjMyMjg3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyNjc4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzM4LVxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbmZzL29jZnMyL25hbWVpLmM6MzM5OlxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuZnMvb2NmczIvbmFtZWkuYy0zNDAtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcXHUwMDI2d2FudF9tZXRhLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MDA9aW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjM3LVxcbmZzL29jZnMyL3hhdHRyLmM6NjM4OmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTYzOS1cXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9NjE9c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcXG5mcy9vY2ZzMi94YXR0ci5oOjYyOmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG5mcy9vY2ZzMi94YXR0ci5oLTYzLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0Nzo0Mi4wODc2NjQ5NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQ3MTE2NzcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipXb3J0aEZ1enppbmcgRGVjaXNpb24gZm9yIGZzL29jZnMyL3hhdHRyLmMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gbWFrZSB0aGUgYFdvcnRoRnV6emluZ2AgZGVjaXNpb24uIEkgaGF2ZSB0aGUgcnVsZXMgaW4gZnJvbnQgb2YgbWUsIHNvIGxldCdzIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIHRoZW0uIFJ1bGUgbnVtYmVyIHR3byBzYXlzIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBvbmx5IGlmIGFsbCB0aGUgbW9kaWZpZWQgY29kZSBmYWxscyAqc3RyaWN0bHkqIGludG8gb25lIG9mIHRoZSBzcGVjaWZpZWQgbmVnYXRpdmUgY3JpdGVyaWEuIFRoZSB0aGlyZCBydWxlIHNheXMgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaWYgaXQgdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLlxuXG5Ob3csIG15IHBhdGNoIHRvdWNoZXMgQyBleGVjdXRhYmxlIGNvZGUgc3BlY2lmaWNhbGx5IGluIGBmcy9vY2ZzMi94YXR0ci5jYC4gVGhpcyBpcyBhbiBpbi10cmVlIGZpbGVzeXN0ZW0gZHJpdmVyLCBhIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgYW5kIGl0J3MgcmVhY2hhYmxlIHZpYSBhIGxvb3AgZGV2aWNlIG9yIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4gRXZlbiB0aG91Z2ggdGhlIHBhdGNoIHNlZW1zIG1pbm9yLCBqdXN0IHJlbW92aW5nIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZSBgcmV0YCwgSSBuZWVkIHRvIGJlIGNhcmVmdWwsIGFuZCB0aGUgcnVsZXMgaGlnaGxpZ2h0IHRoaXMuIFRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IGNhdXRpb24gYWdhaW5zdCBibGluZGx5IHRydXN0aW5nIGNsYWltcyBvZiBcIm5vIGZ1bmN0aW9uYWwgY2hhbmdlXCIgb3IgXCJyZWZhY3RvcmluZy5cIiBUaGV5IHNheSBpZiAqYW55KiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIEkgKm11c3QqIGZ1enogaXQuXG5cblRoaXMgY29kZSBpbiBgZnMvb2NmczJgIGRvZXNuJ3QgZmFsbCBpbnRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSDigJMgZG9jdW1lbnRhdGlvbiwgdXNlci1zcGFjZSB0b29scywgbG9nZ2luZywgYnVpbGQgc3lzdGVtIGNoYW5nZXMsIHVucmVhY2hhYmxlIGhhcmR3YXJlLCB0ZWFyZG93biBjYWxsYmFja3MsIG9yIGFyY2gtc3BlY2lmaWMgY29kZSDigJMgc28gYmFzZWQgb24gdGhlIHJ1bGVzLCBgV29ydGhGdXp6aW5nPXRydWVgLlxuXG5Ob3cgdGhhdCBJJ3ZlIGRlY2lkZWQgaXQncyB3b3J0aCBmdXp6aW5nLCBJIHNob3VsZCBmaWd1cmUgb3V0IHdoaWNoIHN5bWJvbHMgdG8gZm9jdXMgb24uIFRoZSBwYXRjaCBzcGVjaWZpY2FsbHkgbW9kaWZpZXMgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAuIEkgdGhpbmsgSSBoYXZlIHRvIGlkZW50aWZ5IGFueSBvdGhlciBmb2N1cyBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcy4gYG9jZnMyX21rbm9kYCBpcyBhIGNhbGxlciBmdW5jdGlvbiBmcm9tIGBmcy9vY2ZzMi9uYW1laS5jYCwgYW5kIGlmIHRoZXJlIGFyZSBvdGhlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDc6NDcuNTU4ODQwMTU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk2MjY5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvY2ZzMl9jYWxjX3hhdHRyX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvbmFtZWkuYz0yMzA9c3RhdGljIGludCBvY2ZzMl9ta25vZChzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL29jZnMyL25hbWVpLmMtMzM4LVxcdC8qIGNhbGN1bGF0ZSBtZXRhIGRhdGEvY2x1c3RlcnMgZm9yIHNldHRpbmcgc2VjdXJpdHkgYW5kIGFjbCB4YXR0ciAqL1xcbmZzL29jZnMyL25hbWVpLmM6MzM5OlxcdHN0YXR1cyA9IG9jZnMyX2NhbGNfeGF0dHJfaW5pdChkaXIsIG1vZGUsIFxcdTAwMjZzaSwgXFx1MDAyNndhbnRfY2x1c3RlcnMsXFxuZnMvb2NmczIvbmFtZWkuYy0zNDAtXFx0XFx0XFx0XFx0ICAgICAgIFxcdTAwMjZ4YXR0cl9jcmVkaXRzLCBcXHUwMDI2d2FudF9tZXRhLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYz02MDA9aW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjM3LVxcbmZzL29jZnMyL3hhdHRyLmM6NjM4OmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG5mcy9vY2ZzMi94YXR0ci5jLTYzOS1cXHRcXHRcXHQgIHN0cnVjdCBvY2ZzMl9zZWN1cml0eV94YXR0cl9pbmZvICpzaSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmg9NjE9c3RydWN0IG9jZnMyX2FjbF9zdGF0ZTtcXG5mcy9vY2ZzMi94YXR0ci5oOjYyOmludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG5mcy9vY2ZzMi94YXR0ci5oLTYzLVxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0Nzo0Ny42MDk4MDc5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjM3NjU3OTk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEludmVzdGlnYXRpb24gaW50byBPQ0ZTMiBYYXR0ciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24sIHdoaWNoIEkga25vdyBpcyBpbiBgZnMvb2NmczIveGF0dHIuY2AuIEknbSBhbHNvIGdvaW5nIHRvIGtlZXAgYW4gZXllIG9uIGBvY2ZzMl9ta25vZGAsIHNpbmNlIHRoYXQncyBhIGtleSBlbnRyeSBwb2ludCBmb3IgdGhpbmdzIGxpa2UgYG1rZGlyYCwgYGNyZWF0ZWAsIGBzeW1saW5rYCwgYW5kIGBta25vZGAgb3BlcmF0aW9ucyB3aXRoaW4gT0NGUzIsIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nLiBJdCBtYWtlcyBzZW5zZSB0byBpbmNsdWRlIGl0LCBldmVuIGlmIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGFwcGVhcnMgdG8gYmUgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QgaGVyZS5cblxuTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNvbmZpZ3VyYXRpb25zIGFyZSByZWxldmFudC4gVGhlIGZpcnN0IHN0ZXAgaXMgdG8gY2hlY2sgYEVuYWJsZUNvbmZpZ3NgIGFuZCB0aGVuIGBmcy9vY2ZzMi9NYWtlZmlsZWAgdG8gZXN0YWJsaXNoIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHJlcXVpcmVtZW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTcxNCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0Nzo0OS44NDc0NjgxNjhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzM1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRjY2ZsYWdzLXkgOj0gLUkkKHNyYylcXG4gICAzOlxcdFxcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSBcXHRcXFxcXFxuICAgNTpcXHRcXHRvY2ZzMi5vXFx0XFx0XFx0XFxcXFxcbiAgIDY6XFx0XFx0b2NmczJfc3RhY2tnbHVlLm9cXG4gICA3OlxcdFxcbiAgIDg6XFx0b2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICs9IG9jZnMyX3N0YWNrX28yY2Iub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX09DRlMyX0ZTX1VTRVJTUEFDRV9DTFVTVEVSKSArPSBvY2ZzMl9zdGFja191c2VyLm9cXG4gIDEwOlxcdFxcbiAgMTE6XFx0b2NmczItb2JqcyA6PSBcXFxcXFxuICAxMjpcXHRcXHRhbGxvYy5vIFxcdFxcdFxcXFxcXG4gIDEzOlxcdFxcdGFvcHMubyBcXHRcXHRcXHRcXFxcXFxuICAxNDpcXHRcXHRibG9ja2NoZWNrLm9cXHRcXHRcXFxcXFxuICAxNTpcXHRcXHRidWZmZXJfaGVhZF9pby5vXFx0XFxcXFxcbiAgMTY6XFx0XFx0ZGNhY2hlLm8gXFx0XFx0XFxcXFxcbiAgMTc6XFx0XFx0ZGlyLm8gXFx0XFx0XFx0XFxcXFxcbiAgMTg6XFx0XFx0ZGxtZ2x1ZS5vIFxcdFxcdFxcXFxcXG4gIDE5OlxcdFxcdGV4cG9ydC5vIFxcdFxcdFxcXFxcXG4gIDIwOlxcdFxcdGV4dGVudF9tYXAubyBcXHRcXHRcXFxcXFxuICAyMTpcXHRcXHRmaWxlLm8gXFx0XFx0XFx0XFxcXFxcbiAgMjI6XFx0XFx0aGVhcnRiZWF0Lm8gXFx0XFx0XFxcXFxcbiAgMjM6XFx0XFx0aW5vZGUubyBcXHRcXHRcXFxcXFxuICAyNDpcXHRcXHRpb2N0bC5vIFxcdFxcdFxcXFxcXG4gIDI1OlxcdFxcdGpvdXJuYWwubyBcXHRcXHRcXFxcXFxuICAyNjpcXHRcXHRsb2NhbGFsbG9jLm8gXFx0XFx0XFxcXFxcbiAgMjc6XFx0XFx0bG9ja3Mub1xcdFxcdFxcdFxcXFxcXG4gIDI4OlxcdFxcdG1tYXAubyBcXHRcXHRcXHRcXFxcXFxuICAyOTpcXHRcXHRuYW1laS5vIFxcdFxcdFxcXFxcXG4gIDMwOlxcdFxcdHJlZmNvdW50dHJlZS5vXFx0XFx0XFxcXFxcbiAgMzE6XFx0XFx0cmVzZXJ2YXRpb25zLm9cXHRcXHRcXFxcXFxuICAzMjpcXHRcXHRtb3ZlX2V4dGVudHMub1xcdFxcdFxcXFxcXG4gIDMzOlxcdFxcdHJlc2l6ZS5vXFx0XFx0XFxcXFxcbiAgMzQ6XFx0XFx0c2xvdF9tYXAubyBcXHRcXHRcXFxcXFxuICAzNTpcXHRcXHRzdWJhbGxvYy5vIFxcdFxcdFxcXFxcXG4gIDM2OlxcdFxcdHN1cGVyLm8gXFx0XFx0XFxcXFxcbiAgMzc6XFx0XFx0c3ltbGluay5vIFxcdFxcdFxcXFxcXG4gIDM4OlxcdFxcdHN5c2ZpbGUubyBcXHRcXHRcXFxcXFxuICAzOTpcXHRcXHR1cHRvZGF0ZS5vXFx0XFx0XFxcXFxcbiAgNDA6XFx0XFx0cXVvdGFfbG9jYWwub1xcdFxcdFxcXFxcXG4gIDQxOlxcdFxcdHF1b3RhX2dsb2JhbC5vXFx0XFx0XFxcXFxcbiAgNDI6XFx0XFx0eGF0dHIub1xcdFxcdFxcdFxcXFxcXG4gIDQzOlxcdFxcdGFjbC5vXFx0XFxcXFxcbiAgNDQ6XFx0XFx0ZmlsZWNoZWNrLm9cXG4gIDQ1OlxcdFxcbiAgNDY6XFx0b2NmczJfc3RhY2tnbHVlLW9ianMgOj0gc3RhY2tnbHVlLm9cXG4gIDQ3OlxcdG9jZnMyX3N0YWNrX28yY2Itb2JqcyA6PSBzdGFja19vMmNiLm9cXG4gIDQ4OlxcdG9jZnMyX3N0YWNrX3VzZXItb2JqcyA6PSBzdGFja191c2VyLm9cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0b2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSBkbG1mcy9cXG4gIDUxOlxcdCMgY2x1c3Rlci8gaXMgYWx3YXlzIG5lZWRlZCB3aGVuIE9DRlMyX0ZTIGZvciBtYXNrbG9nIHN1cHBvcnRcXG4gIDUyOlxcdG9iai0kKENPTkZJR19PQ0ZTMl9GUykgKz0gY2x1c3Rlci9cXG4gIDUzOlxcdG9iai0kKENPTkZJR19PQ0ZTMl9GU19PMkNCKSArPSBkbG0vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjQ5Ljg0NzU0MzAxOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTY3NDc2MzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIE9DRlMyIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYENPTkZJR19PQ0ZTMl9GU2AgaXMgdGhlIGtleS4gVGhhdCBidWlsZHMgYG9jZnMyLm9gLCBhbmQgaW1wb3J0YW50bHksIHRoYXQgaW5jbHVkZXMgYHhhdHRyLm9gLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgdG8gc2VlIGlmIEkgbmVlZCB0byBhZGp1c3QgYW55IGtlcm5lbCBvcHRpb25zIGZvciBteSBzcGVjaWZpYyBzZXR1cC4gTGV0J3Mgc2VlIHdoYXQgYGZzL29jZnMyL0tjb25maWdgIHRlbGxzIG1lLlxuXG5SaWdodCwgYENPTkZJR19PQ0ZTMl9GU2AgZGVwZW5kcyBvbiBgSU5FVCBcdTAwMjZcdTAwMjYgU1lTRlMgXHUwMDI2XHUwMDI2IENPTkZJR0ZTX0ZTYC4gVGhhdCdzIHJlYXNvbmFibGU7IG5ldHdvcmsgZnVuY3Rpb25hbGl0eSwgc3lzdGVtIGZpbGUgc3VwcG9ydCwgYW5kIGNvbmZpZ2ZzLCBubyBzdXJwcmlzZXMgdGhlcmUuIEFuZCB0aGVuIHRoZXJlIGFyZSBhIGJ1bmNoIG9mIFwic2VsZWN0XCIgc3RhdGVtZW50czogYEJVRkZFUl9IRUFEYCwgYEpCRDJgLCBgQ1JDMzJgLCBgUVVPVEFgLCBgUVVPVEFfVFJFRWAsIGBGU19QT1NJWF9BQ0xgLCBhbmQgYExFR0FDWV9ESVJFQ1RfSU9gLiBPa2F5LCB0aGVzZSBhcmUgYWxsIHN1cHBvcnRpbmcgY29tcG9uZW50cyBvciBmZWF0dXJlcyB0aGF0IGFyZSBiZWluZyBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgd2hlbiBJIGNob29zZSBPQ0ZTMi4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRob3NlIGZvciBsYXRlciwgbWF5YmUgdGhleSBhcmUgZ29vZCBkZWZhdWx0cy5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYE9DRlMyX0ZTYCBkb2Vzbid0IGhhdmUgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYElORVRgLCBgU1lTRlNgLCBhbmQgYENPTkZJR0ZTX0ZTYCBhcmUgcHJldHR5IHN0YW5kYXJkIGFuZCBJIHNob3VsZCBiZSBhYmxlIHRvIGRlYWwgd2l0aCB0aG9zZS4gU28sIG15IGNvcmUgbmVlZHMgYXJlIHJlYWxseSBqdXN0IGBPQ0ZTMl9GU2AuIEknbGwgY3Jvc3MgcmVmZXJlbmNlIHRoaXMgd2l0aCB0aGUgbm90ZXMuIExldCdzIGRvIGEgcXVpY2sgY2hlY2ssIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBjaGVja2luZyBmb3IgYW55IGtlcm5lbCBjb25maWcgZmxhZ3MgdGhhdCAqYXJlbid0KiBwcmVmaXhlZCB3aXRoIGBDT05GSUdfYC4gSnVzdCBsb29raW5nIGF0IHRoZSBwcmltYXJ5IG9uZXMuXG5cbkkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb3B0aW9ucyByZWxhdGVkIHRvIEFDTHMgd2l0aGluIE9DRlMyIGl0c2VsZi4gSSdsbCBzZWFyY2ggZm9yIEFDTC1yZWxhdGVkIGNvbmZpZ3MgZGlyZWN0bHkgd2l0aGluIGBmcy9vY2ZzMmAuIEkgaGF2ZSBhIGZlZWxpbmcgYE9DRlMyX0ZTX1BPU0lYX0FDTGAgaXMgd2hhdCBJIGFtIGxvb2tpbmcgZm9yIGJ1dCBhIHF1aWNrIGdyZXAgaXMgcHJvYmFibHkgdGhlIGJlc3Qgd2F5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDg2MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjU0LjAxNTAyMjI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjUxNTkxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJBQ0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvb2NmczJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvb2NmczIvS2NvbmZpZz0yPWNvbmZpZyBPQ0ZTMl9GU1xcbi0tXFxuZnMvb2NmczIvS2NvbmZpZy05LVxcdHNlbGVjdCBRVU9UQV9UUkVFXFxuZnMvb2NmczIvS2NvbmZpZzoxMDpcXHRzZWxlY3QgRlNfUE9TSVhfQUNMXFxuZnMvb2NmczIvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbi0tXFxuZnMvb2NmczIvYWNsLmM9MzQ9c3RhdGljIHN0cnVjdCBwb3NpeF9hY2wgKm9jZnMyX2FjbF9mcm9tX3hhdHRyKGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSlcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTU1LVxcdFxcdHN3aXRjaChhY2wtXFx1MDAzZWFfZW50cmllc1tuXS5lX3RhZykge1xcbmZzL29jZnMyL2FjbC5jOjU2OlxcdFxcdGNhc2UgQUNMX1VTRVI6XFxuZnMvb2NmczIvYWNsLmMtNTctXFx0XFx0XFx0YWNsLVxcdTAwM2VhX2VudHJpZXNbbl0uZV91aWQgPVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtNjAtXFx0XFx0XFx0YnJlYWs7XFxuZnMvb2NmczIvYWNsLmM6NjE6XFx0XFx0Y2FzZSBBQ0xfR1JPVVA6XFxuZnMvb2NmczIvYWNsLmMtNjItXFx0XFx0XFx0YWNsLVxcdTAwM2VhX2VudHJpZXNbbl0uZV9naWQgPVxcbi0tXFxuZnMvb2NmczIvYWNsLmM9Nzg9c3RhdGljIHZvaWQgKm9jZnMyX2FjbF90b194YXR0cihjb25zdCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wsIHNpemVfdCAqc2l6ZSlcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTk0LVxcdFxcdHN3aXRjaChhY2wtXFx1MDAzZWFfZW50cmllc1tuXS5lX3RhZykge1xcbmZzL29jZnMyL2FjbC5jOjk1OlxcdFxcdGNhc2UgQUNMX1VTRVI6XFxuZnMvb2NmczIvYWNsLmMtOTYtXFx0XFx0XFx0ZW50cnktXFx1MDAzZWVfaWQgPSBjcHVfdG9fbGUzMihcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTk5LVxcdFxcdFxcdGJyZWFrO1xcbmZzL29jZnMyL2FjbC5jOjEwMDpcXHRcXHRjYXNlIEFDTF9HUk9VUDpcXG5mcy9vY2ZzMi9hY2wuYy0xMDEtXFx0XFx0XFx0ZW50cnktXFx1MDAzZWVfaWQgPSBjcHVfdG9fbGUzMihcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTEwNS1cXHRcXHRkZWZhdWx0OlxcbmZzL29jZnMyL2FjbC5jOjEwNjpcXHRcXHRcXHRlbnRyeS1cXHUwMDNlZV9pZCA9IGNwdV90b19sZTMyKEFDTF9VTkRFRklORURfSUQpO1xcbmZzL29jZnMyL2FjbC5jLTEwNy1cXHRcXHRcXHRicmVhaztcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTExMz1zdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqb2NmczJfZ2V0X2FjbF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgaW50IHR5cGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0xMjEtXFx0c3dpdGNoICh0eXBlKSB7XFxuZnMvb2NmczIvYWNsLmM6MTIyOlxcdGNhc2UgQUNMX1RZUEVfQUNDRVNTOlxcbmZzL29jZnMyL2FjbC5jOjEyMzpcXHRcXHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUztcXG5mcy9vY2ZzMi9hY2wuYy0xMjQtXFx0XFx0YnJlYWs7XFxuZnMvb2NmczIvYWNsLmM6MTI1OlxcdGNhc2UgQUNMX1RZUEVfREVGQVVMVDpcXG5mcy9vY2ZzMi9hY2wuYzoxMjY6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL2FjbC5jLTEyNy1cXHRcXHRicmVhaztcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTE1OD1zdGF0aWMgaW50IG9jZnMyX2FjbF9zZXRfbW9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMjExLS8qXFxuZnMvb2NmczIvYWNsLmM6MjEyOiAqIFNldCB0aGUgYWNjZXNzIG9yIGRlZmF1bHQgQUNMIG9mIGFuIGlub2RlLlxcbmZzL29jZnMyL2FjbC5jLTIxMy0gKi9cXG5mcy9vY2ZzMi9hY2wuYz0yMTQ9c3RhdGljIGludCBvY2ZzMl9zZXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yMzAtXFx0c3dpdGNoICh0eXBlKSB7XFxuZnMvb2NmczIvYWNsLmM6MjMxOlxcdGNhc2UgQUNMX1RZUEVfQUNDRVNTOlxcbmZzL29jZnMyL2FjbC5jOjIzMjpcXHRcXHRuYW1lX2luZGV4ID0gT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTUztcXG5mcy9vY2ZzMi9hY2wuYy0yMzMtXFx0XFx0YnJlYWs7XFxuZnMvb2NmczIvYWNsLmM6MjM0OlxcdGNhc2UgQUNMX1RZUEVfREVGQVVMVDpcXG5mcy9vY2ZzMi9hY2wuYzoyMzU6XFx0XFx0bmFtZV9pbmRleCA9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL2FjbC5jLTIzNi1cXHRcXHRpZiAoIVNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0yNjM9aW50IG9jZnMyX2lvcF9zZXRfYWNsKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0yNzMtXFx0XFx0cmV0dXJuIGhhZF9sb2NrO1xcbmZzL29jZnMyL2FjbC5jOjI3NDpcXHRpZiAodHlwZSA9PSBBQ0xfVFlQRV9BQ0NFU1MgXFx1MDAyNlxcdTAwMjYgYWNsKSB7XFxuZnMvb2NmczIvYWNsLmMtMjc1LVxcdFxcdHVtb2RlX3QgbW9kZTtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTI5Mz1zdHJ1Y3QgcG9zaXhfYWNsICpvY2ZzMl9pb3BfZ2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgYm9vbCByY3UpXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zMDQtXFx0b3NiID0gT0NGUzJfU0IoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbmZzL29jZnMyL2FjbC5jOjMwNTpcXHRpZiAoIShvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSlcXG5mcy9vY2ZzMi9hY2wuYy0zMDYtXFx0XFx0cmV0dXJuIE5VTEw7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0zMjE9aW50IG9jZnMyX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKVxcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzI5LVxcbmZzL29jZnMyL2FjbC5jOjMzMDpcXHRpZiAoIShvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSlcXG5mcy9vY2ZzMi9hY2wuYy0zMzEtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zMzMtXFx0ZG93bl9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG5mcy9vY2ZzMi9hY2wuYzozMzQ6XFx0YWNsID0gb2NmczJfZ2V0X2FjbF9ub2xvY2soaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgYmgpO1xcbmZzL29jZnMyL2FjbC5jLTMzNS1cXHR1cF9yZWFkKFxcdTAwMjZPQ0ZTMl9JKGlub2RlKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTM0MC1cXHRcXHRyZXR1cm4gcmV0O1xcbmZzL29jZnMyL2FjbC5jOjM0MTpcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKE5VTEwsIGlub2RlLCBOVUxMLCBBQ0xfVFlQRV9BQ0NFU1MsXFxuZnMvb2NmczIvYWNsLmMtMzQyLVxcdFxcdFxcdCAgICBhY2wsIE5VTEwsIE5VTEwpO1xcbi0tXFxuZnMvb2NmczIvYWNsLmMtMzQ3LS8qXFxuZnMvb2NmczIvYWNsLmM6MzQ4OiAqIEluaXRpYWxpemUgdGhlIEFDTHMgb2YgYSBuZXcgaW5vZGUuIElmIHBhcmVudCBkaXJlY3RvcnkgaGFzIGRlZmF1bHQgQUNMLFxcbmZzL29jZnMyL2FjbC5jLTM0OS0gKiB0aGVuIGNsb25lIHRvIG5ldyBpbm9kZS4gQ2FsbGVkIGZyb20gb2NmczJfbWtub2QuXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYz0zNTk9aW50IG9jZnMyX2FjbF9pbml0X3ByZXBhcmUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuYy0zNzItXFxuZnMvb2NmczIvYWNsLmM6MzczOlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIvYWNsLmMtMzc0LVxcdFxcdGRvd25fcmVhZChcXHUwMDI2T0NGUzJfSShkaXIpLVxcdTAwM2VpcF94YXR0cl9zZW0pO1xcbmZzL29jZnMyL2FjbC5jLTM3NS1cXHRcXHRzdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgPVxcbmZzL29jZnMyL2FjbC5jOjM3NjpcXHRcXHRcXHRvY2ZzMl9nZXRfYWNsX25vbG9jayhkaXIsIEFDTF9UWVBFX0RFRkFVTFQsIGRpcl9iaCk7XFxuZnMvb2NmczIvYWNsLmMtMzc3LVxcdFxcdHVwX3JlYWQoXFx1MDAyNk9DRlMyX0koZGlyKS1cXHUwMDNlaXBfeGF0dHJfc2VtKTtcXG4tLVxcbmZzL29jZnMyL2FjbC5jPTQxND1pbnQgb2NmczJfaW5pdF9hY2woaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL29jZnMyL2FjbC5jLTQyNS1cXG5mcy9vY2ZzMi9hY2wuYzo0MjY6XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG5mcy9vY2ZzMi9hY2wuYy00MjctXFx0XFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgXFx1MDAyNlxcdTAwMjYgc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsKSB7XFxuZnMvb2NmczIvYWNsLmMtNDI4LVxcdFxcdFxcdHJldCA9IG9jZnMyX3NldF9hY2woaGFuZGxlLCBpbm9kZSwgZGlfYmgsXFxuZnMvb2NmczIvYWNsLmM6NDI5OlxcdFxcdFxcdFxcdFxcdCAgICBBQ0xfVFlQRV9ERUZBVUxULFxcbmZzL29jZnMyL2FjbC5jLTQzMC1cXHRcXHRcXHRcXHRcXHQgICAgc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsLCBtZXRhX2FjLFxcbi0tXFxuZnMvb2NmczIvYWNsLmMtNDQyLVxcbmZzL29jZnMyL2FjbC5jOjQ0MzpcXHRpZiAob3NiLVxcdTAwM2VzX21vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCkge1xcbmZzL29jZnMyL2FjbC5jLTQ0NC1cXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWFjbCkge1xcbmZzL29jZnMyL2FjbC5jLTQ0NS1cXHRcXHRcXHRyZXQgPSBvY2ZzMl9zZXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpX2JoLFxcbmZzL29jZnMyL2FjbC5jOjQ0NjpcXHRcXHRcXHRcXHRcXHQgICAgQUNMX1RZUEVfQUNDRVNTLCBzdGF0ZS1cXHUwMDNlYWNsLFxcbmZzL29jZnMyL2FjbC5jLTQ0Ny1cXHRcXHRcXHRcXHRcXHQgICAgbWV0YV9hYywgZGF0YV9hYyk7XFxuLS1cXG5mcy9vY2ZzMi9hY2wuaC03LVxcbmZzL29jZnMyL2FjbC5oOjg6I2lmbmRlZiBPQ0ZTMl9BQ0xfSFxcbmZzL29jZnMyL2FjbC5oOjk6I2RlZmluZSBPQ0ZTMl9BQ0xfSFxcbmZzL29jZnMyL2FjbC5oLTEwLVxcbi0tXFxuZnMvb2NmczIvYWNsLmg9MzM9aW50IG9jZnMyX2luaXRfYWNsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9vY2ZzMi9hY2wuaC0zOC1cXG5mcy9vY2ZzMi9hY2wuaDozOTojZW5kaWYgLyogT0NGUzJfQUNMX0ggKi9cXG4tLVxcbmZzL29jZnMyL29jZnMyLmg9MjU3PWVudW0gb2NmczJfbW91bnRfb3B0aW9uc1xcbi0tXFxuZnMvb2NmczIvb2NmczIuaC0yNjYtXFx0T0NGUzJfTU9VTlRfSU5PREU2NCA9IDEgXFx1MDAzY1xcdTAwM2MgNyxcXHQvKiBBbGxvdyBpbm9kZSBudW1iZXJzIFxcdTAwM2UgMl4zMiAqL1xcbmZzL29jZnMyL29jZnMyLmg6MjY3OlxcdE9DRlMyX01PVU5UX1BPU0lYX0FDTCA9IDEgXFx1MDAzY1xcdTAwM2MgOCxcXHQvKiBGb3JjZSBQT1NJWCBhY2Nlc3MgY29udHJvbCBsaXN0cyAqL1xcbmZzL29jZnMyL29jZnMyLmg6MjY4OlxcdE9DRlMyX01PVU5UX05PX1BPU0lYX0FDTCA9IDEgXFx1MDAzY1xcdTAwM2MgOSxcXHQvKiBEaXNhYmxlIFBPU0lYIGFjY2Vzc1xcbmZzL29jZnMyL29jZnMyLmgtMjY5LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGNvbnRyb2wgbGlzdHMgKi9cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9NjA3PXN0YXRpYyBpbnQgb2NmczJfcmVjb25maWd1cmUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy03MTYtXFxuZnMvb2NmczIvc3VwZXIuYzo3MTc6XFx0XFx0c2ItXFx1MDAzZXNfZmxhZ3MgPSAoc2ItXFx1MDAzZXNfZmxhZ3MgXFx1MDAyNiB+U0JfUE9TSVhBQ0wpIHxcXG5mcy9vY2ZzMi9zdXBlci5jOjcxODpcXHRcXHRcXHQoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID9cXG5mcy9vY2ZzMi9zdXBlci5jOjcxOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRTQl9QT1NJWEFDTCA6IDApO1xcbmZzL29jZnMyL3N1cGVyLmMtNzIwLVxcdH1cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9OTczPXN0YXRpYyBpbnQgb2NmczJfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjMtXFxuZnMvb2NmczIvc3VwZXIuYzoxMDI0OlxcdHNiLVxcdTAwM2VzX2ZsYWdzID0gKHNiLVxcdTAwM2VzX2ZsYWdzIFxcdTAwMjYgfihTQl9QT1NJWEFDTCB8IFNCX05PU0VDKSkgfFxcbmZzL29jZnMyL3N1cGVyLmM6MTAyNTpcXHRcXHQoKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpID8gU0JfUE9TSVhBQ0wgOiAwKTtcXG5mcy9vY2ZzMi9zdXBlci5jLTEwMjYtXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTEyMzI9c3RhdGljIGludCBvY2ZzMl9jaGVja19zZXRfb3B0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMjYwLVxcdH1cXG5mcy9vY2ZzMi9zdXBlci5jOjEyNjE6XFx0aWYgKG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2IE9DRlMyX01PVU5UX1BPU0lYX0FDTCBcXHUwMDI2XFx1MDAyNlxcbmZzL29jZnMyL3N1cGVyLmMtMTI2Mi1cXHQgICAgIU9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSkge1xcbmZzL29jZnMyL3N1cGVyLmM6MTI2MzpcXHRcXHRtbG9nKE1MX0VSUk9SLCBcXFwiQUNMIHN1cHBvcnQgcmVxdWVzdGVkIGJ1dCBleHRlbmRlZCBhdHRyaWJ1dGVzIFxcXCJcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNjQtXFx0XFx0ICAgICBcXFwiZmVhdHVyZSBpcyBub3QgZW5hYmxlZFxcXFxuXFxcIik7XFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTEyNjYtXFx0fVxcbmZzL29jZnMyL3N1cGVyLmM6MTI2NzpcXHQvKiBObyBBQ0wgc2V0dGluZyBzcGVjaWZpZWQ/IFVzZSBYQVRUUiBmZWF0dXJlLi4uICovXFxuZnMvb2NmczIvc3VwZXIuYzoxMjY4OlxcdGlmICghKG9wdGlvbnMtXFx1MDAzZW1vdW50X29wdCBcXHUwMDI2IChPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wgfFxcbmZzL29jZnMyL3N1cGVyLmM6MTI2OTpcXHRcXHRcXHRcXHQgICAgT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMKSkpIHtcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNzAtXFx0XFx0aWYgKE9DRlMyX0hBU19JTkNPTVBBVF9GRUFUVVJFKHNiLCBPQ0ZTMl9GRUFUVVJFX0lOQ09NUEFUX1hBVFRSKSlcXG5mcy9vY2ZzMi9zdXBlci5jOjEyNzE6XFx0XFx0XFx0b3B0aW9ucy1cXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEyNzItXFx0XFx0ZWxzZVxcbmZzL29jZnMyL3N1cGVyLmM6MTI3MzpcXHRcXHRcXHRvcHRpb25zLVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmMtMTI3NC1cXHR9XFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jPTEyNzg9c3RhdGljIGludCBvY2ZzMl9wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxcbi0tXFxuZnMvb2NmczIvc3VwZXIuYy0xMzg0LVxcdFxcdGlmIChyZXN1bHQubmVnYXRlZCkge1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4NTpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgfD0gT0NGUzJfTU9VTlRfTk9fUE9TSVhfQUNMO1xcbmZzL29jZnMyL3N1cGVyLmM6MTM4NjpcXHRcXHRcXHRtb3B0LVxcdTAwM2Vtb3VudF9vcHQgXFx1MDAyNj0gfk9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jLTEzODctXFx0XFx0fSBlbHNlIHtcXG5mcy9vY2ZzMi9zdXBlci5jOjEzODg6XFx0XFx0XFx0bW9wdC1cXHUwMDNlbW91bnRfb3B0IHw9IE9DRlMyX01PVU5UX1BPU0lYX0FDTDtcXG5mcy9vY2ZzMi9zdXBlci5jOjEzODk6XFx0XFx0XFx0bW9wdC1cXHUwMDNlbW91bnRfb3B0IFxcdTAwMjY9IH5PQ0ZTMl9NT1VOVF9OT19QT1NJWF9BQ0w7XFxuZnMvb2NmczIvc3VwZXIuYy0xMzkwLVxcdFxcdH1cXG4tLVxcbmZzL29jZnMyL3N1cGVyLmM9MTQxNj1zdGF0aWMgaW50IG9jZnMyX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBkZW50cnkgKnJvb3QpXFxuLS1cXG5mcy9vY2ZzMi9zdXBlci5jLTE0ODQtXFxuZnMvb2NmczIvc3VwZXIuYzoxNDg1OlxcdGlmIChvcHRzIFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKVxcbmZzL29jZnMyL3N1cGVyLmMtMTQ4Ni1cXHRcXHRzZXFfcHJpbnRmKHMsIFxcXCIsYWNsXFxcIik7XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jPTEwMT1zdGF0aWMgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBvY2ZzMl94YXR0cl9oYW5kbGVyX21hcFtPQ0ZTMl9YQVRUUl9NQVhdID0ge1xcbmZzL29jZnMyL3hhdHRyLmMtMTAyLVxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSXVxcdFxcdD0gXFx1MDAyNm9jZnMyX3hhdHRyX3VzZXJfaGFuZGxlcixcXG5mcy9vY2ZzMi94YXR0ci5jOjEwMzpcXHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0FDQ0VTU11cXHQ9IFxcdTAwMjZub3BfcG9zaXhfYWNsX2FjY2VzcyxcXG5mcy9vY2ZzMi94YXR0ci5jOjEwNDpcXHRbT0NGUzJfWEFUVFJfSU5ERVhfUE9TSVhfQUNMX0RFRkFVTFRdXFx0PSBcXHUwMDI2bm9wX3Bvc2l4X2FjbF9kZWZhdWx0LFxcbmZzL29jZnMyL3hhdHRyLmMtMTA1LVxcdFtPQ0ZTMl9YQVRUUl9JTkRFWF9UUlVTVEVEXVxcdFxcdD0gXFx1MDAyNm9jZnMyX3hhdHRyX3RydXN0ZWRfaGFuZGxlcixcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NjM4PWludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNjQ5LVxcbmZzL29jZnMyL3hhdHRyLmM6NjUwOlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIveGF0dHIuYy02NTEtXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYy03MDEtXFx0fVxcbmZzL29jZnMyL3hhdHRyLmM6NzAyOlxcdGlmIChvc2ItXFx1MDAzZXNfbW91bnRfb3B0IFxcdTAwMjYgT0NGUzJfTU9VTlRfUE9TSVhfQUNMKSB7XFxuZnMvb2NmczIveGF0dHIuYy03MDMtXFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlZGVmYXVsdF9hY2wgXFx1MDAyNlxcdTAwMjYgU19JU0RJUihtb2RlKSkge1xcbi0tXFxuZnMvb2NmczIveGF0dHIuYz05MTI9c3RhdGljIGludCBvY2ZzMl94YXR0cl9saXN0X2VudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5jLTkyNy1cXG5mcy9vY2ZzMi94YXR0ci5jOjkyODpcXHRjYXNlIE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1M6XFxuZnMvb2NmczIveGF0dHIuYzo5Mjk6XFx0Y2FzZSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVDpcXG5mcy9vY2ZzMi94YXR0ci5jOjkzMDpcXHRcXHRpZiAoIShzYi1cXHUwMDNlc19mbGFncyBcXHUwMDI2IFNCX1BPU0lYQUNMKSlcXG5mcy9vY2ZzMi94YXR0ci5jLTkzMS1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9MzU1NT1zdGF0aWMgaW50IF9fb2NmczJfeGF0dHJfc2V0X2hhbmRsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvb2NmczIveGF0dHIuYy0zNjkxLS8qXFxuZnMvb2NmczIveGF0dHIuYzozNjkyOiAqIFRoaXMgaGVscGVyIGlzIG9ubHkgZm9yIHNldHRpbmcgaW5pdGlhbCBBQ0wgb3Igc2VjdXJpdHkgeGF0dHJzIG9uIGFuIGlub2RlXFxuZnMvb2NmczIveGF0dHIuYy0zNjkzLSAqIHRoYXQgaXMgc3RpbGwgdW5wdWJsaXNoZWQsIHVuaGFzaGVkLCBhbmQgdW5hdHRhY2hlZCB0byBhIGRlbnRyeS5cXG4tLVxcbmZzL29jZnMyL3hhdHRyLmM9NzM2Nz1zdGF0aWMgaW50IG9jZnMyX3JlZmxpbmtfeGF0dHJfbm9fc2VjdXJpdHkoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSlcXG4tLVxcbmZzL29jZnMyL3hhdHRyLmMtNzM3MS1cXHRyZXR1cm4gdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9TRUNVUklUWSBcXHUwMDI2XFx1MDAyNlxcbmZzL29jZnMyL3hhdHRyLmM6NzM3MjpcXHQgICAgICAgdHlwZSAhPSBPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfQUNDRVNTIFxcdTAwMjZcXHUwMDI2XFxuZnMvb2NmczIveGF0dHIuYzo3MzczOlxcdCAgICAgICB0eXBlICE9IE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9ERUZBVUxUO1xcbmZzL29jZnMyL3hhdHRyLmMtNzM3NC19XFxuLS1cXG5mcy9vY2ZzMi94YXR0ci5oPTE0PWVudW0gb2NmczJfeGF0dHJfdHlwZSB7XFxuZnMvb2NmczIveGF0dHIuaC0xNS1cXHRPQ0ZTMl9YQVRUUl9JTkRFWF9VU0VSID0gMSxcXG5mcy9vY2ZzMi94YXR0ci5oOjE2OlxcdE9DRlMyX1hBVFRSX0lOREVYX1BPU0lYX0FDTF9BQ0NFU1MsXFxuZnMvb2NmczIveGF0dHIuaDoxNzpcXHRPQ0ZTMl9YQVRUUl9JTkRFWF9QT1NJWF9BQ0xfREVGQVVMVCxcXG5mcy9vY2ZzMi94YXR0ci5oLTE4LVxcdE9DRlMyX1hBVFRSX0lOREVYX1RSVVNURUQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ3OjU0LjA2NzU0Mzg3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NjQwNTc1OTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZpbmFsaXppbmcgdGhlIEZ1enppbmcgU3RyYXRlZ3kqKlxuXG5Pa2F5LCB0aW1lIHRvIHdyYXAgdGhpcyB1cC4gSSBuZWVkIHRvIGRvY3VtZW50IHRoZSBlc3NlbnRpYWwgcGFyYW1ldGVycyBmb3IgZnV6emluZyB0aGlzIHNwZWNpZmljIGNvZGUuIEZpcnN0LCB0aGUgb2J2aW91czogYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuIFRoZSBjaGFuZ2VzIEknbSBmb2N1c2luZyBvbiDigJMgc3BlY2lmaWNhbGx5IHdpdGhpbiBgb2NmczJfY2FsY194YXR0cl9pbml0YCBhbmQgYG9jZnMyX21rbm9kYCDigJMgYXJlIHRoZSBrZXkgcG9pbnRzIHRvIGhpdC4gVGhvc2UgYXJlIGdvaW5nIHN0cmFpZ2h0IGludG8gYEZvY3VzU3ltYm9sc2AuIEFuZCBuYXR1cmFsbHksIHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMsIGBFbmFibGVDb25maWdzYCBuZWVkcyB0byBpbmNsdWRlIGBPQ0ZTMl9GU2AuXG5cbkNydWNpYWxseSwgSSBuZWVkIHRvIG1ha2UgdGhlIHJlYXNvbmluZyBjcnlzdGFsIGNsZWFyLiBUaGlzIHNldCBvZiBtb2RpZmljYXRpb25zIGluIGBvY2ZzMl9jYWxjX3hhdHRyX2luaXRgIGRpcmVjdGx5IGltcGFjdHMgcmVhY2hhYmxlIGtlcm5lbCBmaWxlc3lzdGVtIGNvZGUsIGFuZCBiZWNhdXNlIG9mIHRoaXMsIGZ1enppbmcgdW5kZXIgYE9DRlMyX0ZTYCBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gVGhhdCBjb25jaXNlbHkgZXhwbGFpbnMgdGhlIG5lZWQgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4gTm93LCBJIGp1c3QgbmVlZCB0byBjYWxsIGBzZXQtcmVzdWx0c2AgYW5kIHdlIGNhbiBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjUwMiwiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDg6MDEuNzA4MTIzODI5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMxMDQ0NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl9ta25vZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgQyBjb2RlIGluIGZzL29jZnMyL3hhdHRyLmMgYnkgY2xlYW5pbmcgdXAgcmV0dXJuIHZhbHVlcyBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKSwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbi9ta25vZCBpbiBPQ0ZTMi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggT0NGUzIgc3VwcG9ydCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9DRlMyX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwib2NmczJfY2FsY194YXR0cl9pbml0XCIsXG4gICAgXCJvY2ZzMl9ta25vZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4ZWN1dGFibGUgQyBjb2RlIGluIGZzL29jZnMyL3hhdHRyLmMgYnkgY2xlYW5pbmcgdXAgcmV0dXJuIHZhbHVlcyBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKSwgd2hpY2ggaXMgY2FsbGVkIGR1cmluZyBpbm9kZSBjcmVhdGlvbi9ta25vZCBpbiBPQ0ZTMi4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHdpdGggT0NGUzIgc3VwcG9ydCBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0ODowMS43OTEyMzgxOTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMzY4NDk1NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0ODowMS43OTE4MjUxMTVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4MjM2MjU4MTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpcyBhIHRyaXZpYWwgY29kZSBjbGVhbnVwIGluIGZzL29jZnMyL3hhdHRyLmMgcmVtb3ZpbmcgYW4gdW51c2VkIGxvY2FsIHZhcmlhYmxlICdyZXQnIGFuZCByZXR1cm5pbmcgMCBkaXJlY3RseSBpbiBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoKS4gSXQgZG9lcyBub3QgYWx0ZXIgcnVudGltZSBiZWhhdmlvciwgYWxsb2NhdGUvYWNjZXNzIGJ1ZmZlcnMsIGNvcHkgZGF0YSB0byB1c2VyIHNwYWNlLCBvciBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjNTQ3MjFmNDY0M2MzNWZjMDE3OGQyNjA4ZmE3ZDJlZjg5OGVkNjZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxNzo0NzoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3hhdHRyLmMgYi9mcy9vY2ZzMi94YXR0ci5jXG5pbmRleCAzNWJjYmIwZmY2MDdiLi5hYjNiNjQ1OTgzYzk2IDEwMDY0NFxuLS0tIGEvZnMvb2NmczIveGF0dHIuY1xuKysrIGIvZnMvb2NmczIveGF0dHIuY1xuQEAgLTY0MCw3ICs2NDAsNiBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcbiBcdFx0XHQgIGludCAqd2FudF9tZXRhLCBzdHJ1Y3Qgb2NmczJfYWNsX3N0YXRlICphY2xfc3RhdGUpXG4ge1xuLVx0aW50IHJldCA9IDA7XG4gXHRzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGRpci1cdTAwM2VpX3NiKTtcbiBcdGludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzO1xuIFxuQEAgLTY2Miw3ICs2NjEsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHR9XG4gXG4gXHRpZiAoIShzX3NpemUgKyBhX3NpemUpKVxuLVx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgbWF4IHNwYWNlIG9mIHNlY3VyaXR5IHhhdHRyIHRha2VuIGlubGluZSBpc1xuQEAgLTcyOSw3ICs3MjgsNyBAQCBpbnQgb2NmczJfY2FsY194YXR0cl9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCB1bW9kZV90IG1vZGUsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdHJldHVybiByZXQ7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBvY2ZzMl94YXR0cl9leHRlbmRfYWxsb2NhdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTc6NDg6MDEuNzkxODI2NTQ2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ2NDYzMDczMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBYYXR0ciBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBmaXJzdCBtb3ZlIGlzIGFsd2F5cyB0byBleGFtaW5lIHRoZSBwYXRjaCBpdHNlbGYgYW5kIGl0cyBpbW1lZGlhdGUgY29udGV4dC4gVGhpcyBzZWVtcyB0byBiZSBmb2N1c2VkIG9uIGEgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpYCBmdW5jdGlvbiwgcmVzaWRpbmcgaW4gYGZzL29jZnMyL3hhdHRyLmNgLiBHaXZlbiB0aGF0LCBJJ2xsIGdvIGRpcmVjdGx5IHRvIHRoYXQgZmlsZSBhbmQsIHNwZWNpZmljYWxseSwgSSdsbCB6ZXJvIGluIG9uIHRoZSB2aWNpbml0eSBvZiBsaW5lIDY0MC4gVGhhdCdzIHRoZSBiZXN0IHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlLCBnaXZlbiB0aGUgZnVuY3Rpb24gYW5kIGZpbGUgdGhlIHBhdGNoIHBvaW50cyB0by4gV2UgY2FuIGdldCBhIHF1aWNrIGltcHJlc3Npb24gb2Ygd2hhdCB0aGlzIGNvZGUgaXMgYXR0ZW1wdGluZyB0byBjaGFuZ2UgYW5kIGFjY29tcGxpc2ggaGVyZS4gRnJvbSB0aGVyZSwgd2UgY2FuIGFuYWx5emUgaG93IHRoZSB4YXR0ciBtb2RpZmljYXRpb25zIGFyZSBpbnRlbmRlZCB0byBiZWhhdmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ4OjA2LjQzODEzNTk4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvb2NmczIveGF0dHIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MzUsXG4gIFwiTGluZUNvdW50XCI6IDEwNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjM1OlxcdFxcdHJldHVybiByZXQ7XFxuIDYzNjpcXHR9XFxuIDYzNzpcXHRcXG4gNjM4OlxcdGludCBvY2ZzMl9jYWxjX3hhdHRyX2luaXQoc3RydWN0IGlub2RlICpkaXIsIHVtb2RlX3QgbW9kZSxcXG4gNjM5OlxcdFxcdFxcdFxcdCAgc3RydWN0IG9jZnMyX3NlY3VyaXR5X3hhdHRyX2luZm8gKnNpLFxcbiA2NDA6XFx0XFx0XFx0XFx0ICBpbnQgKndhbnRfY2x1c3RlcnMsIGludCAqeGF0dHJfY3JlZGl0cyxcXG4gNjQxOlxcdFxcdFxcdFxcdCAgaW50ICp3YW50X21ldGEsIHN0cnVjdCBvY2ZzMl9hY2xfc3RhdGUgKmFjbF9zdGF0ZSlcXG4gNjQyOlxcdHtcXG4gNjQzOlxcdFxcdHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKTtcXG4gNjQ0OlxcdFxcdGludCBzX3NpemUgPSAwLCBhX3NpemUgPSAwLCBhY2xfbGVuID0gMCwgbmV3X2NsdXN0ZXJzO1xcbiA2NDU6XFx0XFxuIDY0NjpcXHRcXHRpZiAoc2ktXFx1MDAzZWVuYWJsZSlcXG4gNjQ3OlxcdFxcdFxcdHNfc2l6ZSA9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZShzdHJsZW4oc2ktXFx1MDAzZW5hbWUpLFxcbiA2NDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gNjQ5OlxcdFxcbiA2NTA6XFx0XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4gNjUxOlxcdFxcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIobW9kZSkpIHtcXG4gNjUyOlxcdFxcdFxcdFxcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4gNjUzOlxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbiA2NTQ6XFx0XFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gNjU1OlxcdFxcdFxcdH1cXG4gNjU2OlxcdFxcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWFjbCkge1xcbiA2NTc6XFx0XFx0XFx0XFx0YWNsX2xlbiA9IGFjbF9zdGF0ZS1cXHUwMDNlYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4gNjU4OlxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbiA2NTk6XFx0XFx0XFx0XFx0YV9zaXplICs9IG9jZnMyX3hhdHRyX2VudHJ5X3JlYWxfc2l6ZSgwLCBhY2xfbGVuKTtcXG4gNjYwOlxcdFxcdFxcdH1cXG4gNjYxOlxcdFxcdH1cXG4gNjYyOlxcdFxcbiA2NjM6XFx0XFx0aWYgKCEoc19zaXplICsgYV9zaXplKSlcXG4gNjY0OlxcdFxcdFxcdHJldHVybiAwO1xcbiA2NjU6XFx0XFxuIDY2NjpcXHRcXHQvKlxcbiA2Njc6XFx0XFx0ICogVGhlIG1heCBzcGFjZSBvZiBzZWN1cml0eSB4YXR0ciB0YWtlbiBpbmxpbmUgaXNcXG4gNjY4OlxcdFxcdCAqIDI1NihuYW1lKSArIDgwKHZhbHVlKSArIDE2KGVudHJ5KSA9IDM1MiBieXRlcyxcXG4gNjY5OlxcdFxcdCAqIFRoZSBtYXggc3BhY2Ugb2YgYWNsIHhhdHRyIHRha2VuIGlubGluZSBpc1xcbiA2NzA6XFx0XFx0ICogODAodmFsdWUpICsgMTYoZW50cnkpICogMihpZiBkaXJlY3RvcnkpID0gMTkyIGJ5dGVzLFxcbiA2NzE6XFx0XFx0ICogd2hlbiBibG9ja3NpemUgPSA1MTIsIG1heSByZXNlcnZlIG9uZSBtb3JlIGNsdXN0ZXIgZm9yXFxuIDY3MjpcXHRcXHQgKiB4YXR0ciBidWNrZXQsIG90aGVyd2lzZSByZXNlcnZlIG9uZSBtZXRhZGF0YSBibG9ja1xcbiA2NzM6XFx0XFx0ICogZm9yIHRoZW0gaXMgb2suXFxuIDY3NDpcXHRcXHQgKiBJZiB0aGlzIGlzIGEgbmV3IGRpcmVjdG9yeSB3aXRoIGlubGluZSBkYXRhLFxcbiA2NzU6XFx0XFx0ICogd2UgY2hvb3NlIHRvIHJlc2VydmUgdGhlIGVudGlyZSBpbmxpbmUgYXJlYSBmb3JcXG4gNjc2OlxcdFxcdCAqIGRpcmVjdG9yeSBjb250ZW50cyBhbmQgZm9yY2UgYW4gZXh0ZXJuYWwgeGF0dHIgYmxvY2suXFxuIDY3NzpcXHRcXHQgKi9cXG4gNjc4OlxcdFxcdGlmIChkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUgfHxcXG4gNjc5OlxcdFxcdCAgICAoU19JU0RJUihtb2RlKSBcXHUwMDI2XFx1MDAyNiBvY2ZzMl9zdXBwb3J0c19pbmxpbmVfZGF0YShvc2IpKSB8fFxcbiA2ODA6XFx0XFx0ICAgIChzX3NpemUgKyBhX3NpemUpIFxcdTAwM2UgT0NGUzJfWEFUVFJfRlJFRV9JTl9JQk9EWSkge1xcbiA2ODE6XFx0XFx0XFx0KndhbnRfbWV0YSA9ICp3YW50X21ldGEgKyAxO1xcbiA2ODI6XFx0XFx0XFx0KnhhdHRyX2NyZWRpdHMgKz0gT0NGUzJfWEFUVFJfQkxPQ0tfQ1JFQVRFX0NSRURJVFM7XFxuIDY4MzpcXHRcXHR9XFxuIDY4NDpcXHRcXG4gNjg1OlxcdFxcdGlmIChkaXItXFx1MDAzZWlfc2ItXFx1MDAzZXNfYmxvY2tzaXplID09IE9DRlMyX01JTl9CTE9DS1NJWkUgXFx1MDAyNlxcdTAwMjZcXG4gNjg2OlxcdFxcdCAgICAoc19zaXplICsgYV9zaXplKSBcXHUwMDNlIE9DRlMyX1hBVFRSX0ZSRUVfSU5fQkxPQ0soZGlyKSkge1xcbiA2ODc6XFx0XFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gMTtcXG4gNjg4OlxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGRpci1cXHUwMDNlaV9zYik7XFxuIDY4OTpcXHRcXHR9XFxuIDY5MDpcXHRcXG4gNjkxOlxcdFxcdC8qXFxuIDY5MjpcXHRcXHQgKiByZXNlcnZlIGNyZWRpdHMgYW5kIGNsdXN0ZXJzIGZvciB4YXR0cnMgd2hpY2ggaGFzIGxhcmdlIHZhbHVlXFxuIDY5MzpcXHRcXHQgKiBhbmQgaGF2ZSB0byBiZSBzZXQgb3V0c2lkZVxcbiA2OTQ6XFx0XFx0ICovXFxuIDY5NTpcXHRcXHRpZiAoc2ktXFx1MDAzZWVuYWJsZSBcXHUwMDI2XFx1MDAyNiBzaS1cXHUwMDNldmFsdWVfbGVuIFxcdTAwM2UgT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHtcXG4gNjk2OlxcdFxcdFxcdG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsXFxuIDY5NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRzaS1cXHUwMDNldmFsdWVfbGVuKTtcXG4gNjk4OlxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9IG9jZnMyX2NsdXN0ZXJzX3RvX2Jsb2NrcyhkaXItXFx1MDAzZWlfc2IsXFxuIDY5OTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBuZXdfY2x1c3RlcnMpO1xcbiA3MDA6XFx0XFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xcbiA3MDE6XFx0XFx0fVxcbiA3MDI6XFx0XFx0aWYgKG9zYi1cXHUwMDNlc19tb3VudF9vcHQgXFx1MDAyNiBPQ0ZTMl9NT1VOVF9QT1NJWF9BQ0wpIHtcXG4gNzAzOlxcdFxcdFxcdGlmIChhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsIFxcdTAwMjZcXHUwMDI2IFNfSVNESVIobW9kZSkpIHtcXG4gNzA0OlxcdFxcdFxcdFxcdGFjbF9sZW4gPSBhY2xfc3RhdGUtXFx1MDAzZWRlZmF1bHRfYWNsLVxcdTAwM2VhX2NvdW50ICpcXG4gNzA1OlxcdFxcdFxcdFxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9hY2xfZW50cnkpO1xcbiA3MDY6XFx0XFx0XFx0XFx0aWYgKGFjbF9sZW4gXFx1MDAzZSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkge1xcbiA3MDc6XFx0XFx0XFx0XFx0XFx0bmV3X2NsdXN0ZXJzID1cXG4gNzA4OlxcdFxcdFxcdFxcdFxcdFxcdG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhkaXItXFx1MDAzZWlfc2IsXFxuIDcwOTpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgYWNsX2xlbik7XFxuIDcxMDpcXHRcXHRcXHRcXHRcXHQqeGF0dHJfY3JlZGl0cyArPVxcbiA3MTE6XFx0XFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGRpci1cXHUwMDNlaV9zYixcXG4gNzEyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBuZXdfY2x1c3RlcnMpO1xcbiA3MTM6XFx0XFx0XFx0XFx0XFx0KndhbnRfY2x1c3RlcnMgKz0gbmV3X2NsdXN0ZXJzO1xcbiA3MTQ6XFx0XFx0XFx0XFx0fVxcbiA3MTU6XFx0XFx0XFx0fVxcbiA3MTY6XFx0XFx0XFx0aWYgKGFjbF9zdGF0ZS1cXHUwMDNlYWNsKSB7XFxuIDcxNzpcXHRcXHRcXHRcXHRhY2xfbGVuID0gYWNsX3N0YXRlLVxcdTAwM2VhY2wtXFx1MDAzZWFfY291bnQgKlxcbiA3MTg6XFx0XFx0XFx0XFx0XFx0ICBzaXplb2Yoc3RydWN0IG9jZnMyX2FjbF9lbnRyeSk7XFxuIDcxOTpcXHRcXHRcXHRcXHRpZiAoYWNsX2xlbiBcXHUwMDNlIE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7XFxuIDcyMDpcXHRcXHRcXHRcXHRcXHRuZXdfY2x1c3RlcnMgPVxcbiA3MjE6XFx0XFx0XFx0XFx0XFx0XFx0b2NmczJfY2x1c3RlcnNfZm9yX2J5dGVzKGRpci1cXHUwMDNlaV9zYixcXG4gNzIyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBhY2xfbGVuKTtcXG4gNzIzOlxcdFxcdFxcdFxcdFxcdCp4YXR0cl9jcmVkaXRzICs9XFxuIDcyNDpcXHRcXHRcXHRcXHRcXHRcXHRvY2ZzMl9jbHVzdGVyc190b19ibG9ja3MoZGlyLVxcdTAwM2VpX3NiLFxcbiA3MjU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG5ld19jbHVzdGVycyk7XFxuIDcyNjpcXHRcXHRcXHRcXHRcXHQqd2FudF9jbHVzdGVycyArPSBuZXdfY2x1c3RlcnM7XFxuIDcyNzpcXHRcXHRcXHRcXHR9XFxuIDcyODpcXHRcXHRcXHR9XFxuIDcyOTpcXHRcXHR9XFxuIDczMDpcXHRcXG4gNzMxOlxcdFxcdHJldHVybiAwO1xcbiA3MzI6XFx0fVxcbiA3MzM6XFx0XFxuIDczNDpcXHRzdGF0aWMgaW50IG9jZnMyX3hhdHRyX2V4dGVuZF9hbGxvY2F0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDE3OjQ4OjA2LjQzODY0MjQxOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTg5NDIxODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUaGlzIFRyaXZpYWwgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXRjaCBoZXJlIOKAkyBpdCByZW1vdmVzIGEgbG9jYWwsIHVudXNlZCBpbnRlZ2VyIHZhcmlhYmxlLCBgcmV0YCwgZnJvbSB0aGUgYG9jZnMyX2NhbGNfeGF0dHJfaW5pdGAgZnVuY3Rpb24gaW4gYGZzL29jZnMyL3hhdHRyLmNgIGFuZCByZXBsYWNlcyB0aGUgcmV0dXJuIHN0YXRlbWVudCB1c2luZyB0aGUgbm93LWRlbGV0ZWQgdmFyaWFibGUgd2l0aCBhIGRpcmVjdCByZXR1cm4gb2YgYDBgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBqdXN0IGEgY29kZSBjbGVhbnVwIGV4ZXJjaXNlOyBpdOKAmXMgYSBkaXJlY3QgcmVwbGFjZW1lbnQgb2YgcmV0dXJuaW5nIGEgdmFyaWFibGUgY29udGFpbmluZyAwIHdpdGggcmV0dXJuaW5nIDAgaXRzZWxmLiBUaGVyZSdzIG5vIGZ1bmN0aW9uYWwgY2hhbmdlIHdoYXRzb2V2ZXIsIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS5cblxuTm93LCBsZXQncyBnbyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3Q6XG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLCBub3QgdG91Y2hlZC5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8qKiBEZWZpbml0ZWx5IG5vdC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgYWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbj8qKiBOb3QgaGFwcGVuaW5nLlxuNC4gICoqQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgYWNjZXNzIHRvIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgYnl0ZXM/KiogTmVnYXRpdmUuXG5cblRoZXJlZm9yZSwgc2luY2UgdGhpcyBpcyBqdXN0IGEgc21hbGwgY2xlYW51cCwgdGhpcyBwYXRjaCBjbGVhcmx5ICoqZG9lcyBub3QgcmVxdWlyZSBLTVNBTioqLlxuXG5UbyBzb2xpZGlmeSB0aGUgcmVhc29uaW5nLCBsZXTigJlzIHJldmlzaXQgdGhlIGNvcmUgZGlmZmVyZW5jZXMgYmV0d2VlbiBLQVNBTiBhbmQgS01TQU4uIEtBU0FOIGFuZCBzdGFuZGFyZCB0b29scyBhcmUgZm9yIHRoZSB1c3VhbCBtZW1vcnkgZXJyb3JzIOKAkyBVc2UtQWZ0ZXItRnJlZSwgT3V0LW9mLUJvdW5kcywgdGhhdCBraW5kIG9mIHRoaW5nLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHNwZWNpZmljYWxseSB0YWlsb3JlZCB0byBkZXRlY3QgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UsIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGxlYWQgdG8gaW5mb3JtYXRpb24gbGVha3MuXG5cbkdpdmVuIHRoYXQgdGhpcyBwYXRjaCB0b3VjaGVzICpub3RoaW5nKiB0aGF0IGNvdWxkIGludHJvZHVjZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW52b2x2ZSBhbnkgbWVtb3J5IGFsbG9jYXRpb25zLCBpbnRlcmFjdCB3aXRoIGJ1ZmZlcnMsIG9yIG1ha2UgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBkYXRhLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpc24ndCBuZWVkZWQuXG5cbk9rYXksIHRoYXQncyBldmVyeXRoaW5nLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMzMSwiT3V0cHV0VG9rZW5zIjoxMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxNzo0ODoxMC4wMjgwNjc5OTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgdHJpdmlhbCBjb2RlIGNsZWFudXAgaW4gZnMvb2NmczIveGF0dHIuYyByZW1vdmluZyBhbiB1bnVzZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgYW5kIHJldHVybmluZyAwIGRpcmVjdGx5IGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLiBJdCBkb2VzIG5vdCBhbHRlciBydW50aW1lIGJlaGF2aW9yLCBhbGxvY2F0ZS9hY2Nlc3MgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGlzIGEgdHJpdmlhbCBjb2RlIGNsZWFudXAgaW4gZnMvb2NmczIveGF0dHIuYyByZW1vdmluZyBhbiB1bnVzZWQgbG9jYWwgdmFyaWFibGUgJ3JldCcgYW5kIHJldHVybmluZyAwIGRpcmVjdGx5IGluIG9jZnMyX2NhbGNfeGF0dHJfaW5pdCgpLiBJdCBkb2VzIG5vdCBhbHRlciBydW50aW1lIGJlaGF2aW9yLCBhbGxvY2F0ZS9hY2Nlc3MgYnVmZmVycywgY29weSBkYXRhIHRvIHVzZXIgc3BhY2UsIG9yIGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvcm1hdGlvbiBsZWFrcy4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowp4ns6[1] Phase: Succeeded StartedAt: 2026-09-07 17:48:21 +0000 UTC FinishedAt: 2026-09-07 17:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 17:48:21 +0000 UTC FinishedAt: 2026-09-07 17:48:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2] Phase: Succeeded StartedAt: 2026-09-07 17:48:21 +0000 UTC FinishedAt: 2026-09-07 21:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 17:48:21 +0000 UTC FinishedAt: 2026-09-07 21:28:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 17:48:21 +0000 UTC FinishedAt: 2026-09-07 17:48:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 17:48:21 +0000 UTC FinishedAt: 2026-09-07 17:48:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowp4ns6/series-workflowp4ns6-convert-artifact-2492053021/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 17:48:32 +0000 UTC FinishedAt: 2026-09-07 18:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 17:48:32 +0000 UTC FinishedAt: 2026-09-07 18:05:05 +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:*21be015a-92b5-465c-ba2b-7f757379e3e1,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-workflowp4ns6/series-workflowp4ns6-convert-artifact-2492053021/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": "6314f805-6913-4c73-a7e5-c54e08f6c8ed", "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-workflowp4ns6/series-workflowp4ns6-build-action-2503878483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 17:48:32 +0000 UTC FinishedAt: 2026-09-07 18:04:55 +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:*21be015a-92b5-465c-ba2b-7f757379e3e1,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-workflowp4ns6/series-workflowp4ns6-convert-artifact-2492053021/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": "6314f805-6913-4c73-a7e5-c54e08f6c8ed", "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-workflowp4ns6/series-workflowp4ns6-build-action-2503878483/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 18:05:05 +0000 UTC FinishedAt: 2026-09-07 18:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 18:05:05 +0000 UTC FinishedAt: 2026-09-07 18:05:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 18:05:05 +0000 UTC FinishedAt: 2026-09-07 18:05:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 18:05:05 +0000 UTC FinishedAt: 2026-09-07 18:05:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowp4ns6/series-workflowp4ns6-convert-artifact-3160143352/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 18:05:15 +0000 UTC FinishedAt: 2026-09-07 18:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 18:05:15 +0000 UTC FinishedAt: 2026-09-07 18:07:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6314f805-6913-4c73-a7e5-c54e08f6c8ed,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-workflowp4ns6/series-workflowp4ns6-build-action-2503878483/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-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 18:07:17 +0000 UTC FinishedAt: 2026-09-07 18:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 18:07:17 +0000 UTC FinishedAt: 2026-09-07 18:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 18:07:17 +0000 UTC FinishedAt: 2026-09-07 18:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 18:07:17 +0000 UTC FinishedAt: 2026-09-07 18:23:37 +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:*21be015a-92b5-465c-ba2b-7f757379e3e1,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-workflowp4ns6/series-workflowp4ns6-convert-artifact-3160143352/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": "e59c93cd-7803-4b91-87b1-636c34ea10bd", "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-workflowp4ns6/series-workflowp4ns6-build-action-1174772452/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 18:07:17 +0000 UTC FinishedAt: 2026-09-07 18:23:27 +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:*21be015a-92b5-465c-ba2b-7f757379e3e1,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-workflowp4ns6/series-workflowp4ns6-convert-artifact-3160143352/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": "e59c93cd-7803-4b91-87b1-636c34ea10bd", "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-workflowp4ns6/series-workflowp4ns6-build-action-1174772452/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 18:23:37 +0000 UTC FinishedAt: 2026-09-07 18:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 18:23:37 +0000 UTC FinishedAt: 2026-09-07 18:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 18:23:37 +0000 UTC FinishedAt: 2026-09-07 18:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 18:23:37 +0000 UTC FinishedAt: 2026-09-07 18:25:36 +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:*e59c93cd-7803-4b91-87b1-636c34ea10bd,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-workflowp4ns6/series-workflowp4ns6-build-action-1174772452/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-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 18:25:46 +0000 UTC FinishedAt: 2026-09-07 21:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 18:25:46 +0000 UTC FinishedAt: 2026-09-07 21:28:35 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"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:*6314f805-6913-4c73-a7e5-c54e08f6c8ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e59c93cd-7803-4b91-87b1-636c34ea10bd,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-workflowp4ns6/series-workflowp4ns6-build-action-2503878483/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-workflowp4ns6/series-workflowp4ns6-build-action-1174772452/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 18:25:46 +0000 UTC FinishedAt: 2026-09-07 18:25:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 18:25:46 +0000 UTC FinishedAt: 2026-09-07 18:25:51 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"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-workflowp4ns6/series-workflowp4ns6-convert-artifact-4062307921/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 18:25:46 +0000 UTC FinishedAt: 2026-09-07 18:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 18:25:46 +0000 UTC FinishedAt: 2026-09-07 18:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 18:25:46 +0000 UTC FinishedAt: 2026-09-07 18:25:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 18:25:56 +0000 UTC FinishedAt: 2026-09-07 21:28:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp4ns6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["ocfs2_calc_xattr_init","ocfs2_mknod"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"bc35965f6940a9bf834d54187b6088b8eb09206d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OCFS2_FS"],"series_id":"4b1fb8fd-3577-4991-b3fc-ecf1b890e0fe","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 18:25:56 +0000 UTC FinishedAt: 2026-09-07 21:28:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6314f805-6913-4c73-a7e5-c54e08f6c8ed,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e59c93cd-7803-4b91-87b1-636c34ea10bd,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-workflowp4ns6/series-workflowp4ns6-build-action-2503878483/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-workflowp4ns6/series-workflowp4ns6-build-action-1174772452/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-workflowp4ns6/series-workflowp4ns6-convert-artifact-4062307921/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,}