Name: series-workflowg5r6z Phase: Succeeded StartedAt: 2026-09-03 13:22:54 +0000 UTC FinishedAt: 2026-09-03 17:55:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[0] Phase: Succeeded StartedAt: 2026-09-03 13:22:54 +0000 UTC FinishedAt: 2026-09-03 14:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 13:22:54 +0000 UTC FinishedAt: 2026-09-03 14:13:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FHANDLE", "FSNOTIFY", "INOTIFY_USER", "FANOTIFY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FHANDLE", "FSNOTIFY", "INOTIFY_USER", "FANOTIFY" ], "series_id": "74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__d_obtain_alias", "d_obtain_alias", "d_obtain_root", "dentry_unlink_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OywKICAgICYjMzQ7RlNOT1RJRlkmIzM0OywKICAgICYjMzQ7SU5PVElGWV9VU0VSJiMzNDssCiAgICAmIzM0O0ZBTk9USUZZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9yb290JiMzNDssCiAgICAmIzM0O2RlbnRyeV91bmxpbmtfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbm9kZSBhbGlhcyBsb29rdXAgYW5kIGRlbnRyeSB1bmxpbmtpbmcgbG9naWMgaW4gZnMvZGNhY2hlLmMgdG8gcHJldmVudCByZXZpdmluZyBkZWFkL3VubGlua2VkIGlub2RlcyBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3VwcyAod2hpY2ggaW50ZXJmZXJlcyB3aXRoIGZzbm90aWZ5KS4gVGhlIGNoYW5nZXMgb25seSB0b3VjaCBzdGFuZGFyZCBpbm9kZSBmaWVsZHMgKGlfbmxpbmssIGlfZGVudHJ5KSBhbmQgdXNlIGEgbG9jYWxseSBhc3NpZ25lZCBib29sZWFuIHZhcmlhYmxlIChub3RpZnlfZGVhZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gc2VtYW50aWNzLCBpbm9kZSBsaWZlY3ljbGVzLCBvciBsb2NraW5nLCB3aGljaCBmYWxsIHVuZGVyIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBsb2dpYyBpbiBmcy9kY2FjaGUuYyAoX19kX29idGFpbl9hbGlhcywgZGVudHJ5X3VubGlua19pbm9kZSkgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gY3JlYXRpbmcgYWxpYXNlcyBmb3IgZGVhZCB1bmxpbmtlZCBpbm9kZXMgYW5kIHRvIGFjY3VyYXRlbHkgbm90aWZ5IGZzbm90aWZ5IHdoZW4gdW5saW5rZWQgaW5vZGVzIGhhdmUgbm8gcmVtYWluaW5nIGFsaWFzZXMuIEZ1enppbmcgd2l0aCBmaWxlIGhhbmRsZSBzeXNjYWxscyAob3Blbl9ieV9oYW5kbGVfYXQpIGFuZCBjb25jdXJyZW50IHVubGluay9leHBvcnRmcyBvcGVyYXRpb25zIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBzdGF0ZSB0cmFuc2l0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkYjA3MWQxOGI4MzViYTI2MGI2NzQ5YTgyYzM5YzVkNmJmMDUyNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjEyOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjhmMTdkYjI3MjRiMzggMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGNhY2hlLmNcbkBAIC00NTAsNiAmIzQzOzQ1MCwxNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRcdGNhbGxfcmN1KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3JjdSwgX19kX2ZyZWUpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogSWYgaW5vZGUgaXMgdW5saW5rZWQgYW5kIGRvZXNuJiMzOTt0IGhhdmUgYW55IGFsaWFzZXMgKGkuZS4sIGFsbCBmZHMgcG9pbnRpbmcgdG9cbiYjNDM7ICogaXQgYXJlIGNsb3NlZCksIGl0IGlzIHByZXR0eSBtdWNoIGRlYWQuIEV4Y2VwdCB0aGF0IGZpbGUgaGFuZGxlIGxvb2t1cCBjb3VsZFxuJiM0MzsgKiBzdGlsbCByZXZpdmUgaXQgd2hpY2ggY2F1c2VzIGlzc3VlcyB0byBmc25vdGlmeS4gU28gb25jZSBpbm9kZSByZWFjaGVzIHRoaXNcbiYjNDM7ICogc3RhdGUgd2UgbWFrZSBzdXJlIHRvIGJsb2NrIGNyZWF0aW5nIGFueSBuZXcgYWxpYXNlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGlub2RlX25vdGlmeV9kZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIWlub2RlLVx1MDAzZWlfbmxpbmsgXHUwMDI2XHUwMDI2IGhsaXN0X2VtcHR5KFx1MDAyNmlub2RlLVx1MDAzZWlfZGVudHJ5KTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFJlbGVhc2UgdGhlIGRlbnRyeSYjMzk7cyBpbm9kZSwgdXNpbmcgdGhlIGZpbGVzeXN0ZW1cbiAgKiBkX2lwdXQoKSBvcGVyYXRpb24gaWYgZGVmaW5lZC5cbkBAIC00NTksNiAmIzQzOzQ3MCw3IEBAIHN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSlcbiBcdF9fcmVsZWFzZXMoZGVudHJ5LVx1MDAzZWRfaW5vZGUtXHUwMDNlaV9sb2NrKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktXHUwMDNlZF9pbm9kZTtcbiYjNDM7XHRib29sIG5vdGlmeV9kZWFkO1xuIFxuIFx0cmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4gXHRfX2RfY2xlYXJfdHlwZV9hbmRfaW5vZGUoZGVudHJ5KTtcbkBAIC00NjksOSAmIzQzOzQ4MSwxMCBAQCBzdGF0aWMgdm9pZCBkZW50cnlfdW5saW5rX2lub2RlKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpXG4gXHQgKi9cbiBcdGRlbnRyeS1cdTAwM2V3YWl0ZXJzID0gTlVMTDtcbiBcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbiYjNDM7XHRub3RpZnlfZGVhZCA9IGlub2RlX25vdGlmeV9kZWFkKGlub2RlKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi1cdGlmICghaW5vZGUtXHUwMDNlaV9ubGluaylcbiYjNDM7XHRpZiAobm90aWZ5X2RlYWQpXG4gXHRcdGZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKTtcbiBcdGlmIChkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pcHV0KVxuIFx0XHRkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2lwdXQoZGVudHJ5LCBpbm9kZSk7XG5AQCAtMjIzNyw3ICYjNDM7MjI1MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcbiBcbiBcdHNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcbi1cdHJlcyA9IGRfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiBleGlzdGluZyBhbGlhcz8gKi9cbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSlcbiYjNDM7XHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiBleGlzdGluZyBhbGlhcz8gKi9cbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXMgPSBFUlJfUFRSKC1FU1RBTEUpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC0yMjQ5LDcgJiM0MzsyMjY3LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuIFxuIFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTsgLyogcmVjaGVjayB1bmRlciBsb2NrICovXG4mIzQzO1x0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4mIzQzO1x0XHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1x0LyogcmVjaGVjayB1bmRlciBsb2NrICovXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbiBcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cbiBcdFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OywKICAgICYjMzQ7RlNOT1RJRlkmIzM0OywKICAgICYjMzQ7SU5PVElGWV9VU0VSJiMzNDssCiAgICAmIzM0O0ZBTk9USUZZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9yb290JiMzNDssCiAgICAmIzM0O2RlbnRyeV91bmxpbmtfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGxvZ2ljIGluIGZzL2RjYWNoZS5jIChfX2Rfb2J0YWluX2FsaWFzLCBkZW50cnlfdW5saW5rX2lub2RlKSB0byBwcmV2ZW50IGZpbGUgaGFuZGxlIGxvb2t1cHMgZnJvbSBjcmVhdGluZyBhbGlhc2VzIGZvciBkZWFkIHVubGlua2VkIGlub2RlcyBhbmQgdG8gYWNjdXJhdGVseSBub3RpZnkgZnNub3RpZnkgd2hlbiB1bmxpbmtlZCBpbm9kZXMgaGF2ZSBubyByZW1haW5pbmcgYWxpYXNlcy4gRnV6emluZyB3aXRoIGZpbGUgaGFuZGxlIHN5c2NhbGxzIChvcGVuX2J5X2hhbmRsZV9hdCkgYW5kIGNvbmN1cnJlbnQgdW5saW5rL2V4cG9ydGZzIG9wZXJhdGlvbnMgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGRiMDcxZDE4YjgzNWJhMjYwYjY3NDlhODJjMzljNWQ2YmYwNTI3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTQ6MTI6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjhmMTdkYjI3MjRiMzggMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC00NTAsNiAmIzQzOzQ1MCwxNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJCWNhbGxfcmN1KCZhbXA7ZGVudHJ5LSZndDtkX3JjdSwgX19kX2ZyZWUpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBJZiBpbm9kZSBpcyB1bmxpbmtlZCBhbmQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgYWxpYXNlcyAoaS5lLiwgYWxsIGZkcyBwb2ludGluZyB0bwomIzQzOyAqIGl0IGFyZSBjbG9zZWQpLCBpdCBpcyBwcmV0dHkgbXVjaCBkZWFkLiBFeGNlcHQgdGhhdCBmaWxlIGhhbmRsZSBsb29rdXAgY291bGQKJiM0MzsgKiBzdGlsbCByZXZpdmUgaXQgd2hpY2ggY2F1c2VzIGlzc3VlcyB0byBmc25vdGlmeS4gU28gb25jZSBpbm9kZSByZWFjaGVzIHRoaXMKJiM0MzsgKiBzdGF0ZSB3ZSBtYWtlIHN1cmUgdG8gYmxvY2sgY3JlYXRpbmcgYW55IG5ldyBhbGlhc2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGlub2RlX25vdGlmeV9kZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gIWlub2RlLSZndDtpX25saW5rICZhbXA7JmFtcDsgaGxpc3RfZW1wdHkoJmFtcDtpbm9kZS0mZ3Q7aV9kZW50cnkpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBSZWxlYXNlIHRoZSBkZW50cnkmIzM5O3MgaW5vZGUsIHVzaW5nIHRoZSBmaWxlc3lzdGVtCiAgKiBkX2lwdXQoKSBvcGVyYXRpb24gaWYgZGVmaW5lZC4KQEAgLTQ1OSw2ICYjNDM7NDcwLDcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQogCV9fcmVsZWFzZXMoZGVudHJ5LSZndDtkX2lub2RlLSZndDtpX2xvY2spCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0mZ3Q7ZF9pbm9kZTsKJiM0MzsJYm9vbCBub3RpZnlfZGVhZDsKIAogCXJhd193cml0ZV9zZXFjb3VudF9iZWdpbigmYW1wO2RlbnRyeS0mZ3Q7ZF9zZXEpOwogCV9fZF9jbGVhcl90eXBlX2FuZF9pbm9kZShkZW50cnkpOwpAQCAtNDY5LDkgJiM0Mzs0ODEsMTAgQEAgc3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQogCSAqLwogCWRlbnRyeS0mZ3Q7d2FpdGVycyA9IE5VTEw7CiAJcmF3X3dyaXRlX3NlcWNvdW50X2VuZCgmYW1wO2RlbnRyeS0mZ3Q7ZF9zZXEpOwomIzQzOwlub3RpZnlfZGVhZCA9IGlub2RlX25vdGlmeV9kZWFkKGlub2RlKTsKIAlzcGluX3VubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKIAlzcGluX3VubG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwotCWlmICghaW5vZGUtJmd0O2lfbmxpbmspCiYjNDM7CWlmIChub3RpZnlfZGVhZCkKIAkJZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpOwogCWlmIChkZW50cnktJmd0O2Rfb3AgJmFtcDsmYW1wOyBkZW50cnktJmd0O2Rfb3AtJmd0O2RfaXB1dCkKIAkJZGVudHJ5LSZndDtkX29wLSZndDtkX2lwdXQoZGVudHJ5LCBpbm9kZSk7CkBAIC0yMjM3LDcgJiM0MzsyMjUwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKQogCiAJc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKIAotCXJlcyA9IGRfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiBleGlzdGluZyBhbGlhcz8gKi8KJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CWlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKQomIzQzOwkJcmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTsJLyogZXhpc3RpbmcgYWxpYXM/ICovCiYjNDM7CWVsc2UKJiM0MzsJCXJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiAJaWYgKHJlcykKIAkJZ290byBvdXQ7CiAKQEAgLTIyNDksNyAmIzQzOzIyNjcsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBkaXNjb25uZWN0ZWQpCiAKIAlzZWN1cml0eV9kX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpOwogCXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwotCXJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7IC8qIHJlY2hlY2sgdW5kZXIgbG9jayAqLwomIzQzOwlpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSkKJiM0MzsJCXJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7CS8qIHJlY2hlY2sgdW5kZXIgbG9jayAqLwomIzQzOwllbHNlCiYjNDM7CQlyZXMgPSBFUlJfUFRSKC1FU1RBTEUpOwogCWlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi8KIAkJdW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaWxlIFN5c3RlbSBDYWNoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBmcy9kY2FjaGUuY2AsIHdoaWNoIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHRoaW5rIGZpbGUgc3lzdGVtIGNhY2hlIG9wZXJhdGlvbnMg4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gZGlyZWN0b3J5IGVudHJpZXMgYW5kIGlub2RlIGhhbmRsaW5nLiBJbnRlcmVzdGluZy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGZ1bmN0aW9uLCBgaW5vZGVfbm90aWZ5X2RlYWQoKWAuIEJhc2VkIG9uIHRoZSBjb2RlLCBpdCBzZWVtcyB0byBjaGVjayBpZiBhbiBpbm9kZSBpcyAmIzM0O2RlYWQmIzM0OyDigJMgbm8gaGFyZCBsaW5rcyBhbmQgYW4gZW1wdHkgZGVudHJ5IGxpc3QuIFRoaXMgaXMga2V5LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBkZWZpbml0aW9uIGZyb250IG9mIG1pbmQuIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2YgdGhlIHBhdGNoJiMzOTtzIGxvZ2ljLgoKVGhlIG5leHQgcG9pbnQgaW52b2x2ZXMgYGRlbnRyeV91bmxpbmtfaW5vZGUoKWAuIFRoZSBtb2RpZmljYXRpb24gc3VnZ2VzdHMgdGhhdCB0aGV5JiMzOTtyZSB1c2luZyB0aGlzIGBpbm9kZV9ub3RpZnlfZGVhZCgpYCBjaGVjayB0byBkZXRlcm1pbmUgaWYgYGZzbm90aWZ5X2lub2RlcmVtb3ZlKClgIHNob3VsZCBiZSBjYWxsZWQuIFRoaXMgaW1wbGllcyBzb21lIGZvcm0gb2Ygbm90aWZpY2F0aW9uIG9yIGNsZWFudXAgd2hlbiBhbiBpbm9kZSBpcyB1bmxpbmtlZCBhbmQgYXBwZWFycyB0byBiZSBpbiBhIGRlYWQgc3RhdGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgd2UgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBjbGVhbnVwIG9mIG9ycGhhbmVkIGlub2Rlcywgb3IgYXJlIHdlIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gbm90aWZpY2F0aW9ucyBhbmQgc3RhbGUgaW5vZGVzPyBJIHdpbGwgbmVlZCB0byBsb29rIGRlZXBlci4KCkZpbmFsbHksIGBfX2Rfb2J0YWluX2FsaWFzKClgIGlzIGFsc28gbW9kaWZpZWQsIGluY29ycG9yYXRpbmcgdGhlIGBpbm9kZV9ub3RpZnlfZGVhZCgpYCBjaGVjayB1bmRlciBgaW5vZGUtJmd0O2lfbG9ja2AgYmVmb3JlIGZpbmRpbmcgb3IgYXR0YWNoaW5nIGFuIGFsaWFzLiBJZiB0aGUgaW5vZGUgaXMgY29uc2lkZXJlZCBkZWFkLCBpdCByZXR1cm5zIGAtRVNUQUxFYC4gVGhpcyB0ZWxscyBtZSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBwcmV2ZW50IHRoZSBjcmVhdGlvbiBvZiBuZXcgYWxpYXNlcyBvciB0aGUgcmV1c2Ugb2YgYWxpYXNlcyBmb3IgZGVhZCBpbm9kZXMuIFJldHVybmluZyAtRVNUQUxFIGFsc28gaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgdGhlbiByZXRyeSB0aGUgb3BlcmF0aW9uIG9yIG90aGVyd2lzZSBzaWduYWwgZmFpbHVyZS4KCkkgbmVlZCB0byBxdWlja2x5IGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgdGhlc2UgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9uIGBmcy9kY2FjaGUuY2AgdG8gbG9vayBhdCB0aGlzIG1vcmUgY2xvc2VseSwgcGFydGljdWxhcmx5IGFyb3VuZCB3aGVyZSB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgZGNhY2hlIHdpbGwgYmUgZXNzZW50aWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZF9vYnRhaW5fYWxpYXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MjIzOT1FWFBPUlRfU1lNQk9MKGRfbWFrZV9yb290KTtcbmZzL2RjYWNoZS5jLTIyNDAtXG5mcy9kY2FjaGUuYzoyMjQxOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuZnMvZGNhY2hlLmMtMjI0Mi17XG4tLVxuZnMvZGNhY2hlLmM9MjMyMD1zdHJ1Y3QgZGVudHJ5ICpkX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZGNhY2hlLmMtMjMyMS17XG5mcy9kY2FjaGUuYzoyMzIyOlx0cmV0dXJuIF9fZF9vYnRhaW5fYWxpYXMoaW5vZGUsIHRydWUpO1xuZnMvZGNhY2hlLmMtMjMyMy19XG4tLVxuZnMvZGNhY2hlLmM9MjM0MT1zdHJ1Y3QgZGVudHJ5ICpkX29idGFpbl9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9kY2FjaGUuYy0yMzQyLXtcbmZzL2RjYWNoZS5jOjIzNDM6XHRyZXR1cm4gX19kX29idGFpbl9hbGlhcyhpbm9kZSwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMjM0NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgc25pcHBldHMgYXMgaWYgdGhleSB3ZXJlIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIGBmcy9kY2FjaGUuY2AgZm9yIENvbnRleHQqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGZzL2RjYWNoZS5jYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDIyMzUtMjMwMCBhbmQgdGhlbiBsb29waW5nIGJhY2sgdG8gNDUwLTUwMC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIGFyb3VuZCB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBkZW50cnkgY2FjaGUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZmlsZXN5c3RlbSBsYXllciwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4KCkkgc3VzcGVjdCB0aGF0IHNlZ21lbnQgMjIzNS0yMzAwLCBpcyBpbnZvbHZlZCBpbiBkZW50cnkgaW52YWxpZGF0aW9uIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiDigJMgcGVyaGFwcyBoYW5kbGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBhY3RpdmUgZGVudHJpZXMsIG9yIGhvdyBpdCBkZWFscyB3aXRoIHRoZSByZW1vdmFsIG9mIGVudHJpZXMuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHdpdGhpbiB0aGF0IHBvcnRpb24gb2YgdGhlIGNvZGUsIGFzIHdlbGwgYXMgdGhlIGNvbmRpdGlvbnMgd2hlcmUgaXQgZ2V0cyB0cmlnZ2VyZWQuIE15IG1lbnRhbCBjaGVja2xpc3QgaW5jbHVkZXMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBpbm9kZS9zdXBlcmJsb2NrIHN0cnVjdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgdHlwZXMgb2YgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBsaWtlIHVubGlua2luZyBvciByZW5hbWluZy4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4KClRoZW4sIEkgd2FudCB0byBiYWNrIHVwIGEgYml0IGFuZCBsb29rIGF0IHRoZSBtb3JlIGZvdW5kYXRpb25hbCBvcGVyYXRpb25zIGZyb20gbGluZXMgNDUwLTUwMC4gVGhpcyBhcmVhIHdpbGwgbGlrZWx5IGNvdmVyIHRoZSBmdW5kYW1lbnRhbCBkZW50cnkgYWxsb2NhdGlvbiBvciBsb29rdXAgcm91dGluZXMsIG9yIHBlcmhhcHMgZXZlbiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcGllY2VzIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgbGF0ZXIgc2VnbWVudC4gSSYjMzk7bSBjdXJpb3VzIGlmIHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIGFueSBjYWNoaW5nIHN0cmF0ZWdpZXMgd2l0aGluIHRoZSBkZW50cnkgaXRzZWxmLCBhbmQgaG93IHRob3NlIGNhY2hpbmcgZGVjaXNpb25zIG1heSBiZSBpbmZsdWVuY2luZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGxvb2t1cHMsIGFuZCBob3cgdGhhdCBpbnRlcnNlY3RzIHdpdGggdGhlIGxvY2tpbmcgbWVjaGFuaXNtLCBhbmQgb3RoZXIgY29yZSBmdW5jdGlvbnMuIEkgd291bGQgbGlrZSB0byBzZWUgaG93IGVmZmljaWVudCBpdCBpcyBhbmQgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQ1Olx0XHR9XG4gNDQ2Olx0XHQvKiBpZiBkZW50cnkgd2FzIG5ldmVyIHZpc2libGUgdG8gUkNVLCBpbW1lZGlhdGUgZnJlZSBpcyBPSyAqL1xuIDQ0NzpcdFx0aWYgKGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNiBEQ0FDSEVfTk9SQ1UpXG4gNDQ4Olx0XHRcdF9fZF9mcmVlKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3JjdSk7XG4gNDQ5Olx0XHRlbHNlXG4gNDUwOlx0XHRcdGNhbGxfcmN1KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3JjdSwgX19kX2ZyZWUpO1xuIDQ1MTpcdH1cbiA0NTI6XHRcbiA0NTM6XHQvKlxuIDQ1NDpcdCAqIElmIGlub2RlIGlzIHVubGlua2VkIGFuZCBkb2VzbiYjMzk7dCBoYXZlIGFueSBhbGlhc2VzIChpLmUuLCBhbGwgZmRzIHBvaW50aW5nIHRvXG4gNDU1Olx0ICogaXQgYXJlIGNsb3NlZCksIGl0IGlzIHByZXR0eSBtdWNoIGRlYWQuIEV4Y2VwdCB0aGF0IGZpbGUgaGFuZGxlIGxvb2t1cCBjb3VsZFxuIDQ1NjpcdCAqIHN0aWxsIHJldml2ZSBpdCB3aGljaCBjYXVzZXMgaXNzdWVzIHRvIGZzbm90aWZ5LiBTbyBvbmNlIGlub2RlIHJlYWNoZXMgdGhpc1xuIDQ1NzpcdCAqIHN0YXRlIHdlIG1ha2Ugc3VyZSB0byBibG9jayBjcmVhdGluZyBhbnkgbmV3IGFsaWFzZXMuXG4gNDU4Olx0ICovXG4gNDU5Olx0c3RhdGljIGJvb2wgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlcbiA0NjA6XHR7XG4gNDYxOlx0XHRyZXR1cm4gIWlub2RlLVx1MDAzZWlfbmxpbmsgXHUwMDI2XHUwMDI2IGhsaXN0X2VtcHR5KFx1MDAyNmlub2RlLVx1MDAzZWlfZGVudHJ5KTtcbiA0NjI6XHR9XG4gNDYzOlx0XG4gNDY0Olx0LypcbiA0NjU6XHQgKiBSZWxlYXNlIHRoZSBkZW50cnkmIzM5O3MgaW5vZGUsIHVzaW5nIHRoZSBmaWxlc3lzdGVtXG4gNDY2Olx0ICogZF9pcHV0KCkgb3BlcmF0aW9uIGlmIGRlZmluZWQuXG4gNDY3Olx0ICovXG4gNDY4Olx0c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuIDQ2OTpcdFx0X19yZWxlYXNlcyhkZW50cnktXHUwMDNlZF9sb2NrKVxuIDQ3MDpcdFx0X19yZWxlYXNlcyhkZW50cnktXHUwMDNlZF9pbm9kZS1cdTAwM2VpX2xvY2spXG4gNDcxOlx0e1xuIDQ3MjpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS1cdTAwM2VkX2lub2RlO1xuIDQ3MzpcdFx0Ym9vbCBub3RpZnlfZGVhZDtcbiA0NzQ6XHRcbiA0NzU6XHRcdHJhd193cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuIDQ3NjpcdFx0X19kX2NsZWFyX3R5cGVfYW5kX2lub2RlKGRlbnRyeSk7XG4gNDc3Olx0XHRfX2hsaXN0X2RlbChcdTAwMjZkZW50cnktXHUwMDNlZF9hbGlhcyk7XG4gNDc4Olx0XHQvKlxuIDQ3OTpcdFx0ICogZGVudHJ5IGJlY29tZXMgbmVnYXRpdmUsIHNvIHRoZSBzcGFjZSBvY2N1cGllZCBieSAtXHUwMDNlZF9hbGlhc1xuIDQ4MDpcdFx0ICogYmVsb25ncyB0byAtXHUwMDNld2FpdGVycyBub3cuXG4gNDgxOlx0XHQgKi9cbiA0ODI6XHRcdGRlbnRyeS1cdTAwM2V3YWl0ZXJzID0gTlVMTDtcbiA0ODM6XHRcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbiA0ODQ6XHRcdG5vdGlmeV9kZWFkID0gaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpO1xuIDQ4NTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4gNDg2Olx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDQ4NzpcdFx0aWYgKG5vdGlmeV9kZWFkKVxuIDQ4ODpcdFx0XHRmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7XG4gNDg5Olx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaXB1dClcbiA0OTA6XHRcdFx0ZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pcHV0KGRlbnRyeSwgaW5vZGUpO1xuIDQ5MTpcdFx0ZWxzZVxuIDQ5MjpcdFx0XHRpcHV0KGlub2RlKTtcbiA0OTM6XHR9XG4gNDk0Olx0XG4gNDk1Olx0LypcbiA0OTY6XHQgKiBUaGUgRENBQ0hFX0xSVV9MSVNUIGJpdCBpcyBzZXQgd2hlbmV2ZXIgdGhlICYjMzk7ZF9scnUmIzM5OyBlbnRyeVxuIDQ5NzpcdCAqIGlzIGluIHVzZSAtIHdoaWNoIGluY2x1ZGVzIGJvdGggdGhlIFwmIzM0O3JlYWxcJiMzNDsgcGVyLXN1cGVyYmxvY2tcbiA0OTg6XHQgKiBMUlUgbGlzdCBfYW5kXyB0aGUgRENBQ0hFX1NIUklOS19MSVNUIHVzZS5cbiA0OTk6XHQgKlxuIDUwMDpcdCAqIFRoZSBEQ0FDSEVfU0hSSU5LX0xJU1QgYml0IGlzIHNldCB3aGVuZXZlciB0aGUgZGVudHJ5IGlzXG4gNTAxOlx0ICogb24gdGhlIHNocmluayBsaXN0IChpZSBub3Qgb24gdGhlIHN1cGVyYmxvY2sgTFJVIGxpc3QpLlxuIDUwMjpcdCAqXG4gNTAzOlx0ICogVGhlIHBlci1jcHUgXCYjMzQ7bnJfZGVudHJ5X3VudXNlZFwmIzM0OyBjb3VudGVycyBhcmUgdXBkYXRlZCB3aXRoXG4gNTA0Olx0ICogdGhlIERDQUNIRV9MUlVfTElTVCBiaXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCBhc3N1bWluZyBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBSZWxldmFudCBUZXh0IENodW5rcyoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgMjIzNS0yMzAwLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgZ3Jhc3Agb2YgdGhpcyBzcGVjaWZpYyBzZWN0aW9uLiBHaXZlbiBteSBleGlzdGluZyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbnRleHQgYW5kIHRoZSBudWFuY2VzIG9mIHRoZSBzdWJqZWN0IG1hdHRlciwgSeKAmW0gZ3Vlc3NpbmcgdGhpcyByYW5nZSBsaWtlbHkgY29udGFpbnMgdGhlIGNyaXRpY2FsIGRldGFpbHMgSSYjMzk7bSBhZnRlciwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHJlbGV2YW50IGNvbnRleHQgdGhhdCBoZWxwcyB3aXRoIG15IGN1cnJlbnQgb2JqZWN0aXZlLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgaXQgd2l0aCBhIGZpbmUtdG9vdGggY29tYiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3BlY2lmaWMgYXJndW1lbnRzIHByZXNlbnRlZCwgYW55IHN1cHBvcnRpbmcgZGF0YSBvciBldmlkZW5jZSwgYW5kIHRoZSBvdmVyYWxsIG5hcnJhdGl2ZSBmbG93IHdpdGhpbiB0aGlzIGRlbGltaXRlZCByYW5nZS4gSXQmIzM5O3MgYSBrZXkgc2VnbWVudCwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJpYXNlcywgaW5jb25zaXN0ZW5jaWVzLCBvciBhbnkgc3VycHJpc2luZyByZXZlbGF0aW9ucyB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgd2F5IEkgdGhpbmsgYWJvdXQgdGhlIGVudGlyZSBkb2N1bWVudC4gTXkgZXhwZXJ0aXNlIGxldHMgbWUgY3V0IHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIzNTpcdFx0XHRcdGlwdXQocm9vdF9pbm9kZSk7XG4yMjM2Olx0XHR9XG4yMjM3Olx0XHRyZXR1cm4gcmVzO1xuMjIzODpcdH1cbjIyMzk6XHRFWFBPUlRfU1lNQk9MKGRfbWFrZV9yb290KTtcbjIyNDA6XHRcbjIyNDE6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcbjIyNDI6XHR7XG4yMjQzOlx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiO1xuMjI0NDpcdFx0c3RydWN0IGRlbnRyeSAqbmV3LCAqcmVzO1xuMjI0NTpcdFxuMjI0NjpcdFx0aWYgKCFpbm9kZSlcbjIyNDc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7XG4yMjQ4Olx0XHRpZiAoSVNfRVJSKGlub2RlKSlcbjIyNDk6XHRcdFx0cmV0dXJuIEVSUl9DQVNUKGlub2RlKTtcbjIyNTA6XHRcbjIyNTE6XHRcdHNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbjIyNTI6XHRcbjIyNTM6XHRcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuMjI1NDpcdFx0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4yMjU1Olx0XHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiBleGlzdGluZyBhbGlhcz8gKi9cbjIyNTY6XHRcdGVsc2VcbjIyNTc6XHRcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbjIyNTg6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4yMjU5Olx0XHRpZiAocmVzKVxuMjI2MDpcdFx0XHRnb3RvIG91dDtcbjIyNjE6XHRcbjIyNjI6XHRcdG5ldyA9IGRfYWxsb2NfYW5vbihzYik7XG4yMjYzOlx0XHRpZiAoIW5ldykge1xuMjI2NDpcdFx0XHRyZXMgPSBFUlJfUFRSKC1FTk9NRU0pO1xuMjI2NTpcdFx0XHRnb3RvIG91dDtcbjIyNjY6XHRcdH1cbjIyNjc6XHRcbjIyNjg6XHRcdHNlY3VyaXR5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7XG4yMjY5Olx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIyNzA6XHRcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxuMjI3MTpcdFx0XHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1x0LyogcmVjaGVjayB1bmRlciBsb2NrICovXG4yMjcyOlx0XHRlbHNlXG4yMjczOlx0XHRcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XG4yMjc0Olx0XHRpZiAobGlrZWx5KCFyZXMpKSB7IC8qIHN0aWxsIG5vIGFsaWFzLCBhdHRhY2ggYSBkaXNjb25uZWN0ZWQgZGVudHJ5ICovXG4yMjc1Olx0XHRcdHVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTtcbjIyNzY6XHRcbjIyNzc6XHRcdFx0aWYgKGRpc2Nvbm5lY3RlZClcbjIyNzg6XHRcdFx0XHRhZGRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDtcbjIyNzk6XHRcbjIyODA6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm5ldy1cdTAwM2VkX2xvY2spO1xuMjI4MTpcdFx0XHRfX2Rfc2V0X2lub2RlX2FuZF90eXBlKG5ldywgaW5vZGUsIGFkZF9mbGFncyk7XG4yMjgyOlx0XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNm5ldy1cdTAwM2VkX2FsaWFzLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RlbnRyeSk7XG4yMjgzOlx0XHRcdGlmICghZGlzY29ubmVjdGVkKSB7XG4yMjg0Olx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfcm9vdHNfbG9jayk7XG4yMjg1Olx0XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfc2liLCBcdTAwMjZzYi1cdTAwM2VzX3Jvb3RzKTtcbjIyODY6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX3Jvb3RzX2xvY2spO1xuMjI4NzpcdFx0XHR9XG4yMjg4Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldy1cdTAwM2VkX2xvY2spO1xuMjI4OTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuMjI5MDpcdFx0XHRpbm9kZSA9IE5VTEw7IC8qIGNvbnN1bWVkIGJ5IG5ldy1cdTAwM2VkX2lub2RlICovXG4yMjkxOlx0XHRcdHJlcyA9IG5ldztcbjIyOTI6XHRcdH0gZWxzZSB7XG4yMjkzOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4yMjk0Olx0XHRcdGRwdXQobmV3KTtcbjIyOTU6XHRcdH1cbjIyOTY6XHRcbjIyOTc6XHQgb3V0OlxuMjI5ODpcdFx0aXB1dChpbm9kZSk7XG4yMjk5Olx0XHRyZXR1cm4gcmVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvcmUgVkZTIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTLCBzcGVjaWZpY2FsbHkgYGZzL2RjYWNoZS5jYC4gVGhpcyBpcyBhICp2ZXJ5KiBpbnRlcmVzdGluZyBhcmVhLCBpbnZvbHZpbmcgdGhlIGRjYWNoZSwgYG9wZW5fYnlfaGFuZGxlX2F0YCwgYG5hbWVfdG9faGFuZGxlX2F0YCwgYGV4cG9ydGZzYCwgZmlsZSB1bmxpbmtpbmcsIGFuZCBgZnNub3RpZnlgLiAqRGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIGxvZ2ljIGNoYW5nZXMgcmVsYXRlZCB0byB1bmxpbmtlZCBkZWFkIGlub2RlcyBkdXJpbmcgYWxpYXMgcmVzb2x1dGlvbiBhbmQgZnNub3RpZnkgZXZlbnQgZ2VuZXJhdGlvbiBhcmUgY3JpdGljYWwsIHRoYXQmIzM5O3Mgd2hlcmUgYnVncyBjYW4gaGlkZS4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gYGZzL2RjYWNoZS5jYCBpcyBjb3JlIFZGUywgc28gaXQmIzM5O3MgYWx3YXlzIGJ1aWx0LWluLCBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIGRpcmVjdGx5LiBIb3dldmVyLCBhcmUgdGhlcmUgKmluZGlyZWN0KiBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcz8gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgb3Blbl9ieV9oYW5kbGVfYXRgIGFuZCBleHBvcnQgb3BlcmF0aW9ucyBvciBgZnNub3RpZnlgLiBgRlNOT1RJRllgIGl0c2VsZiBpcyBzdGFuZGFyZCwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGBDT05GSUdfRVhQT1JURlNgIG9yIGBDT05GSUdfRkhBTkRMRWAgbWlnaHQgYmUgcmVsZXZhbnQsIHNpbmNlIHRob3NlICpkbyogZW5hYmxlIHRoZSBmaWxlIGhhbmRsZSBzeXNjYWxscyBsaWtlIGBuYW1lX3RvX2hhbmRsZV9hdGAgYW5kIGBvcGVuX2J5X2hhbmRsZV9hdGAuIFRoZXNlIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLiBUaGV5IGNhbiBtYWtlIHRoZSBiZWhhdmlvciBvZiB0aGUgY29yZSBWRlMgY2hhbmdlLgoKVG8gbWFrZSBzdXJlIEkgaGF2ZSBjb3ZlcmVkIGFsbCB0aGUgc2NlbmFyaW9zLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgZF9vYnRhaW5fYWxpYXNgIGlzIGNhbGxlZCBhY3Jvc3MgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgaG93IHRoaXMgY2hhbmdlIGltcGFjdHMgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZF9vYnRhaW5fYWxpYXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9uYW1laS5jPTUyMz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2FmZnMvbmFtZWkuYy01MzQtXHRicmVsc2UoYmgpO1xuZnMvYWZmcy9uYW1laS5jOjUzNTpcdHJldHVybiBkX29idGFpbl9hbGlhcyhwYXJlbnQpO1xuZnMvYWZmcy9uYW1laS5jLTUzNi19XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTY2NT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmVmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy02NzEtXHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcpYmVmc19pbm8tXHUwMDNlaV9wYXJlbnQuc3RhcnQpO1xuZnMvYmVmcy9saW51eHZmcy5jOjY3MjpcdHJldHVybiBkX29idGFpbl9hbGlhcyhwYXJlbnQpO1xuZnMvYmVmcy9saW51eHZmcy5jLTY3My19XG4tLVxuZnMvYnRyZnMvZXhwb3J0LmM9Nzk9c3RydWN0IGRlbnRyeSAqYnRyZnNfZ2V0X2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2JqZWN0aWQsXG4tLVxuZnMvYnRyZnMvZXhwb3J0LmMtMTAyLVxuZnMvYnRyZnMvZXhwb3J0LmM6MTAzOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFx1MDAyNmlub2RlLVx1MDAzZXZmc19pbm9kZSk7XG5mcy9idHJmcy9leHBvcnQuYy0xMDQtfVxuLS1cbmZzL2J0cmZzL2V4cG9ydC5jPTE1Mj1zdHJ1Y3QgZGVudHJ5ICpidHJmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2J0cmZzL2V4cG9ydC5jLTIyMy1cbmZzL2J0cmZzL2V4cG9ydC5jOjIyNDpcdHJldHVybiBkX29idGFpbl9hbGlhcyhcdTAwMjZpbm9kZS1cdTAwM2V2ZnNfaW5vZGUpO1xuZnMvYnRyZnMvZXhwb3J0LmMtMjI1LWZhaWw6XG4tLVxuZnMvY2VwaC9leHBvcnQuYz0xODk9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBpbm8pXG4tLVxuZnMvY2VwaC9leHBvcnQuYy0yMDctXHR9XG5mcy9jZXBoL2V4cG9ydC5jOjIwODpcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XG5mcy9jZXBoL2V4cG9ydC5jLTIwOS19XG4tLVxuZnMvY2VwaC9leHBvcnQuYz0yMTE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fc25hcGZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2NlcGgvZXhwb3J0LmMtMjQ1LVx0XHR9XG5mcy9jZXBoL2V4cG9ydC5jOjI0NjpcdFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2NlcGgvZXhwb3J0LmMtMjQ3LVx0fVxuLS1cbmZzL2NlcGgvZXhwb3J0LmMtMjk0LVx0Lyogc2VlIGNvbW1lbnRzIGluIGNlcGhfZ2V0X3BhcmVudCgpICovXG5mcy9jZXBoL2V4cG9ydC5jOjI5NTpcdHJldHVybiB1bmxpbmtlZCA/IGRfb2J0YWluX3Jvb3QoaW5vZGUpIDogZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMvY2VwaC9leHBvcnQuYy0yOTYtfVxuLS1cbmZzL2NlcGgvZXhwb3J0LmM9MzIzPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2dldF9wYXJlbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9jZXBoL2V4cG9ydC5jLTM2NS1cbmZzL2NlcGgvZXhwb3J0LmM6MzY2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2NlcGgvZXhwb3J0LmMtMzY3LX1cbi0tXG5mcy9jZXBoL2V4cG9ydC5jPTM2OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY2VwaF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2NlcGgvZXhwb3J0LmMtNDA2LVx0XHRlbHNlXG5mcy9jZXBoL2V4cG9ydC5jOjQwNzpcdFx0XHRkbiA9IGRfb2J0YWluX2FsaWFzKGRpcik7XG5mcy9jZXBoL2V4cG9ydC5jLTQwOC1cdH0gZWxzZSB7XG4tLVxuZnMvZGNhY2hlLmM9MjIzOT1FWFBPUlRfU1lNQk9MKGRfbWFrZV9yb290KTtcbmZzL2RjYWNoZS5jLTIyNDAtXG5mcy9kY2FjaGUuYzoyMjQxOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuZnMvZGNhY2hlLmMtMjI0Mi17XG4tLVxuZnMvZGNhY2hlLmMtMjMwMi0vKipcbmZzL2RjYWNoZS5jOjIzMDM6ICogZF9vYnRhaW5fYWxpYXMgLSBmaW5kIG9yIGFsbG9jYXRlIGEgRElTQ09OTkVDVEVEIGRlbnRyeSBmb3IgYSBnaXZlbiBpbm9kZVxuZnMvZGNhY2hlLmMtMjMwNC0gKiBAaW5vZGU6IGlub2RlIHRvIGFsbG9jYXRlIHRoZSBkZW50cnkgZm9yXG4tLVxuZnMvZGNhY2hlLmMtMjMxOS0gKi9cbmZzL2RjYWNoZS5jOjIzMjA6c3RydWN0IGRlbnRyeSAqZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2RjYWNoZS5jLTIzMjEte1xuZnMvZGNhY2hlLmM6MjMyMjpcdHJldHVybiBfX2Rfb2J0YWluX2FsaWFzKGlub2RlLCB0cnVlKTtcbmZzL2RjYWNoZS5jLTIzMjMtfVxuZnMvZGNhY2hlLmM6MjMyNDpFWFBPUlRfU1lNQk9MKGRfb2J0YWluX2FsaWFzKTtcbmZzL2RjYWNoZS5jLTIzMjUtXG4tLVxuZnMvZGNhY2hlLmM9MjM0MT1zdHJ1Y3QgZGVudHJ5ICpkX29idGFpbl9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9kY2FjaGUuYy0yMzQyLXtcbmZzL2RjYWNoZS5jOjIzNDM6XHRyZXR1cm4gX19kX29idGFpbl9hbGlhcyhpbm9kZSwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMjM0NC19XG4tLVxuZnMvZXJvZnMvaXNoYXJlLmM9MzM9Ym9vbCBlcm9mc19pc2hhcmVfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2Vyb2ZzL2lzaGFyZS5jLTcxLVx0fVxuZnMvZXJvZnMvaXNoYXJlLmM6NzI6XHRzZCA9IGRfb2J0YWluX2FsaWFzKHNpKTsgLyogZGlzY29ubmVjdGVkIGRlbnRpZXMgZm9yIHNoYXJlZGlub2RlcyAqL1xuZnMvZXJvZnMvaXNoYXJlLmMtNzMtXHRpZiAoSVNfRVJSKHNkKSlcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTU5Nj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXJvZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02MDItXG5mcy9lcm9mcy9zdXBlci5jOjYwMzpcdHJldHVybiBkX29idGFpbl9hbGlhcyhlcm9mc19pZ2V0KHNiLFxuZnMvZXJvZnMvc3VwZXIuYy02MDQtXHRcdCgodTY0KWZpZC1cdTAwM2VyYXdbMF0gXHUwMDNjXHUwMDNjIDMyKSB8IGZpZC1cdTAwM2VyYXdbMV0pKTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTYwNz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXJvZnNfZmhfdG9fcGFyZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02MTItXG5mcy9lcm9mcy9zdXBlci5jOjYxMzpcdHJldHVybiBkX29idGFpbl9hbGlhcyhlcm9mc19pZ2V0KHNiLFxuZnMvZXJvZnMvc3VwZXIuYy02MTQtXHRcdCgodTY0KWZpZC1cdTAwM2VyYXdbM10gXHUwMDNjXHUwMDNjIDMyKSB8IGZpZC1cdTAwM2VyYXdbNF0pKTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTYxNz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXJvZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTYyNS1cdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbmZzL2Vyb2ZzL3N1cGVyLmM6NjI2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGVyb2ZzX2lnZXQoY2hpbGQtXHUwMDNlZF9zYiwgbmlkKSk7XG5mcy9lcm9mcy9zdXBlci5jLTYyNy19XG4tLVxuZnMvZXh0Mi9uYW1laS5jPTgwPXN0cnVjdCBkZW50cnkgKmV4dDJfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9leHQyL25hbWVpLmMtODgtXG5mcy9leHQyL25hbWVpLmM6ODk6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXh0Ml9pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIGlubykpO1xuZnMvZXh0Mi9uYW1laS5jLTkwLX0gXG4tLVxuZnMvZXh0NC9uYW1laS5jPTE4MTg9c3RydWN0IGRlbnRyeSAqZXh0NF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xODM3LVxuZnMvZXh0NC9uYW1laS5jOjE4Mzg6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXh0NF9pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIGlubywgRVhUNF9JR0VUX05PUk1BTCkpO1xuZnMvZXh0NC9uYW1laS5jLTE4MzktfVxuLS1cbmZzL2YyZnMvbmFtZWkuYz00NzQ9c3RydWN0IGRlbnRyeSAqZjJmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2YyZnMvbmFtZWkuYy00ODMtXHR9XG5mcy9mMmZzL25hbWVpLmM6NDg0Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGYyZnNfaWdldChjaGlsZC1cdTAwM2VkX3NiLCBpbm8pKTtcbmZzL2YyZnMvbmFtZWkuYy00ODUtfVxuLS1cbmZzL2ZhdC9uZnMuYz0xNTU9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhdF9maF90b19kZW50cnlfbm9zdGFsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2ZhdC9uZnMuYy0xNzgtXG5mcy9mYXQvbmZzLmM6MTc5Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2ZhdC9uZnMuYy0xODAtfVxuLS1cbmZzL2ZhdC9uZnMuYz0xOTM9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhdF9maF90b19wYXJlbnRfbm9zdGFsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2ZhdC9uZnMuYy0yMTEtXG5mcy9mYXQvbmZzLmM6MjEyOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2ZhdC9uZnMuYy0yMTMtfVxuLS1cbmZzL2ZhdC9uZnMuYz0yNzA9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhdF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkX2Rpcilcbi0tXG5mcy9mYXQvbmZzLmMtMjg1LVxuZnMvZmF0L25mcy5jOjI4NjpcdHJldHVybiBkX29idGFpbl9hbGlhcyhwYXJlbnRfaW5vZGUpO1xuZnMvZmF0L25mcy5jLTI4Ny19XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTEwNTQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZ1c2VfZ2V0X2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xMDg3LVxuZnMvZnVzZS9pbm9kZS5jOjEwODg6XHRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2Z1c2UvaW5vZGUuYy0xMDg5LVx0aWYgKCFJU19FUlIoZW50cnkpIFx1MDAyNlx1MDAyNiBnZXRfbm9kZV9pZChpbm9kZSkgIT0gRlVTRV9ST09UX0lEKVxuLS1cbmZzL2Z1c2UvaW5vZGUuYz0xMTYxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmdXNlX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTExODAtXG5mcy9mdXNlL2lub2RlLmM6MTE4MTpcdHBhcmVudCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2Z1c2UvaW5vZGUuYy0xMTgyLVx0aWYgKCFJU19FUlIocGFyZW50KSBcdTAwMjZcdTAwMjYgZ2V0X25vZGVfaWQoaW5vZGUpICE9IEZVU0VfUk9PVF9JRClcbi0tXG5mcy9nZnMyL2V4cG9ydC5jPTEyNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuZnMvZ2ZzMi9leHBvcnQuYy0xMjcte1xuZnMvZ2ZzMi9leHBvcnQuYzoxMjg6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZ2ZzMl9sb29rdXBpKGRfaW5vZGUoY2hpbGQpLCBcdTAwMjZnZnMyX3Fkb3Rkb3QsIDEpKTtcbmZzL2dmczIvZXhwb3J0LmMtMTI5LX1cbi0tXG5mcy9nZnMyL2V4cG9ydC5jPTEzMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9nZXRfZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZ2ZzMi9leHBvcnQuYy0xNDAtXHRcdFx0XHQgICAgR0ZTMl9CTEtTVF9ESU5PREUpO1xuZnMvZ2ZzMi9leHBvcnQuYzoxNDE6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMvZ2ZzMi9leHBvcnQuYy0xNDItfVxuLS1cbmZzL2lzb2ZzL2V4cG9ydC5jPTIwPWlzb2ZzX2V4cG9ydF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvaXNvZnMvZXhwb3J0LmMtMzUtXHR9XG5mcy9pc29mcy9leHBvcnQuYzozNjpcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XG5mcy9pc29mcy9leHBvcnQuYy0zNy19XG4tLVxuZnMvaXNvZnMvZXhwb3J0LmM9NDQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmlzb2ZzX2V4cG9ydF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2lzb2ZzL2V4cG9ydC5jLTEwOS1cbmZzL2lzb2ZzL2V4cG9ydC5jOjExMDpcdHJ2ID0gZF9vYnRhaW5fYWxpYXMoaXNvZnNfaWdldChjaGlsZF9pbm9kZS1cdTAwM2VpX3NiLCBwYXJlbnRfYmxvY2ssXG5mcy9pc29mcy9leHBvcnQuYy0xMTEtXHRcdFx0XHQgICAgIHBhcmVudF9vZmZzZXQpKTtcbi0tXG5mcy9qZmZzMi9zdXBlci5jPTEzNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqamZmczJfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9qZmZzMi9zdXBlci5jLTE0OS1cbmZzL2pmZnMyL3N1cGVyLmM6MTUwOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGpmZnMyX2lnZXQoY2hpbGQtXHUwMDNlZF9zYiwgcGlubykpO1xuZnMvamZmczIvc3VwZXIuYy0xNTEtfVxuLS1cbmZzL2pmcy9uYW1laS5jPTE1MTM9c3RydWN0IGRlbnRyeSAqamZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2pmcy9uYW1laS5jLTE1MTktXG5mcy9qZnMvbmFtZWkuYzoxNTIwOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGpmc19pZ2V0KGRlbnRyeS1cdTAwM2VkX3NiLCBwYXJlbnRfaW5vKSk7XG5mcy9qZnMvbmFtZWkuYy0xNTIxLX1cbi0tXG5mcy9rZXJuZnMvbW91bnQuYz05Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19rZXJuZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMva2VybmZzL21vdW50LmMtMTQyLVx0a2VybmZzX3B1dChrbik7XG5mcy9rZXJuZnMvbW91bnQuYzoxNDM6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMva2VybmZzL21vdW50LmMtMTQ0LX1cbi0tXG5mcy9rZXJuZnMvbW91bnQuYz0xNjA9c3RhdGljIHN0cnVjdCBkZW50cnkgKmtlcm5mc19nZXRfcGFyZW50X2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9rZXJuZnMvbW91bnQuYy0xNjUtXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZyb290LVx1MDAzZWtlcm5mc19yd3NlbSk7XG5mcy9rZXJuZnMvbW91bnQuYzoxNjY6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoa2VybmZzX2dldF9pbm9kZShjaGlsZC1cdTAwM2VkX3NiLCBrZXJuZnNfcGFyZW50KGtuKSkpO1xuZnMva2VybmZzL21vdW50LmMtMTY3LX1cbi0tXG5mcy9saWJmcy5jPTE0ODc9c3RydWN0IGRlbnRyeSAqZ2VuZXJpY19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxuLS1cbmZzL2xpYmZzLmMtMTUwMi1cbmZzL2xpYmZzLmM6MTUwMzpcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XG5mcy9saWJmcy5jLTE1MDQtfVxuLS1cbmZzL2xpYmZzLmM9MTUyMD1zdHJ1Y3QgZGVudHJ5ICpnZW5lcmljX2ZoX3RvX3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlkICpmaWQsXG4tLVxuZnMvbGliZnMuYy0xNTM1LVxuZnMvbGliZnMuYzoxNTM2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2xpYmZzLmMtMTUzNy19XG4tLVxuZnMvbmZzL2V4cG9ydC5jPTY0PW5mc19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxuLS1cbmZzL25mcy9leHBvcnQuYy0xMTUtb3V0X2ZvdW5kOlxuZnMvbmZzL2V4cG9ydC5jOjExNjpcdGRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL25mcy9leHBvcnQuYy0xMTctb3V0X2ZyZWVfZmF0dHI6XG4tLVxuZnMvbmZzL2V4cG9ydC5jPTEyND1uZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvbmZzL2V4cG9ydC5jLTE0OC1cdHBpbm9kZSA9IG5mc19maGdldChzYiwgXHUwMDI2ZmgsIGZhdHRyKTtcbmZzL25mcy9leHBvcnQuYzoxNDk6XHRwYXJlbnQgPSBkX29idGFpbl9hbGlhcyhwaW5vZGUpO1xuZnMvbmZzL2V4cG9ydC5jLTE1MC1vdXQ6XG4tLVxuZnMvbmlsZnMyL25hbWVpLmM9NDY0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuaWxmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL25pbGZzMi9uYW1laS5jLTQ3NS1cbmZzL25pbGZzMi9uYW1laS5jOjQ3NjpcdHJldHVybiBkX29idGFpbl9hbGlhcyhuaWxmc19pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIHJvb3QsIGlubykpO1xuZnMvbmlsZnMyL25hbWVpLmMtNDc3LX1cbi0tXG5mcy9uaWxmczIvbmFtZWkuYz00Nzk9c3RhdGljIHN0cnVjdCBkZW50cnkgKm5pbGZzX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGNubyxcbi0tXG5mcy9uaWxmczIvbmFtZWkuYy01MDAtXHR9XG5mcy9uaWxmczIvbmFtZWkuYzo1MDE6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMvbmlsZnMyL25hbWVpLmMtNTAyLX1cbi0tXG5mcy9udGZzL25hbWVpLmM9MTU4OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkX2RlbnQpXG4tLVxuZnMvbnRmcy9uYW1laS5jLTE2MzYtXG5mcy9udGZzL25hbWVpLmM6MTYzNzpcdHJldHVybiBkX29idGFpbl9hbGlhcyhudGZzX2lnZXQodmktXHUwMDNlaV9zYiwgcGFyZW50X2lubykpO1xuZnMvbnRmcy9uYW1laS5jLTE2MzgtfVxuLS1cbmZzL250ZnMzL25hbWVpLmM9Mzc5PXN0cnVjdCBkZW50cnkgKm50ZnMzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXG4tLVxuZnMvbnRmczMvbmFtZWkuYy0zOTMtXG5mcy9udGZzMy9uYW1laS5jOjM5NDpcdFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFxuZnMvbnRmczMvbmFtZWkuYy0zOTUtXHRcdFx0bnRmc19pZ2V0NShpbm9kZS1cdTAwM2VpX3NiLCBcdTAwMjZmbmFtZS1cdTAwM2Vob21lLCBOVUxMKSk7XG4tLVxuZnMvb2NmczIvZXhwb3J0LmM9MzQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi9leHBvcnQuYy0xMjAtXG5mcy9vY2ZzMi9leHBvcnQuYzoxMjE6XHRyZXN1bHQgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7XG5mcy9vY2ZzMi9leHBvcnQuYy0xMjItXHRpZiAoSVNfRVJSKHJlc3VsdCkpXG4tLVxuZnMvb2NmczIvZXhwb3J0LmM9MTMwPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL29jZnMyL2V4cG9ydC5jLTE3OS1cbmZzL29jZnMyL2V4cG9ydC5jOjE4MDpcdHBhcmVudCA9IGRfb2J0YWluX2FsaWFzKG9jZnMyX2lnZXQoT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpLCBibGtubywgMCwgMCkpO1xuZnMvb2NmczIvZXhwb3J0LmMtMTgxLVxuLS1cbmZzL29yYW5nZWZzL3N1cGVyLmM9MzE0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvcmFuZ2Vmc19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vcmFuZ2Vmcy9zdXBlci5jLTMzMC1cbmZzL29yYW5nZWZzL3N1cGVyLmM6MzMxOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKG9yYW5nZWZzX2lnZXQoc2IsIFx1MDAyNnJlZm4pKTtcbmZzL29yYW5nZWZzL3N1cGVyLmMtMzMyLX1cbi0tXG5mcy9vdmVybGF5ZnMvZXhwb3J0LmM9Mjk0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvdmxfb2J0YWluX2FsaWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb3ZlcmxheWZzL2V4cG9ydC5jLTMzMC1cbmZzL292ZXJsYXlmcy9leHBvcnQuYzozMzE6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMvb3ZlcmxheWZzL2V4cG9ydC5jLTMzMi19XG4tLVxuZnMvc3F1YXNoZnMvZXhwb3J0LmM9NjY9c3RhdGljIHN0cnVjdCBkZW50cnkgKnNxdWFzaGZzX2V4cG9ydF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvc3F1YXNoZnMvZXhwb3J0LmMtNzUtXHRpZiAoaW5vIFx1MDAzZT0gMClcbmZzL3NxdWFzaGZzL2V4cG9ydC5jOjc2Olx0XHRkZW50cnkgPSBkX29idGFpbl9hbGlhcyhzcXVhc2hmc19pZ2V0KHNiLCBpbm8sIGlub19udW0pKTtcbmZzL3NxdWFzaGZzL2V4cG9ydC5jLTc3LVxuLS1cbmZzL3VkZi9uYW1laS5jPTkxNT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdWRmX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXG4tLVxuZnMvdWRmL25hbWVpLmMtOTI2LVx0dWRmX2ZpaXRlcl9yZWxlYXNlKFx1MDAyNml0ZXIpO1xuZnMvdWRmL25hbWVpLmM6OTI3Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKHVkZl9pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIFx1MDAyNnRsb2MpKTtcbmZzL3VkZi9uYW1laS5jLTkyOC19XG4tLVxuZnMvdWRmL25hbWVpLmM9OTMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZGZfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgYmxvY2ssXG4tLVxuZnMvdWRmL25hbWVpLmMtOTUwLVx0fVxuZnMvdWRmL25hbWVpLmM6OTUxOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL3VkZi9uYW1laS5jLTk1Mi19XG4tLVxuZnMvdWZzL3N1cGVyLmM9MTI5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy91ZnMvc3VwZXIuYy0xMzUtXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuZnMvdWZzL3N1cGVyLmM6MTM2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKHVmc19pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIGlubykpO1xuZnMvdWZzL3N1cGVyLmMtMTM3LX1cbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jPTE3Mj14ZnNfZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jLTE5MS1cbmZzL3hmcy94ZnNfZXhwb3J0LmM6MTkyOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL3hmcy94ZnNfZXhwb3J0LmMtMTkzLX1cbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jPTE5Nj14ZnNfZnNfZmhfdG9fcGFyZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jLTIxNS1cbmZzL3hmcy94ZnNfZXhwb3J0LmM6MjE2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL3hmcy94ZnNfZXhwb3J0LmMtMjE3LX1cbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jPTIyMD14ZnNfZnNfZ2V0X3BhcmVudChcbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jLTIyOS1cbmZzL3hmcy94ZnNfZXhwb3J0LmM6MjMwOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFZGU19JKGNpcCkpO1xuZnMveGZzL3hmc19leHBvcnQuYy0yMzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA3OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBkZW50cnlfdW5saW5rX2lub2RlYCBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGZvciBgZGVudHJ5X3VubGlua19pbm9kZWAuIEZpcnN0LCBJIHJlbWVtYmVyIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHJlc2lkaW5nIGluIGBmcy9kY2FjaGUuY2AuIFRoYXQgbWVhbnMgdGhlIHNjb3BlIGlzIGxpa2VseSBsaW1pdGVkIHdpdGhpbiB0aGF0IGZpbGUsIHdoaWNoIG1ha2VzIHRoZSBodW50IHBvdGVudGlhbGx5IGVhc2llci4gTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGNhbGxlcnMgd2l0aGluIGBmcy9kY2FjaGUuY2AgaXRzZWxmLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVudHJ5X3VubGlua19pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz00NTk9c3RhdGljIGJvb2wgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9kY2FjaGUuYy00NjctICovXG5mcy9kY2FjaGUuYzo0Njg6c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuZnMvZGNhY2hlLmMtNDY5LVx0X19yZWxlYXNlcyhkZW50cnktXHUwMDNlZF9sb2NrKVxuLS1cbmZzL2RjYWNoZS5jPTgxMj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZGVudHJ5X2tpbGwoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTgzOC1cdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSlcbmZzL2RjYWNoZS5jOjgzOTpcdFx0ZGVudHJ5X3VubGlua19pbm9kZShkZW50cnkpO1xuZnMvZGNhY2hlLmMtODQwLVx0ZWxzZVxuLS1cbmZzL2RjYWNoZS5jPTI3MDg9dm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTI3MjAtXHRcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNj0gfkRDQUNIRV9DQU5UX01PVU5UO1xuZnMvZGNhY2hlLmM6MjcyMTpcdFx0ZGVudHJ5X3VubGlua19pbm9kZShkZW50cnkpO1xuZnMvZGNhY2hlLmMtMjcyMi1cdH0gZWxzZSB7XG4tLVxuZnMva2VybmZzL2Rpci5jPTEyMzQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmtlcm5mc19pb3BfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2tlcm5mcy9kaXIuYy0xMjY1LVx0ICogVGhlIG5lZ2F0aXZlIGRlbnRyeSBjYW4gYmUgY3JlYXRlZCBpbiBrZXJuZnNfaW9wX2xvb2t1cCgpXG5mcy9rZXJuZnMvZGlyLmM6MTI2NjpcdCAqIG9yIHRyYW5zZm9ybXMgZnJvbSBwb3NpdGl2ZSBkZW50cnkgaW4gZGVudHJ5X3VubGlua19pbm9kZSgpXG5mcy9rZXJuZnMvZGlyLmMtMTI2Ny1cdCAqIGNhbGxlZCBmcm9tIHZmc19ybWRpcigpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcwNQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgZGNhY2hlLmMgU3ltYm9sIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBmcy9kY2FjaGUuY2AgY29kZS4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdDogYGRlbnRyeV91bmxpbmtfaW5vZGVgIChzdGF0aWMpLCBgX19kX29idGFpbl9hbGlhc2AgKHN0YXRpYyksIGBkX29idGFpbl9hbGlhc2AgKGV4cG9ydGVkKSwgYGRfb2J0YWluX3Jvb3RgLCBgZF9kZWxldGVgIChjYWxscyBgZGVudHJ5X3VubGlua19pbm9kZWApLCBgZGVudHJ5X2tpbGxgIChzdGF0aWMsIGNhbGxlZCBieSBgZHB1dGApLCBhbmQgYGlub2RlX25vdGlmeV9kZWFkYCAoc3RhdGljIGhlbHBlcikuIAoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gQ2FuIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGEgYC5jYCBmaWxlIGV2ZW4gYmUgaW5jbHVkZWQgYXMgc3ltYm9scz8gQWgsIHllcywgdGhleSBzaG91bGQgYmUsIHVubGVzcyB0aGUgY29tcGlsZXIgaW5saW5lcyB0aGVtLCB3aGljaCBpcyByYXJlIGZvciBmdW5jdGlvbnMgd2l0aCBtYW55IGNhbGxzLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBpbmNsdWRlIGJvdGggdGhlIHN0YXRpYyBmdW5jdGlvbiBhbmQgdGhlIGV4cG9ydGVkIGVudHJ5cG9pbnQuLiBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgd2hpY2ggb25lcyBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjb25maXJtaW5nIHRoYXQgd2UmIzM5O3ZlIGdvdDogYGRfb2J0YWluX2FsaWFzYCwgYF9fZF9vYnRhaW5fYWxpYXNgLCBgZGVudHJ5X3VubGlua19pbm9kZWAsIGBkX2RlbGV0ZWAsIGFuZCBgZF9vYnRhaW5fcm9vdGAuCgpXYWl0IGEgbWludXRlLCBhcmUgd2UgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cywgbGlrZSBmaWxlIGhhbmRsZSBzeXNjYWxscyBvciBmc25vdGlmeSBmdW5jdGlvbnM/IE9rLCBsZXQmIzM5O3Mgc3RlcCBiYWNrLCBhbmQgZm9jdXMgb24gdGhlIGtleSBtb2RpZmljYXRpb25zLiBGcm9tIHRoYXQgZmlyc3QgbGlzdCwgdGhlIGNvcmUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQgYXJlIGNsZWFybHkgYF9fZF9vYnRhaW5fYWxpYXNgLCBgZF9vYnRhaW5fYWxpYXNgLCBhbmQgYGRlbnRyeV91bmxpbmtfaW5vZGVgLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gYGZzL2RjYWNoZS5jYCBpcyBjb21waWxlZCBkaXJlY3RseSBpbnRvIGB2bWxpbnV4YCDigJMgaXQmIzM5O3MgYSBjb3JlIGZpbGVzeXN0ZW0gb2JqZWN0LCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGBvYmoteSAmIzQzOz0gZGNhY2hlLm9gIGluIHRoZSBgZnMvTWFrZWZpbGVgLiBTbywgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgbGlrZSBgQ09ORklHX0ZIQU5ETEVgIG9yIGBDT05GSUdfRVhQT1JURlNgLCBuZWVkZWQgdG8gKmV4ZXJjaXNlKiBgZF9vYnRhaW5fYWxpYXNgIHRocm91Z2ggc3lzY2FsbHM/IEkga25vdyB0aGF0IGBvcGVuX2J5X2hhbmRsZV9hdGAgcmVxdWlyZXMgYENPTkZJR19GSEFORExFYC4gSSB3aWxsIGhhdmUgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXM6IGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBgZnMvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGSEFORExFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNzc5PWNvbmZpZyBTR0VUTUFTS19TWVNDQUxMXG4tLVxuaW5pdC9LY29uZmlnLTE3ODgtXG5pbml0L0tjb25maWc6MTc4OTpjb25maWcgRkhBTkRMRVxuaW5pdC9LY29uZmlnLTE3OTAtXHRib29sIFwmIzM0O29wZW4gYnkgZmhhbmRsZSBzeXNjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipRdWljayBBdWRpdCBvZiBGU05PVElGWSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSB3ZSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYEZTTk9USUZZYC4gV2UmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gWCBhbmQgWSwgYnV0IEkmIzM5O3ZlIGxlYXJuZWQgdGhlIGhhcmQgd2F5IHRoYXQgb3Zlcmxvb2tpbmcgZmlsZXN5c3RlbSBub3RpZmljYXRpb25zIGNhbiBiaXRlIHlvdSBsYXRlci4gSXQmIzM5O3MgYSBjbGFzc2ljIGdvdGNoYS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBjdXJyZW50IHNldHVwLCBwYXJ0aWN1bGFybHkgaG93IHdlJiMzOTtyZSBtb25pdG9yaW5nIHRoZSByZWxldmFudCBkaXJlY3RvcmllcyBhbmQgd2hhdCB0cmlnZ2VycyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpc27igJl0IGEgYm90dGxlbmVjayBvciwgY29udmVyc2VseSwgbGV0dGluZyBjcml0aWNhbCBldmVudHMgc2xpcCB0aHJvdWdoIHRoZSBjcmFja3MuIFRpbWUgZm9yIGEgcXVpY2sgYXVkaXQuIFdlIG5lZWQgdG8gY29uZmlybTogV2hhdCYjMzk7cyB0aGUgcG9sbGluZyBpbnRlcnZhbD8gQXJlIHdlIHVzaW5nIHJlY3Vyc2l2ZSB3YXRjaGVzPyBXaGF0IGtpbmQgb2YgZmlsdGVycyBhcmUgaW4gcGxhY2U/IEFyZSB3ZSBjb3JyZWN0bHkgY29uZmlndXJlZCBmb3IgdGhlIHNjYWxlIG9mIHRoaXMgcHJvamVjdD8gTWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBzZXR0aW5ncyBjb3VsZCBiZSBhIG1hc3NpdmUgdGltZS1zYXZlciwgc28gYSBzbWFsbCBjaGVjayBub3cgY2FuIHNhdmUgYSBsYXJnZSBjaHVuayBvZiB3b3JrIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNOT1RJRlkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25vdGlmeS9LY29uZmlnOjI6Y29uZmlnIEZTTk9USUZZXG5mcy9ub3RpZnkvS2NvbmZpZy0zLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTm90aWZpY2F0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBmcy9ub3RpZnkvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMS4gSSYjMzk7bSBwcm9iYWJseSBhZnRlciB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIG5vdGlmaWNhdGlvbiBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyBsaWtlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgdGhlIGtlcm5lbCBidWlsZCBsZXZlbCwgcGVyaGFwcyB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMgb24gb3RoZXIgZmVhdHVyZXMsIG9yIG1heWJlIGp1c3QgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgYnJvYWQgb3ZlcnZpZXcgb2YgdGhlIGV4cG9zZWQgY29udHJvbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBtYWluIGBjb25maWdgIHN5bWJvbCBmb3IgYGZzbm90aWZ5YCwgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGNvbmRpdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoYXQuIFRpbWUgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRlNOT1RJRllcbiAgIDM6XHRcdGRlZl9ib29sIG5cbiAgIDQ6XHRcbiAgIDU6XHRzb3VyY2UgXCYjMzQ7ZnMvbm90aWZ5L2Rub3RpZnkvS2NvbmZpZ1wmIzM0O1xuICAgNjpcdHNvdXJjZSBcJiMzNDtmcy9ub3RpZnkvaW5vdGlmeS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0c291cmNlIFwmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjc2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZnNub3RpZnlfaW5vZGVyZW1vdmVgIERlZmluaXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGZzbm90aWZ5X2lub2RlcmVtb3ZlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGhlYWRlcnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmcy9ub3RpZnlgIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBgZnMvbm90aWZ5L2Zzbm90aWZ5LmhgIGFzIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGhlYWRlciBwcm9iYWJseSBpbmNsdWRlcyB0aGUgZGVjbGFyYXRpb25zIGZvciB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gbm90aWZpY2F0aW9uIGV2ZW50cy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBkZWZpbmVkIHRoZXJlLCBvciBpdCB3aWxsIHBvaW50IG1lIHRvd2FyZHMgdGhlIGZpbGUgdGhhdCBkb2VzIGRlZmluZSBpdC4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoLCBidXQgdGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgaW5pdGlhbCBsb2NhdGlvbi4gSSYjMzk7bSBhc3N1bWluZyBhIGZhaXJseSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgc3RydWN0dXJlIGhlcmUsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc25vdGlmeV9pbm9kZXJlbW92ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz00Njg9c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTQ4Ny1cdGlmIChub3RpZnlfZGVhZClcbmZzL2RjYWNoZS5jOjQ4ODpcdFx0ZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpO1xuZnMvZGNhY2hlLmMtNDg5LVx0aWYgKGRlbnRyeS1cdTAwM2VkX29wIFx1MDAyNlx1MDAyNiBkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2lwdXQpXG4tLVxuaW5jbHVkZS9saW51eC9mc25vdGlmeS5oPTMwMj1zdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfbW50bnNfZGVsZXRlKHN0cnVjdCBtbnRfbmFtZXNwYWNlICptbnRucylcbi0tXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgtMzA3LS8qXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5Lmg6MzA4OiAqIGZzbm90aWZ5X2lub2RlcmVtb3ZlIC0gYW4gaW5vZGUgaXMgZ29pbmcgYXdheVxuaW5jbHVkZS9saW51eC9mc25vdGlmeS5oLTMwOS0gKi9cbmluY2x1ZGUvbGludXgvZnNub3RpZnkuaDozMTA6c3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2lub2RlcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgtMzExLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NjQKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogNjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ29uZmlndXJhdGlvbiBSYXRpb25hbGUqKgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQuIExldCYjMzk7cyBzdGFydCBieSB2ZXJpZnlpbmcgdGhhdCBgRlNOT1RJRllgIGlzIHNlbGVjdGVkIGJ5IGBJTk9USUZZX1VTRVJgIGFuZCBgRkFOT1RJRllgLCBhbmQgeWVzLCB0aGUgS2NvbmZpZyBmaWxlcyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVuLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIG90aGVyIGNvcmUgY29uZmlncyBhcmUgcmVsZXZhbnQgYW5kIGluIHRoaXMgY2FzZSwgYEZIQU5ETEVgLCBgRlNOT1RJRllgLCBgSU5PVElGWV9VU0VSYCwgYW5kIGBGQU5PVElGWWAgYXJlIHRoZSBvbmVzIHdlJiMzOTtyZSB0YXJnZXRpbmcuCgpOb3csIGZvciB0aGUgY3JpdGljYWwgcGFydDogdGhlIGZ1enppbmcgc3ltYm9scy4gSSYjMzk7dmUgZ290IHRvIGJlIHNtYXJ0IGFib3V0IHRoaXMgYW5kIHNlbGVjdCBmdW5jdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgZW5vdWdoIHRvIGJlIHRhcmdldGVkIGJ1dCBub3Qgc28gdWJpcXVpdG91cyB0aGF0IHRoZXkgb3ZlcndoZWxtIHRoZSBmdXp6ZXIuIE15IGluaXRpYWwgY2FuZGlkYXRlcyBhcmU6IGBfX2Rfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX3Jvb3RgLCBhbmQgYGRlbnRyeV91bmxpbmtfaW5vZGVgLiBBcmUgdGhleSBnb29kIGNob2ljZXM/IGBkX29idGFpbl9hbGlhc2AgYW5kIGBfX2Rfb2J0YWluX2FsaWFzYCBhcmUgdXNlZCBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3Vwcywgd2hpY2ggaXMgcHJvbWlzaW5nLiBgZGVudHJ5X3VubGlua19pbm9kZWAgaXMgbGlua2VkIHRvIHVubGlua2luZy9kZWxldGluZywgYW5kIHRoaXMgaXMgd2hhdCB3ZSYjMzk7cmUgdGFyZ2V0aW5nLiBZZXMsIHRoZXNlIGxvb2sgbGlrZSBnb29kIHRhcmdldHMuCgpOZXh0LCBJJiMzOTtsbCByZXZpc2l0IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcmVmYWN0b3Jpbmcgd29yayBhcm91bmQgaGFuZGxpbmcgdW5saW5rZWQgaW5vZGVzIGFuZCBmc25vdGlmeSBldmVudHMgZml0cyB0aGUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgVkZTIGNvcmUgbG9naWMuIExvb2tzIGdvb2Q7IHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBvbiBmaWxlIGhhbmRsZSBsb29rdXAgYW5kIGVuc3VyaW5nIGBmc25vdGlmeWAgZXZlbnRzIGFyZSBjb3JyZWN0LiBTbywgeWVzLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuCgpGaW5hbGx5LCBsZXQmIzM5O3Mgd3JhcCB0aGlzIHVwIHdpdGggYSBmaW5hbCBjaGVjayBvZiBhbGwgaW5wdXRzOgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgbG9naWMgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gcmV2aXZpbmcgZGVhZCBpbm9kZXMgYW5kIGVuc3VyZXMgY29ycmVjdCBgZnNub3RpZnlgIGV2ZW50cy4gV2Ugd2FudCB0byBmdXp6IGZpbGUgaGFuZGxlIGxvb2t1cHMgYW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4KKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0ZIQU5ETEUmIzM0OywgJiMzNDtGU05PVElGWSYjMzQ7LCAmIzM0O0lOT1RJRllfVVNFUiYjMzQ7LCAmIzM0O0ZBTk9USUZZJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtfX2Rfb2J0YWluX2FsaWFzJiMzNDssICYjMzQ7ZF9vYnRhaW5fYWxpYXMmIzM0OywgJiMzNDtkX29idGFpbl9yb290JiMzNDssICYjMzQ7ZGVudHJ5X3VubGlua19pbm9kZSYjMzQ7XWAKCkFscmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBXZSBzaG91bGQgYmUgYWxsIHNldCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OywKICAgICYjMzQ7RlNOT1RJRlkmIzM0OywKICAgICYjMzQ7SU5PVElGWV9VU0VSJiMzNDssCiAgICAmIzM0O0ZBTk9USUZZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9yb290JiMzNDssCiAgICAmIzM0O2RlbnRyeV91bmxpbmtfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGxvZ2ljIGluIGZzL2RjYWNoZS5jIChfX2Rfb2J0YWluX2FsaWFzLCBkZW50cnlfdW5saW5rX2lub2RlKSB0byBwcmV2ZW50IGZpbGUgaGFuZGxlIGxvb2t1cHMgZnJvbSBjcmVhdGluZyBhbGlhc2VzIGZvciBkZWFkIHVubGlua2VkIGlub2RlcyBhbmQgdG8gYWNjdXJhdGVseSBub3RpZnkgZnNub3RpZnkgd2hlbiB1bmxpbmtlZCBpbm9kZXMgaGF2ZSBubyByZW1haW5pbmcgYWxpYXNlcy4gRnV6emluZyB3aXRoIGZpbGUgaGFuZGxlIHN5c2NhbGxzIChvcGVuX2J5X2hhbmRsZV9hdCkgYW5kIGNvbmN1cnJlbnQgdW5saW5rL2V4cG9ydGZzIG9wZXJhdGlvbnMgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGSEFORExFJiMzNDssCiAgICAmIzM0O0ZTTk9USUZZJiMzNDssCiAgICAmIzM0O0lOT1RJRllfVVNFUiYjMzQ7LAogICAgJiMzNDtGQU5PVElGWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZF9vYnRhaW5fYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9vYnRhaW5fYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9vYnRhaW5fcm9vdCYjMzQ7LAogICAgJiMzNDtkZW50cnlfdW5saW5rX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBsb2dpYyBpbiBmcy9kY2FjaGUuYyAoX19kX29idGFpbl9hbGlhcywgZGVudHJ5X3VubGlua19pbm9kZSkgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gY3JlYXRpbmcgYWxpYXNlcyBmb3IgZGVhZCB1bmxpbmtlZCBpbm9kZXMgYW5kIHRvIGFjY3VyYXRlbHkgbm90aWZ5IGZzbm90aWZ5IHdoZW4gdW5saW5rZWQgaW5vZGVzIGhhdmUgbm8gcmVtYWluaW5nIGFsaWFzZXMuIEZ1enppbmcgd2l0aCBmaWxlIGhhbmRsZSBzeXNjYWxscyAob3Blbl9ieV9oYW5kbGVfYXQpIGFuZCBjb25jdXJyZW50IHVubGluay9leHBvcnRmcyBvcGVyYXRpb25zIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBzdGF0ZSB0cmFuc2l0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlub2RlIGFsaWFzIGxvb2t1cCBhbmQgZGVudHJ5IHVubGlua2luZyBsb2dpYyBpbiBmcy9kY2FjaGUuYyB0byBwcmV2ZW50IHJldml2aW5nIGRlYWQvdW5saW5rZWQgaW5vZGVzIGR1cmluZyBmaWxlIGhhbmRsZSBsb29rdXBzICh3aGljaCBpbnRlcmZlcmVzIHdpdGggZnNub3RpZnkpLiBUaGUgY2hhbmdlcyBvbmx5IHRvdWNoIHN0YW5kYXJkIGlub2RlIGZpZWxkcyAoaV9ubGluaywgaV9kZW50cnkpIGFuZCB1c2UgYSBsb2NhbGx5IGFzc2lnbmVkIGJvb2xlYW4gdmFyaWFibGUgKG5vdGlmeV9kZWFkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBzZW1hbnRpY3MsIGlub2RlIGxpZmVjeWNsZXMsIG9yIGxvY2tpbmcsIHdoaWNoIGZhbGwgdW5kZXIgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkYjA3MWQxOGI4MzViYTI2MGI2NzQ5YTgyYzM5YzVkNmJmMDUyNzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjEyOjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCAxYjFhODFmMTBkYTY3Li44ZjE3ZGIyNzI0YjM4IDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kY2FjaGUuYwpAQCAtNDUwLDYgJiM0Mzs0NTAsMTcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X2ZyZWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCQljYWxsX3JjdSgmYW1wO2RlbnRyeS0mZ3Q7ZF9yY3UsIF9fZF9mcmVlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogSWYgaW5vZGUgaXMgdW5saW5rZWQgYW5kIGRvZXNuJiMzOTt0IGhhdmUgYW55IGFsaWFzZXMgKGkuZS4sIGFsbCBmZHMgcG9pbnRpbmcgdG8KJiM0MzsgKiBpdCBhcmUgY2xvc2VkKSwgaXQgaXMgcHJldHR5IG11Y2ggZGVhZC4gRXhjZXB0IHRoYXQgZmlsZSBoYW5kbGUgbG9va3VwIGNvdWxkCiYjNDM7ICogc3RpbGwgcmV2aXZlIGl0IHdoaWNoIGNhdXNlcyBpc3N1ZXMgdG8gZnNub3RpZnkuIFNvIG9uY2UgaW5vZGUgcmVhY2hlcyB0aGlzCiYjNDM7ICogc3RhdGUgd2UgbWFrZSBzdXJlIHRvIGJsb2NrIGNyZWF0aW5nIGFueSBuZXcgYWxpYXNlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBpbm9kZV9ub3RpZnlfZGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuICFpbm9kZS0mZ3Q7aV9ubGluayAmYW1wOyZhbXA7IGhsaXN0X2VtcHR5KCZhbXA7aW5vZGUtJmd0O2lfZGVudHJ5KTsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmVsZWFzZSB0aGUgZGVudHJ5JiMzOTtzIGlub2RlLCB1c2luZyB0aGUgZmlsZXN5c3RlbQogICogZF9pcHV0KCkgb3BlcmF0aW9uIGlmIGRlZmluZWQuCkBAIC00NTksNiAmIzQzOzQ3MCw3IEBAIHN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKIAlfX3JlbGVhc2VzKGRlbnRyeS0mZ3Q7ZF9pbm9kZS0mZ3Q7aV9sb2NrKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktJmd0O2RfaW5vZGU7CiYjNDM7CWJvb2wgbm90aWZ5X2RlYWQ7CiAKIAlyYXdfd3JpdGVfc2VxY291bnRfYmVnaW4oJmFtcDtkZW50cnktJmd0O2Rfc2VxKTsKIAlfX2RfY2xlYXJfdHlwZV9hbmRfaW5vZGUoZGVudHJ5KTsKQEAgLTQ2OSw5ICYjNDM7NDgxLDEwIEBAIHN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKIAkgKi8KIAlkZW50cnktJmd0O3dhaXRlcnMgPSBOVUxMOwogCXJhd193cml0ZV9zZXFjb3VudF9lbmQoJmFtcDtkZW50cnktJmd0O2Rfc2VxKTsKJiM0MzsJbm90aWZ5X2RlYWQgPSBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSk7CiAJc3Bpbl91bmxvY2soJmFtcDtkZW50cnktJmd0O2RfbG9jayk7CiAJc3Bpbl91bmxvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKLQlpZiAoIWlub2RlLSZndDtpX25saW5rKQomIzQzOwlpZiAobm90aWZ5X2RlYWQpCiAJCWZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKTsKIAlpZiAoZGVudHJ5LSZndDtkX29wICZhbXA7JmFtcDsgZGVudHJ5LSZndDtkX29wLSZndDtkX2lwdXQpCiAJCWRlbnRyeS0mZ3Q7ZF9vcC0mZ3Q7ZF9pcHV0KGRlbnRyeSwgaW5vZGUpOwpAQCAtMjIzNyw3ICYjNDM7MjI1MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZCkKIAogCXNiID0gaW5vZGUtJmd0O2lfc2I7CiAKLQlyZXMgPSBkX2ZpbmRfYW55X2FsaWFzKGlub2RlKTsgLyogZXhpc3RpbmcgYWxpYXM/ICovCiYjNDM7CXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwlpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSkKJiM0MzsJCXJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7CS8qIGV4aXN0aW5nIGFsaWFzPyAqLwomIzQzOwllbHNlCiYjNDM7CQlyZXMgPSBFUlJfUFRSKC1FU1RBTEUpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwogCWlmIChyZXMpCiAJCWdvdG8gb3V0OwogCkBAIC0yMjQ5LDcgJiM0MzsyMjY3LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKQogCiAJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTsKIAlzcGluX2xvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKLQlyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi8KJiM0MzsJaWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpCiYjNDM7CQlyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpOwkvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi8KJiM0MzsJZWxzZQomIzQzOwkJcmVzID0gRVJSX1BUUigtRVNUQUxFKTsKIAlpZiAobGlrZWx5KCFyZXMpKSB7IC8qIHN0aWxsIG5vIGFsaWFzLCBhdHRhY2ggYSBkaXNjb25uZWN0ZWQgZGVudHJ5ICovCiAJCXVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggdG8gYGZzL2RjYWNoZS5jYC4gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYW5kIGlmIGl0IGRvZXMsIHdoYXQgdGhlIGF0dGFjayBzdXJmYWNlIGxvb2tzIGxpa2UuCgpGaXJzdCwgSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBpbm9kZV9ub3RpZnlfZGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlKWAuIExvb2tzIGxpa2UgYSBzaW1wbGUgY2hlY2s6IGlzIHRoZSBpbm9kZSYjMzk7cyBsaW5rIGNvdW50IHplcm8gYW5kIGlzIGl0cyBkZW50cnkgbGlzdCBlbXB0eT8gVGhhdCBzb3VuZHMgbGlrZSB0aGUgaW5vZGUgaXMgdHJ1bHkgZGVhZCwgb3IgYXQgbGVhc3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBuYW1lc3BhY2UuCgpOZXh0LCBjaGFuZ2VzIGluIGBkZW50cnlfdW5saW5rX2lub2RlYC4gVGhlIGNvZGUgbm93IHVzZXMgdGhlIGBpbm9kZV9ub3RpZnlfZGVhZGAgcmV0dXJuIHZhbHVlIHRvIGRldGVybWluZSB3aGVuIHRvIGNhbGwgYGZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKWAuIFRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb247IHJhdGhlciB0aGFuIHJlLWNoZWNraW5nIHRoZSBsaW5rIGNvdW50IGFmdGVyIHJlbGVhc2luZyBsb2NrcywgaXQmIzM5O3Mgbm93IHJldXNpbmcgdGhlIHJlc3VsdCBvZiBgaW5vZGVfbm90aWZ5X2RlYWRgLiBDbGVhbmVyIGFuZCBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudC4KClRoZSByZWFsbHkgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgaGFwcGVuaW5nIGluIGBfX2Rfb2J0YWluX2FsaWFzYC4gVGhpcyBpcyB3aGVyZSB0aGUgcGF0Y2ggZ2V0cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgX19kX29idGFpbl9hbGlhc2AgaXMgZ2V0dGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIGJhc2VkIG9uIGBpbm9kZV9ub3RpZnlfZGVhZGAuIFRoZSBpbnRlbnRpb24gaGVyZSBzZWVtcyB0byBiZSB0aGF0IGlmIHRoZSBpbm9kZSBpcyAmIzM0O2RlYWQsJiMzNDsgZG9uJiMzOTt0IGJvdGhlciB0cnlpbmcgdG8gZmluZCBhbiBleGlzdGluZyBhbGlhcywgYmVjYXVzZSBpdCB3b3VsZG4mIzM5O3QgYmUgdmFsaWQsIGFuZCBqdXN0IHNob3J0LWNpcmN1aXQgd2l0aCBgRVJSX1BUUigtRVNUQUxFKWAuIEl0JiMzOTtzIGRvaW5nIHRoaXMgKnVuZGVyIGEgbG9jayouIFRoYXQmIzM5O3MgdGhlIGltcG9ydGFudCBwaWVjZSBoZXJlLiBMb2NraW5nIGlzIGludm9sdmVkLgoKU28sIGluIHRoZSBmaXJzdCBjYXNlLCBiZWZvcmUgYXR0ZW1wdGluZyB0byBmaW5kIGFuIGFsaWFzLCB0aGUgY29kZSBsb2NrcyB0aGUgaW5vZGUsIGFuZCBjaGVja3MgaWYgaXQmIzM5O3MgZGVhZCwgaWYgaXQgaXMsIGBfX2RfZmluZF9hbnlfYWxpYXNgIGlzIHNraXBwZWQuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gdGhlIHJlY2hlY2sgdW5kZXIgbG9jay4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gcHJvdGVjdGlvbiBtZWNoYW5pc20uIEFuIGlub2RlIG1pZ2h0IGJlIGNvbmN1cnJlbnRseSB1bmxpbmtlZCB3aGlsZSBhIG5ldyBhbGlhcyBpcyBiZWluZyBjcmVhdGVkLgoKTGV0IG1lIHVzZSBteSBgcmVhZC1maWxlYCB0b29sIHRvIHF1aWNrbHkgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBvZiBgX19kX29idGFpbl9hbGlhc2Agd2l0aGluIHRoZSBgZnMvZGNhY2hlLmNgIGNvbnRleHQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgd2hhdCYjMzk7cyBjYWxsaW5nIGBfX2Rfb2J0YWluX2FsaWFzYCwgYW5kIHdoYXQgYXJlIHRoZSBjYWxsZXImIzM5O3MgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBpbm9kZSBhbmQgZGVudHJ5PyBXaGF0IGNvdWxkIGhhcHBlbiBpZiBpdCB0cmllZCB0byBvYnRhaW4gYW4gYWxpYXMgZm9yIHNvbWV0aGluZyBhbHJlYWR5IGJlaW5nIHVubGlua2VkPwoKT2theSwgdGhlIGdlbmVyYWwgcGljdHVyZSBpcyB0aGF0IHRoaXMgaXMgaGFuZGxpbmcgdGhlIGNyZWF0aW9uIG9yIHJlLWVzdGFibGlzaG1lbnQgb2YgZGVudHJpZXMgcmVsYXRlZCB0byBpbm9kZXMsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSB3aGVlbGhvdXNlIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBHaXZlbiB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHVubGlua2luZywgYWxpYXNpbmcsIGFuZCBsb2NraW5nLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgKnBvdGVudGlhbCogdGltaW5nIHdpbmRvd3Mgd2hlcmUgYW4gaW5vZGUmIzM5O3Mgc3RhdGUgY291bGQgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LiBUaGUgYWRkZWQgY2hlY2sgdXNpbmcgYGlub2RlX25vdGlmeV9kZWFkYCBpcyBhIGdvb2QgYXR0ZW1wdCBhdCBwcm90ZWN0aW9uLCBidXQgSSBoYXZlIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgZWRnZSBjYXNlcyB3aGVyZSBhbiBpbm9kZSBjb3VsZCB0cmFuc2l0aW9uIGludG8gYSAmIzM0O2RlYWQmIzM0OyBzdGF0ZSAqZHVyaW5nKiB0aGUgb3BlcmF0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBsb2NraW5nIGlzIGNvcnJlY3RseSBwcm90ZWN0aW5nIGFnYWluc3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zLCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IHRoZSBpbm9kZSYjMzk7cyBsaWZlY3ljbGUuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIGNvdWxkIGJlIHZlcnkgdmFsdWFibGUgZm9yIGZpbmRpbmcgcmFjZXMsIFVBRnMsIG9yIGRvdWJsZS1mcmVlcyByZWxhdGVkIHRvIHRoZXNlIHRyYW5zaXRpb25zLiBZZXMsIGxldCYjMzk7cyBkbyBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIzMDpcdFx0aWYgKHJvb3RfaW5vZGUpIHtcbjIyMzE6XHRcdFx0cmVzID0gZF9hbGxvY19hbm9uKHJvb3RfaW5vZGUtXHUwMDNlaV9zYik7XG4yMjMyOlx0XHRcdGlmIChyZXMpXG4yMjMzOlx0XHRcdFx0ZF9pbnN0YW50aWF0ZShyZXMsIHJvb3RfaW5vZGUpO1xuMjIzNDpcdFx0XHRlbHNlXG4yMjM1Olx0XHRcdFx0aXB1dChyb290X2lub2RlKTtcbjIyMzY6XHRcdH1cbjIyMzc6XHRcdHJldHVybiByZXM7XG4yMjM4Olx0fVxuMjIzOTpcdEVYUE9SVF9TWU1CT0woZF9tYWtlX3Jvb3QpO1xuMjI0MDpcdFxuMjI0MTpcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuMjI0MjpcdHtcbjIyNDM6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XG4yMjQ0Olx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXcsICpyZXM7XG4yMjQ1Olx0XG4yMjQ2Olx0XHRpZiAoIWlub2RlKVxuMjI0NzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTtcbjIyNDg6XHRcdGlmIChJU19FUlIoaW5vZGUpKVxuMjI0OTpcdFx0XHRyZXR1cm4gRVJSX0NBU1QoaW5vZGUpO1xuMjI1MDpcdFxuMjI1MTpcdFx0c2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuMjI1MjpcdFxuMjI1MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4yMjU0Olx0XHRpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSlcbjIyNTU6XHRcdFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcdC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xuMjI1NjpcdFx0ZWxzZVxuMjI1NzpcdFx0XHRyZXMgPSBFUlJfUFRSKC1FU1RBTEUpO1xuMjI1ODpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIyNTk6XHRcdGlmIChyZXMpXG4yMjYwOlx0XHRcdGdvdG8gb3V0O1xuMjI2MTpcdFxuMjI2MjpcdFx0bmV3ID0gZF9hbGxvY19hbm9uKHNiKTtcbjIyNjM6XHRcdGlmICghbmV3KSB7XG4yMjY0Olx0XHRcdHJlcyA9IEVSUl9QVFIoLUVOT01FTSk7XG4yMjY1Olx0XHRcdGdvdG8gb3V0O1xuMjI2NjpcdFx0fVxuMjI2NzpcdFxuMjI2ODpcdFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcbjIyNjk6XHRcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuMjI3MDpcdFx0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4yMjcxOlx0XHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi9cbjIyNzI6XHRcdGVsc2VcbjIyNzM6XHRcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbjIyNzQ6XHRcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cbjIyNzU6XHRcdFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xuMjI3NjpcdFxuMjI3NzpcdFx0XHRpZiAoZGlzY29ubmVjdGVkKVxuMjI3ODpcdFx0XHRcdGFkZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEO1xuMjI3OTpcdFxuMjI4MDpcdFx0XHRzcGluX2xvY2soXHUwMDI2bmV3LVx1MDAzZWRfbG9jayk7XG4yMjgxOlx0XHRcdF9fZF9zZXRfaW5vZGVfYW5kX3R5cGUobmV3LCBpbm9kZSwgYWRkX2ZsYWdzKTtcbjIyODI6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfYWxpYXMsIFx1MDAyNmlub2RlLVx1MDAzZWlfZGVudHJ5KTtcbjIyODM6XHRcdFx0aWYgKCFkaXNjb25uZWN0ZWQpIHtcbjIyODQ6XHRcdFx0XHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19yb290c19sb2NrKTtcbjIyODU6XHRcdFx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZuZXctXHUwMDNlZF9zaWIsIFx1MDAyNnNiLVx1MDAzZXNfcm9vdHMpO1xuMjI4NjpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfcm9vdHNfbG9jayk7XG4yMjg3Olx0XHRcdH1cbjIyODg6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bmV3LVx1MDAzZWRfbG9jayk7XG4yMjg5Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBfX2Rfb2J0YWluX2FsaWFzYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZF9vYnRhaW5fYWxpYXNgLiAmIzM0O0xldCYjMzk7cyBzZWUgdGhlIHJlc3QmIzM0OyBpbXBsaWVzIEkmIzM5O3ZlIGFscmVhZHkgZW5nYWdlZCB3aXRoICpwYXJ0KiBvZiB0aGlzIGZ1bmN0aW9uIG9yIG1ldGhvZCBhbmQgbm93IG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgbWVjaGFuaWNzLiBJJiMzOTttIGxpa2VseSBkZWJ1Z2dpbmcsIHJldmlld2luZyBjb2RlLCBvciB0cnlpbmcgdG8gZ3Jhc3AgaXRzIG92ZXJhbGwgcm9sZSB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBNeSBtZW50YWwgZ2VhcnMgYXJlIHByb2JhYmx5IGFscmVhZHkgdHVybmluZywgY29uc2lkZXJpbmcgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgcmVtYWluaW5nIHBhcnRzIG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgZmxvdywgYW55IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBpbnRlcmFjdGlvbnMgd2l0aCBleHRlcm5hbCBkYXRhIG9yIHNlcnZpY2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGFsaWFzIHNjZW5hcmlvcy4gVGhlICYjMzQ7cmVzdCYjMzQ7IGNvdWxkIGVuY29tcGFzcyB2YXJpb3VzIHRoaW5nczogZGF0YSByZXRyaWV2YWwgZnJvbSBhIGRhdGFiYXNlLCBmaWxlIHBhcnNpbmcsIEFQSSBjYWxscywgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGxvZ2ljIGRldGVybWluaW5nICpob3cqIHRoZSBhbGlhcyBpcyByZXNvbHZlZCBhbmQgbWFuYWdlZC4gSXQgY291bGQgYmUgYSBzaW1wbGUgbG9va3VwLCBhIGNvbXBsZXggYWxnb3JpdGhtIGludm9sdmluZyBtdWx0aXBsZSB0YWJsZXMgb3Igc291cmNlcywgb3IgZXZlbiBzb21ldGhpbmcgZHluYW1pY2FsbHkgZ2VuZXJhdGVkLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjkwOlx0XHRcdGlub2RlID0gTlVMTDsgLyogY29uc3VtZWQgYnkgbmV3LVx1MDAzZWRfaW5vZGUgKi9cbjIyOTE6XHRcdFx0cmVzID0gbmV3O1xuMjI5MjpcdFx0fSBlbHNlIHtcbjIyOTM6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIyOTQ6XHRcdFx0ZHB1dChuZXcpO1xuMjI5NTpcdFx0fVxuMjI5NjpcdFxuMjI5NzpcdCBvdXQ6XG4yMjk4Olx0XHRpcHV0KGlub2RlKTtcbjIyOTk6XHRcdHJldHVybiByZXM7XG4yMzAwOlx0fVxuMjMwMTpcdFxuMjMwMjpcdC8qKlxuMjMwMzpcdCAqIGRfb2J0YWluX2FsaWFzIC0gZmluZCBvciBhbGxvY2F0ZSBhIERJU0NPTk5FQ1RFRCBkZW50cnkgZm9yIGEgZ2l2ZW4gaW5vZGVcbjIzMDQ6XHQgKiBAaW5vZGU6IGlub2RlIHRvIGFsbG9jYXRlIHRoZSBkZW50cnkgZm9yXG4yMzA1Olx0ICpcbjIzMDY6XHQgKiBPYnRhaW4gYSBkZW50cnkgZm9yIGFuIGlub2RlIHJlc3VsdGluZyBmcm9tIE5GUyBmaWxlaGFuZGxlIGNvbnZlcnNpb24gb3JcbjIzMDc6XHQgKiBzaW1pbGFyIG9wZW4gYnkgaGFuZGxlIG9wZXJhdGlvbnMuICBUaGUgcmV0dXJuZWQgZGVudHJ5IG1heSBiZSBhbm9ueW1vdXMsXG4yMzA4Olx0ICogb3IgbWF5IGhhdmUgYSBmdWxsIG5hbWUgKGlmIHRoZSBpbm9kZSB3YXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUpLlxuMjMwOTpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTUKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBLTVNBTiBjaGVjay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyBhcm91bmQgaW5vZGUgdW5saW5raW5nIGFuZCBhbGlhcyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGluIGBkZW50cnlfdW5saW5rX2lub2RlYCBhbmQgYF9fZF9vYnRhaW5fYWxpYXNgLiBJbiBgZGVudHJ5X3VubGlua19pbm9kZWAsIHRoZSBjb2RlIGNhbGxzIGBmc25vdGlmeV9pbm9kZXJlbW92ZWAgb25seSBpZiB0aGUgaW5vZGUgaXMgJiMzNDtkZWFkLCYjMzQ7IGRlZmluZWQgYXMgaGF2aW5nIHplcm8gbGlua3MgYW5kIGFuIGVtcHR5IGRlbnRyeSBsaXN0ICh3aGljaCBpcyBjaGVja2VkIHdpdGggYGlub2RlX25vdGlmeV9kZWFkYCkuIFNpbWlsYXJseSwgYF9fZF9vYnRhaW5fYWxpYXNgIGNoZWNrcyBpZiB0aGUgaW5vZGUgaXMgZGVhZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBmaW5kIG9yIGNyZWF0ZSBhbiBhbGlhcywgcmV0dXJuaW5nIGFuIGVycm9yIGlmIGl0IGlzLgoKTm93LCBsZXQmIzM5O3MgbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMuIE15IGNvbmNlcm4gaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBlc3BlY2lhbGx5IGluIGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBvciBpbiBjb25kaXRpb25hbCBsb2dpYyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGNvdWxkIGNvbnRyb2wgYnJhbmNoaW5nLgoKRmlyc3QsIEkgbm90ZSB0aGUgdXNlIG9mIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUsIGBib29sIG5vdGlmeV9kZWFkO2AsIGluIGBkZW50cnlfdW5saW5rX2lub2RlYC4gSG93ZXZlciwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXNzaWduZWQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSlgLiBTaW5jZSBgaW5vZGVfbm90aWZ5X2RlYWRgIG9ubHkgYWNjZXNzZXMgdGhlIHN0YW5kYXJkIGlub2RlIGZpZWxkcyBgaV9ubGlua2AgYW5kIGBpX2RlbnRyeWAsIHRoaXMgbG9va3Mgc2FmZS4gSW4gYF9fZF9vYnRhaW5fYWxpYXNgLCB0aGUgcmV0dXJuIHZhbHVlIGByZXNgIGlzIGNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYmFzZWQgb24gdGhlIHJlc3VsdCBvZiBgX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKWAgb3IgYW4gZXJyb3IgdmFsdWUuCgpUaGVyZWZvcmUsIHRoaXMgYW5hbHlzaXMgZG9lc24mIzM5O3QgaW5kaWNhdGUgYW55IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbWVtb3J5IGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgc3RydWN0cyBvciBjYWxscyB0byBgY29weV90b191c2VyYC4gSSYjMzk7bSBnb2luZyB0byBsZWFuIHRvd2FyZHMgbm8gaXNzdWVzIGhlcmUsIGJ1dCBsb2dpYy9sb2NraW5nL2xpZmV0aW1lIGJ1Z3Mgc3VjaCBhcyByZWZjb3VudGluZyBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgZXJyb3JzIGFyZSBzdGlsbCBhIHBvc3NpYmlsaXR5LiBUaGVzZSBhcmUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4KCkxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEgYWdhaW4ganVzdCB0byBiZSBjZXJ0YWluOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZD8gTm8sIG5vdGhpbmcgaGVyZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8sIHRoZSBicmFuY2ggZGVwZW5kcyBvbiBhbiBpbW1lZGlhdGVseSBhc3NpZ25lZCBib29sZWFuIHJldHVybiB2YWx1ZSBhbmQgc3RhbmRhcmQgaW5vZGUgZmllbGRzLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBOb3csIHRpbWUgdG8gYXNzZW1ibGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlub2RlIGFsaWFzIGxvb2t1cCBhbmQgZGVudHJ5IHVubGlua2luZyBsb2dpYyBpbiBmcy9kY2FjaGUuYyB0byBwcmV2ZW50IHJldml2aW5nIGRlYWQvdW5saW5rZWQgaW5vZGVzIGR1cmluZyBmaWxlIGhhbmRsZSBsb29rdXBzICh3aGljaCBpbnRlcmZlcmVzIHdpdGggZnNub3RpZnkpLiBUaGUgY2hhbmdlcyBvbmx5IHRvdWNoIHN0YW5kYXJkIGlub2RlIGZpZWxkcyAoaV9ubGluaywgaV9kZW50cnkpIGFuZCB1c2UgYSBsb2NhbGx5IGFzc2lnbmVkIGJvb2xlYW4gdmFyaWFibGUgKG5vdGlmeV9kZWFkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBzZW1hbnRpY3MsIGlub2RlIGxpZmVjeWNsZXMsIG9yIGxvY2tpbmcsIHdoaWNoIGZhbGwgdW5kZXIgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlub2RlIGFsaWFzIGxvb2t1cCBhbmQgZGVudHJ5IHVubGlua2luZyBsb2dpYyBpbiBmcy9kY2FjaGUuYyB0byBwcmV2ZW50IHJldml2aW5nIGRlYWQvdW5saW5rZWQgaW5vZGVzIGR1cmluZyBmaWxlIGhhbmRsZSBsb29rdXBzICh3aGljaCBpbnRlcmZlcmVzIHdpdGggZnNub3RpZnkpLiBUaGUgY2hhbmdlcyBvbmx5IHRvdWNoIHN0YW5kYXJkIGlub2RlIGZpZWxkcyAoaV9ubGluaywgaV9kZW50cnkpIGFuZCB1c2UgYSBsb2NhbGx5IGFzc2lnbmVkIGJvb2xlYW4gdmFyaWFibGUgKG5vdGlmeV9kZWFkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBzZW1hbnRpY3MsIGlub2RlIGxpZmVjeWNsZXMsIG9yIGxvY2tpbmcsIHdoaWNoIGZhbGwgdW5kZXIgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MDguNDM3NTQ3NTY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzNTA2MTgxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkhBTkRMRVwiLFxuICAgIFwiRlNOT1RJRllcIixcbiAgICBcIklOT1RJRllfVVNFUlwiLFxuICAgIFwiRkFOT1RJRllcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Rfb2J0YWluX2FsaWFzXCIsXG4gICAgXCJkX29idGFpbl9hbGlhc1wiLFxuICAgIFwiZF9vYnRhaW5fcm9vdFwiLFxuICAgIFwiZGVudHJ5X3VubGlua19pbm9kZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5vZGUgYWxpYXMgbG9va3VwIGFuZCBkZW50cnkgdW5saW5raW5nIGxvZ2ljIGluIGZzL2RjYWNoZS5jIHRvIHByZXZlbnQgcmV2aXZpbmcgZGVhZC91bmxpbmtlZCBpbm9kZXMgZHVyaW5nIGZpbGUgaGFuZGxlIGxvb2t1cHMgKHdoaWNoIGludGVyZmVyZXMgd2l0aCBmc25vdGlmeSkuIFRoZSBjaGFuZ2VzIG9ubHkgdG91Y2ggc3RhbmRhcmQgaW5vZGUgZmllbGRzIChpX25saW5rLCBpX2RlbnRyeSkgYW5kIHVzZSBhIGxvY2FsbHkgYXNzaWduZWQgYm9vbGVhbiB2YXJpYWJsZSAobm90aWZ5X2RlYWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBmaWxlc3lzdGVtIHNlbWFudGljcywgaW5vZGUgbGlmZWN5Y2xlcywgb3IgbG9ja2luZywgd2hpY2ggZmFsbCB1bmRlciBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBsb2dpYyBpbiBmcy9kY2FjaGUuYyAoX19kX29idGFpbl9hbGlhcywgZGVudHJ5X3VubGlua19pbm9kZSkgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gY3JlYXRpbmcgYWxpYXNlcyBmb3IgZGVhZCB1bmxpbmtlZCBpbm9kZXMgYW5kIHRvIGFjY3VyYXRlbHkgbm90aWZ5IGZzbm90aWZ5IHdoZW4gdW5saW5rZWQgaW5vZGVzIGhhdmUgbm8gcmVtYWluaW5nIGFsaWFzZXMuIEZ1enppbmcgd2l0aCBmaWxlIGhhbmRsZSBzeXNjYWxscyAob3Blbl9ieV9oYW5kbGVfYXQpIGFuZCBjb25jdXJyZW50IHVubGluay9leHBvcnRmcyBvcGVyYXRpb25zIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBzdGF0ZSB0cmFuc2l0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MDguNDM3NTUzNjA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0OTM2MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGRiMDcxZDE4YjgzNWJhMjYwYjY3NDlhODJjMzljNWQ2YmYwNTI3N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjEyOjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcXG5pbmRleCAxYjFhODFmMTBkYTY3Li44ZjE3ZGIyNzI0YjM4IDEwMDY0NFxcbi0tLSBhL2ZzL2RjYWNoZS5jXFxuKysrIGIvZnMvZGNhY2hlLmNcXG5AQCAtNDUwLDYgKzQ1MCwxNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZkZW50cnktXFx1MDAzZWRfcmN1LCBfX2RfZnJlZSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIElmIGlub2RlIGlzIHVubGlua2VkIGFuZCBkb2Vzbid0IGhhdmUgYW55IGFsaWFzZXMgKGkuZS4sIGFsbCBmZHMgcG9pbnRpbmcgdG9cXG4rICogaXQgYXJlIGNsb3NlZCksIGl0IGlzIHByZXR0eSBtdWNoIGRlYWQuIEV4Y2VwdCB0aGF0IGZpbGUgaGFuZGxlIGxvb2t1cCBjb3VsZFxcbisgKiBzdGlsbCByZXZpdmUgaXQgd2hpY2ggY2F1c2VzIGlzc3VlcyB0byBmc25vdGlmeS4gU28gb25jZSBpbm9kZSByZWFjaGVzIHRoaXNcXG4rICogc3RhdGUgd2UgbWFrZSBzdXJlIHRvIGJsb2NrIGNyZWF0aW5nIGFueSBuZXcgYWxpYXNlcy5cXG4rICovXFxuK3N0YXRpYyBib29sIGlub2RlX25vdGlmeV9kZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuICFpbm9kZS1cXHUwMDNlaV9ubGluayBcXHUwMDI2XFx1MDAyNiBobGlzdF9lbXB0eShcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGVudHJ5KTtcXG4rfVxcbitcXG4gLypcXG4gICogUmVsZWFzZSB0aGUgZGVudHJ5J3MgaW5vZGUsIHVzaW5nIHRoZSBmaWxlc3lzdGVtXFxuICAqIGRfaXB1dCgpIG9wZXJhdGlvbiBpZiBkZWZpbmVkLlxcbkBAIC00NTksNiArNDcwLDcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxcbiBcXHRfX3JlbGVhc2VzKGRlbnRyeS1cXHUwMDNlZF9pbm9kZS1cXHUwMDNlaV9sb2NrKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktXFx1MDAzZWRfaW5vZGU7XFxuK1xcdGJvb2wgbm90aWZ5X2RlYWQ7XFxuIFxcbiBcXHRyYXdfd3JpdGVfc2VxY291bnRfYmVnaW4oXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9zZXEpO1xcbiBcXHRfX2RfY2xlYXJfdHlwZV9hbmRfaW5vZGUoZGVudHJ5KTtcXG5AQCAtNDY5LDkgKzQ4MSwxMCBAQCBzdGF0aWMgdm9pZCBkZW50cnlfdW5saW5rX2lub2RlKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpXFxuIFxcdCAqL1xcbiBcXHRkZW50cnktXFx1MDAzZXdhaXRlcnMgPSBOVUxMO1xcbiBcXHRyYXdfd3JpdGVfc2VxY291bnRfZW5kKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxKTtcXG4rXFx0bm90aWZ5X2RlYWQgPSBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSk7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jayk7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4tXFx0aWYgKCFpbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0aWYgKG5vdGlmeV9kZWFkKVxcbiBcXHRcXHRmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7XFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfb3AgXFx1MDAyNlxcdTAwMjYgZGVudHJ5LVxcdTAwM2VkX29wLVxcdTAwM2VkX2lwdXQpXFxuIFxcdFxcdGRlbnRyeS1cXHUwMDNlZF9vcC1cXHUwMDNlZF9pcHV0KGRlbnRyeSwgaW5vZGUpO1xcbkBAIC0yMjM3LDcgKzIyNTAsMTIgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBkaXNjb25uZWN0ZWQpXFxuIFxcbiBcXHRzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbiBcXG4tXFx0cmVzID0gZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7IC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbitcXHRpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSlcXG4rXFx0XFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcXHQvKiBleGlzdGluZyBhbGlhcz8gKi9cXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXMgPSBFUlJfUFRSKC1FU1RBTEUpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIFxcdGlmIChyZXMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtMjI0OSw3ICsyMjY3LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxcbiBcXG4gXFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4tXFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTsgLyogcmVjaGVjayB1bmRlciBsb2NrICovXFxuK1xcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxcbitcXHRcXHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1xcdC8qIHJlY2hlY2sgdW5kZXIgbG9jayAqL1xcbitcXHRlbHNlXFxuK1xcdFxcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XFxuIFxcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cXG4gXFx0XFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MTAuMDUzNDUxODcyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MDI2Mjg5NTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSEFORExFXCIsXG4gICAgXCJGU05PVElGWVwiLFxuICAgIFwiSU5PVElGWV9VU0VSXCIsXG4gICAgXCJGQU5PVElGWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZF9vYnRhaW5fYWxpYXNcIixcbiAgICBcImRfb2J0YWluX2FsaWFzXCIsXG4gICAgXCJkX29idGFpbl9yb290XCIsXG4gICAgXCJkZW50cnlfdW5saW5rX2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGxvZ2ljIGluIGZzL2RjYWNoZS5jIChfX2Rfb2J0YWluX2FsaWFzLCBkZW50cnlfdW5saW5rX2lub2RlKSB0byBwcmV2ZW50IGZpbGUgaGFuZGxlIGxvb2t1cHMgZnJvbSBjcmVhdGluZyBhbGlhc2VzIGZvciBkZWFkIHVubGlua2VkIGlub2RlcyBhbmQgdG8gYWNjdXJhdGVseSBub3RpZnkgZnNub3RpZnkgd2hlbiB1bmxpbmtlZCBpbm9kZXMgaGF2ZSBubyByZW1haW5pbmcgYWxpYXNlcy4gRnV6emluZyB3aXRoIGZpbGUgaGFuZGxlIHN5c2NhbGxzIChvcGVuX2J5X2hhbmRsZV9hdCkgYW5kIGNvbmN1cnJlbnQgdW5saW5rL2V4cG9ydGZzIG9wZXJhdGlvbnMgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkYjA3MWQxOGI4MzViYTI2MGI2NzQ5YTgyYzM5YzVkNmJmMDUyNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjEyOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xuaW5kZXggMWIxYTgxZjEwZGE2Ny4uOGYxN2RiMjcyNGIzOCAxMDA2NDRcbi0tLSBhL2ZzL2RjYWNoZS5jXG4rKysgYi9mcy9kY2FjaGUuY1xuQEAgLTQ1MCw2ICs0NTAsMTcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X2ZyZWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRjYWxsX3JjdShcdTAwMjZkZW50cnktXHUwMDNlZF9yY3UsIF9fZF9mcmVlKTtcbiB9XG4gXG4rLypcbisgKiBJZiBpbm9kZSBpcyB1bmxpbmtlZCBhbmQgZG9lc24ndCBoYXZlIGFueSBhbGlhc2VzIChpLmUuLCBhbGwgZmRzIHBvaW50aW5nIHRvXG4rICogaXQgYXJlIGNsb3NlZCksIGl0IGlzIHByZXR0eSBtdWNoIGRlYWQuIEV4Y2VwdCB0aGF0IGZpbGUgaGFuZGxlIGxvb2t1cCBjb3VsZFxuKyAqIHN0aWxsIHJldml2ZSBpdCB3aGljaCBjYXVzZXMgaXNzdWVzIHRvIGZzbm90aWZ5LiBTbyBvbmNlIGlub2RlIHJlYWNoZXMgdGhpc1xuKyAqIHN0YXRlIHdlIG1ha2Ugc3VyZSB0byBibG9jayBjcmVhdGluZyBhbnkgbmV3IGFsaWFzZXMuXG4rICovXG4rc3RhdGljIGJvb2wgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gIWlub2RlLVx1MDAzZWlfbmxpbmsgXHUwMDI2XHUwMDI2IGhsaXN0X2VtcHR5KFx1MDAyNmlub2RlLVx1MDAzZWlfZGVudHJ5KTtcbit9XG4rXG4gLypcbiAgKiBSZWxlYXNlIHRoZSBkZW50cnkncyBpbm9kZSwgdXNpbmcgdGhlIGZpbGVzeXN0ZW1cbiAgKiBkX2lwdXQoKSBvcGVyYXRpb24gaWYgZGVmaW5lZC5cbkBAIC00NTksNiArNDcwLDcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuIFx0X19yZWxlYXNlcyhkZW50cnktXHUwMDNlZF9pbm9kZS1cdTAwM2VpX2xvY2spXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS1cdTAwM2VkX2lub2RlO1xuK1x0Ym9vbCBub3RpZnlfZGVhZDtcbiBcbiBcdHJhd193cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuIFx0X19kX2NsZWFyX3R5cGVfYW5kX2lub2RlKGRlbnRyeSk7XG5AQCAtNDY5LDkgKzQ4MSwxMCBAQCBzdGF0aWMgdm9pZCBkZW50cnlfdW5saW5rX2lub2RlKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpXG4gXHQgKi9cbiBcdGRlbnRyeS1cdTAwM2V3YWl0ZXJzID0gTlVMTDtcbiBcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbitcdG5vdGlmeV9kZWFkID0gaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0aWYgKG5vdGlmeV9kZWFkKVxuIFx0XHRmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaXB1dClcbiBcdFx0ZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pcHV0KGRlbnRyeSwgaW5vZGUpO1xuQEAgLTIyMzcsNyArMjI1MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcbiBcbiBcdHNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcbi1cdHJlcyA9IGRfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiBleGlzdGluZyBhbGlhcz8gKi9cbitcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuK1x0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4rXHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiBleGlzdGluZyBhbGlhcz8gKi9cbitcdGVsc2VcbitcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC0yMjQ5LDcgKzIyNjcsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBkaXNjb25uZWN0ZWQpXG4gXG4gXHRzZWN1cml0eV9kX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tXHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi9cbitcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxuK1x0XHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1x0LyogcmVjaGVjayB1bmRlciBsb2NrICovXG4rXHRlbHNlXG4rXHRcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XG4gXHRpZiAobGlrZWx5KCFyZXMpKSB7IC8qIHN0aWxsIG5vIGFsaWFzLCBhdHRhY2ggYSBkaXNjb25uZWN0ZWQgZGVudHJ5ICovXG4gXHRcdHVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjEwLjA1MzQ1NDAxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Mjc3NjE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaWxlIFN5c3RlbSBDYWNoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgZnMvZGNhY2hlLmNgLCB3aGljaCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBmaWxlIHN5c3RlbSBjYWNoZSBvcGVyYXRpb25zIOKAkyBwcm9iYWJseSByZWxhdGVkIHRvIGRpcmVjdG9yeSBlbnRyaWVzIGFuZCBpbm9kZSBoYW5kbGluZy4gSW50ZXJlc3RpbmcuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgZnVuY3Rpb24sIGBpbm9kZV9ub3RpZnlfZGVhZCgpYC4gQmFzZWQgb24gdGhlIGNvZGUsIGl0IHNlZW1zIHRvIGNoZWNrIGlmIGFuIGlub2RlIGlzIFwiZGVhZFwiIOKAkyBubyBoYXJkIGxpbmtzIGFuZCBhbiBlbXB0eSBkZW50cnkgbGlzdC4gVGhpcyBpcyBrZXksIHNvIEknbGwgbmVlZCB0byBrZWVwIHRoYXQgZGVmaW5pdGlvbiBmcm9udCBvZiBtaW5kLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCdzIGxvZ2ljLlxuXG5UaGUgbmV4dCBwb2ludCBpbnZvbHZlcyBgZGVudHJ5X3VubGlua19pbm9kZSgpYC4gVGhlIG1vZGlmaWNhdGlvbiBzdWdnZXN0cyB0aGF0IHRoZXkncmUgdXNpbmcgdGhpcyBgaW5vZGVfbm90aWZ5X2RlYWQoKWAgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIGBmc25vdGlmeV9pbm9kZXJlbW92ZSgpYCBzaG91bGQgYmUgY2FsbGVkLiBUaGlzIGltcGxpZXMgc29tZSBmb3JtIG9mIG5vdGlmaWNhdGlvbiBvciBjbGVhbnVwIHdoZW4gYW4gaW5vZGUgaXMgdW5saW5rZWQgYW5kIGFwcGVhcnMgdG8gYmUgaW4gYSBkZWFkIHN0YXRlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHdlIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgY2xlYW51cCBvZiBvcnBoYW5lZCBpbm9kZXMsIG9yIGFyZSB3ZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIG5vdGlmaWNhdGlvbnMgYW5kIHN0YWxlIGlub2Rlcz8gSSB3aWxsIG5lZWQgdG8gbG9vayBkZWVwZXIuXG5cbkZpbmFsbHksIGBfX2Rfb2J0YWluX2FsaWFzKClgIGlzIGFsc28gbW9kaWZpZWQsIGluY29ycG9yYXRpbmcgdGhlIGBpbm9kZV9ub3RpZnlfZGVhZCgpYCBjaGVjayB1bmRlciBgaW5vZGUtXHUwMDNlaV9sb2NrYCBiZWZvcmUgZmluZGluZyBvciBhdHRhY2hpbmcgYW4gYWxpYXMuIElmIHRoZSBpbm9kZSBpcyBjb25zaWRlcmVkIGRlYWQsIGl0IHJldHVybnMgYC1FU1RBTEVgLiBUaGlzIHRlbGxzIG1lIHdlIGFyZSBhdHRlbXB0aW5nIHRvIHByZXZlbnQgdGhlIGNyZWF0aW9uIG9mIG5ldyBhbGlhc2VzIG9yIHRoZSByZXVzZSBvZiBhbGlhc2VzIGZvciBkZWFkIGlub2Rlcy4gUmV0dXJuaW5nIC1FU1RBTEUgYWxzbyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCB0aGVuIHJldHJ5IHRoZSBvcGVyYXRpb24gb3Igb3RoZXJ3aXNlIHNpZ25hbCBmYWlsdXJlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHRoZXNlIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29udGV4dC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9uIGBmcy9kY2FjaGUuY2AgdG8gbG9vayBhdCB0aGlzIG1vcmUgY2xvc2VseSwgcGFydGljdWxhcmx5IGFyb3VuZCB3aGVyZSB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgZGNhY2hlIHdpbGwgYmUgZXNzZW50aWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTkwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MTQuNzgxMjE5NDQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc0NzQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Rfb2J0YWluX2FsaWFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz0yMjM5PUVYUE9SVF9TWU1CT0woZF9tYWtlX3Jvb3QpO1xcbmZzL2RjYWNoZS5jLTIyNDAtXFxuZnMvZGNhY2hlLmM6MjI0MTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcXG5mcy9kY2FjaGUuYy0yMjQyLXtcXG4tLVxcbmZzL2RjYWNoZS5jPTIzMjA9c3RydWN0IGRlbnRyeSAqZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9kY2FjaGUuYy0yMzIxLXtcXG5mcy9kY2FjaGUuYzoyMzIyOlxcdHJldHVybiBfX2Rfb2J0YWluX2FsaWFzKGlub2RlLCB0cnVlKTtcXG5mcy9kY2FjaGUuYy0yMzIzLX1cXG4tLVxcbmZzL2RjYWNoZS5jPTIzNDE9c3RydWN0IGRlbnRyeSAqZF9vYnRhaW5fcm9vdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2RjYWNoZS5jLTIzNDIte1xcbmZzL2RjYWNoZS5jOjIzNDM6XFx0cmV0dXJuIF9fZF9vYnRhaW5fYWxpYXMoaW5vZGUsIGZhbHNlKTtcXG5mcy9kY2FjaGUuYy0yMzQ0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MTQuOTE4OTcxNzMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2MjE4NTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgc25pcHBldHMgYXMgaWYgdGhleSB3ZXJlIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYGZzL2RjYWNoZS5jYCBmb3IgQ29udGV4dCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGZzL2RjYWNoZS5jYC4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMjIzNS0yMzAwIGFuZCB0aGVuIGxvb3BpbmcgYmFjayB0byA0NTAtNTAwLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBnZWFyZWQgYXJvdW5kIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGRlbnRyeSBjYWNoZSdzIGludGVyYWN0aW9uIHdpdGggdGhlIGZpbGVzeXN0ZW0gbGF5ZXIsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuXG5cbkkgc3VzcGVjdCB0aGF0IHNlZ21lbnQgMjIzNS0yMzAwLCBpcyBpbnZvbHZlZCBpbiBkZW50cnkgaW52YWxpZGF0aW9uIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiDigJMgcGVyaGFwcyBoYW5kbGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBhY3RpdmUgZGVudHJpZXMsIG9yIGhvdyBpdCBkZWFscyB3aXRoIHRoZSByZW1vdmFsIG9mIGVudHJpZXMuIEknbSBrZWVuIHRvIHNlZSB0aGUgc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgd2l0aGluIHRoYXQgcG9ydGlvbiBvZiB0aGUgY29kZSwgYXMgd2VsbCBhcyB0aGUgY29uZGl0aW9ucyB3aGVyZSBpdCBnZXRzIHRyaWdnZXJlZC4gTXkgbWVudGFsIGNoZWNrbGlzdCBpbmNsdWRlcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGlub2RlL3N1cGVyYmxvY2sgc3RydWN0dXJlcywgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCB0eXBlcyBvZiBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIGxpa2UgdW5saW5raW5nIG9yIHJlbmFtaW5nLiBJIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlxuXG5UaGVuLCBJIHdhbnQgdG8gYmFjayB1cCBhIGJpdCBhbmQgbG9vayBhdCB0aGUgbW9yZSBmb3VuZGF0aW9uYWwgb3BlcmF0aW9ucyBmcm9tIGxpbmVzIDQ1MC01MDAuIFRoaXMgYXJlYSB3aWxsIGxpa2VseSBjb3ZlciB0aGUgZnVuZGFtZW50YWwgZGVudHJ5IGFsbG9jYXRpb24gb3IgbG9va3VwIHJvdXRpbmVzLCBvciBwZXJoYXBzIGV2ZW4gdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHBpZWNlcyB3aWxsIHByb3ZpZGUgY29udGV4dCBmb3IgdGhlIGxhdGVyIHNlZ21lbnQuIEknbSBjdXJpb3VzIGlmIHRoZXkndmUgaW1wbGVtZW50ZWQgYW55IGNhY2hpbmcgc3RyYXRlZ2llcyB3aXRoaW4gdGhlIGRlbnRyeSBpdHNlbGYsIGFuZCBob3cgdGhvc2UgY2FjaGluZyBkZWNpc2lvbnMgbWF5IGJlIGluZmx1ZW5jaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHN5c3RlbS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBsb29rdXBzLCBhbmQgaG93IHRoYXQgaW50ZXJzZWN0cyB3aXRoIHRoZSBsb2NraW5nIG1lY2hhbmlzbSwgYW5kIG90aGVyIGNvcmUgZnVuY3Rpb25zLiBJIHdvdWxkIGxpa2UgdG8gc2VlIGhvdyBlZmZpY2llbnQgaXQgaXMgYW5kIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MTkuODgxMTYxMTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0NTpcXHRcXHR9XFxuIDQ0NjpcXHRcXHQvKiBpZiBkZW50cnkgd2FzIG5ldmVyIHZpc2libGUgdG8gUkNVLCBpbW1lZGlhdGUgZnJlZSBpcyBPSyAqL1xcbiA0NDc6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9mbGFncyBcXHUwMDI2IERDQUNIRV9OT1JDVSlcXG4gNDQ4OlxcdFxcdFxcdF9fZF9mcmVlKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfcmN1KTtcXG4gNDQ5OlxcdFxcdGVsc2VcXG4gNDUwOlxcdFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZkZW50cnktXFx1MDAzZWRfcmN1LCBfX2RfZnJlZSk7XFxuIDQ1MTpcXHR9XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdC8qXFxuIDQ1NDpcXHQgKiBJZiBpbm9kZSBpcyB1bmxpbmtlZCBhbmQgZG9lc24ndCBoYXZlIGFueSBhbGlhc2VzIChpLmUuLCBhbGwgZmRzIHBvaW50aW5nIHRvXFxuIDQ1NTpcXHQgKiBpdCBhcmUgY2xvc2VkKSwgaXQgaXMgcHJldHR5IG11Y2ggZGVhZC4gRXhjZXB0IHRoYXQgZmlsZSBoYW5kbGUgbG9va3VwIGNvdWxkXFxuIDQ1NjpcXHQgKiBzdGlsbCByZXZpdmUgaXQgd2hpY2ggY2F1c2VzIGlzc3VlcyB0byBmc25vdGlmeS4gU28gb25jZSBpbm9kZSByZWFjaGVzIHRoaXNcXG4gNDU3OlxcdCAqIHN0YXRlIHdlIG1ha2Ugc3VyZSB0byBibG9jayBjcmVhdGluZyBhbnkgbmV3IGFsaWFzZXMuXFxuIDQ1ODpcXHQgKi9cXG4gNDU5OlxcdHN0YXRpYyBib29sIGlub2RlX25vdGlmeV9kZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDQ2MDpcXHR7XFxuIDQ2MTpcXHRcXHRyZXR1cm4gIWlub2RlLVxcdTAwM2VpX25saW5rIFxcdTAwMjZcXHUwMDI2IGhsaXN0X2VtcHR5KFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kZW50cnkpO1xcbiA0NjI6XFx0fVxcbiA0NjM6XFx0XFxuIDQ2NDpcXHQvKlxcbiA0NjU6XFx0ICogUmVsZWFzZSB0aGUgZGVudHJ5J3MgaW5vZGUsIHVzaW5nIHRoZSBmaWxlc3lzdGVtXFxuIDQ2NjpcXHQgKiBkX2lwdXQoKSBvcGVyYXRpb24gaWYgZGVmaW5lZC5cXG4gNDY3OlxcdCAqL1xcbiA0Njg6XFx0c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxcbiA0Njk6XFx0XFx0X19yZWxlYXNlcyhkZW50cnktXFx1MDAzZWRfbG9jaylcXG4gNDcwOlxcdFxcdF9fcmVsZWFzZXMoZGVudHJ5LVxcdTAwM2VkX2lub2RlLVxcdTAwM2VpX2xvY2spXFxuIDQ3MTpcXHR7XFxuIDQ3MjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbiA0NzM6XFx0XFx0Ym9vbCBub3RpZnlfZGVhZDtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0cmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxKTtcXG4gNDc2OlxcdFxcdF9fZF9jbGVhcl90eXBlX2FuZF9pbm9kZShkZW50cnkpO1xcbiA0Nzc6XFx0XFx0X19obGlzdF9kZWwoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9hbGlhcyk7XFxuIDQ3ODpcXHRcXHQvKlxcbiA0Nzk6XFx0XFx0ICogZGVudHJ5IGJlY29tZXMgbmVnYXRpdmUsIHNvIHRoZSBzcGFjZSBvY2N1cGllZCBieSAtXFx1MDAzZWRfYWxpYXNcXG4gNDgwOlxcdFxcdCAqIGJlbG9uZ3MgdG8gLVxcdTAwM2V3YWl0ZXJzIG5vdy5cXG4gNDgxOlxcdFxcdCAqL1xcbiA0ODI6XFx0XFx0ZGVudHJ5LVxcdTAwM2V3YWl0ZXJzID0gTlVMTDtcXG4gNDgzOlxcdFxcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9zZXEpO1xcbiA0ODQ6XFx0XFx0bm90aWZ5X2RlYWQgPSBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSk7XFxuIDQ4NTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbiA0ODY6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA0ODc6XFx0XFx0aWYgKG5vdGlmeV9kZWFkKVxcbiA0ODg6XFx0XFx0XFx0ZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpO1xcbiA0ODk6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9vcCBcXHUwMDI2XFx1MDAyNiBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaXB1dClcXG4gNDkwOlxcdFxcdFxcdGRlbnRyeS1cXHUwMDNlZF9vcC1cXHUwMDNlZF9pcHV0KGRlbnRyeSwgaW5vZGUpO1xcbiA0OTE6XFx0XFx0ZWxzZVxcbiA0OTI6XFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdC8qXFxuIDQ5NjpcXHQgKiBUaGUgRENBQ0hFX0xSVV9MSVNUIGJpdCBpcyBzZXQgd2hlbmV2ZXIgdGhlICdkX2xydScgZW50cnlcXG4gNDk3OlxcdCAqIGlzIGluIHVzZSAtIHdoaWNoIGluY2x1ZGVzIGJvdGggdGhlIFxcXCJyZWFsXFxcIiBwZXItc3VwZXJibG9ja1xcbiA0OTg6XFx0ICogTFJVIGxpc3QgX2FuZF8gdGhlIERDQUNIRV9TSFJJTktfTElTVCB1c2UuXFxuIDQ5OTpcXHQgKlxcbiA1MDA6XFx0ICogVGhlIERDQUNIRV9TSFJJTktfTElTVCBiaXQgaXMgc2V0IHdoZW5ldmVyIHRoZSBkZW50cnkgaXNcXG4gNTAxOlxcdCAqIG9uIHRoZSBzaHJpbmsgbGlzdCAoaWUgbm90IG9uIHRoZSBzdXBlcmJsb2NrIExSVSBsaXN0KS5cXG4gNTAyOlxcdCAqXFxuIDUwMzpcXHQgKiBUaGUgcGVyLWNwdSBcXFwibnJfZGVudHJ5X3VudXNlZFxcXCIgY291bnRlcnMgYXJlIHVwZGF0ZWQgd2l0aFxcbiA1MDQ6XFx0ICogdGhlIERDQUNIRV9MUlVfTElTVCBiaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjE5Ljg4MTM3NzY4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDI4MDcwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBSZWxldmFudCBUZXh0IENodW5rcyoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDIyMzUtMjMwMC4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGdyYXNwIG9mIHRoaXMgc3BlY2lmaWMgc2VjdGlvbi4gR2l2ZW4gbXkgZXhpc3RpbmcgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250ZXh0IGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgc3ViamVjdCBtYXR0ZXIsIEnigJltIGd1ZXNzaW5nIHRoaXMgcmFuZ2UgbGlrZWx5IGNvbnRhaW5zIHRoZSBjcml0aWNhbCBkZXRhaWxzIEknbSBhZnRlciwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHJlbGV2YW50IGNvbnRleHQgdGhhdCBoZWxwcyB3aXRoIG15IGN1cnJlbnQgb2JqZWN0aXZlLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSBpdCB3aXRoIGEgZmluZS10b290aCBjb21iLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzcGVjaWZpYyBhcmd1bWVudHMgcHJlc2VudGVkLCBhbnkgc3VwcG9ydGluZyBkYXRhIG9yIGV2aWRlbmNlLCBhbmQgdGhlIG92ZXJhbGwgbmFycmF0aXZlIGZsb3cgd2l0aGluIHRoaXMgZGVsaW1pdGVkIHJhbmdlLiBJdCdzIGEga2V5IHNlZ21lbnQsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJpYXNlcywgaW5jb25zaXN0ZW5jaWVzLCBvciBhbnkgc3VycHJpc2luZyByZXZlbGF0aW9ucyB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgd2F5IEkgdGhpbmsgYWJvdXQgdGhlIGVudGlyZSBkb2N1bWVudC4gTXkgZXhwZXJ0aXNlIGxldHMgbWUgY3V0IHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjIyLjA4NDE4NzI1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kY2FjaGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjM1LFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjM1OlxcdFxcdFxcdFxcdGlwdXQocm9vdF9pbm9kZSk7XFxuMjIzNjpcXHRcXHR9XFxuMjIzNzpcXHRcXHRyZXR1cm4gcmVzO1xcbjIyMzg6XFx0fVxcbjIyMzk6XFx0RVhQT1JUX1NZTUJPTChkX21ha2Vfcm9vdCk7XFxuMjI0MDpcXHRcXG4yMjQxOlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxcbjIyNDI6XFx0e1xcbjIyNDM6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcXG4yMjQ0OlxcdFxcdHN0cnVjdCBkZW50cnkgKm5ldywgKnJlcztcXG4yMjQ1OlxcdFxcbjIyNDY6XFx0XFx0aWYgKCFpbm9kZSlcXG4yMjQ3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FU1RBTEUpO1xcbjIyNDg6XFx0XFx0aWYgKElTX0VSUihpbm9kZSkpXFxuMjI0OTpcXHRcXHRcXHRyZXR1cm4gRVJSX0NBU1QoaW5vZGUpO1xcbjIyNTA6XFx0XFxuMjI1MTpcXHRcXHRzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbjIyNTI6XFx0XFxuMjI1MzpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbjIyNTQ6XFx0XFx0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXFxuMjI1NTpcXHRcXHRcXHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1xcdC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xcbjIyNTY6XFx0XFx0ZWxzZVxcbjIyNTc6XFx0XFx0XFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcXG4yMjU4OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMjU5OlxcdFxcdGlmIChyZXMpXFxuMjI2MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjYxOlxcdFxcbjIyNjI6XFx0XFx0bmV3ID0gZF9hbGxvY19hbm9uKHNiKTtcXG4yMjYzOlxcdFxcdGlmICghbmV3KSB7XFxuMjI2NDpcXHRcXHRcXHRyZXMgPSBFUlJfUFRSKC1FTk9NRU0pO1xcbjIyNjU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI2NjpcXHRcXHR9XFxuMjI2NzpcXHRcXG4yMjY4OlxcdFxcdHNlY3VyaXR5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7XFxuMjI2OTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbjIyNzA6XFx0XFx0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXFxuMjI3MTpcXHRcXHRcXHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1xcdC8qIHJlY2hlY2sgdW5kZXIgbG9jayAqL1xcbjIyNzI6XFx0XFx0ZWxzZVxcbjIyNzM6XFx0XFx0XFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcXG4yMjc0OlxcdFxcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cXG4yMjc1OlxcdFxcdFxcdHVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTtcXG4yMjc2OlxcdFxcbjIyNzc6XFx0XFx0XFx0aWYgKGRpc2Nvbm5lY3RlZClcXG4yMjc4OlxcdFxcdFxcdFxcdGFkZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEO1xcbjIyNzk6XFx0XFxuMjI4MDpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm5ldy1cXHUwMDNlZF9sb2NrKTtcXG4yMjgxOlxcdFxcdFxcdF9fZF9zZXRfaW5vZGVfYW5kX3R5cGUobmV3LCBpbm9kZSwgYWRkX2ZsYWdzKTtcXG4yMjgyOlxcdFxcdFxcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZuZXctXFx1MDAzZWRfYWxpYXMsIFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kZW50cnkpO1xcbjIyODM6XFx0XFx0XFx0aWYgKCFkaXNjb25uZWN0ZWQpIHtcXG4yMjg0OlxcdFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfcm9vdHNfbG9jayk7XFxuMjI4NTpcXHRcXHRcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2bmV3LVxcdTAwM2VkX3NpYiwgXFx1MDAyNnNiLVxcdTAwM2VzX3Jvb3RzKTtcXG4yMjg2OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19yb290c19sb2NrKTtcXG4yMjg3OlxcdFxcdFxcdH1cXG4yMjg4OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZuZXctXFx1MDAzZWRfbG9jayk7XFxuMjI4OTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuMjI5MDpcXHRcXHRcXHRpbm9kZSA9IE5VTEw7IC8qIGNvbnN1bWVkIGJ5IG5ldy1cXHUwMDNlZF9pbm9kZSAqL1xcbjIyOTE6XFx0XFx0XFx0cmVzID0gbmV3O1xcbjIyOTI6XFx0XFx0fSBlbHNlIHtcXG4yMjkzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMjk0OlxcdFxcdFxcdGRwdXQobmV3KTtcXG4yMjk1OlxcdFxcdH1cXG4yMjk2OlxcdFxcbjIyOTc6XFx0IG91dDpcXG4yMjk4OlxcdFxcdGlwdXQoaW5vZGUpO1xcbjIyOTk6XFx0XFx0cmV0dXJuIHJlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MjIuMDg0NDAzNzI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgxNTU4MzQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29yZSBWRlMgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTLCBzcGVjaWZpY2FsbHkgYGZzL2RjYWNoZS5jYC4gVGhpcyBpcyBhICp2ZXJ5KiBpbnRlcmVzdGluZyBhcmVhLCBpbnZvbHZpbmcgdGhlIGRjYWNoZSwgYG9wZW5fYnlfaGFuZGxlX2F0YCwgYG5hbWVfdG9faGFuZGxlX2F0YCwgYGV4cG9ydGZzYCwgZmlsZSB1bmxpbmtpbmcsIGFuZCBgZnNub3RpZnlgLiAqRGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIGxvZ2ljIGNoYW5nZXMgcmVsYXRlZCB0byB1bmxpbmtlZCBkZWFkIGlub2RlcyBkdXJpbmcgYWxpYXMgcmVzb2x1dGlvbiBhbmQgZnNub3RpZnkgZXZlbnQgZ2VuZXJhdGlvbiBhcmUgY3JpdGljYWwsIHRoYXQncyB3aGVyZSBidWdzIGNhbiBoaWRlLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gYGZzL2RjYWNoZS5jYCBpcyBjb3JlIFZGUywgc28gaXQncyBhbHdheXMgYnVpbHQtaW4sIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgZGlyZWN0bHkuIEhvd2V2ZXIsIGFyZSB0aGVyZSAqaW5kaXJlY3QqIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzPyBJJ20gdGhpbmtpbmcgYWJvdXQgYG9wZW5fYnlfaGFuZGxlX2F0YCBhbmQgZXhwb3J0IG9wZXJhdGlvbnMgb3IgYGZzbm90aWZ5YC4gYEZTTk9USUZZYCBpdHNlbGYgaXMgc3RhbmRhcmQsIHNvIHRoYXQncyBub3QgdGhlIGlzc3VlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYENPTkZJR19FWFBPUlRGU2Agb3IgYENPTkZJR19GSEFORExFYCBtaWdodCBiZSByZWxldmFudCwgc2luY2UgdGhvc2UgKmRvKiBlbmFibGUgdGhlIGZpbGUgaGFuZGxlIHN5c2NhbGxzIGxpa2UgYG5hbWVfdG9faGFuZGxlX2F0YCBhbmQgYG9wZW5fYnlfaGFuZGxlX2F0YC4gVGhlc2UgYXJlIHRoZSBvbmVzIEkgcmVhbGx5IG5lZWQgdG8gZm9jdXMgb24uIFRoZXkgY2FuIG1ha2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb3JlIFZGUyBjaGFuZ2UuXG5cblRvIG1ha2Ugc3VyZSBJIGhhdmUgY292ZXJlZCBhbGwgdGhlIHNjZW5hcmlvcywgSSBuZWVkIHRvIGtub3cgd2hlcmUgYGRfb2J0YWluX2FsaWFzYCBpcyBjYWxsZWQgYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjoyOS44OTk5OTE1NDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzkwMjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkX29idGFpbl9hbGlhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZmcy9uYW1laS5jPTUyMz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvYWZmcy9uYW1laS5jLTUzNC1cXHRicmVsc2UoYmgpO1xcbmZzL2FmZnMvbmFtZWkuYzo1MzU6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKHBhcmVudCk7XFxuZnMvYWZmcy9uYW1laS5jLTUzNi19XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9NjY1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpiZWZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjcxLVxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nKWJlZnNfaW5vLVxcdTAwM2VpX3BhcmVudC5zdGFydCk7XFxuZnMvYmVmcy9saW51eHZmcy5jOjY3MjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMocGFyZW50KTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjczLX1cXG4tLVxcbmZzL2J0cmZzL2V4cG9ydC5jPTc5PXN0cnVjdCBkZW50cnkgKmJ0cmZzX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9iamVjdGlkLFxcbi0tXFxuZnMvYnRyZnMvZXhwb3J0LmMtMTAyLVxcbmZzL2J0cmZzL2V4cG9ydC5jOjEwMzpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoXFx1MDAyNmlub2RlLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbmZzL2J0cmZzL2V4cG9ydC5jLTEwNC19XFxuLS1cXG5mcy9idHJmcy9leHBvcnQuYz0xNTI9c3RydWN0IGRlbnRyeSAqYnRyZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2J0cmZzL2V4cG9ydC5jLTIyMy1cXG5mcy9idHJmcy9leHBvcnQuYzoyMjQ6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFxcdTAwMjZpbm9kZS1cXHUwMDNldmZzX2lub2RlKTtcXG5mcy9idHJmcy9leHBvcnQuYy0yMjUtZmFpbDpcXG4tLVxcbmZzL2NlcGgvZXhwb3J0LmM9MTg5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2ZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgaW5vKVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy0yMDctXFx0fVxcbmZzL2NlcGgvZXhwb3J0LmM6MjA4OlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvY2VwaC9leHBvcnQuYy0yMDktfVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYz0yMTE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fc25hcGZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy0yNDUtXFx0XFx0fVxcbmZzL2NlcGgvZXhwb3J0LmM6MjQ2OlxcdFxcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvY2VwaC9leHBvcnQuYy0yNDctXFx0fVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy0yOTQtXFx0Lyogc2VlIGNvbW1lbnRzIGluIGNlcGhfZ2V0X3BhcmVudCgpICovXFxuZnMvY2VwaC9leHBvcnQuYzoyOTU6XFx0cmV0dXJuIHVubGlua2VkID8gZF9vYnRhaW5fcm9vdChpbm9kZSkgOiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvY2VwaC9leHBvcnQuYy0yOTYtfVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYz0zMjM9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZ2V0X3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy0zNjUtXFxuZnMvY2VwaC9leHBvcnQuYzozNjY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9jZXBoL2V4cG9ydC5jLTM2Ny19XFxuLS1cXG5mcy9jZXBoL2V4cG9ydC5jPTM2OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY2VwaF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy00MDYtXFx0XFx0ZWxzZVxcbmZzL2NlcGgvZXhwb3J0LmM6NDA3OlxcdFxcdFxcdGRuID0gZF9vYnRhaW5fYWxpYXMoZGlyKTtcXG5mcy9jZXBoL2V4cG9ydC5jLTQwOC1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZGNhY2hlLmM9MjIzOT1FWFBPUlRfU1lNQk9MKGRfbWFrZV9yb290KTtcXG5mcy9kY2FjaGUuYy0yMjQwLVxcbmZzL2RjYWNoZS5jOjIyNDE6c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBkaXNjb25uZWN0ZWQpXFxuZnMvZGNhY2hlLmMtMjI0Mi17XFxuLS1cXG5mcy9kY2FjaGUuYy0yMzAyLS8qKlxcbmZzL2RjYWNoZS5jOjIzMDM6ICogZF9vYnRhaW5fYWxpYXMgLSBmaW5kIG9yIGFsbG9jYXRlIGEgRElTQ09OTkVDVEVEIGRlbnRyeSBmb3IgYSBnaXZlbiBpbm9kZVxcbmZzL2RjYWNoZS5jLTIzMDQtICogQGlub2RlOiBpbm9kZSB0byBhbGxvY2F0ZSB0aGUgZGVudHJ5IGZvclxcbi0tXFxuZnMvZGNhY2hlLmMtMjMxOS0gKi9cXG5mcy9kY2FjaGUuYzoyMzIwOnN0cnVjdCBkZW50cnkgKmRfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZGNhY2hlLmMtMjMyMS17XFxuZnMvZGNhY2hlLmM6MjMyMjpcXHRyZXR1cm4gX19kX29idGFpbl9hbGlhcyhpbm9kZSwgdHJ1ZSk7XFxuZnMvZGNhY2hlLmMtMjMyMy19XFxuZnMvZGNhY2hlLmM6MjMyNDpFWFBPUlRfU1lNQk9MKGRfb2J0YWluX2FsaWFzKTtcXG5mcy9kY2FjaGUuYy0yMzI1LVxcbi0tXFxuZnMvZGNhY2hlLmM9MjM0MT1zdHJ1Y3QgZGVudHJ5ICpkX29idGFpbl9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZGNhY2hlLmMtMjM0Mi17XFxuZnMvZGNhY2hlLmM6MjM0MzpcXHRyZXR1cm4gX19kX29idGFpbl9hbGlhcyhpbm9kZSwgZmFsc2UpO1xcbmZzL2RjYWNoZS5jLTIzNDQtfVxcbi0tXFxuZnMvZXJvZnMvaXNoYXJlLmM9MzM9Ym9vbCBlcm9mc19pc2hhcmVfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXJvZnMvaXNoYXJlLmMtNzEtXFx0fVxcbmZzL2Vyb2ZzL2lzaGFyZS5jOjcyOlxcdHNkID0gZF9vYnRhaW5fYWxpYXMoc2kpOyAvKiBkaXNjb25uZWN0ZWQgZGVudGllcyBmb3Igc2hhcmVkaW5vZGVzICovXFxuZnMvZXJvZnMvaXNoYXJlLmMtNzMtXFx0aWYgKElTX0VSUihzZCkpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTU5Nj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXJvZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTYwMi1cXG5mcy9lcm9mcy9zdXBlci5jOjYwMzpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXJvZnNfaWdldChzYixcXG5mcy9lcm9mcy9zdXBlci5jLTYwNC1cXHRcXHQoKHU2NClmaWQtXFx1MDAzZXJhd1swXSBcXHUwMDNjXFx1MDAzYyAzMikgfCBmaWQtXFx1MDAzZXJhd1sxXSkpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz02MDc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmVyb2ZzX2ZoX3RvX3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy02MTItXFxuZnMvZXJvZnMvc3VwZXIuYzo2MTM6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGVyb2ZzX2lnZXQoc2IsXFxuZnMvZXJvZnMvc3VwZXIuYy02MTQtXFx0XFx0KCh1NjQpZmlkLVxcdTAwM2VyYXdbM10gXFx1MDAzY1xcdTAwM2MgMzIpIHwgZmlkLVxcdTAwM2VyYXdbNF0pKTtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9NjE3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICplcm9mc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy02MjUtXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG5mcy9lcm9mcy9zdXBlci5jOjYyNjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXJvZnNfaWdldChjaGlsZC1cXHUwMDNlZF9zYiwgbmlkKSk7XFxuZnMvZXJvZnMvc3VwZXIuYy02MjctfVxcbi0tXFxuZnMvZXh0Mi9uYW1laS5jPTgwPXN0cnVjdCBkZW50cnkgKmV4dDJfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2V4dDIvbmFtZWkuYy04OC1cXG5mcy9leHQyL25hbWVpLmM6ODk6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGV4dDJfaWdldChjaGlsZC1cXHUwMDNlZF9zYiwgaW5vKSk7XFxuZnMvZXh0Mi9uYW1laS5jLTkwLX0gXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTgxOD1zdHJ1Y3QgZGVudHJ5ICpleHQ0X2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTgzNy1cXG5mcy9leHQ0L25hbWVpLmM6MTgzODpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXh0NF9pZ2V0KGNoaWxkLVxcdTAwM2VkX3NiLCBpbm8sIEVYVDRfSUdFVF9OT1JNQUwpKTtcXG5mcy9leHQ0L25hbWVpLmMtMTgzOS19XFxuLS1cXG5mcy9mMmZzL25hbWVpLmM9NDc0PXN0cnVjdCBkZW50cnkgKmYyZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2YyZnMvbmFtZWkuYy00ODMtXFx0fVxcbmZzL2YyZnMvbmFtZWkuYzo0ODQ6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGYyZnNfaWdldChjaGlsZC1cXHUwMDNlZF9zYiwgaW5vKSk7XFxuZnMvZjJmcy9uYW1laS5jLTQ4NS19XFxuLS1cXG5mcy9mYXQvbmZzLmM9MTU1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmYXRfZmhfdG9fZGVudHJ5X25vc3RhbGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2ZhdC9uZnMuYy0xNzgtXFxuZnMvZmF0L25mcy5jOjE3OTpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL2ZhdC9uZnMuYy0xODAtfVxcbi0tXFxuZnMvZmF0L25mcy5jPTE5Mz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZmF0X2ZoX3RvX3BhcmVudF9ub3N0YWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9mYXQvbmZzLmMtMjExLVxcbmZzL2ZhdC9uZnMuYzoyMTI6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9mYXQvbmZzLmMtMjEzLX1cXG4tLVxcbmZzL2ZhdC9uZnMuYz0yNzA9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhdF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkX2RpcilcXG4tLVxcbmZzL2ZhdC9uZnMuYy0yODUtXFxuZnMvZmF0L25mcy5jOjI4NjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMocGFyZW50X2lub2RlKTtcXG5mcy9mYXQvbmZzLmMtMjg3LX1cXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xMDU0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmdXNlX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xMDg3LVxcbmZzL2Z1c2UvaW5vZGUuYzoxMDg4OlxcdGVudHJ5ID0gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL2Z1c2UvaW5vZGUuYy0xMDg5LVxcdGlmICghSVNfRVJSKGVudHJ5KSBcXHUwMDI2XFx1MDAyNiBnZXRfbm9kZV9pZChpbm9kZSkgIT0gRlVTRV9ST09UX0lEKVxcbi0tXFxuZnMvZnVzZS9pbm9kZS5jPTExNjE9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZ1c2VfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xMTgwLVxcbmZzL2Z1c2UvaW5vZGUuYzoxMTgxOlxcdHBhcmVudCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9mdXNlL2lub2RlLmMtMTE4Mi1cXHRpZiAoIUlTX0VSUihwYXJlbnQpIFxcdTAwMjZcXHUwMDI2IGdldF9ub2RlX2lkKGlub2RlKSAhPSBGVVNFX1JPT1RfSUQpXFxuLS1cXG5mcy9nZnMyL2V4cG9ydC5jPTEyNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbmZzL2dmczIvZXhwb3J0LmMtMTI3LXtcXG5mcy9nZnMyL2V4cG9ydC5jOjEyODpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZ2ZzMl9sb29rdXBpKGRfaW5vZGUoY2hpbGQpLCBcXHUwMDI2Z2ZzMl9xZG90ZG90LCAxKSk7XFxuZnMvZ2ZzMi9leHBvcnQuYy0xMjktfVxcbi0tXFxuZnMvZ2ZzMi9leHBvcnQuYz0xMzE9c3RhdGljIHN0cnVjdCBkZW50cnkgKmdmczJfZ2V0X2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZ2ZzMi9leHBvcnQuYy0xNDAtXFx0XFx0XFx0XFx0ICAgIEdGUzJfQkxLU1RfRElOT0RFKTtcXG5mcy9nZnMyL2V4cG9ydC5jOjE0MTpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL2dmczIvZXhwb3J0LmMtMTQyLX1cXG4tLVxcbmZzL2lzb2ZzL2V4cG9ydC5jPTIwPWlzb2ZzX2V4cG9ydF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYy0zNS1cXHR9XFxuZnMvaXNvZnMvZXhwb3J0LmM6MzY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9pc29mcy9leHBvcnQuYy0zNy19XFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYz00ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqaXNvZnNfZXhwb3J0X2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYy0xMDktXFxuZnMvaXNvZnMvZXhwb3J0LmM6MTEwOlxcdHJ2ID0gZF9vYnRhaW5fYWxpYXMoaXNvZnNfaWdldChjaGlsZF9pbm9kZS1cXHUwMDNlaV9zYiwgcGFyZW50X2Jsb2NrLFxcbmZzL2lzb2ZzL2V4cG9ydC5jLTExMS1cXHRcXHRcXHRcXHQgICAgIHBhcmVudF9vZmZzZXQpKTtcXG4tLVxcbmZzL2pmZnMyL3N1cGVyLmM9MTM2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqZmZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvamZmczIvc3VwZXIuYy0xNDktXFxuZnMvamZmczIvc3VwZXIuYzoxNTA6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGpmZnMyX2lnZXQoY2hpbGQtXFx1MDAzZWRfc2IsIHBpbm8pKTtcXG5mcy9qZmZzMi9zdXBlci5jLTE1MS19XFxuLS1cXG5mcy9qZnMvbmFtZWkuYz0xNTEzPXN0cnVjdCBkZW50cnkgKmpmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2pmcy9uYW1laS5jLTE1MTktXFxuZnMvamZzL25hbWVpLmM6MTUyMDpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoamZzX2lnZXQoZGVudHJ5LVxcdTAwM2VkX3NiLCBwYXJlbnRfaW5vKSk7XFxuZnMvamZzL25hbWVpLmMtMTUyMS19XFxuLS1cXG5mcy9rZXJuZnMvbW91bnQuYz05Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19rZXJuZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9rZXJuZnMvbW91bnQuYy0xNDItXFx0a2VybmZzX3B1dChrbik7XFxuZnMva2VybmZzL21vdW50LmM6MTQzOlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMva2VybmZzL21vdW50LmMtMTQ0LX1cXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jPTE2MD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqa2VybmZzX2dldF9wYXJlbnRfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMva2VybmZzL21vdW50LmMtMTY1LVxcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZyb290LVxcdTAwM2VrZXJuZnNfcndzZW0pO1xcbmZzL2tlcm5mcy9tb3VudC5jOjE2NjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoa2VybmZzX2dldF9pbm9kZShjaGlsZC1cXHUwMDNlZF9zYiwga2VybmZzX3BhcmVudChrbikpKTtcXG5mcy9rZXJuZnMvbW91bnQuYy0xNjctfVxcbi0tXFxuZnMvbGliZnMuYz0xNDg3PXN0cnVjdCBkZW50cnkgKmdlbmVyaWNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcXG4tLVxcbmZzL2xpYmZzLmMtMTUwMi1cXG5mcy9saWJmcy5jOjE1MDM6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9saWJmcy5jLTE1MDQtfVxcbi0tXFxuZnMvbGliZnMuYz0xNTIwPXN0cnVjdCBkZW50cnkgKmdlbmVyaWNfZmhfdG9fcGFyZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcXG4tLVxcbmZzL2xpYmZzLmMtMTUzNS1cXG5mcy9saWJmcy5jOjE1MzY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9saWJmcy5jLTE1MzctfVxcbi0tXFxuZnMvbmZzL2V4cG9ydC5jPTY0PW5mc19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxcbi0tXFxuZnMvbmZzL2V4cG9ydC5jLTExNS1vdXRfZm91bmQ6XFxuZnMvbmZzL2V4cG9ydC5jOjExNjpcXHRkZW50cnkgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvbmZzL2V4cG9ydC5jLTExNy1vdXRfZnJlZV9mYXR0cjpcXG4tLVxcbmZzL25mcy9leHBvcnQuYz0xMjQ9bmZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvbmZzL2V4cG9ydC5jLTE0OC1cXHRwaW5vZGUgPSBuZnNfZmhnZXQoc2IsIFxcdTAwMjZmaCwgZmF0dHIpO1xcbmZzL25mcy9leHBvcnQuYzoxNDk6XFx0cGFyZW50ID0gZF9vYnRhaW5fYWxpYXMocGlub2RlKTtcXG5mcy9uZnMvZXhwb3J0LmMtMTUwLW91dDpcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jPTQ2ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbmlsZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jLTQ3NS1cXG5mcy9uaWxmczIvbmFtZWkuYzo0NzY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKG5pbGZzX2lnZXQoY2hpbGQtXFx1MDAzZWRfc2IsIHJvb3QsIGlubykpO1xcbmZzL25pbGZzMi9uYW1laS5jLTQ3Ny19XFxuLS1cXG5mcy9uaWxmczIvbmFtZWkuYz00Nzk9c3RhdGljIHN0cnVjdCBkZW50cnkgKm5pbGZzX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGNubyxcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jLTUwMC1cXHR9XFxuZnMvbmlsZnMyL25hbWVpLmM6NTAxOlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvbmlsZnMyL25hbWVpLmMtNTAyLX1cXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xNTg5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGRfZGVudClcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xNjM2LVxcbmZzL250ZnMvbmFtZWkuYzoxNjM3OlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhudGZzX2lnZXQodmktXFx1MDAzZWlfc2IsIHBhcmVudF9pbm8pKTtcXG5mcy9udGZzL25hbWVpLmMtMTYzOC19XFxuLS1cXG5mcy9udGZzMy9uYW1laS5jPTM3OT1zdHJ1Y3QgZGVudHJ5ICpudGZzM19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvbnRmczMvbmFtZWkuYy0zOTMtXFxuZnMvbnRmczMvbmFtZWkuYzozOTQ6XFx0XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFxcbmZzL250ZnMzL25hbWVpLmMtMzk1LVxcdFxcdFxcdG50ZnNfaWdldDUoaW5vZGUtXFx1MDAzZWlfc2IsIFxcdTAwMjZmbmFtZS1cXHUwMDNlaG9tZSwgTlVMTCkpO1xcbi0tXFxuZnMvb2NmczIvZXhwb3J0LmM9MzQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL2V4cG9ydC5jLTEyMC1cXG5mcy9vY2ZzMi9leHBvcnQuYzoxMjE6XFx0cmVzdWx0ID0gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL29jZnMyL2V4cG9ydC5jLTEyMi1cXHRpZiAoSVNfRVJSKHJlc3VsdCkpXFxuLS1cXG5mcy9vY2ZzMi9leHBvcnQuYz0xMzA9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9vY2ZzMi9leHBvcnQuYy0xNzktXFxuZnMvb2NmczIvZXhwb3J0LmM6MTgwOlxcdHBhcmVudCA9IGRfb2J0YWluX2FsaWFzKG9jZnMyX2lnZXQoT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKSwgYmxrbm8sIDAsIDApKTtcXG5mcy9vY2ZzMi9leHBvcnQuYy0xODEtXFxuLS1cXG5mcy9vcmFuZ2Vmcy9zdXBlci5jPTMxND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb3JhbmdlZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vcmFuZ2Vmcy9zdXBlci5jLTMzMC1cXG5mcy9vcmFuZ2Vmcy9zdXBlci5jOjMzMTpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMob3JhbmdlZnNfaWdldChzYiwgXFx1MDAyNnJlZm4pKTtcXG5mcy9vcmFuZ2Vmcy9zdXBlci5jLTMzMi19XFxuLS1cXG5mcy9vdmVybGF5ZnMvZXhwb3J0LmM9Mjk0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvdmxfb2J0YWluX2FsaWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vdmVybGF5ZnMvZXhwb3J0LmMtMzMwLVxcbmZzL292ZXJsYXlmcy9leHBvcnQuYzozMzE6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9vdmVybGF5ZnMvZXhwb3J0LmMtMzMyLX1cXG4tLVxcbmZzL3NxdWFzaGZzL2V4cG9ydC5jPTY2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzcXVhc2hmc19leHBvcnRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvc3F1YXNoZnMvZXhwb3J0LmMtNzUtXFx0aWYgKGlubyBcXHUwMDNlPSAwKVxcbmZzL3NxdWFzaGZzL2V4cG9ydC5jOjc2OlxcdFxcdGRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKHNxdWFzaGZzX2lnZXQoc2IsIGlubywgaW5vX251bSkpO1xcbmZzL3NxdWFzaGZzL2V4cG9ydC5jLTc3LVxcbi0tXFxuZnMvdWRmL25hbWVpLmM9OTE1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZGZfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL3VkZi9uYW1laS5jLTkyNi1cXHR1ZGZfZmlpdGVyX3JlbGVhc2UoXFx1MDAyNml0ZXIpO1xcbmZzL3VkZi9uYW1laS5jOjkyNzpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXModWRmX2lnZXQoY2hpbGQtXFx1MDAzZWRfc2IsIFxcdTAwMjZ0bG9jKSk7XFxuZnMvdWRmL25hbWVpLmMtOTI4LX1cXG4tLVxcbmZzL3VkZi9uYW1laS5jPTkzMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdWRmX25mc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGJsb2NrLFxcbi0tXFxuZnMvdWRmL25hbWVpLmMtOTUwLVxcdH1cXG5mcy91ZGYvbmFtZWkuYzo5NTE6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy91ZGYvbmFtZWkuYy05NTItfVxcbi0tXFxuZnMvdWZzL3N1cGVyLmM9MTI5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTEzNS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG5mcy91ZnMvc3VwZXIuYzoxMzY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKHVmc19pZ2V0KGNoaWxkLVxcdTAwM2VkX3NiLCBpbm8pKTtcXG5mcy91ZnMvc3VwZXIuYy0xMzctfVxcbi0tXFxuZnMveGZzL3hmc19leHBvcnQuYz0xNzI9eGZzX2ZzX2ZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlkICpmaWQsXFxuLS1cXG5mcy94ZnMveGZzX2V4cG9ydC5jLTE5MS1cXG5mcy94ZnMveGZzX2V4cG9ydC5jOjE5MjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL3hmcy94ZnNfZXhwb3J0LmMtMTkzLX1cXG4tLVxcbmZzL3hmcy94ZnNfZXhwb3J0LmM9MTk2PXhmc19mc19maF90b19wYXJlbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxcbi0tXFxuZnMveGZzL3hmc19leHBvcnQuYy0yMTUtXFxuZnMveGZzL3hmc19leHBvcnQuYzoyMTY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy94ZnMveGZzX2V4cG9ydC5jLTIxNy19XFxuLS1cXG5mcy94ZnMveGZzX2V4cG9ydC5jPTIyMD14ZnNfZnNfZ2V0X3BhcmVudChcXG4tLVxcbmZzL3hmcy94ZnNfZXhwb3J0LmMtMjI5LVxcbmZzL3hmcy94ZnNfZXhwb3J0LmM6MjMwOlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhWRlNfSShjaXApKTtcXG5mcy94ZnMveGZzX2V4cG9ydC5jLTIzMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjMwLjU3NzkwMDE4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk5OTA3NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZGVudHJ5X3VubGlua19pbm9kZWAgRnVuY3Rpb24gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGZvciBgZGVudHJ5X3VubGlua19pbm9kZWAuIEZpcnN0LCBJIHJlbWVtYmVyIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gcmVzaWRpbmcgaW4gYGZzL2RjYWNoZS5jYC4gVGhhdCBtZWFucyB0aGUgc2NvcGUgaXMgbGlrZWx5IGxpbWl0ZWQgd2l0aGluIHRoYXQgZmlsZSwgd2hpY2ggbWFrZXMgdGhlIGh1bnQgcG90ZW50aWFsbHkgZWFzaWVyLiBOb3csIGxldCdzIHRyYWNlIHRoZSBjYWxsZXJzIHdpdGhpbiBgZnMvZGNhY2hlLmNgIGl0c2VsZi4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgaXQncyBiZWluZyBpbnZva2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjozMi40Nzc4MTA0NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTkwMDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZW50cnlfdW5saW5rX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz00NTk9c3RhdGljIGJvb2wgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTQ2Ny0gKi9cXG5mcy9kY2FjaGUuYzo0Njg6c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxcbmZzL2RjYWNoZS5jLTQ2OS1cXHRfX3JlbGVhc2VzKGRlbnRyeS1cXHUwMDNlZF9sb2NrKVxcbi0tXFxuZnMvZGNhY2hlLmM9ODEyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlfa2lsbChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9kY2FjaGUuYy04MzgtXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSlcXG5mcy9kY2FjaGUuYzo4Mzk6XFx0XFx0ZGVudHJ5X3VubGlua19pbm9kZShkZW50cnkpO1xcbmZzL2RjYWNoZS5jLTg0MC1cXHRlbHNlXFxuLS1cXG5mcy9kY2FjaGUuYz0yNzA4PXZvaWQgZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jLTI3MjAtXFx0XFx0ZGVudHJ5LVxcdTAwM2VkX2ZsYWdzIFxcdTAwMjY9IH5EQ0FDSEVfQ0FOVF9NT1VOVDtcXG5mcy9kY2FjaGUuYzoyNzIxOlxcdFxcdGRlbnRyeV91bmxpbmtfaW5vZGUoZGVudHJ5KTtcXG5mcy9kY2FjaGUuYy0yNzIyLVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9rZXJuZnMvZGlyLmM9MTIzND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqa2VybmZzX2lvcF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9rZXJuZnMvZGlyLmMtMTI2NS1cXHQgKiBUaGUgbmVnYXRpdmUgZGVudHJ5IGNhbiBiZSBjcmVhdGVkIGluIGtlcm5mc19pb3BfbG9va3VwKClcXG5mcy9rZXJuZnMvZGlyLmM6MTI2NjpcXHQgKiBvciB0cmFuc2Zvcm1zIGZyb20gcG9zaXRpdmUgZGVudHJ5IGluIGRlbnRyeV91bmxpbmtfaW5vZGUoKVxcbmZzL2tlcm5mcy9kaXIuYy0xMjY3LVxcdCAqIGNhbGxlZCBmcm9tIHZmc19ybWRpcigpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjozMi42MDk3MTY0MDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAwMTI0NDk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgZGNhY2hlLmMgU3ltYm9sIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZnMvZGNhY2hlLmNgIGNvZGUuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2Ugd2UncmUgbG9va2luZyBhdDogYGRlbnRyeV91bmxpbmtfaW5vZGVgIChzdGF0aWMpLCBgX19kX29idGFpbl9hbGlhc2AgKHN0YXRpYyksIGBkX29idGFpbl9hbGlhc2AgKGV4cG9ydGVkKSwgYGRfb2J0YWluX3Jvb3RgLCBgZF9kZWxldGVgIChjYWxscyBgZGVudHJ5X3VubGlua19pbm9kZWApLCBgZGVudHJ5X2tpbGxgIChzdGF0aWMsIGNhbGxlZCBieSBgZHB1dGApLCBhbmQgYGlub2RlX25vdGlmeV9kZWFkYCAoc3RhdGljIGhlbHBlcikuIFxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBDYW4gc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYSBgLmNgIGZpbGUgZXZlbiBiZSBpbmNsdWRlZCBhcyBzeW1ib2xzPyBBaCwgeWVzLCB0aGV5IHNob3VsZCBiZSwgdW5sZXNzIHRoZSBjb21waWxlciBpbmxpbmVzIHRoZW0sIHdoaWNoIGlzIHJhcmUgZm9yIGZ1bmN0aW9ucyB3aXRoIG1hbnkgY2FsbHMsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGluY2x1ZGUgYm90aCB0aGUgc3RhdGljIGZ1bmN0aW9uIGFuZCB0aGUgZXhwb3J0ZWQgZW50cnlwb2ludC4uIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB3aGljaCBvbmVzIGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBJdCBsb29rcyBsaWtlIGl0J3MgY29uZmlybWluZyB0aGF0IHdlJ3ZlIGdvdDogYGRfb2J0YWluX2FsaWFzYCwgYF9fZF9vYnRhaW5fYWxpYXNgLCBgZGVudHJ5X3VubGlua19pbm9kZWAsIGBkX2RlbGV0ZWAsIGFuZCBgZF9vYnRhaW5fcm9vdGAuXG5cbldhaXQgYSBtaW51dGUsIGFyZSB3ZSBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBsaWtlIGZpbGUgaGFuZGxlIHN5c2NhbGxzIG9yIGZzbm90aWZ5IGZ1bmN0aW9ucz8gT2ssIGxldCdzIHN0ZXAgYmFjaywgYW5kIGZvY3VzIG9uIHRoZSBrZXkgbW9kaWZpY2F0aW9ucy4gRnJvbSB0aGF0IGZpcnN0IGxpc3QsIHRoZSBjb3JlIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkIGFyZSBjbGVhcmx5IGBfX2Rfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX2FsaWFzYCwgYW5kIGBkZW50cnlfdW5saW5rX2lub2RlYC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gYGZzL2RjYWNoZS5jYCBpcyBjb21waWxlZCBkaXJlY3RseSBpbnRvIGB2bWxpbnV4YCDigJMgaXQncyBhIGNvcmUgZmlsZXN5c3RlbSBvYmplY3QsIGFzIGluZGljYXRlZCBieSB0aGUgYG9iai15ICs9IGRjYWNoZS5vYCBpbiB0aGUgYGZzL01ha2VmaWxlYC4gU28sIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGxpa2UgYENPTkZJR19GSEFORExFYCBvciBgQ09ORklHX0VYUE9SVEZTYCwgbmVlZGVkIHRvICpleGVyY2lzZSogYGRfb2J0YWluX2FsaWFzYCB0aHJvdWdoIHN5c2NhbGxzPyBJIGtub3cgdGhhdCBgb3Blbl9ieV9oYW5kbGVfYXRgIHJlcXVpcmVzIGBDT05GSUdfRkhBTkRMRWAuIEkgd2lsbCBoYXZlIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzOiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGZzL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcwNSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjozNy42MTA5NjM3NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDIyMjA4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZIQU5ETEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE3Nzk9Y29uZmlnIFNHRVRNQVNLX1NZU0NBTExcXG4tLVxcbmluaXQvS2NvbmZpZy0xNzg4LVxcbmluaXQvS2NvbmZpZzoxNzg5OmNvbmZpZyBGSEFORExFXFxuaW5pdC9LY29uZmlnLTE3OTAtXFx0Ym9vbCBcXFwib3BlbiBieSBmaGFuZGxlIHN5c2NhbGxzXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MzkuOTUzMTg5OTg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTg4MzY0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlF1aWNrIEF1ZGl0IG9mIEZTTk9USUZZIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgd2UgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGBGU05PVElGWWAuIFdlJ3ZlIGJlZW4gZm9jdXNpbmcgb24gWCBhbmQgWSwgYnV0IEkndmUgbGVhcm5lZCB0aGUgaGFyZCB3YXkgdGhhdCBvdmVybG9va2luZyBmaWxlc3lzdGVtIG5vdGlmaWNhdGlvbnMgY2FuIGJpdGUgeW91IGxhdGVyLiBJdCdzIGEgY2xhc3NpYyBnb3RjaGEuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgY3VycmVudCBzZXR1cCwgcGFydGljdWxhcmx5IGhvdyB3ZSdyZSBtb25pdG9yaW5nIHRoZSByZWxldmFudCBkaXJlY3RvcmllcyBhbmQgd2hhdCB0cmlnZ2VycyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpc27igJl0IGEgYm90dGxlbmVjayBvciwgY29udmVyc2VseSwgbGV0dGluZyBjcml0aWNhbCBldmVudHMgc2xpcCB0aHJvdWdoIHRoZSBjcmFja3MuIFRpbWUgZm9yIGEgcXVpY2sgYXVkaXQuIFdlIG5lZWQgdG8gY29uZmlybTogV2hhdCdzIHRoZSBwb2xsaW5nIGludGVydmFsPyBBcmUgd2UgdXNpbmcgcmVjdXJzaXZlIHdhdGNoZXM/IFdoYXQga2luZCBvZiBmaWx0ZXJzIGFyZSBpbiBwbGFjZT8gQXJlIHdlIGNvcnJlY3RseSBjb25maWd1cmVkIGZvciB0aGUgc2NhbGUgb2YgdGhpcyBwcm9qZWN0PyBNYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IHNldHRpbmdzIGNvdWxkIGJlIGEgbWFzc2l2ZSB0aW1lLXNhdmVyLCBzbyBhIHNtYWxsIGNoZWNrIG5vdyBjYW4gc2F2ZSBhIGxhcmdlIGNodW5rIG9mIHdvcmsgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjYwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6NDMuMDEyMDI4NThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTAyMDU0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTTk9USUZZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbm90aWZ5L0tjb25maWc6Mjpjb25maWcgRlNOT1RJRllcXG5mcy9ub3RpZnkvS2NvbmZpZy0zLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6NDUuNDIyMjQwNDI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MTI3ODI3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTm90aWZpY2F0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBgZnMvbm90aWZ5L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDEuIEknbSBwcm9iYWJseSBhZnRlciB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIG5vdGlmaWNhdGlvbiBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyBsaWtlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgdGhlIGtlcm5lbCBidWlsZCBsZXZlbCwgcGVyaGFwcyB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMgb24gb3RoZXIgZmVhdHVyZXMsIG9yIG1heWJlIGp1c3QgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgYnJvYWQgb3ZlcnZpZXcgb2YgdGhlIGV4cG9zZWQgY29udHJvbHMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIG1haW4gYGNvbmZpZ2Agc3ltYm9sIGZvciBgZnNub3RpZnlgLCBhbmQgdGhlbiBjaGVja2luZyB0aGUgcmVsYXRpb25zaGlwcyBhbmQgY29uZGl0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhhdC4gVGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjo0OS4zMzUwMjcxMzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyOTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9ub3RpZnkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEZTTk9USUZZXFxuICAgMzpcXHRcXHRkZWZfYm9vbCBuXFxuICAgNDpcXHRcXG4gICA1OlxcdHNvdXJjZSBcXFwiZnMvbm90aWZ5L2Rub3RpZnkvS2NvbmZpZ1xcXCJcXG4gICA2OlxcdHNvdXJjZSBcXFwiZnMvbm90aWZ5L2lub3RpZnkvS2NvbmZpZ1xcXCJcXG4gICA3OlxcdHNvdXJjZSBcXFwiZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjQ5LjMzNzE2MTA1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjIxNjIwMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBmc25vdGlmeV9pbm9kZXJlbW92ZWAgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBmc25vdGlmeV9pbm9kZXJlbW92ZWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBoZWFkZXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZnMvbm90aWZ5YCBzdWJzeXN0ZW0uIEknbSBnb2luZyB0byBjaGVjayBgZnMvbm90aWZ5L2Zzbm90aWZ5LmhgIGFzIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGhlYWRlciBwcm9iYWJseSBpbmNsdWRlcyB0aGUgZGVjbGFyYXRpb25zIGZvciB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gbm90aWZpY2F0aW9uIGV2ZW50cy4gSG9wZWZ1bGx5LCBpdCdzIGRlZmluZWQgdGhlcmUsIG9yIGl0IHdpbGwgcG9pbnQgbWUgdG93YXJkcyB0aGUgZmlsZSB0aGF0IGRvZXMgZGVmaW5lIGl0LiBJZiBub3QsIEknbGwgbmVlZCB0byBicm9hZGVuIG15IHNlYXJjaCwgYnV0IHRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGluaXRpYWwgbG9jYXRpb24uIEknbSBhc3N1bWluZyBhIGZhaXJseSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgc3RydWN0dXJlIGhlcmUsIG9mIGNvdXJzZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mjc2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjo1MS45NTg3ODQ2NTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjM5NDMyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNub3RpZnlfaW5vZGVyZW1vdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGNhY2hlLmM9NDY4PXN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jLTQ4Ny1cXHRpZiAobm90aWZ5X2RlYWQpXFxuZnMvZGNhY2hlLmM6NDg4OlxcdFxcdGZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKTtcXG5mcy9kY2FjaGUuYy00ODktXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9vcCBcXHUwMDI2XFx1MDAyNiBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaXB1dClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNub3RpZnkuaD0zMDI9c3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X21udG5zX2RlbGV0ZShzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbW50bnMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgtMzA3LS8qXFxuaW5jbHVkZS9saW51eC9mc25vdGlmeS5oOjMwODogKiBmc25vdGlmeV9pbm9kZXJlbW92ZSAtIGFuIGlub2RlIGlzIGdvaW5nIGF3YXlcXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgtMzA5LSAqL1xcbmluY2x1ZGUvbGludXgvZnNub3RpZnkuaDozMTA6c3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2lub2RlcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuaW5jbHVkZS9saW51eC9mc25vdGlmeS5oLTMxMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjU0LjMyMjczMzI2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODcwNjQ4NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ29uZmlndXJhdGlvbiBSYXRpb25hbGUqKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhpcyBmdXp6aW5nIHNldHVwLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkLiBMZXQncyBzdGFydCBieSB2ZXJpZnlpbmcgdGhhdCBgRlNOT1RJRllgIGlzIHNlbGVjdGVkIGJ5IGBJTk9USUZZX1VTRVJgIGFuZCBgRkFOT1RJRllgLCBhbmQgeWVzLCB0aGUgS2NvbmZpZyBmaWxlcyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVuLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIG90aGVyIGNvcmUgY29uZmlncyBhcmUgcmVsZXZhbnQgYW5kIGluIHRoaXMgY2FzZSwgYEZIQU5ETEVgLCBgRlNOT1RJRllgLCBgSU5PVElGWV9VU0VSYCwgYW5kIGBGQU5PVElGWWAgYXJlIHRoZSBvbmVzIHdlJ3JlIHRhcmdldGluZy5cblxuTm93LCBmb3IgdGhlIGNyaXRpY2FsIHBhcnQ6IHRoZSBmdXp6aW5nIHN5bWJvbHMuIEkndmUgZ290IHRvIGJlIHNtYXJ0IGFib3V0IHRoaXMgYW5kIHNlbGVjdCBmdW5jdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgZW5vdWdoIHRvIGJlIHRhcmdldGVkIGJ1dCBub3Qgc28gdWJpcXVpdG91cyB0aGF0IHRoZXkgb3ZlcndoZWxtIHRoZSBmdXp6ZXIuIE15IGluaXRpYWwgY2FuZGlkYXRlcyBhcmU6IGBfX2Rfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX3Jvb3RgLCBhbmQgYGRlbnRyeV91bmxpbmtfaW5vZGVgLiBBcmUgdGhleSBnb29kIGNob2ljZXM/IGBkX29idGFpbl9hbGlhc2AgYW5kIGBfX2Rfb2J0YWluX2FsaWFzYCBhcmUgdXNlZCBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3Vwcywgd2hpY2ggaXMgcHJvbWlzaW5nLiBgZGVudHJ5X3VubGlua19pbm9kZWAgaXMgbGlua2VkIHRvIHVubGlua2luZy9kZWxldGluZywgYW5kIHRoaXMgaXMgd2hhdCB3ZSdyZSB0YXJnZXRpbmcuIFllcywgdGhlc2UgbG9vayBsaWtlIGdvb2QgdGFyZ2V0cy5cblxuTmV4dCwgSSdsbCByZXZpc2l0IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcmVmYWN0b3Jpbmcgd29yayBhcm91bmQgaGFuZGxpbmcgdW5saW5rZWQgaW5vZGVzIGFuZCBmc25vdGlmeSBldmVudHMgZml0cyB0aGUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgVkZTIGNvcmUgbG9naWMuIExvb2tzIGdvb2Q7IHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBvbiBmaWxlIGhhbmRsZSBsb29rdXAgYW5kIGVuc3VyaW5nIGBmc25vdGlmeWAgZXZlbnRzIGFyZSBjb3JyZWN0LiBTbywgeWVzLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuXG5cbkZpbmFsbHksIGxldCdzIHdyYXAgdGhpcyB1cCB3aXRoIGEgZmluYWwgY2hlY2sgb2YgYWxsIGlucHV0czpcbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgbG9naWMgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gcmV2aXZpbmcgZGVhZCBpbm9kZXMgYW5kIGVuc3VyZXMgY29ycmVjdCBgZnNub3RpZnlgIGV2ZW50cy4gV2Ugd2FudCB0byBmdXp6IGZpbGUgaGFuZGxlIGxvb2t1cHMgYW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJGSEFORExFXCIsIFwiRlNOT1RJRllcIiwgXCJJTk9USUZZX1VTRVJcIiwgXCJGQU5PVElGWVwiXWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIl9fZF9vYnRhaW5fYWxpYXNcIiwgXCJkX29idGFpbl9hbGlhc1wiLCBcImRfb2J0YWluX3Jvb3RcIiwgXCJkZW50cnlfdW5saW5rX2lub2RlXCJdYFxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2Ugc2hvdWxkIGJlIGFsbCBzZXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzY0LCJPdXRwdXRUb2tlbnMiOjE4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMzowMC4xOTMzODUxMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5NTM5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZIQU5ETEVcIixcbiAgICBcIkZTTk9USUZZXCIsXG4gICAgXCJJTk9USUZZX1VTRVJcIixcbiAgICBcIkZBTk9USUZZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kX29idGFpbl9hbGlhc1wiLFxuICAgIFwiZF9vYnRhaW5fYWxpYXNcIixcbiAgICBcImRfb2J0YWluX3Jvb3RcIixcbiAgICBcImRlbnRyeV91bmxpbmtfaW5vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgbG9naWMgaW4gZnMvZGNhY2hlLmMgKF9fZF9vYnRhaW5fYWxpYXMsIGRlbnRyeV91bmxpbmtfaW5vZGUpIHRvIHByZXZlbnQgZmlsZSBoYW5kbGUgbG9va3VwcyBmcm9tIGNyZWF0aW5nIGFsaWFzZXMgZm9yIGRlYWQgdW5saW5rZWQgaW5vZGVzIGFuZCB0byBhY2N1cmF0ZWx5IG5vdGlmeSBmc25vdGlmeSB3aGVuIHVubGlua2VkIGlub2RlcyBoYXZlIG5vIHJlbWFpbmluZyBhbGlhc2VzLiBGdXp6aW5nIHdpdGggZmlsZSBoYW5kbGUgc3lzY2FsbHMgKG9wZW5fYnlfaGFuZGxlX2F0KSBhbmQgY29uY3VycmVudCB1bmxpbmsvZXhwb3J0ZnMgb3BlcmF0aW9ucyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgc3RhdGUgdHJhbnNpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkhBTkRMRVwiLFxuICAgIFwiRlNOT1RJRllcIixcbiAgICBcIklOT1RJRllfVVNFUlwiLFxuICAgIFwiRkFOT1RJRllcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Rfb2J0YWluX2FsaWFzXCIsXG4gICAgXCJkX29idGFpbl9hbGlhc1wiLFxuICAgIFwiZF9vYnRhaW5fcm9vdFwiLFxuICAgIFwiZGVudHJ5X3VubGlua19pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBsb2dpYyBpbiBmcy9kY2FjaGUuYyAoX19kX29idGFpbl9hbGlhcywgZGVudHJ5X3VubGlua19pbm9kZSkgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gY3JlYXRpbmcgYWxpYXNlcyBmb3IgZGVhZCB1bmxpbmtlZCBpbm9kZXMgYW5kIHRvIGFjY3VyYXRlbHkgbm90aWZ5IGZzbm90aWZ5IHdoZW4gdW5saW5rZWQgaW5vZGVzIGhhdmUgbm8gcmVtYWluaW5nIGFsaWFzZXMuIEZ1enppbmcgd2l0aCBmaWxlIGhhbmRsZSBzeXNjYWxscyAob3Blbl9ieV9oYW5kbGVfYXQpIGFuZCBjb25jdXJyZW50IHVubGluay9leHBvcnRmcyBvcGVyYXRpb25zIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBzdGF0ZSB0cmFuc2l0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTM6MDAuMzE2MzUxODkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ3MTc1NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEzOjAwLjMxNjg0NzQ3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNDcxMjUzMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbm9kZSBhbGlhcyBsb29rdXAgYW5kIGRlbnRyeSB1bmxpbmtpbmcgbG9naWMgaW4gZnMvZGNhY2hlLmMgdG8gcHJldmVudCByZXZpdmluZyBkZWFkL3VubGlua2VkIGlub2RlcyBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3VwcyAod2hpY2ggaW50ZXJmZXJlcyB3aXRoIGZzbm90aWZ5KS4gVGhlIGNoYW5nZXMgb25seSB0b3VjaCBzdGFuZGFyZCBpbm9kZSBmaWVsZHMgKGlfbmxpbmssIGlfZGVudHJ5KSBhbmQgdXNlIGEgbG9jYWxseSBhc3NpZ25lZCBib29sZWFuIHZhcmlhYmxlIChub3RpZnlfZGVhZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gc2VtYW50aWNzLCBpbm9kZSBsaWZlY3ljbGVzLCBvciBsb2NraW5nLCB3aGljaCBmYWxsIHVuZGVyIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGRiMDcxZDE4YjgzNWJhMjYwYjY3NDlhODJjMzljNWQ2YmYwNTI3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6MTI6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jXG5pbmRleCAxYjFhODFmMTBkYTY3Li44ZjE3ZGIyNzI0YjM4IDEwMDY0NFxuLS0tIGEvZnMvZGNhY2hlLmNcbisrKyBiL2ZzL2RjYWNoZS5jXG5AQCAtNDUwLDYgKzQ1MCwxNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRcdGNhbGxfcmN1KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3JjdSwgX19kX2ZyZWUpO1xuIH1cbiBcbisvKlxuKyAqIElmIGlub2RlIGlzIHVubGlua2VkIGFuZCBkb2Vzbid0IGhhdmUgYW55IGFsaWFzZXMgKGkuZS4sIGFsbCBmZHMgcG9pbnRpbmcgdG9cbisgKiBpdCBhcmUgY2xvc2VkKSwgaXQgaXMgcHJldHR5IG11Y2ggZGVhZC4gRXhjZXB0IHRoYXQgZmlsZSBoYW5kbGUgbG9va3VwIGNvdWxkXG4rICogc3RpbGwgcmV2aXZlIGl0IHdoaWNoIGNhdXNlcyBpc3N1ZXMgdG8gZnNub3RpZnkuIFNvIG9uY2UgaW5vZGUgcmVhY2hlcyB0aGlzXG4rICogc3RhdGUgd2UgbWFrZSBzdXJlIHRvIGJsb2NrIGNyZWF0aW5nIGFueSBuZXcgYWxpYXNlcy5cbisgKi9cbitzdGF0aWMgYm9vbCBpbm9kZV9ub3RpZnlfZGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiAhaW5vZGUtXHUwMDNlaV9ubGluayBcdTAwMjZcdTAwMjYgaGxpc3RfZW1wdHkoXHUwMDI2aW5vZGUtXHUwMDNlaV9kZW50cnkpO1xuK31cbitcbiAvKlxuICAqIFJlbGVhc2UgdGhlIGRlbnRyeSdzIGlub2RlLCB1c2luZyB0aGUgZmlsZXN5c3RlbVxuICAqIGRfaXB1dCgpIG9wZXJhdGlvbiBpZiBkZWZpbmVkLlxuQEAgLTQ1OSw2ICs0NzAsNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfdW5saW5rX2lub2RlKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpXG4gXHRfX3JlbGVhc2VzKGRlbnRyeS1cdTAwM2VkX2lub2RlLVx1MDAzZWlfbG9jaylcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4rXHRib29sIG5vdGlmeV9kZWFkO1xuIFxuIFx0cmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4gXHRfX2RfY2xlYXJfdHlwZV9hbmRfaW5vZGUoZGVudHJ5KTtcbkBAIC00NjksOSArNDgxLDEwIEBAIHN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSlcbiBcdCAqL1xuIFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuIFx0cmF3X3dyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuK1x0bm90aWZ5X2RlYWQgPSBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspXG4rXHRpZiAobm90aWZ5X2RlYWQpXG4gXHRcdGZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKTtcbiBcdGlmIChkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pcHV0KVxuIFx0XHRkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2lwdXQoZGVudHJ5LCBpbm9kZSk7XG5AQCAtMjIzNyw3ICsyMjUwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuIFxuIFx0c2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFxuLVx0cmVzID0gZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7IC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSlcbitcdFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcdC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xuK1x0ZWxzZVxuK1x0XHRyZXMgPSBFUlJfUFRSKC1FU1RBTEUpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTIyNDksNyArMjI2NywxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcbiBcbiBcdHNlY3VyaXR5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7XG4gXHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi1cdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7IC8qIHJlY2hlY2sgdW5kZXIgbG9jayAqL1xuK1x0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4rXHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi9cbitcdGVsc2VcbitcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbiBcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cbiBcdFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTM6MDAuMzE2ODQ4NDQxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyODU3NjIwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCB0byBgZnMvZGNhY2hlLmNgLiBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBhbmQgaWYgaXQgZG9lcywgd2hhdCB0aGUgYXR0YWNrIHN1cmZhY2UgbG9va3MgbGlrZS5cblxuRmlyc3QsIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlgLiBMb29rcyBsaWtlIGEgc2ltcGxlIGNoZWNrOiBpcyB0aGUgaW5vZGUncyBsaW5rIGNvdW50IHplcm8gYW5kIGlzIGl0cyBkZW50cnkgbGlzdCBlbXB0eT8gVGhhdCBzb3VuZHMgbGlrZSB0aGUgaW5vZGUgaXMgdHJ1bHkgZGVhZCwgb3IgYXQgbGVhc3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBuYW1lc3BhY2UuXG5cbk5leHQsIGNoYW5nZXMgaW4gYGRlbnRyeV91bmxpbmtfaW5vZGVgLiBUaGUgY29kZSBub3cgdXNlcyB0aGUgYGlub2RlX25vdGlmeV9kZWFkYCByZXR1cm4gdmFsdWUgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gY2FsbCBgZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpYC4gVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbjsgcmF0aGVyIHRoYW4gcmUtY2hlY2tpbmcgdGhlIGxpbmsgY291bnQgYWZ0ZXIgcmVsZWFzaW5nIGxvY2tzLCBpdCdzIG5vdyByZXVzaW5nIHRoZSByZXN1bHQgb2YgYGlub2RlX25vdGlmeV9kZWFkYC4gQ2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQuXG5cblRoZSByZWFsbHkgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgaGFwcGVuaW5nIGluIGBfX2Rfb2J0YWluX2FsaWFzYC4gVGhpcyBpcyB3aGVyZSB0aGUgcGF0Y2ggZ2V0cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgX19kX29idGFpbl9hbGlhc2AgaXMgZ2V0dGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIGJhc2VkIG9uIGBpbm9kZV9ub3RpZnlfZGVhZGAuIFRoZSBpbnRlbnRpb24gaGVyZSBzZWVtcyB0byBiZSB0aGF0IGlmIHRoZSBpbm9kZSBpcyBcImRlYWQsXCIgZG9uJ3QgYm90aGVyIHRyeWluZyB0byBmaW5kIGFuIGV4aXN0aW5nIGFsaWFzLCBiZWNhdXNlIGl0IHdvdWxkbid0IGJlIHZhbGlkLCBhbmQganVzdCBzaG9ydC1jaXJjdWl0IHdpdGggYEVSUl9QVFIoLUVTVEFMRSlgLiBJdCdzIGRvaW5nIHRoaXMgKnVuZGVyIGEgbG9jayouIFRoYXQncyB0aGUgaW1wb3J0YW50IHBpZWNlIGhlcmUuIExvY2tpbmcgaXMgaW52b2x2ZWQuXG5cblNvLCBpbiB0aGUgZmlyc3QgY2FzZSwgYmVmb3JlIGF0dGVtcHRpbmcgdG8gZmluZCBhbiBhbGlhcywgdGhlIGNvZGUgbG9ja3MgdGhlIGlub2RlLCBhbmQgY2hlY2tzIGlmIGl0J3MgZGVhZCwgaWYgaXQgaXMsIGBfX2RfZmluZF9hbnlfYWxpYXNgIGlzIHNraXBwZWQuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gdGhlIHJlY2hlY2sgdW5kZXIgbG9jay4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gcHJvdGVjdGlvbiBtZWNoYW5pc20uIEFuIGlub2RlIG1pZ2h0IGJlIGNvbmN1cnJlbnRseSB1bmxpbmtlZCB3aGlsZSBhIG5ldyBhbGlhcyBpcyBiZWluZyBjcmVhdGVkLlxuXG5MZXQgbWUgdXNlIG15IGByZWFkLWZpbGVgIHRvb2wgdG8gcXVpY2tseSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGBfX2Rfb2J0YWluX2FsaWFzYCB3aXRoaW4gdGhlIGBmcy9kY2FjaGUuY2AgY29udGV4dC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNoYW5nZS4gU3BlY2lmaWNhbGx5LCB3aGF0J3MgY2FsbGluZyBgX19kX29idGFpbl9hbGlhc2AsIGFuZCB3aGF0IGFyZSB0aGUgY2FsbGVyJ3MgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBpbm9kZSBhbmQgZGVudHJ5PyBXaGF0IGNvdWxkIGhhcHBlbiBpZiBpdCB0cmllZCB0byBvYnRhaW4gYW4gYWxpYXMgZm9yIHNvbWV0aGluZyBhbHJlYWR5IGJlaW5nIHVubGlua2VkP1xuXG5Pa2F5LCB0aGUgZ2VuZXJhbCBwaWN0dXJlIGlzIHRoYXQgdGhpcyBpcyBoYW5kbGluZyB0aGUgY3JlYXRpb24gb3IgcmUtZXN0YWJsaXNobWVudCBvZiBkZW50cmllcyByZWxhdGVkIHRvIGlub2Rlcywgd2hpY2ggaXMgcmlnaHQgaW4gdGhlIHdoZWVsaG91c2UgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEdpdmVuIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCB1bmxpbmtpbmcsIGFsaWFzaW5nLCBhbmQgbG9ja2luZywgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzICpwb3RlbnRpYWwqIHRpbWluZyB3aW5kb3dzIHdoZXJlIGFuIGlub2RlJ3Mgc3RhdGUgY291bGQgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LiBUaGUgYWRkZWQgY2hlY2sgdXNpbmcgYGlub2RlX25vdGlmeV9kZWFkYCBpcyBhIGdvb2QgYXR0ZW1wdCBhdCBwcm90ZWN0aW9uLCBidXQgSSBoYXZlIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgZWRnZSBjYXNlcyB3aGVyZSBhbiBpbm9kZSBjb3VsZCB0cmFuc2l0aW9uIGludG8gYSBcImRlYWRcIiBzdGF0ZSAqZHVyaW5nKiB0aGUgb3BlcmF0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBsb2NraW5nIGlzIGNvcnJlY3RseSBwcm90ZWN0aW5nIGFnYWluc3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zLCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IHRoZSBpbm9kZSdzIGxpZmVjeWNsZS4gQSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gY291bGQgYmUgdmVyeSB2YWx1YWJsZSBmb3IgZmluZGluZyByYWNlcywgVUFGcywgb3IgZG91YmxlLWZyZWVzIHJlbGF0ZWQgdG8gdGhlc2UgdHJhbnNpdGlvbnMuIFllcywgbGV0J3MgZG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMzowOS42MDI2MTM3NTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzA6XFx0XFx0aWYgKHJvb3RfaW5vZGUpIHtcXG4yMjMxOlxcdFxcdFxcdHJlcyA9IGRfYWxsb2NfYW5vbihyb290X2lub2RlLVxcdTAwM2VpX3NiKTtcXG4yMjMyOlxcdFxcdFxcdGlmIChyZXMpXFxuMjIzMzpcXHRcXHRcXHRcXHRkX2luc3RhbnRpYXRlKHJlcywgcm9vdF9pbm9kZSk7XFxuMjIzNDpcXHRcXHRcXHRlbHNlXFxuMjIzNTpcXHRcXHRcXHRcXHRpcHV0KHJvb3RfaW5vZGUpO1xcbjIyMzY6XFx0XFx0fVxcbjIyMzc6XFx0XFx0cmV0dXJuIHJlcztcXG4yMjM4OlxcdH1cXG4yMjM5OlxcdEVYUE9SVF9TWU1CT0woZF9tYWtlX3Jvb3QpO1xcbjIyNDA6XFx0XFxuMjI0MTpcXHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcXG4yMjQyOlxcdHtcXG4yMjQzOlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuMjI0NDpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpuZXcsICpyZXM7XFxuMjI0NTpcXHRcXG4yMjQ2OlxcdFxcdGlmICghaW5vZGUpXFxuMjI0NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTtcXG4yMjQ4OlxcdFxcdGlmIChJU19FUlIoaW5vZGUpKVxcbjIyNDk6XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGlub2RlKTtcXG4yMjUwOlxcdFxcbjIyNTE6XFx0XFx0c2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4yMjUyOlxcdFxcbjIyNTM6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMjU0OlxcdFxcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxcbjIyNTU6XFx0XFx0XFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcXHQvKiBleGlzdGluZyBhbGlhcz8gKi9cXG4yMjU2OlxcdFxcdGVsc2VcXG4yMjU3OlxcdFxcdFxcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XFxuMjI1ODpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuMjI1OTpcXHRcXHRpZiAocmVzKVxcbjIyNjA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI2MTpcXHRcXG4yMjYyOlxcdFxcdG5ldyA9IGRfYWxsb2NfYW5vbihzYik7XFxuMjI2MzpcXHRcXHRpZiAoIW5ldykge1xcbjIyNjQ6XFx0XFx0XFx0cmVzID0gRVJSX1BUUigtRU5PTUVNKTtcXG4yMjY1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIyNjY6XFx0XFx0fVxcbjIyNjc6XFx0XFxuMjI2ODpcXHRcXHRzZWN1cml0eV9kX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpO1xcbjIyNjk6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMjcwOlxcdFxcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxcbjIyNzE6XFx0XFx0XFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcXHQvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi9cXG4yMjcyOlxcdFxcdGVsc2VcXG4yMjczOlxcdFxcdFxcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XFxuMjI3NDpcXHRcXHRpZiAobGlrZWx5KCFyZXMpKSB7IC8qIHN0aWxsIG5vIGFsaWFzLCBhdHRhY2ggYSBkaXNjb25uZWN0ZWQgZGVudHJ5ICovXFxuMjI3NTpcXHRcXHRcXHR1bnNpZ25lZCBhZGRfZmxhZ3MgPSBkX2ZsYWdzX2Zvcl9pbm9kZShpbm9kZSk7XFxuMjI3NjpcXHRcXG4yMjc3OlxcdFxcdFxcdGlmIChkaXNjb25uZWN0ZWQpXFxuMjI3ODpcXHRcXHRcXHRcXHRhZGRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDtcXG4yMjc5OlxcdFxcbjIyODA6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZuZXctXFx1MDAzZWRfbG9jayk7XFxuMjI4MTpcXHRcXHRcXHRfX2Rfc2V0X2lub2RlX2FuZF90eXBlKG5ldywgaW5vZGUsIGFkZF9mbGFncyk7XFxuMjI4MjpcXHRcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2bmV3LVxcdTAwM2VkX2FsaWFzLCBcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGVudHJ5KTtcXG4yMjgzOlxcdFxcdFxcdGlmICghZGlzY29ubmVjdGVkKSB7XFxuMjI4NDpcXHRcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX3Jvb3RzX2xvY2spO1xcbjIyODU6XFx0XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNm5ldy1cXHUwMDNlZF9zaWIsIFxcdTAwMjZzYi1cXHUwMDNlc19yb290cyk7XFxuMjI4NjpcXHRcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfcm9vdHNfbG9jayk7XFxuMjI4NzpcXHRcXHRcXHR9XFxuMjI4ODpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV3LVxcdTAwM2VkX2xvY2spO1xcbjIyODk6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMzowOS42MDI4NDE0OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwMjQ0MDkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgX19kX29idGFpbl9hbGlhc2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZF9vYnRhaW5fYWxpYXNgLiBcIkxldCdzIHNlZSB0aGUgcmVzdFwiIGltcGxpZXMgSSd2ZSBhbHJlYWR5IGVuZ2FnZWQgd2l0aCAqcGFydCogb2YgdGhpcyBmdW5jdGlvbiBvciBtZXRob2QgYW5kIG5vdyBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbXBsZXRlIG1lY2hhbmljcy4gSSdtIGxpa2VseSBkZWJ1Z2dpbmcsIHJldmlld2luZyBjb2RlLCBvciB0cnlpbmcgdG8gZ3Jhc3AgaXRzIG92ZXJhbGwgcm9sZSB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBNeSBtZW50YWwgZ2VhcnMgYXJlIHByb2JhYmx5IGFscmVhZHkgdHVybmluZywgY29uc2lkZXJpbmcgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgcmVtYWluaW5nIHBhcnRzIG9mIHRoaXMgZnVuY3Rpb24uIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29udHJvbCBmbG93LCBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMsIGludGVyYWN0aW9ucyB3aXRoIGV4dGVybmFsIGRhdGEgb3Igc2VydmljZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgYWxpYXMgc2NlbmFyaW9zLiBUaGUgXCJyZXN0XCIgY291bGQgZW5jb21wYXNzIHZhcmlvdXMgdGhpbmdzOiBkYXRhIHJldHJpZXZhbCBmcm9tIGEgZGF0YWJhc2UsIGZpbGUgcGFyc2luZywgQVBJIGNhbGxzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtb2R1bGVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBsb2dpYyBkZXRlcm1pbmluZyAqaG93KiB0aGUgYWxpYXMgaXMgcmVzb2x2ZWQgYW5kIG1hbmFnZWQuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIGxvb2t1cCwgYSBjb21wbGV4IGFsZ29yaXRobSBpbnZvbHZpbmcgbXVsdGlwbGUgdGFibGVzIG9yIHNvdXJjZXMsIG9yIGV2ZW4gc29tZXRoaW5nIGR5bmFtaWNhbGx5IGdlbmVyYXRlZC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbidzIHB1cnBvc2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMzoxMi4wMDUyODU3NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyOTA6XFx0XFx0XFx0aW5vZGUgPSBOVUxMOyAvKiBjb25zdW1lZCBieSBuZXctXFx1MDAzZWRfaW5vZGUgKi9cXG4yMjkxOlxcdFxcdFxcdHJlcyA9IG5ldztcXG4yMjkyOlxcdFxcdH0gZWxzZSB7XFxuMjI5MzpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuMjI5NDpcXHRcXHRcXHRkcHV0KG5ldyk7XFxuMjI5NTpcXHRcXHR9XFxuMjI5NjpcXHRcXG4yMjk3OlxcdCBvdXQ6XFxuMjI5ODpcXHRcXHRpcHV0KGlub2RlKTtcXG4yMjk5OlxcdFxcdHJldHVybiByZXM7XFxuMjMwMDpcXHR9XFxuMjMwMTpcXHRcXG4yMzAyOlxcdC8qKlxcbjIzMDM6XFx0ICogZF9vYnRhaW5fYWxpYXMgLSBmaW5kIG9yIGFsbG9jYXRlIGEgRElTQ09OTkVDVEVEIGRlbnRyeSBmb3IgYSBnaXZlbiBpbm9kZVxcbjIzMDQ6XFx0ICogQGlub2RlOiBpbm9kZSB0byBhbGxvY2F0ZSB0aGUgZGVudHJ5IGZvclxcbjIzMDU6XFx0ICpcXG4yMzA2OlxcdCAqIE9idGFpbiBhIGRlbnRyeSBmb3IgYW4gaW5vZGUgcmVzdWx0aW5nIGZyb20gTkZTIGZpbGVoYW5kbGUgY29udmVyc2lvbiBvclxcbjIzMDc6XFx0ICogc2ltaWxhciBvcGVuIGJ5IGhhbmRsZSBvcGVyYXRpb25zLiAgVGhlIHJldHVybmVkIGRlbnRyeSBtYXkgYmUgYW5vbnltb3VzLFxcbjIzMDg6XFx0ICogb3IgbWF5IGhhdmUgYSBmdWxsIG5hbWUgKGlmIHRoZSBpbm9kZSB3YXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUpLlxcbjIzMDk6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTM6MTIuMDA1NTAzNzc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk3ODI1MTIyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBLTVNBTiBjaGVjay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIEl0IHNlZW1zIGxpa2Ugd2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIGFyb3VuZCBpbm9kZSB1bmxpbmtpbmcgYW5kIGFsaWFzIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaW4gYGRlbnRyeV91bmxpbmtfaW5vZGVgIGFuZCBgX19kX29idGFpbl9hbGlhc2AuIEluIGBkZW50cnlfdW5saW5rX2lub2RlYCwgdGhlIGNvZGUgY2FsbHMgYGZzbm90aWZ5X2lub2RlcmVtb3ZlYCBvbmx5IGlmIHRoZSBpbm9kZSBpcyBcImRlYWQsXCIgZGVmaW5lZCBhcyBoYXZpbmcgemVybyBsaW5rcyBhbmQgYW4gZW1wdHkgZGVudHJ5IGxpc3QgKHdoaWNoIGlzIGNoZWNrZWQgd2l0aCBgaW5vZGVfbm90aWZ5X2RlYWRgKS4gU2ltaWxhcmx5LCBgX19kX29idGFpbl9hbGlhc2AgY2hlY2tzIGlmIHRoZSBpbm9kZSBpcyBkZWFkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGZpbmQgb3IgY3JlYXRlIGFuIGFsaWFzLCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgaXQgaXMuXG5cbk5vdywgbGV0J3MgbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMuIE15IGNvbmNlcm4gaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBlc3BlY2lhbGx5IGluIGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBvciBpbiBjb25kaXRpb25hbCBsb2dpYyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGNvdWxkIGNvbnRyb2wgYnJhbmNoaW5nLlxuXG5GaXJzdCwgSSBub3RlIHRoZSB1c2Ugb2YgYSBsb2NhbCBzdGFjayB2YXJpYWJsZSwgYGJvb2wgbm90aWZ5X2RlYWQ7YCwgaW4gYGRlbnRyeV91bmxpbmtfaW5vZGVgLiBIb3dldmVyLCBpdCdzIGltbWVkaWF0ZWx5IGFzc2lnbmVkIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpYC4gU2luY2UgYGlub2RlX25vdGlmeV9kZWFkYCBvbmx5IGFjY2Vzc2VzIHRoZSBzdGFuZGFyZCBpbm9kZSBmaWVsZHMgYGlfbmxpbmtgIGFuZCBgaV9kZW50cnlgLCB0aGlzIGxvb2tzIHNhZmUuIEluIGBfX2Rfb2J0YWluX2FsaWFzYCwgdGhlIHJldHVybiB2YWx1ZSBgcmVzYCBpcyBjb25kaXRpb25hbGx5IGFzc2lnbmVkIGJhc2VkIG9uIHRoZSByZXN1bHQgb2YgYF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSlgIG9yIGFuIGVycm9yIHZhbHVlLlxuXG5UaGVyZWZvcmUsIHRoaXMgYW5hbHlzaXMgZG9lc24ndCBpbmRpY2F0ZSBhbnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBtZW1vcnkgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzLiBJJ20gbm90IHNlZWluZyBhbnkgbmV3IHN0cnVjdHMgb3IgY2FsbHMgdG8gYGNvcHlfdG9fdXNlcmAuIEknbSBnb2luZyB0byBsZWFuIHRvd2FyZHMgbm8gaXNzdWVzIGhlcmUsIGJ1dCBsb2dpYy9sb2NraW5nL2xpZmV0aW1lIGJ1Z3Mgc3VjaCBhcyByZWZjb3VudGluZyBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgZXJyb3JzIGFyZSBzdGlsbCBhIHBvc3NpYmlsaXR5LiBUaGVzZSBhcmUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuTGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIGFnYWluIGp1c3QgdG8gYmUgY2VydGFpbjpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZD8gTm8sIG5vdGhpbmcgaGVyZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLCB0aGUgYnJhbmNoIGRlcGVuZHMgb24gYW4gaW1tZWRpYXRlbHkgYXNzaWduZWQgYm9vbGVhbiByZXR1cm4gdmFsdWUgYW5kIHN0YW5kYXJkIGlub2RlIGZpZWxkcy5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vLlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gTm93LCB0aW1lIHRvIGFzc2VtYmxlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE1LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEzOjIxLjc4ODAyNjcyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbm9kZSBhbGlhcyBsb29rdXAgYW5kIGRlbnRyeSB1bmxpbmtpbmcgbG9naWMgaW4gZnMvZGNhY2hlLmMgdG8gcHJldmVudCByZXZpdmluZyBkZWFkL3VubGlua2VkIGlub2RlcyBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3VwcyAod2hpY2ggaW50ZXJmZXJlcyB3aXRoIGZzbm90aWZ5KS4gVGhlIGNoYW5nZXMgb25seSB0b3VjaCBzdGFuZGFyZCBpbm9kZSBmaWVsZHMgKGlfbmxpbmssIGlfZGVudHJ5KSBhbmQgdXNlIGEgbG9jYWxseSBhc3NpZ25lZCBib29sZWFuIHZhcmlhYmxlIChub3RpZnlfZGVhZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gc2VtYW50aWNzLCBpbm9kZSBsaWZlY3ljbGVzLCBvciBsb2NraW5nLCB3aGljaCBmYWxsIHVuZGVyIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5vZGUgYWxpYXMgbG9va3VwIGFuZCBkZW50cnkgdW5saW5raW5nIGxvZ2ljIGluIGZzL2RjYWNoZS5jIHRvIHByZXZlbnQgcmV2aXZpbmcgZGVhZC91bmxpbmtlZCBpbm9kZXMgZHVyaW5nIGZpbGUgaGFuZGxlIGxvb2t1cHMgKHdoaWNoIGludGVyZmVyZXMgd2l0aCBmc25vdGlmeSkuIFRoZSBjaGFuZ2VzIG9ubHkgdG91Y2ggc3RhbmRhcmQgaW5vZGUgZmllbGRzIChpX25saW5rLCBpX2RlbnRyeSkgYW5kIHVzZSBhIGxvY2FsbHkgYXNzaWduZWQgYm9vbGVhbiB2YXJpYWJsZSAobm90aWZ5X2RlYWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBmaWxlc3lzdGVtIHNlbWFudGljcywgaW5vZGUgbGlmZWN5Y2xlcywgb3IgbG9ja2luZywgd2hpY2ggZmFsbCB1bmRlciBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowg5r6z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 13:22:54 +0000 UTC FinishedAt: 2026-09-03 14:13:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FHANDLE", "FSNOTIFY", "INOTIFY_USER", "FANOTIFY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "21860bb220225edeb87e9c831e6bf25c620e2126", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "FHANDLE", "FSNOTIFY", "INOTIFY_USER", "FANOTIFY" ], "series_id": "74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "__d_obtain_alias", "d_obtain_alias", "d_obtain_root", "dentry_unlink_inode" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OywKICAgICYjMzQ7RlNOT1RJRlkmIzM0OywKICAgICYjMzQ7SU5PVElGWV9VU0VSJiMzNDssCiAgICAmIzM0O0ZBTk9USUZZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9yb290JiMzNDssCiAgICAmIzM0O2RlbnRyeV91bmxpbmtfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBpbm9kZSBhbGlhcyBsb29rdXAgYW5kIGRlbnRyeSB1bmxpbmtpbmcgbG9naWMgaW4gZnMvZGNhY2hlLmMgdG8gcHJldmVudCByZXZpdmluZyBkZWFkL3VubGlua2VkIGlub2RlcyBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3VwcyAod2hpY2ggaW50ZXJmZXJlcyB3aXRoIGZzbm90aWZ5KS4gVGhlIGNoYW5nZXMgb25seSB0b3VjaCBzdGFuZGFyZCBpbm9kZSBmaWVsZHMgKGlfbmxpbmssIGlfZGVudHJ5KSBhbmQgdXNlIGEgbG9jYWxseSBhc3NpZ25lZCBib29sZWFuIHZhcmlhYmxlIChub3RpZnlfZGVhZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gc2VtYW50aWNzLCBpbm9kZSBsaWZlY3ljbGVzLCBvciBsb2NraW5nLCB3aGljaCBmYWxsIHVuZGVyIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBsb2dpYyBpbiBmcy9kY2FjaGUuYyAoX19kX29idGFpbl9hbGlhcywgZGVudHJ5X3VubGlua19pbm9kZSkgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gY3JlYXRpbmcgYWxpYXNlcyBmb3IgZGVhZCB1bmxpbmtlZCBpbm9kZXMgYW5kIHRvIGFjY3VyYXRlbHkgbm90aWZ5IGZzbm90aWZ5IHdoZW4gdW5saW5rZWQgaW5vZGVzIGhhdmUgbm8gcmVtYWluaW5nIGFsaWFzZXMuIEZ1enppbmcgd2l0aCBmaWxlIGhhbmRsZSBzeXNjYWxscyAob3Blbl9ieV9oYW5kbGVfYXQpIGFuZCBjb25jdXJyZW50IHVubGluay9leHBvcnRmcyBvcGVyYXRpb25zIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBzdGF0ZSB0cmFuc2l0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGRkYjA3MWQxOGI4MzViYTI2MGI2NzQ5YTgyYzM5YzVkNmJmMDUyNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjEyOjA2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcbmluZGV4IDFiMWE4MWYxMGRhNjcuLjhmMTdkYjI3MjRiMzggMTAwNjQ0XG4tLS0gYS9mcy9kY2FjaGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZGNhY2hlLmNcbkBAIC00NTAsNiAmIzQzOzQ1MCwxNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRcdGNhbGxfcmN1KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3JjdSwgX19kX2ZyZWUpO1xuIH1cbiBcbiYjNDM7LypcbiYjNDM7ICogSWYgaW5vZGUgaXMgdW5saW5rZWQgYW5kIGRvZXNuJiMzOTt0IGhhdmUgYW55IGFsaWFzZXMgKGkuZS4sIGFsbCBmZHMgcG9pbnRpbmcgdG9cbiYjNDM7ICogaXQgYXJlIGNsb3NlZCksIGl0IGlzIHByZXR0eSBtdWNoIGRlYWQuIEV4Y2VwdCB0aGF0IGZpbGUgaGFuZGxlIGxvb2t1cCBjb3VsZFxuJiM0MzsgKiBzdGlsbCByZXZpdmUgaXQgd2hpY2ggY2F1c2VzIGlzc3VlcyB0byBmc25vdGlmeS4gU28gb25jZSBpbm9kZSByZWFjaGVzIHRoaXNcbiYjNDM7ICogc3RhdGUgd2UgbWFrZSBzdXJlIHRvIGJsb2NrIGNyZWF0aW5nIGFueSBuZXcgYWxpYXNlcy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGlub2RlX25vdGlmeV9kZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gIWlub2RlLVx1MDAzZWlfbmxpbmsgXHUwMDI2XHUwMDI2IGhsaXN0X2VtcHR5KFx1MDAyNmlub2RlLVx1MDAzZWlfZGVudHJ5KTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFJlbGVhc2UgdGhlIGRlbnRyeSYjMzk7cyBpbm9kZSwgdXNpbmcgdGhlIGZpbGVzeXN0ZW1cbiAgKiBkX2lwdXQoKSBvcGVyYXRpb24gaWYgZGVmaW5lZC5cbkBAIC00NTksNiAmIzQzOzQ3MCw3IEBAIHN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSlcbiBcdF9fcmVsZWFzZXMoZGVudHJ5LVx1MDAzZWRfaW5vZGUtXHUwMDNlaV9sb2NrKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktXHUwMDNlZF9pbm9kZTtcbiYjNDM7XHRib29sIG5vdGlmeV9kZWFkO1xuIFxuIFx0cmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4gXHRfX2RfY2xlYXJfdHlwZV9hbmRfaW5vZGUoZGVudHJ5KTtcbkBAIC00NjksOSAmIzQzOzQ4MSwxMCBAQCBzdGF0aWMgdm9pZCBkZW50cnlfdW5saW5rX2lub2RlKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpXG4gXHQgKi9cbiBcdGRlbnRyeS1cdTAwM2V3YWl0ZXJzID0gTlVMTDtcbiBcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbiYjNDM7XHRub3RpZnlfZGVhZCA9IGlub2RlX25vdGlmeV9kZWFkKGlub2RlKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmRlbnRyeS1cdTAwM2VkX2xvY2spO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi1cdGlmICghaW5vZGUtXHUwMDNlaV9ubGluaylcbiYjNDM7XHRpZiAobm90aWZ5X2RlYWQpXG4gXHRcdGZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKTtcbiBcdGlmIChkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pcHV0KVxuIFx0XHRkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2lwdXQoZGVudHJ5LCBpbm9kZSk7XG5AQCAtMjIzNyw3ICYjNDM7MjI1MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcbiBcbiBcdHNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcbi1cdHJlcyA9IGRfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiBleGlzdGluZyBhbGlhcz8gKi9cbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiYjNDM7XHRpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSlcbiYjNDM7XHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiBleGlzdGluZyBhbGlhcz8gKi9cbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXMgPSBFUlJfUFRSKC1FU1RBTEUpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC0yMjQ5LDcgJiM0MzsyMjY3LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuIFxuIFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcbiBcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTsgLyogcmVjaGVjayB1bmRlciBsb2NrICovXG4mIzQzO1x0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4mIzQzO1x0XHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1x0LyogcmVjaGVjayB1bmRlciBsb2NrICovXG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbiBcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cbiBcdFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OywKICAgICYjMzQ7RlNOT1RJRlkmIzM0OywKICAgICYjMzQ7SU5PVElGWV9VU0VSJiMzNDssCiAgICAmIzM0O0ZBTk9USUZZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9yb290JiMzNDssCiAgICAmIzM0O2RlbnRyeV91bmxpbmtfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGxvZ2ljIGluIGZzL2RjYWNoZS5jIChfX2Rfb2J0YWluX2FsaWFzLCBkZW50cnlfdW5saW5rX2lub2RlKSB0byBwcmV2ZW50IGZpbGUgaGFuZGxlIGxvb2t1cHMgZnJvbSBjcmVhdGluZyBhbGlhc2VzIGZvciBkZWFkIHVubGlua2VkIGlub2RlcyBhbmQgdG8gYWNjdXJhdGVseSBub3RpZnkgZnNub3RpZnkgd2hlbiB1bmxpbmtlZCBpbm9kZXMgaGF2ZSBubyByZW1haW5pbmcgYWxpYXNlcy4gRnV6emluZyB3aXRoIGZpbGUgaGFuZGxlIHN5c2NhbGxzIChvcGVuX2J5X2hhbmRsZV9hdCkgYW5kIGNvbmN1cnJlbnQgdW5saW5rL2V4cG9ydGZzIG9wZXJhdGlvbnMgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGRiMDcxZDE4YjgzNWJhMjYwYjY3NDlhODJjMzljNWQ2YmYwNTI3NwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgU2VwIDMgMTQ6MTI6MDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDFiMWE4MWYxMGRhNjcuLjhmMTdkYjI3MjRiMzggMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2RjYWNoZS5jCkBAIC00NTAsNiAmIzQzOzQ1MCwxNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiAJCWNhbGxfcmN1KCZhbXA7ZGVudHJ5LSZndDtkX3JjdSwgX19kX2ZyZWUpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBJZiBpbm9kZSBpcyB1bmxpbmtlZCBhbmQgZG9lc24mIzM5O3QgaGF2ZSBhbnkgYWxpYXNlcyAoaS5lLiwgYWxsIGZkcyBwb2ludGluZyB0bwomIzQzOyAqIGl0IGFyZSBjbG9zZWQpLCBpdCBpcyBwcmV0dHkgbXVjaCBkZWFkLiBFeGNlcHQgdGhhdCBmaWxlIGhhbmRsZSBsb29rdXAgY291bGQKJiM0MzsgKiBzdGlsbCByZXZpdmUgaXQgd2hpY2ggY2F1c2VzIGlzc3VlcyB0byBmc25vdGlmeS4gU28gb25jZSBpbm9kZSByZWFjaGVzIHRoaXMKJiM0MzsgKiBzdGF0ZSB3ZSBtYWtlIHN1cmUgdG8gYmxvY2sgY3JlYXRpbmcgYW55IG5ldyBhbGlhc2VzLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGlub2RlX25vdGlmeV9kZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gIWlub2RlLSZndDtpX25saW5rICZhbXA7JmFtcDsgaGxpc3RfZW1wdHkoJmFtcDtpbm9kZS0mZ3Q7aV9kZW50cnkpOwomIzQzO30KJiM0MzsKIC8qCiAgKiBSZWxlYXNlIHRoZSBkZW50cnkmIzM5O3MgaW5vZGUsIHVzaW5nIHRoZSBmaWxlc3lzdGVtCiAgKiBkX2lwdXQoKSBvcGVyYXRpb24gaWYgZGVmaW5lZC4KQEAgLTQ1OSw2ICYjNDM7NDcwLDcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQogCV9fcmVsZWFzZXMoZGVudHJ5LSZndDtkX2lub2RlLSZndDtpX2xvY2spCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0mZ3Q7ZF9pbm9kZTsKJiM0MzsJYm9vbCBub3RpZnlfZGVhZDsKIAogCXJhd193cml0ZV9zZXFjb3VudF9iZWdpbigmYW1wO2RlbnRyeS0mZ3Q7ZF9zZXEpOwogCV9fZF9jbGVhcl90eXBlX2FuZF9pbm9kZShkZW50cnkpOwpAQCAtNDY5LDkgJiM0Mzs0ODEsMTAgQEAgc3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KQogCSAqLwogCWRlbnRyeS0mZ3Q7d2FpdGVycyA9IE5VTEw7CiAJcmF3X3dyaXRlX3NlcWNvdW50X2VuZCgmYW1wO2RlbnRyeS0mZ3Q7ZF9zZXEpOwomIzQzOwlub3RpZnlfZGVhZCA9IGlub2RlX25vdGlmeV9kZWFkKGlub2RlKTsKIAlzcGluX3VubG9jaygmYW1wO2RlbnRyeS0mZ3Q7ZF9sb2NrKTsKIAlzcGluX3VubG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwotCWlmICghaW5vZGUtJmd0O2lfbmxpbmspCiYjNDM7CWlmIChub3RpZnlfZGVhZCkKIAkJZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpOwogCWlmIChkZW50cnktJmd0O2Rfb3AgJmFtcDsmYW1wOyBkZW50cnktJmd0O2Rfb3AtJmd0O2RfaXB1dCkKIAkJZGVudHJ5LSZndDtkX29wLSZndDtkX2lwdXQoZGVudHJ5LCBpbm9kZSk7CkBAIC0yMjM3LDcgJiM0MzsyMjUwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKQogCiAJc2IgPSBpbm9kZS0mZ3Q7aV9zYjsKIAotCXJlcyA9IGRfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiBleGlzdGluZyBhbGlhcz8gKi8KJiM0MzsJc3Bpbl9sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiYjNDM7CWlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKQomIzQzOwkJcmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTsJLyogZXhpc3RpbmcgYWxpYXM/ICovCiYjNDM7CWVsc2UKJiM0MzsJCXJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aW5vZGUtJmd0O2lfbG9jayk7CiAJaWYgKHJlcykKIAkJZ290byBvdXQ7CiAKQEAgLTIyNDksNyAmIzQzOzIyNjcsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBkaXNjb25uZWN0ZWQpCiAKIAlzZWN1cml0eV9kX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpOwogCXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwotCXJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7IC8qIHJlY2hlY2sgdW5kZXIgbG9jayAqLwomIzQzOwlpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSkKJiM0MzsJCXJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7CS8qIHJlY2hlY2sgdW5kZXIgbG9jayAqLwomIzQzOwllbHNlCiYjNDM7CQlyZXMgPSBFUlJfUFRSKC1FU1RBTEUpOwogCWlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi8KIAkJdW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1OTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBGaWxlIFN5c3RlbSBDYWNoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIGBmcy9kY2FjaGUuY2AsIHdoaWNoIG1ha2VzIG1lIGltbWVkaWF0ZWx5IHRoaW5rIGZpbGUgc3lzdGVtIGNhY2hlIG9wZXJhdGlvbnMg4oCTIHByb2JhYmx5IHJlbGF0ZWQgdG8gZGlyZWN0b3J5IGVudHJpZXMgYW5kIGlub2RlIGhhbmRsaW5nLiBJbnRlcmVzdGluZy4KClNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTt2ZSBhZGRlZCBhIGZ1bmN0aW9uLCBgaW5vZGVfbm90aWZ5X2RlYWQoKWAuIEJhc2VkIG9uIHRoZSBjb2RlLCBpdCBzZWVtcyB0byBjaGVjayBpZiBhbiBpbm9kZSBpcyAmIzM0O2RlYWQmIzM0OyDigJMgbm8gaGFyZCBsaW5rcyBhbmQgYW4gZW1wdHkgZGVudHJ5IGxpc3QuIFRoaXMgaXMga2V5LCBzbyBJJiMzOTtsbCBuZWVkIHRvIGtlZXAgdGhhdCBkZWZpbml0aW9uIGZyb250IG9mIG1pbmQuIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGNvcmUgb2YgdGhlIHBhdGNoJiMzOTtzIGxvZ2ljLgoKVGhlIG5leHQgcG9pbnQgaW52b2x2ZXMgYGRlbnRyeV91bmxpbmtfaW5vZGUoKWAuIFRoZSBtb2RpZmljYXRpb24gc3VnZ2VzdHMgdGhhdCB0aGV5JiMzOTtyZSB1c2luZyB0aGlzIGBpbm9kZV9ub3RpZnlfZGVhZCgpYCBjaGVjayB0byBkZXRlcm1pbmUgaWYgYGZzbm90aWZ5X2lub2RlcmVtb3ZlKClgIHNob3VsZCBiZSBjYWxsZWQuIFRoaXMgaW1wbGllcyBzb21lIGZvcm0gb2Ygbm90aWZpY2F0aW9uIG9yIGNsZWFudXAgd2hlbiBhbiBpbm9kZSBpcyB1bmxpbmtlZCBhbmQgYXBwZWFycyB0byBiZSBpbiBhIGRlYWQgc3RhdGUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgd2UgdHJ5aW5nIHRvIG9wdGltaXplIHRoZSBjbGVhbnVwIG9mIG9ycGhhbmVkIGlub2Rlcywgb3IgYXJlIHdlIGZpeGluZyBhIHJhY2UgY29uZGl0aW9uIHJlbGF0ZWQgdG8gZmlsZSBzeXN0ZW0gbm90aWZpY2F0aW9ucyBhbmQgc3RhbGUgaW5vZGVzPyBJIHdpbGwgbmVlZCB0byBsb29rIGRlZXBlci4KCkZpbmFsbHksIGBfX2Rfb2J0YWluX2FsaWFzKClgIGlzIGFsc28gbW9kaWZpZWQsIGluY29ycG9yYXRpbmcgdGhlIGBpbm9kZV9ub3RpZnlfZGVhZCgpYCBjaGVjayB1bmRlciBgaW5vZGUtJmd0O2lfbG9ja2AgYmVmb3JlIGZpbmRpbmcgb3IgYXR0YWNoaW5nIGFuIGFsaWFzLiBJZiB0aGUgaW5vZGUgaXMgY29uc2lkZXJlZCBkZWFkLCBpdCByZXR1cm5zIGAtRVNUQUxFYC4gVGhpcyB0ZWxscyBtZSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBwcmV2ZW50IHRoZSBjcmVhdGlvbiBvZiBuZXcgYWxpYXNlcyBvciB0aGUgcmV1c2Ugb2YgYWxpYXNlcyBmb3IgZGVhZCBpbm9kZXMuIFJldHVybmluZyAtRVNUQUxFIGFsc28gaW5kaWNhdGVzIHRoYXQgdGhlIGNhbGxlciBzaG91bGQgdGhlbiByZXRyeSB0aGUgb3BlcmF0aW9uIG9yIG90aGVyd2lzZSBzaWduYWwgZmFpbHVyZS4KCkkgbmVlZCB0byBxdWlja2x5IGdldCBhIGJldHRlciBncmFzcCBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgdGhlc2UgbGluZXMgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBjb250ZXh0LiBJJiMzOTtsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9uIGBmcy9kY2FjaGUuY2AgdG8gbG9vayBhdCB0aGlzIG1vcmUgY2xvc2VseSwgcGFydGljdWxhcmx5IGFyb3VuZCB3aGVyZSB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgZGNhY2hlIHdpbGwgYmUgZXNzZW50aWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fZF9vYnRhaW5fYWxpYXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZGNhY2hlLmM9MjIzOT1FWFBPUlRfU1lNQk9MKGRfbWFrZV9yb290KTtcbmZzL2RjYWNoZS5jLTIyNDAtXG5mcy9kY2FjaGUuYzoyMjQxOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuZnMvZGNhY2hlLmMtMjI0Mi17XG4tLVxuZnMvZGNhY2hlLmM9MjMyMD1zdHJ1Y3QgZGVudHJ5ICpkX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZGNhY2hlLmMtMjMyMS17XG5mcy9kY2FjaGUuYzoyMzIyOlx0cmV0dXJuIF9fZF9vYnRhaW5fYWxpYXMoaW5vZGUsIHRydWUpO1xuZnMvZGNhY2hlLmMtMjMyMy19XG4tLVxuZnMvZGNhY2hlLmM9MjM0MT1zdHJ1Y3QgZGVudHJ5ICpkX29idGFpbl9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9kY2FjaGUuYy0yMzQyLXtcbmZzL2RjYWNoZS5jOjIzNDM6XHRyZXR1cm4gX19kX29idGFpbl9hbGlhcyhpbm9kZSwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMjM0NC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgc25pcHBldHMgYXMgaWYgdGhleSB3ZXJlIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIGBmcy9kY2FjaGUuY2AgZm9yIENvbnRleHQqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gYGZzL2RjYWNoZS5jYC4gSSYjMzk7bSBzcGVjaWZpY2FsbHkgdGFyZ2V0aW5nIGFyb3VuZCBsaW5lIDIyMzUtMjMwMCBhbmQgdGhlbiBsb29waW5nIGJhY2sgdG8gNDUwLTUwMC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZ2VhcmVkIGFyb3VuZCB1bmRlcnN0YW5kaW5nIHRoZSBudWFuY2VzIG9mIHRoZSBkZW50cnkgY2FjaGUmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZmlsZXN5c3RlbSBsYXllciwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4KCkkgc3VzcGVjdCB0aGF0IHNlZ21lbnQgMjIzNS0yMzAwLCBpcyBpbnZvbHZlZCBpbiBkZW50cnkgaW52YWxpZGF0aW9uIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiDigJMgcGVyaGFwcyBoYW5kbGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBhY3RpdmUgZGVudHJpZXMsIG9yIGhvdyBpdCBkZWFscyB3aXRoIHRoZSByZW1vdmFsIG9mIGVudHJpZXMuIEkmIzM5O20ga2VlbiB0byBzZWUgdGhlIHNwZWNpZmljIGxvY2tpbmcgbWVjaGFuaXNtcyB1c2VkIHdpdGhpbiB0aGF0IHBvcnRpb24gb2YgdGhlIGNvZGUsIGFzIHdlbGwgYXMgdGhlIGNvbmRpdGlvbnMgd2hlcmUgaXQgZ2V0cyB0cmlnZ2VyZWQuIE15IG1lbnRhbCBjaGVja2xpc3QgaW5jbHVkZXMgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBpbm9kZS9zdXBlcmJsb2NrIHN0cnVjdHVyZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgdHlwZXMgb2YgZmlsZSBzeXN0ZW0gb3BlcmF0aW9ucyBsaWtlIHVubGlua2luZyBvciByZW5hbWluZy4gSSB3YW50IHRvIGNoZWNrIGZvciBwb3RlbnRpYWwgZGVhZGxvY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4KClRoZW4sIEkgd2FudCB0byBiYWNrIHVwIGEgYml0IGFuZCBsb29rIGF0IHRoZSBtb3JlIGZvdW5kYXRpb25hbCBvcGVyYXRpb25zIGZyb20gbGluZXMgNDUwLTUwMC4gVGhpcyBhcmVhIHdpbGwgbGlrZWx5IGNvdmVyIHRoZSBmdW5kYW1lbnRhbCBkZW50cnkgYWxsb2NhdGlvbiBvciBsb29rdXAgcm91dGluZXMsIG9yIHBlcmhhcHMgZXZlbiB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMuIFVuZGVyc3RhbmRpbmcgdGhlc2UgcGllY2VzIHdpbGwgcHJvdmlkZSBjb250ZXh0IGZvciB0aGUgbGF0ZXIgc2VnbWVudC4gSSYjMzk7bSBjdXJpb3VzIGlmIHRoZXkmIzM5O3ZlIGltcGxlbWVudGVkIGFueSBjYWNoaW5nIHN0cmF0ZWdpZXMgd2l0aGluIHRoZSBkZW50cnkgaXRzZWxmLCBhbmQgaG93IHRob3NlIGNhY2hpbmcgZGVjaXNpb25zIG1heSBiZSBpbmZsdWVuY2luZyB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBoYW5kbGVzIGxvb2t1cHMsIGFuZCBob3cgdGhhdCBpbnRlcnNlY3RzIHdpdGggdGhlIGxvY2tpbmcgbWVjaGFuaXNtLCBhbmQgb3RoZXIgY29yZSBmdW5jdGlvbnMuIEkgd291bGQgbGlrZSB0byBzZWUgaG93IGVmZmljaWVudCBpdCBpcyBhbmQgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ0NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDQ1Olx0XHR9XG4gNDQ2Olx0XHQvKiBpZiBkZW50cnkgd2FzIG5ldmVyIHZpc2libGUgdG8gUkNVLCBpbW1lZGlhdGUgZnJlZSBpcyBPSyAqL1xuIDQ0NzpcdFx0aWYgKGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNiBEQ0FDSEVfTk9SQ1UpXG4gNDQ4Olx0XHRcdF9fZF9mcmVlKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3JjdSk7XG4gNDQ5Olx0XHRlbHNlXG4gNDUwOlx0XHRcdGNhbGxfcmN1KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3JjdSwgX19kX2ZyZWUpO1xuIDQ1MTpcdH1cbiA0NTI6XHRcbiA0NTM6XHQvKlxuIDQ1NDpcdCAqIElmIGlub2RlIGlzIHVubGlua2VkIGFuZCBkb2VzbiYjMzk7dCBoYXZlIGFueSBhbGlhc2VzIChpLmUuLCBhbGwgZmRzIHBvaW50aW5nIHRvXG4gNDU1Olx0ICogaXQgYXJlIGNsb3NlZCksIGl0IGlzIHByZXR0eSBtdWNoIGRlYWQuIEV4Y2VwdCB0aGF0IGZpbGUgaGFuZGxlIGxvb2t1cCBjb3VsZFxuIDQ1NjpcdCAqIHN0aWxsIHJldml2ZSBpdCB3aGljaCBjYXVzZXMgaXNzdWVzIHRvIGZzbm90aWZ5LiBTbyBvbmNlIGlub2RlIHJlYWNoZXMgdGhpc1xuIDQ1NzpcdCAqIHN0YXRlIHdlIG1ha2Ugc3VyZSB0byBibG9jayBjcmVhdGluZyBhbnkgbmV3IGFsaWFzZXMuXG4gNDU4Olx0ICovXG4gNDU5Olx0c3RhdGljIGJvb2wgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlcbiA0NjA6XHR7XG4gNDYxOlx0XHRyZXR1cm4gIWlub2RlLVx1MDAzZWlfbmxpbmsgXHUwMDI2XHUwMDI2IGhsaXN0X2VtcHR5KFx1MDAyNmlub2RlLVx1MDAzZWlfZGVudHJ5KTtcbiA0NjI6XHR9XG4gNDYzOlx0XG4gNDY0Olx0LypcbiA0NjU6XHQgKiBSZWxlYXNlIHRoZSBkZW50cnkmIzM5O3MgaW5vZGUsIHVzaW5nIHRoZSBmaWxlc3lzdGVtXG4gNDY2Olx0ICogZF9pcHV0KCkgb3BlcmF0aW9uIGlmIGRlZmluZWQuXG4gNDY3Olx0ICovXG4gNDY4Olx0c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuIDQ2OTpcdFx0X19yZWxlYXNlcyhkZW50cnktXHUwMDNlZF9sb2NrKVxuIDQ3MDpcdFx0X19yZWxlYXNlcyhkZW50cnktXHUwMDNlZF9pbm9kZS1cdTAwM2VpX2xvY2spXG4gNDcxOlx0e1xuIDQ3MjpcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS1cdTAwM2VkX2lub2RlO1xuIDQ3MzpcdFx0Ym9vbCBub3RpZnlfZGVhZDtcbiA0NzQ6XHRcbiA0NzU6XHRcdHJhd193cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuIDQ3NjpcdFx0X19kX2NsZWFyX3R5cGVfYW5kX2lub2RlKGRlbnRyeSk7XG4gNDc3Olx0XHRfX2hsaXN0X2RlbChcdTAwMjZkZW50cnktXHUwMDNlZF9hbGlhcyk7XG4gNDc4Olx0XHQvKlxuIDQ3OTpcdFx0ICogZGVudHJ5IGJlY29tZXMgbmVnYXRpdmUsIHNvIHRoZSBzcGFjZSBvY2N1cGllZCBieSAtXHUwMDNlZF9hbGlhc1xuIDQ4MDpcdFx0ICogYmVsb25ncyB0byAtXHUwMDNld2FpdGVycyBub3cuXG4gNDgxOlx0XHQgKi9cbiA0ODI6XHRcdGRlbnRyeS1cdTAwM2V3YWl0ZXJzID0gTlVMTDtcbiA0ODM6XHRcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbiA0ODQ6XHRcdG5vdGlmeV9kZWFkID0gaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpO1xuIDQ4NTpcdFx0c3Bpbl91bmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4gNDg2Olx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuIDQ4NzpcdFx0aWYgKG5vdGlmeV9kZWFkKVxuIDQ4ODpcdFx0XHRmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7XG4gNDg5Olx0XHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaXB1dClcbiA0OTA6XHRcdFx0ZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pcHV0KGRlbnRyeSwgaW5vZGUpO1xuIDQ5MTpcdFx0ZWxzZVxuIDQ5MjpcdFx0XHRpcHV0KGlub2RlKTtcbiA0OTM6XHR9XG4gNDk0Olx0XG4gNDk1Olx0LypcbiA0OTY6XHQgKiBUaGUgRENBQ0hFX0xSVV9MSVNUIGJpdCBpcyBzZXQgd2hlbmV2ZXIgdGhlICYjMzk7ZF9scnUmIzM5OyBlbnRyeVxuIDQ5NzpcdCAqIGlzIGluIHVzZSAtIHdoaWNoIGluY2x1ZGVzIGJvdGggdGhlIFwmIzM0O3JlYWxcJiMzNDsgcGVyLXN1cGVyYmxvY2tcbiA0OTg6XHQgKiBMUlUgbGlzdCBfYW5kXyB0aGUgRENBQ0hFX1NIUklOS19MSVNUIHVzZS5cbiA0OTk6XHQgKlxuIDUwMDpcdCAqIFRoZSBEQ0FDSEVfU0hSSU5LX0xJU1QgYml0IGlzIHNldCB3aGVuZXZlciB0aGUgZGVudHJ5IGlzXG4gNTAxOlx0ICogb24gdGhlIHNocmluayBsaXN0IChpZSBub3Qgb24gdGhlIHN1cGVyYmxvY2sgTFJVIGxpc3QpLlxuIDUwMjpcdCAqXG4gNTAzOlx0ICogVGhlIHBlci1jcHUgXCYjMzQ7bnJfZGVudHJ5X3VudXNlZFwmIzM0OyBjb3VudGVycyBhcmUgdXBkYXRlZCB3aXRoXG4gNTA0Olx0ICogdGhlIERDQUNIRV9MUlVfTElTVCBiaXQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg5OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCBhc3N1bWluZyBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBSZWxldmFudCBUZXh0IENodW5rcyoqCgpSaWdodCwgbGV0JiMzOTtzIHplcm8gaW4gb24gbGluZXMgMjIzNS0yMzAwLiBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IGdvb2QgZ3Jhc3Agb2YgdGhpcyBzcGVjaWZpYyBzZWN0aW9uLiBHaXZlbiBteSBleGlzdGluZyB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGNvbnRleHQgYW5kIHRoZSBudWFuY2VzIG9mIHRoZSBzdWJqZWN0IG1hdHRlciwgSeKAmW0gZ3Vlc3NpbmcgdGhpcyByYW5nZSBsaWtlbHkgY29udGFpbnMgdGhlIGNyaXRpY2FsIGRldGFpbHMgSSYjMzk7bSBhZnRlciwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHJlbGV2YW50IGNvbnRleHQgdGhhdCBoZWxwcyB3aXRoIG15IGN1cnJlbnQgb2JqZWN0aXZlLiBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgaXQgd2l0aCBhIGZpbmUtdG9vdGggY29tYiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3BlY2lmaWMgYXJndW1lbnRzIHByZXNlbnRlZCwgYW55IHN1cHBvcnRpbmcgZGF0YSBvciBldmlkZW5jZSwgYW5kIHRoZSBvdmVyYWxsIG5hcnJhdGl2ZSBmbG93IHdpdGhpbiB0aGlzIGRlbGltaXRlZCByYW5nZS4gSXQmIzM5O3MgYSBrZXkgc2VnbWVudCwgc28gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJpYXNlcywgaW5jb25zaXN0ZW5jaWVzLCBvciBhbnkgc3VycHJpc2luZyByZXZlbGF0aW9ucyB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgd2F5IEkgdGhpbmsgYWJvdXQgdGhlIGVudGlyZSBkb2N1bWVudC4gTXkgZXhwZXJ0aXNlIGxldHMgbWUgY3V0IHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIzNTpcdFx0XHRcdGlwdXQocm9vdF9pbm9kZSk7XG4yMjM2Olx0XHR9XG4yMjM3Olx0XHRyZXR1cm4gcmVzO1xuMjIzODpcdH1cbjIyMzk6XHRFWFBPUlRfU1lNQk9MKGRfbWFrZV9yb290KTtcbjIyNDA6XHRcbjIyNDE6XHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcbjIyNDI6XHR7XG4yMjQzOlx0XHRzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiO1xuMjI0NDpcdFx0c3RydWN0IGRlbnRyeSAqbmV3LCAqcmVzO1xuMjI0NTpcdFxuMjI0NjpcdFx0aWYgKCFpbm9kZSlcbjIyNDc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7XG4yMjQ4Olx0XHRpZiAoSVNfRVJSKGlub2RlKSlcbjIyNDk6XHRcdFx0cmV0dXJuIEVSUl9DQVNUKGlub2RlKTtcbjIyNTA6XHRcbjIyNTE6XHRcdHNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbjIyNTI6XHRcbjIyNTM6XHRcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuMjI1NDpcdFx0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4yMjU1Olx0XHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiBleGlzdGluZyBhbGlhcz8gKi9cbjIyNTY6XHRcdGVsc2VcbjIyNTc6XHRcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbjIyNTg6XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4yMjU5Olx0XHRpZiAocmVzKVxuMjI2MDpcdFx0XHRnb3RvIG91dDtcbjIyNjE6XHRcbjIyNjI6XHRcdG5ldyA9IGRfYWxsb2NfYW5vbihzYik7XG4yMjYzOlx0XHRpZiAoIW5ldykge1xuMjI2NDpcdFx0XHRyZXMgPSBFUlJfUFRSKC1FTk9NRU0pO1xuMjI2NTpcdFx0XHRnb3RvIG91dDtcbjIyNjY6XHRcdH1cbjIyNjc6XHRcbjIyNjg6XHRcdHNlY3VyaXR5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7XG4yMjY5Olx0XHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIyNzA6XHRcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxuMjI3MTpcdFx0XHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1x0LyogcmVjaGVjayB1bmRlciBsb2NrICovXG4yMjcyOlx0XHRlbHNlXG4yMjczOlx0XHRcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XG4yMjc0Olx0XHRpZiAobGlrZWx5KCFyZXMpKSB7IC8qIHN0aWxsIG5vIGFsaWFzLCBhdHRhY2ggYSBkaXNjb25uZWN0ZWQgZGVudHJ5ICovXG4yMjc1Olx0XHRcdHVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTtcbjIyNzY6XHRcbjIyNzc6XHRcdFx0aWYgKGRpc2Nvbm5lY3RlZClcbjIyNzg6XHRcdFx0XHRhZGRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDtcbjIyNzk6XHRcbjIyODA6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNm5ldy1cdTAwM2VkX2xvY2spO1xuMjI4MTpcdFx0XHRfX2Rfc2V0X2lub2RlX2FuZF90eXBlKG5ldywgaW5vZGUsIGFkZF9mbGFncyk7XG4yMjgyOlx0XHRcdGhsaXN0X2FkZF9oZWFkKFx1MDAyNm5ldy1cdTAwM2VkX2FsaWFzLCBcdTAwMjZpbm9kZS1cdTAwM2VpX2RlbnRyeSk7XG4yMjgzOlx0XHRcdGlmICghZGlzY29ubmVjdGVkKSB7XG4yMjg0Olx0XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiLVx1MDAzZXNfcm9vdHNfbG9jayk7XG4yMjg1Olx0XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfc2liLCBcdTAwMjZzYi1cdTAwM2VzX3Jvb3RzKTtcbjIyODY6XHRcdFx0XHRzcGluX3VubG9jayhcdTAwMjZzYi1cdTAwM2VzX3Jvb3RzX2xvY2spO1xuMjI4NzpcdFx0XHR9XG4yMjg4Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNm5ldy1cdTAwM2VkX2xvY2spO1xuMjI4OTpcdFx0XHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuMjI5MDpcdFx0XHRpbm9kZSA9IE5VTEw7IC8qIGNvbnN1bWVkIGJ5IG5ldy1cdTAwM2VkX2lub2RlICovXG4yMjkxOlx0XHRcdHJlcyA9IG5ldztcbjIyOTI6XHRcdH0gZWxzZSB7XG4yMjkzOlx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4yMjk0Olx0XHRcdGRwdXQobmV3KTtcbjIyOTU6XHRcdH1cbjIyOTY6XHRcbjIyOTc6XHQgb3V0OlxuMjI5ODpcdFx0aXB1dChpbm9kZSk7XG4yMjk5Olx0XHRyZXR1cm4gcmVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIENvcmUgVkZTIENoYW5nZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTLCBzcGVjaWZpY2FsbHkgYGZzL2RjYWNoZS5jYC4gVGhpcyBpcyBhICp2ZXJ5KiBpbnRlcmVzdGluZyBhcmVhLCBpbnZvbHZpbmcgdGhlIGRjYWNoZSwgYG9wZW5fYnlfaGFuZGxlX2F0YCwgYG5hbWVfdG9faGFuZGxlX2F0YCwgYGV4cG9ydGZzYCwgZmlsZSB1bmxpbmtpbmcsIGFuZCBgZnNub3RpZnlgLiAqRGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIGxvZ2ljIGNoYW5nZXMgcmVsYXRlZCB0byB1bmxpbmtlZCBkZWFkIGlub2RlcyBkdXJpbmcgYWxpYXMgcmVzb2x1dGlvbiBhbmQgZnNub3RpZnkgZXZlbnQgZ2VuZXJhdGlvbiBhcmUgY3JpdGljYWwsIHRoYXQmIzM5O3Mgd2hlcmUgYnVncyBjYW4gaGlkZS4KCk5vdywgbGV0JiMzOTtzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gYGZzL2RjYWNoZS5jYCBpcyBjb3JlIFZGUywgc28gaXQmIzM5O3MgYWx3YXlzIGJ1aWx0LWluLCBubyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZGVkIGRpcmVjdGx5LiBIb3dldmVyLCBhcmUgdGhlcmUgKmluZGlyZWN0KiBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcz8gSSYjMzk7bSB0aGlua2luZyBhYm91dCBgb3Blbl9ieV9oYW5kbGVfYXRgIGFuZCBleHBvcnQgb3BlcmF0aW9ucyBvciBgZnNub3RpZnlgLiBgRlNOT1RJRllgIGl0c2VsZiBpcyBzdGFuZGFyZCwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGlzc3VlLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIGBDT05GSUdfRVhQT1JURlNgIG9yIGBDT05GSUdfRkhBTkRMRWAgbWlnaHQgYmUgcmVsZXZhbnQsIHNpbmNlIHRob3NlICpkbyogZW5hYmxlIHRoZSBmaWxlIGhhbmRsZSBzeXNjYWxscyBsaWtlIGBuYW1lX3RvX2hhbmRsZV9hdGAgYW5kIGBvcGVuX2J5X2hhbmRsZV9hdGAuIFRoZXNlIGFyZSB0aGUgb25lcyBJIHJlYWxseSBuZWVkIHRvIGZvY3VzIG9uLiBUaGV5IGNhbiBtYWtlIHRoZSBiZWhhdmlvciBvZiB0aGUgY29yZSBWRlMgY2hhbmdlLgoKVG8gbWFrZSBzdXJlIEkgaGF2ZSBjb3ZlcmVkIGFsbCB0aGUgc2NlbmFyaW9zLCBJIG5lZWQgdG8ga25vdyB3aGVyZSBgZF9vYnRhaW5fYWxpYXNgIGlzIGNhbGxlZCBhY3Jvc3MgdGhlIGtlcm5lbC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgb3ZlcnZpZXcgb2YgaG93IHRoaXMgY2hhbmdlIGltcGFjdHMgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZF9vYnRhaW5fYWxpYXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvYWZmcy9uYW1laS5jPTUyMz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2FmZnMvbmFtZWkuYy01MzQtXHRicmVsc2UoYmgpO1xuZnMvYWZmcy9uYW1laS5jOjUzNTpcdHJldHVybiBkX29idGFpbl9hbGlhcyhwYXJlbnQpO1xuZnMvYWZmcy9uYW1laS5jLTUzNi19XG4tLVxuZnMvYmVmcy9saW51eHZmcy5jPTY2NT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYmVmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2JlZnMvbGludXh2ZnMuYy02NzEtXHRcdFx0ICAgKHVuc2lnbmVkIGxvbmcpYmVmc19pbm8tXHUwMDNlaV9wYXJlbnQuc3RhcnQpO1xuZnMvYmVmcy9saW51eHZmcy5jOjY3MjpcdHJldHVybiBkX29idGFpbl9hbGlhcyhwYXJlbnQpO1xuZnMvYmVmcy9saW51eHZmcy5jLTY3My19XG4tLVxuZnMvYnRyZnMvZXhwb3J0LmM9Nzk9c3RydWN0IGRlbnRyeSAqYnRyZnNfZ2V0X2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2JqZWN0aWQsXG4tLVxuZnMvYnRyZnMvZXhwb3J0LmMtMTAyLVxuZnMvYnRyZnMvZXhwb3J0LmM6MTAzOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFx1MDAyNmlub2RlLVx1MDAzZXZmc19pbm9kZSk7XG5mcy9idHJmcy9leHBvcnQuYy0xMDQtfVxuLS1cbmZzL2J0cmZzL2V4cG9ydC5jPTE1Mj1zdHJ1Y3QgZGVudHJ5ICpidHJmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2J0cmZzL2V4cG9ydC5jLTIyMy1cbmZzL2J0cmZzL2V4cG9ydC5jOjIyNDpcdHJldHVybiBkX29idGFpbl9hbGlhcyhcdTAwMjZpbm9kZS1cdTAwM2V2ZnNfaW5vZGUpO1xuZnMvYnRyZnMvZXhwb3J0LmMtMjI1LWZhaWw6XG4tLVxuZnMvY2VwaC9leHBvcnQuYz0xODk9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBpbm8pXG4tLVxuZnMvY2VwaC9leHBvcnQuYy0yMDctXHR9XG5mcy9jZXBoL2V4cG9ydC5jOjIwODpcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XG5mcy9jZXBoL2V4cG9ydC5jLTIwOS19XG4tLVxuZnMvY2VwaC9leHBvcnQuYz0yMTE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fc25hcGZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2NlcGgvZXhwb3J0LmMtMjQ1LVx0XHR9XG5mcy9jZXBoL2V4cG9ydC5jOjI0NjpcdFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2NlcGgvZXhwb3J0LmMtMjQ3LVx0fVxuLS1cbmZzL2NlcGgvZXhwb3J0LmMtMjk0LVx0Lyogc2VlIGNvbW1lbnRzIGluIGNlcGhfZ2V0X3BhcmVudCgpICovXG5mcy9jZXBoL2V4cG9ydC5jOjI5NTpcdHJldHVybiB1bmxpbmtlZCA/IGRfb2J0YWluX3Jvb3QoaW5vZGUpIDogZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMvY2VwaC9leHBvcnQuYy0yOTYtfVxuLS1cbmZzL2NlcGgvZXhwb3J0LmM9MzIzPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2dldF9wYXJlbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9jZXBoL2V4cG9ydC5jLTM2NS1cbmZzL2NlcGgvZXhwb3J0LmM6MzY2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2NlcGgvZXhwb3J0LmMtMzY3LX1cbi0tXG5mcy9jZXBoL2V4cG9ydC5jPTM2OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY2VwaF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2NlcGgvZXhwb3J0LmMtNDA2LVx0XHRlbHNlXG5mcy9jZXBoL2V4cG9ydC5jOjQwNzpcdFx0XHRkbiA9IGRfb2J0YWluX2FsaWFzKGRpcik7XG5mcy9jZXBoL2V4cG9ydC5jLTQwOC1cdH0gZWxzZSB7XG4tLVxuZnMvZGNhY2hlLmM9MjIzOT1FWFBPUlRfU1lNQk9MKGRfbWFrZV9yb290KTtcbmZzL2RjYWNoZS5jLTIyNDAtXG5mcy9kY2FjaGUuYzoyMjQxOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuZnMvZGNhY2hlLmMtMjI0Mi17XG4tLVxuZnMvZGNhY2hlLmMtMjMwMi0vKipcbmZzL2RjYWNoZS5jOjIzMDM6ICogZF9vYnRhaW5fYWxpYXMgLSBmaW5kIG9yIGFsbG9jYXRlIGEgRElTQ09OTkVDVEVEIGRlbnRyeSBmb3IgYSBnaXZlbiBpbm9kZVxuZnMvZGNhY2hlLmMtMjMwNC0gKiBAaW5vZGU6IGlub2RlIHRvIGFsbG9jYXRlIHRoZSBkZW50cnkgZm9yXG4tLVxuZnMvZGNhY2hlLmMtMjMxOS0gKi9cbmZzL2RjYWNoZS5jOjIzMjA6c3RydWN0IGRlbnRyeSAqZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSlcbmZzL2RjYWNoZS5jLTIzMjEte1xuZnMvZGNhY2hlLmM6MjMyMjpcdHJldHVybiBfX2Rfb2J0YWluX2FsaWFzKGlub2RlLCB0cnVlKTtcbmZzL2RjYWNoZS5jLTIzMjMtfVxuZnMvZGNhY2hlLmM6MjMyNDpFWFBPUlRfU1lNQk9MKGRfb2J0YWluX2FsaWFzKTtcbmZzL2RjYWNoZS5jLTIzMjUtXG4tLVxuZnMvZGNhY2hlLmM9MjM0MT1zdHJ1Y3QgZGVudHJ5ICpkX29idGFpbl9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9kY2FjaGUuYy0yMzQyLXtcbmZzL2RjYWNoZS5jOjIzNDM6XHRyZXR1cm4gX19kX29idGFpbl9hbGlhcyhpbm9kZSwgZmFsc2UpO1xuZnMvZGNhY2hlLmMtMjM0NC19XG4tLVxuZnMvZXJvZnMvaXNoYXJlLmM9MzM9Ym9vbCBlcm9mc19pc2hhcmVfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2Vyb2ZzL2lzaGFyZS5jLTcxLVx0fVxuZnMvZXJvZnMvaXNoYXJlLmM6NzI6XHRzZCA9IGRfb2J0YWluX2FsaWFzKHNpKTsgLyogZGlzY29ubmVjdGVkIGRlbnRpZXMgZm9yIHNoYXJlZGlub2RlcyAqL1xuZnMvZXJvZnMvaXNoYXJlLmMtNzMtXHRpZiAoSVNfRVJSKHNkKSlcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTU5Nj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXJvZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02MDItXG5mcy9lcm9mcy9zdXBlci5jOjYwMzpcdHJldHVybiBkX29idGFpbl9hbGlhcyhlcm9mc19pZ2V0KHNiLFxuZnMvZXJvZnMvc3VwZXIuYy02MDQtXHRcdCgodTY0KWZpZC1cdTAwM2VyYXdbMF0gXHUwMDNjXHUwMDNjIDMyKSB8IGZpZC1cdTAwM2VyYXdbMV0pKTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTYwNz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXJvZnNfZmhfdG9fcGFyZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZXJvZnMvc3VwZXIuYy02MTItXG5mcy9lcm9mcy9zdXBlci5jOjYxMzpcdHJldHVybiBkX29idGFpbl9hbGlhcyhlcm9mc19pZ2V0KHNiLFxuZnMvZXJvZnMvc3VwZXIuYy02MTQtXHRcdCgodTY0KWZpZC1cdTAwM2VyYXdbM10gXHUwMDNjXHUwMDNjIDMyKSB8IGZpZC1cdTAwM2VyYXdbNF0pKTtcbi0tXG5mcy9lcm9mcy9zdXBlci5jPTYxNz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXJvZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9lcm9mcy9zdXBlci5jLTYyNS1cdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbmZzL2Vyb2ZzL3N1cGVyLmM6NjI2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGVyb2ZzX2lnZXQoY2hpbGQtXHUwMDNlZF9zYiwgbmlkKSk7XG5mcy9lcm9mcy9zdXBlci5jLTYyNy19XG4tLVxuZnMvZXh0Mi9uYW1laS5jPTgwPXN0cnVjdCBkZW50cnkgKmV4dDJfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9leHQyL25hbWVpLmMtODgtXG5mcy9leHQyL25hbWVpLmM6ODk6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXh0Ml9pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIGlubykpO1xuZnMvZXh0Mi9uYW1laS5jLTkwLX0gXG4tLVxuZnMvZXh0NC9uYW1laS5jPTE4MTg9c3RydWN0IGRlbnRyeSAqZXh0NF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2V4dDQvbmFtZWkuYy0xODM3LVxuZnMvZXh0NC9uYW1laS5jOjE4Mzg6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXh0NF9pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIGlubywgRVhUNF9JR0VUX05PUk1BTCkpO1xuZnMvZXh0NC9uYW1laS5jLTE4MzktfVxuLS1cbmZzL2YyZnMvbmFtZWkuYz00NzQ9c3RydWN0IGRlbnRyeSAqZjJmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2YyZnMvbmFtZWkuYy00ODMtXHR9XG5mcy9mMmZzL25hbWVpLmM6NDg0Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGYyZnNfaWdldChjaGlsZC1cdTAwM2VkX3NiLCBpbm8pKTtcbmZzL2YyZnMvbmFtZWkuYy00ODUtfVxuLS1cbmZzL2ZhdC9uZnMuYz0xNTU9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhdF9maF90b19kZW50cnlfbm9zdGFsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2ZhdC9uZnMuYy0xNzgtXG5mcy9mYXQvbmZzLmM6MTc5Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2ZhdC9uZnMuYy0xODAtfVxuLS1cbmZzL2ZhdC9uZnMuYz0xOTM9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhdF9maF90b19wYXJlbnRfbm9zdGFsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2ZhdC9uZnMuYy0yMTEtXG5mcy9mYXQvbmZzLmM6MjEyOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2ZhdC9uZnMuYy0yMTMtfVxuLS1cbmZzL2ZhdC9uZnMuYz0yNzA9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhdF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkX2Rpcilcbi0tXG5mcy9mYXQvbmZzLmMtMjg1LVxuZnMvZmF0L25mcy5jOjI4NjpcdHJldHVybiBkX29idGFpbl9hbGlhcyhwYXJlbnRfaW5vZGUpO1xuZnMvZmF0L25mcy5jLTI4Ny19XG4tLVxuZnMvZnVzZS9pbm9kZS5jPTEwNTQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZ1c2VfZ2V0X2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuLS1cbmZzL2Z1c2UvaW5vZGUuYy0xMDg3LVxuZnMvZnVzZS9pbm9kZS5jOjEwODg6XHRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2Z1c2UvaW5vZGUuYy0xMDg5LVx0aWYgKCFJU19FUlIoZW50cnkpIFx1MDAyNlx1MDAyNiBnZXRfbm9kZV9pZChpbm9kZSkgIT0gRlVTRV9ST09UX0lEKVxuLS1cbmZzL2Z1c2UvaW5vZGUuYz0xMTYxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmdXNlX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXG4tLVxuZnMvZnVzZS9pbm9kZS5jLTExODAtXG5mcy9mdXNlL2lub2RlLmM6MTE4MTpcdHBhcmVudCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2Z1c2UvaW5vZGUuYy0xMTgyLVx0aWYgKCFJU19FUlIocGFyZW50KSBcdTAwMjZcdTAwMjYgZ2V0X25vZGVfaWQoaW5vZGUpICE9IEZVU0VfUk9PVF9JRClcbi0tXG5mcy9nZnMyL2V4cG9ydC5jPTEyNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuZnMvZ2ZzMi9leHBvcnQuYy0xMjcte1xuZnMvZ2ZzMi9leHBvcnQuYzoxMjg6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZ2ZzMl9sb29rdXBpKGRfaW5vZGUoY2hpbGQpLCBcdTAwMjZnZnMyX3Fkb3Rkb3QsIDEpKTtcbmZzL2dmczIvZXhwb3J0LmMtMTI5LX1cbi0tXG5mcy9nZnMyL2V4cG9ydC5jPTEzMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9nZXRfZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvZ2ZzMi9leHBvcnQuYy0xNDAtXHRcdFx0XHQgICAgR0ZTMl9CTEtTVF9ESU5PREUpO1xuZnMvZ2ZzMi9leHBvcnQuYzoxNDE6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMvZ2ZzMi9leHBvcnQuYy0xNDItfVxuLS1cbmZzL2lzb2ZzL2V4cG9ydC5jPTIwPWlzb2ZzX2V4cG9ydF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvaXNvZnMvZXhwb3J0LmMtMzUtXHR9XG5mcy9pc29mcy9leHBvcnQuYzozNjpcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XG5mcy9pc29mcy9leHBvcnQuYy0zNy19XG4tLVxuZnMvaXNvZnMvZXhwb3J0LmM9NDQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmlzb2ZzX2V4cG9ydF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL2lzb2ZzL2V4cG9ydC5jLTEwOS1cbmZzL2lzb2ZzL2V4cG9ydC5jOjExMDpcdHJ2ID0gZF9vYnRhaW5fYWxpYXMoaXNvZnNfaWdldChjaGlsZF9pbm9kZS1cdTAwM2VpX3NiLCBwYXJlbnRfYmxvY2ssXG5mcy9pc29mcy9leHBvcnQuYy0xMTEtXHRcdFx0XHQgICAgIHBhcmVudF9vZmZzZXQpKTtcbi0tXG5mcy9qZmZzMi9zdXBlci5jPTEzNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqamZmczJfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9qZmZzMi9zdXBlci5jLTE0OS1cbmZzL2pmZnMyL3N1cGVyLmM6MTUwOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGpmZnMyX2lnZXQoY2hpbGQtXHUwMDNlZF9zYiwgcGlubykpO1xuZnMvamZmczIvc3VwZXIuYy0xNTEtfVxuLS1cbmZzL2pmcy9uYW1laS5jPTE1MTM9c3RydWN0IGRlbnRyeSAqamZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2pmcy9uYW1laS5jLTE1MTktXG5mcy9qZnMvbmFtZWkuYzoxNTIwOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGpmc19pZ2V0KGRlbnRyeS1cdTAwM2VkX3NiLCBwYXJlbnRfaW5vKSk7XG5mcy9qZnMvbmFtZWkuYy0xNTIxLX1cbi0tXG5mcy9rZXJuZnMvbW91bnQuYz05Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19rZXJuZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMva2VybmZzL21vdW50LmMtMTQyLVx0a2VybmZzX3B1dChrbik7XG5mcy9rZXJuZnMvbW91bnQuYzoxNDM6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMva2VybmZzL21vdW50LmMtMTQ0LX1cbi0tXG5mcy9rZXJuZnMvbW91bnQuYz0xNjA9c3RhdGljIHN0cnVjdCBkZW50cnkgKmtlcm5mc19nZXRfcGFyZW50X2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy9rZXJuZnMvbW91bnQuYy0xNjUtXHRndWFyZChyd3NlbV9yZWFkKShcdTAwMjZyb290LVx1MDAzZWtlcm5mc19yd3NlbSk7XG5mcy9rZXJuZnMvbW91bnQuYzoxNjY6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoa2VybmZzX2dldF9pbm9kZShjaGlsZC1cdTAwM2VkX3NiLCBrZXJuZnNfcGFyZW50KGtuKSkpO1xuZnMva2VybmZzL21vdW50LmMtMTY3LX1cbi0tXG5mcy9saWJmcy5jPTE0ODc9c3RydWN0IGRlbnRyeSAqZ2VuZXJpY19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxuLS1cbmZzL2xpYmZzLmMtMTUwMi1cbmZzL2xpYmZzLmM6MTUwMzpcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XG5mcy9saWJmcy5jLTE1MDQtfVxuLS1cbmZzL2xpYmZzLmM9MTUyMD1zdHJ1Y3QgZGVudHJ5ICpnZW5lcmljX2ZoX3RvX3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlkICpmaWQsXG4tLVxuZnMvbGliZnMuYy0xNTM1LVxuZnMvbGliZnMuYzoxNTM2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL2xpYmZzLmMtMTUzNy19XG4tLVxuZnMvbmZzL2V4cG9ydC5jPTY0PW5mc19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxuLS1cbmZzL25mcy9leHBvcnQuYy0xMTUtb3V0X2ZvdW5kOlxuZnMvbmZzL2V4cG9ydC5jOjExNjpcdGRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL25mcy9leHBvcnQuYy0xMTctb3V0X2ZyZWVfZmF0dHI6XG4tLVxuZnMvbmZzL2V4cG9ydC5jPTEyND1uZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4tLVxuZnMvbmZzL2V4cG9ydC5jLTE0OC1cdHBpbm9kZSA9IG5mc19maGdldChzYiwgXHUwMDI2ZmgsIGZhdHRyKTtcbmZzL25mcy9leHBvcnQuYzoxNDk6XHRwYXJlbnQgPSBkX29idGFpbl9hbGlhcyhwaW5vZGUpO1xuZnMvbmZzL2V4cG9ydC5jLTE1MC1vdXQ6XG4tLVxuZnMvbmlsZnMyL25hbWVpLmM9NDY0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpuaWxmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL25pbGZzMi9uYW1laS5jLTQ3NS1cbmZzL25pbGZzMi9uYW1laS5jOjQ3NjpcdHJldHVybiBkX29idGFpbl9hbGlhcyhuaWxmc19pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIHJvb3QsIGlubykpO1xuZnMvbmlsZnMyL25hbWVpLmMtNDc3LX1cbi0tXG5mcy9uaWxmczIvbmFtZWkuYz00Nzk9c3RhdGljIHN0cnVjdCBkZW50cnkgKm5pbGZzX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGNubyxcbi0tXG5mcy9uaWxmczIvbmFtZWkuYy01MDAtXHR9XG5mcy9uaWxmczIvbmFtZWkuYzo1MDE6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMvbmlsZnMyL25hbWVpLmMtNTAyLX1cbi0tXG5mcy9udGZzL25hbWVpLmM9MTU4OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbnRmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkX2RlbnQpXG4tLVxuZnMvbnRmcy9uYW1laS5jLTE2MzYtXG5mcy9udGZzL25hbWVpLmM6MTYzNzpcdHJldHVybiBkX29idGFpbl9hbGlhcyhudGZzX2lnZXQodmktXHUwMDNlaV9zYiwgcGFyZW50X2lubykpO1xuZnMvbnRmcy9uYW1laS5jLTE2MzgtfVxuLS1cbmZzL250ZnMzL25hbWVpLmM9Mzc5PXN0cnVjdCBkZW50cnkgKm50ZnMzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXG4tLVxuZnMvbnRmczMvbmFtZWkuYy0zOTMtXG5mcy9udGZzMy9uYW1laS5jOjM5NDpcdFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFxuZnMvbnRmczMvbmFtZWkuYy0zOTUtXHRcdFx0bnRmc19pZ2V0NShpbm9kZS1cdTAwM2VpX3NiLCBcdTAwMjZmbmFtZS1cdTAwM2Vob21lLCBOVUxMKSk7XG4tLVxuZnMvb2NmczIvZXhwb3J0LmM9MzQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vY2ZzMi9leHBvcnQuYy0xMjAtXG5mcy9vY2ZzMi9leHBvcnQuYzoxMjE6XHRyZXN1bHQgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7XG5mcy9vY2ZzMi9leHBvcnQuYy0xMjItXHRpZiAoSVNfRVJSKHJlc3VsdCkpXG4tLVxuZnMvb2NmczIvZXhwb3J0LmM9MTMwPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvY2ZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxuLS1cbmZzL29jZnMyL2V4cG9ydC5jLTE3OS1cbmZzL29jZnMyL2V4cG9ydC5jOjE4MDpcdHBhcmVudCA9IGRfb2J0YWluX2FsaWFzKG9jZnMyX2lnZXQoT0NGUzJfU0IoZGlyLVx1MDAzZWlfc2IpLCBibGtubywgMCwgMCkpO1xuZnMvb2NmczIvZXhwb3J0LmMtMTgxLVxuLS1cbmZzL29yYW5nZWZzL3N1cGVyLmM9MzE0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvcmFuZ2Vmc19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbi0tXG5mcy9vcmFuZ2Vmcy9zdXBlci5jLTMzMC1cbmZzL29yYW5nZWZzL3N1cGVyLmM6MzMxOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKG9yYW5nZWZzX2lnZXQoc2IsIFx1MDAyNnJlZm4pKTtcbmZzL29yYW5nZWZzL3N1cGVyLmMtMzMyLX1cbi0tXG5mcy9vdmVybGF5ZnMvZXhwb3J0LmM9Mjk0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvdmxfb2J0YWluX2FsaWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvb3ZlcmxheWZzL2V4cG9ydC5jLTMzMC1cbmZzL292ZXJsYXlmcy9leHBvcnQuYzozMzE6XHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xuZnMvb3ZlcmxheWZzL2V4cG9ydC5jLTMzMi19XG4tLVxuZnMvc3F1YXNoZnMvZXhwb3J0LmM9NjY9c3RhdGljIHN0cnVjdCBkZW50cnkgKnNxdWFzaGZzX2V4cG9ydF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4tLVxuZnMvc3F1YXNoZnMvZXhwb3J0LmMtNzUtXHRpZiAoaW5vIFx1MDAzZT0gMClcbmZzL3NxdWFzaGZzL2V4cG9ydC5jOjc2Olx0XHRkZW50cnkgPSBkX29idGFpbl9hbGlhcyhzcXVhc2hmc19pZ2V0KHNiLCBpbm8sIGlub19udW0pKTtcbmZzL3NxdWFzaGZzL2V4cG9ydC5jLTc3LVxuLS1cbmZzL3VkZi9uYW1laS5jPTkxNT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdWRmX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXG4tLVxuZnMvdWRmL25hbWVpLmMtOTI2LVx0dWRmX2ZpaXRlcl9yZWxlYXNlKFx1MDAyNml0ZXIpO1xuZnMvdWRmL25hbWVpLmM6OTI3Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKHVkZl9pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIFx1MDAyNnRsb2MpKTtcbmZzL3VkZi9uYW1laS5jLTkyOC19XG4tLVxuZnMvdWRmL25hbWVpLmM9OTMxPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZGZfbmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgYmxvY2ssXG4tLVxuZnMvdWRmL25hbWVpLmMtOTUwLVx0fVxuZnMvdWRmL25hbWVpLmM6OTUxOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL3VkZi9uYW1laS5jLTk1Mi19XG4tLVxuZnMvdWZzL3N1cGVyLmM9MTI5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcbi0tXG5mcy91ZnMvc3VwZXIuYy0xMzUtXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuZnMvdWZzL3N1cGVyLmM6MTM2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKHVmc19pZ2V0KGNoaWxkLVx1MDAzZWRfc2IsIGlubykpO1xuZnMvdWZzL3N1cGVyLmMtMTM3LX1cbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jPTE3Mj14ZnNfZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jLTE5MS1cbmZzL3hmcy94ZnNfZXhwb3J0LmM6MTkyOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL3hmcy94ZnNfZXhwb3J0LmMtMTkzLX1cbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jPTE5Nj14ZnNfZnNfZmhfdG9fcGFyZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jLTIxNS1cbmZzL3hmcy94ZnNfZXhwb3J0LmM6MjE2Olx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcbmZzL3hmcy94ZnNfZXhwb3J0LmMtMjE3LX1cbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jPTIyMD14ZnNfZnNfZ2V0X3BhcmVudChcbi0tXG5mcy94ZnMveGZzX2V4cG9ydC5jLTIyOS1cbmZzL3hmcy94ZnNfZXhwb3J0LmM6MjMwOlx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFZGU19JKGNpcCkpO1xuZnMveGZzL3hmc19leHBvcnQuYy0yMzEtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzA3OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuCgoqKkludmVzdGlnYXRpbmcgdGhlIGBkZW50cnlfdW5saW5rX2lub2RlYCBGdW5jdGlvbiBDYWxscyoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGZvciBgZGVudHJ5X3VubGlua19pbm9kZWAuIEZpcnN0LCBJIHJlbWVtYmVyIGl0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uIHJlc2lkaW5nIGluIGBmcy9kY2FjaGUuY2AuIFRoYXQgbWVhbnMgdGhlIHNjb3BlIGlzIGxpa2VseSBsaW1pdGVkIHdpdGhpbiB0aGF0IGZpbGUsIHdoaWNoIG1ha2VzIHRoZSBodW50IHBvdGVudGlhbGx5IGVhc2llci4gTm93LCBsZXQmIzM5O3MgdHJhY2UgdGhlIGNhbGxlcnMgd2l0aGluIGBmcy9kY2FjaGUuY2AgaXRzZWxmLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgZXhhY3RseSB3aGVyZSBpdCYjMzk7cyBiZWluZyBpbnZva2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGVudHJ5X3VubGlua19pbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz00NTk9c3RhdGljIGJvb2wgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9kY2FjaGUuYy00NjctICovXG5mcy9kY2FjaGUuYzo0Njg6c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuZnMvZGNhY2hlLmMtNDY5LVx0X19yZWxlYXNlcyhkZW50cnktXHUwMDNlZF9sb2NrKVxuLS1cbmZzL2RjYWNoZS5jPTgxMj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZGVudHJ5X2tpbGwoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTgzOC1cdGlmIChkZW50cnktXHUwMDNlZF9pbm9kZSlcbmZzL2RjYWNoZS5jOjgzOTpcdFx0ZGVudHJ5X3VubGlua19pbm9kZShkZW50cnkpO1xuZnMvZGNhY2hlLmMtODQwLVx0ZWxzZVxuLS1cbmZzL2RjYWNoZS5jPTI3MDg9dm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTI3MjAtXHRcdGRlbnRyeS1cdTAwM2VkX2ZsYWdzIFx1MDAyNj0gfkRDQUNIRV9DQU5UX01PVU5UO1xuZnMvZGNhY2hlLmM6MjcyMTpcdFx0ZGVudHJ5X3VubGlua19pbm9kZShkZW50cnkpO1xuZnMvZGNhY2hlLmMtMjcyMi1cdH0gZWxzZSB7XG4tLVxuZnMva2VybmZzL2Rpci5jPTEyMzQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKmtlcm5mc19pb3BfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLFxuLS1cbmZzL2tlcm5mcy9kaXIuYy0xMjY1LVx0ICogVGhlIG5lZ2F0aXZlIGRlbnRyeSBjYW4gYmUgY3JlYXRlZCBpbiBrZXJuZnNfaW9wX2xvb2t1cCgpXG5mcy9rZXJuZnMvZGlyLmM6MTI2NjpcdCAqIG9yIHRyYW5zZm9ybXMgZnJvbSBwb3NpdGl2ZSBkZW50cnkgaW4gZGVudHJ5X3VubGlua19pbm9kZSgpXG5mcy9rZXJuZnMvZGlyLmMtMTI2Ny1cdCAqIGNhbGxlZCBmcm9tIHZmc19ybWRpcigpLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzcwNQoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgZGNhY2hlLmMgU3ltYm9sIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBmcy9kY2FjaGUuY2AgY29kZS4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgd2hpY2ggZnVuY3Rpb25zIGhhdmUgYmVlbiBtb2RpZmllZC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgbG9va2luZyBhdDogYGRlbnRyeV91bmxpbmtfaW5vZGVgIChzdGF0aWMpLCBgX19kX29idGFpbl9hbGlhc2AgKHN0YXRpYyksIGBkX29idGFpbl9hbGlhc2AgKGV4cG9ydGVkKSwgYGRfb2J0YWluX3Jvb3RgLCBgZF9kZWxldGVgIChjYWxscyBgZGVudHJ5X3VubGlua19pbm9kZWApLCBgZGVudHJ5X2tpbGxgIChzdGF0aWMsIGNhbGxlZCBieSBgZHB1dGApLCBhbmQgYGlub2RlX25vdGlmeV9kZWFkYCAoc3RhdGljIGhlbHBlcikuIAoKTm93LCBhIHF1aWNrIHNhbml0eSBjaGVjay4gQ2FuIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGEgYC5jYCBmaWxlIGV2ZW4gYmUgaW5jbHVkZWQgYXMgc3ltYm9scz8gQWgsIHllcywgdGhleSBzaG91bGQgYmUsIHVubGVzcyB0aGUgY29tcGlsZXIgaW5saW5lcyB0aGVtLCB3aGljaCBpcyByYXJlIGZvciBmdW5jdGlvbnMgd2l0aCBtYW55IGNhbGxzLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBpbmNsdWRlIGJvdGggdGhlIHN0YXRpYyBmdW5jdGlvbiBhbmQgdGhlIGV4cG9ydGVkIGVudHJ5cG9pbnQuLiBJIHNob3VsZCBwcm9iYWJseSB2ZXJpZnkgd2hpY2ggb25lcyBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZS4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjb25maXJtaW5nIHRoYXQgd2UmIzM5O3ZlIGdvdDogYGRfb2J0YWluX2FsaWFzYCwgYF9fZF9vYnRhaW5fYWxpYXNgLCBgZGVudHJ5X3VubGlua19pbm9kZWAsIGBkX2RlbGV0ZWAsIGFuZCBgZF9vYnRhaW5fcm9vdGAuCgpXYWl0IGEgbWludXRlLCBhcmUgd2UgbWlzc2luZyBzb21ldGhpbmcgb2J2aW91cywgbGlrZSBmaWxlIGhhbmRsZSBzeXNjYWxscyBvciBmc25vdGlmeSBmdW5jdGlvbnM/IE9rLCBsZXQmIzM5O3Mgc3RlcCBiYWNrLCBhbmQgZm9jdXMgb24gdGhlIGtleSBtb2RpZmljYXRpb25zLiBGcm9tIHRoYXQgZmlyc3QgbGlzdCwgdGhlIGNvcmUgZnVuY3Rpb25zIGJlaW5nIHRvdWNoZWQgYXJlIGNsZWFybHkgYF9fZF9vYnRhaW5fYWxpYXNgLCBgZF9vYnRhaW5fYWxpYXNgLCBhbmQgYGRlbnRyeV91bmxpbmtfaW5vZGVgLgoKTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gYGZzL2RjYWNoZS5jYCBpcyBjb21waWxlZCBkaXJlY3RseSBpbnRvIGB2bWxpbnV4YCDigJMgaXQmIzM5O3MgYSBjb3JlIGZpbGVzeXN0ZW0gb2JqZWN0LCBhcyBpbmRpY2F0ZWQgYnkgdGhlIGBvYmoteSAmIzQzOz0gZGNhY2hlLm9gIGluIHRoZSBgZnMvTWFrZWZpbGVgLiBTbywgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucywgbGlrZSBgQ09ORklHX0ZIQU5ETEVgIG9yIGBDT05GSUdfRVhQT1JURlNgLCBuZWVkZWQgdG8gKmV4ZXJjaXNlKiBgZF9vYnRhaW5fYWxpYXNgIHRocm91Z2ggc3lzY2FsbHM/IEkga25vdyB0aGF0IGBvcGVuX2J5X2hhbmRsZV9hdGAgcmVxdWlyZXMgYENPTkZJR19GSEFORExFYC4gSSB3aWxsIGhhdmUgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXM6IGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBgZnMvS2NvbmZpZ2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBGSEFORExFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xNzc5PWNvbmZpZyBTR0VUTUFTS19TWVNDQUxMXG4tLVxuaW5pdC9LY29uZmlnLTE3ODgtXG5pbml0L0tjb25maWc6MTc4OTpjb25maWcgRkhBTkRMRVxuaW5pdC9LY29uZmlnLTE3OTAtXHRib29sIFwmIzM0O29wZW4gYnkgZmhhbmRsZSBzeXNjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ2NjAKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipRdWljayBBdWRpdCBvZiBGU05PVElGWSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSB3ZSBnZXQgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gY2lyY2xlIGJhY2sgdG8gYEZTTk9USUZZYC4gV2UmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gWCBhbmQgWSwgYnV0IEkmIzM5O3ZlIGxlYXJuZWQgdGhlIGhhcmQgd2F5IHRoYXQgb3Zlcmxvb2tpbmcgZmlsZXN5c3RlbSBub3RpZmljYXRpb25zIGNhbiBiaXRlIHlvdSBsYXRlci4gSXQmIzM5O3MgYSBjbGFzc2ljIGdvdGNoYS4gSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBjdXJyZW50IHNldHVwLCBwYXJ0aWN1bGFybHkgaG93IHdlJiMzOTtyZSBtb25pdG9yaW5nIHRoZSByZWxldmFudCBkaXJlY3RvcmllcyBhbmQgd2hhdCB0cmlnZ2VycyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpc27igJl0IGEgYm90dGxlbmVjayBvciwgY29udmVyc2VseSwgbGV0dGluZyBjcml0aWNhbCBldmVudHMgc2xpcCB0aHJvdWdoIHRoZSBjcmFja3MuIFRpbWUgZm9yIGEgcXVpY2sgYXVkaXQuIFdlIG5lZWQgdG8gY29uZmlybTogV2hhdCYjMzk7cyB0aGUgcG9sbGluZyBpbnRlcnZhbD8gQXJlIHdlIHVzaW5nIHJlY3Vyc2l2ZSB3YXRjaGVzPyBXaGF0IGtpbmQgb2YgZmlsdGVycyBhcmUgaW4gcGxhY2U/IEFyZSB3ZSBjb3JyZWN0bHkgY29uZmlndXJlZCBmb3IgdGhlIHNjYWxlIG9mIHRoaXMgcHJvamVjdD8gTWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBzZXR0aW5ncyBjb3VsZCBiZSBhIG1hc3NpdmUgdGltZS1zYXZlciwgc28gYSBzbWFsbCBjaGVjayBub3cgY2FuIHNhdmUgYSBsYXJnZSBjaHVuayBvZiB3b3JrIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRlNOT1RJRlkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL25vdGlmeS9LY29uZmlnOjI6Y29uZmlnIEZTTk9USUZZXG5mcy9ub3RpZnkvS2NvbmZpZy0zLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1NwoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTm90aWZpY2F0aW9uIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIHplcm8gaW4gb24gdGhlIGBmcy9ub3RpZnkvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXJvdW5kIGxpbmUgMS4gSSYjMzk7bSBwcm9iYWJseSBhZnRlciB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIG5vdGlmaWNhdGlvbiBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyBsaWtlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgdGhlIGtlcm5lbCBidWlsZCBsZXZlbCwgcGVyaGFwcyB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMgb24gb3RoZXIgZmVhdHVyZXMsIG9yIG1heWJlIGp1c3QgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgYnJvYWQgb3ZlcnZpZXcgb2YgdGhlIGV4cG9zZWQgY29udHJvbHMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoZSBtYWluIGBjb25maWdgIHN5bWJvbCBmb3IgYGZzbm90aWZ5YCwgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIHJlbGF0aW9uc2hpcHMgYW5kIGNvbmRpdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoYXQuIFRpbWUgdG8gY29uZmlybSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoaXMgcGFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvbm90aWZ5L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRjb25maWcgRlNOT1RJRllcbiAgIDM6XHRcdGRlZl9ib29sIG5cbiAgIDQ6XHRcbiAgIDU6XHRzb3VyY2UgXCYjMzQ7ZnMvbm90aWZ5L2Rub3RpZnkvS2NvbmZpZ1wmIzM0O1xuICAgNjpcdHNvdXJjZSBcJiMzNDtmcy9ub3RpZnkvaW5vdGlmeS9LY29uZmlnXCYjMzQ7XG4gICA3Olx0c291cmNlIFwmIzM0O2ZzL25vdGlmeS9mYW5vdGlmeS9LY29uZmlnXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1Mjc2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZnNub3RpZnlfaW5vZGVyZW1vdmVgIERlZmluaXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHRyYWNrIGRvd24gdGhlIGRlZmluaXRpb24gb2YgYGZzbm90aWZ5X2lub2RlcmVtb3ZlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGl2ZSBpbnRvIHRoZSBjb3JlIGhlYWRlcnMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBmcy9ub3RpZnlgIHN1YnN5c3RlbS4gSSYjMzk7bSBnb2luZyB0byBjaGVjayBgZnMvbm90aWZ5L2Zzbm90aWZ5LmhgIGFzIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGhlYWRlciBwcm9iYWJseSBpbmNsdWRlcyB0aGUgZGVjbGFyYXRpb25zIGZvciB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gbm90aWZpY2F0aW9uIGV2ZW50cy4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBkZWZpbmVkIHRoZXJlLCBvciBpdCB3aWxsIHBvaW50IG1lIHRvd2FyZHMgdGhlIGZpbGUgdGhhdCBkb2VzIGRlZmluZSBpdC4gSWYgbm90LCBJJiMzOTtsbCBuZWVkIHRvIGJyb2FkZW4gbXkgc2VhcmNoLCBidXQgdGhpcyBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgaW5pdGlhbCBsb2NhdGlvbi4gSSYjMzk7bSBhc3N1bWluZyBhIGZhaXJseSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgc3RydWN0dXJlIGhlcmUsIG9mIGNvdXJzZS4gTGV0JiMzOTtzIHNlZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmc25vdGlmeV9pbm9kZXJlbW92ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9kY2FjaGUuYz00Njg9c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuLS1cbmZzL2RjYWNoZS5jLTQ4Ny1cdGlmIChub3RpZnlfZGVhZClcbmZzL2RjYWNoZS5jOjQ4ODpcdFx0ZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpO1xuZnMvZGNhY2hlLmMtNDg5LVx0aWYgKGRlbnRyeS1cdTAwM2VkX29wIFx1MDAyNlx1MDAyNiBkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2lwdXQpXG4tLVxuaW5jbHVkZS9saW51eC9mc25vdGlmeS5oPTMwMj1zdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfbW50bnNfZGVsZXRlKHN0cnVjdCBtbnRfbmFtZXNwYWNlICptbnRucylcbi0tXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgtMzA3LS8qXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5Lmg6MzA4OiAqIGZzbm90aWZ5X2lub2RlcmVtb3ZlIC0gYW4gaW5vZGUgaXMgZ29pbmcgYXdheVxuaW5jbHVkZS9saW51eC9mc25vdGlmeS5oLTMwOS0gKi9cbmluY2x1ZGUvbGludXgvZnNub3RpZnkuaDozMTA6c3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2lub2RlcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgtMzExLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NjQKCQkJCQkJCW91dHB1dDogMTgzCgkJCQkJCQl0aG91Z2h0czogNjg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgQ29uZmlndXJhdGlvbiBSYXRpb25hbGUqKgoKT2theSwgbGV0JiMzOTtzIG5haWwgZG93biB0aGlzIGZ1enppbmcgc2V0dXAuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3MgYXJlIGVuYWJsZWQuIExldCYjMzk7cyBzdGFydCBieSB2ZXJpZnlpbmcgdGhhdCBgRlNOT1RJRllgIGlzIHNlbGVjdGVkIGJ5IGBJTk9USUZZX1VTRVJgIGFuZCBgRkFOT1RJRllgLCBhbmQgeWVzLCB0aGUgS2NvbmZpZyBmaWxlcyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVuLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIG90aGVyIGNvcmUgY29uZmlncyBhcmUgcmVsZXZhbnQgYW5kIGluIHRoaXMgY2FzZSwgYEZIQU5ETEVgLCBgRlNOT1RJRllgLCBgSU5PVElGWV9VU0VSYCwgYW5kIGBGQU5PVElGWWAgYXJlIHRoZSBvbmVzIHdlJiMzOTtyZSB0YXJnZXRpbmcuCgpOb3csIGZvciB0aGUgY3JpdGljYWwgcGFydDogdGhlIGZ1enppbmcgc3ltYm9scy4gSSYjMzk7dmUgZ290IHRvIGJlIHNtYXJ0IGFib3V0IHRoaXMgYW5kIHNlbGVjdCBmdW5jdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgZW5vdWdoIHRvIGJlIHRhcmdldGVkIGJ1dCBub3Qgc28gdWJpcXVpdG91cyB0aGF0IHRoZXkgb3ZlcndoZWxtIHRoZSBmdXp6ZXIuIE15IGluaXRpYWwgY2FuZGlkYXRlcyBhcmU6IGBfX2Rfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX3Jvb3RgLCBhbmQgYGRlbnRyeV91bmxpbmtfaW5vZGVgLiBBcmUgdGhleSBnb29kIGNob2ljZXM/IGBkX29idGFpbl9hbGlhc2AgYW5kIGBfX2Rfb2J0YWluX2FsaWFzYCBhcmUgdXNlZCBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3Vwcywgd2hpY2ggaXMgcHJvbWlzaW5nLiBgZGVudHJ5X3VubGlua19pbm9kZWAgaXMgbGlua2VkIHRvIHVubGlua2luZy9kZWxldGluZywgYW5kIHRoaXMgaXMgd2hhdCB3ZSYjMzk7cmUgdGFyZ2V0aW5nLiBZZXMsIHRoZXNlIGxvb2sgbGlrZSBnb29kIHRhcmdldHMuCgpOZXh0LCBJJiMzOTtsbCByZXZpc2l0IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcmVmYWN0b3Jpbmcgd29yayBhcm91bmQgaGFuZGxpbmcgdW5saW5rZWQgaW5vZGVzIGFuZCBmc25vdGlmeSBldmVudHMgZml0cyB0aGUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgVkZTIGNvcmUgbG9naWMuIExvb2tzIGdvb2Q7IHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBvbiBmaWxlIGhhbmRsZSBsb29rdXAgYW5kIGVuc3VyaW5nIGBmc25vdGlmeWAgZXZlbnRzIGFyZSBjb3JyZWN0LiBTbywgeWVzLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuCgpGaW5hbGx5LCBsZXQmIzM5O3Mgd3JhcCB0aGlzIHVwIHdpdGggYSBmaW5hbCBjaGVjayBvZiBhbGwgaW5wdXRzOgoqICAgYFdvcnRoRnV6emluZ2A6IGB0cnVlYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgbG9naWMgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gcmV2aXZpbmcgZGVhZCBpbm9kZXMgYW5kIGVuc3VyZXMgY29ycmVjdCBgZnNub3RpZnlgIGV2ZW50cy4gV2Ugd2FudCB0byBmdXp6IGZpbGUgaGFuZGxlIGxvb2t1cHMgYW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy4KKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0ZIQU5ETEUmIzM0OywgJiMzNDtGU05PVElGWSYjMzQ7LCAmIzM0O0lOT1RJRllfVVNFUiYjMzQ7LCAmIzM0O0ZBTk9USUZZJiMzNDtdYAoqICAgYEZvY3VzU3ltYm9sc2A6IGBbJiMzNDtfX2Rfb2J0YWluX2FsaWFzJiMzNDssICYjMzQ7ZF9vYnRhaW5fYWxpYXMmIzM0OywgJiMzNDtkX29idGFpbl9yb290JiMzNDssICYjMzQ7ZGVudHJ5X3VubGlua19pbm9kZSYjMzQ7XWAKCkFscmlnaHQsIHRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBXZSBzaG91bGQgYmUgYWxsIHNldCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0ZIQU5ETEUmIzM0OywKICAgICYjMzQ7RlNOT1RJRlkmIzM0OywKICAgICYjMzQ7SU5PVElGWV9VU0VSJiMzNDssCiAgICAmIzM0O0ZBTk9USUZZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X19kX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9hbGlhcyYjMzQ7LAogICAgJiMzNDtkX29idGFpbl9yb290JiMzNDssCiAgICAmIzM0O2RlbnRyeV91bmxpbmtfaW5vZGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGxvZ2ljIGluIGZzL2RjYWNoZS5jIChfX2Rfb2J0YWluX2FsaWFzLCBkZW50cnlfdW5saW5rX2lub2RlKSB0byBwcmV2ZW50IGZpbGUgaGFuZGxlIGxvb2t1cHMgZnJvbSBjcmVhdGluZyBhbGlhc2VzIGZvciBkZWFkIHVubGlua2VkIGlub2RlcyBhbmQgdG8gYWNjdXJhdGVseSBub3RpZnkgZnNub3RpZnkgd2hlbiB1bmxpbmtlZCBpbm9kZXMgaGF2ZSBubyByZW1haW5pbmcgYWxpYXNlcy4gRnV6emluZyB3aXRoIGZpbGUgaGFuZGxlIHN5c2NhbGxzIChvcGVuX2J5X2hhbmRsZV9hdCkgYW5kIGNvbmN1cnJlbnQgdW5saW5rL2V4cG9ydGZzIG9wZXJhdGlvbnMgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtGSEFORExFJiMzNDssCiAgICAmIzM0O0ZTTk9USUZZJiMzNDssCiAgICAmIzM0O0lOT1RJRllfVVNFUiYjMzQ7LAogICAgJiMzNDtGQU5PVElGWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fZF9vYnRhaW5fYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9vYnRhaW5fYWxpYXMmIzM0OywKICAgICYjMzQ7ZF9vYnRhaW5fcm9vdCYjMzQ7LAogICAgJiMzNDtkZW50cnlfdW5saW5rX2lub2RlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBsb2dpYyBpbiBmcy9kY2FjaGUuYyAoX19kX29idGFpbl9hbGlhcywgZGVudHJ5X3VubGlua19pbm9kZSkgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gY3JlYXRpbmcgYWxpYXNlcyBmb3IgZGVhZCB1bmxpbmtlZCBpbm9kZXMgYW5kIHRvIGFjY3VyYXRlbHkgbm90aWZ5IGZzbm90aWZ5IHdoZW4gdW5saW5rZWQgaW5vZGVzIGhhdmUgbm8gcmVtYWluaW5nIGFsaWFzZXMuIEZ1enppbmcgd2l0aCBmaWxlIGhhbmRsZSBzeXNjYWxscyAob3Blbl9ieV9oYW5kbGVfYXQpIGFuZCBjb25jdXJyZW50IHVubGluay9leHBvcnRmcyBvcGVyYXRpb25zIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBzdGF0ZSB0cmFuc2l0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlub2RlIGFsaWFzIGxvb2t1cCBhbmQgZGVudHJ5IHVubGlua2luZyBsb2dpYyBpbiBmcy9kY2FjaGUuYyB0byBwcmV2ZW50IHJldml2aW5nIGRlYWQvdW5saW5rZWQgaW5vZGVzIGR1cmluZyBmaWxlIGhhbmRsZSBsb29rdXBzICh3aGljaCBpbnRlcmZlcmVzIHdpdGggZnNub3RpZnkpLiBUaGUgY2hhbmdlcyBvbmx5IHRvdWNoIHN0YW5kYXJkIGlub2RlIGZpZWxkcyAoaV9ubGluaywgaV9kZW50cnkpIGFuZCB1c2UgYSBsb2NhbGx5IGFzc2lnbmVkIGJvb2xlYW4gdmFyaWFibGUgKG5vdGlmeV9kZWFkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBzZW1hbnRpY3MsIGlub2RlIGxpZmVjeWNsZXMsIG9yIGxvY2tpbmcsIHdoaWNoIGZhbGwgdW5kZXIgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRkYjA3MWQxOGI4MzViYTI2MGI2NzQ5YTgyYzM5YzVkNmJmMDUyNzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDE0OjEyOjA2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuYwppbmRleCAxYjFhODFmMTBkYTY3Li44ZjE3ZGIyNzI0YjM4IDEwMDY0NAotLS0gYS9mcy9kY2FjaGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9kY2FjaGUuYwpAQCAtNDUwLDYgJiM0Mzs0NTAsMTcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X2ZyZWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogCQljYWxsX3JjdSgmYW1wO2RlbnRyeS0mZ3Q7ZF9yY3UsIF9fZF9mcmVlKTsKIH0KIAomIzQzOy8qCiYjNDM7ICogSWYgaW5vZGUgaXMgdW5saW5rZWQgYW5kIGRvZXNuJiMzOTt0IGhhdmUgYW55IGFsaWFzZXMgKGkuZS4sIGFsbCBmZHMgcG9pbnRpbmcgdG8KJiM0MzsgKiBpdCBhcmUgY2xvc2VkKSwgaXQgaXMgcHJldHR5IG11Y2ggZGVhZC4gRXhjZXB0IHRoYXQgZmlsZSBoYW5kbGUgbG9va3VwIGNvdWxkCiYjNDM7ICogc3RpbGwgcmV2aXZlIGl0IHdoaWNoIGNhdXNlcyBpc3N1ZXMgdG8gZnNub3RpZnkuIFNvIG9uY2UgaW5vZGUgcmVhY2hlcyB0aGlzCiYjNDM7ICogc3RhdGUgd2UgbWFrZSBzdXJlIHRvIGJsb2NrIGNyZWF0aW5nIGFueSBuZXcgYWxpYXNlcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBpbm9kZV9ub3RpZnlfZGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJcmV0dXJuICFpbm9kZS0mZ3Q7aV9ubGluayAmYW1wOyZhbXA7IGhsaXN0X2VtcHR5KCZhbXA7aW5vZGUtJmd0O2lfZGVudHJ5KTsKJiM0Mzt9CiYjNDM7CiAvKgogICogUmVsZWFzZSB0aGUgZGVudHJ5JiMzOTtzIGlub2RlLCB1c2luZyB0aGUgZmlsZXN5c3RlbQogICogZF9pcHV0KCkgb3BlcmF0aW9uIGlmIGRlZmluZWQuCkBAIC00NTksNiAmIzQzOzQ3MCw3IEBAIHN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKIAlfX3JlbGVhc2VzKGRlbnRyeS0mZ3Q7ZF9pbm9kZS0mZ3Q7aV9sb2NrKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktJmd0O2RfaW5vZGU7CiYjNDM7CWJvb2wgbm90aWZ5X2RlYWQ7CiAKIAlyYXdfd3JpdGVfc2VxY291bnRfYmVnaW4oJmFtcDtkZW50cnktJmd0O2Rfc2VxKTsKIAlfX2RfY2xlYXJfdHlwZV9hbmRfaW5vZGUoZGVudHJ5KTsKQEAgLTQ2OSw5ICYjNDM7NDgxLDEwIEBAIHN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSkKIAkgKi8KIAlkZW50cnktJmd0O3dhaXRlcnMgPSBOVUxMOwogCXJhd193cml0ZV9zZXFjb3VudF9lbmQoJmFtcDtkZW50cnktJmd0O2Rfc2VxKTsKJiM0MzsJbm90aWZ5X2RlYWQgPSBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSk7CiAJc3Bpbl91bmxvY2soJmFtcDtkZW50cnktJmd0O2RfbG9jayk7CiAJc3Bpbl91bmxvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKLQlpZiAoIWlub2RlLSZndDtpX25saW5rKQomIzQzOwlpZiAobm90aWZ5X2RlYWQpCiAJCWZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKTsKIAlpZiAoZGVudHJ5LSZndDtkX29wICZhbXA7JmFtcDsgZGVudHJ5LSZndDtkX29wLSZndDtkX2lwdXQpCiAJCWRlbnRyeS0mZ3Q7ZF9vcC0mZ3Q7ZF9pcHV0KGRlbnRyeSwgaW5vZGUpOwpAQCAtMjIzNyw3ICYjNDM7MjI1MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZCkKIAogCXNiID0gaW5vZGUtJmd0O2lfc2I7CiAKLQlyZXMgPSBkX2ZpbmRfYW55X2FsaWFzKGlub2RlKTsgLyogZXhpc3RpbmcgYWxpYXM/ICovCiYjNDM7CXNwaW5fbG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwomIzQzOwlpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSkKJiM0MzsJCXJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7CS8qIGV4aXN0aW5nIGFsaWFzPyAqLwomIzQzOwllbHNlCiYjNDM7CQlyZXMgPSBFUlJfUFRSKC1FU1RBTEUpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2lub2RlLSZndDtpX2xvY2spOwogCWlmIChyZXMpCiAJCWdvdG8gb3V0OwogCkBAIC0yMjQ5LDcgJiM0MzsyMjY3LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKQogCiAJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTsKIAlzcGluX2xvY2soJmFtcDtpbm9kZS0mZ3Q7aV9sb2NrKTsKLQlyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi8KJiM0MzsJaWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpCiYjNDM7CQlyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpOwkvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi8KJiM0MzsJZWxzZQomIzQzOwkJcmVzID0gRVJSX1BUUigtRVNUQUxFKTsKIAlpZiAobGlrZWx5KCFyZXMpKSB7IC8qIHN0aWxsIG5vIGFsaWFzLCBhdHRhY2ggYSBkaXNjb25uZWN0ZWQgZGVudHJ5ICovCiAJCXVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwMgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDUwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBLTVNBTiBGdXp6aW5nIE5lZWRzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggdG8gYGZzL2RjYWNoZS5jYC4gSSBuZWVkIHRvIGRlY2lkZSBpZiB0aGlzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiwgYW5kIGlmIGl0IGRvZXMsIHdoYXQgdGhlIGF0dGFjayBzdXJmYWNlIGxvb2tzIGxpa2UuCgpGaXJzdCwgSSBzZWUgYSBuZXcgZnVuY3Rpb24sIGBpbm9kZV9ub3RpZnlfZGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlKWAuIExvb2tzIGxpa2UgYSBzaW1wbGUgY2hlY2s6IGlzIHRoZSBpbm9kZSYjMzk7cyBsaW5rIGNvdW50IHplcm8gYW5kIGlzIGl0cyBkZW50cnkgbGlzdCBlbXB0eT8gVGhhdCBzb3VuZHMgbGlrZSB0aGUgaW5vZGUgaXMgdHJ1bHkgZGVhZCwgb3IgYXQgbGVhc3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBuYW1lc3BhY2UuCgpOZXh0LCBjaGFuZ2VzIGluIGBkZW50cnlfdW5saW5rX2lub2RlYC4gVGhlIGNvZGUgbm93IHVzZXMgdGhlIGBpbm9kZV9ub3RpZnlfZGVhZGAgcmV0dXJuIHZhbHVlIHRvIGRldGVybWluZSB3aGVuIHRvIGNhbGwgYGZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKWAuIFRoaXMgc2VlbXMgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBvcHRpbWl6YXRpb247IHJhdGhlciB0aGFuIHJlLWNoZWNraW5nIHRoZSBsaW5rIGNvdW50IGFmdGVyIHJlbGVhc2luZyBsb2NrcywgaXQmIzM5O3Mgbm93IHJldXNpbmcgdGhlIHJlc3VsdCBvZiBgaW5vZGVfbm90aWZ5X2RlYWRgLiBDbGVhbmVyIGFuZCBwb3RlbnRpYWxseSBtb3JlIGVmZmljaWVudC4KClRoZSByZWFsbHkgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgaGFwcGVuaW5nIGluIGBfX2Rfb2J0YWluX2FsaWFzYC4gVGhpcyBpcyB3aGVyZSB0aGUgcGF0Y2ggZ2V0cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgX19kX29idGFpbl9hbGlhc2AgaXMgZ2V0dGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIGJhc2VkIG9uIGBpbm9kZV9ub3RpZnlfZGVhZGAuIFRoZSBpbnRlbnRpb24gaGVyZSBzZWVtcyB0byBiZSB0aGF0IGlmIHRoZSBpbm9kZSBpcyAmIzM0O2RlYWQsJiMzNDsgZG9uJiMzOTt0IGJvdGhlciB0cnlpbmcgdG8gZmluZCBhbiBleGlzdGluZyBhbGlhcywgYmVjYXVzZSBpdCB3b3VsZG4mIzM5O3QgYmUgdmFsaWQsIGFuZCBqdXN0IHNob3J0LWNpcmN1aXQgd2l0aCBgRVJSX1BUUigtRVNUQUxFKWAuIEl0JiMzOTtzIGRvaW5nIHRoaXMgKnVuZGVyIGEgbG9jayouIFRoYXQmIzM5O3MgdGhlIGltcG9ydGFudCBwaWVjZSBoZXJlLiBMb2NraW5nIGlzIGludm9sdmVkLgoKU28sIGluIHRoZSBmaXJzdCBjYXNlLCBiZWZvcmUgYXR0ZW1wdGluZyB0byBmaW5kIGFuIGFsaWFzLCB0aGUgY29kZSBsb2NrcyB0aGUgaW5vZGUsIGFuZCBjaGVja3MgaWYgaXQmIzM5O3MgZGVhZCwgaWYgaXQgaXMsIGBfX2RfZmluZF9hbnlfYWxpYXNgIGlzIHNraXBwZWQuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gdGhlIHJlY2hlY2sgdW5kZXIgbG9jay4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gcHJvdGVjdGlvbiBtZWNoYW5pc20uIEFuIGlub2RlIG1pZ2h0IGJlIGNvbmN1cnJlbnRseSB1bmxpbmtlZCB3aGlsZSBhIG5ldyBhbGlhcyBpcyBiZWluZyBjcmVhdGVkLgoKTGV0IG1lIHVzZSBteSBgcmVhZC1maWxlYCB0b29sIHRvIHF1aWNrbHkgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBvZiBgX19kX29idGFpbl9hbGlhc2Agd2l0aGluIHRoZSBgZnMvZGNhY2hlLmNgIGNvbnRleHQuIEkgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqd2h5KiBiZWhpbmQgdGhpcyBjaGFuZ2UuIFNwZWNpZmljYWxseSwgd2hhdCYjMzk7cyBjYWxsaW5nIGBfX2Rfb2J0YWluX2FsaWFzYCwgYW5kIHdoYXQgYXJlIHRoZSBjYWxsZXImIzM5O3MgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBpbm9kZSBhbmQgZGVudHJ5PyBXaGF0IGNvdWxkIGhhcHBlbiBpZiBpdCB0cmllZCB0byBvYnRhaW4gYW4gYWxpYXMgZm9yIHNvbWV0aGluZyBhbHJlYWR5IGJlaW5nIHVubGlua2VkPwoKT2theSwgdGhlIGdlbmVyYWwgcGljdHVyZSBpcyB0aGF0IHRoaXMgaXMgaGFuZGxpbmcgdGhlIGNyZWF0aW9uIG9yIHJlLWVzdGFibGlzaG1lbnQgb2YgZGVudHJpZXMgcmVsYXRlZCB0byBpbm9kZXMsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSB3aGVlbGhvdXNlIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLiBHaXZlbiB0aGF0IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHVubGlua2luZywgYWxpYXNpbmcsIGFuZCBsb2NraW5nLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgKnBvdGVudGlhbCogdGltaW5nIHdpbmRvd3Mgd2hlcmUgYW4gaW5vZGUmIzM5O3Mgc3RhdGUgY291bGQgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LiBUaGUgYWRkZWQgY2hlY2sgdXNpbmcgYGlub2RlX25vdGlmeV9kZWFkYCBpcyBhIGdvb2QgYXR0ZW1wdCBhdCBwcm90ZWN0aW9uLCBidXQgSSBoYXZlIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgZWRnZSBjYXNlcyB3aGVyZSBhbiBpbm9kZSBjb3VsZCB0cmFuc2l0aW9uIGludG8gYSAmIzM0O2RlYWQmIzM0OyBzdGF0ZSAqZHVyaW5nKiB0aGUgb3BlcmF0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBsb2NraW5nIGlzIGNvcnJlY3RseSBwcm90ZWN0aW5nIGFnYWluc3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zLCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IHRoZSBpbm9kZSYjMzk7cyBsaWZlY3ljbGUuIEEgS01TQU4gZnV6emluZyBzZXNzaW9uIGNvdWxkIGJlIHZlcnkgdmFsdWFibGUgZm9yIGZpbmRpbmcgcmFjZXMsIFVBRnMsIG9yIGRvdWJsZS1mcmVlcyByZWxhdGVkIHRvIHRoZXNlIHRyYW5zaXRpb25zLiBZZXMsIGxldCYjMzk7cyBkbyBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMTQ6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9kY2FjaGUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjIzMDpcdFx0aWYgKHJvb3RfaW5vZGUpIHtcbjIyMzE6XHRcdFx0cmVzID0gZF9hbGxvY19hbm9uKHJvb3RfaW5vZGUtXHUwMDNlaV9zYik7XG4yMjMyOlx0XHRcdGlmIChyZXMpXG4yMjMzOlx0XHRcdFx0ZF9pbnN0YW50aWF0ZShyZXMsIHJvb3RfaW5vZGUpO1xuMjIzNDpcdFx0XHRlbHNlXG4yMjM1Olx0XHRcdFx0aXB1dChyb290X2lub2RlKTtcbjIyMzY6XHRcdH1cbjIyMzc6XHRcdHJldHVybiByZXM7XG4yMjM4Olx0fVxuMjIzOTpcdEVYUE9SVF9TWU1CT0woZF9tYWtlX3Jvb3QpO1xuMjI0MDpcdFxuMjI0MTpcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuMjI0MjpcdHtcbjIyNDM6XHRcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XG4yMjQ0Olx0XHRzdHJ1Y3QgZGVudHJ5ICpuZXcsICpyZXM7XG4yMjQ1Olx0XG4yMjQ2Olx0XHRpZiAoIWlub2RlKVxuMjI0NzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTtcbjIyNDg6XHRcdGlmIChJU19FUlIoaW5vZGUpKVxuMjI0OTpcdFx0XHRyZXR1cm4gRVJSX0NBU1QoaW5vZGUpO1xuMjI1MDpcdFxuMjI1MTpcdFx0c2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuMjI1MjpcdFxuMjI1MzpcdFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4yMjU0Olx0XHRpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSlcbjIyNTU6XHRcdFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcdC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xuMjI1NjpcdFx0ZWxzZVxuMjI1NzpcdFx0XHRyZXMgPSBFUlJfUFRSKC1FU1RBTEUpO1xuMjI1ODpcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIyNTk6XHRcdGlmIChyZXMpXG4yMjYwOlx0XHRcdGdvdG8gb3V0O1xuMjI2MTpcdFxuMjI2MjpcdFx0bmV3ID0gZF9hbGxvY19hbm9uKHNiKTtcbjIyNjM6XHRcdGlmICghbmV3KSB7XG4yMjY0Olx0XHRcdHJlcyA9IEVSUl9QVFIoLUVOT01FTSk7XG4yMjY1Olx0XHRcdGdvdG8gb3V0O1xuMjI2NjpcdFx0fVxuMjI2NzpcdFxuMjI2ODpcdFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcbjIyNjk6XHRcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuMjI3MDpcdFx0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4yMjcxOlx0XHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi9cbjIyNzI6XHRcdGVsc2VcbjIyNzM6XHRcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbjIyNzQ6XHRcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cbjIyNzU6XHRcdFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xuMjI3NjpcdFxuMjI3NzpcdFx0XHRpZiAoZGlzY29ubmVjdGVkKVxuMjI3ODpcdFx0XHRcdGFkZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEO1xuMjI3OTpcdFxuMjI4MDpcdFx0XHRzcGluX2xvY2soXHUwMDI2bmV3LVx1MDAzZWRfbG9jayk7XG4yMjgxOlx0XHRcdF9fZF9zZXRfaW5vZGVfYW5kX3R5cGUobmV3LCBpbm9kZSwgYWRkX2ZsYWdzKTtcbjIyODI6XHRcdFx0aGxpc3RfYWRkX2hlYWQoXHUwMDI2bmV3LVx1MDAzZWRfYWxpYXMsIFx1MDAyNmlub2RlLVx1MDAzZWlfZGVudHJ5KTtcbjIyODM6XHRcdFx0aWYgKCFkaXNjb25uZWN0ZWQpIHtcbjIyODQ6XHRcdFx0XHRzcGluX2xvY2soXHUwMDI2c2ItXHUwMDNlc19yb290c19sb2NrKTtcbjIyODU6XHRcdFx0XHRobGlzdF9hZGRfaGVhZChcdTAwMjZuZXctXHUwMDNlZF9zaWIsIFx1MDAyNnNiLVx1MDAzZXNfcm9vdHMpO1xuMjI4NjpcdFx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNnNiLVx1MDAzZXNfcm9vdHNfbG9jayk7XG4yMjg3Olx0XHRcdH1cbjIyODg6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2bmV3LVx1MDAzZWRfbG9jayk7XG4yMjg5Olx0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIGBfX2Rfb2J0YWluX2FsaWFzYCoqCgpBbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZF9vYnRhaW5fYWxpYXNgLiAmIzM0O0xldCYjMzk7cyBzZWUgdGhlIHJlc3QmIzM0OyBpbXBsaWVzIEkmIzM5O3ZlIGFscmVhZHkgZW5nYWdlZCB3aXRoICpwYXJ0KiBvZiB0aGlzIGZ1bmN0aW9uIG9yIG1ldGhvZCBhbmQgbm93IG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29tcGxldGUgbWVjaGFuaWNzLiBJJiMzOTttIGxpa2VseSBkZWJ1Z2dpbmcsIHJldmlld2luZyBjb2RlLCBvciB0cnlpbmcgdG8gZ3Jhc3AgaXRzIG92ZXJhbGwgcm9sZSB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBNeSBtZW50YWwgZ2VhcnMgYXJlIHByb2JhYmx5IGFscmVhZHkgdHVybmluZywgY29uc2lkZXJpbmcgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgcmVtYWluaW5nIHBhcnRzIG9mIHRoaXMgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGNvbnRyb2wgZmxvdywgYW55IHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLCBpbnRlcmFjdGlvbnMgd2l0aCBleHRlcm5hbCBkYXRhIG9yIHNlcnZpY2VzLCBhbmQgaG93IGl0IGhhbmRsZXMgZGlmZmVyZW50IGFsaWFzIHNjZW5hcmlvcy4gVGhlICYjMzQ7cmVzdCYjMzQ7IGNvdWxkIGVuY29tcGFzcyB2YXJpb3VzIHRoaW5nczogZGF0YSByZXRyaWV2YWwgZnJvbSBhIGRhdGFiYXNlLCBmaWxlIHBhcnNpbmcsIEFQSSBjYWxscywgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgbW9kdWxlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGxvZ2ljIGRldGVybWluaW5nICpob3cqIHRoZSBhbGlhcyBpcyByZXNvbHZlZCBhbmQgbWFuYWdlZC4gSXQgY291bGQgYmUgYSBzaW1wbGUgbG9va3VwLCBhIGNvbXBsZXggYWxnb3JpdGhtIGludm9sdmluZyBtdWx0aXBsZSB0YWJsZXMgb3Igc291cmNlcywgb3IgZXZlbiBzb21ldGhpbmcgZHluYW1pY2FsbHkgZ2VuZXJhdGVkLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBmb3JtIGEgY29tcGxldGUgdW5kZXJzdGFuZGluZyBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAxNDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2RjYWNoZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMjkwOlx0XHRcdGlub2RlID0gTlVMTDsgLyogY29uc3VtZWQgYnkgbmV3LVx1MDAzZWRfaW5vZGUgKi9cbjIyOTE6XHRcdFx0cmVzID0gbmV3O1xuMjI5MjpcdFx0fSBlbHNlIHtcbjIyOTM6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbjIyOTQ6XHRcdFx0ZHB1dChuZXcpO1xuMjI5NTpcdFx0fVxuMjI5NjpcdFxuMjI5NzpcdCBvdXQ6XG4yMjk4Olx0XHRpcHV0KGlub2RlKTtcbjIyOTk6XHRcdHJldHVybiByZXM7XG4yMzAwOlx0fVxuMjMwMTpcdFxuMjMwMjpcdC8qKlxuMjMwMzpcdCAqIGRfb2J0YWluX2FsaWFzIC0gZmluZCBvciBhbGxvY2F0ZSBhIERJU0NPTk5FQ1RFRCBkZW50cnkgZm9yIGEgZ2l2ZW4gaW5vZGVcbjIzMDQ6XHQgKiBAaW5vZGU6IGlub2RlIHRvIGFsbG9jYXRlIHRoZSBkZW50cnkgZm9yXG4yMzA1Olx0ICpcbjIzMDY6XHQgKiBPYnRhaW4gYSBkZW50cnkgZm9yIGFuIGlub2RlIHJlc3VsdGluZyBmcm9tIE5GUyBmaWxlaGFuZGxlIGNvbnZlcnNpb24gb3JcbjIzMDc6XHQgKiBzaW1pbGFyIG9wZW4gYnkgaGFuZGxlIG9wZXJhdGlvbnMuICBUaGUgcmV0dXJuZWQgZGVudHJ5IG1heSBiZSBhbm9ueW1vdXMsXG4yMzA4Olx0ICogb3IgbWF5IGhhdmUgYSBmdWxsIG5hbWUgKGlmIHRoZSBpbm9kZSB3YXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUpLlxuMjMwOTpcdCAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU1MTUKCQkJCQkJCW91dHB1dDogMTQ2CgkJCQkJCQl0aG91Z2h0czogNTA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEFuYWx5c2lzIG9mIHRoZSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBLTVNBTiBjaGVjay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIEl0IHNlZW1zIGxpa2Ugd2UmIzM5O3JlIGxvb2tpbmcgYXQgY2hhbmdlcyBhcm91bmQgaW5vZGUgdW5saW5raW5nIGFuZCBhbGlhcyBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGluIGBkZW50cnlfdW5saW5rX2lub2RlYCBhbmQgYF9fZF9vYnRhaW5fYWxpYXNgLiBJbiBgZGVudHJ5X3VubGlua19pbm9kZWAsIHRoZSBjb2RlIGNhbGxzIGBmc25vdGlmeV9pbm9kZXJlbW92ZWAgb25seSBpZiB0aGUgaW5vZGUgaXMgJiMzNDtkZWFkLCYjMzQ7IGRlZmluZWQgYXMgaGF2aW5nIHplcm8gbGlua3MgYW5kIGFuIGVtcHR5IGRlbnRyeSBsaXN0ICh3aGljaCBpcyBjaGVja2VkIHdpdGggYGlub2RlX25vdGlmeV9kZWFkYCkuIFNpbWlsYXJseSwgYF9fZF9vYnRhaW5fYWxpYXNgIGNoZWNrcyBpZiB0aGUgaW5vZGUgaXMgZGVhZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBmaW5kIG9yIGNyZWF0ZSBhbiBhbGlhcywgcmV0dXJuaW5nIGFuIGVycm9yIGlmIGl0IGlzLgoKTm93LCBsZXQmIzM5O3MgbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMuIE15IGNvbmNlcm4gaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBlc3BlY2lhbGx5IGluIGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBvciBpbiBjb25kaXRpb25hbCBsb2dpYyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGNvdWxkIGNvbnRyb2wgYnJhbmNoaW5nLgoKRmlyc3QsIEkgbm90ZSB0aGUgdXNlIG9mIGEgbG9jYWwgc3RhY2sgdmFyaWFibGUsIGBib29sIG5vdGlmeV9kZWFkO2AsIGluIGBkZW50cnlfdW5saW5rX2lub2RlYC4gSG93ZXZlciwgaXQmIzM5O3MgaW1tZWRpYXRlbHkgYXNzaWduZWQgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSlgLiBTaW5jZSBgaW5vZGVfbm90aWZ5X2RlYWRgIG9ubHkgYWNjZXNzZXMgdGhlIHN0YW5kYXJkIGlub2RlIGZpZWxkcyBgaV9ubGlua2AgYW5kIGBpX2RlbnRyeWAsIHRoaXMgbG9va3Mgc2FmZS4gSW4gYF9fZF9vYnRhaW5fYWxpYXNgLCB0aGUgcmV0dXJuIHZhbHVlIGByZXNgIGlzIGNvbmRpdGlvbmFsbHkgYXNzaWduZWQgYmFzZWQgb24gdGhlIHJlc3VsdCBvZiBgX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKWAgb3IgYW4gZXJyb3IgdmFsdWUuCgpUaGVyZWZvcmUsIHRoaXMgYW5hbHlzaXMgZG9lc24mIzM5O3QgaW5kaWNhdGUgYW55IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbWVtb3J5IGxlYWtzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBicmFuY2hlcy4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgc3RydWN0cyBvciBjYWxscyB0byBgY29weV90b191c2VyYC4gSSYjMzk7bSBnb2luZyB0byBsZWFuIHRvd2FyZHMgbm8gaXNzdWVzIGhlcmUsIGJ1dCBsb2dpYy9sb2NraW5nL2xpZmV0aW1lIGJ1Z3Mgc3VjaCBhcyByZWZjb3VudGluZyBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgZXJyb3JzIGFyZSBzdGlsbCBhIHBvc3NpYmlsaXR5LiBUaGVzZSBhcmUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC4KCkxldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgS01TQU4gY3JpdGVyaWEgYWdhaW4ganVzdCB0byBiZSBjZXJ0YWluOgoKMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZD8gTm8sIG5vdGhpbmcgaGVyZS4KMi4gIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcz8gTm8sIHRoZSBicmFuY2ggZGVwZW5kcyBvbiBhbiBpbW1lZGlhdGVseSBhc3NpZ25lZCBib29sZWFuIHJldHVybiB2YWx1ZSBhbmQgc3RhbmRhcmQgaW5vZGUgZmllbGRzLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOby4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby4KCkdpdmVuIHRoaXMgYW5hbHlzaXMsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBOb3csIHRpbWUgdG8gYXNzZW1ibGUgdGhlIHJlc3BvbnNlIGFuZCBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDE0OjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlub2RlIGFsaWFzIGxvb2t1cCBhbmQgZGVudHJ5IHVubGlua2luZyBsb2dpYyBpbiBmcy9kY2FjaGUuYyB0byBwcmV2ZW50IHJldml2aW5nIGRlYWQvdW5saW5rZWQgaW5vZGVzIGR1cmluZyBmaWxlIGhhbmRsZSBsb29rdXBzICh3aGljaCBpbnRlcmZlcmVzIHdpdGggZnNub3RpZnkpLiBUaGUgY2hhbmdlcyBvbmx5IHRvdWNoIHN0YW5kYXJkIGlub2RlIGZpZWxkcyAoaV9ubGluaywgaV9kZW50cnkpIGFuZCB1c2UgYSBsb2NhbGx5IGFzc2lnbmVkIGJvb2xlYW4gdmFyaWFibGUgKG5vdGlmeV9kZWFkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBzZW1hbnRpY3MsIGlub2RlIGxpZmVjeWNsZXMsIG9yIGxvY2tpbmcsIHdoaWNoIGZhbGwgdW5kZXIgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGlub2RlIGFsaWFzIGxvb2t1cCBhbmQgZGVudHJ5IHVubGlua2luZyBsb2dpYyBpbiBmcy9kY2FjaGUuYyB0byBwcmV2ZW50IHJldml2aW5nIGRlYWQvdW5saW5rZWQgaW5vZGVzIGR1cmluZyBmaWxlIGhhbmRsZSBsb29rdXBzICh3aGljaCBpbnRlcmZlcmVzIHdpdGggZnNub3RpZnkpLiBUaGUgY2hhbmdlcyBvbmx5IHRvdWNoIHN0YW5kYXJkIGlub2RlIGZpZWxkcyAoaV9ubGluaywgaV9kZW50cnkpIGFuZCB1c2UgYSBsb2NhbGx5IGFzc2lnbmVkIGJvb2xlYW4gdmFyaWFibGUgKG5vdGlmeV9kZWFkKS4gTm8gdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSBpcyBpbnRyb2R1Y2VkLCByZWFkLCBvciBjb3BpZWQgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gZmlsZXN5c3RlbSBzZW1hbnRpY3MsIGlub2RlIGxpZmVjeWNsZXMsIG9yIGxvY2tpbmcsIHdoaWNoIGZhbGwgdW5kZXIgc3RhbmRhcmQgS0FTQU4vTE9DS0RFUCByYXRoZXIgdGhhbiBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MDguNDM3NTQ3NTY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMzNTA2MTgxMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkhBTkRMRVwiLFxuICAgIFwiRlNOT1RJRllcIixcbiAgICBcIklOT1RJRllfVVNFUlwiLFxuICAgIFwiRkFOT1RJRllcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Rfb2J0YWluX2FsaWFzXCIsXG4gICAgXCJkX29idGFpbl9hbGlhc1wiLFxuICAgIFwiZF9vYnRhaW5fcm9vdFwiLFxuICAgIFwiZGVudHJ5X3VubGlua19pbm9kZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5vZGUgYWxpYXMgbG9va3VwIGFuZCBkZW50cnkgdW5saW5raW5nIGxvZ2ljIGluIGZzL2RjYWNoZS5jIHRvIHByZXZlbnQgcmV2aXZpbmcgZGVhZC91bmxpbmtlZCBpbm9kZXMgZHVyaW5nIGZpbGUgaGFuZGxlIGxvb2t1cHMgKHdoaWNoIGludGVyZmVyZXMgd2l0aCBmc25vdGlmeSkuIFRoZSBjaGFuZ2VzIG9ubHkgdG91Y2ggc3RhbmRhcmQgaW5vZGUgZmllbGRzIChpX25saW5rLCBpX2RlbnRyeSkgYW5kIHVzZSBhIGxvY2FsbHkgYXNzaWduZWQgYm9vbGVhbiB2YXJpYWJsZSAobm90aWZ5X2RlYWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBmaWxlc3lzdGVtIHNlbWFudGljcywgaW5vZGUgbGlmZWN5Y2xlcywgb3IgbG9ja2luZywgd2hpY2ggZmFsbCB1bmRlciBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBsb2dpYyBpbiBmcy9kY2FjaGUuYyAoX19kX29idGFpbl9hbGlhcywgZGVudHJ5X3VubGlua19pbm9kZSkgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gY3JlYXRpbmcgYWxpYXNlcyBmb3IgZGVhZCB1bmxpbmtlZCBpbm9kZXMgYW5kIHRvIGFjY3VyYXRlbHkgbm90aWZ5IGZzbm90aWZ5IHdoZW4gdW5saW5rZWQgaW5vZGVzIGhhdmUgbm8gcmVtYWluaW5nIGFsaWFzZXMuIEZ1enppbmcgd2l0aCBmaWxlIGhhbmRsZSBzeXNjYWxscyAob3Blbl9ieV9oYW5kbGVfYXQpIGFuZCBjb25jdXJyZW50IHVubGluay9leHBvcnRmcyBvcGVyYXRpb25zIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBzdGF0ZSB0cmFuc2l0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MDguNDM3NTUzNjA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjE0OTM2MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGRiMDcxZDE4YjgzNWJhMjYwYjY3NDlhODJjMzljNWQ2YmYwNTI3N1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjEyOjA2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmNcXG5pbmRleCAxYjFhODFmMTBkYTY3Li44ZjE3ZGIyNzI0YjM4IDEwMDY0NFxcbi0tLSBhL2ZzL2RjYWNoZS5jXFxuKysrIGIvZnMvZGNhY2hlLmNcXG5AQCAtNDUwLDYgKzQ1MCwxNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuIFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZkZW50cnktXFx1MDAzZWRfcmN1LCBfX2RfZnJlZSk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIElmIGlub2RlIGlzIHVubGlua2VkIGFuZCBkb2Vzbid0IGhhdmUgYW55IGFsaWFzZXMgKGkuZS4sIGFsbCBmZHMgcG9pbnRpbmcgdG9cXG4rICogaXQgYXJlIGNsb3NlZCksIGl0IGlzIHByZXR0eSBtdWNoIGRlYWQuIEV4Y2VwdCB0aGF0IGZpbGUgaGFuZGxlIGxvb2t1cCBjb3VsZFxcbisgKiBzdGlsbCByZXZpdmUgaXQgd2hpY2ggY2F1c2VzIGlzc3VlcyB0byBmc25vdGlmeS4gU28gb25jZSBpbm9kZSByZWFjaGVzIHRoaXNcXG4rICogc3RhdGUgd2UgbWFrZSBzdXJlIHRvIGJsb2NrIGNyZWF0aW5nIGFueSBuZXcgYWxpYXNlcy5cXG4rICovXFxuK3N0YXRpYyBib29sIGlub2RlX25vdGlmeV9kZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuICFpbm9kZS1cXHUwMDNlaV9ubGluayBcXHUwMDI2XFx1MDAyNiBobGlzdF9lbXB0eShcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGVudHJ5KTtcXG4rfVxcbitcXG4gLypcXG4gICogUmVsZWFzZSB0aGUgZGVudHJ5J3MgaW5vZGUsIHVzaW5nIHRoZSBmaWxlc3lzdGVtXFxuICAqIGRfaXB1dCgpIG9wZXJhdGlvbiBpZiBkZWZpbmVkLlxcbkBAIC00NTksNiArNDcwLDcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxcbiBcXHRfX3JlbGVhc2VzKGRlbnRyeS1cXHUwMDNlZF9pbm9kZS1cXHUwMDNlaV9sb2NrKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktXFx1MDAzZWRfaW5vZGU7XFxuK1xcdGJvb2wgbm90aWZ5X2RlYWQ7XFxuIFxcbiBcXHRyYXdfd3JpdGVfc2VxY291bnRfYmVnaW4oXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9zZXEpO1xcbiBcXHRfX2RfY2xlYXJfdHlwZV9hbmRfaW5vZGUoZGVudHJ5KTtcXG5AQCAtNDY5LDkgKzQ4MSwxMCBAQCBzdGF0aWMgdm9pZCBkZW50cnlfdW5saW5rX2lub2RlKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpXFxuIFxcdCAqL1xcbiBcXHRkZW50cnktXFx1MDAzZXdhaXRlcnMgPSBOVUxMO1xcbiBcXHRyYXdfd3JpdGVfc2VxY291bnRfZW5kKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxKTtcXG4rXFx0bm90aWZ5X2RlYWQgPSBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSk7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfbG9jayk7XFxuIFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4tXFx0aWYgKCFpbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0aWYgKG5vdGlmeV9kZWFkKVxcbiBcXHRcXHRmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7XFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfb3AgXFx1MDAyNlxcdTAwMjYgZGVudHJ5LVxcdTAwM2VkX29wLVxcdTAwM2VkX2lwdXQpXFxuIFxcdFxcdGRlbnRyeS1cXHUwMDNlZF9vcC1cXHUwMDNlZF9pcHV0KGRlbnRyeSwgaW5vZGUpO1xcbkBAIC0yMjM3LDcgKzIyNTAsMTIgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBkaXNjb25uZWN0ZWQpXFxuIFxcbiBcXHRzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbiBcXG4tXFx0cmVzID0gZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7IC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbitcXHRpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSlcXG4rXFx0XFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcXHQvKiBleGlzdGluZyBhbGlhcz8gKi9cXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXMgPSBFUlJfUFRSKC1FU1RBTEUpO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuIFxcdGlmIChyZXMpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5AQCAtMjI0OSw3ICsyMjY3LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxcbiBcXG4gXFx0c2VjdXJpdHlfZF9pbnN0YW50aWF0ZShuZXcsIGlub2RlKTtcXG4gXFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4tXFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTsgLyogcmVjaGVjayB1bmRlciBsb2NrICovXFxuK1xcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxcbitcXHRcXHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1xcdC8qIHJlY2hlY2sgdW5kZXIgbG9jayAqL1xcbitcXHRlbHNlXFxuK1xcdFxcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XFxuIFxcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cXG4gXFx0XFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MTAuMDUzNDUxODcyWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo1MDI2Mjg5NTM2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJGSEFORExFXCIsXG4gICAgXCJGU05PVElGWVwiLFxuICAgIFwiSU5PVElGWV9VU0VSXCIsXG4gICAgXCJGQU5PVElGWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fZF9vYnRhaW5fYWxpYXNcIixcbiAgICBcImRfb2J0YWluX2FsaWFzXCIsXG4gICAgXCJkX29idGFpbl9yb290XCIsXG4gICAgXCJkZW50cnlfdW5saW5rX2lub2RlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBWRlMgZGNhY2hlIGxvZ2ljIGluIGZzL2RjYWNoZS5jIChfX2Rfb2J0YWluX2FsaWFzLCBkZW50cnlfdW5saW5rX2lub2RlKSB0byBwcmV2ZW50IGZpbGUgaGFuZGxlIGxvb2t1cHMgZnJvbSBjcmVhdGluZyBhbGlhc2VzIGZvciBkZWFkIHVubGlua2VkIGlub2RlcyBhbmQgdG8gYWNjdXJhdGVseSBub3RpZnkgZnNub3RpZnkgd2hlbiB1bmxpbmtlZCBpbm9kZXMgaGF2ZSBubyByZW1haW5pbmcgYWxpYXNlcy4gRnV6emluZyB3aXRoIGZpbGUgaGFuZGxlIHN5c2NhbGxzIChvcGVuX2J5X2hhbmRsZV9hdCkgYW5kIGNvbmN1cnJlbnQgdW5saW5rL2V4cG9ydGZzIG9wZXJhdGlvbnMgaXMgd2FycmFudGVkIHRvIHRlc3QgZm9yIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIHN0YXRlIHRyYW5zaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRkYjA3MWQxOGI4MzViYTI2MGI2NzQ5YTgyYzM5YzVkNmJmMDUyNzdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDE0OjEyOjA2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZGNhY2hlLmMgYi9mcy9kY2FjaGUuY1xuaW5kZXggMWIxYTgxZjEwZGE2Ny4uOGYxN2RiMjcyNGIzOCAxMDA2NDRcbi0tLSBhL2ZzL2RjYWNoZS5jXG4rKysgYi9mcy9kY2FjaGUuY1xuQEAgLTQ1MCw2ICs0NTAsMTcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X2ZyZWUoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuIFx0XHRjYWxsX3JjdShcdTAwMjZkZW50cnktXHUwMDNlZF9yY3UsIF9fZF9mcmVlKTtcbiB9XG4gXG4rLypcbisgKiBJZiBpbm9kZSBpcyB1bmxpbmtlZCBhbmQgZG9lc24ndCBoYXZlIGFueSBhbGlhc2VzIChpLmUuLCBhbGwgZmRzIHBvaW50aW5nIHRvXG4rICogaXQgYXJlIGNsb3NlZCksIGl0IGlzIHByZXR0eSBtdWNoIGRlYWQuIEV4Y2VwdCB0aGF0IGZpbGUgaGFuZGxlIGxvb2t1cCBjb3VsZFxuKyAqIHN0aWxsIHJldml2ZSBpdCB3aGljaCBjYXVzZXMgaXNzdWVzIHRvIGZzbm90aWZ5LiBTbyBvbmNlIGlub2RlIHJlYWNoZXMgdGhpc1xuKyAqIHN0YXRlIHdlIG1ha2Ugc3VyZSB0byBibG9jayBjcmVhdGluZyBhbnkgbmV3IGFsaWFzZXMuXG4rICovXG4rc3RhdGljIGJvb2wgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gIWlub2RlLVx1MDAzZWlfbmxpbmsgXHUwMDI2XHUwMDI2IGhsaXN0X2VtcHR5KFx1MDAyNmlub2RlLVx1MDAzZWlfZGVudHJ5KTtcbit9XG4rXG4gLypcbiAgKiBSZWxlYXNlIHRoZSBkZW50cnkncyBpbm9kZSwgdXNpbmcgdGhlIGZpbGVzeXN0ZW1cbiAgKiBkX2lwdXQoKSBvcGVyYXRpb24gaWYgZGVmaW5lZC5cbkBAIC00NTksNiArNDcwLDcgQEAgc3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxuIFx0X19yZWxlYXNlcyhkZW50cnktXHUwMDNlZF9pbm9kZS1cdTAwM2VpX2xvY2spXG4ge1xuIFx0c3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS1cdTAwM2VkX2lub2RlO1xuK1x0Ym9vbCBub3RpZnlfZGVhZDtcbiBcbiBcdHJhd193cml0ZV9zZXFjb3VudF9iZWdpbihcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuIFx0X19kX2NsZWFyX3R5cGVfYW5kX2lub2RlKGRlbnRyeSk7XG5AQCAtNDY5LDkgKzQ4MSwxMCBAQCBzdGF0aWMgdm9pZCBkZW50cnlfdW5saW5rX2lub2RlKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpXG4gXHQgKi9cbiBcdGRlbnRyeS1cdTAwM2V3YWl0ZXJzID0gTlVMTDtcbiBcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXHUwMDI2ZGVudHJ5LVx1MDAzZWRfc2VxKTtcbitcdG5vdGlmeV9kZWFkID0gaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpO1xuIFx0c3Bpbl91bmxvY2soXHUwMDI2ZGVudHJ5LVx1MDAzZWRfbG9jayk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuLVx0aWYgKCFpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0aWYgKG5vdGlmeV9kZWFkKVxuIFx0XHRmc25vdGlmeV9pbm9kZXJlbW92ZShpbm9kZSk7XG4gXHRpZiAoZGVudHJ5LVx1MDAzZWRfb3AgXHUwMDI2XHUwMDI2IGRlbnRyeS1cdTAwM2VkX29wLVx1MDAzZWRfaXB1dClcbiBcdFx0ZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pcHV0KGRlbnRyeSwgaW5vZGUpO1xuQEAgLTIyMzcsNyArMjI1MCwxMiBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcbiBcbiBcdHNiID0gaW5vZGUtXHUwMDNlaV9zYjtcbiBcbi1cdHJlcyA9IGRfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiBleGlzdGluZyBhbGlhcz8gKi9cbitcdHNwaW5fbG9jayhcdTAwMjZpbm9kZS1cdTAwM2VpX2xvY2spO1xuK1x0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4rXHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiBleGlzdGluZyBhbGlhcz8gKi9cbitcdGVsc2VcbitcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4gXHRpZiAocmVzKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC0yMjQ5LDcgKzIyNjcsMTAgQEAgc3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBkaXNjb25uZWN0ZWQpXG4gXG4gXHRzZWN1cml0eV9kX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpO1xuIFx0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tXHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpOyAvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi9cbitcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxuK1x0XHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1x0LyogcmVjaGVjayB1bmRlciBsb2NrICovXG4rXHRlbHNlXG4rXHRcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XG4gXHRpZiAobGlrZWx5KCFyZXMpKSB7IC8qIHN0aWxsIG5vIGFsaWFzLCBhdHRhY2ggYSBkaXNjb25uZWN0ZWQgZGVudHJ5ICovXG4gXHRcdHVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjEwLjA1MzQ1NDAxMloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ3Mjc3NjE2MjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGaWxlIFN5c3RlbSBDYWNoZSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBUaGUgY2hhbmdlcyBhcmUgZm9jdXNlZCBvbiBgZnMvZGNhY2hlLmNgLCB3aGljaCBtYWtlcyBtZSBpbW1lZGlhdGVseSB0aGluayBmaWxlIHN5c3RlbSBjYWNoZSBvcGVyYXRpb25zIOKAkyBwcm9iYWJseSByZWxhdGVkIHRvIGRpcmVjdG9yeSBlbnRyaWVzIGFuZCBpbm9kZSBoYW5kbGluZy4gSW50ZXJlc3RpbmcuXG5cblNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3ZlIGFkZGVkIGEgZnVuY3Rpb24sIGBpbm9kZV9ub3RpZnlfZGVhZCgpYC4gQmFzZWQgb24gdGhlIGNvZGUsIGl0IHNlZW1zIHRvIGNoZWNrIGlmIGFuIGlub2RlIGlzIFwiZGVhZFwiIOKAkyBubyBoYXJkIGxpbmtzIGFuZCBhbiBlbXB0eSBkZW50cnkgbGlzdC4gVGhpcyBpcyBrZXksIHNvIEknbGwgbmVlZCB0byBrZWVwIHRoYXQgZGVmaW5pdGlvbiBmcm9udCBvZiBtaW5kLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBjb3JlIG9mIHRoZSBwYXRjaCdzIGxvZ2ljLlxuXG5UaGUgbmV4dCBwb2ludCBpbnZvbHZlcyBgZGVudHJ5X3VubGlua19pbm9kZSgpYC4gVGhlIG1vZGlmaWNhdGlvbiBzdWdnZXN0cyB0aGF0IHRoZXkncmUgdXNpbmcgdGhpcyBgaW5vZGVfbm90aWZ5X2RlYWQoKWAgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIGBmc25vdGlmeV9pbm9kZXJlbW92ZSgpYCBzaG91bGQgYmUgY2FsbGVkLiBUaGlzIGltcGxpZXMgc29tZSBmb3JtIG9mIG5vdGlmaWNhdGlvbiBvciBjbGVhbnVwIHdoZW4gYW4gaW5vZGUgaXMgdW5saW5rZWQgYW5kIGFwcGVhcnMgdG8gYmUgaW4gYSBkZWFkIHN0YXRlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHdlIHRyeWluZyB0byBvcHRpbWl6ZSB0aGUgY2xlYW51cCBvZiBvcnBoYW5lZCBpbm9kZXMsIG9yIGFyZSB3ZSBmaXhpbmcgYSByYWNlIGNvbmRpdGlvbiByZWxhdGVkIHRvIGZpbGUgc3lzdGVtIG5vdGlmaWNhdGlvbnMgYW5kIHN0YWxlIGlub2Rlcz8gSSB3aWxsIG5lZWQgdG8gbG9vayBkZWVwZXIuXG5cbkZpbmFsbHksIGBfX2Rfb2J0YWluX2FsaWFzKClgIGlzIGFsc28gbW9kaWZpZWQsIGluY29ycG9yYXRpbmcgdGhlIGBpbm9kZV9ub3RpZnlfZGVhZCgpYCBjaGVjayB1bmRlciBgaW5vZGUtXHUwMDNlaV9sb2NrYCBiZWZvcmUgZmluZGluZyBvciBhdHRhY2hpbmcgYW4gYWxpYXMuIElmIHRoZSBpbm9kZSBpcyBjb25zaWRlcmVkIGRlYWQsIGl0IHJldHVybnMgYC1FU1RBTEVgLiBUaGlzIHRlbGxzIG1lIHdlIGFyZSBhdHRlbXB0aW5nIHRvIHByZXZlbnQgdGhlIGNyZWF0aW9uIG9mIG5ldyBhbGlhc2VzIG9yIHRoZSByZXVzZSBvZiBhbGlhc2VzIGZvciBkZWFkIGlub2Rlcy4gUmV0dXJuaW5nIC1FU1RBTEUgYWxzbyBpbmRpY2F0ZXMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCB0aGVuIHJldHJ5IHRoZSBvcGVyYXRpb24gb3Igb3RoZXJ3aXNlIHNpZ25hbCBmYWlsdXJlLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBnZXQgYSBiZXR0ZXIgZ3Jhc3Agb2YgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIHRoZXNlIGxpbmVzIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgY29udGV4dC4gSSdsbCB1c2UgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIG9uIGBmcy9kY2FjaGUuY2AgdG8gbG9vayBhdCB0aGlzIG1vcmUgY2xvc2VseSwgcGFydGljdWxhcmx5IGFyb3VuZCB3aGVyZSB0aGVzZSBuZXcgYW5kIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUuIFVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgaW50ZXJhY3Rpb25zIHdpdGhpbiB0aGUgZGNhY2hlIHdpbGwgYmUgZXNzZW50aWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTkwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MTQuNzgxMjE5NDQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzc0NzQxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2Rfb2J0YWluX2FsaWFzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz0yMjM5PUVYUE9SVF9TWU1CT0woZF9tYWtlX3Jvb3QpO1xcbmZzL2RjYWNoZS5jLTIyNDAtXFxuZnMvZGNhY2hlLmM6MjI0MTpzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcXG5mcy9kY2FjaGUuYy0yMjQyLXtcXG4tLVxcbmZzL2RjYWNoZS5jPTIzMjA9c3RydWN0IGRlbnRyeSAqZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9kY2FjaGUuYy0yMzIxLXtcXG5mcy9kY2FjaGUuYzoyMzIyOlxcdHJldHVybiBfX2Rfb2J0YWluX2FsaWFzKGlub2RlLCB0cnVlKTtcXG5mcy9kY2FjaGUuYy0yMzIzLX1cXG4tLVxcbmZzL2RjYWNoZS5jPTIzNDE9c3RydWN0IGRlbnRyeSAqZF9vYnRhaW5fcm9vdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2RjYWNoZS5jLTIzNDIte1xcbmZzL2RjYWNoZS5jOjIzNDM6XFx0cmV0dXJuIF9fZF9vYnRhaW5fYWxpYXMoaW5vZGUsIGZhbHNlKTtcXG5mcy9kY2FjaGUuYy0yMzQ0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MTQuOTE4OTcxNzMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDk2MjE4NTk1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGNvZGUgc25pcHBldHMgYXMgaWYgdGhleSB3ZXJlIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgYGZzL2RjYWNoZS5jYCBmb3IgQ29udGV4dCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGZzL2RjYWNoZS5jYC4gSSdtIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgYXJvdW5kIGxpbmUgMjIzNS0yMzAwIGFuZCB0aGVuIGxvb3BpbmcgYmFjayB0byA0NTAtNTAwLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBnZWFyZWQgYXJvdW5kIHVuZGVyc3RhbmRpbmcgdGhlIG51YW5jZXMgb2YgdGhlIGRlbnRyeSBjYWNoZSdzIGludGVyYWN0aW9uIHdpdGggdGhlIGZpbGVzeXN0ZW0gbGF5ZXIsIHBhcnRpY3VsYXJseSBmb2N1c2luZyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuXG5cbkkgc3VzcGVjdCB0aGF0IHNlZ21lbnQgMjIzNS0yMzAwLCBpcyBpbnZvbHZlZCBpbiBkZW50cnkgaW52YWxpZGF0aW9uIG9yIGdhcmJhZ2UgY29sbGVjdGlvbiDigJMgcGVyaGFwcyBoYW5kbGluZyByYWNlIGNvbmRpdGlvbnMgd2l0aCBhY3RpdmUgZGVudHJpZXMsIG9yIGhvdyBpdCBkZWFscyB3aXRoIHRoZSByZW1vdmFsIG9mIGVudHJpZXMuIEknbSBrZWVuIHRvIHNlZSB0aGUgc3BlY2lmaWMgbG9ja2luZyBtZWNoYW5pc21zIHVzZWQgd2l0aGluIHRoYXQgcG9ydGlvbiBvZiB0aGUgY29kZSwgYXMgd2VsbCBhcyB0aGUgY29uZGl0aW9ucyB3aGVyZSBpdCBnZXRzIHRyaWdnZXJlZC4gTXkgbWVudGFsIGNoZWNrbGlzdCBpbmNsdWRlcyBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIGlub2RlL3N1cGVyYmxvY2sgc3RydWN0dXJlcywgYW5kIGhvdyBpdCBoYW5kbGVzIGRpZmZlcmVudCB0eXBlcyBvZiBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIGxpa2UgdW5saW5raW5nIG9yIHJlbmFtaW5nLiBJIHdhbnQgdG8gY2hlY2sgZm9yIHBvdGVudGlhbCBkZWFkbG9ja3Mgb3IgcmFjZSBjb25kaXRpb25zLlxuXG5UaGVuLCBJIHdhbnQgdG8gYmFjayB1cCBhIGJpdCBhbmQgbG9vayBhdCB0aGUgbW9yZSBmb3VuZGF0aW9uYWwgb3BlcmF0aW9ucyBmcm9tIGxpbmVzIDQ1MC01MDAuIFRoaXMgYXJlYSB3aWxsIGxpa2VseSBjb3ZlciB0aGUgZnVuZGFtZW50YWwgZGVudHJ5IGFsbG9jYXRpb24gb3IgbG9va3VwIHJvdXRpbmVzLCBvciBwZXJoYXBzIGV2ZW4gdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzLiBVbmRlcnN0YW5kaW5nIHRoZXNlIHBpZWNlcyB3aWxsIHByb3ZpZGUgY29udGV4dCBmb3IgdGhlIGxhdGVyIHNlZ21lbnQuIEknbSBjdXJpb3VzIGlmIHRoZXkndmUgaW1wbGVtZW50ZWQgYW55IGNhY2hpbmcgc3RyYXRlZ2llcyB3aXRoaW4gdGhlIGRlbnRyeSBpdHNlbGYsIGFuZCBob3cgdGhvc2UgY2FjaGluZyBkZWNpc2lvbnMgbWF5IGJlIGluZmx1ZW5jaW5nIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHN5c3RlbS4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiBob3cgaXQgaGFuZGxlcyBsb29rdXBzLCBhbmQgaG93IHRoYXQgaW50ZXJzZWN0cyB3aXRoIHRoZSBsb2NraW5nIG1lY2hhbmlzbSwgYW5kIG90aGVyIGNvcmUgZnVuY3Rpb25zLiBJIHdvdWxkIGxpa2UgdG8gc2VlIGhvdyBlZmZpY2llbnQgaXQgaXMgYW5kIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDY3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MTkuODgxMTYxMTg3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDQ0NTpcXHRcXHR9XFxuIDQ0NjpcXHRcXHQvKiBpZiBkZW50cnkgd2FzIG5ldmVyIHZpc2libGUgdG8gUkNVLCBpbW1lZGlhdGUgZnJlZSBpcyBPSyAqL1xcbiA0NDc6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9mbGFncyBcXHUwMDI2IERDQUNIRV9OT1JDVSlcXG4gNDQ4OlxcdFxcdFxcdF9fZF9mcmVlKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfcmN1KTtcXG4gNDQ5OlxcdFxcdGVsc2VcXG4gNDUwOlxcdFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZkZW50cnktXFx1MDAzZWRfcmN1LCBfX2RfZnJlZSk7XFxuIDQ1MTpcXHR9XFxuIDQ1MjpcXHRcXG4gNDUzOlxcdC8qXFxuIDQ1NDpcXHQgKiBJZiBpbm9kZSBpcyB1bmxpbmtlZCBhbmQgZG9lc24ndCBoYXZlIGFueSBhbGlhc2VzIChpLmUuLCBhbGwgZmRzIHBvaW50aW5nIHRvXFxuIDQ1NTpcXHQgKiBpdCBhcmUgY2xvc2VkKSwgaXQgaXMgcHJldHR5IG11Y2ggZGVhZC4gRXhjZXB0IHRoYXQgZmlsZSBoYW5kbGUgbG9va3VwIGNvdWxkXFxuIDQ1NjpcXHQgKiBzdGlsbCByZXZpdmUgaXQgd2hpY2ggY2F1c2VzIGlzc3VlcyB0byBmc25vdGlmeS4gU28gb25jZSBpbm9kZSByZWFjaGVzIHRoaXNcXG4gNDU3OlxcdCAqIHN0YXRlIHdlIG1ha2Ugc3VyZSB0byBibG9jayBjcmVhdGluZyBhbnkgbmV3IGFsaWFzZXMuXFxuIDQ1ODpcXHQgKi9cXG4gNDU5OlxcdHN0YXRpYyBib29sIGlub2RlX25vdGlmeV9kZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDQ2MDpcXHR7XFxuIDQ2MTpcXHRcXHRyZXR1cm4gIWlub2RlLVxcdTAwM2VpX25saW5rIFxcdTAwMjZcXHUwMDI2IGhsaXN0X2VtcHR5KFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kZW50cnkpO1xcbiA0NjI6XFx0fVxcbiA0NjM6XFx0XFxuIDQ2NDpcXHQvKlxcbiA0NjU6XFx0ICogUmVsZWFzZSB0aGUgZGVudHJ5J3MgaW5vZGUsIHVzaW5nIHRoZSBmaWxlc3lzdGVtXFxuIDQ2NjpcXHQgKiBkX2lwdXQoKSBvcGVyYXRpb24gaWYgZGVmaW5lZC5cXG4gNDY3OlxcdCAqL1xcbiA0Njg6XFx0c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxcbiA0Njk6XFx0XFx0X19yZWxlYXNlcyhkZW50cnktXFx1MDAzZWRfbG9jaylcXG4gNDcwOlxcdFxcdF9fcmVsZWFzZXMoZGVudHJ5LVxcdTAwM2VkX2lub2RlLVxcdTAwM2VpX2xvY2spXFxuIDQ3MTpcXHR7XFxuIDQ3MjpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LVxcdTAwM2VkX2lub2RlO1xcbiA0NzM6XFx0XFx0Ym9vbCBub3RpZnlfZGVhZDtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0cmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKFxcdTAwMjZkZW50cnktXFx1MDAzZWRfc2VxKTtcXG4gNDc2OlxcdFxcdF9fZF9jbGVhcl90eXBlX2FuZF9pbm9kZShkZW50cnkpO1xcbiA0Nzc6XFx0XFx0X19obGlzdF9kZWwoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9hbGlhcyk7XFxuIDQ3ODpcXHRcXHQvKlxcbiA0Nzk6XFx0XFx0ICogZGVudHJ5IGJlY29tZXMgbmVnYXRpdmUsIHNvIHRoZSBzcGFjZSBvY2N1cGllZCBieSAtXFx1MDAzZWRfYWxpYXNcXG4gNDgwOlxcdFxcdCAqIGJlbG9uZ3MgdG8gLVxcdTAwM2V3YWl0ZXJzIG5vdy5cXG4gNDgxOlxcdFxcdCAqL1xcbiA0ODI6XFx0XFx0ZGVudHJ5LVxcdTAwM2V3YWl0ZXJzID0gTlVMTDtcXG4gNDgzOlxcdFxcdHJhd193cml0ZV9zZXFjb3VudF9lbmQoXFx1MDAyNmRlbnRyeS1cXHUwMDNlZF9zZXEpO1xcbiA0ODQ6XFx0XFx0bm90aWZ5X2RlYWQgPSBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSk7XFxuIDQ4NTpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2ZGVudHJ5LVxcdTAwM2VkX2xvY2spO1xcbiA0ODY6XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbiA0ODc6XFx0XFx0aWYgKG5vdGlmeV9kZWFkKVxcbiA0ODg6XFx0XFx0XFx0ZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpO1xcbiA0ODk6XFx0XFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9vcCBcXHUwMDI2XFx1MDAyNiBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaXB1dClcXG4gNDkwOlxcdFxcdFxcdGRlbnRyeS1cXHUwMDNlZF9vcC1cXHUwMDNlZF9pcHV0KGRlbnRyeSwgaW5vZGUpO1xcbiA0OTE6XFx0XFx0ZWxzZVxcbiA0OTI6XFx0XFx0XFx0aXB1dChpbm9kZSk7XFxuIDQ5MzpcXHR9XFxuIDQ5NDpcXHRcXG4gNDk1OlxcdC8qXFxuIDQ5NjpcXHQgKiBUaGUgRENBQ0hFX0xSVV9MSVNUIGJpdCBpcyBzZXQgd2hlbmV2ZXIgdGhlICdkX2xydScgZW50cnlcXG4gNDk3OlxcdCAqIGlzIGluIHVzZSAtIHdoaWNoIGluY2x1ZGVzIGJvdGggdGhlIFxcXCJyZWFsXFxcIiBwZXItc3VwZXJibG9ja1xcbiA0OTg6XFx0ICogTFJVIGxpc3QgX2FuZF8gdGhlIERDQUNIRV9TSFJJTktfTElTVCB1c2UuXFxuIDQ5OTpcXHQgKlxcbiA1MDA6XFx0ICogVGhlIERDQUNIRV9TSFJJTktfTElTVCBiaXQgaXMgc2V0IHdoZW5ldmVyIHRoZSBkZW50cnkgaXNcXG4gNTAxOlxcdCAqIG9uIHRoZSBzaHJpbmsgbGlzdCAoaWUgbm90IG9uIHRoZSBzdXBlcmJsb2NrIExSVSBsaXN0KS5cXG4gNTAyOlxcdCAqXFxuIDUwMzpcXHQgKiBUaGUgcGVyLWNwdSBcXFwibnJfZGVudHJ5X3VudXNlZFxcXCIgY291bnRlcnMgYXJlIHVwZGF0ZWQgd2l0aFxcbiA1MDQ6XFx0ICogdGhlIERDQUNIRV9MUlVfTElTVCBiaXQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjE5Ljg4MTM3NzY4N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDI4MDcwNzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZCwgaW4gdGhlIGZpcnN0IHBlcnNvbiBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBSZWxldmFudCBUZXh0IENodW5rcyoqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGxpbmVzIDIyMzUtMjMwMC4gSSBuZWVkIHRvIGdldCBhIHJlYWxseSBnb29kIGdyYXNwIG9mIHRoaXMgc3BlY2lmaWMgc2VjdGlvbi4gR2l2ZW4gbXkgZXhpc3RpbmcgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBjb250ZXh0IGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgc3ViamVjdCBtYXR0ZXIsIEnigJltIGd1ZXNzaW5nIHRoaXMgcmFuZ2UgbGlrZWx5IGNvbnRhaW5zIHRoZSBjcml0aWNhbCBkZXRhaWxzIEknbSBhZnRlciwgb3IgYXQgdGhlIHZlcnkgbGVhc3QsIHJlbGV2YW50IGNvbnRleHQgdGhhdCBoZWxwcyB3aXRoIG15IGN1cnJlbnQgb2JqZWN0aXZlLiBJJ2xsIG5lZWQgdG8gZXhhbWluZSBpdCB3aXRoIGEgZmluZS10b290aCBjb21iLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzcGVjaWZpYyBhcmd1bWVudHMgcHJlc2VudGVkLCBhbnkgc3VwcG9ydGluZyBkYXRhIG9yIGV2aWRlbmNlLCBhbmQgdGhlIG92ZXJhbGwgbmFycmF0aXZlIGZsb3cgd2l0aGluIHRoaXMgZGVsaW1pdGVkIHJhbmdlLiBJdCdzIGEga2V5IHNlZ21lbnQsIHNvIEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIGJpYXNlcywgaW5jb25zaXN0ZW5jaWVzLCBvciBhbnkgc3VycHJpc2luZyByZXZlbGF0aW9ucyB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgd2F5IEkgdGhpbmsgYWJvdXQgdGhlIGVudGlyZSBkb2N1bWVudC4gTXkgZXhwZXJ0aXNlIGxldHMgbWUgY3V0IHN0cmFpZ2h0IHRvIHRoZSBjb3JlIG9mIHRoZSBtYXR0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjIyLjA4NDE4NzI1NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9kY2FjaGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMjM1LFxuICBcIkxpbmVDb3VudFwiOiA2NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMjM1OlxcdFxcdFxcdFxcdGlwdXQocm9vdF9pbm9kZSk7XFxuMjIzNjpcXHRcXHR9XFxuMjIzNzpcXHRcXHRyZXR1cm4gcmVzO1xcbjIyMzg6XFx0fVxcbjIyMzk6XFx0RVhQT1JUX1NZTUJPTChkX21ha2Vfcm9vdCk7XFxuMjI0MDpcXHRcXG4yMjQxOlxcdHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxcbjIyNDI6XFx0e1xcbjIyNDM6XFx0XFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcXG4yMjQ0OlxcdFxcdHN0cnVjdCBkZW50cnkgKm5ldywgKnJlcztcXG4yMjQ1OlxcdFxcbjIyNDY6XFx0XFx0aWYgKCFpbm9kZSlcXG4yMjQ3OlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FU1RBTEUpO1xcbjIyNDg6XFx0XFx0aWYgKElTX0VSUihpbm9kZSkpXFxuMjI0OTpcXHRcXHRcXHRyZXR1cm4gRVJSX0NBU1QoaW5vZGUpO1xcbjIyNTA6XFx0XFxuMjI1MTpcXHRcXHRzYiA9IGlub2RlLVxcdTAwM2VpX3NiO1xcbjIyNTI6XFx0XFxuMjI1MzpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbjIyNTQ6XFx0XFx0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXFxuMjI1NTpcXHRcXHRcXHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1xcdC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xcbjIyNTY6XFx0XFx0ZWxzZVxcbjIyNTc6XFx0XFx0XFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcXG4yMjU4OlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMjU5OlxcdFxcdGlmIChyZXMpXFxuMjI2MDpcXHRcXHRcXHRnb3RvIG91dDtcXG4yMjYxOlxcdFxcbjIyNjI6XFx0XFx0bmV3ID0gZF9hbGxvY19hbm9uKHNiKTtcXG4yMjYzOlxcdFxcdGlmICghbmV3KSB7XFxuMjI2NDpcXHRcXHRcXHRyZXMgPSBFUlJfUFRSKC1FTk9NRU0pO1xcbjIyNjU6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI2NjpcXHRcXHR9XFxuMjI2NzpcXHRcXG4yMjY4OlxcdFxcdHNlY3VyaXR5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7XFxuMjI2OTpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcbjIyNzA6XFx0XFx0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXFxuMjI3MTpcXHRcXHRcXHRyZXMgPSBfX2RfZmluZF9hbnlfYWxpYXMoaW5vZGUpO1xcdC8qIHJlY2hlY2sgdW5kZXIgbG9jayAqL1xcbjIyNzI6XFx0XFx0ZWxzZVxcbjIyNzM6XFx0XFx0XFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcXG4yMjc0OlxcdFxcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cXG4yMjc1OlxcdFxcdFxcdHVuc2lnbmVkIGFkZF9mbGFncyA9IGRfZmxhZ3NfZm9yX2lub2RlKGlub2RlKTtcXG4yMjc2OlxcdFxcbjIyNzc6XFx0XFx0XFx0aWYgKGRpc2Nvbm5lY3RlZClcXG4yMjc4OlxcdFxcdFxcdFxcdGFkZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEO1xcbjIyNzk6XFx0XFxuMjI4MDpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNm5ldy1cXHUwMDNlZF9sb2NrKTtcXG4yMjgxOlxcdFxcdFxcdF9fZF9zZXRfaW5vZGVfYW5kX3R5cGUobmV3LCBpbm9kZSwgYWRkX2ZsYWdzKTtcXG4yMjgyOlxcdFxcdFxcdGhsaXN0X2FkZF9oZWFkKFxcdTAwMjZuZXctXFx1MDAzZWRfYWxpYXMsIFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9kZW50cnkpO1xcbjIyODM6XFx0XFx0XFx0aWYgKCFkaXNjb25uZWN0ZWQpIHtcXG4yMjg0OlxcdFxcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfcm9vdHNfbG9jayk7XFxuMjI4NTpcXHRcXHRcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2bmV3LVxcdTAwM2VkX3NpYiwgXFx1MDAyNnNiLVxcdTAwM2VzX3Jvb3RzKTtcXG4yMjg2OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZzYi1cXHUwMDNlc19yb290c19sb2NrKTtcXG4yMjg3OlxcdFxcdFxcdH1cXG4yMjg4OlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZuZXctXFx1MDAzZWRfbG9jayk7XFxuMjI4OTpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuMjI5MDpcXHRcXHRcXHRpbm9kZSA9IE5VTEw7IC8qIGNvbnN1bWVkIGJ5IG5ldy1cXHUwMDNlZF9pbm9kZSAqL1xcbjIyOTE6XFx0XFx0XFx0cmVzID0gbmV3O1xcbjIyOTI6XFx0XFx0fSBlbHNlIHtcXG4yMjkzOlxcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMjk0OlxcdFxcdFxcdGRwdXQobmV3KTtcXG4yMjk1OlxcdFxcdH1cXG4yMjk2OlxcdFxcbjIyOTc6XFx0IG91dDpcXG4yMjk4OlxcdFxcdGlwdXQoaW5vZGUpO1xcbjIyOTk6XFx0XFx0cmV0dXJuIHJlcztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MjIuMDg0NDAzNzI0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NzgxNTU4MzQ5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29yZSBWRlMgQ2hhbmdlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgc2VlIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIGNvcmUgVkZTLCBzcGVjaWZpY2FsbHkgYGZzL2RjYWNoZS5jYC4gVGhpcyBpcyBhICp2ZXJ5KiBpbnRlcmVzdGluZyBhcmVhLCBpbnZvbHZpbmcgdGhlIGRjYWNoZSwgYG9wZW5fYnlfaGFuZGxlX2F0YCwgYG5hbWVfdG9faGFuZGxlX2F0YCwgYGV4cG9ydGZzYCwgZmlsZSB1bmxpbmtpbmcsIGFuZCBgZnNub3RpZnlgLiAqRGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIGxvZ2ljIGNoYW5nZXMgcmVsYXRlZCB0byB1bmxpbmtlZCBkZWFkIGlub2RlcyBkdXJpbmcgYWxpYXMgcmVzb2x1dGlvbiBhbmQgZnNub3RpZnkgZXZlbnQgZ2VuZXJhdGlvbiBhcmUgY3JpdGljYWwsIHRoYXQncyB3aGVyZSBidWdzIGNhbiBoaWRlLlxuXG5Ob3csIGxldCdzIHRoaW5rIGFib3V0IHRoZSBjb25maWd1cmF0aW9ucyBpbnZvbHZlZC4gYGZzL2RjYWNoZS5jYCBpcyBjb3JlIFZGUywgc28gaXQncyBhbHdheXMgYnVpbHQtaW4sIG5vIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkZWQgZGlyZWN0bHkuIEhvd2V2ZXIsIGFyZSB0aGVyZSAqaW5kaXJlY3QqIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzPyBJJ20gdGhpbmtpbmcgYWJvdXQgYG9wZW5fYnlfaGFuZGxlX2F0YCBhbmQgZXhwb3J0IG9wZXJhdGlvbnMgb3IgYGZzbm90aWZ5YC4gYEZTTk9USUZZYCBpdHNlbGYgaXMgc3RhbmRhcmQsIHNvIHRoYXQncyBub3QgdGhlIGlzc3VlLiBJJ2xsIG5lZWQgdG8gY2hlY2sgaWYgYENPTkZJR19FWFBPUlRGU2Agb3IgYENPTkZJR19GSEFORExFYCBtaWdodCBiZSByZWxldmFudCwgc2luY2UgdGhvc2UgKmRvKiBlbmFibGUgdGhlIGZpbGUgaGFuZGxlIHN5c2NhbGxzIGxpa2UgYG5hbWVfdG9faGFuZGxlX2F0YCBhbmQgYG9wZW5fYnlfaGFuZGxlX2F0YC4gVGhlc2UgYXJlIHRoZSBvbmVzIEkgcmVhbGx5IG5lZWQgdG8gZm9jdXMgb24uIFRoZXkgY2FuIG1ha2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBjb3JlIFZGUyBjaGFuZ2UuXG5cblRvIG1ha2Ugc3VyZSBJIGhhdmUgY292ZXJlZCBhbGwgdGhlIHNjZW5hcmlvcywgSSBuZWVkIHRvIGtub3cgd2hlcmUgYGRfb2J0YWluX2FsaWFzYCBpcyBjYWxsZWQgYWNyb3NzIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGhvdyB0aGlzIGNoYW5nZSBpbXBhY3RzIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjoyOS44OTk5OTE1NDdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NzkwMjA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkX29idGFpbl9hbGlhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvYWZmcy9uYW1laS5jPTUyMz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqYWZmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvYWZmcy9uYW1laS5jLTUzNC1cXHRicmVsc2UoYmgpO1xcbmZzL2FmZnMvbmFtZWkuYzo1MzU6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKHBhcmVudCk7XFxuZnMvYWZmcy9uYW1laS5jLTUzNi19XFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmM9NjY1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpiZWZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjcxLVxcdFxcdFxcdCAgICh1bnNpZ25lZCBsb25nKWJlZnNfaW5vLVxcdTAwM2VpX3BhcmVudC5zdGFydCk7XFxuZnMvYmVmcy9saW51eHZmcy5jOjY3MjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMocGFyZW50KTtcXG5mcy9iZWZzL2xpbnV4dmZzLmMtNjczLX1cXG4tLVxcbmZzL2J0cmZzL2V4cG9ydC5jPTc5PXN0cnVjdCBkZW50cnkgKmJ0cmZzX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9iamVjdGlkLFxcbi0tXFxuZnMvYnRyZnMvZXhwb3J0LmMtMTAyLVxcbmZzL2J0cmZzL2V4cG9ydC5jOjEwMzpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoXFx1MDAyNmlub2RlLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbmZzL2J0cmZzL2V4cG9ydC5jLTEwNC19XFxuLS1cXG5mcy9idHJmcy9leHBvcnQuYz0xNTI9c3RydWN0IGRlbnRyeSAqYnRyZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2J0cmZzL2V4cG9ydC5jLTIyMy1cXG5mcy9idHJmcy9leHBvcnQuYzoyMjQ6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFxcdTAwMjZpbm9kZS1cXHUwMDNldmZzX2lub2RlKTtcXG5mcy9idHJmcy9leHBvcnQuYy0yMjUtZmFpbDpcXG4tLVxcbmZzL2NlcGgvZXhwb3J0LmM9MTg5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2ZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgaW5vKVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy0yMDctXFx0fVxcbmZzL2NlcGgvZXhwb3J0LmM6MjA4OlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvY2VwaC9leHBvcnQuYy0yMDktfVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYz0yMTE9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fc25hcGZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy0yNDUtXFx0XFx0fVxcbmZzL2NlcGgvZXhwb3J0LmM6MjQ2OlxcdFxcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvY2VwaC9leHBvcnQuYy0yNDctXFx0fVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy0yOTQtXFx0Lyogc2VlIGNvbW1lbnRzIGluIGNlcGhfZ2V0X3BhcmVudCgpICovXFxuZnMvY2VwaC9leHBvcnQuYzoyOTU6XFx0cmV0dXJuIHVubGlua2VkID8gZF9vYnRhaW5fcm9vdChpbm9kZSkgOiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvY2VwaC9leHBvcnQuYy0yOTYtfVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYz0zMjM9c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZ2V0X3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy0zNjUtXFxuZnMvY2VwaC9leHBvcnQuYzozNjY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9jZXBoL2V4cG9ydC5jLTM2Ny19XFxuLS1cXG5mcy9jZXBoL2V4cG9ydC5jPTM2OT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqY2VwaF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvY2VwaC9leHBvcnQuYy00MDYtXFx0XFx0ZWxzZVxcbmZzL2NlcGgvZXhwb3J0LmM6NDA3OlxcdFxcdFxcdGRuID0gZF9vYnRhaW5fYWxpYXMoZGlyKTtcXG5mcy9jZXBoL2V4cG9ydC5jLTQwOC1cXHR9IGVsc2Uge1xcbi0tXFxuZnMvZGNhY2hlLmM9MjIzOT1FWFBPUlRfU1lNQk9MKGRfbWFrZV9yb290KTtcXG5mcy9kY2FjaGUuYy0yMjQwLVxcbmZzL2RjYWNoZS5jOjIyNDE6c3RhdGljIHN0cnVjdCBkZW50cnkgKl9fZF9vYnRhaW5fYWxpYXMoc3RydWN0IGlub2RlICppbm9kZSwgYm9vbCBkaXNjb25uZWN0ZWQpXFxuZnMvZGNhY2hlLmMtMjI0Mi17XFxuLS1cXG5mcy9kY2FjaGUuYy0yMzAyLS8qKlxcbmZzL2RjYWNoZS5jOjIzMDM6ICogZF9vYnRhaW5fYWxpYXMgLSBmaW5kIG9yIGFsbG9jYXRlIGEgRElTQ09OTkVDVEVEIGRlbnRyeSBmb3IgYSBnaXZlbiBpbm9kZVxcbmZzL2RjYWNoZS5jLTIzMDQtICogQGlub2RlOiBpbm9kZSB0byBhbGxvY2F0ZSB0aGUgZGVudHJ5IGZvclxcbi0tXFxuZnMvZGNhY2hlLmMtMjMxOS0gKi9cXG5mcy9kY2FjaGUuYzoyMzIwOnN0cnVjdCBkZW50cnkgKmRfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZGNhY2hlLmMtMjMyMS17XFxuZnMvZGNhY2hlLmM6MjMyMjpcXHRyZXR1cm4gX19kX29idGFpbl9hbGlhcyhpbm9kZSwgdHJ1ZSk7XFxuZnMvZGNhY2hlLmMtMjMyMy19XFxuZnMvZGNhY2hlLmM6MjMyNDpFWFBPUlRfU1lNQk9MKGRfb2J0YWluX2FsaWFzKTtcXG5mcy9kY2FjaGUuYy0yMzI1LVxcbi0tXFxuZnMvZGNhY2hlLmM9MjM0MT1zdHJ1Y3QgZGVudHJ5ICpkX29idGFpbl9yb290KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvZGNhY2hlLmMtMjM0Mi17XFxuZnMvZGNhY2hlLmM6MjM0MzpcXHRyZXR1cm4gX19kX29idGFpbl9hbGlhcyhpbm9kZSwgZmFsc2UpO1xcbmZzL2RjYWNoZS5jLTIzNDQtfVxcbi0tXFxuZnMvZXJvZnMvaXNoYXJlLmM9MzM9Ym9vbCBlcm9mc19pc2hhcmVfZmlsbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXJvZnMvaXNoYXJlLmMtNzEtXFx0fVxcbmZzL2Vyb2ZzL2lzaGFyZS5jOjcyOlxcdHNkID0gZF9vYnRhaW5fYWxpYXMoc2kpOyAvKiBkaXNjb25uZWN0ZWQgZGVudGllcyBmb3Igc2hhcmVkaW5vZGVzICovXFxuZnMvZXJvZnMvaXNoYXJlLmMtNzMtXFx0aWYgKElTX0VSUihzZCkpXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jPTU5Nj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZXJvZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9lcm9mcy9zdXBlci5jLTYwMi1cXG5mcy9lcm9mcy9zdXBlci5jOjYwMzpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXJvZnNfaWdldChzYixcXG5mcy9lcm9mcy9zdXBlci5jLTYwNC1cXHRcXHQoKHU2NClmaWQtXFx1MDAzZXJhd1swXSBcXHUwMDNjXFx1MDAzYyAzMikgfCBmaWQtXFx1MDAzZXJhd1sxXSkpO1xcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYz02MDc9c3RhdGljIHN0cnVjdCBkZW50cnkgKmVyb2ZzX2ZoX3RvX3BhcmVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy02MTItXFxuZnMvZXJvZnMvc3VwZXIuYzo2MTM6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGVyb2ZzX2lnZXQoc2IsXFxuZnMvZXJvZnMvc3VwZXIuYy02MTQtXFx0XFx0KCh1NjQpZmlkLVxcdTAwM2VyYXdbM10gXFx1MDAzY1xcdTAwM2MgMzIpIHwgZmlkLVxcdTAwM2VyYXdbNF0pKTtcXG4tLVxcbmZzL2Vyb2ZzL3N1cGVyLmM9NjE3PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICplcm9mc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvZXJvZnMvc3VwZXIuYy02MjUtXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG5mcy9lcm9mcy9zdXBlci5jOjYyNjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXJvZnNfaWdldChjaGlsZC1cXHUwMDNlZF9zYiwgbmlkKSk7XFxuZnMvZXJvZnMvc3VwZXIuYy02MjctfVxcbi0tXFxuZnMvZXh0Mi9uYW1laS5jPTgwPXN0cnVjdCBkZW50cnkgKmV4dDJfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2V4dDIvbmFtZWkuYy04OC1cXG5mcy9leHQyL25hbWVpLmM6ODk6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGV4dDJfaWdldChjaGlsZC1cXHUwMDNlZF9zYiwgaW5vKSk7XFxuZnMvZXh0Mi9uYW1laS5jLTkwLX0gXFxuLS1cXG5mcy9leHQ0L25hbWVpLmM9MTgxOD1zdHJ1Y3QgZGVudHJ5ICpleHQ0X2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9leHQ0L25hbWVpLmMtMTgzNy1cXG5mcy9leHQ0L25hbWVpLmM6MTgzODpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZXh0NF9pZ2V0KGNoaWxkLVxcdTAwM2VkX3NiLCBpbm8sIEVYVDRfSUdFVF9OT1JNQUwpKTtcXG5mcy9leHQ0L25hbWVpLmMtMTgzOS19XFxuLS1cXG5mcy9mMmZzL25hbWVpLmM9NDc0PXN0cnVjdCBkZW50cnkgKmYyZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2YyZnMvbmFtZWkuYy00ODMtXFx0fVxcbmZzL2YyZnMvbmFtZWkuYzo0ODQ6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGYyZnNfaWdldChjaGlsZC1cXHUwMDNlZF9zYiwgaW5vKSk7XFxuZnMvZjJmcy9uYW1laS5jLTQ4NS19XFxuLS1cXG5mcy9mYXQvbmZzLmM9MTU1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmYXRfZmhfdG9fZGVudHJ5X25vc3RhbGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2ZhdC9uZnMuYy0xNzgtXFxuZnMvZmF0L25mcy5jOjE3OTpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL2ZhdC9uZnMuYy0xODAtfVxcbi0tXFxuZnMvZmF0L25mcy5jPTE5Mz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZmF0X2ZoX3RvX3BhcmVudF9ub3N0YWxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9mYXQvbmZzLmMtMjExLVxcbmZzL2ZhdC9uZnMuYzoyMTI6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9mYXQvbmZzLmMtMjEzLX1cXG4tLVxcbmZzL2ZhdC9uZnMuYz0yNzA9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZhdF9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkX2RpcilcXG4tLVxcbmZzL2ZhdC9uZnMuYy0yODUtXFxuZnMvZmF0L25mcy5jOjI4NjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMocGFyZW50X2lub2RlKTtcXG5mcy9mYXQvbmZzLmMtMjg3LX1cXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYz0xMDU0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpmdXNlX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xMDg3LVxcbmZzL2Z1c2UvaW5vZGUuYzoxMDg4OlxcdGVudHJ5ID0gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL2Z1c2UvaW5vZGUuYy0xMDg5LVxcdGlmICghSVNfRVJSKGVudHJ5KSBcXHUwMDI2XFx1MDAyNiBnZXRfbm9kZV9pZChpbm9kZSkgIT0gRlVTRV9ST09UX0lEKVxcbi0tXFxuZnMvZnVzZS9pbm9kZS5jPTExNjE9c3RhdGljIHN0cnVjdCBkZW50cnkgKmZ1c2VfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL2Z1c2UvaW5vZGUuYy0xMTgwLVxcbmZzL2Z1c2UvaW5vZGUuYzoxMTgxOlxcdHBhcmVudCA9IGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9mdXNlL2lub2RlLmMtMTE4Mi1cXHRpZiAoIUlTX0VSUihwYXJlbnQpIFxcdTAwMjZcXHUwMDI2IGdldF9ub2RlX2lkKGlub2RlKSAhPSBGVVNFX1JPT1RfSUQpXFxuLS1cXG5mcy9nZnMyL2V4cG9ydC5jPTEyNj1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2ZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbmZzL2dmczIvZXhwb3J0LmMtMTI3LXtcXG5mcy9nZnMyL2V4cG9ydC5jOjEyODpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoZ2ZzMl9sb29rdXBpKGRfaW5vZGUoY2hpbGQpLCBcXHUwMDI2Z2ZzMl9xZG90ZG90LCAxKSk7XFxuZnMvZ2ZzMi9leHBvcnQuYy0xMjktfVxcbi0tXFxuZnMvZ2ZzMi9leHBvcnQuYz0xMzE9c3RhdGljIHN0cnVjdCBkZW50cnkgKmdmczJfZ2V0X2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvZ2ZzMi9leHBvcnQuYy0xNDAtXFx0XFx0XFx0XFx0ICAgIEdGUzJfQkxLU1RfRElOT0RFKTtcXG5mcy9nZnMyL2V4cG9ydC5jOjE0MTpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL2dmczIvZXhwb3J0LmMtMTQyLX1cXG4tLVxcbmZzL2lzb2ZzL2V4cG9ydC5jPTIwPWlzb2ZzX2V4cG9ydF9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYy0zNS1cXHR9XFxuZnMvaXNvZnMvZXhwb3J0LmM6MzY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9pc29mcy9leHBvcnQuYy0zNy19XFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYz00ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqaXNvZnNfZXhwb3J0X2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9pc29mcy9leHBvcnQuYy0xMDktXFxuZnMvaXNvZnMvZXhwb3J0LmM6MTEwOlxcdHJ2ID0gZF9vYnRhaW5fYWxpYXMoaXNvZnNfaWdldChjaGlsZF9pbm9kZS1cXHUwMDNlaV9zYiwgcGFyZW50X2Jsb2NrLFxcbmZzL2lzb2ZzL2V4cG9ydC5jLTExMS1cXHRcXHRcXHRcXHQgICAgIHBhcmVudF9vZmZzZXQpKTtcXG4tLVxcbmZzL2pmZnMyL3N1cGVyLmM9MTM2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpqZmZzMl9nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvamZmczIvc3VwZXIuYy0xNDktXFxuZnMvamZmczIvc3VwZXIuYzoxNTA6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGpmZnMyX2lnZXQoY2hpbGQtXFx1MDAzZWRfc2IsIHBpbm8pKTtcXG5mcy9qZmZzMi9zdXBlci5jLTE1MS19XFxuLS1cXG5mcy9qZnMvbmFtZWkuYz0xNTEzPXN0cnVjdCBkZW50cnkgKmpmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4tLVxcbmZzL2pmcy9uYW1laS5jLTE1MTktXFxuZnMvamZzL25hbWVpLmM6MTUyMDpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoamZzX2lnZXQoZGVudHJ5LVxcdTAwM2VkX3NiLCBwYXJlbnRfaW5vKSk7XFxuZnMvamZzL25hbWVpLmMtMTUyMS19XFxuLS1cXG5mcy9rZXJuZnMvbW91bnQuYz05Nz1zdGF0aWMgc3RydWN0IGRlbnRyeSAqX19rZXJuZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9rZXJuZnMvbW91bnQuYy0xNDItXFx0a2VybmZzX3B1dChrbik7XFxuZnMva2VybmZzL21vdW50LmM6MTQzOlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMva2VybmZzL21vdW50LmMtMTQ0LX1cXG4tLVxcbmZzL2tlcm5mcy9tb3VudC5jPTE2MD1zdGF0aWMgc3RydWN0IGRlbnRyeSAqa2VybmZzX2dldF9wYXJlbnRfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMva2VybmZzL21vdW50LmMtMTY1LVxcdGd1YXJkKHJ3c2VtX3JlYWQpKFxcdTAwMjZyb290LVxcdTAwM2VrZXJuZnNfcndzZW0pO1xcbmZzL2tlcm5mcy9tb3VudC5jOjE2NjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoa2VybmZzX2dldF9pbm9kZShjaGlsZC1cXHUwMDNlZF9zYiwga2VybmZzX3BhcmVudChrbikpKTtcXG5mcy9rZXJuZnMvbW91bnQuYy0xNjctfVxcbi0tXFxuZnMvbGliZnMuYz0xNDg3PXN0cnVjdCBkZW50cnkgKmdlbmVyaWNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcXG4tLVxcbmZzL2xpYmZzLmMtMTUwMi1cXG5mcy9saWJmcy5jOjE1MDM6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9saWJmcy5jLTE1MDQtfVxcbi0tXFxuZnMvbGliZnMuYz0xNTIwPXN0cnVjdCBkZW50cnkgKmdlbmVyaWNfZmhfdG9fcGFyZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmaWQgKmZpZCxcXG4tLVxcbmZzL2xpYmZzLmMtMTUzNS1cXG5mcy9saWJmcy5jOjE1MzY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9saWJmcy5jLTE1MzctfVxcbi0tXFxuZnMvbmZzL2V4cG9ydC5jPTY0PW5mc19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxcbi0tXFxuZnMvbmZzL2V4cG9ydC5jLTExNS1vdXRfZm91bmQ6XFxuZnMvbmZzL2V4cG9ydC5jOjExNjpcXHRkZW50cnkgPSBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvbmZzL2V4cG9ydC5jLTExNy1vdXRfZnJlZV9mYXR0cjpcXG4tLVxcbmZzL25mcy9leHBvcnQuYz0xMjQ9bmZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxcbi0tXFxuZnMvbmZzL2V4cG9ydC5jLTE0OC1cXHRwaW5vZGUgPSBuZnNfZmhnZXQoc2IsIFxcdTAwMjZmaCwgZmF0dHIpO1xcbmZzL25mcy9leHBvcnQuYzoxNDk6XFx0cGFyZW50ID0gZF9vYnRhaW5fYWxpYXMocGlub2RlKTtcXG5mcy9uZnMvZXhwb3J0LmMtMTUwLW91dDpcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jPTQ2ND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqbmlsZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jLTQ3NS1cXG5mcy9uaWxmczIvbmFtZWkuYzo0NzY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKG5pbGZzX2lnZXQoY2hpbGQtXFx1MDAzZWRfc2IsIHJvb3QsIGlubykpO1xcbmZzL25pbGZzMi9uYW1laS5jLTQ3Ny19XFxuLS1cXG5mcy9uaWxmczIvbmFtZWkuYz00Nzk9c3RhdGljIHN0cnVjdCBkZW50cnkgKm5pbGZzX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGNubyxcXG4tLVxcbmZzL25pbGZzMi9uYW1laS5jLTUwMC1cXHR9XFxuZnMvbmlsZnMyL25hbWVpLmM6NTAxOlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhpbm9kZSk7XFxuZnMvbmlsZnMyL25hbWVpLmMtNTAyLX1cXG4tLVxcbmZzL250ZnMvbmFtZWkuYz0xNTg5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudGZzX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGRfZGVudClcXG4tLVxcbmZzL250ZnMvbmFtZWkuYy0xNjM2LVxcbmZzL250ZnMvbmFtZWkuYzoxNjM3OlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhudGZzX2lnZXQodmktXFx1MDAzZWlfc2IsIHBhcmVudF9pbm8pKTtcXG5mcy9udGZzL25hbWVpLmMtMTYzOC19XFxuLS1cXG5mcy9udGZzMy9uYW1laS5jPTM3OT1zdHJ1Y3QgZGVudHJ5ICpudGZzM19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmNoaWxkKVxcbi0tXFxuZnMvbnRmczMvbmFtZWkuYy0zOTMtXFxuZnMvbnRmczMvbmFtZWkuYzozOTQ6XFx0XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKFxcbmZzL250ZnMzL25hbWVpLmMtMzk1LVxcdFxcdFxcdG50ZnNfaWdldDUoaW5vZGUtXFx1MDAzZWlfc2IsIFxcdTAwMjZmbmFtZS1cXHUwMDNlaG9tZSwgTlVMTCkpO1xcbi0tXFxuZnMvb2NmczIvZXhwb3J0LmM9MzQ9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcXG4tLVxcbmZzL29jZnMyL2V4cG9ydC5jLTEyMC1cXG5mcy9vY2ZzMi9leHBvcnQuYzoxMjE6XFx0cmVzdWx0ID0gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL29jZnMyL2V4cG9ydC5jLTEyMi1cXHRpZiAoSVNfRVJSKHJlc3VsdCkpXFxuLS1cXG5mcy9vY2ZzMi9leHBvcnQuYz0xMzA9c3RhdGljIHN0cnVjdCBkZW50cnkgKm9jZnMyX2dldF9wYXJlbnQoc3RydWN0IGRlbnRyeSAqY2hpbGQpXFxuLS1cXG5mcy9vY2ZzMi9leHBvcnQuYy0xNzktXFxuZnMvb2NmczIvZXhwb3J0LmM6MTgwOlxcdHBhcmVudCA9IGRfb2J0YWluX2FsaWFzKG9jZnMyX2lnZXQoT0NGUzJfU0IoZGlyLVxcdTAwM2VpX3NiKSwgYmxrbm8sIDAsIDApKTtcXG5mcy9vY2ZzMi9leHBvcnQuYy0xODEtXFxuLS1cXG5mcy9vcmFuZ2Vmcy9zdXBlci5jPTMxND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqb3JhbmdlZnNfZmhfdG9fZGVudHJ5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vcmFuZ2Vmcy9zdXBlci5jLTMzMC1cXG5mcy9vcmFuZ2Vmcy9zdXBlci5jOjMzMTpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMob3JhbmdlZnNfaWdldChzYiwgXFx1MDAyNnJlZm4pKTtcXG5mcy9vcmFuZ2Vmcy9zdXBlci5jLTMzMi19XFxuLS1cXG5mcy9vdmVybGF5ZnMvZXhwb3J0LmM9Mjk0PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvdmxfb2J0YWluX2FsaWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuLS1cXG5mcy9vdmVybGF5ZnMvZXhwb3J0LmMtMzMwLVxcbmZzL292ZXJsYXlmcy9leHBvcnQuYzozMzE6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy9vdmVybGF5ZnMvZXhwb3J0LmMtMzMyLX1cXG4tLVxcbmZzL3NxdWFzaGZzL2V4cG9ydC5jPTY2PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzcXVhc2hmc19leHBvcnRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbi0tXFxuZnMvc3F1YXNoZnMvZXhwb3J0LmMtNzUtXFx0aWYgKGlubyBcXHUwMDNlPSAwKVxcbmZzL3NxdWFzaGZzL2V4cG9ydC5jOjc2OlxcdFxcdGRlbnRyeSA9IGRfb2J0YWluX2FsaWFzKHNxdWFzaGZzX2lnZXQoc2IsIGlubywgaW5vX251bSkpO1xcbmZzL3NxdWFzaGZzL2V4cG9ydC5jLTc3LVxcbi0tXFxuZnMvdWRmL25hbWVpLmM9OTE1PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZGZfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL3VkZi9uYW1laS5jLTkyNi1cXHR1ZGZfZmlpdGVyX3JlbGVhc2UoXFx1MDAyNml0ZXIpO1xcbmZzL3VkZi9uYW1laS5jOjkyNzpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXModWRmX2lnZXQoY2hpbGQtXFx1MDAzZWRfc2IsIFxcdTAwMjZ0bG9jKSk7XFxuZnMvdWRmL25hbWVpLmMtOTI4LX1cXG4tLVxcbmZzL3VkZi9uYW1laS5jPTkzMT1zdGF0aWMgc3RydWN0IGRlbnRyeSAqdWRmX25mc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIGJsb2NrLFxcbi0tXFxuZnMvdWRmL25hbWVpLmMtOTUwLVxcdH1cXG5mcy91ZGYvbmFtZWkuYzo5NTE6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy91ZGYvbmFtZWkuYy05NTItfVxcbi0tXFxuZnMvdWZzL3N1cGVyLmM9MTI5PXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICp1ZnNfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZClcXG4tLVxcbmZzL3Vmcy9zdXBlci5jLTEzNS1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcXG5mcy91ZnMvc3VwZXIuYzoxMzY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKHVmc19pZ2V0KGNoaWxkLVxcdTAwM2VkX3NiLCBpbm8pKTtcXG5mcy91ZnMvc3VwZXIuYy0xMzctfVxcbi0tXFxuZnMveGZzL3hmc19leHBvcnQuYz0xNzI9eGZzX2ZzX2ZoX3RvX2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZmlkICpmaWQsXFxuLS1cXG5mcy94ZnMveGZzX2V4cG9ydC5jLTE5MS1cXG5mcy94ZnMveGZzX2V4cG9ydC5jOjE5MjpcXHRyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpO1xcbmZzL3hmcy94ZnNfZXhwb3J0LmMtMTkzLX1cXG4tLVxcbmZzL3hmcy94ZnNfZXhwb3J0LmM9MTk2PXhmc19mc19maF90b19wYXJlbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLFxcbi0tXFxuZnMveGZzL3hmc19leHBvcnQuYy0yMTUtXFxuZnMveGZzL3hmc19leHBvcnQuYzoyMTY6XFx0cmV0dXJuIGRfb2J0YWluX2FsaWFzKGlub2RlKTtcXG5mcy94ZnMveGZzX2V4cG9ydC5jLTIxNy19XFxuLS1cXG5mcy94ZnMveGZzX2V4cG9ydC5jPTIyMD14ZnNfZnNfZ2V0X3BhcmVudChcXG4tLVxcbmZzL3hmcy94ZnNfZXhwb3J0LmMtMjI5LVxcbmZzL3hmcy94ZnNfZXhwb3J0LmM6MjMwOlxcdHJldHVybiBkX29idGFpbl9hbGlhcyhWRlNfSShjaXApKTtcXG5mcy94ZnMveGZzX2V4cG9ydC5jLTIzMS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjMwLjU3NzkwMDE4NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxODk5OTA3NDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZGVudHJ5X3VubGlua19pbm9kZWAgRnVuY3Rpb24gQ2FsbHMqKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBmbG93IGZvciBgZGVudHJ5X3VubGlua19pbm9kZWAuIEZpcnN0LCBJIHJlbWVtYmVyIGl0J3MgYSBzdGF0aWMgZnVuY3Rpb24gcmVzaWRpbmcgaW4gYGZzL2RjYWNoZS5jYC4gVGhhdCBtZWFucyB0aGUgc2NvcGUgaXMgbGlrZWx5IGxpbWl0ZWQgd2l0aGluIHRoYXQgZmlsZSwgd2hpY2ggbWFrZXMgdGhlIGh1bnQgcG90ZW50aWFsbHkgZWFzaWVyLiBOb3csIGxldCdzIHRyYWNlIHRoZSBjYWxsZXJzIHdpdGhpbiBgZnMvZGNhY2hlLmNgIGl0c2VsZi4gVGltZSB0byBkaWcgaW50byB0aGUgY29kZSBhbmQgc2VlIGV4YWN0bHkgd2hlcmUgaXQncyBiZWluZyBpbnZva2VkLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNzgsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjozMi40Nzc4MTA0NzhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMTkwMDk4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZW50cnlfdW5saW5rX2lub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9kY2FjaGUuYz00NTk9c3RhdGljIGJvb2wgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2RjYWNoZS5jLTQ2Ny0gKi9cXG5mcy9kY2FjaGUuYzo0Njg6c3RhdGljIHZvaWQgZGVudHJ5X3VubGlua19pbm9kZShzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5KVxcbmZzL2RjYWNoZS5jLTQ2OS1cXHRfX3JlbGVhc2VzKGRlbnRyeS1cXHUwMDNlZF9sb2NrKVxcbi0tXFxuZnMvZGNhY2hlLmM9ODEyPXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkZW50cnlfa2lsbChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXFxuLS1cXG5mcy9kY2FjaGUuYy04MzgtXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9pbm9kZSlcXG5mcy9kY2FjaGUuYzo4Mzk6XFx0XFx0ZGVudHJ5X3VubGlua19pbm9kZShkZW50cnkpO1xcbmZzL2RjYWNoZS5jLTg0MC1cXHRlbHNlXFxuLS1cXG5mcy9kY2FjaGUuYz0yNzA4PXZvaWQgZF9kZWxldGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jLTI3MjAtXFx0XFx0ZGVudHJ5LVxcdTAwM2VkX2ZsYWdzIFxcdTAwMjY9IH5EQ0FDSEVfQ0FOVF9NT1VOVDtcXG5mcy9kY2FjaGUuYzoyNzIxOlxcdFxcdGRlbnRyeV91bmxpbmtfaW5vZGUoZGVudHJ5KTtcXG5mcy9kY2FjaGUuYy0yNzIyLVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9rZXJuZnMvZGlyLmM9MTIzND1zdGF0aWMgc3RydWN0IGRlbnRyeSAqa2VybmZzX2lvcF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsXFxuLS1cXG5mcy9rZXJuZnMvZGlyLmMtMTI2NS1cXHQgKiBUaGUgbmVnYXRpdmUgZGVudHJ5IGNhbiBiZSBjcmVhdGVkIGluIGtlcm5mc19pb3BfbG9va3VwKClcXG5mcy9rZXJuZnMvZGlyLmM6MTI2NjpcXHQgKiBvciB0cmFuc2Zvcm1zIGZyb20gcG9zaXRpdmUgZGVudHJ5IGluIGRlbnRyeV91bmxpbmtfaW5vZGUoKVxcbmZzL2tlcm5mcy9kaXIuYy0xMjY3LVxcdCAqIGNhbGxlZCBmcm9tIHZmc19ybWRpcigpLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjozMi42MDk3MTY0MDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTAwMTI0NDk4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgZGNhY2hlLmMgU3ltYm9sIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZnMvZGNhY2hlLmNgIGNvZGUuIEZpcnN0LCBJIG5lZWQgdG8gdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQuIEl0IGxvb2tzIGxpa2Ugd2UncmUgbG9va2luZyBhdDogYGRlbnRyeV91bmxpbmtfaW5vZGVgIChzdGF0aWMpLCBgX19kX29idGFpbl9hbGlhc2AgKHN0YXRpYyksIGBkX29idGFpbl9hbGlhc2AgKGV4cG9ydGVkKSwgYGRfb2J0YWluX3Jvb3RgLCBgZF9kZWxldGVgIChjYWxscyBgZGVudHJ5X3VubGlua19pbm9kZWApLCBgZGVudHJ5X2tpbGxgIChzdGF0aWMsIGNhbGxlZCBieSBgZHB1dGApLCBhbmQgYGlub2RlX25vdGlmeV9kZWFkYCAoc3RhdGljIGhlbHBlcikuIFxuXG5Ob3csIGEgcXVpY2sgc2FuaXR5IGNoZWNrLiBDYW4gc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYSBgLmNgIGZpbGUgZXZlbiBiZSBpbmNsdWRlZCBhcyBzeW1ib2xzPyBBaCwgeWVzLCB0aGV5IHNob3VsZCBiZSwgdW5sZXNzIHRoZSBjb21waWxlciBpbmxpbmVzIHRoZW0sIHdoaWNoIGlzIHJhcmUgZm9yIGZ1bmN0aW9ucyB3aXRoIG1hbnkgY2FsbHMsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIGluY2x1ZGUgYm90aCB0aGUgc3RhdGljIGZ1bmN0aW9uIGFuZCB0aGUgZXhwb3J0ZWQgZW50cnlwb2ludC4uIEkgc2hvdWxkIHByb2JhYmx5IHZlcmlmeSB3aGljaCBvbmVzIGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlLiBJdCBsb29rcyBsaWtlIGl0J3MgY29uZmlybWluZyB0aGF0IHdlJ3ZlIGdvdDogYGRfb2J0YWluX2FsaWFzYCwgYF9fZF9vYnRhaW5fYWxpYXNgLCBgZGVudHJ5X3VubGlua19pbm9kZWAsIGBkX2RlbGV0ZWAsIGFuZCBgZF9vYnRhaW5fcm9vdGAuXG5cbldhaXQgYSBtaW51dGUsIGFyZSB3ZSBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBsaWtlIGZpbGUgaGFuZGxlIHN5c2NhbGxzIG9yIGZzbm90aWZ5IGZ1bmN0aW9ucz8gT2ssIGxldCdzIHN0ZXAgYmFjaywgYW5kIGZvY3VzIG9uIHRoZSBrZXkgbW9kaWZpY2F0aW9ucy4gRnJvbSB0aGF0IGZpcnN0IGxpc3QsIHRoZSBjb3JlIGZ1bmN0aW9ucyBiZWluZyB0b3VjaGVkIGFyZSBjbGVhcmx5IGBfX2Rfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX2FsaWFzYCwgYW5kIGBkZW50cnlfdW5saW5rX2lub2RlYC5cblxuTmV4dCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dC4gYGZzL2RjYWNoZS5jYCBpcyBjb21waWxlZCBkaXJlY3RseSBpbnRvIGB2bWxpbnV4YCDigJMgaXQncyBhIGNvcmUgZmlsZXN5c3RlbSBvYmplY3QsIGFzIGluZGljYXRlZCBieSB0aGUgYG9iai15ICs9IGRjYWNoZS5vYCBpbiB0aGUgYGZzL01ha2VmaWxlYC4gU28sIGFyZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMsIGxpa2UgYENPTkZJR19GSEFORExFYCBvciBgQ09ORklHX0VYUE9SVEZTYCwgbmVlZGVkIHRvICpleGVyY2lzZSogYGRfb2J0YWluX2FsaWFzYCB0aHJvdWdoIHN5c2NhbGxzPyBJIGtub3cgdGhhdCBgb3Blbl9ieV9oYW5kbGVfYXRgIHJlcXVpcmVzIGBDT05GSUdfRkhBTkRMRWAuIEkgd2lsbCBoYXZlIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzOiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYGZzL0tjb25maWdgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcwNSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjozNy42MTA5NjM3NzFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDIyMjA4NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZIQU5ETEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE3Nzk9Y29uZmlnIFNHRVRNQVNLX1NZU0NBTExcXG4tLVxcbmluaXQvS2NvbmZpZy0xNzg4LVxcbmluaXQvS2NvbmZpZzoxNzg5OmNvbmZpZyBGSEFORExFXFxuaW5pdC9LY29uZmlnLTE3OTAtXFx0Ym9vbCBcXFwib3BlbiBieSBmaGFuZGxlIHN5c2NhbGxzXFxcIiBpZiBFWFBFUlRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6MzkuOTUzMTg5OTg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTg4MzY0NjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKlF1aWNrIEF1ZGl0IG9mIEZTTk9USUZZIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBiZWZvcmUgd2UgZ2V0IHRvbyBkZWVwIGludG8gdGhpcywgSSBuZWVkIHRvIGNpcmNsZSBiYWNrIHRvIGBGU05PVElGWWAuIFdlJ3ZlIGJlZW4gZm9jdXNpbmcgb24gWCBhbmQgWSwgYnV0IEkndmUgbGVhcm5lZCB0aGUgaGFyZCB3YXkgdGhhdCBvdmVybG9va2luZyBmaWxlc3lzdGVtIG5vdGlmaWNhdGlvbnMgY2FuIGJpdGUgeW91IGxhdGVyLiBJdCdzIGEgY2xhc3NpYyBnb3RjaGEuIEkgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGUgY3VycmVudCBzZXR1cCwgcGFydGljdWxhcmx5IGhvdyB3ZSdyZSBtb25pdG9yaW5nIHRoZSByZWxldmFudCBkaXJlY3RvcmllcyBhbmQgd2hhdCB0cmlnZ2VycyBhcmUgZGVmaW5lZC4gSSB3YW50IHRvIGVuc3VyZSB0aGUgY29uZmlndXJhdGlvbiBpc27igJl0IGEgYm90dGxlbmVjayBvciwgY29udmVyc2VseSwgbGV0dGluZyBjcml0aWNhbCBldmVudHMgc2xpcCB0aHJvdWdoIHRoZSBjcmFja3MuIFRpbWUgZm9yIGEgcXVpY2sgYXVkaXQuIFdlIG5lZWQgdG8gY29uZmlybTogV2hhdCdzIHRoZSBwb2xsaW5nIGludGVydmFsPyBBcmUgd2UgdXNpbmcgcmVjdXJzaXZlIHdhdGNoZXM/IFdoYXQga2luZCBvZiBmaWx0ZXJzIGFyZSBpbiBwbGFjZT8gQXJlIHdlIGNvcnJlY3RseSBjb25maWd1cmVkIGZvciB0aGUgc2NhbGUgb2YgdGhpcyBwcm9qZWN0PyBNYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IHNldHRpbmdzIGNvdWxkIGJlIGEgbWFzc2l2ZSB0aW1lLXNhdmVyLCBzbyBhIHNtYWxsIGNoZWNrIG5vdyBjYW4gc2F2ZSBhIGxhcmdlIGNodW5rIG9mIHdvcmsgbGF0ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjYwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6NDMuMDEyMDI4NThaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTAyMDU0MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEZTTk9USUZZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25vdGlmeS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuZnMvbm90aWZ5L0tjb25maWc6Mjpjb25maWcgRlNOT1RJRllcXG5mcy9ub3RpZnkvS2NvbmZpZy0zLVxcdGRlZl9ib29sIG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTI6NDUuNDIyMjQwNDI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5MTI3ODI3NzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gTm90aWZpY2F0aW9uIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyB6ZXJvIGluIG9uIHRoZSBgZnMvbm90aWZ5L0tjb25maWdgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDEuIEknbSBwcm9iYWJseSBhZnRlciB0aGUgdG9wLWxldmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBmaWxlc3lzdGVtIG5vdGlmaWNhdGlvbiBzdWJzeXN0ZW0uIE15IGluaXRpYWwgdGhvdWdodCBpcyBsaWtlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgYXQgdGhlIGtlcm5lbCBidWlsZCBsZXZlbCwgcGVyaGFwcyB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMgb24gb3RoZXIgZmVhdHVyZXMsIG9yIG1heWJlIGp1c3QgdG8gcmVtaW5kIG15c2VsZiBvZiB0aGUgYnJvYWQgb3ZlcnZpZXcgb2YgdGhlIGV4cG9zZWQgY29udHJvbHMuIEknbGwgYmUgbG9va2luZyBmb3IgdGhlIG1haW4gYGNvbmZpZ2Agc3ltYm9sIGZvciBgZnNub3RpZnlgLCBhbmQgdGhlbiBjaGVja2luZyB0aGUgcmVsYXRpb25zaGlwcyBhbmQgY29uZGl0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhhdC4gVGltZSB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ5NTcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjo0OS4zMzUwMjcxMzZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyOTM4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9ub3RpZnkvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEZTTk9USUZZXFxuICAgMzpcXHRcXHRkZWZfYm9vbCBuXFxuICAgNDpcXHRcXG4gICA1OlxcdHNvdXJjZSBcXFwiZnMvbm90aWZ5L2Rub3RpZnkvS2NvbmZpZ1xcXCJcXG4gICA2OlxcdHNvdXJjZSBcXFwiZnMvbm90aWZ5L2lub3RpZnkvS2NvbmZpZ1xcXCJcXG4gICA3OlxcdHNvdXJjZSBcXFwiZnMvbm90aWZ5L2Zhbm90aWZ5L0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjQ5LjMzNzE2MTA1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjIxNjIwMTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBmc25vdGlmeV9pbm9kZXJlbW92ZWAgRGVmaW5pdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHRoZSBkZWZpbml0aW9uIG9mIGBmc25vdGlmeV9pbm9kZXJlbW92ZWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgY29yZSBoZWFkZXJzLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgZnMvbm90aWZ5YCBzdWJzeXN0ZW0uIEknbSBnb2luZyB0byBjaGVjayBgZnMvbm90aWZ5L2Zzbm90aWZ5LmhgIGFzIGEgbGlrZWx5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGhlYWRlciBwcm9iYWJseSBpbmNsdWRlcyB0aGUgZGVjbGFyYXRpb25zIGZvciB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gbm90aWZpY2F0aW9uIGV2ZW50cy4gSG9wZWZ1bGx5LCBpdCdzIGRlZmluZWQgdGhlcmUsIG9yIGl0IHdpbGwgcG9pbnQgbWUgdG93YXJkcyB0aGUgZmlsZSB0aGF0IGRvZXMgZGVmaW5lIGl0LiBJZiBub3QsIEknbGwgbmVlZCB0byBicm9hZGVuIG15IHNlYXJjaCwgYnV0IHRoaXMgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGluaXRpYWwgbG9jYXRpb24uIEknbSBhc3N1bWluZyBhIGZhaXJseSBzdGFuZGFyZCBMaW51eCBrZXJuZWwgc3RydWN0dXJlIGhlcmUsIG9mIGNvdXJzZS4gTGV0J3Mgc2VlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1Mjc2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMjo1MS45NTg3ODQ2NTZaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNjM5NDMyMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZnNub3RpZnlfaW5vZGVyZW1vdmVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZGNhY2hlLmM9NDY4PXN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSlcXG4tLVxcbmZzL2RjYWNoZS5jLTQ4Ny1cXHRpZiAobm90aWZ5X2RlYWQpXFxuZnMvZGNhY2hlLmM6NDg4OlxcdFxcdGZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKTtcXG5mcy9kY2FjaGUuYy00ODktXFx0aWYgKGRlbnRyeS1cXHUwMDNlZF9vcCBcXHUwMDI2XFx1MDAyNiBkZW50cnktXFx1MDAzZWRfb3AtXFx1MDAzZWRfaXB1dClcXG4tLVxcbmluY2x1ZGUvbGludXgvZnNub3RpZnkuaD0zMDI9c3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X21udG5zX2RlbGV0ZShzdHJ1Y3QgbW50X25hbWVzcGFjZSAqbW50bnMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgtMzA3LS8qXFxuaW5jbHVkZS9saW51eC9mc25vdGlmeS5oOjMwODogKiBmc25vdGlmeV9pbm9kZXJlbW92ZSAtIGFuIGlub2RlIGlzIGdvaW5nIGF3YXlcXG5pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgtMzA5LSAqL1xcbmluY2x1ZGUvbGludXgvZnNub3RpZnkuaDozMTA6c3RhdGljIGlubGluZSB2b2lkIGZzbm90aWZ5X2lub2RlcmVtb3ZlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuaW5jbHVkZS9saW51eC9mc25vdGlmeS5oLTMxMS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEyOjU0LjMyMjczMzI2MVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1ODcwNjQ4NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQ29uZmlndXJhdGlvbiBSYXRpb25hbGUqKlxuXG5Pa2F5LCBsZXQncyBuYWlsIGRvd24gdGhpcyBmdXp6aW5nIHNldHVwLiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkLiBMZXQncyBzdGFydCBieSB2ZXJpZnlpbmcgdGhhdCBgRlNOT1RJRllgIGlzIHNlbGVjdGVkIGJ5IGBJTk9USUZZX1VTRVJgIGFuZCBgRkFOT1RJRllgLCBhbmQgeWVzLCB0aGUgS2NvbmZpZyBmaWxlcyBjb25maXJtIHRoYXQgZGVwZW5kZW5jeS4gTm8gc3VycHJpc2VzIHRoZXJlLiBUaGVuLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoaWNoIG90aGVyIGNvcmUgY29uZmlncyBhcmUgcmVsZXZhbnQgYW5kIGluIHRoaXMgY2FzZSwgYEZIQU5ETEVgLCBgRlNOT1RJRllgLCBgSU5PVElGWV9VU0VSYCwgYW5kIGBGQU5PVElGWWAgYXJlIHRoZSBvbmVzIHdlJ3JlIHRhcmdldGluZy5cblxuTm93LCBmb3IgdGhlIGNyaXRpY2FsIHBhcnQ6IHRoZSBmdXp6aW5nIHN5bWJvbHMuIEkndmUgZ290IHRvIGJlIHNtYXJ0IGFib3V0IHRoaXMgYW5kIHNlbGVjdCBmdW5jdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgZW5vdWdoIHRvIGJlIHRhcmdldGVkIGJ1dCBub3Qgc28gdWJpcXVpdG91cyB0aGF0IHRoZXkgb3ZlcndoZWxtIHRoZSBmdXp6ZXIuIE15IGluaXRpYWwgY2FuZGlkYXRlcyBhcmU6IGBfX2Rfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX2FsaWFzYCwgYGRfb2J0YWluX3Jvb3RgLCBhbmQgYGRlbnRyeV91bmxpbmtfaW5vZGVgLiBBcmUgdGhleSBnb29kIGNob2ljZXM/IGBkX29idGFpbl9hbGlhc2AgYW5kIGBfX2Rfb2J0YWluX2FsaWFzYCBhcmUgdXNlZCBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3Vwcywgd2hpY2ggaXMgcHJvbWlzaW5nLiBgZGVudHJ5X3VubGlua19pbm9kZWAgaXMgbGlua2VkIHRvIHVubGlua2luZy9kZWxldGluZywgYW5kIHRoaXMgaXMgd2hhdCB3ZSdyZSB0YXJnZXRpbmcuIFllcywgdGhlc2UgbG9vayBsaWtlIGdvb2QgdGFyZ2V0cy5cblxuTmV4dCwgSSdsbCByZXZpc2l0IHRoZSBXb3J0aEZ1enppbmcgY3JpdGVyaWEgYW5kIGNvbmZpcm0gdGhhdCB0aGUgcmVmYWN0b3Jpbmcgd29yayBhcm91bmQgaGFuZGxpbmcgdW5saW5rZWQgaW5vZGVzIGFuZCBmc25vdGlmeSBldmVudHMgZml0cyB0aGUgY3JpdGVyaWEsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgVkZTIGNvcmUgbG9naWMuIExvb2tzIGdvb2Q7IHRoZSBjaGFuZ2VzIGFyZSBjZW50ZXJlZCBvbiBmaWxlIGhhbmRsZSBsb29rdXAgYW5kIGVuc3VyaW5nIGBmc25vdGlmeWAgZXZlbnRzIGFyZSBjb3JyZWN0LiBTbywgeWVzLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGVseSBgdHJ1ZWAuXG5cbkZpbmFsbHksIGxldCdzIHdyYXAgdGhpcyB1cCB3aXRoIGEgZmluYWwgY2hlY2sgb2YgYWxsIGlucHV0czpcbiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgbG9naWMgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gcmV2aXZpbmcgZGVhZCBpbm9kZXMgYW5kIGVuc3VyZXMgY29ycmVjdCBgZnNub3RpZnlgIGV2ZW50cy4gV2Ugd2FudCB0byBmdXp6IGZpbGUgaGFuZGxlIGxvb2t1cHMgYW5kIGNvbmN1cnJlbnQgb3BlcmF0aW9ucy5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJGSEFORExFXCIsIFwiRlNOT1RJRllcIiwgXCJJTk9USUZZX1VTRVJcIiwgXCJGQU5PVElGWVwiXWBcbiogICBgRm9jdXNTeW1ib2xzYDogYFtcIl9fZF9vYnRhaW5fYWxpYXNcIiwgXCJkX29idGFpbl9hbGlhc1wiLCBcImRfb2J0YWluX3Jvb3RcIiwgXCJkZW50cnlfdW5saW5rX2lub2RlXCJdYFxuXG5BbHJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gV2Ugc2hvdWxkIGJlIGFsbCBzZXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzY0LCJPdXRwdXRUb2tlbnMiOjE4MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMzowMC4xOTMzODUxMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI5NTM5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkZIQU5ETEVcIixcbiAgICBcIkZTTk9USUZZXCIsXG4gICAgXCJJTk9USUZZX1VTRVJcIixcbiAgICBcIkZBTk9USUZZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX19kX29idGFpbl9hbGlhc1wiLFxuICAgIFwiZF9vYnRhaW5fYWxpYXNcIixcbiAgICBcImRfb2J0YWluX3Jvb3RcIixcbiAgICBcImRlbnRyeV91bmxpbmtfaW5vZGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIFZGUyBkY2FjaGUgbG9naWMgaW4gZnMvZGNhY2hlLmMgKF9fZF9vYnRhaW5fYWxpYXMsIGRlbnRyeV91bmxpbmtfaW5vZGUpIHRvIHByZXZlbnQgZmlsZSBoYW5kbGUgbG9va3VwcyBmcm9tIGNyZWF0aW5nIGFsaWFzZXMgZm9yIGRlYWQgdW5saW5rZWQgaW5vZGVzIGFuZCB0byBhY2N1cmF0ZWx5IG5vdGlmeSBmc25vdGlmeSB3aGVuIHVubGlua2VkIGlub2RlcyBoYXZlIG5vIHJlbWFpbmluZyBhbGlhc2VzLiBGdXp6aW5nIHdpdGggZmlsZSBoYW5kbGUgc3lzY2FsbHMgKG9wZW5fYnlfaGFuZGxlX2F0KSBhbmQgY29uY3VycmVudCB1bmxpbmsvZXhwb3J0ZnMgb3BlcmF0aW9ucyBpcyB3YXJyYW50ZWQgdG8gdGVzdCBmb3IgcmFjZSBjb25kaXRpb25zIG9yIHVuZXhwZWN0ZWQgc3RhdGUgdHJhbnNpdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRkhBTkRMRVwiLFxuICAgIFwiRlNOT1RJRllcIixcbiAgICBcIklOT1RJRllfVVNFUlwiLFxuICAgIFwiRkFOT1RJRllcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX2Rfb2J0YWluX2FsaWFzXCIsXG4gICAgXCJkX29idGFpbl9hbGlhc1wiLFxuICAgIFwiZF9vYnRhaW5fcm9vdFwiLFxuICAgIFwiZGVudHJ5X3VubGlua19pbm9kZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgVkZTIGRjYWNoZSBsb2dpYyBpbiBmcy9kY2FjaGUuYyAoX19kX29idGFpbl9hbGlhcywgZGVudHJ5X3VubGlua19pbm9kZSkgdG8gcHJldmVudCBmaWxlIGhhbmRsZSBsb29rdXBzIGZyb20gY3JlYXRpbmcgYWxpYXNlcyBmb3IgZGVhZCB1bmxpbmtlZCBpbm9kZXMgYW5kIHRvIGFjY3VyYXRlbHkgbm90aWZ5IGZzbm90aWZ5IHdoZW4gdW5saW5rZWQgaW5vZGVzIGhhdmUgbm8gcmVtYWluaW5nIGFsaWFzZXMuIEZ1enppbmcgd2l0aCBmaWxlIGhhbmRsZSBzeXNjYWxscyAob3Blbl9ieV9oYW5kbGVfYXQpIGFuZCBjb25jdXJyZW50IHVubGluay9leHBvcnRmcyBvcGVyYXRpb25zIGlzIHdhcnJhbnRlZCB0byB0ZXN0IGZvciByYWNlIGNvbmRpdGlvbnMgb3IgdW5leHBlY3RlZCBzdGF0ZSB0cmFuc2l0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTM6MDAuMzE2MzUxODkxWiIsIlNlcSI6MjMsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ3MTc1NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEzOjAwLjMxNjg0NzQ3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIxNDcxMjUzMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbm9kZSBhbGlhcyBsb29rdXAgYW5kIGRlbnRyeSB1bmxpbmtpbmcgbG9naWMgaW4gZnMvZGNhY2hlLmMgdG8gcHJldmVudCByZXZpdmluZyBkZWFkL3VubGlua2VkIGlub2RlcyBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3VwcyAod2hpY2ggaW50ZXJmZXJlcyB3aXRoIGZzbm90aWZ5KS4gVGhlIGNoYW5nZXMgb25seSB0b3VjaCBzdGFuZGFyZCBpbm9kZSBmaWVsZHMgKGlfbmxpbmssIGlfZGVudHJ5KSBhbmQgdXNlIGEgbG9jYWxseSBhc3NpZ25lZCBib29sZWFuIHZhcmlhYmxlIChub3RpZnlfZGVhZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gc2VtYW50aWNzLCBpbm9kZSBsaWZlY3ljbGVzLCBvciBsb2NraW5nLCB3aGljaCBmYWxsIHVuZGVyIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGRiMDcxZDE4YjgzNWJhMjYwYjY3NDlhODJjMzljNWQ2YmYwNTI3N1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMTQ6MTI6MDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jXG5pbmRleCAxYjFhODFmMTBkYTY3Li44ZjE3ZGIyNzI0YjM4IDEwMDY0NFxuLS0tIGEvZnMvZGNhY2hlLmNcbisrKyBiL2ZzL2RjYWNoZS5jXG5AQCAtNDUwLDYgKzQ1MCwxNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfZnJlZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpXG4gXHRcdGNhbGxfcmN1KFx1MDAyNmRlbnRyeS1cdTAwM2VkX3JjdSwgX19kX2ZyZWUpO1xuIH1cbiBcbisvKlxuKyAqIElmIGlub2RlIGlzIHVubGlua2VkIGFuZCBkb2Vzbid0IGhhdmUgYW55IGFsaWFzZXMgKGkuZS4sIGFsbCBmZHMgcG9pbnRpbmcgdG9cbisgKiBpdCBhcmUgY2xvc2VkKSwgaXQgaXMgcHJldHR5IG11Y2ggZGVhZC4gRXhjZXB0IHRoYXQgZmlsZSBoYW5kbGUgbG9va3VwIGNvdWxkXG4rICogc3RpbGwgcmV2aXZlIGl0IHdoaWNoIGNhdXNlcyBpc3N1ZXMgdG8gZnNub3RpZnkuIFNvIG9uY2UgaW5vZGUgcmVhY2hlcyB0aGlzXG4rICogc3RhdGUgd2UgbWFrZSBzdXJlIHRvIGJsb2NrIGNyZWF0aW5nIGFueSBuZXcgYWxpYXNlcy5cbisgKi9cbitzdGF0aWMgYm9vbCBpbm9kZV9ub3RpZnlfZGVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdHJldHVybiAhaW5vZGUtXHUwMDNlaV9ubGluayBcdTAwMjZcdTAwMjYgaGxpc3RfZW1wdHkoXHUwMDI2aW5vZGUtXHUwMDNlaV9kZW50cnkpO1xuK31cbitcbiAvKlxuICAqIFJlbGVhc2UgdGhlIGRlbnRyeSdzIGlub2RlLCB1c2luZyB0aGUgZmlsZXN5c3RlbVxuICAqIGRfaXB1dCgpIG9wZXJhdGlvbiBpZiBkZWZpbmVkLlxuQEAgLTQ1OSw2ICs0NzAsNyBAQCBzdGF0aWMgdm9pZCBkZW50cnlfdW5saW5rX2lub2RlKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpXG4gXHRfX3JlbGVhc2VzKGRlbnRyeS1cdTAwM2VkX2lub2RlLVx1MDAzZWlfbG9jaylcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LVx1MDAzZWRfaW5vZGU7XG4rXHRib29sIG5vdGlmeV9kZWFkO1xuIFxuIFx0cmF3X3dyaXRlX3NlcWNvdW50X2JlZ2luKFx1MDAyNmRlbnRyeS1cdTAwM2VkX3NlcSk7XG4gXHRfX2RfY2xlYXJfdHlwZV9hbmRfaW5vZGUoZGVudHJ5KTtcbkBAIC00NjksOSArNDgxLDEwIEBAIHN0YXRpYyB2b2lkIGRlbnRyeV91bmxpbmtfaW5vZGUoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSlcbiBcdCAqL1xuIFx0ZGVudHJ5LVx1MDAzZXdhaXRlcnMgPSBOVUxMO1xuIFx0cmF3X3dyaXRlX3NlcWNvdW50X2VuZChcdTAwMjZkZW50cnktXHUwMDNlZF9zZXEpO1xuK1x0bm90aWZ5X2RlYWQgPSBpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSk7XG4gXHRzcGluX3VubG9jayhcdTAwMjZkZW50cnktXHUwMDNlZF9sb2NrKTtcbiBcdHNwaW5fdW5sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4tXHRpZiAoIWlub2RlLVx1MDAzZWlfbmxpbmspXG4rXHRpZiAobm90aWZ5X2RlYWQpXG4gXHRcdGZzbm90aWZ5X2lub2RlcmVtb3ZlKGlub2RlKTtcbiBcdGlmIChkZW50cnktXHUwMDNlZF9vcCBcdTAwMjZcdTAwMjYgZGVudHJ5LVx1MDAzZWRfb3AtXHUwMDNlZF9pcHV0KVxuIFx0XHRkZW50cnktXHUwMDNlZF9vcC1cdTAwM2VkX2lwdXQoZGVudHJ5LCBpbm9kZSk7XG5AQCAtMjIzNyw3ICsyMjUwLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpfX2Rfb2J0YWluX2FsaWFzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgZGlzY29ubmVjdGVkKVxuIFxuIFx0c2IgPSBpbm9kZS1cdTAwM2VpX3NiO1xuIFxuLVx0cmVzID0gZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7IC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xuK1x0c3Bpbl9sb2NrKFx1MDAyNmlub2RlLVx1MDAzZWlfbG9jayk7XG4rXHRpZiAoIWlub2RlX25vdGlmeV9kZWFkKGlub2RlKSlcbitcdFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcdC8qIGV4aXN0aW5nIGFsaWFzPyAqL1xuK1x0ZWxzZVxuK1x0XHRyZXMgPSBFUlJfUFRSKC1FU1RBTEUpO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbiBcdGlmIChyZXMpXG4gXHRcdGdvdG8gb3V0O1xuIFxuQEAgLTIyNDksNyArMjI2NywxMCBAQCBzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcbiBcbiBcdHNlY3VyaXR5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7XG4gXHRzcGluX2xvY2soXHUwMDI2aW5vZGUtXHUwMDNlaV9sb2NrKTtcbi1cdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7IC8qIHJlY2hlY2sgdW5kZXIgbG9jayAqL1xuK1x0aWYgKCFpbm9kZV9ub3RpZnlfZGVhZChpbm9kZSkpXG4rXHRcdHJlcyA9IF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSk7XHQvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi9cbitcdGVsc2VcbitcdFx0cmVzID0gRVJSX1BUUigtRVNUQUxFKTtcbiBcdGlmIChsaWtlbHkoIXJlcykpIHsgLyogc3RpbGwgbm8gYWxpYXMsIGF0dGFjaCBhIGRpc2Nvbm5lY3RlZCBkZW50cnkgKi9cbiBcdFx0dW5zaWduZWQgYWRkX2ZsYWdzID0gZF9mbGFnc19mb3JfaW5vZGUoaW5vZGUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTM6MDAuMzE2ODQ4NDQxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjkyODU3NjIwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgS01TQU4gRnV6emluZyBOZWVkcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCB0byBgZnMvZGNhY2hlLmNgLiBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLCBhbmQgaWYgaXQgZG9lcywgd2hhdCB0aGUgYXR0YWNrIHN1cmZhY2UgbG9va3MgbGlrZS5cblxuRmlyc3QsIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgaW5vZGVfbm90aWZ5X2RlYWQoc3RydWN0IGlub2RlICppbm9kZSlgLiBMb29rcyBsaWtlIGEgc2ltcGxlIGNoZWNrOiBpcyB0aGUgaW5vZGUncyBsaW5rIGNvdW50IHplcm8gYW5kIGlzIGl0cyBkZW50cnkgbGlzdCBlbXB0eT8gVGhhdCBzb3VuZHMgbGlrZSB0aGUgaW5vZGUgaXMgdHJ1bHkgZGVhZCwgb3IgYXQgbGVhc3QgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBuYW1lc3BhY2UuXG5cbk5leHQsIGNoYW5nZXMgaW4gYGRlbnRyeV91bmxpbmtfaW5vZGVgLiBUaGUgY29kZSBub3cgdXNlcyB0aGUgYGlub2RlX25vdGlmeV9kZWFkYCByZXR1cm4gdmFsdWUgdG8gZGV0ZXJtaW5lIHdoZW4gdG8gY2FsbCBgZnNub3RpZnlfaW5vZGVyZW1vdmUoaW5vZGUpYC4gVGhpcyBzZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIG9wdGltaXphdGlvbjsgcmF0aGVyIHRoYW4gcmUtY2hlY2tpbmcgdGhlIGxpbmsgY291bnQgYWZ0ZXIgcmVsZWFzaW5nIGxvY2tzLCBpdCdzIG5vdyByZXVzaW5nIHRoZSByZXN1bHQgb2YgYGlub2RlX25vdGlmeV9kZWFkYC4gQ2xlYW5lciBhbmQgcG90ZW50aWFsbHkgbW9yZSBlZmZpY2llbnQuXG5cblRoZSByZWFsbHkgaW50ZXJlc3Rpbmcgc3R1ZmYgaXMgaGFwcGVuaW5nIGluIGBfX2Rfb2J0YWluX2FsaWFzYC4gVGhpcyBpcyB3aGVyZSB0aGUgcGF0Y2ggZ2V0cyBpbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSBgX19kX29idGFpbl9hbGlhc2AgaXMgZ2V0dGluZyBhIGNvbmRpdGlvbmFsIGNoZWNrIGJhc2VkIG9uIGBpbm9kZV9ub3RpZnlfZGVhZGAuIFRoZSBpbnRlbnRpb24gaGVyZSBzZWVtcyB0byBiZSB0aGF0IGlmIHRoZSBpbm9kZSBpcyBcImRlYWQsXCIgZG9uJ3QgYm90aGVyIHRyeWluZyB0byBmaW5kIGFuIGV4aXN0aW5nIGFsaWFzLCBiZWNhdXNlIGl0IHdvdWxkbid0IGJlIHZhbGlkLCBhbmQganVzdCBzaG9ydC1jaXJjdWl0IHdpdGggYEVSUl9QVFIoLUVTVEFMRSlgLiBJdCdzIGRvaW5nIHRoaXMgKnVuZGVyIGEgbG9jayouIFRoYXQncyB0aGUgaW1wb3J0YW50IHBpZWNlIGhlcmUuIExvY2tpbmcgaXMgaW52b2x2ZWQuXG5cblNvLCBpbiB0aGUgZmlyc3QgY2FzZSwgYmVmb3JlIGF0dGVtcHRpbmcgdG8gZmluZCBhbiBhbGlhcywgdGhlIGNvZGUgbG9ja3MgdGhlIGlub2RlLCBhbmQgY2hlY2tzIGlmIGl0J3MgZGVhZCwgaWYgaXQgaXMsIGBfX2RfZmluZF9hbnlfYWxpYXNgIGlzIHNraXBwZWQuIFRoZSBzYW1lIGxvZ2ljIGlzIGFwcGxpZWQgaW4gdGhlIHJlY2hlY2sgdW5kZXIgbG9jay4gVGhpcyBsb29rcyBsaWtlIGEgcmFjZSBjb25kaXRpb24gcHJvdGVjdGlvbiBtZWNoYW5pc20uIEFuIGlub2RlIG1pZ2h0IGJlIGNvbmN1cnJlbnRseSB1bmxpbmtlZCB3aGlsZSBhIG5ldyBhbGlhcyBpcyBiZWluZyBjcmVhdGVkLlxuXG5MZXQgbWUgdXNlIG15IGByZWFkLWZpbGVgIHRvb2wgdG8gcXVpY2tseSBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIG9mIGBfX2Rfb2J0YWluX2FsaWFzYCB3aXRoaW4gdGhlIGBmcy9kY2FjaGUuY2AgY29udGV4dC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlICp3aHkqIGJlaGluZCB0aGlzIGNoYW5nZS4gU3BlY2lmaWNhbGx5LCB3aGF0J3MgY2FsbGluZyBgX19kX29idGFpbl9hbGlhc2AsIGFuZCB3aGF0IGFyZSB0aGUgY2FsbGVyJ3MgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIHN0YXRlIG9mIHRoZSBpbm9kZSBhbmQgZGVudHJ5PyBXaGF0IGNvdWxkIGhhcHBlbiBpZiBpdCB0cmllZCB0byBvYnRhaW4gYW4gYWxpYXMgZm9yIHNvbWV0aGluZyBhbHJlYWR5IGJlaW5nIHVubGlua2VkP1xuXG5Pa2F5LCB0aGUgZ2VuZXJhbCBwaWN0dXJlIGlzIHRoYXQgdGhpcyBpcyBoYW5kbGluZyB0aGUgY3JlYXRpb24gb3IgcmUtZXN0YWJsaXNobWVudCBvZiBkZW50cmllcyByZWxhdGVkIHRvIGlub2Rlcywgd2hpY2ggaXMgcmlnaHQgaW4gdGhlIHdoZWVsaG91c2UgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMuIEdpdmVuIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCB1bmxpbmtpbmcsIGFsaWFzaW5nLCBhbmQgbG9ja2luZywgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzICpwb3RlbnRpYWwqIHRpbWluZyB3aW5kb3dzIHdoZXJlIGFuIGlub2RlJ3Mgc3RhdGUgY291bGQgYmUgbW9kaWZpZWQgY29uY3VycmVudGx5LiBUaGUgYWRkZWQgY2hlY2sgdXNpbmcgYGlub2RlX25vdGlmeV9kZWFkYCBpcyBhIGdvb2QgYXR0ZW1wdCBhdCBwcm90ZWN0aW9uLCBidXQgSSBoYXZlIHRvIGNhcmVmdWxseSBjb25zaWRlciB0aGUgZWRnZSBjYXNlcyB3aGVyZSBhbiBpbm9kZSBjb3VsZCB0cmFuc2l0aW9uIGludG8gYSBcImRlYWRcIiBzdGF0ZSAqZHVyaW5nKiB0aGUgb3BlcmF0aW9ucyBpbiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoZSBsb2NraW5nIGlzIGNvcnJlY3RseSBwcm90ZWN0aW5nIGFnYWluc3QgY29uY3VycmVudCBtb2RpZmljYXRpb25zLCBhbmQgdGhhdCB0aGVyZSBhcmUgbm8gaW5jb3JyZWN0IGFzc3VtcHRpb25zIGFib3V0IHRoZSBpbm9kZSdzIGxpZmVjeWNsZS4gQSBLTVNBTiBmdXp6aW5nIHNlc3Npb24gY291bGQgYmUgdmVyeSB2YWx1YWJsZSBmb3IgZmluZGluZyByYWNlcywgVUFGcywgb3IgZG91YmxlLWZyZWVzIHJlbGF0ZWQgdG8gdGhlc2UgdHJhbnNpdGlvbnMuIFllcywgbGV0J3MgZG8gaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MDYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMzowOS42MDI2MTM3NTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI1MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyMzA6XFx0XFx0aWYgKHJvb3RfaW5vZGUpIHtcXG4yMjMxOlxcdFxcdFxcdHJlcyA9IGRfYWxsb2NfYW5vbihyb290X2lub2RlLVxcdTAwM2VpX3NiKTtcXG4yMjMyOlxcdFxcdFxcdGlmIChyZXMpXFxuMjIzMzpcXHRcXHRcXHRcXHRkX2luc3RhbnRpYXRlKHJlcywgcm9vdF9pbm9kZSk7XFxuMjIzNDpcXHRcXHRcXHRlbHNlXFxuMjIzNTpcXHRcXHRcXHRcXHRpcHV0KHJvb3RfaW5vZGUpO1xcbjIyMzY6XFx0XFx0fVxcbjIyMzc6XFx0XFx0cmV0dXJuIHJlcztcXG4yMjM4OlxcdH1cXG4yMjM5OlxcdEVYUE9SVF9TWU1CT0woZF9tYWtlX3Jvb3QpO1xcbjIyNDA6XFx0XFxuMjI0MTpcXHRzdGF0aWMgc3RydWN0IGRlbnRyeSAqX19kX29idGFpbl9hbGlhcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBib29sIGRpc2Nvbm5lY3RlZClcXG4yMjQyOlxcdHtcXG4yMjQzOlxcdFxcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XFxuMjI0NDpcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpuZXcsICpyZXM7XFxuMjI0NTpcXHRcXG4yMjQ2OlxcdFxcdGlmICghaW5vZGUpXFxuMjI0NzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTtcXG4yMjQ4OlxcdFxcdGlmIChJU19FUlIoaW5vZGUpKVxcbjIyNDk6XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKGlub2RlKTtcXG4yMjUwOlxcdFxcbjIyNTE6XFx0XFx0c2IgPSBpbm9kZS1cXHUwMDNlaV9zYjtcXG4yMjUyOlxcdFxcbjIyNTM6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMjU0OlxcdFxcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxcbjIyNTU6XFx0XFx0XFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcXHQvKiBleGlzdGluZyBhbGlhcz8gKi9cXG4yMjU2OlxcdFxcdGVsc2VcXG4yMjU3OlxcdFxcdFxcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XFxuMjI1ODpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuMjI1OTpcXHRcXHRpZiAocmVzKVxcbjIyNjA6XFx0XFx0XFx0Z290byBvdXQ7XFxuMjI2MTpcXHRcXG4yMjYyOlxcdFxcdG5ldyA9IGRfYWxsb2NfYW5vbihzYik7XFxuMjI2MzpcXHRcXHRpZiAoIW5ldykge1xcbjIyNjQ6XFx0XFx0XFx0cmVzID0gRVJSX1BUUigtRU5PTUVNKTtcXG4yMjY1OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjIyNjY6XFx0XFx0fVxcbjIyNjc6XFx0XFxuMjI2ODpcXHRcXHRzZWN1cml0eV9kX2luc3RhbnRpYXRlKG5ldywgaW5vZGUpO1xcbjIyNjk6XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9sb2NrKTtcXG4yMjcwOlxcdFxcdGlmICghaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpKVxcbjIyNzE6XFx0XFx0XFx0cmVzID0gX19kX2ZpbmRfYW55X2FsaWFzKGlub2RlKTtcXHQvKiByZWNoZWNrIHVuZGVyIGxvY2sgKi9cXG4yMjcyOlxcdFxcdGVsc2VcXG4yMjczOlxcdFxcdFxcdHJlcyA9IEVSUl9QVFIoLUVTVEFMRSk7XFxuMjI3NDpcXHRcXHRpZiAobGlrZWx5KCFyZXMpKSB7IC8qIHN0aWxsIG5vIGFsaWFzLCBhdHRhY2ggYSBkaXNjb25uZWN0ZWQgZGVudHJ5ICovXFxuMjI3NTpcXHRcXHRcXHR1bnNpZ25lZCBhZGRfZmxhZ3MgPSBkX2ZsYWdzX2Zvcl9pbm9kZShpbm9kZSk7XFxuMjI3NjpcXHRcXG4yMjc3OlxcdFxcdFxcdGlmIChkaXNjb25uZWN0ZWQpXFxuMjI3ODpcXHRcXHRcXHRcXHRhZGRfZmxhZ3MgfD0gRENBQ0hFX0RJU0NPTk5FQ1RFRDtcXG4yMjc5OlxcdFxcbjIyODA6XFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZuZXctXFx1MDAzZWRfbG9jayk7XFxuMjI4MTpcXHRcXHRcXHRfX2Rfc2V0X2lub2RlX2FuZF90eXBlKG5ldywgaW5vZGUsIGFkZF9mbGFncyk7XFxuMjI4MjpcXHRcXHRcXHRobGlzdF9hZGRfaGVhZChcXHUwMDI2bmV3LVxcdTAwM2VkX2FsaWFzLCBcXHUwMDI2aW5vZGUtXFx1MDAzZWlfZGVudHJ5KTtcXG4yMjgzOlxcdFxcdFxcdGlmICghZGlzY29ubmVjdGVkKSB7XFxuMjI4NDpcXHRcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiLVxcdTAwM2VzX3Jvb3RzX2xvY2spO1xcbjIyODU6XFx0XFx0XFx0XFx0aGxpc3RfYWRkX2hlYWQoXFx1MDAyNm5ldy1cXHUwMDNlZF9zaWIsIFxcdTAwMjZzYi1cXHUwMDNlc19yb290cyk7XFxuMjI4NjpcXHRcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2c2ItXFx1MDAzZXNfcm9vdHNfbG9jayk7XFxuMjI4NzpcXHRcXHRcXHR9XFxuMjI4ODpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2bmV3LVxcdTAwM2VkX2xvY2spO1xcbjIyODk6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlub2RlLVxcdTAwM2VpX2xvY2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMzowOS42MDI4NDE0OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQwMjQ0MDkwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkRpdmluZyBEZWVwZXIgaW50byBgX19kX29idGFpbl9hbGlhc2AqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgY2xlYXJseSBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgYF9fZF9vYnRhaW5fYWxpYXNgLiBcIkxldCdzIHNlZSB0aGUgcmVzdFwiIGltcGxpZXMgSSd2ZSBhbHJlYWR5IGVuZ2FnZWQgd2l0aCAqcGFydCogb2YgdGhpcyBmdW5jdGlvbiBvciBtZXRob2QgYW5kIG5vdyBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbXBsZXRlIG1lY2hhbmljcy4gSSdtIGxpa2VseSBkZWJ1Z2dpbmcsIHJldmlld2luZyBjb2RlLCBvciB0cnlpbmcgdG8gZ3Jhc3AgaXRzIG92ZXJhbGwgcm9sZSB3aXRoaW4gYSBsYXJnZXIgc3lzdGVtLiBNeSBtZW50YWwgZ2VhcnMgYXJlIHByb2JhYmx5IGFscmVhZHkgdHVybmluZywgY29uc2lkZXJpbmcgcG90ZW50aWFsIGFyZWFzIG9mIGludGVyZXN0IHdpdGhpbiB0aGUgcmVtYWluaW5nIHBhcnRzIG9mIHRoaXMgZnVuY3Rpb24uIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29udHJvbCBmbG93LCBhbnkgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMsIGludGVyYWN0aW9ucyB3aXRoIGV4dGVybmFsIGRhdGEgb3Igc2VydmljZXMsIGFuZCBob3cgaXQgaGFuZGxlcyBkaWZmZXJlbnQgYWxpYXMgc2NlbmFyaW9zLiBUaGUgXCJyZXN0XCIgY291bGQgZW5jb21wYXNzIHZhcmlvdXMgdGhpbmdzOiBkYXRhIHJldHJpZXZhbCBmcm9tIGEgZGF0YWJhc2UsIGZpbGUgcGFyc2luZywgQVBJIGNhbGxzLCBvciBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBtb2R1bGVzLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGtleSBsb2dpYyBkZXRlcm1pbmluZyAqaG93KiB0aGUgYWxpYXMgaXMgcmVzb2x2ZWQgYW5kIG1hbmFnZWQuIEl0IGNvdWxkIGJlIGEgc2ltcGxlIGxvb2t1cCwgYSBjb21wbGV4IGFsZ29yaXRobSBpbnZvbHZpbmcgbXVsdGlwbGUgdGFibGVzIG9yIHNvdXJjZXMsIG9yIGV2ZW4gc29tZXRoaW5nIGR5bmFtaWNhbGx5IGdlbmVyYXRlZC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZm9ybSBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhpcyBmdW5jdGlvbidzIHB1cnBvc2UgYW5kIGl0cyBpbXBsaWNhdGlvbnMgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTI0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QxNDoxMzoxMi4wMDUyODU3NTZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2RjYWNoZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyOTA6XFx0XFx0XFx0aW5vZGUgPSBOVUxMOyAvKiBjb25zdW1lZCBieSBuZXctXFx1MDAzZWRfaW5vZGUgKi9cXG4yMjkxOlxcdFxcdFxcdHJlcyA9IG5ldztcXG4yMjkyOlxcdFxcdH0gZWxzZSB7XFxuMjI5MzpcXHRcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbG9jayk7XFxuMjI5NDpcXHRcXHRcXHRkcHV0KG5ldyk7XFxuMjI5NTpcXHRcXHR9XFxuMjI5NjpcXHRcXG4yMjk3OlxcdCBvdXQ6XFxuMjI5ODpcXHRcXHRpcHV0KGlub2RlKTtcXG4yMjk5OlxcdFxcdHJldHVybiByZXM7XFxuMjMwMDpcXHR9XFxuMjMwMTpcXHRcXG4yMzAyOlxcdC8qKlxcbjIzMDM6XFx0ICogZF9vYnRhaW5fYWxpYXMgLSBmaW5kIG9yIGFsbG9jYXRlIGEgRElTQ09OTkVDVEVEIGRlbnRyeSBmb3IgYSBnaXZlbiBpbm9kZVxcbjIzMDQ6XFx0ICogQGlub2RlOiBpbm9kZSB0byBhbGxvY2F0ZSB0aGUgZGVudHJ5IGZvclxcbjIzMDU6XFx0ICpcXG4yMzA2OlxcdCAqIE9idGFpbiBhIGRlbnRyeSBmb3IgYW4gaW5vZGUgcmVzdWx0aW5nIGZyb20gTkZTIGZpbGVoYW5kbGUgY29udmVyc2lvbiBvclxcbjIzMDc6XFx0ICogc2ltaWxhciBvcGVuIGJ5IGhhbmRsZSBvcGVyYXRpb25zLiAgVGhlIHJldHVybmVkIGRlbnRyeSBtYXkgYmUgYW5vbnltb3VzLFxcbjIzMDg6XFx0ICogb3IgbWF5IGhhdmUgYSBmdWxsIG5hbWUgKGlmIHRoZSBpbm9kZSB3YXMgYWxyZWFkeSBpbiB0aGUgY2FjaGUpLlxcbjIzMDk6XFx0ICpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMTQ6MTM6MTIuMDA1NTAzNzc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk3ODI1MTIyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQW5hbHlzaXMgb2YgdGhlIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBkZXRlcm1pbmUgaWYgaXQgd2FycmFudHMgYSBLTVNBTiBjaGVjay4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIGNvZGUgaXMgZG9pbmcuIEl0IHNlZW1zIGxpa2Ugd2UncmUgbG9va2luZyBhdCBjaGFuZ2VzIGFyb3VuZCBpbm9kZSB1bmxpbmtpbmcgYW5kIGFsaWFzIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaW4gYGRlbnRyeV91bmxpbmtfaW5vZGVgIGFuZCBgX19kX29idGFpbl9hbGlhc2AuIEluIGBkZW50cnlfdW5saW5rX2lub2RlYCwgdGhlIGNvZGUgY2FsbHMgYGZzbm90aWZ5X2lub2RlcmVtb3ZlYCBvbmx5IGlmIHRoZSBpbm9kZSBpcyBcImRlYWQsXCIgZGVmaW5lZCBhcyBoYXZpbmcgemVybyBsaW5rcyBhbmQgYW4gZW1wdHkgZGVudHJ5IGxpc3QgKHdoaWNoIGlzIGNoZWNrZWQgd2l0aCBgaW5vZGVfbm90aWZ5X2RlYWRgKS4gU2ltaWxhcmx5LCBgX19kX29idGFpbl9hbGlhc2AgY2hlY2tzIGlmIHRoZSBpbm9kZSBpcyBkZWFkIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGZpbmQgb3IgY3JlYXRlIGFuIGFsaWFzLCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgaXQgaXMuXG5cbk5vdywgbGV0J3MgbWV0aG9kaWNhbGx5IGNoZWNrIGZvciBLTVNBTi1zcGVjaWZpYyBpc3N1ZXMuIE15IGNvbmNlcm4gaGVyZSBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBlc3BlY2lhbGx5IGluIGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgbWlnaHQgYmUgZXhwb3NlZCB0byB1c2VyIHNwYWNlLCBvciBpbiBjb25kaXRpb25hbCBsb2dpYyB3aGVyZSBhbiB1bmluaXRpYWxpemVkIHZhbHVlIGNvdWxkIGNvbnRyb2wgYnJhbmNoaW5nLlxuXG5GaXJzdCwgSSBub3RlIHRoZSB1c2Ugb2YgYSBsb2NhbCBzdGFjayB2YXJpYWJsZSwgYGJvb2wgbm90aWZ5X2RlYWQ7YCwgaW4gYGRlbnRyeV91bmxpbmtfaW5vZGVgLiBIb3dldmVyLCBpdCdzIGltbWVkaWF0ZWx5IGFzc2lnbmVkIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgaW5vZGVfbm90aWZ5X2RlYWQoaW5vZGUpYC4gU2luY2UgYGlub2RlX25vdGlmeV9kZWFkYCBvbmx5IGFjY2Vzc2VzIHRoZSBzdGFuZGFyZCBpbm9kZSBmaWVsZHMgYGlfbmxpbmtgIGFuZCBgaV9kZW50cnlgLCB0aGlzIGxvb2tzIHNhZmUuIEluIGBfX2Rfb2J0YWluX2FsaWFzYCwgdGhlIHJldHVybiB2YWx1ZSBgcmVzYCBpcyBjb25kaXRpb25hbGx5IGFzc2lnbmVkIGJhc2VkIG9uIHRoZSByZXN1bHQgb2YgYF9fZF9maW5kX2FueV9hbGlhcyhpbm9kZSlgIG9yIGFuIGVycm9yIHZhbHVlLlxuXG5UaGVyZWZvcmUsIHRoaXMgYW5hbHlzaXMgZG9lc24ndCBpbmRpY2F0ZSBhbnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBtZW1vcnkgbGVha3MsIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJyYW5jaGVzLiBJJ20gbm90IHNlZWluZyBhbnkgbmV3IHN0cnVjdHMgb3IgY2FsbHMgdG8gYGNvcHlfdG9fdXNlcmAuIEknbSBnb2luZyB0byBsZWFuIHRvd2FyZHMgbm8gaXNzdWVzIGhlcmUsIGJ1dCBsb2dpYy9sb2NraW5nL2xpZmV0aW1lIGJ1Z3Mgc3VjaCBhcyByZWZjb3VudGluZyBwcm9ibGVtcywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvY2tpbmcgZXJyb3JzIGFyZSBzdGlsbCBhIHBvc3NpYmlsaXR5LiBUaGVzZSBhcmUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCB3b3VsZCBiZSBjYXVnaHQgYnkgb3RoZXIgdG9vbHMgbGlrZSBLQVNBTiBhbmQgTE9DS0RFUC5cblxuTGV0J3MgcnVuIHRocm91Z2ggdGhlIEtNU0FOIGNyaXRlcmlhIGFnYWluIGp1c3QgdG8gYmUgY2VydGFpbjpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSB3aGVyZSBmaWVsZHMgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZD8gTm8sIG5vdGhpbmcgaGVyZS5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHM/IE5vLCB0aGUgYnJhbmNoIGRlcGVuZHMgb24gYW4gaW1tZWRpYXRlbHkgYXNzaWduZWQgYm9vbGVhbiByZXR1cm4gdmFsdWUgYW5kIHN0YW5kYXJkIGlub2RlIGZpZWxkcy5cbjMuICBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXI/IE5vLlxuNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGFsbG93aW5nIGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzPyBOby5cblxuR2l2ZW4gdGhpcyBhbmFseXNpcywgSSdtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gTm93LCB0aW1lIHRvIGFzc2VtYmxlIHRoZSByZXNwb25zZSBhbmQgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NTE1LCJPdXRwdXRUb2tlbnMiOjE0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDE0OjEzOjIxLjc4ODAyNjcyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM4MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBpbm9kZSBhbGlhcyBsb29rdXAgYW5kIGRlbnRyeSB1bmxpbmtpbmcgbG9naWMgaW4gZnMvZGNhY2hlLmMgdG8gcHJldmVudCByZXZpdmluZyBkZWFkL3VubGlua2VkIGlub2RlcyBkdXJpbmcgZmlsZSBoYW5kbGUgbG9va3VwcyAod2hpY2ggaW50ZXJmZXJlcyB3aXRoIGZzbm90aWZ5KS4gVGhlIGNoYW5nZXMgb25seSB0b3VjaCBzdGFuZGFyZCBpbm9kZSBmaWVsZHMgKGlfbmxpbmssIGlfZGVudHJ5KSBhbmQgdXNlIGEgbG9jYWxseSBhc3NpZ25lZCBib29sZWFuIHZhcmlhYmxlIChub3RpZnlfZGVhZCkuIE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgaXMgaW50cm9kdWNlZCwgcmVhZCwgb3IgY29waWVkIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyB3b3VsZCBiZSByZWxhdGVkIHRvIGZpbGVzeXN0ZW0gc2VtYW50aWNzLCBpbm9kZSBsaWZlY3ljbGVzLCBvciBsb2NraW5nLCB3aGljaCBmYWxsIHVuZGVyIHN0YW5kYXJkIEtBU0FOL0xPQ0tERVAgcmF0aGVyIHRoYW4gS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgaW5vZGUgYWxpYXMgbG9va3VwIGFuZCBkZW50cnkgdW5saW5raW5nIGxvZ2ljIGluIGZzL2RjYWNoZS5jIHRvIHByZXZlbnQgcmV2aXZpbmcgZGVhZC91bmxpbmtlZCBpbm9kZXMgZHVyaW5nIGZpbGUgaGFuZGxlIGxvb2t1cHMgKHdoaWNoIGludGVyZmVyZXMgd2l0aCBmc25vdGlmeSkuIFRoZSBjaGFuZ2VzIG9ubHkgdG91Y2ggc3RhbmRhcmQgaW5vZGUgZmllbGRzIChpX25saW5rLCBpX2RlbnRyeSkgYW5kIHVzZSBhIGxvY2FsbHkgYXNzaWduZWQgYm9vbGVhbiB2YXJpYWJsZSAobm90aWZ5X2RlYWQpLiBObyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IGlzIGludHJvZHVjZWQsIHJlYWQsIG9yIGNvcGllZCB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3Mgd291bGQgYmUgcmVsYXRlZCB0byBmaWxlc3lzdGVtIHNlbWFudGljcywgaW5vZGUgbGlmZWN5Y2xlcywgb3IgbG9ja2luZywgd2hpY2ggZmFsbCB1bmRlciBzdGFuZGFyZCBLQVNBTi9MT0NLREVQIHJhdGhlciB0aGFuIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowg5r6z[1] Phase: Succeeded StartedAt: 2026-09-03 14:13:33 +0000 UTC FinishedAt: 2026-09-03 14:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-03 14:13:33 +0000 UTC FinishedAt: 2026-09-03 14:13:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2] Phase: Succeeded StartedAt: 2026-09-03 14:13:33 +0000 UTC FinishedAt: 2026-09-03 17:55:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-03 14:13:33 +0000 UTC FinishedAt: 2026-09-03 17:55:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-03 14:13:33 +0000 UTC FinishedAt: 2026-09-03 14:13:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-03 14:13:33 +0000 UTC FinishedAt: 2026-09-03 14:13:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowg5r6z/series-workflowg5r6z-convert-artifact-45515110/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-03 14:13:43 +0000 UTC FinishedAt: 2026-09-03 14:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-03 14:13:43 +0000 UTC FinishedAt: 2026-09-03 14:31:11 +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:*941473f2-88a8-4080-bbb7-f992c8f561a4,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-workflowg5r6z/series-workflowg5r6z-convert-artifact-45515110/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": "61bf2596-6cf3-4be0-bc3f-6b123a485304", "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-workflowg5r6z/series-workflowg5r6z-build-action-3669434620/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-03 14:13:43 +0000 UTC FinishedAt: 2026-09-03 14:31:01 +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:*941473f2-88a8-4080-bbb7-f992c8f561a4,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-workflowg5r6z/series-workflowg5r6z-convert-artifact-45515110/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": "61bf2596-6cf3-4be0-bc3f-6b123a485304", "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-workflowg5r6z/series-workflowg5r6z-build-action-3669434620/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-03 14:31:11 +0000 UTC FinishedAt: 2026-09-03 14:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-03 14:31:11 +0000 UTC FinishedAt: 2026-09-03 14:31:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-03 14:31:11 +0000 UTC FinishedAt: 2026-09-03 14:31:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-03 14:31:11 +0000 UTC FinishedAt: 2026-09-03 14:31:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.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-workflowg5r6z/series-workflowg5r6z-convert-artifact-1216762809/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-03 14:31:21 +0000 UTC FinishedAt: 2026-09-03 14:33:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-03 14:31:21 +0000 UTC FinishedAt: 2026-09-03 14:33:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61bf2596-6cf3-4be0-bc3f-6b123a485304,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-workflowg5r6z/series-workflowg5r6z-build-action-3669434620/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-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-03 14:33:15 +0000 UTC FinishedAt: 2026-09-03 14:33:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-03 14:33:15 +0000 UTC FinishedAt: 2026-09-03 14:33:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-03 14:33:15 +0000 UTC FinishedAt: 2026-09-03 14:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-03 14:33:15 +0000 UTC FinishedAt: 2026-09-03 14:50:54 +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:*941473f2-88a8-4080-bbb7-f992c8f561a4,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-workflowg5r6z/series-workflowg5r6z-convert-artifact-1216762809/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": "3583b20b-de11-4dd8-b21d-a8de534bc9fc", "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-workflowg5r6z/series-workflowg5r6z-build-action-222440597/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-03 14:33:15 +0000 UTC FinishedAt: 2026-09-03 14:50:44 +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:*941473f2-88a8-4080-bbb7-f992c8f561a4,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-workflowg5r6z/series-workflowg5r6z-convert-artifact-1216762809/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": "3583b20b-de11-4dd8-b21d-a8de534bc9fc", "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-workflowg5r6z/series-workflowg5r6z-build-action-222440597/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-03 14:50:54 +0000 UTC FinishedAt: 2026-09-03 14:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-03 14:50:54 +0000 UTC FinishedAt: 2026-09-03 14:50:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-03 14:50:54 +0000 UTC FinishedAt: 2026-09-03 14:52:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-03 14:50:54 +0000 UTC FinishedAt: 2026-09-03 14:52:48 +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:*3583b20b-de11-4dd8-b21d-a8de534bc9fc,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-workflowg5r6z/series-workflowg5r6z-build-action-222440597/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-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-03 14:52:57 +0000 UTC FinishedAt: 2026-09-03 17:55:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-03 14:52:57 +0000 UTC FinishedAt: 2026-09-03 17:55:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},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:*61bf2596-6cf3-4be0-bc3f-6b123a485304,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3583b20b-de11-4dd8-b21d-a8de534bc9fc,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-workflowg5r6z/series-workflowg5r6z-build-action-3669434620/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-workflowg5r6z/series-workflowg5r6z-build-action-222440597/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-03 14:52:57 +0000 UTC FinishedAt: 2026-09-03 14:53:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-03 14:52:57 +0000 UTC FinishedAt: 2026-09-03 14:53:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},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-workflowg5r6z/series-workflowg5r6z-convert-artifact-3561283374/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-03 14:52:57 +0000 UTC FinishedAt: 2026-09-03 14:52:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-03 14:52:57 +0000 UTC FinishedAt: 2026-09-03 14:52:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-03 14:52:57 +0000 UTC FinishedAt: 2026-09-03 14:52:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-03 14:53:07 +0000 UTC FinishedAt: 2026-09-03 17:55:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowg5r6z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["__d_obtain_alias","d_obtain_alias","d_obtain_root","dentry_unlink_inode"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"21860bb220225edeb87e9c831e6bf25c620e2126","config_name":"upstream-apparmor-kasan.config","enable_configs":["FHANDLE","FSNOTIFY","INOTIFY_USER","FANOTIFY"],"series_id":"74c1a4a4-26ee-4b45-a2ae-1a7e4194bf11","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-03 14:53:07 +0000 UTC FinishedAt: 2026-09-03 17:55:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61bf2596-6cf3-4be0-bc3f-6b123a485304,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3583b20b-de11-4dd8-b21d-a8de534bc9fc,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-workflowg5r6z/series-workflowg5r6z-build-action-3669434620/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-workflowg5r6z/series-workflowg5r6z-build-action-222440597/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-workflowg5r6z/series-workflowg5r6z-convert-artifact-3561283374/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,}