Name: series-workflownpktp Phase: Succeeded StartedAt: 2026-08-10 15:49:47 +0000 UTC FinishedAt: 2026-08-10 20:03:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[0] Phase: Succeeded StartedAt: 2026-08-10 15:49:47 +0000 UTC FinishedAt: 2026-08-10 16:18:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[0].run-triage Phase: Succeeded StartedAt: 2026-08-10 15:49:47 +0000 UTC FinishedAt: 2026-08-10 16:18:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "L2TP", "L2TP_DEBUGFS", "PPP", "PPPOL2TP", "DEBUG_FS", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "L2TP", "L2TP_DEBUGFS", "PPP", "PPPOL2TP", "DEBUG_FS", "PROC_FS" ], "series_id": "7312f22c-647c-4f5d-b299-da8fad8c432b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "l2tp_dfs_seq_release", "pppol2tp_proc_open", "pppol2tp_proc_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF9kZnNfc2VxX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfcHJvY19vcGVuJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3Byb2NfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlZmVyZW5jZSBjb3VudCBsZWFrcyBpbiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBieSBhZGRpbmcgbWlzc2luZyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIGluIHRoZSByZWxlYXNlIGhhbmRsZXJzLiBJdCBhbHNvIHJlcGxhY2VzIGBwcm9jX2NyZWF0ZV9uZXRgIHdpdGggYHByb2NfY3JlYXRlX2RhdGFgIGFuZCBjdXN0b20gYHByb2Nfb3BzYCB0byBlbnN1cmUgdGhlIHJlbGVhc2UgaGFuZGxlciBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkvcmVmY291bnQgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtNRU1MRUFLLCBhbmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgICh2aWEgYF9fc2VxX29wZW5fcHJpdmF0ZWApLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb25zIG9mIEwyVFAgZGVidWdmcyBhbmQgcHJvY2ZzIHNlcV9maWxlcyBieSBhZGRpbmcgbWlzc2luZyBsMnRwX3Nlc3Npb25fcHV0IGFuZCBsMnRwX3R1bm5lbF9wdXQgY2FsbHMuIEl0IGFsc28gaW50cm9kdWNlcyBuZXcgcHJvY2ZzIG9wZW4gYW5kIHJlbGVhc2UgZnVuY3Rpb25zIGZvciBwcHBvbDJ0cC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG9wZW5pbmcgYW5kIGNsb3NpbmcgdGhlIHJlc3BlY3RpdmUgZGVidWdmcyBhbmQgcHJvY2ZzIGZpbGVzLCBhbmQgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHJlc291cmNlIG1hbmFnZW1lbnQsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YmYzYjljZTJkYjFmOWYwMGRkNmQwMWIwZGIxODQ1MDYwYmFlNzhjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTY6MTc6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuaW5kZXggYjI2OTg2ZmRhOWQ2Yy4uYzEyZDVlMWVlNTUwYyAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuQEAgLTMwNiw2ICYjNDM7MzA2LDEwIEBAIHN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRzZXEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHBkID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0aWYgKHBkLVx1MDAzZXNlc3Npb24pXG4mIzQzO1x0XHRsMnRwX3Nlc3Npb25fcHV0KHBkLVx1MDAzZXNlc3Npb24pO1xuJiM0MztcdGlmIChwZC1cdTAwM2V0dW5uZWwpXG4mIzQzO1x0XHRsMnRwX3R1bm5lbF9wdXQocGQtXHUwMDNldHVubmVsKTtcbiBcdGlmIChwZC1cdTAwM2VuZXQpXG4gXHRcdHB1dF9uZXRfdHJhY2socGQtXHUwMDNlbmV0LCBcdTAwMjZwZC1cdTAwM2Vuc190cmFja2VyKTtcbiBcdGtmcmVlKHBkKTtcbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuaW5kZXggZjg4ODE2OTllMWNhZC4uMWJjZjQ0N2YyZjhiMCAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbkBAIC0xNTk3LDYgJiM0MzsxNTk3LDUzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2wydHBfc2VxX29wcyA9IHtcbiBcdC5zdG9wXHRcdD0gcHBwb2wydHBfc2VxX3N0b3AsXG4gXHQuc2hvd1x0XHQ9IHBwcG9sMnRwX3NlcV9zaG93LFxuIH07XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHBkZV9kYXRhKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkO1xuJiM0MztcbiYjNDM7XHRuZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4mIzQzO1x0aWYgKCFuZXQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRwZCA9IF9fc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwcHBvbDJ0cF9zZXFfb3BzLCBzaXplb2YoKnBkKSk7XG4mIzQzO1x0aWYgKCFwZCkge1xuJiM0MztcdFx0cHV0X25ldChuZXQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19ORVRfTlNcbiYjNDM7XHRwZC1cdTAwM2VwLm5ldCA9IG5ldDtcbiYjNDM7XHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgXHUwMDI2cGQtXHUwMDNlcC5uc190cmFja2VyLCBHRlBfS0VSTkVMKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzQzO1xuJiM0MztcdGlmIChwZC1cdTAwM2VzZXNzaW9uKVxuJiM0MztcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbiYjNDM7XHRpZiAocGQtXHUwMDNldHVubmVsKVxuJiM0MztcdFx0bDJ0cF90dW5uZWxfcHV0KHBkLVx1MDAzZXR1bm5lbCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX05FVF9OU1xuJiM0MztcdHB1dF9uZXRfdHJhY2socGQtXHUwMDNlcC5uZXQsIFx1MDAyNnBkLVx1MDAzZXAubnNfdHJhY2tlcik7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cHV0X25ldChcdTAwMjZpbml0X25ldCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwcHBvbDJ0cF9wcm9jX29wcyA9IHtcbiYjNDM7XHQucHJvY19vcGVuXHQ9IHBwcG9sMnRwX3Byb2Nfb3BlbixcbiYjNDM7XHQucHJvY19yZWFkXHQ9IHNlcV9yZWFkLFxuJiM0MztcdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2VlayxcbiYjNDM7XHQucHJvY19yZWxlYXNlXHQ9IHBwcG9sMnRwX3Byb2NfcmVsZWFzZSxcbiYjNDM7fTtcbiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi9cbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkBAIC0xNjA4LDggJiM0MzsxNjU1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9sMnRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlO1xuIFx0aW50IGVyciA9IDA7XG4gXG4tXHRwZGUgPSBwcm9jX2NyZWF0ZV9uZXQoXCYjMzQ7cHBwb2wydHBcJiMzNDssIDA0NDQsIG5ldC1cdTAwM2Vwcm9jX25ldCxcbi1cdFx0XHQgICAgICBcdTAwMjZwcHBvbDJ0cF9zZXFfb3BzLCBzaXplb2Yoc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhKSk7XG4mIzQzO1x0cGRlID0gcHJvY19jcmVhdGVfZGF0YShcJiMzNDtwcHBvbDJ0cFwmIzM0OywgMDQ0NCwgbmV0LVx1MDAzZXByb2NfbmV0LFxuJiM0MztcdFx0XHQgICAgICAgXHUwMDI2cHBwb2wydHBfcHJvY19vcHMsIG5ldCk7XG4gXHRpZiAoIXBkZSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TDJUUCYjMzQ7LAogICAgJiMzNDtMMlRQX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUE9MMlRQJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsMnRwX2Rmc19zZXFfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtwcHBvbDJ0cF9wcm9jX29wZW4mIzM0OywKICAgICYjMzQ7cHBwb2wydHBfcHJvY19yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSByZWxlYXNlIGZ1bmN0aW9ucyBvZiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBzZXFfZmlsZXMgYnkgYWRkaW5nIG1pc3NpbmcgbDJ0cF9zZXNzaW9uX3B1dCBhbmQgbDJ0cF90dW5uZWxfcHV0IGNhbGxzLiBJdCBhbHNvIGludHJvZHVjZXMgbmV3IHByb2NmcyBvcGVuIGFuZCByZWxlYXNlIGZ1bmN0aW9ucyBmb3IgcHBwb2wydHAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSByZXNwZWN0aXZlIGRlYnVnZnMgYW5kIHByb2NmcyBmaWxlcywgYW5kIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWJmM2I5Y2UyZGIxZjlmMDBkZDZkMDFiMGRiMTg0NTA2MGJhZTc4YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE2OjE3OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYwppbmRleCBiMjY5ODZmZGE5ZDZjLi5jMTJkNWUxZWU1NTBjIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYwpAQCAtMzA2LDYgJiM0MzszMDYsMTAgQEAgc3RhdGljIGludCBsMnRwX2Rmc19zZXFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAogCXNlcSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAlwZCA9IHNlcS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJaWYgKHBkLSZndDtzZXNzaW9uKQomIzQzOwkJbDJ0cF9zZXNzaW9uX3B1dChwZC0mZ3Q7c2Vzc2lvbik7CiYjNDM7CWlmIChwZC0mZ3Q7dHVubmVsKQomIzQzOwkJbDJ0cF90dW5uZWxfcHV0KHBkLSZndDt0dW5uZWwpOwogCWlmIChwZC0mZ3Q7bmV0KQogCQlwdXRfbmV0X3RyYWNrKHBkLSZndDtuZXQsICZhbXA7cGQtJmd0O25zX3RyYWNrZXIpOwogCWtmcmVlKHBkKTsKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jCmluZGV4IGY4ODgxNjk5ZTFjYWQuLjFiY2Y0NDdmMmY4YjAgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9wcHAuYwpAQCAtMTU5Nyw2ICYjNDM7MTU5Nyw1MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9sMnRwX3NlcV9vcHMgPSB7CiAJLnN0b3AJCT0gcHBwb2wydHBfc2VxX3N0b3AsCiAJLnNob3cJCT0gcHBwb2wydHBfc2VxX3Nob3csCiB9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gcGRlX2RhdGEoaW5vZGUpOwomIzQzOwlzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkOwomIzQzOwomIzQzOwluZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7CiYjNDM7CWlmICghbmV0KQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJcGQgPSBfX3NlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtwcHBvbDJ0cF9zZXFfb3BzLCBzaXplb2YoKnBkKSk7CiYjNDM7CWlmICghcGQpIHsKJiM0MzsJCXB1dF9uZXQobmV0KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ORVRfTlMKJiM0MzsJcGQtJmd0O3AubmV0ID0gbmV0OwomIzQzOwluZXRuc190cmFja2VyX2FsbG9jKG5ldCwgJmFtcDtwZC0mZ3Q7cC5uc190cmFja2VyLCBHRlBfS0VSTkVMKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSAqcGQgPSBzZXEtJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7CWlmIChwZC0mZ3Q7c2Vzc2lvbikKJiM0MzsJCWwydHBfc2Vzc2lvbl9wdXQocGQtJmd0O3Nlc3Npb24pOwomIzQzOwlpZiAocGQtJmd0O3R1bm5lbCkKJiM0MzsJCWwydHBfdHVubmVsX3B1dChwZC0mZ3Q7dHVubmVsKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX05FVF9OUwomIzQzOwlwdXRfbmV0X3RyYWNrKHBkLSZndDtwLm5ldCwgJmFtcDtwZC0mZ3Q7cC5uc190cmFja2VyKTsKJiM0MzsjZWxzZQomIzQzOwlwdXRfbmV0KCZhbXA7aW5pdF9uZXQpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcHBwb2wydHBfcHJvY19vcHMgPSB7CiYjNDM7CS5wcm9jX29wZW4JPSBwcHBvbDJ0cF9wcm9jX29wZW4sCiYjNDM7CS5wcm9jX3JlYWQJPSBzZXFfcmVhZCwKJiM0MzsJLnByb2NfbHNlZWsJPSBzZXFfbHNlZWssCiYjNDM7CS5wcm9jX3JlbGVhc2UJPSBwcHBvbDJ0cF9wcm9jX3JlbGVhc2UsCiYjNDM7fTsKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE2MDgsOCAmIzQzOzE2NTUsOCBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHBwb2wydHBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOwogCWludCBlcnIgPSAwOwogCi0JcGRlID0gcHJvY19jcmVhdGVfbmV0KCYjMzQ7cHBwb2wydHAmIzM0OywgMDQ0NCwgbmV0LSZndDtwcm9jX25ldCwKLQkJCSAgICAgICZhbXA7cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSkpOwomIzQzOwlwZGUgPSBwcm9jX2NyZWF0ZV9kYXRhKCYjMzQ7cHBwb2wydHAmIzM0OywgMDQ0NCwgbmV0LSZndDtwcm9jX25ldCwKJiM0MzsJCQkgICAgICAgJmFtcDtwcHBvbDJ0cF9wcm9jX29wcywgbmV0KTsKIAlpZiAoIXBkZSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEwyVFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY2AgYW5kIGBuZXQvbDJ0cC9sMnRwX3BwcC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4gSW4gYGwydHBfZGVidWdmcy5jYCwgdGhlIGZvY3VzIHNlZW1zIHRvIGJlIG9uIHJlc291cmNlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGRlYnVnZnMgaW50ZXJmYWNlLiBUaGV5JiMzOTt2ZSBhZGRlZCBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIHRvIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkmIzM5O3JlIGFpbWluZyB0byBwcm9wZXJseSBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudHMgZm9yIHNlc3Npb25zIGFuZCB0dW5uZWxzIHdoZW4gcmVzb3VyY2VzIGFyZSByZWxlYXNlZCB0aHJvdWdoIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLgoKTm93LCBtb3ZpbmcgdG8gYGwydHBfcHBwLmNgLCBpdCBzZWVtcyB3ZSBhcmUgZGVhbGluZyB3aXRoIGNoYW5nZXMgcmVsYXRlZCB0byBQUFAgb3ZlciBMMlRQIHN1cHBvcnQuIFRoZXkmIzM5O3ZlIGFkZGVkIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCwgYW5kIGFyZSByZXBsYWNpbmcgYHByb2NfY3JlYXRlX25ldGAgd2l0aCBgcHJvY19jcmVhdGVfZGF0YWAgdXNpbmcgYHBwcG9sMnRwX3Byb2Nfb3BzYC4gVGhpcyBzdWdnZXN0cyB0aGV5JiMzOTtyZSByZWZhY3RvcmluZyBob3cgdGhlIFBQUCBvdmVyIEwyVFAgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIEl0JiMzOTtzIGxpa2VseSBhbiBlZmZvcnQgdG8gaW1wcm92ZSBtYW5hZ2VtZW50IG9yIGludHJvZHVjZSBtb3JlIGRhdGEgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgbmV0d29yayBuYW1lc3BhY2UuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfTDJUUGAsIGBDT05GSUdfTDJUUF9ERUJVR0ZTYCwgYENPTkZJR19QUFBPTDJUUGAsIGFuZCBgQ09ORklHX1BST0NfRlNgIGFyZSBhbGwgZW5hYmxlZCwgYXMgdGhlc2Ugc2VlbSB0byBiZSB0aGUgZGVwZW5kZW5jaWVzIGJhc2VkIG9uIHRoZSBmaWxlIHBhdGhzLiBJJiMzOTtsbCBxdWlja2x5IGxvb2sgdXAgaW4gYG5ldC9sMnRwL0tjb25maWdgIHRvIGJlIHN1cmUgSSYjMzk7bSB1c2luZyB0aGUgZXhhY3QgY29uZmlnIG5hbWVzLiBGcm9tIHRoZXJlLCBJIGNhbiBlbnN1cmUgdGhpcyBwYXRjaCBpcyBzZXQgdXAgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEwyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWctNS1cbm5ldC9sMnRwL0tjb25maWc6NjptZW51Y29uZmlnIEwyVFBcbm5ldC9sMnRwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0xheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy0zNS1cbm5ldC9sMnRwL0tjb25maWc6MzY6Y29uZmlnIEwyVFBfREVCVUdGU1xubmV0L2wydHAvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy00OC1cbm5ldC9sMnRwL0tjb25maWc6NDk6Y29uZmlnIEwyVFBfVjNcbm5ldC9sMnRwL0tjb25maWctNTAtXHRib29sIFwmIzM0O0wyVFB2MyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy02OS1cbm5ldC9sMnRwL0tjb25maWc6NzA6Y29uZmlnIEwyVFBfSVBcbm5ldC9sMnRwL0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIElQIGVuY2Fwc3VsYXRpb24gZm9yIEwyVFB2M1wmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctODYtXG5uZXQvbDJ0cC9LY29uZmlnOjg3OmNvbmZpZyBMMlRQX0VUSFxubmV0L2wydHAvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODYxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqTG9jYXRpbmcgUFBQT0wyVFAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBQUFBPTDJUUGAuIExldCBtZSB0aGluay4uLiBXaGVyZSB3b3VsZCBzb21ldGhpbmcgbGlrZSB0aGF0IGxvZ2ljYWxseSByZXNpZGUgaW4gYSBrZXJuZWwgc291cmNlIHRyZWU/IFBQUCBpcyBuZXR3b3JraW5nLCBzbyBpdCYjMzk7cyBhIHNhZmUgYmV0IHRvIHN0YXJ0IGxvb2tpbmcgaW4gdGhlIGBkcml2ZXJzL25ldGAgZGlyZWN0b3J5LiBBbmQgd2l0aGluIHRoYXQsIHRoZSBQUFAtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBsaWtlbHkgdW5kZXIgYHBwcGAuIE9rYXksIGxldCYjMzk7cyBjaGVjayBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IHByb2JhYmxlIGxvY2F0aW9uIGZvciB0aGlzIHNvcnQgb2YgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGltZSB0byBvcGVuIGl0IHVwIGFuZCBzZWUgaWYgbXkgaHVuY2ggaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFBQT0wyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTYxPWNvbmZpZyBQUFRQXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTcyLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTczOmNvbmZpZyBQUFBPTDJUUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgTDJUUFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgUFBQT0wyVFAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiBgUFBQT0wyVFBgLCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBQUFAgZnJhbWV3b3JrLiBUaGlzIGlzIHdoZXJlIEkgdHlwaWNhbGx5IGZpbmQgdGhlIGNvcmUgc2V0dGluZ3MgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgZmVhdHVyZSBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIHByZXJlcXVpc2l0ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBmbGFncyBmb3IgdGhpbmdzIGxpa2UgTDJUUCBzdXBwb3J0LCB0dW5uZWwgY29uZmlndXJhdGlvbnMsIGFuZCBwZXJoYXBzIG9wdGlvbnMgZm9yIENIQVAvUEFQIGF1dGhlbnRpY2F0aW9uLCBNVFUgc2V0dGluZ3MsIGFuZCByZWxhdGVkIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBidWlsdCBhbmQgd2hhdCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIG1lbnRhbCBtYXAgb2YgaG93IGBQUFBPTDJUUGAgaW50ZWdyYXRlcyBpbnRvIHRoZSBzeXN0ZW0gYW5kIGhvdyBJIGNhbiBiZXN0IGNvbmZpZ3VyZSBpdCB0byBzdWl0IGEgcGFydGljdWxhciB1c2UgY2FzZS4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBmdXJ0aGVyIGV4cGxvcmF0aW9uIGlmIG5lZWRlZCwgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiBpZiBzb21ldGhpbmcgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGNsZWFyIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFBQT0wyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xNjE9Y29uZmlnIFBQVFBcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzM6Y29uZmlnIFBQUE9MMlRQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzQtXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBMMlRQXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBQUCBPdmVyIEwyVFAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgUFBQT0wyVFBgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBkb2VzIHRoaXMgdGhpbmcgc2l0IGluIHRoZSBvdmVyYWxsIG5ldHdvcmtpbmcgc3RhY2s/IFdoYXQgZm91bmRhdGlvbmFsIGVsZW1lbnRzIGlzIGl0IGJ1aWx0IHVwb24/IElzIGl0IGEgdXNlci1zcGFjZSBkYWVtb24sIG9yIGRvZXMgaXQgaGF2ZSBrZXJuZWwgY29tcG9uZW50cz8gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcm90b2NvbCByZWxhdGlvbnNoaXBzIHRvby4gRG9lcyBgUFBQb0wyVFBgIGl0c2VsZiBoYW5kbGUgdGhlIFBQUCBzZXNzaW9uIGVzdGFibGlzaG1lbnQsIG9yIGRvZXMgaXQgcmVseSBvbiBzb21ldGhpbmcgZWxzZSB0byBtYW5hZ2UgdGhlIHVuZGVybHlpbmcgUFBQIGNvbm5lY3Rpb25zPyBEb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgdmVyc2lvbnMgb2YgUFBQIG9yIEwyVFA/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24gcGFydGljdWxhciByb3V0aW5nIHByb3RvY29scyBvciBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9ucz8gQSBxdWljayBtZW50YWwgY2hlY2tsaXN0IHNob3VsZCBoZWxwIG1lIHZpc3VhbGl6ZSB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVuIEkgY2FuIGNvbnN1bHQgdGhlIHJlbGV2YW50IFJGQ3Mgb3Igc291cmNlIGNvZGUgaWYgbmVlZGVkLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBhbGwgdGhlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEwND1jb25maWcgUFBQT0FUTVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDY6XHRkZXBlbmRzIG9uIEFUTVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEyNz1jaG9pY2Vcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMjktXHRkZWZhdWx0IFBQUE9FX0hBU0hfQklUU180XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMzA6XHRkZXBlbmRzIG9uIFBQUE9FXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMzEtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTYxPWNvbmZpZyBQUFRQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjItXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBJUHY0IChQUFRQKVwmIzM0O1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYzOlx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2NC1cdHNlbGVjdCBQUFBPWFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE3Mz1jb25maWcgUFBQT0wyVFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEwyVFBcJiMzNDtcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3NTpcdGRlcGVuZHMgb24gTDJUUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc2LVx0c2VsZWN0IFBQUE9YXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGlzIGZpZWxkOgoKKipEZXBlbmRlbmN5IENoYWluIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24gaW4gbXkgaGVhZC4gRXNzZW50aWFsbHksIEkmIzM5O20gc2VlaW5nIHRoYXQgYFBQUE9MMlRQYCBpcyBidWlsdCB1cG9uIHRoZSBmb3VuZGF0aW9uIG9mIGBMMlRQYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBQUFAgb3ZlciBMMlRQIGltcGxlbWVudGF0aW9uLCBzbyB0aGUgbG93ZXItbGV2ZWwgTDJUUCBwcm90b2NvbCBpcyBhIGNvcmUgcmVxdWlyZW1lbnQuIEkgd291bGRuJiMzOTt0IGV4cGVjdCBpdCB0byB3b3JrIHdpdGhvdXQgaXQuIFRoZW4sIGxvb2tpbmcgYXQgYEwyVFBfREVCVUdGU2AsIGl0IGZvbGxvd3MgYSBzaW1pbGFyIHBhdHRlcm4sIGJ1dCB3aXRoIGEgY291cGxlIG9mIHR3aXN0cy4gSXQgYWxzbyByZXF1aXJlcyBgTDJUUGAgd2hpY2ggaXMgc2Vuc2libGUsIGFzIHRoZSBkZWJ1ZyBmaWxlc3lzdGVtIGhvb2tzIHdvdWxkIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgTDJUUCBmdW5jdGlvbmFsaXR5LiBBbmQgZmluYWxseSwgYW5kIGhlcmUmIzM5O3MgdGhlIG90aGVyIHBhcnQgb2YgdGhlIHB1enpsZSwgYERFQlVHX0ZTYCBpcyBhIGhhcmQgZGVwZW5kZW5jeS4gU28sIGlmIEkgd2FudCB0aG9zZSBkZWJ1Z2dpbmcgdG9vbHMgZm9yIEwyVFAsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0aGUgZGVidWcgZmlsZXN5c3RlbSBpdHNlbGYuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnJvbSBhIGRlcGVuZGVuY3kgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2wydHAvS2NvbmZpZz02PW1lbnVjb25maWcgTDJUUFxubmV0L2wydHAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TGF5ZXIgVHdvIFR1bm5lbGluZyBQcm90b2NvbCAoTDJUUClcJiMzNDtcbm5ldC9sMnRwL0tjb25maWc6ODpcdGRlcGVuZHMgb24gSU5FVFxubmV0L2wydHAvS2NvbmZpZy05LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxubmV0L2wydHAvS2NvbmZpZz0zNj1jb25maWcgTDJUUF9ERUJVR0ZTXG5uZXQvbDJ0cC9LY29uZmlnLTM3LVx0dHJpc3RhdGUgXCYjMzQ7TDJUUCBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbm5ldC9sMnRwL0tjb25maWc6Mzg6XHRkZXBlbmRzIG9uIEwyVFAgXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG5uZXQvbDJ0cC9LY29uZmlnLTM5LVx0aGVscFxuLS1cbm5ldC9sMnRwL0tjb25maWc9NDk9Y29uZmlnIEwyVFBfVjNcbm5ldC9sMnRwL0tjb25maWctNTAtXHRib29sIFwmIzM0O0wyVFB2MyBzdXBwb3J0XCYjMzQ7XG5uZXQvbDJ0cC9LY29uZmlnOjUxOlx0ZGVwZW5kcyBvbiBMMlRQXG5uZXQvbDJ0cC9LY29uZmlnLTUyLVx0aGVscFxuLS1cbm5ldC9sMnRwL0tjb25maWc9NzA9Y29uZmlnIEwyVFBfSVBcbm5ldC9sMnRwL0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIElQIGVuY2Fwc3VsYXRpb24gZm9yIEwyVFB2M1wmIzM0O1xubmV0L2wydHAvS2NvbmZpZzo3MjpcdGRlcGVuZHMgb24gTDJUUF9WM1xubmV0L2wydHAvS2NvbmZpZy03My1cdGhlbHBcbi0tXG5uZXQvbDJ0cC9LY29uZmlnPTg3PWNvbmZpZyBMMlRQX0VUSFxubmV0L2wydHAvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcJiMzNDtcbm5ldC9sMnRwL0tjb25maWc6ODk6XHRkZXBlbmRzIG9uIEwyVFBfVjNcbm5ldC9sMnRwL0tjb25maWctOTAtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMMlRQIERlYnVnZnMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgTDJUUGAsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYERFQlVHX0ZTYCwgYFBQUE9MMlRQYCwgYW5kIHRoZSBkZWJ1ZyBpbnRlcmZhY2UuIFRoZSBwcmltYXJ5IGNoYW5nZXMgc2VlbSB0byBiZSB3aXRoaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb25zIGZvciB0aGUgc2VxX2ZpbGVzIHVzZWQgaW4gcHJvY2ZzL2RlYnVnZnMuIEkgc2VlIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGJlaW5nIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBjYWxscyB0byBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIG1lbW9yeSBsZWFrcyBvciByZWZlcmVuY2UgY291bnQgaXNzdWVzIOKAkyBsaWtlbHkgYSBjb21tb24gcHJvYmxlbSB3aXRoIHRoZXNlIGtpbmRzIG9mIGludGVyZmFjZXMuCgpNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBhbmQgYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAsIGFsdGhvdWdoIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSBnbGFuY2UgYXQgYHBwcG9sMnRwX3Byb2Nfb3BlbmAuIFdhaXQsIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCBhcmUgbmV3IGZ1bmN0aW9ucyDigJMgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgYXJlIGNhbGxlZC4gYHBwcG9sMnRwX3Byb2Nfb3BlbmAgaXMgY2FsbGVkIHdoZW4gYWNjZXNzaW5nIGAvcHJvYy9uZXQvcHBwb2wydHBgLiBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgIGlzIHVzZWQgd2hlbiBjbG9zaW5nIGRlYnVnZnMgZmlsZXMgdW5kZXIgYC9zeXMva2VybmVsL2RlYnVnL2wydHAvLi4uYC4KCkFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBpbiBgbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNgIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfZGZzX3NlcV9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM9MjY2PXN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtMzAxLVxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6MzAyOnN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0zMDMte1xuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jPTMyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsMnRwX2Rmc19mb3BzID0ge1xuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMyNS1cdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYzozMjY6XHQucmVsZWFzZVx0PSBsMnRwX2Rmc19zZXFfcmVsZWFzZSxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMyNy19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzQxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFBQUCBvdmVyIEwyVFAgUGx1bWJpbmcqKgoKQWxyaWdodCwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBMMlRQIGlzc3VlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgbG93LWhhbmdpbmcgZnJ1aXQgYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gYG5ldC9sMnRwL2wydHBfcHBwLmNgLCBhbmQgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY2hlY2sgb3V0IGhvdyB0aGUgUFBQIHNlc3Npb24gaXMgaW5pdGlhdGVkIGluIHRoZSBjb250ZXh0IG9mIEwyVFAuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYHBwcG9sMnRwX3Byb2Nfb3BlbmAsIGFzIHRoZSBQUFAgc2Vzc2lvbiBvcGVuaW5nIGlzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBUaGF0JiMzOTtzIHRoZSBnYXRld2F5LiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gc2V0dXAgbG9naWMgdGhlcmUsIGFuZCBob3BlZnVsbHkgdGhlIGNsdWVzIEkgbmVlZCB0byB1bnJhdmVsIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBvbDJ0cF9wcm9jX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC9sMnRwX3BwcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfcHBwLmM9MTU5ND1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9sMnRwX3NlcV9vcHMgPSB7XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjAwLVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNjAxOnN0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjAyLXtcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE2NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwcHBvbDJ0cF9wcm9jX29wcyA9IHtcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTY0MjpcdC5wcm9jX29wZW5cdD0gcHBwb2wydHBfcHJvY19vcGVuLFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjQzLVx0LnByb2NfcmVhZFx0PSBzZXFfcmVhZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZXNlIGNoYW5nZXMsIHRoaW5raW5nIHRocm91Z2ggaXQgYXMgaWYgdGhleSB3ZXJlIG15IG93bi4KCioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gZml4aW5nIHJlc291cmNlIGxlYWtzLiBGdW5jdGlvbmFsbHkgc291bmQsIHdoaWNoIGlzIGdyZWF0LiBUaGUga2V5IGlzIHRoYXQgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoZW0gdmlhIGAvcHJvYy9uZXQvcHBwb2wydHBgIGFuZCBgL3N5cy9rZXJuZWwvZGVidWcvbDJ0cC90dW5uZWxzYC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHVwIHRoYXQgc2NyZWFtcyAmIzM0O2Z1enogbWUhJiMzNDsgSXQmIzM5O3MgZGlyZWN0IHVzZXIgaW50ZXJhY3Rpb24sIHByb3ZpZGluZyBhIHBlcmZlY3QgZW50cnkgcG9pbnQgZm9yIGV4cGxvcmluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBXZSYjMzk7dmUgZ290IGNsZWFyIGF0dGFjayBzdXJmYWNlLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZTogYEwyVFBgLCBgTDJUUF9ERUJVR0ZTYCwgYFBQUE9MMlRQYCwgYERFQlVHX0ZTYCwgYW5kIGBQUk9DX0ZTYC4gV2UgbmVlZCB0byBlbnN1cmUgYWxsIG9mIHRoZXNlIGFyZSBlbmFibGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LiBUaGF0JiMzOTtzIG91ciBidWlsZCBjb25maWd1cmF0aW9uIGJhc2VsaW5lLgoKSSYjMzk7dmUgaWRlbnRpZmllZCB0aGVzZSBzeW1ib2xzIGFzIHByaW1hcnkgZm9jdXMgYXJlYXMgZm9yIHRoZSBmdXp6aW5nIGNhbXBhaWduOiBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgLCBgcHBwb2wydHBfcHJvY19vcGVuYCwgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGVzZSBsb29rIGxpa2UgY29yZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGVzZSBmZWF0dXJlcywgbGlrZWx5IGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLCB3aGljaCBpcyBhbHdheXMgYW4gYXR0cmFjdGl2ZSB0YXJnZXQuCgpXYWl0IGEgc2Vjb25k4oCmIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGlzICphbHNvKiBhIG5ldyBmdW5jdGlvbj8gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBoYWRuJiMzOTt0IG5vdGljZWQgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnl0aGluZyBhYm91dCBpdHMgZnVuY3Rpb25hbGl0eS4gSXQgbWlnaHQgYmUgZXZlbiBtb3JlIHNpZ25pZmljYW50IHRoYW4gaW5pdGlhbGx5IHRob3VnaHQuIEl0IG1pZ2h0IGhhbmRsZSBjbGVhbnVwIG9yIGZpbmFsaXphdGlvbiByb3V0aW5lcywgd2hpY2ggbWFrZXMgaXQgYW4gZXZlbiBiZXR0ZXIgdGFyZ2V0IHRvIGZvY3VzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBvbDJ0cF9wcm9jX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC9sMnRwX3BwcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfcHBwLmM9MTYwMT1zdGF0aWMgaW50IHBwcG9sMnRwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjItXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjE2MjM6c3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjQte1xuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTY0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBwcG9sMnRwX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTY0NC1cdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2Vlayxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTY0NTpcdC5wcm9jX3JlbGVhc2VcdD0gcHBwb2wydHBfcHJvY19yZWxlYXNlLFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjQ2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGlzIGEgZnJlc2ggYWRkaXRpb24g4oCTIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIG5vdGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcy4gTGV0JiMzOTtzIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXM6IGBMMlRQYCBkZXBlbmRzIG9uIGBJTkVUYCwgd2hpY2ggSSBhc3N1bWUgaXMgc3RhbmRhcmQuIGBQUFBPTDJUUGAgaXRzZWxmIHJlbGllcyBvbiBgTDJUUGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgTDJUUF9ERUJVR0ZTYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGJvdGggYEwyVFBgIGFuZCBgREVCVUdfRlNgLiBBbmQgSSYjMzk7bGwgYXNzdW1lIGBQUk9DX0ZTYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCBhcyBpdCBpcyB1c2VkIGEgbG90LgoKVGhlcmVmb3JlLCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOiBgTDJUUGAsIGBMMlRQX0RFQlVHRlNgLCBgUFBQT0wyVFBgLCBgREVCVUdfRlNgLCBhbmQgYFBST0NfRlNgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgc2hvdWxkIHZlcmlmeSBpZiBgUFBQT0wyVFBgIGhhcyBhbiB1bmRlcmx5aW5nIGRlcGVuZGVuY3kgb24gYFBQUGAuIEl0IHdvdWxkIGJlIHJlbWlzcyBvZiBtZSB0byBub3QgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OmNvbmZpZyBQUFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MzU9aWYgUFBQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjM3OmNvbmZpZyBQUFBfQlNEQ09NUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTQtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo1NTpjb25maWcgUFBQX0RFRkxBVEVcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIERlZmxhdGUgY29tcHJlc3Npb25cJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjY5OmNvbmZpZyBQUFBfRklMVEVSXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7UFBQIGZpbHRlcmluZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTgwLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6ODE6Y29uZmlnIFBQUF9NUFBFXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04Mi1cdHRyaXN0YXRlIFwmIzM0O1BQUCBNUFBFIGNvbXByZXNzaW9uIChlbmNyeXB0aW9uKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTkxLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6OTI6Y29uZmlnIFBQUF9NVUxUSUxJTktcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtQUFAgbXVsdGlsaW5rIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExMi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjExMzpjb25maWcgUFBQT1hcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNC1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTY6Y29uZmlnIFBQUE9FXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBFdGhlcm5ldFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEyNz1jaG9pY2Vcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMzgtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMzk6Y29uZmlnIFBQUE9FX0hBU0hfQklUU18xXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDAtXHRib29sIFwmIzM0OzEgYml0ICgyIGJ1Y2tldHMpXCYjMzQ7XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDEtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNDI6Y29uZmlnIFBQUE9FX0hBU0hfQklUU18yXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDMtXHRib29sIFwmIzM0OzIgYml0cyAoNCBidWNrZXRzKVwmIzM0O1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ0LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQ1OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfNFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDs0IGJpdHMgKDE2IGJ1Y2tldHMpXCYjMzQ7XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDctXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNDg6Y29uZmlnIFBQUE9FX0hBU0hfQklUU184XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0OzggYml0cyAoMjU2IGJ1Y2tldHMpXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTUxPWVuZGNob2ljZVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTUyLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTUzOmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1NC1cdGludFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE2MT1jb25maWcgUFBUUFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3Mzpjb25maWcgUFBQT0wyVFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEwyVFBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xODE9aWYgVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODM6Y29uZmlnIFBQUF9BU1lOQ1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTg0LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE5Njpjb25maWcgUFBQX1NZTkNfVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIENvbmRpdGlvbmFsIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlIGFuZCB0cnlpbmcgdG8gcGFyc2UgdGhlIGxvZ2ljLiBJdCBzZWVtcyBsaWtlIGBQUFBPTDJUUGAgaXMgcG90ZW50aWFsbHkgbmVzdGVkIHdpdGhpbiBhbiBgaWZgIHN0YXRlbWVudCB0aGF0IGludm9sdmVzIGBQUFBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGlzIHJlbGF0aW9uc2hpcCDigJMgZG9lcyBgUFBQT0wyVFBgIGFjdHVhbGx5IHJlc2lkZSBpbnNpZGUgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGBQUFBgPyBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIG9mIGNvbnRyb2wgZmxvdywgYW5kIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBlc3NlbnRpYWwgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhpcyBjb2RlIHNlZ21lbnQuIExldCYjMzk7cyBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWYgUFBQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWc9Nj1jb25maWcgUFBQXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzQtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzozNTppZiBQUFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTM2LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1Mz1jb25maWcgUFBQT0VfSEFTSF9CSVRTXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNTQtXHRpbnRcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE1NTpcdGRlZmF1bHQgMSBpZiBQUFBPRV9IQVNIX0JJVFNfMVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTU2Olx0ZGVmYXVsdCAyIGlmIFBQUE9FX0hBU0hfQklUU18yXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNTc6XHRkZWZhdWx0IDQgaWYgUFBQT0VfSEFTSF9CSVRTXzRcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE1ODpcdGRlZmF1bHQgOCBpZiBQUFBPRV9IQVNIX0JJVFNfOFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTU5LVx0ZGVmYXVsdCA0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkZpbmRpbmcgdGhlIE1hdGNoaW5nIGBlbmRpZmAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIEkgc2VlIGEgY29uZGl0aW9uYWwgYmxvY2ssIHNwZWNpZmljYWxseSBhbiBgaWYgUFBQYCBzdGF0ZW1lbnQgb24gbGluZSAzNS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hlcmUmIzM5O3MgdGhlIGNsb3NpbmcgYGVuZGlmYD8mIzM0OyBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCB0aGUgcGF0dGVybiByZWNvZ25pdGlvbiBraWNraW5nIGluLiBHb3R0YSBmaW5kIHRoYXQgZW5kcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHdoYXQmIzM5O3MgZ29pbmcgdG8gaGFwcGVuIHdpdGhpbiB0aGF0IGNvbmRpdGlvbmFsIGxvZ2ljLiBJIG5lZWQgdGhhdCBtYXRjaGluZyBgZW5kaWZgIHRvIGZ1bGx5IGdyYXNwIHdoYXQgdGhpcyBibG9jayBvZiBjb2RlIGlzIGRvaW5nIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIHNlZSB0aGUgc3RhcnQ7IEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5kaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xOTY9Y29uZmlnIFBQUF9TWU5DX1RUWVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTIwNC1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjIwNTplbmRpZiAjIFRUWVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMjA2LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MjA3OmVuZGlmICMgUFBQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugbm90ZXMuIExldCBtZSBzZWUuLi4KCioqQ2hlY2tpbmcgdGhlIEwyVFAgUFBQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSB3ZSAqZGVmaW5pdGVseSogbmVlZCBgUFBQYCBlbmFibGVkLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBMMlRQYCwgYEwyVFBfREVCVUdGU2AsIGBQUFBgLCBgUFBQT0wyVFBgLCBgREVCVUdfRlNgLCBhbmQgYFBST0NfRlNgLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIEwyVFAgc2V0dXAsIGJ1dCBpdOKAmXMgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIFdlIHNlZW0gdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBkZWJ1ZyBmaWxlIHN5c3RlbSBpbiBwYXJ0aWN1bGFyLgoKVGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgLCBgcHBwb2wydHBfcHJvY19vcGVuYCwgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGVzZSBzdWdnZXN0IHdl4oCZcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGVidWcgZmlsZXN5c3RlbSAobGlrZWx5IGZvciBtb25pdG9yaW5nIGFuZCBjb250cm9sKSBhbmQgdGhlIHByb2Nlc3Mtb3JpZW50ZWQgYXNwZWN0cyBvZiBQUFBvTDJUUC4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgcmVmZXJlbmNlIGNvdW50cyBhcmUgaGFuZGxlZCBpbiBvcmRlciB0byBhdm9pZCBsZWFrcyBvciBwcmVtYXR1cmUgY2xlYW51cC4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCB0aGV5IGFyZSBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfc2Vzc2lvbl9wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9jb3JlLmM9MjA1PUVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdHVubmVsX3B1dCk7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0yMDYtXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoyMDc6dm9pZCBsMnRwX3Nlc3Npb25fcHV0KHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24pXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0yMDgte1xuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jLTIxMS19XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoyMTI6RVhQT1JUX1NZTUJPTF9HUEwobDJ0cF9zZXNzaW9uX3B1dCk7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0yMTMtXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmM9NTE1PXN0YXRpYyB2b2lkIGwydHBfc2Vzc2lvbl9jb2xsaXNpb25fZGVsKHN0cnVjdCBsMnRwX25ldCAqcG4sXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtNTQ4LVx0XHRcdGtmcmVlKGNsaXN0KTtcbm5ldC9sMnRwL2wydHBfY29yZS5jOjU0OTpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfY29yZS5jLTU1MC1cdH1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMDE2PWludCBsMnRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMDgwLVx0XHRpZiAoc2Vzc2lvbilcbm5ldC9sMnRwL2wydHBfY29yZS5jOjEwODE6XHRcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwODItXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTA5MC1cdGlmICh2ZXJzaW9uICE9IHR1bm5lbC1cdTAwM2V2ZXJzaW9uKSB7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMDkxOlx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTA5Mi1cdFx0Z290byBpbnZhbGlkO1xuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwOTYtXHQgICAgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzZXNzaW9uLCBza2IsIFx1MDAyNnB0ciwgXHUwMDI2b3B0cikpIHtcbm5ldC9sMnRwL2wydHBfY29yZS5jOjEwOTc6XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMDk4LVx0XHRnb3RvIGludmFsaWQ7XG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTEwMS1cdGwydHBfcmVjdl9jb21tb24oc2Vzc2lvbiwgc2tiLCBwdHIsIG9wdHIsIGhkcmZsYWdzLCBsZW5ndGgpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTEwMjpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMTAzLVxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jPTE3NDU9c3RhdGljIHZvaWQgbDJ0cF9zZXNzaW9uX2RlbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNzU1LVx0LyogZHJvcCBpbml0aWFsIHJlZiAqL1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTc1NjpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNzU3LVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTc1OC1cdC8qIGRyb3Agd29ya3F1ZXVlIHJlZiAqL1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTc1OTpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNzYwLX1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yMTI9dm9pZCBsMnRwX3R1bm5lbF9wdXQoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmg6MjEzOnZvaWQgbDJ0cF9zZXNzaW9uX3B1dChzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfY29yZS5oLTIxNC1cbi0tXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYz01Mz1zdGF0aWMgdm9pZCBsMnRwX2Rmc19uZXh0X3Nlc3Npb24oc3RydWN0IGwydHBfZGZzX3NlcV9kYXRhICpwZClcbi0tXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy01Ni1cdGlmIChwZC1cdTAwM2VzZXNzaW9uKVxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6NTc6XHRcdGwydHBfc2Vzc2lvbl9wdXQocGQtXHUwMDNlc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy01OC1cbi0tXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYz0xMDM9c3RhdGljIHZvaWQgbDJ0cF9kZnNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KVxuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTExMy1cdGlmIChwZC1cdTAwM2VzZXNzaW9uKSB7XG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYzoxMTQ6XHRcdGwydHBfc2Vzc2lvbl9wdXQocGQtXHUwMDNlc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0xMTUtXHRcdHBkLVx1MDAzZXNlc3Npb24gPSBOVUxMO1xuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jPTMwMj1zdGF0aWMgaW50IGwydHBfZGZzX3NlcV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMwOS1cdGlmIChwZC1cdTAwM2VzZXNzaW9uKVxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6MzEwOlx0XHRsMnRwX3Nlc3Npb25fcHV0KHBkLVx1MDAzZXNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtMzExLVx0aWYgKHBkLVx1MDAzZXR1bm5lbClcbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jPTIyNj1zdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuLS1cbm5ldC9sMnRwL2wydHBfZXRoLmMtMjkyLVx0XHRsMnRwX3Nlc3Npb25fZGVsZXRlKHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9ldGguYzoyOTM6XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTI5NC1cdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTMwMy1cbm5ldC9sMnRwL2wydHBfZXRoLmM6MzA0Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzA1LVxuLS1cbm5ldC9sMnRwL2wydHBfZXRoLmMtMzEwLWVycl9zZXNzX2Rldjpcbm5ldC9sMnRwL2wydHBfZXRoLmM6MzExOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzEyLVx0ZnJlZV9uZXRkZXYoZGV2KTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzEzLWVycl9zZXNzOlxubmV0L2wydHAvbDJ0cF9ldGguYzozMTQ6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9ldGguYy0zMTUtZXJyOlxuLS1cbm5ldC9sMnRwL2wydHBfaXAuYz0xMjU9c3RhdGljIGludCBsMnRwX2lwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbDJ0cC9sMnRwX2lwLmMtMTY5LVx0bDJ0cF9yZWN2X2NvbW1vbihzZXNzaW9uLCBza2IsIHB0ciwgb3B0ciwgMCwgc2tiLVx1MDAzZWxlbik7XG5uZXQvbDJ0cC9sMnRwX2lwLmM6MTcwOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfaXAuYy0xNzEtXG4tLVxubmV0L2wydHAvbDJ0cF9pcC5jLTIwMi1kaXNjYXJkX3Nlc3M6XG5uZXQvbDJ0cC9sMnRwX2lwLmM6MjAzOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfaXAuYy0yMDQtXHRnb3RvIGRpc2NhcmQ7XG4tLVxubmV0L2wydHAvbDJ0cF9pcDYuYz0xMzU9c3RhdGljIGludCBsMnRwX2lwNl9yZWN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2wydHAvbDJ0cF9pcDYuYy0xNzktXHRsMnRwX3JlY3ZfY29tbW9uKHNlc3Npb24sIHNrYiwgcHRyLCBvcHRyLCAwLCBza2ItXHUwMDNlbGVuKTtcbm5ldC9sMnRwL2wydHBfaXA2LmM6MTgwOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfaXA2LmMtMTgxLVxuLS1cbm5ldC9sMnRwL2wydHBfaXA2LmMtMjEyLWRpc2NhcmRfc2Vzczpcbm5ldC9sMnRwL2wydHBfaXA2LmM6MjEzOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfaXA2LmMtMjE0LVx0Z290byBkaXNjYXJkO1xuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTUyOD1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNjQ5LVx0XHRcdFx0XHRcdCAgTDJUUF9DTURfU0VTU0lPTl9DUkVBVEUpO1xubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6NjUwOlx0XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy02NTEtXHRcdH1cbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz02NjA9c3RhdGljIGludCBsMnRwX25sX2NtZF9zZXNzaW9uX2RlbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTY3OS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjY4MDpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy02ODEtXG4tLVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM9Njg2PXN0YXRpYyBpbnQgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9tb2RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy03MTUtXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo3MTY6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNzE3LVxuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTgwMj1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODI2LVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6ODI3Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTgyOC1cbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy04MzMtZXJyX3JlZjpcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjgzNDpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy04MzUtZXJyOlxuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTgzOT1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODY3LVx0XHRcdFx0XHQgc2Vzc2lvbiwgTDJUUF9DTURfU0VTU0lPTl9HRVQpIFx1MDAzYyAwKSB7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo4Njg6XHRcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTg2OS1cdFx0XHRsMnRwX3R1bm5lbF9wdXQodHVubmVsKTtcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy04NzEtXHRcdH1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjg3MjpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTg3My1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTI1MD1zdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTMwNS1cbm5ldC9sMnRwL2wydHBfcHBwLmM6MzA2Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzA3LVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMzEwLWVycm9yX3B1dF9zZXNzOlxubmV0L2wydHAvbDJ0cF9wcHAuYzozMTE6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0zMTItZXJyb3I6XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0zMzA9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTM2NC1cbm5ldC9sMnRwL2wydHBfcHBwLmM6MzY1Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzY2LVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMzY5LWFib3J0X3B1dF9zZXNzOlxubmV0L2wydHAvbDJ0cF9wcHAuYzozNzA6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0zNzEtYWJvcnQ6XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0zOTA9c3RhdGljIHZvaWQgcHBwb2wydHBfc2Vzc2lvbl9jbG9zZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uKVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtNDA1LVx0XHQvKiBkcm9wIHJlZiB0YWtlbiB3aGVuIHdlIHJlZmVyZW5jZWQgc29ja2V0IHZpYSBza191c2VyX2RhdGEgKi9cbm5ldC9sMnRwL2wydHBfcHBwLmM6NDA2Olx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy00MDctXHR9XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz00MTI9c3RhdGljIGludCBwcHBvbDJ0cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy00MzYtXHRcdC8qIGRyb3AgcmVmIHRha2VuIGJ5IHBwcG9sMnRwX3NvY2tfdG9fc2Vzc2lvbiAqL1xubmV0L2wydHAvbDJ0cF9wcHAuYzo0Mzc6XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTQzOC1cdH1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTY4OD1zdGF0aWMgaW50IHBwcG9sMnRwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVzZXJ2YWRkcixcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTc3My1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cHMtXHUwMDNlc2tfbG9jayk7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjc3NDpcdFx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy03NzUtXHRcdFx0Z290byBlbmQ7XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy04MzEtXHRpZiAoZHJvcF9yZWZjbnQpXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjgzMjpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtODMzLVx0bDJ0cF90dW5uZWxfcHV0KHR1bm5lbCk7XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz04NDI9c3RhdGljIGludCBwcHBvbDJ0cF9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtODcyLWVycl9zZXNzOlxubmV0L2wydHAvbDJ0cF9wcHAuYzo4NzM6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy04NzQtZXJyOlxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9ODgyPXN0YXRpYyBpbnQgcHBwb2wydHBfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtOTgzLVxubmV0L2wydHAvbDJ0cF9wcHAuYzo5ODQ6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy05ODUtZW5kOlxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTAxNT1zdGF0aWMgaW50IHBwcG9sMnRwX3R1bm5lbF9jb3B5X3N0YXRzKHN0cnVjdCBwcHBvbDJ0cF9pb2Nfc3RhdHMgKnN0YXRzLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTAzMy1cdGlmIChzZXNzaW9uLVx1MDAzZXB3dHlwZSAhPSBMMlRQX1BXVFlQRV9QUFApIHtcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTAzNDpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTAzNS1cdFx0cmV0dXJuIC1FQkFEUjtcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEwMzgtXHRwcHBvbDJ0cF9jb3B5X3N0YXRzKHN0YXRzLCBcdTAwMjZzZXNzaW9uLVx1MDAzZXN0YXRzKTtcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTAzOTpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEwNDAtXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMDQ0PXN0YXRpYyBpbnQgcHBwb2wydHBfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEwNjUtXHRcdGlmIChzZXNzaW9uLVx1MDAzZW1hZ2ljICE9IEwyVFBfU0VTU0lPTl9NQUdJQykge1xubmV0L2wydHAvbDJ0cF9wcHAuYzoxMDY2Olx0XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEwNjctXHRcdFx0cmV0dXJuIC1FQkFERjtcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTExMzktXHRpZiAoc2Vzc2lvbilcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTE0MDpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTE0MS1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTEyMzI9c3RhdGljIGludCBwcHBvbDJ0cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMjY4LVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMjY5Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI3MC1lbmQ6XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMzM4PXN0YXRpYyBpbnQgcHBwb2wydHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTM4Mi1lbmRfcHV0X3Nlc3M6XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjEzODM6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0xMzg0LWVuZDpcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE0MjI9c3RhdGljIHZvaWQgcHBwb2wydHBfbmV4dF9zZXNzaW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZClcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE0MjUtXHRpZiAocGQtXHUwMDNlc2Vzc2lvbilcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTQyNjpcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQyNy1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE0NzU9c3RhdGljIHZvaWQgcHBwb2wydHBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQ4NS1cdGlmIChwZC1cdTAwM2VzZXNzaW9uKSB7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjE0ODY6XHRcdGwydHBfc2Vzc2lvbl9wdXQocGQtXHUwMDNlc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE0ODctXHRcdHBkLVx1MDAzZXNlc3Npb24gPSBOVUxMO1xuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTYyMz1zdGF0aWMgaW50IHBwcG9sMnRwX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjgtXHRpZiAocGQtXHUwMDNlc2Vzc2lvbilcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTYyOTpcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTYzMC1cdGlmIChwZC1cdTAwM2V0dW5uZWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODQ2CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTDJUUCBNb2R1bGUgU3ltYm9scyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgTDJUUCBtb2R1bGUgc3ltYm9scy4gSSBzZWUgYGwydHBfc2Vzc2lvbl9wdXRgIGFuZCBgbDJ0cF90dW5uZWxfcHV0YCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGlzIHN0YW5kYXJkLiBUaGVuIEkmIzM5O20gbm90aWNpbmcgdGhhdCBgcHBwb2wydHBfcHJvY19vcGVuYCBhbmQgYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAgYXJlICpzdGF0aWMqIGZ1bmN0aW9ucywgdHVja2VkIGF3YXkgaW4gYG5ldC9sMnRwL2wydHBfcHBwLmNgLiBTaW1pbGFybHksIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAgaXMgc3RhdGljIHRvbywgdGhpcyBvbmUgcmVzaWRpbmcgaW4gYG5ldC9sMnRwL2wydHBfZGVidWdmcy5jYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtIbW0sIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGEgYml0IHRyaWNraWVyLiYjMzQ7IFRoZXkgKm1pZ2h0KiBiZSBpbmxpbmVkIGFuZCB0aGVuLCBmb3JnZXQgYWJvdXQgZGlyZWN0IGZ1enppbmcgYnkgbmFtZS4gSG93ZXZlciwgc2luY2UgdGhleSYjMzk7cmUgYmVpbmcgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYGZpbGVfb3BlcmF0aW9uc2AgYW5kIGBwcm9jX29wc2Agc3RydWN0dXJlcywgSSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5ICphcmVuJiMzOTt0KiBpbmxpbmVkLiBUaGV5JiMzOTtsbCBoYXZlIGRpc2NyZXRlIHN5bWJvbCBhZGRyZXNzZXMuIFRoYXQgbWVhbnMgdGhleSBhcmUgcGVyZmVjdGx5IHZhbGlkIHRhcmdldHMuCgpMZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGxlYWRzLiBZZXAsIGl0IGxvb2tzIGxpa2UgYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4KCldhaXQgYSBzZWNvbmQuLi4gKmJvdGgqIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCBhcmUgKm5ldyogZnVuY3Rpb25zLiBBbmQgdGhlIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAgZnVuY3Rpb24gaXMgYSAqbW9kaWZpZWQqIGV4aXN0aW5nIGZ1bmN0aW9uLiBBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCBJJiMzOTttIGRlYWxpbmcgd2l0aC4gTGV0JiMzOTtzIG1ha2UgYSBub3RlIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMMlRQJiMzNDssCiAgICAmIzM0O0wyVFBfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0wyVFAmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2wydHBfZGZzX3NlcV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3Byb2Nfb3BlbiYjMzQ7LAogICAgJiMzNDtwcHBvbDJ0cF9wcm9jX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb25zIG9mIEwyVFAgZGVidWdmcyBhbmQgcHJvY2ZzIHNlcV9maWxlcyBieSBhZGRpbmcgbWlzc2luZyBsMnRwX3Nlc3Npb25fcHV0IGFuZCBsMnRwX3R1bm5lbF9wdXQgY2FsbHMuIEl0IGFsc28gaW50cm9kdWNlcyBuZXcgcHJvY2ZzIG9wZW4gYW5kIHJlbGVhc2UgZnVuY3Rpb25zIGZvciBwcHBvbDJ0cC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG9wZW5pbmcgYW5kIGNsb3NpbmcgdGhlIHJlc3BlY3RpdmUgZGVidWdmcyBhbmQgcHJvY2ZzIGZpbGVzLCBhbmQgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHJlc291cmNlIG1hbmFnZW1lbnQsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF9kZnNfc2VxX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfcHJvY19vcGVuJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3Byb2NfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgb2YgTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgc2VxX2ZpbGVzIGJ5IGFkZGluZyBtaXNzaW5nIGwydHBfc2Vzc2lvbl9wdXQgYW5kIGwydHBfdHVubmVsX3B1dCBjYWxscy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG5ldyBwcm9jZnMgb3BlbiBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgZm9yIHBwcG9sMnRwLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgY2xvc2luZyB0aGUgcmVzcGVjdGl2ZSBkZWJ1Z2ZzIGFuZCBwcm9jZnMgZmlsZXMsIGFuZCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVzb3VyY2UgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZWZlcmVuY2UgY291bnQgbGVha3MgaW4gTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgYnkgYWRkaW5nIG1pc3NpbmcgYGwydHBfc2Vzc2lvbl9wdXRgIGFuZCBgbDJ0cF90dW5uZWxfcHV0YCBjYWxscyBpbiB0aGUgcmVsZWFzZSBoYW5kbGVycy4gSXQgYWxzbyByZXBsYWNlcyBgcHJvY19jcmVhdGVfbmV0YCB3aXRoIGBwcm9jX2NyZWF0ZV9kYXRhYCBhbmQgY3VzdG9tIGBwcm9jX29wc2AgdG8gZW5zdXJlIHRoZSByZWxlYXNlIGhhbmRsZXIgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5L3JlZmNvdW50IGxlYWtzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBLTUVNTEVBSywgYW5kIHJlZmNvdW50IGNoZWNraW5nLiBUaGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAodmlhIGBfX3NlcV9vcGVuX3ByaXZhdGVgKSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliZjNiOWNlMmRiMWY5ZjAwZGQ2ZDAxYjBkYjE4NDUwNjBiYWU3OGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxNjoxNzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jIGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMKaW5kZXggYjI2OTg2ZmRhOWQ2Yy4uYzEyZDVlMWVlNTUwYyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMKQEAgLTMwNiw2ICYjNDM7MzA2LDEwIEBAIHN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAKIAlzZXEgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiAJcGQgPSBzZXEtJmd0O3ByaXZhdGU7CiYjNDM7CWlmIChwZC0mZ3Q7c2Vzc2lvbikKJiM0MzsJCWwydHBfc2Vzc2lvbl9wdXQocGQtJmd0O3Nlc3Npb24pOwomIzQzOwlpZiAocGQtJmd0O3R1bm5lbCkKJiM0MzsJCWwydHBfdHVubmVsX3B1dChwZC0mZ3Q7dHVubmVsKTsKIAlpZiAocGQtJmd0O25ldCkKIAkJcHV0X25ldF90cmFjayhwZC0mZ3Q7bmV0LCAmYW1wO3BkLSZndDtuc190cmFja2VyKTsKIAlrZnJlZShwZCk7CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuYwppbmRleCBmODg4MTY5OWUxY2FkLi4xYmNmNDQ3ZjJmOGIwIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmMKQEAgLTE1OTcsNiAmIzQzOzE1OTcsNTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0gewogCS5zdG9wCQk9IHBwcG9sMnRwX3NlcV9zdG9wLAogCS5zaG93CQk9IHBwcG9sMnRwX3NlcV9zaG93LAogfTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHBkZV9kYXRhKGlub2RlKTsKJiM0MzsJc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZDsKJiM0MzsKJiM0MzsJbmV0ID0gbWF5YmVfZ2V0X25ldChuZXQpOwomIzQzOwlpZiAoIW5ldCkKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CiYjNDM7CXBkID0gX19zZXFfb3Blbl9wcml2YXRlKGZpbGUsICZhbXA7cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKCpwZCkpOwomIzQzOwlpZiAoIXBkKSB7CiYjNDM7CQlwdXRfbmV0KG5ldCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTkVUX05TCiYjNDM7CXBkLSZndDtwLm5ldCA9IG5ldDsKJiM0MzsJbmV0bnNfdHJhY2tlcl9hbGxvYyhuZXQsICZhbXA7cGQtJmd0O3AubnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkID0gc2VxLSZndDtwcml2YXRlOwomIzQzOwomIzQzOwlpZiAocGQtJmd0O3Nlc3Npb24pCiYjNDM7CQlsMnRwX3Nlc3Npb25fcHV0KHBkLSZndDtzZXNzaW9uKTsKJiM0MzsJaWYgKHBkLSZndDt0dW5uZWwpCiYjNDM7CQlsMnRwX3R1bm5lbF9wdXQocGQtJmd0O3R1bm5lbCk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ORVRfTlMKJiM0MzsJcHV0X25ldF90cmFjayhwZC0mZ3Q7cC5uZXQsICZhbXA7cGQtJmd0O3AubnNfdHJhY2tlcik7CiYjNDM7I2Vsc2UKJiM0MzsJcHV0X25ldCgmYW1wO2luaXRfbmV0KTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBwcG9sMnRwX3Byb2Nfb3BzID0gewomIzQzOwkucHJvY19vcGVuCT0gcHBwb2wydHBfcHJvY19vcGVuLAomIzQzOwkucHJvY19yZWFkCT0gc2VxX3JlYWQsCiYjNDM7CS5wcm9jX2xzZWVrCT0gc2VxX2xzZWVrLAomIzQzOwkucHJvY19yZWxlYXNlCT0gcHBwb2wydHBfcHJvY19yZWxlYXNlLAomIzQzO307CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjA4LDggJiM0MzsxNjU1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9sMnRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKIAlpbnQgZXJyID0gMDsKIAotCXBkZSA9IHByb2NfY3JlYXRlX25ldCgmIzM0O3BwcG9sMnRwJiMzNDssIDA0NDQsIG5ldC0mZ3Q7cHJvY19uZXQsCi0JCQkgICAgICAmYW1wO3BwcG9sMnRwX3NlcV9vcHMsIHNpemVvZihzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEpKTsKJiM0MzsJcGRlID0gcHJvY19jcmVhdGVfZGF0YSgmIzM0O3BwcG9sMnRwJiMzNDssIDA0NDQsIG5ldC0mZ3Q7cHJvY19uZXQsCiYjNDM7CQkJICAgICAgICZhbXA7cHBwb2wydHBfcHJvY19vcHMsIG5ldCk7CiAJaWYgKCFwZGUpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgyCgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDg3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipMMlRQIFJlZmVyZW5jZSBMZWFrIEZpeDogQSBRdWljayBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEwyVFAsIHNwZWNpZmljYWxseSBpbiBgbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNgIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFkZHJlc3NpbmcgYSBjbGFzc2ljIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSwgd2hpY2ggSSBsaWtlIHRvIHNlZSBhZGRyZXNzZWQuCgpJbiBgbDJ0cF9kZWJ1Z2ZzLmNgLCB0aGUgcGF0Y2ggYWRkcyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIHdpdGhpbiB0aGUgYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbC4gRXNzZW50aWFsbHksIHdoZW4gdGhlIGRlYnVnZnMgZmlsZSBpcyBjbG9zZWQsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgcmVmZXJlbmNlcyBoZWxkIG9uIHRoZSBzZXNzaW9uIGFuZCB0dW5uZWwuIE90aGVyd2lzZSwgd2UmIzM5O3JlIHN0YXJpbmcgZG93biB0aGUgYmFycmVsIG9mIGVpdGhlciBhIG1lbW9yeSBsZWFrIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGEgYmlnIG5vLW5vLCBhcyB3ZSBib3RoIGtub3cuIFRoZSBvbGQgY29kZSB3YXMganVzdCAqbWlzc2luZyogdGhlc2UgYHB1dGAgY2FsbHMuCgpUaGUgY2hhbmdlcyBpbiBgbDJ0cF9wcHAuY2AgbWlycm9yIHRoaXMuIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhlIHByb2MgZmlsZSBoYW5kbGluZy4gTm93LCBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgdGhlIHN0YW5kYXJkIGBwcm9jX2NyZWF0ZV9uZXRgIGFuZCBgc2VxX29wZW5gLCB0aGlzIHBhdGNoIGJyaW5ncyBpbiBgcHJvY19jcmVhdGVfZGF0YWAgYW5kIGN1c3RvbSBgcHJvY19vcHNgLCBzcGVjaWZpY2FsbHkgYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwcm9jIGZpbGUgaXMgY2xvc2VkLCB0aGUgc2Vzc2lvbiBhbmQgdHVubmVsIHJlZmVyZW5jZXMgYXJlIHByb3Blcmx5IGRlY3JlbWVudGVkLCBwcmV2ZW50aW5nIHNpbWlsYXIgbGVha3MuIEFnYWluLCB0aGlzIGlzIGFsbCBhYm91dCBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudCwgYW5kIEkgYW0gZ2xhZCB0byBzZWUgaXQgaGVyZS4KCkkmIzM5O3ZlIHRha2VuIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgYXQgYF9fc2VxX29wZW5fcHJpdmF0ZWAsIGFuZCBpdCBhcHBlYXJzIHRoYXQgYHBkYCAodGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUpIGlzIGBremFsbG9jYCYjMzk7ZCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgemVyby1pbml0aWFsaXplZC4gVGhpcyBtZWFucyBgcGQtJmd0O3Nlc3Npb25gIGFuZCBgcGQtJmd0O3R1bm5lbGAgc3RhcnQgb3V0IGFzIE5VTEwuIFNvIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgd2hpY2ggaXMgZ3JlYXQuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGNsZWFuIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgbGVhay4gSSBhbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgbm90IGxlYWtpbmcgYW55IHNlbnNpdGl2ZSBkYXRhLiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIEtBU0FOL0tNRU1MRUFLIG9yIHJlZ3VsYXIgcmVmY291bnQgZGVidWdnaW5nIHdvdWxkIGhhdmUgY2F1Z2h0IHRoZXNlIGlzc3VlcyBhbnl3YXksIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYWRkcmVzcyB0aGVtLiBPdmVyYWxsLCBnb29kIHdvcms7IGEgc2ltcGxlLCBlZmZlY3RpdmUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlZmVyZW5jZSBjb3VudCBsZWFrcyBpbiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBieSBhZGRpbmcgbWlzc2luZyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIGluIHRoZSByZWxlYXNlIGhhbmRsZXJzLiBJdCBhbHNvIHJlcGxhY2VzIGBwcm9jX2NyZWF0ZV9uZXRgIHdpdGggYHByb2NfY3JlYXRlX2RhdGFgIGFuZCBjdXN0b20gYHByb2Nfb3BzYCB0byBlbnN1cmUgdGhlIHJlbGVhc2UgaGFuZGxlciBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkvcmVmY291bnQgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtNRU1MRUFLLCBhbmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgICh2aWEgYF9fc2VxX29wZW5fcHJpdmF0ZWApLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlZmVyZW5jZSBjb3VudCBsZWFrcyBpbiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBieSBhZGRpbmcgbWlzc2luZyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIGluIHRoZSByZWxlYXNlIGhhbmRsZXJzLiBJdCBhbHNvIHJlcGxhY2VzIGBwcm9jX2NyZWF0ZV9uZXRgIHdpdGggYHByb2NfY3JlYXRlX2RhdGFgIGFuZCBjdXN0b20gYHByb2Nfb3BzYCB0byBlbnN1cmUgdGhlIHJlbGVhc2UgaGFuZGxlciBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkvcmVmY291bnQgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtNRU1MRUFLLCBhbmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgICh2aWEgYF9fc2VxX29wZW5fcHJpdmF0ZWApLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTc6MzMuMzI4MDA0NjczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3ODAxNDE1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTDJUUFwiLFxuICAgIFwiTDJUUF9ERUJVR0ZTXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJERUJVR19GU1wiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImwydHBfZGZzX3NlcV9yZWxlYXNlXCIsXG4gICAgXCJwcHBvbDJ0cF9wcm9jX29wZW5cIixcbiAgICBcInBwcG9sMnRwX3Byb2NfcmVsZWFzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVmZXJlbmNlIGNvdW50IGxlYWtzIGluIEwyVFAgZGVidWdmcyBhbmQgcHJvY2ZzIGJ5IGFkZGluZyBtaXNzaW5nIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAgY2FsbHMgaW4gdGhlIHJlbGVhc2UgaGFuZGxlcnMuIEl0IGFsc28gcmVwbGFjZXMgYHByb2NfY3JlYXRlX25ldGAgd2l0aCBgcHJvY19jcmVhdGVfZGF0YWAgYW5kIGN1c3RvbSBgcHJvY19vcHNgIHRvIGVuc3VyZSB0aGUgcmVsZWFzZSBoYW5kbGVyIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeS9yZWZjb3VudCBsZWFrcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgS01FTUxFQUssIGFuZCByZWZjb3VudCBjaGVja2luZy4gVGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKHZpYSBgX19zZXFfb3Blbl9wcml2YXRlYCksIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSByZWxlYXNlIGZ1bmN0aW9ucyBvZiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBzZXFfZmlsZXMgYnkgYWRkaW5nIG1pc3NpbmcgbDJ0cF9zZXNzaW9uX3B1dCBhbmQgbDJ0cF90dW5uZWxfcHV0IGNhbGxzLiBJdCBhbHNvIGludHJvZHVjZXMgbmV3IHByb2NmcyBvcGVuIGFuZCByZWxlYXNlIGZ1bmN0aW9ucyBmb3IgcHBwb2wydHAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSByZXNwZWN0aXZlIGRlYnVnZnMgYW5kIHByb2NmcyBmaWxlcywgYW5kIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzozMy4zMjgwMTI1MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzgzMTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDliZjNiOWNlMmRiMWY5ZjAwZGQ2ZDAxYjBkYjE4NDUwNjBiYWU3OGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTY6MTc6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xcbmluZGV4IGIyNjk4NmZkYTlkNmMuLmMxMmQ1ZTFlZTU1MGMgMTAwNjQ0XFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNcXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xcbkBAIC0zMDYsNiArMzA2LDEwIEBAIHN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcbiBcXHRzZXEgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHBkID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRpZiAocGQtXFx1MDAzZXNlc3Npb24pXFxuK1xcdFxcdGwydHBfc2Vzc2lvbl9wdXQocGQtXFx1MDAzZXNlc3Npb24pO1xcbitcXHRpZiAocGQtXFx1MDAzZXR1bm5lbClcXG4rXFx0XFx0bDJ0cF90dW5uZWxfcHV0KHBkLVxcdTAwM2V0dW5uZWwpO1xcbiBcXHRpZiAocGQtXFx1MDAzZW5ldClcXG4gXFx0XFx0cHV0X25ldF90cmFjayhwZC1cXHUwMDNlbmV0LCBcXHUwMDI2cGQtXFx1MDAzZW5zX3RyYWNrZXIpO1xcbiBcXHRrZnJlZShwZCk7XFxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXFxuaW5kZXggZjg4ODE2OTllMWNhZC4uMWJjZjQ0N2YyZjhiMCAxMDA2NDRcXG4tLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jXFxuKysrIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xcbkBAIC0xNTk3LDYgKzE1OTcsNTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0ge1xcbiBcXHQuc3RvcFxcdFxcdD0gcHBwb2wydHBfc2VxX3N0b3AsXFxuIFxcdC5zaG93XFx0XFx0PSBwcHBvbDJ0cF9zZXFfc2hvdyxcXG4gfTtcXG4rXFxuK3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHBkZV9kYXRhKGlub2RlKTtcXG4rXFx0c3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZDtcXG4rXFxuK1xcdG5ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcXG4rXFx0aWYgKCFuZXQpXFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcbitcXHRwZCA9IF9fc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKCpwZCkpO1xcbitcXHRpZiAoIXBkKSB7XFxuK1xcdFxcdHB1dF9uZXQobmV0KTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuKyNpZmRlZiBDT05GSUdfTkVUX05TXFxuK1xcdHBkLVxcdTAwM2VwLm5ldCA9IG5ldDtcXG4rXFx0bmV0bnNfdHJhY2tlcl9hbGxvYyhuZXQsIFxcdTAwMjZwZC1cXHUwMDNlcC5uc190cmFja2VyLCBHRlBfS0VSTkVMKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZCA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFxuK1xcdGlmIChwZC1cXHUwMDNlc2Vzc2lvbilcXG4rXFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cXHUwMDNlc2Vzc2lvbik7XFxuK1xcdGlmIChwZC1cXHUwMDNldHVubmVsKVxcbitcXHRcXHRsMnRwX3R1bm5lbF9wdXQocGQtXFx1MDAzZXR1bm5lbCk7XFxuK1xcbisjaWZkZWYgQ09ORklHX05FVF9OU1xcbitcXHRwdXRfbmV0X3RyYWNrKHBkLVxcdTAwM2VwLm5ldCwgXFx1MDAyNnBkLVxcdTAwM2VwLm5zX3RyYWNrZXIpO1xcbisjZWxzZVxcbitcXHRwdXRfbmV0KFxcdTAwMjZpbml0X25ldCk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcHBwb2wydHBfcHJvY19vcHMgPSB7XFxuK1xcdC5wcm9jX29wZW5cXHQ9IHBwcG9sMnRwX3Byb2Nfb3BlbixcXG4rXFx0LnByb2NfcmVhZFxcdD0gc2VxX3JlYWQsXFxuK1xcdC5wcm9jX2xzZWVrXFx0PSBzZXFfbHNlZWssXFxuK1xcdC5wcm9jX3JlbGVhc2VcXHQ9IHBwcG9sMnRwX3Byb2NfcmVsZWFzZSxcXG4rfTtcXG4gI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG5AQCAtMTYwOCw4ICsxNjU1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9sMnRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0c3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXG4tXFx0cGRlID0gcHJvY19jcmVhdGVfbmV0KFxcXCJwcHBvbDJ0cFxcXCIsIDA0NDQsIG5ldC1cXHUwMDNlcHJvY19uZXQsXFxuLVxcdFxcdFxcdCAgICAgIFxcdTAwMjZwcHBvbDJ0cF9zZXFfb3BzLCBzaXplb2Yoc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhKSk7XFxuK1xcdHBkZSA9IHByb2NfY3JlYXRlX2RhdGEoXFxcInBwcG9sMnRwXFxcIiwgMDQ0NCwgbmV0LVxcdTAwM2Vwcm9jX25ldCxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwcHBvbDJ0cF9wcm9jX29wcywgbmV0KTtcXG4gXFx0aWYgKCFwZGUpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjMzLjg4NjM5NzAxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU5NDEwNzY3Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfREVCVUdGU1wiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsMnRwX2Rmc19zZXFfcmVsZWFzZVwiLFxuICAgIFwicHBwb2wydHBfcHJvY19vcGVuXCIsXG4gICAgXCJwcHBvbDJ0cF9wcm9jX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgb2YgTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgc2VxX2ZpbGVzIGJ5IGFkZGluZyBtaXNzaW5nIGwydHBfc2Vzc2lvbl9wdXQgYW5kIGwydHBfdHVubmVsX3B1dCBjYWxscy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG5ldyBwcm9jZnMgb3BlbiBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgZm9yIHBwcG9sMnRwLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgY2xvc2luZyB0aGUgcmVzcGVjdGl2ZSBkZWJ1Z2ZzIGFuZCBwcm9jZnMgZmlsZXMsIGFuZCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVzb3VyY2UgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWJmM2I5Y2UyZGIxZjlmMDBkZDZkMDFiMGRiMTg0NTA2MGJhZTc4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE2OjE3OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuaW5kZXggYjI2OTg2ZmRhOWQ2Yy4uYzEyZDVlMWVlNTUwYyAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuQEAgLTMwNiw2ICszMDYsMTAgQEAgc3RhdGljIGludCBsMnRwX2Rmc19zZXFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHNlcSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0cGQgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbitcdGlmIChwZC1cdTAwM2VzZXNzaW9uKVxuK1x0XHRsMnRwX3Nlc3Npb25fcHV0KHBkLVx1MDAzZXNlc3Npb24pO1xuK1x0aWYgKHBkLVx1MDAzZXR1bm5lbClcbitcdFx0bDJ0cF90dW5uZWxfcHV0KHBkLVx1MDAzZXR1bm5lbCk7XG4gXHRpZiAocGQtXHUwMDNlbmV0KVxuIFx0XHRwdXRfbmV0X3RyYWNrKHBkLVx1MDAzZW5ldCwgXHUwMDI2cGQtXHUwMDNlbnNfdHJhY2tlcik7XG4gXHRrZnJlZShwZCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9wcHAuYyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbmluZGV4IGY4ODgxNjk5ZTFjYWQuLjFiY2Y0NDdmMmY4YjAgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jXG4rKysgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5AQCAtMTU5Nyw2ICsxNTk3LDUzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2wydHBfc2VxX29wcyA9IHtcbiBcdC5zdG9wXHRcdD0gcHBwb2wydHBfc2VxX3N0b3AsXG4gXHQuc2hvd1x0XHQ9IHBwcG9sMnRwX3NlcV9zaG93LFxuIH07XG4rXG4rc3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gcGRlX2RhdGEoaW5vZGUpO1xuK1x0c3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZDtcbitcbitcdG5ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcbitcdGlmICghbmV0KVxuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1xuK1x0cGQgPSBfX3NlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKCpwZCkpO1xuK1x0aWYgKCFwZCkge1xuK1x0XHRwdXRfbmV0KG5ldCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuKyNpZmRlZiBDT05GSUdfTkVUX05TXG4rXHRwZC1cdTAwM2VwLm5ldCA9IG5ldDtcbitcdG5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCBcdTAwMjZwZC1cdTAwM2VwLm5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXG4rXHRpZiAocGQtXHUwMDNlc2Vzc2lvbilcbitcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbitcdGlmIChwZC1cdTAwM2V0dW5uZWwpXG4rXHRcdGwydHBfdHVubmVsX3B1dChwZC1cdTAwM2V0dW5uZWwpO1xuK1xuKyNpZmRlZiBDT05GSUdfTkVUX05TXG4rXHRwdXRfbmV0X3RyYWNrKHBkLVx1MDAzZXAubmV0LCBcdTAwMjZwZC1cdTAwM2VwLm5zX3RyYWNrZXIpO1xuKyNlbHNlXG4rXHRwdXRfbmV0KFx1MDAyNmluaXRfbmV0KTtcbisjZW5kaWZcbitcdHJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwcHBvbDJ0cF9wcm9jX29wcyA9IHtcbitcdC5wcm9jX29wZW5cdD0gcHBwb2wydHBfcHJvY19vcGVuLFxuK1x0LnByb2NfcmVhZFx0PSBzZXFfcmVhZCxcbitcdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2VlayxcbitcdC5wcm9jX3JlbGVhc2VcdD0gcHBwb2wydHBfcHJvY19yZWxlYXNlLFxuK307XG4gI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5AQCAtMTYwOCw4ICsxNjU1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9sMnRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlO1xuIFx0aW50IGVyciA9IDA7XG4gXG4tXHRwZGUgPSBwcm9jX2NyZWF0ZV9uZXQoXCJwcHBvbDJ0cFwiLCAwNDQ0LCBuZXQtXHUwMDNlcHJvY19uZXQsXG4tXHRcdFx0ICAgICAgXHUwMDI2cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSkpO1xuK1x0cGRlID0gcHJvY19jcmVhdGVfZGF0YShcInBwcG9sMnRwXCIsIDA0NDQsIG5ldC1cdTAwM2Vwcm9jX25ldCxcbitcdFx0XHQgICAgICAgXHUwMDI2cHBwb2wydHBfcHJvY19vcHMsIG5ldCk7XG4gXHRpZiAoIXBkZSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjMzLjg4NjM5ODE3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTU3ODQxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMMlRQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBgbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNgIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEluIGBsMnRwX2RlYnVnZnMuY2AsIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZS4gVGhleSd2ZSBhZGRlZCBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIHRvIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkncmUgYWltaW5nIHRvIHByb3Blcmx5IGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50cyBmb3Igc2Vzc2lvbnMgYW5kIHR1bm5lbHMgd2hlbiByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIHRocm91Z2ggdGhlIGRlYnVnZnMgaW50ZXJmYWNlLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuXG5cbk5vdywgbW92aW5nIHRvIGBsMnRwX3BwcC5jYCwgaXQgc2VlbXMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjaGFuZ2VzIHJlbGF0ZWQgdG8gUFBQIG92ZXIgTDJUUCBzdXBwb3J0LiBUaGV5J3ZlIGFkZGVkIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCwgYW5kIGFyZSByZXBsYWNpbmcgYHByb2NfY3JlYXRlX25ldGAgd2l0aCBgcHJvY19jcmVhdGVfZGF0YWAgdXNpbmcgYHBwcG9sMnRwX3Byb2Nfb3BzYC4gVGhpcyBzdWdnZXN0cyB0aGV5J3JlIHJlZmFjdG9yaW5nIGhvdyB0aGUgUFBQIG92ZXIgTDJUUCBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQncyBsaWtlbHkgYW4gZWZmb3J0IHRvIGltcHJvdmUgbWFuYWdlbWVudCBvciBpbnRyb2R1Y2UgbW9yZSBkYXRhIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlLlxuXG5HaXZlbiB0aGVzZSBjaGFuZ2VzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19MMlRQYCwgYENPTkZJR19MMlRQX0RFQlVHRlNgLCBgQ09ORklHX1BQUE9MMlRQYCwgYW5kIGBDT05GSUdfUFJPQ19GU2AgYXJlIGFsbCBlbmFibGVkLCBhcyB0aGVzZSBzZWVtIHRvIGJlIHRoZSBkZXBlbmRlbmNpZXMgYmFzZWQgb24gdGhlIGZpbGUgcGF0aHMuIEknbGwgcXVpY2tseSBsb29rIHVwIGluIGBuZXQvbDJ0cC9LY29uZmlnYCB0byBiZSBzdXJlIEknbSB1c2luZyB0aGUgZXhhY3QgY29uZmlnIG5hbWVzLiBGcm9tIHRoZXJlLCBJIGNhbiBlbnN1cmUgdGhpcyBwYXRjaCBpcyBzZXQgdXAgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzozOS4wMDIxODQ0NjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyNzQ3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEwyVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9LY29uZmlnLTUtXFxubmV0L2wydHAvS2NvbmZpZzo2Om1lbnVjb25maWcgTDJUUFxcbm5ldC9sMnRwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTGF5ZXIgVHdvIFR1bm5lbGluZyBQcm90b2NvbCAoTDJUUClcXFwiXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnLTM1LVxcbm5ldC9sMnRwL0tjb25maWc6MzY6Y29uZmlnIEwyVFBfREVCVUdGU1xcbm5ldC9sMnRwL0tjb25maWctMzctXFx0dHJpc3RhdGUgXFxcIkwyVFAgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy00OC1cXG5uZXQvbDJ0cC9LY29uZmlnOjQ5OmNvbmZpZyBMMlRQX1YzXFxubmV0L2wydHAvS2NvbmZpZy01MC1cXHRib29sIFxcXCJMMlRQdjMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9sMnRwL0tjb25maWctNjktXFxubmV0L2wydHAvS2NvbmZpZzo3MDpjb25maWcgTDJUUF9JUFxcbm5ldC9sMnRwL0tjb25maWctNzEtXFx0dHJpc3RhdGUgXFxcIkwyVFAgSVAgZW5jYXBzdWxhdGlvbiBmb3IgTDJUUHYzXFxcIlxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy04Ni1cXG5uZXQvbDJ0cC9LY29uZmlnOjg3OmNvbmZpZyBMMlRQX0VUSFxcbm5ldC9sMnRwL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIkwyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjM5LjA4NTQ2MzY3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Nzg1ODQ5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKkxvY2F0aW5nIFBQUE9MMlRQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBQUFBPTDJUUGAuIExldCBtZSB0aGluay4uLiBXaGVyZSB3b3VsZCBzb21ldGhpbmcgbGlrZSB0aGF0IGxvZ2ljYWxseSByZXNpZGUgaW4gYSBrZXJuZWwgc291cmNlIHRyZWU/IFBQUCBpcyBuZXR3b3JraW5nLCBzbyBpdCdzIGEgc2FmZSBiZXQgdG8gc3RhcnQgbG9va2luZyBpbiB0aGUgYGRyaXZlcnMvbmV0YCBkaXJlY3RvcnkuIEFuZCB3aXRoaW4gdGhhdCwgdGhlIFBQUC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGxpa2VseSB1bmRlciBgcHBwYC4gT2theSwgbGV0J3MgY2hlY2sgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhhdCdzIHRoZSBtb3N0IHByb2JhYmxlIGxvY2F0aW9uIGZvciB0aGlzIHNvcnQgb2YgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGltZSB0byBvcGVuIGl0IHVwIGFuZCBzZWUgaWYgbXkgaHVuY2ggaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjQyLjk2NDA1ODEyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA3OTk0NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUFBPTDJUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTYxPWNvbmZpZyBQUFRQXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzItXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTczOmNvbmZpZyBQUFBPTDJUUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgTDJUUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTc6NDUuMzcyMDU4NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIwMDQ2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgUFBQT0wyVFAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUbyBnZXQgYSBoYW5kbGUgb24gYFBQUE9MMlRQYCwgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgUFBQIGZyYW1ld29yay4gVGhpcyBpcyB3aGVyZSBJIHR5cGljYWxseSBmaW5kIHRoZSBjb3JlIHNldHRpbmdzIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlIGZlYXR1cmUgYW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBmbGFncyBmb3IgdGhpbmdzIGxpa2UgTDJUUCBzdXBwb3J0LCB0dW5uZWwgY29uZmlndXJhdGlvbnMsIGFuZCBwZXJoYXBzIG9wdGlvbnMgZm9yIENIQVAvUEFQIGF1dGhlbnRpY2F0aW9uLCBNVFUgc2V0dGluZ3MsIGFuZCByZWxhdGVkIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGJ1aWx0IGFuZCB3aGF0IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1hcCBvZiBob3cgYFBQUE9MMlRQYCBpbnRlZ3JhdGVzIGludG8gdGhlIHN5c3RlbSBhbmQgaG93IEkgY2FuIGJlc3QgY29uZmlndXJlIGl0IHRvIHN1aXQgYSBwYXJ0aWN1bGFyIHVzZSBjYXNlLiBUaGlzIGluaXRpYWwgaW52ZXN0aWdhdGlvbiB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24gaWYgbmVlZGVkLCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmIGlmIHNvbWV0aGluZyBpc24ndCBpbW1lZGlhdGVseSBjbGVhciBmcm9tIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzo0OC43OTIxMDY3MjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4Nzc5MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUFBPTDJUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xNjE9Y29uZmlnIFBQVFBcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzM6Y29uZmlnIFBQUE9MMlRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBMMlRQXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzo0OC45MDA4ODk4MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc3NzYyODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQUFAgT3ZlciBMMlRQIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgUFBQT0wyVFBgLiBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEknbSB0aGlua2luZywgd2hlcmUgZG9lcyB0aGlzIHRoaW5nIHNpdCBpbiB0aGUgb3ZlcmFsbCBuZXR3b3JraW5nIHN0YWNrPyBXaGF0IGZvdW5kYXRpb25hbCBlbGVtZW50cyBpcyBpdCBidWlsdCB1cG9uPyBJcyBpdCBhIHVzZXItc3BhY2UgZGFlbW9uLCBvciBkb2VzIGl0IGhhdmUga2VybmVsIGNvbXBvbmVudHM/IEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcm90b2NvbCByZWxhdGlvbnNoaXBzIHRvby4gRG9lcyBgUFBQb0wyVFBgIGl0c2VsZiBoYW5kbGUgdGhlIFBQUCBzZXNzaW9uIGVzdGFibGlzaG1lbnQsIG9yIGRvZXMgaXQgcmVseSBvbiBzb21ldGhpbmcgZWxzZSB0byBtYW5hZ2UgdGhlIHVuZGVybHlpbmcgUFBQIGNvbm5lY3Rpb25zPyBEb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgdmVyc2lvbnMgb2YgUFBQIG9yIEwyVFA/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24gcGFydGljdWxhciByb3V0aW5nIHByb3RvY29scyBvciBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9ucz8gQSBxdWljayBtZW50YWwgY2hlY2tsaXN0IHNob3VsZCBoZWxwIG1lIHZpc3VhbGl6ZSB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVuIEkgY2FuIGNvbnN1bHQgdGhlIHJlbGV2YW50IFJGQ3Mgb3Igc291cmNlIGNvZGUgaWYgbmVlZGVkLiBUaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGFsbCB0aGUgcGllY2VzIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjUyLjE3ODY1NTk2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NTg5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEwND1jb25maWcgUFBQT0FUTVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgQVRNXFxcIlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEwNjpcXHRkZXBlbmRzIG9uIEFUTVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xMjc9Y2hvaWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMjktXFx0ZGVmYXVsdCBQUFBPRV9IQVNIX0JJVFNfNFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEzMDpcXHRkZXBlbmRzIG9uIFBQUE9FXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTMxLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE2MT1jb25maWcgUFBUUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2Mi1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgSVB2NCAoUFBUUClcXFwiXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYzOlxcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTY0LVxcdHNlbGVjdCBQUFBPWFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTczPWNvbmZpZyBQUFBPTDJUUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgTDJUUFxcXCJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzU6XFx0ZGVwZW5kcyBvbiBMMlRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc2LVxcdHNlbGVjdCBQUFBPWFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzo1Mi4yNTM2MjEzNzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2OTA3Mzg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoaXMgZmllbGQ6XG5cbioqRGVwZW5kZW5jeSBDaGFpbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24gaW4gbXkgaGVhZC4gRXNzZW50aWFsbHksIEknbSBzZWVpbmcgdGhhdCBgUFBQT0wyVFBgIGlzIGJ1aWx0IHVwb24gdGhlIGZvdW5kYXRpb24gb2YgYEwyVFBgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgUFBQIG92ZXIgTDJUUCBpbXBsZW1lbnRhdGlvbiwgc28gdGhlIGxvd2VyLWxldmVsIEwyVFAgcHJvdG9jb2wgaXMgYSBjb3JlIHJlcXVpcmVtZW50LiBJIHdvdWxkbid0IGV4cGVjdCBpdCB0byB3b3JrIHdpdGhvdXQgaXQuIFRoZW4sIGxvb2tpbmcgYXQgYEwyVFBfREVCVUdGU2AsIGl0IGZvbGxvd3MgYSBzaW1pbGFyIHBhdHRlcm4sIGJ1dCB3aXRoIGEgY291cGxlIG9mIHR3aXN0cy4gSXQgYWxzbyByZXF1aXJlcyBgTDJUUGAgd2hpY2ggaXMgc2Vuc2libGUsIGFzIHRoZSBkZWJ1ZyBmaWxlc3lzdGVtIGhvb2tzIHdvdWxkIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgTDJUUCBmdW5jdGlvbmFsaXR5LiBBbmQgZmluYWxseSwgYW5kIGhlcmUncyB0aGUgb3RoZXIgcGFydCBvZiB0aGUgcHV6emxlLCBgREVCVUdfRlNgIGlzIGEgaGFyZCBkZXBlbmRlbmN5LiBTbywgaWYgSSB3YW50IHRob3NlIGRlYnVnZ2luZyB0b29scyBmb3IgTDJUUCwgSSdtIGdvaW5nIHRvIG5lZWQgdGhlIGRlYnVnIGZpbGVzeXN0ZW0gaXRzZWxmLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZyb20gYSBkZXBlbmRlbmN5IHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTc6NTUuNzIyNzE0NzExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ2MDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9LY29uZmlnPTY9bWVudWNvbmZpZyBMMlRQXFxubmV0L2wydHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKVxcXCJcXG5uZXQvbDJ0cC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L2wydHAvS2NvbmZpZy05LVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxubmV0L2wydHAvS2NvbmZpZz0zNj1jb25maWcgTDJUUF9ERUJVR0ZTXFxubmV0L2wydHAvS2NvbmZpZy0zNy1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxubmV0L2wydHAvS2NvbmZpZzozODpcXHRkZXBlbmRzIG9uIEwyVFAgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlNcXG5uZXQvbDJ0cC9LY29uZmlnLTM5LVxcdGhlbHBcXG4tLVxcbm5ldC9sMnRwL0tjb25maWc9NDk9Y29uZmlnIEwyVFBfVjNcXG5uZXQvbDJ0cC9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkwyVFB2MyBzdXBwb3J0XFxcIlxcbm5ldC9sMnRwL0tjb25maWc6NTE6XFx0ZGVwZW5kcyBvbiBMMlRQXFxubmV0L2wydHAvS2NvbmZpZy01Mi1cXHRoZWxwXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnPTcwPWNvbmZpZyBMMlRQX0lQXFxubmV0L2wydHAvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBJUCBlbmNhcHN1bGF0aW9uIGZvciBMMlRQdjNcXFwiXFxubmV0L2wydHAvS2NvbmZpZzo3MjpcXHRkZXBlbmRzIG9uIEwyVFBfVjNcXG5uZXQvbDJ0cC9LY29uZmlnLTczLVxcdGhlbHBcXG4tLVxcbm5ldC9sMnRwL0tjb25maWc9ODc9Y29uZmlnIEwyVFBfRVRIXFxubmV0L2wydHAvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBldGhlcm5ldCBwc2V1ZG93aXJlIHN1cHBvcnQgZm9yIEwyVFB2M1xcXCJcXG5uZXQvbDJ0cC9LY29uZmlnOjg5OlxcdGRlcGVuZHMgb24gTDJUUF9WM1xcbm5ldC9sMnRwL0tjb25maWctOTAtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzo1NS43OTMxODA5NDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMjk4NjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEwyVFAgRGVidWdmcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgTDJUUGAsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYERFQlVHX0ZTYCwgYFBQUE9MMlRQYCwgYW5kIHRoZSBkZWJ1ZyBpbnRlcmZhY2UuIFRoZSBwcmltYXJ5IGNoYW5nZXMgc2VlbSB0byBiZSB3aXRoaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb25zIGZvciB0aGUgc2VxX2ZpbGVzIHVzZWQgaW4gcHJvY2ZzL2RlYnVnZnMuIEkgc2VlIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGJlaW5nIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGNhbGxzIHRvIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZXkncmUgYWRkcmVzc2luZyBtZW1vcnkgbGVha3Mgb3IgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyDigJMgbGlrZWx5IGEgY29tbW9uIHByb2JsZW0gd2l0aCB0aGVzZSBraW5kcyBvZiBpbnRlcmZhY2VzLlxuXG5NeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBhbmQgYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAsIGFsdGhvdWdoIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSBnbGFuY2UgYXQgYHBwcG9sMnRwX3Byb2Nfb3BlbmAuIFdhaXQsIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCBhcmUgbmV3IGZ1bmN0aW9ucyDigJMgdGhhdCdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZXNlIGFyZSBjYWxsZWQuIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGlzIGNhbGxlZCB3aGVuIGFjY2Vzc2luZyBgL3Byb2MvbmV0L3BwcG9sMnRwYC4gYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBpcyB1c2VkIHdoZW4gY2xvc2luZyBkZWJ1Z2ZzIGZpbGVzIHVuZGVyIGAvc3lzL2tlcm5lbC9kZWJ1Zy9sMnRwLy4uLmAuXG5cbkFscmlnaHQsIEknbGwgbmVlZCB0byBkaWcgaW50byBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgIGluIGBuZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY2Agbm93IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyNCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODowMS4zMDYxNjk5MjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDYxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfZGZzX3NlcV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL2wydHBfZGVidWdmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sMnRwL2wydHBfZGVidWdmcy5jPTI2Nj1zdGF0aWMgaW50IGwydHBfZGZzX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtMzAxLVxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jOjMwMjpzdGF0aWMgaW50IGwydHBfZGZzX3NlcV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMwMy17XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYz0zMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbDJ0cF9kZnNfZm9wcyA9IHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMyNS1cXHQubGxzZWVrXFx0XFx0PSBzZXFfbHNlZWssXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6MzI2OlxcdC5yZWxlYXNlXFx0PSBsMnRwX2Rmc19zZXFfcmVsZWFzZSxcXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0zMjctfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MDEuMzk5NjM3OTY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTQ5OTMwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQUFAgb3ZlciBMMlRQIFBsdW1iaW5nKipcblxuQWxyaWdodCwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBMMlRQIGlzc3VlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBsb3ctaGFuZ2luZyBmcnVpdCBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byBgbmV0L2wydHAvbDJ0cF9wcHAuY2AsIGFuZCBzcGVjaWZpY2FsbHksIEkgd2FudCB0byBjaGVjayBvdXQgaG93IHRoZSBQUFAgc2Vzc2lvbiBpcyBpbml0aWF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgTDJUUC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBwcHBvbDJ0cF9wcm9jX29wZW5gLCBhcyB0aGUgUFBQIHNlc3Npb24gb3BlbmluZyBpcyB3aGVyZSBldmVyeXRoaW5nIGJlZ2lucy4gVGhhdCdzIHRoZSBnYXRld2F5LiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gc2V0dXAgbG9naWMgdGhlcmUsIGFuZCBob3BlZnVsbHkgdGhlIGNsdWVzIEkgbmVlZCB0byB1bnJhdmVsIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzQxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MDQuNjk0NjMyNjg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY3NDkyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwb2wydHBfcHJvY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL2wydHBfcHBwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvbDJ0cF9wcHAuYz0xNTk0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2wydHBfc2VxX29wcyA9IHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTYwMC1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjE2MDE6c3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjAyLXtcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9MTY0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBwcG9sMnRwX3Byb2Nfb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTY0MjpcXHQucHJvY19vcGVuXFx0PSBwcHBvbDJ0cF9wcm9jX29wZW4sXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjQzLVxcdC5wcm9jX3JlYWRcXHQ9IHNlcV9yZWFkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODowNC44MDEzODc0OTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2MzM0MDU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlc2UgY2hhbmdlcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duLlxuXG4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gZml4aW5nIHJlc291cmNlIGxlYWtzLiBGdW5jdGlvbmFsbHkgc291bmQsIHdoaWNoIGlzIGdyZWF0LiBUaGUga2V5IGlzIHRoYXQgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoZW0gdmlhIGAvcHJvYy9uZXQvcHBwb2wydHBgIGFuZCBgL3N5cy9rZXJuZWwvZGVidWcvbDJ0cC90dW5uZWxzYC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHVwIHRoYXQgc2NyZWFtcyBcImZ1enogbWUhXCIgSXQncyBkaXJlY3QgdXNlciBpbnRlcmFjdGlvbiwgcHJvdmlkaW5nIGEgcGVyZmVjdCBlbnRyeSBwb2ludCBmb3IgZXhwbG9yaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFdlJ3ZlIGdvdCBjbGVhciBhdHRhY2sgc3VyZmFjZS5cblxuVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZTogYEwyVFBgLCBgTDJUUF9ERUJVR0ZTYCwgYFBQUE9MMlRQYCwgYERFQlVHX0ZTYCwgYW5kIGBQUk9DX0ZTYC4gV2UgbmVlZCB0byBlbnN1cmUgYWxsIG9mIHRoZXNlIGFyZSBlbmFibGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LiBUaGF0J3Mgb3VyIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYmFzZWxpbmUuXG5cbkkndmUgaWRlbnRpZmllZCB0aGVzZSBzeW1ib2xzIGFzIHByaW1hcnkgZm9jdXMgYXJlYXMgZm9yIHRoZSBmdXp6aW5nIGNhbXBhaWduOiBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgLCBgcHBwb2wydHBfcHJvY19vcGVuYCwgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGVzZSBsb29rIGxpa2UgY29yZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGVzZSBmZWF0dXJlcywgbGlrZWx5IGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLCB3aGljaCBpcyBhbHdheXMgYW4gYXR0cmFjdGl2ZSB0YXJnZXQuXG5cbldhaXQgYSBzZWNvbmTigKYgYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAgaXMgKmFsc28qIGEgbmV3IGZ1bmN0aW9uPyBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgaGFkbid0IG5vdGljZWQgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueXRoaW5nIGFib3V0IGl0cyBmdW5jdGlvbmFsaXR5LiBJdCBtaWdodCBiZSBldmVuIG1vcmUgc2lnbmlmaWNhbnQgdGhhbiBpbml0aWFsbHkgdGhvdWdodC4gSXQgbWlnaHQgaGFuZGxlIGNsZWFudXAgb3IgZmluYWxpemF0aW9uIHJvdXRpbmVzLCB3aGljaCBtYWtlcyBpdCBhbiBldmVuIGJldHRlciB0YXJnZXQgdG8gZm9jdXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MDkuNzY0NzMxODY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTg3OTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBvbDJ0cF9wcm9jX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvbDJ0cF9wcHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX3BwcC5jPTE2MDE9c3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjItXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNjIzOnN0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTYyNC17XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE2NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwcHBvbDJ0cF9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTY0NC1cXHQucHJvY19sc2Vla1xcdD0gc2VxX2xzZWVrLFxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTY0NTpcXHQucHJvY19yZWxlYXNlXFx0PSBwcHBvbDJ0cF9wcm9jX3JlbGVhc2UsXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjQ2LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjA5Ljg1NDYxODM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzMxMjQ2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAgaXMgYSBmcmVzaCBhZGRpdGlvbiDigJMgdGhhdCdzIHNvbWV0aGluZyB0byBub3RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcy4gTGV0J3MgdHJhY2UgdGhlIGRlcGVuZGVuY2llczogYEwyVFBgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBJIGFzc3VtZSBpcyBzdGFuZGFyZC4gYFBQUE9MMlRQYCBpdHNlbGYgcmVsaWVzIG9uIGBMMlRQYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBMMlRQX0RFQlVHRlNgIGhhcyBhIGRlcGVuZGVuY3kgb24gYm90aCBgTDJUUGAgYW5kIGBERUJVR19GU2AuIEFuZCBJJ2xsIGFzc3VtZSBgUFJPQ19GU2AgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgYXMgaXQgaXMgdXNlZCBhIGxvdC5cblxuVGhlcmVmb3JlLCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOiBgTDJUUGAsIGBMMlRQX0RFQlVHRlNgLCBgUFBQT0wyVFBgLCBgREVCVUdfRlNgLCBhbmQgYFBST0NfRlNgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgdmVyaWZ5IGlmIGBQUFBPTDJUUGAgaGFzIGFuIHVuZGVybHlpbmcgZGVwZW5kZW5jeSBvbiBgUFBQYC4gSXQgd291bGQgYmUgcmVtaXNzIG9mIG1lIHRvIG5vdCBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjE0LjE4Nzc0NTg2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzEwODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OmNvbmZpZyBQUFBcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MzU9aWYgUFBQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzYtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6Mzc6Y29uZmlnIFBQUF9CU0RDT01QXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01NC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo1NTpjb25maWcgUFBQX0RFRkxBVEVcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01Ni1cXHR0cmlzdGF0ZSBcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy02OC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OTpjb25maWcgUFBQX0ZJTFRFUlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIlBQUCBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04MC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo4MTpjb25maWcgUFBQX01QUEVcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04Mi1cXHR0cmlzdGF0ZSBcXFwiUFBQIE1QUEUgY29tcHJlc3Npb24gKGVuY3J5cHRpb24pXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctOTEtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6OTI6Y29uZmlnIFBQUF9NVUxUSUxJTktcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy05My1cXHRib29sIFxcXCJQUFAgbXVsdGlsaW5rIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTA0OmNvbmZpZyBQUFBPQVRNXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBBVE1cXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTItXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTEzOmNvbmZpZyBQUFBPWFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNC1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTY6Y29uZmlnIFBQUE9FXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTE3LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBFdGhlcm5ldFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEyNz1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEzOC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMzk6Y29uZmlnIFBQUE9FX0hBU0hfQklUU18xXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQwLVxcdGJvb2wgXFxcIjEgYml0ICgyIGJ1Y2tldHMpXFxcIlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0MS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNDI6Y29uZmlnIFBQUE9FX0hBU0hfQklUU18yXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQzLVxcdGJvb2wgXFxcIjIgYml0cyAoNCBidWNrZXRzKVxcXCJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDQtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQ1OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfNFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0Ni1cXHRib29sIFxcXCI0IGJpdHMgKDE2IGJ1Y2tldHMpXFxcIlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0Ny1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNDg6Y29uZmlnIFBQUE9FX0hBU0hfQklUU184XFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIjggYml0cyAoMjU2IGJ1Y2tldHMpXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTUxPWVuZGNob2ljZVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNTM6Y29uZmlnIFBQUE9FX0hBU0hfQklUU1xcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1NC1cXHRpbnRcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE2MT1jb25maWcgUFBUUFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTcyLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3Mzpjb25maWcgUFBQT0wyVFBcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzQtXFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEwyVFBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xODE9aWYgVFRZXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTgyLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE4Mzpjb25maWcgUFBQX0FTWU5DXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTg0LVxcdHRyaXN0YXRlIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk1LVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE5Njpjb25maWcgUFBQX1NZTkNfVFRZXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjE0LjI5NDQ2MDcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjQwOTUxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIENvbmRpdGlvbmFsIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBiaXQgb2YgY29kZSBhbmQgdHJ5aW5nIHRvIHBhcnNlIHRoZSBsb2dpYy4gSXQgc2VlbXMgbGlrZSBgUFBQT0wyVFBgIGlzIHBvdGVudGlhbGx5IG5lc3RlZCB3aXRoaW4gYW4gYGlmYCBzdGF0ZW1lbnQgdGhhdCBpbnZvbHZlcyBgUFBQYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhpcyByZWxhdGlvbnNoaXAg4oCTIGRvZXMgYFBQUE9MMlRQYCBhY3R1YWxseSByZXNpZGUgaW5zaWRlIHRoZSBjb25kaXRpb25hbCBibG9jayB0aGF0J3MgdHJpZ2dlcmVkIGJ5IGBQUFBgPyBJdCdzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gb2YgY29udHJvbCBmbG93LCBhbmQgdW5kZXJzdGFuZGluZyB0aGlzIGlzIGVzc2VudGlhbCBmb3IgYW55IGRlZXBlciBhbmFseXNpcyBvZiB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoaXMgY29kZSBzZWdtZW50LiBMZXQncyBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjE3LjM1ODU2MDIzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyNzQ5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWYgUFBQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTY9Y29uZmlnIFBQUFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzQtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MzU6aWYgUFBQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzYtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xNTM9Y29uZmlnIFBQUE9FX0hBU0hfQklUU1xcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1NC1cXHRpbnRcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNTU6XFx0ZGVmYXVsdCAxIGlmIFBQUE9FX0hBU0hfQklUU18xXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTU2OlxcdGRlZmF1bHQgMiBpZiBQUFBPRV9IQVNIX0JJVFNfMlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE1NzpcXHRkZWZhdWx0IDQgaWYgUFBQT0VfSEFTSF9CSVRTXzRcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNTg6XFx0ZGVmYXVsdCA4IGlmIFBQUE9FX0hBU0hfQklUU184XFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTU5LVxcdGRlZmF1bHQgNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODoxNy40MTI4NDAwNzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3NzY4MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkZpbmRpbmcgdGhlIE1hdGNoaW5nIGBlbmRpZmAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJIHNlZSBhIGNvbmRpdGlvbmFsIGJsb2NrLCBzcGVjaWZpY2FsbHkgYW4gYGlmIFBQUGAgc3RhdGVtZW50IG9uIGxpbmUgMzUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoZXJlJ3MgdGhlIGNsb3NpbmcgYGVuZGlmYD9cIiBJdCdzIGFsbW9zdCBhdXRvbWF0aWMsIHRoZSBwYXR0ZXJuIHJlY29nbml0aW9uIGtpY2tpbmcgaW4uIEdvdHRhIGZpbmQgdGhhdCBlbmRwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgd2hhdCdzIGdvaW5nIHRvIGhhcHBlbiB3aXRoaW4gdGhhdCBjb25kaXRpb25hbCBsb2dpYy4gSSBuZWVkIHRoYXQgbWF0Y2hpbmcgYGVuZGlmYCB0byBmdWxseSBncmFzcCB3aGF0IHRoaXMgYmxvY2sgb2YgY29kZSBpcyBkb2luZyBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIG92ZXJhbGwgZmxvdy4gSXQncyBub3QgZW5vdWdoIHRvIHNlZSB0aGUgc3RhcnQ7IEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjIwLjc5MDUyNTgxOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUyMzY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5kaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTk2PWNvbmZpZyBQUFBfU1lOQ19UVFlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTIwNC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoyMDU6ZW5kaWYgIyBUVFlcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0yMDYtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MjA3OmVuZGlmICMgUFBQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjIwLjg4NTc2NzgwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk3NjcwMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBub3Rlcy4gTGV0IG1lIHNlZS4uLlxuXG4qKkNoZWNraW5nIHRoZSBMMlRQIFBQUCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSB3ZSAqZGVmaW5pdGVseSogbmVlZCBgUFBQYCBlbmFibGVkLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3ZSdyZSBkZWFsaW5nIHdpdGggYEwyVFBgLCBgTDJUUF9ERUJVR0ZTYCwgYFBQUGAsIGBQUFBPTDJUUGAsIGBERUJVR19GU2AsIGFuZCBgUFJPQ19GU2AuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBMMlRQIHNldHVwLCBidXQgaXTigJlzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBXZSBzZWVtIHRvIGJlIGRlYWxpbmcgd2l0aCB0aGUgZGVidWcgZmlsZSBzeXN0ZW0gaW4gcGFydGljdWxhci5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgLCBgcHBwb2wydHBfcHJvY19vcGVuYCwgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGVzZSBzdWdnZXN0IHdl4oCZcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGVidWcgZmlsZXN5c3RlbSAobGlrZWx5IGZvciBtb25pdG9yaW5nIGFuZCBjb250cm9sKSBhbmQgdGhlIHByb2Nlc3Mtb3JpZW50ZWQgYXNwZWN0cyBvZiBQUFBvTDJUUC4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSByZWZlcmVuY2UgY291bnRzIGFyZSBoYW5kbGVkIGluIG9yZGVyIHRvIGF2b2lkIGxlYWtzIG9yIHByZW1hdHVyZSBjbGVhbnVwLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCB0aGF0IHRoZXkgYXJlIGltcGxlbWVudGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MjUuOTgzNDQxMzMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA2MzY1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibDJ0cF9zZXNzaW9uX3B1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbDJ0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvbDJ0cF9jb3JlLmM9MjA1PUVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdHVubmVsX3B1dCk7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMjA2LVxcbm5ldC9sMnRwL2wydHBfY29yZS5jOjIwNzp2b2lkIGwydHBfc2Vzc2lvbl9wdXQoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbilcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0yMDgte1xcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMjExLX1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoyMTI6RVhQT1JUX1NZTUJPTF9HUEwobDJ0cF9zZXNzaW9uX3B1dCk7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMjEzLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM9NTE1PXN0YXRpYyB2b2lkIGwydHBfc2Vzc2lvbl9jb2xsaXNpb25fZGVsKHN0cnVjdCBsMnRwX25ldCAqcG4sXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy01NDgtXFx0XFx0XFx0a2ZyZWUoY2xpc3QpO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jOjU0OTpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jLTU1MC1cXHR9XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMDE2PWludCBsMnRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwODAtXFx0XFx0aWYgKHNlc3Npb24pXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTA4MTpcXHRcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwODItXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMDkwLVxcdGlmICh2ZXJzaW9uICE9IHR1bm5lbC1cXHUwMDNldmVyc2lvbikge1xcbm5ldC9sMnRwL2wydHBfY29yZS5jOjEwOTE6XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMDkyLVxcdFxcdGdvdG8gaW52YWxpZDtcXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwOTYtXFx0ICAgIGwydHBfdjNfZW5zdXJlX29wdF9pbl9saW5lYXIoc2Vzc2lvbiwgc2tiLCBcXHUwMDI2cHRyLCBcXHUwMDI2b3B0cikpIHtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMDk3OlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTA5OC1cXHRcXHRnb3RvIGludmFsaWQ7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMTAxLVxcdGwydHBfcmVjdl9jb21tb24oc2Vzc2lvbiwgc2tiLCBwdHIsIG9wdHIsIGhkcmZsYWdzLCBsZW5ndGgpO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jOjExMDI6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMTAzLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM9MTc0NT1zdGF0aWMgdm9pZCBsMnRwX3Nlc3Npb25fZGVsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTc1NS1cXHQvKiBkcm9wIGluaXRpYWwgcmVmICovXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTc1NjpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jLTE3NTctXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTc1OC1cXHQvKiBkcm9wIHdvcmtxdWV1ZSByZWYgKi9cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxNzU5OlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTc2MC19XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yMTI9dm9pZCBsMnRwX3R1bm5lbF9wdXQoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpO1xcbm5ldC9sMnRwL2wydHBfY29yZS5oOjIxMzp2b2lkIGwydHBfc2Vzc2lvbl9wdXQoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjE0LVxcbi0tXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM9NTM9c3RhdGljIHZvaWQgbDJ0cF9kZnNfbmV4dF9zZXNzaW9uKHN0cnVjdCBsMnRwX2Rmc19zZXFfZGF0YSAqcGQpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy01Ni1cXHRpZiAocGQtXFx1MDAzZXNlc3Npb24pXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6NTc6XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cXHUwMDNlc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtNTgtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYz0xMDM9c3RhdGljIHZvaWQgbDJ0cF9kZnNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KVxcbi0tXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtMTEzLVxcdGlmIChwZC1cXHUwMDNlc2Vzc2lvbikge1xcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jOjExNDpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHBkLVxcdTAwM2VzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0xMTUtXFx0XFx0cGQtXFx1MDAzZXNlc3Npb24gPSBOVUxMO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM9MzAyPXN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0zMDktXFx0aWYgKHBkLVxcdTAwM2VzZXNzaW9uKVxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jOjMxMDpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHBkLVxcdTAwM2VzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0zMTEtXFx0aWYgKHBkLVxcdTAwM2V0dW5uZWwpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jPTIyNj1zdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYy0yOTItXFx0XFx0bDJ0cF9zZXNzaW9uX2RlbGV0ZShzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjI5MzpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjk0LVxcdFxcdGZyZWVfbmV0ZGV2KGRldik7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTMwMy1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjMwNDpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzA1LVxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYy0zMTAtZXJyX3Nlc3NfZGV2Olxcbm5ldC9sMnRwL2wydHBfZXRoLmM6MzExOlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9ldGguYy0zMTItXFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTMxMy1lcnJfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjMxNDpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzE1LWVycjpcXG4tLVxcbm5ldC9sMnRwL2wydHBfaXAuYz0xMjU9c3RhdGljIGludCBsMnRwX2lwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sMnRwL2wydHBfaXAuYy0xNjktXFx0bDJ0cF9yZWN2X2NvbW1vbihzZXNzaW9uLCBza2IsIHB0ciwgb3B0ciwgMCwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC9sMnRwL2wydHBfaXAuYzoxNzA6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2lwLmMtMTcxLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9pcC5jLTIwMi1kaXNjYXJkX3Nlc3M6XFxubmV0L2wydHAvbDJ0cF9pcC5jOjIwMzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfaXAuYy0yMDQtXFx0Z290byBkaXNjYXJkO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9pcDYuYz0xMzU9c3RhdGljIGludCBsMnRwX2lwNl9yZWN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2lwNi5jLTE3OS1cXHRsMnRwX3JlY3ZfY29tbW9uKHNlc3Npb24sIHNrYiwgcHRyLCBvcHRyLCAwLCBza2ItXFx1MDAzZWxlbik7XFxubmV0L2wydHAvbDJ0cF9pcDYuYzoxODA6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2lwNi5jLTE4MS1cXG4tLVxcbm5ldC9sMnRwL2wydHBfaXA2LmMtMjEyLWRpc2NhcmRfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX2lwNi5jOjIxMzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfaXA2LmMtMjE0LVxcdGdvdG8gZGlzY2FyZDtcXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTUyOD1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy02NDktXFx0XFx0XFx0XFx0XFx0XFx0ICBMMlRQX0NNRF9TRVNTSU9OX0NSRUFURSk7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6NjUwOlxcdFxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNjUxLVxcdFxcdH1cXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTY2MD1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fZGVsZXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy02NzktXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6NjgwOlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNjgxLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM9Njg2PXN0YXRpYyBpbnQgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9tb2RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTcxNS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo3MTY6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy03MTctXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz04MDI9c3RhdGljIGludCBsMnRwX25sX2NtZF9zZXNzaW9uX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODI2LVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjgyNzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTgyOC1cXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTgzMy1lcnJfcmVmOlxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjgzNDpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTgzNS1lcnI6XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz04Mzk9c3RhdGljIGludCBsMnRwX25sX2NtZF9zZXNzaW9uX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODY3LVxcdFxcdFxcdFxcdFxcdCBzZXNzaW9uLCBMMlRQX0NNRF9TRVNTSU9OX0dFVCkgXFx1MDAzYyAwKSB7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6ODY4OlxcdFxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODY5LVxcdFxcdFxcdGwydHBfdHVubmVsX3B1dCh0dW5uZWwpO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODcxLVxcdFxcdH1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo4NzI6XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy04NzMtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTI1MD1zdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzA1LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MzA2OlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0zMDctXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTMxMC1lcnJvcl9wdXRfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjMxMTpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzEyLWVycm9yOlxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0zMzA9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzY0LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MzY1OlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0zNjYtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTM2OS1hYm9ydF9wdXRfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjM3MDpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzcxLWFib3J0Olxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0zOTA9c3RhdGljIHZvaWQgcHBwb2wydHBfc2Vzc2lvbl9jbG9zZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy00MDUtXFx0XFx0LyogZHJvcCByZWYgdGFrZW4gd2hlbiB3ZSByZWZlcmVuY2VkIHNvY2tldCB2aWEgc2tfdXNlcl9kYXRhICovXFxubmV0L2wydHAvbDJ0cF9wcHAuYzo0MDY6XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTQwNy1cXHR9XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTQxMj1zdGF0aWMgaW50IHBwcG9sMnRwX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtNDM2LVxcdFxcdC8qIGRyb3AgcmVmIHRha2VuIGJ5IHBwcG9sMnRwX3NvY2tfdG9fc2Vzc2lvbiAqL1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6NDM3OlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy00MzgtXFx0fVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz02ODg9c3RhdGljIGludCBwcHBvbDJ0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1c2VydmFkZHIsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTc3My1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBzLVxcdTAwM2Vza19sb2NrKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjc3NDpcXHRcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtNzc1LVxcdFxcdFxcdGdvdG8gZW5kO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy04MzEtXFx0aWYgKGRyb3BfcmVmY250KVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6ODMyOlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy04MzMtXFx0bDJ0cF90dW5uZWxfcHV0KHR1bm5lbCk7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTg0Mj1zdGF0aWMgaW50IHBwcG9sMnRwX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTg3Mi1lcnJfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjg3MzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtODc0LWVycjpcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9ODgyPXN0YXRpYyBpbnQgcHBwb2wydHBfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy05ODMtXFxubmV0L2wydHAvbDJ0cF9wcHAuYzo5ODQ6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTk4NS1lbmQ6XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTEwMTU9c3RhdGljIGludCBwcHBvbDJ0cF90dW5uZWxfY29weV9zdGF0cyhzdHJ1Y3QgcHBwb2wydHBfaW9jX3N0YXRzICpzdGF0cyxcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTAzMy1cXHRpZiAoc2Vzc2lvbi1cXHUwMDNlcHd0eXBlICE9IEwyVFBfUFdUWVBFX1BQUCkge1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTAzNDpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTAzNS1cXHRcXHRyZXR1cm4gLUVCQURSO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMDM4LVxcdHBwcG9sMnRwX2NvcHlfc3RhdHMoc3RhdHMsIFxcdTAwMjZzZXNzaW9uLVxcdTAwM2VzdGF0cyk7XFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMDM5OlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMDQwLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMDQ0PXN0YXRpYyBpbnQgcHBwb2wydHBfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTA2NS1cXHRcXHRpZiAoc2Vzc2lvbi1cXHUwMDNlbWFnaWMgIT0gTDJUUF9TRVNTSU9OX01BR0lDKSB7XFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMDY2OlxcdFxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMDY3LVxcdFxcdFxcdHJldHVybiAtRUJBREY7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTExMzktXFx0aWYgKHNlc3Npb24pXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMTQwOlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMTQxLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjMyPXN0YXRpYyBpbnQgcHBwb2wydHBfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMjY4LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI2OTpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI3MC1lbmQ6XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTEzMzg9c3RhdGljIGludCBwcHBvbDJ0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEzODItZW5kX3B1dF9zZXNzOlxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTM4MzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTM4NC1lbmQ6XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE0MjI9c3RhdGljIHZvaWQgcHBwb2wydHBfbmV4dF9zZXNzaW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZClcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQyNS1cXHRpZiAocGQtXFx1MDAzZXNlc3Npb24pXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNDI2OlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQocGQtXFx1MDAzZXNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQyNy1cXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9MTQ3NT1zdGF0aWMgdm9pZCBwcHBvbDJ0cF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE0ODUtXFx0aWYgKHBkLVxcdTAwM2VzZXNzaW9uKSB7XFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNDg2OlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQocGQtXFx1MDAzZXNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQ4Ny1cXHRcXHRwZC1cXHUwMDNlc2Vzc2lvbiA9IE5VTEw7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE2MjM9c3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjgtXFx0aWYgKHBkLVxcdTAwM2VzZXNzaW9uKVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTYyOTpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHBkLVxcdTAwM2VzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MzAtXFx0aWYgKHBkLVxcdTAwM2V0dW5uZWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjI2LjA5NDA4Mjk2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDg1NzYxNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMMlRQIE1vZHVsZSBTeW1ib2xzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgTDJUUCBtb2R1bGUgc3ltYm9scy4gSSBzZWUgYGwydHBfc2Vzc2lvbl9wdXRgIGFuZCBgbDJ0cF90dW5uZWxfcHV0YCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGlzIHN0YW5kYXJkLiBUaGVuIEknbSBub3RpY2luZyB0aGF0IGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCBhcmUgKnN0YXRpYyogZnVuY3Rpb25zLCB0dWNrZWQgYXdheSBpbiBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFNpbWlsYXJseSwgYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBpcyBzdGF0aWMgdG9vLCB0aGlzIG9uZSByZXNpZGluZyBpbiBgbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSG1tLCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGJpdCB0cmlja2llci5cIiBUaGV5ICptaWdodCogYmUgaW5saW5lZCBhbmQgdGhlbiwgZm9yZ2V0IGFib3V0IGRpcmVjdCBmdXp6aW5nIGJ5IG5hbWUuIEhvd2V2ZXIsIHNpbmNlIHRoZXkncmUgYmVpbmcgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYGZpbGVfb3BlcmF0aW9uc2AgYW5kIGBwcm9jX29wc2Agc3RydWN0dXJlcywgSSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5ICphcmVuJ3QqIGlubGluZWQuIFRoZXknbGwgaGF2ZSBkaXNjcmV0ZSBzeW1ib2wgYWRkcmVzc2VzLiBUaGF0IG1lYW5zIHRoZXkgYXJlIHBlcmZlY3RseSB2YWxpZCB0YXJnZXRzLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGxlYWRzLiBZZXAsIGl0IGxvb2tzIGxpa2UgYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuV2FpdCBhIHNlY29uZC4uLiAqYm90aCogYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGFyZSAqbmV3KiBmdW5jdGlvbnMuIEFuZCB0aGUgYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBmdW5jdGlvbiBpcyBhICptb2RpZmllZCogZXhpc3RpbmcgZnVuY3Rpb24uIEFscmlnaHQsIEkndmUgZ290IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQgSSdtIGRlYWxpbmcgd2l0aC4gTGV0J3MgbWFrZSBhIG5vdGUgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NDYsIk91dHB1dFRva2VucyI6MTkzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjMzLjE3OTg0Nzk2NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzMxMzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTDJUUFwiLFxuICAgIFwiTDJUUF9ERUJVR0ZTXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJERUJVR19GU1wiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImwydHBfZGZzX3NlcV9yZWxlYXNlXCIsXG4gICAgXCJwcHBvbDJ0cF9wcm9jX29wZW5cIixcbiAgICBcInBwcG9sMnRwX3Byb2NfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSByZWxlYXNlIGZ1bmN0aW9ucyBvZiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBzZXFfZmlsZXMgYnkgYWRkaW5nIG1pc3NpbmcgbDJ0cF9zZXNzaW9uX3B1dCBhbmQgbDJ0cF90dW5uZWxfcHV0IGNhbGxzLiBJdCBhbHNvIGludHJvZHVjZXMgbmV3IHByb2NmcyBvcGVuIGFuZCByZWxlYXNlIGZ1bmN0aW9ucyBmb3IgcHBwb2wydHAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSByZXNwZWN0aXZlIGRlYnVnZnMgYW5kIHByb2NmcyBmaWxlcywgYW5kIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfREVCVUdGU1wiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsMnRwX2Rmc19zZXFfcmVsZWFzZVwiLFxuICAgIFwicHBwb2wydHBfcHJvY19vcGVuXCIsXG4gICAgXCJwcHBvbDJ0cF9wcm9jX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgb2YgTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgc2VxX2ZpbGVzIGJ5IGFkZGluZyBtaXNzaW5nIGwydHBfc2Vzc2lvbl9wdXQgYW5kIGwydHBfdHVubmVsX3B1dCBjYWxscy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG5ldyBwcm9jZnMgb3BlbiBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgZm9yIHBwcG9sMnRwLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgY2xvc2luZyB0aGUgcmVzcGVjdGl2ZSBkZWJ1Z2ZzIGFuZCBwcm9jZnMgZmlsZXMsIGFuZCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVzb3VyY2UgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MzMuMjk3MTY4MzY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxMDk2OTI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjMzLjI5NzYxODg3NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTgxMDUxNTQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVmZXJlbmNlIGNvdW50IGxlYWtzIGluIEwyVFAgZGVidWdmcyBhbmQgcHJvY2ZzIGJ5IGFkZGluZyBtaXNzaW5nIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAgY2FsbHMgaW4gdGhlIHJlbGVhc2UgaGFuZGxlcnMuIEl0IGFsc28gcmVwbGFjZXMgYHByb2NfY3JlYXRlX25ldGAgd2l0aCBgcHJvY19jcmVhdGVfZGF0YWAgYW5kIGN1c3RvbSBgcHJvY19vcHNgIHRvIGVuc3VyZSB0aGUgcmVsZWFzZSBoYW5kbGVyIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeS9yZWZjb3VudCBsZWFrcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgS01FTUxFQUssIGFuZCByZWZjb3VudCBjaGVja2luZy4gVGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKHZpYSBgX19zZXFfb3Blbl9wcml2YXRlYCksIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliZjNiOWNlMmRiMWY5ZjAwZGQ2ZDAxYjBkYjE4NDUwNjBiYWU3OGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNjoxNzozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jIGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNcbmluZGV4IGIyNjk4NmZkYTlkNmMuLmMxMmQ1ZTFlZTU1MGMgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNcbkBAIC0zMDYsNiArMzA2LDEwIEBAIHN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRzZXEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHBkID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXHRpZiAocGQtXHUwMDNlc2Vzc2lvbilcbitcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbitcdGlmIChwZC1cdTAwM2V0dW5uZWwpXG4rXHRcdGwydHBfdHVubmVsX3B1dChwZC1cdTAwM2V0dW5uZWwpO1xuIFx0aWYgKHBkLVx1MDAzZW5ldClcbiBcdFx0cHV0X25ldF90cmFjayhwZC1cdTAwM2VuZXQsIFx1MDAyNnBkLVx1MDAzZW5zX3RyYWNrZXIpO1xuIFx0a2ZyZWUocGQpO1xuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5pbmRleCBmODg4MTY5OWUxY2FkLi4xYmNmNDQ3ZjJmOGIwIDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9wcHAuY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuQEAgLTE1OTcsNiArMTU5Nyw1MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9sMnRwX3NlcV9vcHMgPSB7XG4gXHQuc3RvcFx0XHQ9IHBwcG9sMnRwX3NlcV9zdG9wLFxuIFx0LnNob3dcdFx0PSBwcHBvbDJ0cF9zZXFfc2hvdyxcbiB9O1xuK1xuK3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBuZXQgKm5ldCA9IHBkZV9kYXRhKGlub2RlKTtcbitcdHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSAqcGQ7XG4rXG4rXHRuZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4rXHRpZiAoIW5ldClcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdHBkID0gX19zZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnBwcG9sMnRwX3NlcV9vcHMsIHNpemVvZigqcGQpKTtcbitcdGlmICghcGQpIHtcbitcdFx0cHV0X25ldChuZXQpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbisjaWZkZWYgQ09ORklHX05FVF9OU1xuK1x0cGQtXHUwMDNlcC5uZXQgPSBuZXQ7XG4rXHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgXHUwMDI2cGQtXHUwMDNlcC5uc190cmFja2VyLCBHRlBfS0VSTkVMKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZCA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuK1xuK1x0aWYgKHBkLVx1MDAzZXNlc3Npb24pXG4rXHRcdGwydHBfc2Vzc2lvbl9wdXQocGQtXHUwMDNlc2Vzc2lvbik7XG4rXHRpZiAocGQtXHUwMDNldHVubmVsKVxuK1x0XHRsMnRwX3R1bm5lbF9wdXQocGQtXHUwMDNldHVubmVsKTtcbitcbisjaWZkZWYgQ09ORklHX05FVF9OU1xuK1x0cHV0X25ldF90cmFjayhwZC1cdTAwM2VwLm5ldCwgXHUwMDI2cGQtXHUwMDNlcC5uc190cmFja2VyKTtcbisjZWxzZVxuK1x0cHV0X25ldChcdTAwMjZpbml0X25ldCk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcHBwb2wydHBfcHJvY19vcHMgPSB7XG4rXHQucHJvY19vcGVuXHQ9IHBwcG9sMnRwX3Byb2Nfb3BlbixcbitcdC5wcm9jX3JlYWRcdD0gc2VxX3JlYWQsXG4rXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG4rXHQucHJvY19yZWxlYXNlXHQ9IHBwcG9sMnRwX3Byb2NfcmVsZWFzZSxcbit9O1xuICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqL1xuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQEAgLTE2MDgsOCArMTY1NSw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcHBvbDJ0cF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0cGRlID0gcHJvY19jcmVhdGVfbmV0KFwicHBwb2wydHBcIiwgMDQ0NCwgbmV0LVx1MDAzZXByb2NfbmV0LFxuLVx0XHRcdCAgICAgIFx1MDAyNnBwcG9sMnRwX3NlcV9vcHMsIHNpemVvZihzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEpKTtcbitcdHBkZSA9IHByb2NfY3JlYXRlX2RhdGEoXCJwcHBvbDJ0cFwiLCAwNDQ0LCBuZXQtXHUwMDNlcHJvY19uZXQsXG4rXHRcdFx0ICAgICAgIFx1MDAyNnBwcG9sMnRwX3Byb2Nfb3BzLCBuZXQpO1xuIFx0aWYgKCFwZGUpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODozMy4yOTc2MTk5NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MTA0OTU4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTDJUUCBSZWZlcmVuY2UgTGVhayBGaXg6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgTDJUUCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY2AgYW5kIGBuZXQvbDJ0cC9sMnRwX3BwcC5jYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhZGRyZXNzaW5nIGEgY2xhc3NpYyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUsIHdoaWNoIEkgbGlrZSB0byBzZWUgYWRkcmVzc2VkLlxuXG5JbiBgbDJ0cF9kZWJ1Z2ZzLmNgLCB0aGUgcGF0Y2ggYWRkcyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIHdpdGhpbiB0aGUgYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbC4gRXNzZW50aWFsbHksIHdoZW4gdGhlIGRlYnVnZnMgZmlsZSBpcyBjbG9zZWQsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgcmVmZXJlbmNlcyBoZWxkIG9uIHRoZSBzZXNzaW9uIGFuZCB0dW5uZWwuIE90aGVyd2lzZSwgd2UncmUgc3RhcmluZyBkb3duIHRoZSBiYXJyZWwgb2YgZWl0aGVyIGEgbWVtb3J5IGxlYWsgb3IgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgYSBiaWcgbm8tbm8sIGFzIHdlIGJvdGgga25vdy4gVGhlIG9sZCBjb2RlIHdhcyBqdXN0ICptaXNzaW5nKiB0aGVzZSBgcHV0YCBjYWxscy5cblxuVGhlIGNoYW5nZXMgaW4gYGwydHBfcHBwLmNgIG1pcnJvciB0aGlzLiBUaGV5J3ZlIHVwZGF0ZWQgdGhlIHByb2MgZmlsZSBoYW5kbGluZy4gTm93LCBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgdGhlIHN0YW5kYXJkIGBwcm9jX2NyZWF0ZV9uZXRgIGFuZCBgc2VxX29wZW5gLCB0aGlzIHBhdGNoIGJyaW5ncyBpbiBgcHJvY19jcmVhdGVfZGF0YWAgYW5kIGN1c3RvbSBgcHJvY19vcHNgLCBzcGVjaWZpY2FsbHkgYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwcm9jIGZpbGUgaXMgY2xvc2VkLCB0aGUgc2Vzc2lvbiBhbmQgdHVubmVsIHJlZmVyZW5jZXMgYXJlIHByb3Blcmx5IGRlY3JlbWVudGVkLCBwcmV2ZW50aW5nIHNpbWlsYXIgbGVha3MuIEFnYWluLCB0aGlzIGlzIGFsbCBhYm91dCBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudCwgYW5kIEkgYW0gZ2xhZCB0byBzZWUgaXQgaGVyZS5cblxuSSd2ZSB0YWtlbiBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IGF0IGBfX3NlcV9vcGVuX3ByaXZhdGVgLCBhbmQgaXQgYXBwZWFycyB0aGF0IGBwZGAgKHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlKSBpcyBga3phbGxvY2AnZCwgd2hpY2ggbWVhbnMgaXQncyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIG1lYW5zIGBwZC1cdTAwM2VzZXNzaW9uYCBhbmQgYHBkLVx1MDAzZXR1bm5lbGAgc3RhcnQgb3V0IGFzIE5VTEwuIFNvIHRoZXJlJ3Mgbm8gcmlzayBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCB3aGljaCBpcyBncmVhdC5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBjbGVhbiBmaXggZm9yIGEgcmVmZXJlbmNlIGNvdW50aW5nIGxlYWsuIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UncmUgbm90IGxlYWtpbmcgYW55IHNlbnNpdGl2ZSBkYXRhLiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIEtBU0FOL0tNRU1MRUFLIG9yIHJlZ3VsYXIgcmVmY291bnQgZGVidWdnaW5nIHdvdWxkIGhhdmUgY2F1Z2h0IHRoZXNlIGlzc3VlcyBhbnl3YXksIGJ1dCBpdCdzIGltcG9ydGFudCB0byBhZGRyZXNzIHRoZW0uIE92ZXJhbGwsIGdvb2Qgd29yazsgYSBzaW1wbGUsIGVmZmVjdGl2ZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4MiwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODo0NS4xMDgxMTgyMzFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlZmVyZW5jZSBjb3VudCBsZWFrcyBpbiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBieSBhZGRpbmcgbWlzc2luZyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIGluIHRoZSByZWxlYXNlIGhhbmRsZXJzLiBJdCBhbHNvIHJlcGxhY2VzIGBwcm9jX2NyZWF0ZV9uZXRgIHdpdGggYHByb2NfY3JlYXRlX2RhdGFgIGFuZCBjdXN0b20gYHByb2Nfb3BzYCB0byBlbnN1cmUgdGhlIHJlbGVhc2UgaGFuZGxlciBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkvcmVmY291bnQgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtNRU1MRUFLLCBhbmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgICh2aWEgYF9fc2VxX29wZW5fcHJpdmF0ZWApLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZWZlcmVuY2UgY291bnQgbGVha3MgaW4gTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgYnkgYWRkaW5nIG1pc3NpbmcgYGwydHBfc2Vzc2lvbl9wdXRgIGFuZCBgbDJ0cF90dW5uZWxfcHV0YCBjYWxscyBpbiB0aGUgcmVsZWFzZSBoYW5kbGVycy4gSXQgYWxzbyByZXBsYWNlcyBgcHJvY19jcmVhdGVfbmV0YCB3aXRoIGBwcm9jX2NyZWF0ZV9kYXRhYCBhbmQgY3VzdG9tIGBwcm9jX29wc2AgdG8gZW5zdXJlIHRoZSByZWxlYXNlIGhhbmRsZXIgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5L3JlZmNvdW50IGxlYWtzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBLTUVNTEVBSywgYW5kIHJlZmNvdW50IGNoZWNraW5nLiBUaGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAodmlhIGBfX3NlcV9vcGVuX3ByaXZhdGVgKSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflownpktp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-10 15:49:48 +0000 UTC FinishedAt: 2026-08-10 16:18:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "L2TP", "L2TP_DEBUGFS", "PPP", "PPPOL2TP", "DEBUG_FS", "PROC_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "dd057113ac7ba5bdd2aed3d9405305911152f911", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "L2TP", "L2TP_DEBUGFS", "PPP", "PPPOL2TP", "DEBUG_FS", "PROC_FS" ], "series_id": "7312f22c-647c-4f5d-b299-da8fad8c432b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "l2tp_dfs_seq_release", "pppol2tp_proc_open", "pppol2tp_proc_release" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF9kZnNfc2VxX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfcHJvY19vcGVuJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3Byb2NfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlZmVyZW5jZSBjb3VudCBsZWFrcyBpbiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBieSBhZGRpbmcgbWlzc2luZyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIGluIHRoZSByZWxlYXNlIGhhbmRsZXJzLiBJdCBhbHNvIHJlcGxhY2VzIGBwcm9jX2NyZWF0ZV9uZXRgIHdpdGggYHByb2NfY3JlYXRlX2RhdGFgIGFuZCBjdXN0b20gYHByb2Nfb3BzYCB0byBlbnN1cmUgdGhlIHJlbGVhc2UgaGFuZGxlciBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkvcmVmY291bnQgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtNRU1MRUFLLCBhbmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgICh2aWEgYF9fc2VxX29wZW5fcHJpdmF0ZWApLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb25zIG9mIEwyVFAgZGVidWdmcyBhbmQgcHJvY2ZzIHNlcV9maWxlcyBieSBhZGRpbmcgbWlzc2luZyBsMnRwX3Nlc3Npb25fcHV0IGFuZCBsMnRwX3R1bm5lbF9wdXQgY2FsbHMuIEl0IGFsc28gaW50cm9kdWNlcyBuZXcgcHJvY2ZzIG9wZW4gYW5kIHJlbGVhc2UgZnVuY3Rpb25zIGZvciBwcHBvbDJ0cC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG9wZW5pbmcgYW5kIGNsb3NpbmcgdGhlIHJlc3BlY3RpdmUgZGVidWdmcyBhbmQgcHJvY2ZzIGZpbGVzLCBhbmQgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHJlc291cmNlIG1hbmFnZW1lbnQsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YmYzYjljZTJkYjFmOWYwMGRkNmQwMWIwZGIxODQ1MDYwYmFlNzhjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTY6MTc6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuaW5kZXggYjI2OTg2ZmRhOWQ2Yy4uYzEyZDVlMWVlNTUwYyAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuQEAgLTMwNiw2ICYjNDM7MzA2LDEwIEBAIHN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRzZXEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHBkID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzQzO1x0aWYgKHBkLVx1MDAzZXNlc3Npb24pXG4mIzQzO1x0XHRsMnRwX3Nlc3Npb25fcHV0KHBkLVx1MDAzZXNlc3Npb24pO1xuJiM0MztcdGlmIChwZC1cdTAwM2V0dW5uZWwpXG4mIzQzO1x0XHRsMnRwX3R1bm5lbF9wdXQocGQtXHUwMDNldHVubmVsKTtcbiBcdGlmIChwZC1cdTAwM2VuZXQpXG4gXHRcdHB1dF9uZXRfdHJhY2socGQtXHUwMDNlbmV0LCBcdTAwMjZwZC1cdTAwM2Vuc190cmFja2VyKTtcbiBcdGtmcmVlKHBkKTtcbmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuaW5kZXggZjg4ODE2OTllMWNhZC4uMWJjZjQ0N2YyZjhiMCAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbkBAIC0xNTk3LDYgJiM0MzsxNTk3LDUzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2wydHBfc2VxX29wcyA9IHtcbiBcdC5zdG9wXHRcdD0gcHBwb2wydHBfc2VxX3N0b3AsXG4gXHQuc2hvd1x0XHQ9IHBwcG9sMnRwX3NlcV9zaG93LFxuIH07XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldCA9IHBkZV9kYXRhKGlub2RlKTtcbiYjNDM7XHRzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkO1xuJiM0MztcbiYjNDM7XHRuZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4mIzQzO1x0aWYgKCFuZXQpXG4mIzQzO1x0XHRyZXR1cm4gLUVOWElPO1xuJiM0MztcbiYjNDM7XHRwZCA9IF9fc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcdTAwMjZwcHBvbDJ0cF9zZXFfb3BzLCBzaXplb2YoKnBkKSk7XG4mIzQzO1x0aWYgKCFwZCkge1xuJiM0MztcdFx0cHV0X25ldChuZXQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19ORVRfTlNcbiYjNDM7XHRwZC1cdTAwM2VwLm5ldCA9IG5ldDtcbiYjNDM7XHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgXHUwMDI2cGQtXHUwMDNlcC5uc190cmFja2VyLCBHRlBfS0VSTkVMKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkID0gc2VxLVx1MDAzZXByaXZhdGU7XG4mIzQzO1xuJiM0MztcdGlmIChwZC1cdTAwM2VzZXNzaW9uKVxuJiM0MztcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbiYjNDM7XHRpZiAocGQtXHUwMDNldHVubmVsKVxuJiM0MztcdFx0bDJ0cF90dW5uZWxfcHV0KHBkLVx1MDAzZXR1bm5lbCk7XG4mIzQzO1xuJiM0MzsjaWZkZWYgQ09ORklHX05FVF9OU1xuJiM0MztcdHB1dF9uZXRfdHJhY2socGQtXHUwMDNlcC5uZXQsIFx1MDAyNnBkLVx1MDAzZXAubnNfdHJhY2tlcik7XG4mIzQzOyNlbHNlXG4mIzQzO1x0cHV0X25ldChcdTAwMjZpbml0X25ldCk7XG4mIzQzOyNlbmRpZlxuJiM0MztcdHJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwcHBvbDJ0cF9wcm9jX29wcyA9IHtcbiYjNDM7XHQucHJvY19vcGVuXHQ9IHBwcG9sMnRwX3Byb2Nfb3BlbixcbiYjNDM7XHQucHJvY19yZWFkXHQ9IHNlcV9yZWFkLFxuJiM0MztcdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2VlayxcbiYjNDM7XHQucHJvY19yZWxlYXNlXHQ9IHBwcG9sMnRwX3Byb2NfcmVsZWFzZSxcbiYjNDM7fTtcbiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi9cbiBcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbkBAIC0xNjA4LDggJiM0MzsxNjU1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9sMnRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlO1xuIFx0aW50IGVyciA9IDA7XG4gXG4tXHRwZGUgPSBwcm9jX2NyZWF0ZV9uZXQoXCYjMzQ7cHBwb2wydHBcJiMzNDssIDA0NDQsIG5ldC1cdTAwM2Vwcm9jX25ldCxcbi1cdFx0XHQgICAgICBcdTAwMjZwcHBvbDJ0cF9zZXFfb3BzLCBzaXplb2Yoc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhKSk7XG4mIzQzO1x0cGRlID0gcHJvY19jcmVhdGVfZGF0YShcJiMzNDtwcHBvbDJ0cFwmIzM0OywgMDQ0NCwgbmV0LVx1MDAzZXByb2NfbmV0LFxuJiM0MztcdFx0XHQgICAgICAgXHUwMDI2cHBwb2wydHBfcHJvY19vcHMsIG5ldCk7XG4gXHRpZiAoIXBkZSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TDJUUCYjMzQ7LAogICAgJiMzNDtMMlRQX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7UFBQJiMzNDssCiAgICAmIzM0O1BQUE9MMlRQJiMzNDssCiAgICAmIzM0O0RFQlVHX0ZTJiMzNDssCiAgICAmIzM0O1BST0NfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtsMnRwX2Rmc19zZXFfcmVsZWFzZSYjMzQ7LAogICAgJiMzNDtwcHBvbDJ0cF9wcm9jX29wZW4mIzM0OywKICAgICYjMzQ7cHBwb2wydHBfcHJvY19yZWxlYXNlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSByZWxlYXNlIGZ1bmN0aW9ucyBvZiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBzZXFfZmlsZXMgYnkgYWRkaW5nIG1pc3NpbmcgbDJ0cF9zZXNzaW9uX3B1dCBhbmQgbDJ0cF90dW5uZWxfcHV0IGNhbGxzLiBJdCBhbHNvIGludHJvZHVjZXMgbmV3IHByb2NmcyBvcGVuIGFuZCByZWxlYXNlIGZ1bmN0aW9ucyBmb3IgcHBwb2wydHAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSByZXNwZWN0aXZlIGRlYnVnZnMgYW5kIHByb2NmcyBmaWxlcywgYW5kIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgOWJmM2I5Y2UyZGIxZjlmMDBkZDZkMDFiMGRiMTg0NTA2MGJhZTc4YwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDEwIDE2OjE3OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYwppbmRleCBiMjY5ODZmZGE5ZDZjLi5jMTJkNWUxZWU1NTBjIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYwpAQCAtMzA2LDYgJiM0MzszMDYsMTAgQEAgc3RhdGljIGludCBsMnRwX2Rmc19zZXFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAogCXNlcSA9IGZpbGUtJmd0O3ByaXZhdGVfZGF0YTsKIAlwZCA9IHNlcS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJaWYgKHBkLSZndDtzZXNzaW9uKQomIzQzOwkJbDJ0cF9zZXNzaW9uX3B1dChwZC0mZ3Q7c2Vzc2lvbik7CiYjNDM7CWlmIChwZC0mZ3Q7dHVubmVsKQomIzQzOwkJbDJ0cF90dW5uZWxfcHV0KHBkLSZndDt0dW5uZWwpOwogCWlmIChwZC0mZ3Q7bmV0KQogCQlwdXRfbmV0X3RyYWNrKHBkLSZndDtuZXQsICZhbXA7cGQtJmd0O25zX3RyYWNrZXIpOwogCWtmcmVlKHBkKTsKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jCmluZGV4IGY4ODgxNjk5ZTFjYWQuLjFiY2Y0NDdmMmY4YjAgMTAwNjQ0Ci0tLSBhL25ldC9sMnRwL2wydHBfcHBwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9wcHAuYwpAQCAtMTU5Nyw2ICYjNDM7MTU5Nyw1MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9sMnRwX3NlcV9vcHMgPSB7CiAJLnN0b3AJCT0gcHBwb2wydHBfc2VxX3N0b3AsCiAJLnNob3cJCT0gcHBwb2wydHBfc2VxX3Nob3csCiB9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldCAqbmV0ID0gcGRlX2RhdGEoaW5vZGUpOwomIzQzOwlzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkOwomIzQzOwomIzQzOwluZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7CiYjNDM7CWlmICghbmV0KQomIzQzOwkJcmV0dXJuIC1FTlhJTzsKJiM0MzsKJiM0MzsJcGQgPSBfX3NlcV9vcGVuX3ByaXZhdGUoZmlsZSwgJmFtcDtwcHBvbDJ0cF9zZXFfb3BzLCBzaXplb2YoKnBkKSk7CiYjNDM7CWlmICghcGQpIHsKJiM0MzsJCXB1dF9uZXQobmV0KTsKJiM0MzsJCXJldHVybiAtRU5PTUVNOwomIzQzOwl9CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ORVRfTlMKJiM0MzsJcGQtJmd0O3AubmV0ID0gbmV0OwomIzQzOwluZXRuc190cmFja2VyX2FsbG9jKG5ldCwgJmFtcDtwZC0mZ3Q7cC5uc190cmFja2VyLCBHRlBfS0VSTkVMKTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQomIzQzO3sKJiM0MzsJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiYjNDM7CXN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSAqcGQgPSBzZXEtJmd0O3ByaXZhdGU7CiYjNDM7CiYjNDM7CWlmIChwZC0mZ3Q7c2Vzc2lvbikKJiM0MzsJCWwydHBfc2Vzc2lvbl9wdXQocGQtJmd0O3Nlc3Npb24pOwomIzQzOwlpZiAocGQtJmd0O3R1bm5lbCkKJiM0MzsJCWwydHBfdHVubmVsX3B1dChwZC0mZ3Q7dHVubmVsKTsKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX05FVF9OUwomIzQzOwlwdXRfbmV0X3RyYWNrKHBkLSZndDtwLm5ldCwgJmFtcDtwZC0mZ3Q7cC5uc190cmFja2VyKTsKJiM0MzsjZWxzZQomIzQzOwlwdXRfbmV0KCZhbXA7aW5pdF9uZXQpOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcHBwb2wydHBfcHJvY19vcHMgPSB7CiYjNDM7CS5wcm9jX29wZW4JPSBwcHBvbDJ0cF9wcm9jX29wZW4sCiYjNDM7CS5wcm9jX3JlYWQJPSBzZXFfcmVhZCwKJiM0MzsJLnByb2NfbHNlZWsJPSBzZXFfbHNlZWssCiYjNDM7CS5wcm9jX3JlbGVhc2UJPSBwcHBvbDJ0cF9wcm9jX3JlbGVhc2UsCiYjNDM7fTsKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTE2MDgsOCAmIzQzOzE2NTUsOCBAQCBzdGF0aWMgX19uZXRfaW5pdCBpbnQgcHBwb2wydHBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlOwogCWludCBlcnIgPSAwOwogCi0JcGRlID0gcHJvY19jcmVhdGVfbmV0KCYjMzQ7cHBwb2wydHAmIzM0OywgMDQ0NCwgbmV0LSZndDtwcm9jX25ldCwKLQkJCSAgICAgICZhbXA7cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSkpOwomIzQzOwlwZGUgPSBwcm9jX2NyZWF0ZV9kYXRhKCYjMzQ7cHBwb2wydHAmIzM0OywgMDQ0NCwgbmV0LSZndDtwcm9jX25ldCwKJiM0MzsJCQkgICAgICAgJmFtcDtwcHBvbDJ0cF9wcm9jX29wcywgbmV0KTsKIAlpZiAoIXBkZSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg4NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEwyVFAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY2AgYW5kIGBuZXQvbDJ0cC9sMnRwX3BwcC5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIGFuZCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcy4gSW4gYGwydHBfZGVidWdmcy5jYCwgdGhlIGZvY3VzIHNlZW1zIHRvIGJlIG9uIHJlc291cmNlIG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGRlYnVnZnMgaW50ZXJmYWNlLiBUaGV5JiMzOTt2ZSBhZGRlZCBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIHRvIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkmIzM5O3JlIGFpbWluZyB0byBwcm9wZXJseSBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudHMgZm9yIHNlc3Npb25zIGFuZCB0dW5uZWxzIHdoZW4gcmVzb3VyY2VzIGFyZSByZWxlYXNlZCB0aHJvdWdoIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzLgoKTm93LCBtb3ZpbmcgdG8gYGwydHBfcHBwLmNgLCBpdCBzZWVtcyB3ZSBhcmUgZGVhbGluZyB3aXRoIGNoYW5nZXMgcmVsYXRlZCB0byBQUFAgb3ZlciBMMlRQIHN1cHBvcnQuIFRoZXkmIzM5O3ZlIGFkZGVkIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCwgYW5kIGFyZSByZXBsYWNpbmcgYHByb2NfY3JlYXRlX25ldGAgd2l0aCBgcHJvY19jcmVhdGVfZGF0YWAgdXNpbmcgYHBwcG9sMnRwX3Byb2Nfb3BzYC4gVGhpcyBzdWdnZXN0cyB0aGV5JiMzOTtyZSByZWZhY3RvcmluZyBob3cgdGhlIFBQUCBvdmVyIEwyVFAgaW50ZXJmYWNlIGludGVyYWN0cyB3aXRoIHRoZSBwcm9jIGZpbGVzeXN0ZW0uIEl0JiMzOTtzIGxpa2VseSBhbiBlZmZvcnQgdG8gaW1wcm92ZSBtYW5hZ2VtZW50IG9yIGludHJvZHVjZSBtb3JlIGRhdGEgc3BlY2lmaWMgdG8gdGhlIGN1cnJlbnQgbmV0d29yayBuYW1lc3BhY2UuCgpHaXZlbiB0aGVzZSBjaGFuZ2VzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfTDJUUGAsIGBDT05GSUdfTDJUUF9ERUJVR0ZTYCwgYENPTkZJR19QUFBPTDJUUGAsIGFuZCBgQ09ORklHX1BST0NfRlNgIGFyZSBhbGwgZW5hYmxlZCwgYXMgdGhlc2Ugc2VlbSB0byBiZSB0aGUgZGVwZW5kZW5jaWVzIGJhc2VkIG9uIHRoZSBmaWxlIHBhdGhzLiBJJiMzOTtsbCBxdWlja2x5IGxvb2sgdXAgaW4gYG5ldC9sMnRwL0tjb25maWdgIHRvIGJlIHN1cmUgSSYjMzk7bSB1c2luZyB0aGUgZXhhY3QgY29uZmlnIG5hbWVzLiBGcm9tIHRoZXJlLCBJIGNhbiBlbnN1cmUgdGhpcyBwYXRjaCBpcyBzZXQgdXAgcHJvcGVybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEwyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWctNS1cbm5ldC9sMnRwL0tjb25maWc6NjptZW51Y29uZmlnIEwyVFBcbm5ldC9sMnRwL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O0xheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgKEwyVFApXCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy0zNS1cbm5ldC9sMnRwL0tjb25maWc6MzY6Y29uZmlnIEwyVFBfREVCVUdGU1xubmV0L2wydHAvS2NvbmZpZy0zNy1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZGVidWdmcyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy00OC1cbm5ldC9sMnRwL0tjb25maWc6NDk6Y29uZmlnIEwyVFBfVjNcbm5ldC9sMnRwL0tjb25maWctNTAtXHRib29sIFwmIzM0O0wyVFB2MyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2wydHAvS2NvbmZpZy02OS1cbm5ldC9sMnRwL0tjb25maWc6NzA6Y29uZmlnIEwyVFBfSVBcbm5ldC9sMnRwL0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIElQIGVuY2Fwc3VsYXRpb24gZm9yIEwyVFB2M1wmIzM0O1xuLS1cbm5ldC9sMnRwL0tjb25maWctODYtXG5uZXQvbDJ0cC9LY29uZmlnOjg3OmNvbmZpZyBMMlRQX0VUSFxubmV0L2wydHAvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODYxCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgdGhlIHN1bW1hcnksIHJlbmRlcmVkIGFzIGEgZmlyc3QtcGVyc29uIHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIHRoZSB1c2VyIGlzIGFuIGV4cGVydDoKCioqTG9jYXRpbmcgUFBQT0wyVFAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBQUFBPTDJUUGAuIExldCBtZSB0aGluay4uLiBXaGVyZSB3b3VsZCBzb21ldGhpbmcgbGlrZSB0aGF0IGxvZ2ljYWxseSByZXNpZGUgaW4gYSBrZXJuZWwgc291cmNlIHRyZWU/IFBQUCBpcyBuZXR3b3JraW5nLCBzbyBpdCYjMzk7cyBhIHNhZmUgYmV0IHRvIHN0YXJ0IGxvb2tpbmcgaW4gdGhlIGBkcml2ZXJzL25ldGAgZGlyZWN0b3J5LiBBbmQgd2l0aGluIHRoYXQsIHRoZSBQUFAtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpcyBsaWtlbHkgdW5kZXIgYHBwcGAuIE9rYXksIGxldCYjMzk7cyBjaGVjayBgZHJpdmVycy9uZXQvcHBwL0tjb25maWdgLiBUaGF0JiMzOTtzIHRoZSBtb3N0IHByb2JhYmxlIGxvY2F0aW9uIGZvciB0aGlzIHNvcnQgb2YgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGltZSB0byBvcGVuIGl0IHVwIGFuZCBzZWUgaWYgbXkgaHVuY2ggaXMgY29ycmVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFBQT0wyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTYxPWNvbmZpZyBQUFRQXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTcyLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTczOmNvbmZpZyBQUFBPTDJUUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgTDJUUFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQxNTAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgUFBQT0wyVFAgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRvIGdldCBhIGhhbmRsZSBvbiBgUFBQT0wyVFBgLCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYCBmaWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIHdpdGhpbiB0aGUgYnJvYWRlciBQUFAgZnJhbWV3b3JrLiBUaGlzIGlzIHdoZXJlIEkgdHlwaWNhbGx5IGZpbmQgdGhlIGNvcmUgc2V0dGluZ3MgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGUgZmVhdHVyZSBhbmQgYW55IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIG9yIHByZXJlcXVpc2l0ZXMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBmbGFncyBmb3IgdGhpbmdzIGxpa2UgTDJUUCBzdXBwb3J0LCB0dW5uZWwgY29uZmlndXJhdGlvbnMsIGFuZCBwZXJoYXBzIG9wdGlvbnMgZm9yIENIQVAvUEFQIGF1dGhlbnRpY2F0aW9uLCBNVFUgc2V0dGluZ3MsIGFuZCByZWxhdGVkIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBJJiMzOTtsbCBiZSBsb29raW5nIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBtb2R1bGVzIHRoYXQgbmVlZCB0byBiZSBidWlsdCBhbmQgd2hhdCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlLiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gZm9ybSBhIGNvbXBsZXRlIG1lbnRhbCBtYXAgb2YgaG93IGBQUFBPTDJUUGAgaW50ZWdyYXRlcyBpbnRvIHRoZSBzeXN0ZW0gYW5kIGhvdyBJIGNhbiBiZXN0IGNvbmZpZ3VyZSBpdCB0byBzdWl0IGEgcGFydGljdWxhciB1c2UgY2FzZS4gVGhpcyBpbml0aWFsIGludmVzdGlnYXRpb24gd2lsbCBzZXQgdGhlIHN0YWdlIGZvciBmdXJ0aGVyIGV4cGxvcmF0aW9uIGlmIG5lZWRlZCwgZGlnZ2luZyBpbnRvIHRoZSBjb2RlIGl0c2VsZiBpZiBzb21ldGhpbmcgaXNuJiMzOTt0IGltbWVkaWF0ZWx5IGNsZWFyIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFBQT0wyVFAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xNjE9Y29uZmlnIFBQVFBcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzM6Y29uZmlnIFBQUE9MMlRQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzQtXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBMMlRQXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUxOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIFBQUCBPdmVyIEwyVFAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgUFBQT0wyVFBgLiBMZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJJiMzOTttIHRoaW5raW5nLCB3aGVyZSBkb2VzIHRoaXMgdGhpbmcgc2l0IGluIHRoZSBvdmVyYWxsIG5ldHdvcmtpbmcgc3RhY2s/IFdoYXQgZm91bmRhdGlvbmFsIGVsZW1lbnRzIGlzIGl0IGJ1aWx0IHVwb24/IElzIGl0IGEgdXNlci1zcGFjZSBkYWVtb24sIG9yIGRvZXMgaXQgaGF2ZSBrZXJuZWwgY29tcG9uZW50cz8gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcm90b2NvbCByZWxhdGlvbnNoaXBzIHRvby4gRG9lcyBgUFBQb0wyVFBgIGl0c2VsZiBoYW5kbGUgdGhlIFBQUCBzZXNzaW9uIGVzdGFibGlzaG1lbnQsIG9yIGRvZXMgaXQgcmVseSBvbiBzb21ldGhpbmcgZWxzZSB0byBtYW5hZ2UgdGhlIHVuZGVybHlpbmcgUFBQIGNvbm5lY3Rpb25zPyBEb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgdmVyc2lvbnMgb2YgUFBQIG9yIEwyVFA/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24gcGFydGljdWxhciByb3V0aW5nIHByb3RvY29scyBvciBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9ucz8gQSBxdWljayBtZW50YWwgY2hlY2tsaXN0IHNob3VsZCBoZWxwIG1lIHZpc3VhbGl6ZSB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVuIEkgY2FuIGNvbnN1bHQgdGhlIHJlbGV2YW50IFJGQ3Mgb3Igc291cmNlIGNvZGUgaWYgbmVlZGVkLiBUaGF0JiMzOTtzIHRoZSBiZXN0IHdheSB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyBhbGwgdGhlIHBpZWNlcyBmaXQgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEwND1jb25maWcgUFBQT0FUTVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIG92ZXIgQVRNXCYjMzQ7XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDY6XHRkZXBlbmRzIG9uIEFUTVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEyNz1jaG9pY2Vcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMjktXHRkZWZhdWx0IFBQUE9FX0hBU0hfQklUU180XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMzA6XHRkZXBlbmRzIG9uIFBQUE9FXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMzEtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTYxPWNvbmZpZyBQUFRQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNjItXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBJUHY0IChQUFRQKVwmIzM0O1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYzOlx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2NC1cdHNlbGVjdCBQUFBPWFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE3Mz1jb25maWcgUFBQT0wyVFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEwyVFBcJiMzNDtcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3NTpcdGRlcGVuZHMgb24gTDJUUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc2LVx0c2VsZWN0IFBQUE9YXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSBkZXBlbmRlbmNpZXMsIHN1bW1hcml6ZWQgZnJvbSBteSBwZXJzcGVjdGl2ZSBhcyBzb21lb25lIHdobyB1bmRlcnN0YW5kcyB0aGlzIGZpZWxkOgoKKipEZXBlbmRlbmN5IENoYWluIEFuYWx5c2lzKioKCkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24gaW4gbXkgaGVhZC4gRXNzZW50aWFsbHksIEkmIzM5O20gc2VlaW5nIHRoYXQgYFBQUE9MMlRQYCBpcyBidWlsdCB1cG9uIHRoZSBmb3VuZGF0aW9uIG9mIGBMMlRQYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQmIzM5O3MgYSBQUFAgb3ZlciBMMlRQIGltcGxlbWVudGF0aW9uLCBzbyB0aGUgbG93ZXItbGV2ZWwgTDJUUCBwcm90b2NvbCBpcyBhIGNvcmUgcmVxdWlyZW1lbnQuIEkgd291bGRuJiMzOTt0IGV4cGVjdCBpdCB0byB3b3JrIHdpdGhvdXQgaXQuIFRoZW4sIGxvb2tpbmcgYXQgYEwyVFBfREVCVUdGU2AsIGl0IGZvbGxvd3MgYSBzaW1pbGFyIHBhdHRlcm4sIGJ1dCB3aXRoIGEgY291cGxlIG9mIHR3aXN0cy4gSXQgYWxzbyByZXF1aXJlcyBgTDJUUGAgd2hpY2ggaXMgc2Vuc2libGUsIGFzIHRoZSBkZWJ1ZyBmaWxlc3lzdGVtIGhvb2tzIHdvdWxkIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgTDJUUCBmdW5jdGlvbmFsaXR5LiBBbmQgZmluYWxseSwgYW5kIGhlcmUmIzM5O3MgdGhlIG90aGVyIHBhcnQgb2YgdGhlIHB1enpsZSwgYERFQlVHX0ZTYCBpcyBhIGhhcmQgZGVwZW5kZW5jeS4gU28sIGlmIEkgd2FudCB0aG9zZSBkZWJ1Z2dpbmcgdG9vbHMgZm9yIEwyVFAsIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0aGUgZGVidWcgZmlsZXN5c3RlbSBpdHNlbGYuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnJvbSBhIGRlcGVuZGVuY3kgcGVyc3BlY3RpdmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RlcGVuZHMgb24uKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9sMnRwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2wydHAvS2NvbmZpZz02PW1lbnVjb25maWcgTDJUUFxubmV0L2wydHAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7TGF5ZXIgVHdvIFR1bm5lbGluZyBQcm90b2NvbCAoTDJUUClcJiMzNDtcbm5ldC9sMnRwL0tjb25maWc6ODpcdGRlcGVuZHMgb24gSU5FVFxubmV0L2wydHAvS2NvbmZpZy05LVx0c2VsZWN0IE5FVF9VRFBfVFVOTkVMXG4tLVxubmV0L2wydHAvS2NvbmZpZz0zNj1jb25maWcgTDJUUF9ERUJVR0ZTXG5uZXQvbDJ0cC9LY29uZmlnLTM3LVx0dHJpc3RhdGUgXCYjMzQ7TDJUUCBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbm5ldC9sMnRwL0tjb25maWc6Mzg6XHRkZXBlbmRzIG9uIEwyVFAgXHUwMDI2XHUwMDI2IERFQlVHX0ZTXG5uZXQvbDJ0cC9LY29uZmlnLTM5LVx0aGVscFxuLS1cbm5ldC9sMnRwL0tjb25maWc9NDk9Y29uZmlnIEwyVFBfVjNcbm5ldC9sMnRwL0tjb25maWctNTAtXHRib29sIFwmIzM0O0wyVFB2MyBzdXBwb3J0XCYjMzQ7XG5uZXQvbDJ0cC9LY29uZmlnOjUxOlx0ZGVwZW5kcyBvbiBMMlRQXG5uZXQvbDJ0cC9LY29uZmlnLTUyLVx0aGVscFxuLS1cbm5ldC9sMnRwL0tjb25maWc9NzA9Y29uZmlnIEwyVFBfSVBcbm5ldC9sMnRwL0tjb25maWctNzEtXHR0cmlzdGF0ZSBcJiMzNDtMMlRQIElQIGVuY2Fwc3VsYXRpb24gZm9yIEwyVFB2M1wmIzM0O1xubmV0L2wydHAvS2NvbmZpZzo3MjpcdGRlcGVuZHMgb24gTDJUUF9WM1xubmV0L2wydHAvS2NvbmZpZy03My1cdGhlbHBcbi0tXG5uZXQvbDJ0cC9LY29uZmlnPTg3PWNvbmZpZyBMMlRQX0VUSFxubmV0L2wydHAvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O0wyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcJiMzNDtcbm5ldC9sMnRwL0tjb25maWc6ODk6XHRkZXBlbmRzIG9uIEwyVFBfVjNcbm5ldC9sMnRwL0tjb25maWctOTAtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU4MjQKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMMlRQIERlYnVnZnMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgTDJUUGAsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYERFQlVHX0ZTYCwgYFBQUE9MMlRQYCwgYW5kIHRoZSBkZWJ1ZyBpbnRlcmZhY2UuIFRoZSBwcmltYXJ5IGNoYW5nZXMgc2VlbSB0byBiZSB3aXRoaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb25zIGZvciB0aGUgc2VxX2ZpbGVzIHVzZWQgaW4gcHJvY2ZzL2RlYnVnZnMuIEkgc2VlIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGJlaW5nIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBjYWxscyB0byBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgLCB3aGljaCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGV5JiMzOTtyZSBhZGRyZXNzaW5nIG1lbW9yeSBsZWFrcyBvciByZWZlcmVuY2UgY291bnQgaXNzdWVzIOKAkyBsaWtlbHkgYSBjb21tb24gcHJvYmxlbSB3aXRoIHRoZXNlIGtpbmRzIG9mIGludGVyZmFjZXMuCgpNeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBhbmQgYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAsIGFsdGhvdWdoIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSBnbGFuY2UgYXQgYHBwcG9sMnRwX3Byb2Nfb3BlbmAuIFdhaXQsIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCBhcmUgbmV3IGZ1bmN0aW9ucyDigJMgdGhhdCYjMzk7cyBzb21ldGhpbmcgdG8gaW52ZXN0aWdhdGUgZnVydGhlci4gSXQmIzM5O3MgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhlc2UgYXJlIGNhbGxlZC4gYHBwcG9sMnRwX3Byb2Nfb3BlbmAgaXMgY2FsbGVkIHdoZW4gYWNjZXNzaW5nIGAvcHJvYy9uZXQvcHBwb2wydHBgLiBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgIGlzIHVzZWQgd2hlbiBjbG9zaW5nIGRlYnVnZnMgZmlsZXMgdW5kZXIgYC9zeXMva2VybmVsL2RlYnVnL2wydHAvLi4uYC4KCkFscmlnaHQsIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGludG8gYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBpbiBgbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNgIG5vdyB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfZGZzX3NlcV9yZWxlYXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM9MjY2PXN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4tLVxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtMzAxLVxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6MzAyOnN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0zMDMte1xuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jPTMyMT1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsMnRwX2Rmc19mb3BzID0ge1xuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMyNS1cdC5sbHNlZWtcdFx0PSBzZXFfbHNlZWssXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYzozMjY6XHQucmVsZWFzZVx0PSBsMnRwX2Rmc19zZXFfcmVsZWFzZSxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMyNy19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzQxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFBQUCBvdmVyIEwyVFAgUGx1bWJpbmcqKgoKQWxyaWdodCwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBMMlRQIGlzc3VlLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgbG93LWhhbmdpbmcgZnJ1aXQgYW5kIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gYG5ldC9sMnRwL2wydHBfcHBwLmNgLCBhbmQgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gY2hlY2sgb3V0IGhvdyB0aGUgUFBQIHNlc3Npb24gaXMgaW5pdGlhdGVkIGluIHRoZSBjb250ZXh0IG9mIEwyVFAuIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYHBwcG9sMnRwX3Byb2Nfb3BlbmAsIGFzIHRoZSBQUFAgc2Vzc2lvbiBvcGVuaW5nIGlzIHdoZXJlIGV2ZXJ5dGhpbmcgYmVnaW5zLiBUaGF0JiMzOTtzIHRoZSBnYXRld2F5LiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gc2V0dXAgbG9naWMgdGhlcmUsIGFuZCBob3BlZnVsbHkgdGhlIGNsdWVzIEkgbmVlZCB0byB1bnJhdmVsIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBvbDJ0cF9wcm9jX29wZW4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC9sMnRwX3BwcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfcHBwLmM9MTU5ND1zdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9sMnRwX3NlcV9vcHMgPSB7XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjAwLVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNjAxOnN0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjAyLXtcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE2NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwcHBvbDJ0cF9wcm9jX29wcyA9IHtcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTY0MjpcdC5wcm9jX29wZW5cdD0gcHBwb2wydHBfcHJvY19vcGVuLFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjQzLVx0LnByb2NfcmVhZFx0PSBzZXFfcmVhZCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzIxMAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhc3Nlc3NtZW50IG9mIHRoZXNlIGNoYW5nZXMsIHRoaW5raW5nIHRocm91Z2ggaXQgYXMgaWYgdGhleSB3ZXJlIG15IG93bi4KCioqRnV6emluZyBUYXJnZXQgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gZml4aW5nIHJlc291cmNlIGxlYWtzLiBGdW5jdGlvbmFsbHkgc291bmQsIHdoaWNoIGlzIGdyZWF0LiBUaGUga2V5IGlzIHRoYXQgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoZW0gdmlhIGAvcHJvYy9uZXQvcHBwb2wydHBgIGFuZCBgL3N5cy9rZXJuZWwvZGVidWcvbDJ0cC90dW5uZWxzYC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHVwIHRoYXQgc2NyZWFtcyAmIzM0O2Z1enogbWUhJiMzNDsgSXQmIzM5O3MgZGlyZWN0IHVzZXIgaW50ZXJhY3Rpb24sIHByb3ZpZGluZyBhIHBlcmZlY3QgZW50cnkgcG9pbnQgZm9yIGV4cGxvcmluZyBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLiBXZSYjMzk7dmUgZ290IGNsZWFyIGF0dGFjayBzdXJmYWNlLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZTogYEwyVFBgLCBgTDJUUF9ERUJVR0ZTYCwgYFBQUE9MMlRQYCwgYERFQlVHX0ZTYCwgYW5kIGBQUk9DX0ZTYC4gV2UgbmVlZCB0byBlbnN1cmUgYWxsIG9mIHRoZXNlIGFyZSBlbmFibGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LiBUaGF0JiMzOTtzIG91ciBidWlsZCBjb25maWd1cmF0aW9uIGJhc2VsaW5lLgoKSSYjMzk7dmUgaWRlbnRpZmllZCB0aGVzZSBzeW1ib2xzIGFzIHByaW1hcnkgZm9jdXMgYXJlYXMgZm9yIHRoZSBmdXp6aW5nIGNhbXBhaWduOiBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgLCBgcHBwb2wydHBfcHJvY19vcGVuYCwgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGVzZSBsb29rIGxpa2UgY29yZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGVzZSBmZWF0dXJlcywgbGlrZWx5IGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLCB3aGljaCBpcyBhbHdheXMgYW4gYXR0cmFjdGl2ZSB0YXJnZXQuCgpXYWl0IGEgc2Vjb25k4oCmIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGlzICphbHNvKiBhIG5ldyBmdW5jdGlvbj8gVGhhdCYjMzk7cyBpbnRlcmVzdGluZy4gSSBoYWRuJiMzOTt0IG5vdGljZWQgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnl0aGluZyBhYm91dCBpdHMgZnVuY3Rpb25hbGl0eS4gSXQgbWlnaHQgYmUgZXZlbiBtb3JlIHNpZ25pZmljYW50IHRoYW4gaW5pdGlhbGx5IHRob3VnaHQuIEl0IG1pZ2h0IGhhbmRsZSBjbGVhbnVwIG9yIGZpbmFsaXphdGlvbiByb3V0aW5lcywgd2hpY2ggbWFrZXMgaXQgYW4gZXZlbiBiZXR0ZXIgdGFyZ2V0IHRvIGZvY3VzIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcHBvbDJ0cF9wcm9jX3JlbGVhc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC9sMnRwX3BwcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9sMnRwL2wydHBfcHBwLmM9MTYwMT1zdGF0aWMgaW50IHBwcG9sMnRwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjItXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjE2MjM6c3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjQte1xuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTY0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBwcG9sMnRwX3Byb2Nfb3BzID0ge1xuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTY0NC1cdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2Vlayxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTY0NTpcdC5wcm9jX3JlbGVhc2VcdD0gcHBwb2wydHBfcHJvY19yZWxlYXNlLFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjQ2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMTQKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGlzIGEgZnJlc2ggYWRkaXRpb24g4oCTIHRoYXQmIzM5O3Mgc29tZXRoaW5nIHRvIG5vdGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcy4gTGV0JiMzOTtzIHRyYWNlIHRoZSBkZXBlbmRlbmNpZXM6IGBMMlRQYCBkZXBlbmRzIG9uIGBJTkVUYCwgd2hpY2ggSSBhc3N1bWUgaXMgc3RhbmRhcmQuIGBQUFBPTDJUUGAgaXRzZWxmIHJlbGllcyBvbiBgTDJUUGAsIHdoaWNoIG1ha2VzIHNlbnNlLiBgTDJUUF9ERUJVR0ZTYCBoYXMgYSBkZXBlbmRlbmN5IG9uIGJvdGggYEwyVFBgIGFuZCBgREVCVUdfRlNgLiBBbmQgSSYjMzk7bGwgYXNzdW1lIGBQUk9DX0ZTYCBpcyBnZW5lcmFsbHkgZW5hYmxlZCBhcyBpdCBpcyB1c2VkIGEgbG90LgoKVGhlcmVmb3JlLCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOiBgTDJUUGAsIGBMMlRQX0RFQlVHRlNgLCBgUFBQT0wyVFBgLCBgREVCVUdfRlNgLCBhbmQgYFBST0NfRlNgLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkgc2hvdWxkIHZlcmlmeSBpZiBgUFBQT0wyVFBgIGhhcyBhbiB1bmRlcmx5aW5nIGRlcGVuZGVuY3kgb24gYFBQUGAuIEl0IHdvdWxkIGJlIHJlbWlzcyBvZiBtZSB0byBub3QgY2hlY2sgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OmNvbmZpZyBQUFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MzU9aWYgUFBQXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0zNi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjM3OmNvbmZpZyBQUFBfQlNEQ09NUFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzgtXHR0cmlzdGF0ZSBcJiMzNDtQUFAgQlNELUNvbXByZXNzIGNvbXByZXNzaW9uXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctNTQtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo1NTpjb25maWcgUFBQX0RFRkxBVEVcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTU2LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIERlZmxhdGUgY29tcHJlc3Npb25cJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy02OC1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjY5OmNvbmZpZyBQUFBfRklMVEVSXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7UFBQIGZpbHRlcmluZ1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTgwLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6ODE6Y29uZmlnIFBQUF9NUFBFXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04Mi1cdHRyaXN0YXRlIFwmIzM0O1BQUCBNUFBFIGNvbXByZXNzaW9uIChlbmNyeXB0aW9uKVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTkxLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6OTI6Y29uZmlnIFBQUF9NVUxUSUxJTktcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTkzLVx0Ym9vbCBcJiMzNDtQUFAgbXVsdGlsaW5rIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMDQ6Y29uZmlnIFBQUE9BVE1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEFUTVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExMi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjExMzpjb25maWcgUFBQT1hcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNC1cdHRyaXN0YXRlXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTUtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTY6Y29uZmlnIFBQUE9FXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgb3ZlciBFdGhlcm5ldFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEyNz1jaG9pY2Vcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMzgtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMzk6Y29uZmlnIFBQUE9FX0hBU0hfQklUU18xXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDAtXHRib29sIFwmIzM0OzEgYml0ICgyIGJ1Y2tldHMpXCYjMzQ7XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDEtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNDI6Y29uZmlnIFBQUE9FX0hBU0hfQklUU18yXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDMtXHRib29sIFwmIzM0OzIgYml0cyAoNCBidWNrZXRzKVwmIzM0O1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ0LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQ1OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfNFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ2LVx0Ym9vbCBcJiMzNDs0IGJpdHMgKDE2IGJ1Y2tldHMpXCYjMzQ7XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDctXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNDg6Y29uZmlnIFBQUE9FX0hBU0hfQklUU184XG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDktXHRib29sIFwmIzM0OzggYml0cyAoMjU2IGJ1Y2tldHMpXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTUxPWVuZGNob2ljZVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTUyLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTUzOmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1NC1cdGludFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE2MT1jb25maWcgUFBUUFxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3Mzpjb25maWcgUFBQT0wyVFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cdHRyaXN0YXRlIFwmIzM0O1BQUCBvdmVyIEwyVFBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xODE9aWYgVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xODItXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxODM6Y29uZmlnIFBQUF9BU1lOQ1xuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTg0LVx0dHJpc3RhdGUgXCYjMzQ7UFBQIHN1cHBvcnQgZm9yIGFzeW5jIHNlcmlhbCBwb3J0c1wmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE5NS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE5Njpjb25maWcgUFBQX1NZTkNfVFRZXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xOTctXHR0cmlzdGF0ZSBcJiMzNDtQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQ3MAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIENvbmRpdGlvbmFsIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGJpdCBvZiBjb2RlIGFuZCB0cnlpbmcgdG8gcGFyc2UgdGhlIGxvZ2ljLiBJdCBzZWVtcyBsaWtlIGBQUFBPTDJUUGAgaXMgcG90ZW50aWFsbHkgbmVzdGVkIHdpdGhpbiBhbiBgaWZgIHN0YXRlbWVudCB0aGF0IGludm9sdmVzIGBQUFBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY29uZmlybSB0aGlzIHJlbGF0aW9uc2hpcCDigJMgZG9lcyBgUFBQT0wyVFBgIGFjdHVhbGx5IHJlc2lkZSBpbnNpZGUgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQmIzM5O3MgdHJpZ2dlcmVkIGJ5IGBQUFBgPyBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIG9mIGNvbnRyb2wgZmxvdywgYW5kIHVuZGVyc3RhbmRpbmcgdGhpcyBpcyBlc3NlbnRpYWwgZm9yIGFueSBkZWVwZXIgYW5hbHlzaXMgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiB3aXRoaW4gdGhpcyBjb2RlIHNlZ21lbnQuIExldCYjMzk7cyBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlIHN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWYgUFBQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcHBwL0tjb25maWc9Nj1jb25maWcgUFBQXG4tLVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzQtXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzozNTppZiBQUFBcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTM2LVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE1Mz1jb25maWcgUFBQT0VfSEFTSF9CSVRTXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNTQtXHRpbnRcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE1NTpcdGRlZmF1bHQgMSBpZiBQUFBPRV9IQVNIX0JJVFNfMVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTU2Olx0ZGVmYXVsdCAyIGlmIFBQUE9FX0hBU0hfQklUU18yXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNTc6XHRkZWZhdWx0IDQgaWYgUFBQT0VfSEFTSF9CSVRTXzRcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE1ODpcdGRlZmF1bHQgOCBpZiBQUFBPRV9IQVNIX0JJVFNfOFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTU5LVx0ZGVmYXVsdCA0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk4ODYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgSSYjMzk7bSBzcGVha2luZyB0byBhIGZlbGxvdyBleHBlcnQ6CgoqKkZpbmRpbmcgdGhlIE1hdGNoaW5nIGBlbmRpZmAqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSwgYW5kIEkgc2VlIGEgY29uZGl0aW9uYWwgYmxvY2ssIHNwZWNpZmljYWxseSBhbiBgaWYgUFBQYCBzdGF0ZW1lbnQgb24gbGluZSAzNS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hlcmUmIzM5O3MgdGhlIGNsb3NpbmcgYGVuZGlmYD8mIzM0OyBJdCYjMzk7cyBhbG1vc3QgYXV0b21hdGljLCB0aGUgcGF0dGVybiByZWNvZ25pdGlvbiBraWNraW5nIGluLiBHb3R0YSBmaW5kIHRoYXQgZW5kcG9pbnQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIHdoYXQmIzM5O3MgZ29pbmcgdG8gaGFwcGVuIHdpdGhpbiB0aGF0IGNvbmRpdGlvbmFsIGxvZ2ljLiBJIG5lZWQgdGhhdCBtYXRjaGluZyBgZW5kaWZgIHRvIGZ1bGx5IGdyYXNwIHdoYXQgdGhpcyBibG9jayBvZiBjb2RlIGlzIGRvaW5nIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LiBJdCYjMzk7cyBub3QgZW5vdWdoIHRvIHNlZSB0aGUgc3RhcnQ7IEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5kaWYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xOTY9Y29uZmlnIFBQUF9TWU5DX1RUWVxuLS1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTIwNC1cbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjIwNTplbmRpZiAjIFRUWVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMjA2LVxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MjA3OmVuZGlmICMgUFBQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTg4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2Ugbm90ZXMuIExldCBtZSBzZWUuLi4KCioqQ2hlY2tpbmcgdGhlIEwyVFAgUFBQIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgaXQgbG9va3MgbGlrZSB3ZSAqZGVmaW5pdGVseSogbmVlZCBgUFBQYCBlbmFibGVkLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBMMlRQYCwgYEwyVFBfREVCVUdGU2AsIGBQUFBgLCBgUFBQT0wyVFBgLCBgREVCVUdfRlNgLCBhbmQgYFBST0NfRlNgLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIEwyVFAgc2V0dXAsIGJ1dCBpdOKAmXMgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2guIFdlIHNlZW0gdG8gYmUgZGVhbGluZyB3aXRoIHRoZSBkZWJ1ZyBmaWxlIHN5c3RlbSBpbiBwYXJ0aWN1bGFyLgoKVGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgLCBgcHBwb2wydHBfcHJvY19vcGVuYCwgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGVzZSBzdWdnZXN0IHdl4oCZcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGVidWcgZmlsZXN5c3RlbSAobGlrZWx5IGZvciBtb25pdG9yaW5nIGFuZCBjb250cm9sKSBhbmQgdGhlIHByb2Nlc3Mtb3JpZW50ZWQgYXNwZWN0cyBvZiBQUFBvTDJUUC4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAuIEl0JiMzOTtzIGNydWNpYWwgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgcmVmZXJlbmNlIGNvdW50cyBhcmUgaGFuZGxlZCBpbiBvcmRlciB0byBhdm9pZCBsZWFrcyBvciBwcmVtYXR1cmUgY2xlYW51cC4gV2UgbmVlZCB0byBiZSBjb25maWRlbnQgdGhhdCB0aGV5IGFyZSBpbXBsZW1lbnRlZCBjb3JyZWN0bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2wydHBfc2Vzc2lvbl9wdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbDJ0cC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2wydHAvbDJ0cF9jb3JlLmM9MjA1PUVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdHVubmVsX3B1dCk7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0yMDYtXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoyMDc6dm9pZCBsMnRwX3Nlc3Npb25fcHV0KHN0cnVjdCBsMnRwX3Nlc3Npb24gKnNlc3Npb24pXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0yMDgte1xuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jLTIxMS19XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoyMTI6RVhQT1JUX1NZTUJPTF9HUEwobDJ0cF9zZXNzaW9uX3B1dCk7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0yMTMtXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmM9NTE1PXN0YXRpYyB2b2lkIGwydHBfc2Vzc2lvbl9jb2xsaXNpb25fZGVsKHN0cnVjdCBsMnRwX25ldCAqcG4sXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtNTQ4LVx0XHRcdGtmcmVlKGNsaXN0KTtcbm5ldC9sMnRwL2wydHBfY29yZS5jOjU0OTpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfY29yZS5jLTU1MC1cdH1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMDE2PWludCBsMnRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMDgwLVx0XHRpZiAoc2Vzc2lvbilcbm5ldC9sMnRwL2wydHBfY29yZS5jOjEwODE6XHRcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwODItXG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTA5MC1cdGlmICh2ZXJzaW9uICE9IHR1bm5lbC1cdTAwM2V2ZXJzaW9uKSB7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMDkxOlx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTA5Mi1cdFx0Z290byBpbnZhbGlkO1xuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwOTYtXHQgICAgbDJ0cF92M19lbnN1cmVfb3B0X2luX2xpbmVhcihzZXNzaW9uLCBza2IsIFx1MDAyNnB0ciwgXHUwMDI2b3B0cikpIHtcbm5ldC9sMnRwL2wydHBfY29yZS5jOjEwOTc6XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMDk4LVx0XHRnb3RvIGludmFsaWQ7XG4tLVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTEwMS1cdGwydHBfcmVjdl9jb21tb24oc2Vzc2lvbiwgc2tiLCBwdHIsIG9wdHIsIGhkcmZsYWdzLCBsZW5ndGgpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTEwMjpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMTAzLVxuLS1cbm5ldC9sMnRwL2wydHBfY29yZS5jPTE3NDU9c3RhdGljIHZvaWQgbDJ0cF9zZXNzaW9uX2RlbF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNzU1LVx0LyogZHJvcCBpbml0aWFsIHJlZiAqL1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTc1NjpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNzU3LVxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTc1OC1cdC8qIGRyb3Agd29ya3F1ZXVlIHJlZiAqL1xubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTc1OTpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xNzYwLX1cbi0tXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yMTI9dm9pZCBsMnRwX3R1bm5lbF9wdXQoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpO1xubmV0L2wydHAvbDJ0cF9jb3JlLmg6MjEzOnZvaWQgbDJ0cF9zZXNzaW9uX3B1dChzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfY29yZS5oLTIxNC1cbi0tXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYz01Mz1zdGF0aWMgdm9pZCBsMnRwX2Rmc19uZXh0X3Nlc3Npb24oc3RydWN0IGwydHBfZGZzX3NlcV9kYXRhICpwZClcbi0tXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy01Ni1cdGlmIChwZC1cdTAwM2VzZXNzaW9uKVxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6NTc6XHRcdGwydHBfc2Vzc2lvbl9wdXQocGQtXHUwMDNlc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy01OC1cbi0tXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYz0xMDM9c3RhdGljIHZvaWQgbDJ0cF9kZnNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KVxuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTExMy1cdGlmIChwZC1cdTAwM2VzZXNzaW9uKSB7XG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYzoxMTQ6XHRcdGwydHBfc2Vzc2lvbl9wdXQocGQtXHUwMDNlc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0xMTUtXHRcdHBkLVx1MDAzZXNlc3Npb24gPSBOVUxMO1xuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jPTMwMj1zdGF0aWMgaW50IGwydHBfZGZzX3NlcV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuLS1cbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMwOS1cdGlmIChwZC1cdTAwM2VzZXNzaW9uKVxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6MzEwOlx0XHRsMnRwX3Nlc3Npb25fcHV0KHBkLVx1MDAzZXNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtMzExLVx0aWYgKHBkLVx1MDAzZXR1bm5lbClcbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jPTIyNj1zdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuLS1cbm5ldC9sMnRwL2wydHBfZXRoLmMtMjkyLVx0XHRsMnRwX3Nlc3Npb25fZGVsZXRlKHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9ldGguYzoyOTM6XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTI5NC1cdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbi0tXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTMwMy1cbm5ldC9sMnRwL2wydHBfZXRoLmM6MzA0Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzA1LVxuLS1cbm5ldC9sMnRwL2wydHBfZXRoLmMtMzEwLWVycl9zZXNzX2Rldjpcbm5ldC9sMnRwL2wydHBfZXRoLmM6MzExOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzEyLVx0ZnJlZV9uZXRkZXYoZGV2KTtcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzEzLWVycl9zZXNzOlxubmV0L2wydHAvbDJ0cF9ldGguYzozMTQ6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9ldGguYy0zMTUtZXJyOlxuLS1cbm5ldC9sMnRwL2wydHBfaXAuYz0xMjU9c3RhdGljIGludCBsMnRwX2lwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbDJ0cC9sMnRwX2lwLmMtMTY5LVx0bDJ0cF9yZWN2X2NvbW1vbihzZXNzaW9uLCBza2IsIHB0ciwgb3B0ciwgMCwgc2tiLVx1MDAzZWxlbik7XG5uZXQvbDJ0cC9sMnRwX2lwLmM6MTcwOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfaXAuYy0xNzEtXG4tLVxubmV0L2wydHAvbDJ0cF9pcC5jLTIwMi1kaXNjYXJkX3Nlc3M6XG5uZXQvbDJ0cC9sMnRwX2lwLmM6MjAzOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfaXAuYy0yMDQtXHRnb3RvIGRpc2NhcmQ7XG4tLVxubmV0L2wydHAvbDJ0cF9pcDYuYz0xMzU9c3RhdGljIGludCBsMnRwX2lwNl9yZWN2KHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2wydHAvbDJ0cF9pcDYuYy0xNzktXHRsMnRwX3JlY3ZfY29tbW9uKHNlc3Npb24sIHNrYiwgcHRyLCBvcHRyLCAwLCBza2ItXHUwMDNlbGVuKTtcbm5ldC9sMnRwL2wydHBfaXA2LmM6MTgwOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfaXA2LmMtMTgxLVxuLS1cbm5ldC9sMnRwL2wydHBfaXA2LmMtMjEyLWRpc2NhcmRfc2Vzczpcbm5ldC9sMnRwL2wydHBfaXA2LmM6MjEzOlx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfaXA2LmMtMjE0LVx0Z290byBkaXNjYXJkO1xuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTUyOD1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNjQ5LVx0XHRcdFx0XHRcdCAgTDJUUF9DTURfU0VTU0lPTl9DUkVBVEUpO1xubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6NjUwOlx0XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy02NTEtXHRcdH1cbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz02NjA9c3RhdGljIGludCBsMnRwX25sX2NtZF9zZXNzaW9uX2RlbGV0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTY3OS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjY4MDpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy02ODEtXG4tLVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM9Njg2PXN0YXRpYyBpbnQgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9tb2RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy03MTUtXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo3MTY6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNzE3LVxuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTgwMj1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXG4tLVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODI2LVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6ODI3Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTgyOC1cbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy04MzMtZXJyX3JlZjpcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjgzNDpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy04MzUtZXJyOlxuLS1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTgzOT1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODY3LVx0XHRcdFx0XHQgc2Vzc2lvbiwgTDJUUF9DTURfU0VTU0lPTl9HRVQpIFx1MDAzYyAwKSB7XG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo4Njg6XHRcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTg2OS1cdFx0XHRsMnRwX3R1bm5lbF9wdXQodHVubmVsKTtcbi0tXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy04NzEtXHRcdH1cbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjg3MjpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTg3My1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTI1MD1zdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTMwNS1cbm5ldC9sMnRwL2wydHBfcHBwLmM6MzA2Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzA3LVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMzEwLWVycm9yX3B1dF9zZXNzOlxubmV0L2wydHAvbDJ0cF9wcHAuYzozMTE6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0zMTItZXJyb3I6XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0zMzA9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTM2NC1cbm5ldC9sMnRwL2wydHBfcHBwLmM6MzY1Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzY2LVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMzY5LWFib3J0X3B1dF9zZXNzOlxubmV0L2wydHAvbDJ0cF9wcHAuYzozNzA6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0zNzEtYWJvcnQ6XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0zOTA9c3RhdGljIHZvaWQgcHBwb2wydHBfc2Vzc2lvbl9jbG9zZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uKVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtNDA1LVx0XHQvKiBkcm9wIHJlZiB0YWtlbiB3aGVuIHdlIHJlZmVyZW5jZWQgc29ja2V0IHZpYSBza191c2VyX2RhdGEgKi9cbm5ldC9sMnRwL2wydHBfcHBwLmM6NDA2Olx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy00MDctXHR9XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz00MTI9c3RhdGljIGludCBwcHBvbDJ0cF9yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy00MzYtXHRcdC8qIGRyb3AgcmVmIHRha2VuIGJ5IHBwcG9sMnRwX3NvY2tfdG9fc2Vzc2lvbiAqL1xubmV0L2wydHAvbDJ0cF9wcHAuYzo0Mzc6XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTQzOC1cdH1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTY4OD1zdGF0aWMgaW50IHBwcG9sMnRwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyX3Vuc2l6ZWQgKnVzZXJ2YWRkcixcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTc3My1cdFx0XHRtdXRleF91bmxvY2soXHUwMDI2cHMtXHUwMDNlc2tfbG9jayk7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjc3NDpcdFx0XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy03NzUtXHRcdFx0Z290byBlbmQ7XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy04MzEtXHRpZiAoZHJvcF9yZWZjbnQpXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjgzMjpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtODMzLVx0bDJ0cF90dW5uZWxfcHV0KHR1bm5lbCk7XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz04NDI9c3RhdGljIGludCBwcHBvbDJ0cF9zZXNzaW9uX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtODcyLWVycl9zZXNzOlxubmV0L2wydHAvbDJ0cF9wcHAuYzo4NzM6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy04NzQtZXJyOlxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9ODgyPXN0YXRpYyBpbnQgcHBwb2wydHBfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtOTgzLVxubmV0L2wydHAvbDJ0cF9wcHAuYzo5ODQ6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy05ODUtZW5kOlxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTAxNT1zdGF0aWMgaW50IHBwcG9sMnRwX3R1bm5lbF9jb3B5X3N0YXRzKHN0cnVjdCBwcHBvbDJ0cF9pb2Nfc3RhdHMgKnN0YXRzLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTAzMy1cdGlmIChzZXNzaW9uLVx1MDAzZXB3dHlwZSAhPSBMMlRQX1BXVFlQRV9QUFApIHtcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTAzNDpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTAzNS1cdFx0cmV0dXJuIC1FQkFEUjtcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEwMzgtXHRwcHBvbDJ0cF9jb3B5X3N0YXRzKHN0YXRzLCBcdTAwMjZzZXNzaW9uLVx1MDAzZXN0YXRzKTtcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTAzOTpcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEwNDAtXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMDQ0PXN0YXRpYyBpbnQgcHBwb2wydHBfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEwNjUtXHRcdGlmIChzZXNzaW9uLVx1MDAzZW1hZ2ljICE9IEwyVFBfU0VTU0lPTl9NQUdJQykge1xubmV0L2wydHAvbDJ0cF9wcHAuYzoxMDY2Olx0XHRcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEwNjctXHRcdFx0cmV0dXJuIC1FQkFERjtcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTExMzktXHRpZiAoc2Vzc2lvbilcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTE0MDpcdFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTE0MS1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTEyMzI9c3RhdGljIGludCBwcHBvbDJ0cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMjY4LVxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMjY5Olx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI3MC1lbmQ6XG4tLVxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMzM4PXN0YXRpYyBpbnQgcHBwb2wydHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTM4Mi1lbmRfcHV0X3Nlc3M6XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjEzODM6XHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xubmV0L2wydHAvbDJ0cF9wcHAuYy0xMzg0LWVuZDpcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE0MjI9c3RhdGljIHZvaWQgcHBwb2wydHBfbmV4dF9zZXNzaW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZClcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE0MjUtXHRpZiAocGQtXHUwMDNlc2Vzc2lvbilcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTQyNjpcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQyNy1cbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE0NzU9c3RhdGljIHZvaWQgcHBwb2wydHBfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KVxuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQ4NS1cdGlmIChwZC1cdTAwM2VzZXNzaW9uKSB7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjE0ODY6XHRcdGwydHBfc2Vzc2lvbl9wdXQocGQtXHUwMDNlc2Vzc2lvbik7XG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE0ODctXHRcdHBkLVx1MDAzZXNlc3Npb24gPSBOVUxMO1xuLS1cbm5ldC9sMnRwL2wydHBfcHBwLmM9MTYyMz1zdGF0aWMgaW50IHBwcG9sMnRwX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjgtXHRpZiAocGQtXHUwMDNlc2Vzc2lvbilcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTYyOTpcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTYzMC1cdGlmIChwZC1cdTAwM2V0dW5uZWwpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODQ2CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDI1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTDJUUCBNb2R1bGUgU3ltYm9scyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgTDJUUCBtb2R1bGUgc3ltYm9scy4gSSBzZWUgYGwydHBfc2Vzc2lvbl9wdXRgIGFuZCBgbDJ0cF90dW5uZWxfcHV0YCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGlzIHN0YW5kYXJkLiBUaGVuIEkmIzM5O20gbm90aWNpbmcgdGhhdCBgcHBwb2wydHBfcHJvY19vcGVuYCBhbmQgYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAgYXJlICpzdGF0aWMqIGZ1bmN0aW9ucywgdHVja2VkIGF3YXkgaW4gYG5ldC9sMnRwL2wydHBfcHBwLmNgLiBTaW1pbGFybHksIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAgaXMgc3RhdGljIHRvbywgdGhpcyBvbmUgcmVzaWRpbmcgaW4gYG5ldC9sMnRwL2wydHBfZGVidWdmcy5jYC4KCk15IGluaXRpYWwgdGhvdWdodCBpcywgJiMzNDtIbW0sIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGEgYml0IHRyaWNraWVyLiYjMzQ7IFRoZXkgKm1pZ2h0KiBiZSBpbmxpbmVkIGFuZCB0aGVuLCBmb3JnZXQgYWJvdXQgZGlyZWN0IGZ1enppbmcgYnkgbmFtZS4gSG93ZXZlciwgc2luY2UgdGhleSYjMzk7cmUgYmVpbmcgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYGZpbGVfb3BlcmF0aW9uc2AgYW5kIGBwcm9jX29wc2Agc3RydWN0dXJlcywgSSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5ICphcmVuJiMzOTt0KiBpbmxpbmVkLiBUaGV5JiMzOTtsbCBoYXZlIGRpc2NyZXRlIHN5bWJvbCBhZGRyZXNzZXMuIFRoYXQgbWVhbnMgdGhleSBhcmUgcGVyZmVjdGx5IHZhbGlkIHRhcmdldHMuCgpMZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGxlYWRzLiBZZXAsIGl0IGxvb2tzIGxpa2UgYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4KCldhaXQgYSBzZWNvbmQuLi4gKmJvdGgqIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCBhcmUgKm5ldyogZnVuY3Rpb25zLiBBbmQgdGhlIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAgZnVuY3Rpb24gaXMgYSAqbW9kaWZpZWQqIGV4aXN0aW5nIGZ1bmN0aW9uLiBBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCBJJiMzOTttIGRlYWxpbmcgd2l0aC4gTGV0JiMzOTtzIG1ha2UgYSBub3RlIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMMlRQJiMzNDssCiAgICAmIzM0O0wyVFBfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtQUFAmIzM0OywKICAgICYjMzQ7UFBQT0wyVFAmIzM0OywKICAgICYjMzQ7REVCVUdfRlMmIzM0OywKICAgICYjMzQ7UFJPQ19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2wydHBfZGZzX3NlcV9yZWxlYXNlJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3Byb2Nfb3BlbiYjMzQ7LAogICAgJiMzNDtwcHBvbDJ0cF9wcm9jX3JlbGVhc2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgcmVzb3VyY2UgbGVha3MgaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb25zIG9mIEwyVFAgZGVidWdmcyBhbmQgcHJvY2ZzIHNlcV9maWxlcyBieSBhZGRpbmcgbWlzc2luZyBsMnRwX3Nlc3Npb25fcHV0IGFuZCBsMnRwX3R1bm5lbF9wdXQgY2FsbHMuIEl0IGFsc28gaW50cm9kdWNlcyBuZXcgcHJvY2ZzIG9wZW4gYW5kIHJlbGVhc2UgZnVuY3Rpb25zIGZvciBwcHBvbDJ0cC4gVGhlc2UgY2hhbmdlcyBhcmUgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIGJ5IG9wZW5pbmcgYW5kIGNsb3NpbmcgdGhlIHJlc3BlY3RpdmUgZGVidWdmcyBhbmQgcHJvY2ZzIGZpbGVzLCBhbmQgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IG9uIHJlc291cmNlIG1hbmFnZW1lbnQsIG1ha2luZyB0aGVtIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0wyVFAmIzM0OywKICAgICYjMzQ7TDJUUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O1BQUCYjMzQ7LAogICAgJiMzNDtQUFBPTDJUUCYjMzQ7LAogICAgJiMzNDtERUJVR19GUyYjMzQ7LAogICAgJiMzNDtQUk9DX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bDJ0cF9kZnNfc2VxX3JlbGVhc2UmIzM0OywKICAgICYjMzQ7cHBwb2wydHBfcHJvY19vcGVuJiMzNDssCiAgICAmIzM0O3BwcG9sMnRwX3Byb2NfcmVsZWFzZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgb2YgTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgc2VxX2ZpbGVzIGJ5IGFkZGluZyBtaXNzaW5nIGwydHBfc2Vzc2lvbl9wdXQgYW5kIGwydHBfdHVubmVsX3B1dCBjYWxscy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG5ldyBwcm9jZnMgb3BlbiBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgZm9yIHBwcG9sMnRwLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgY2xvc2luZyB0aGUgcmVzcGVjdGl2ZSBkZWJ1Z2ZzIGFuZCBwcm9jZnMgZmlsZXMsIGFuZCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVzb3VyY2UgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTAgMTY6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyByZWZlcmVuY2UgY291bnQgbGVha3MgaW4gTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgYnkgYWRkaW5nIG1pc3NpbmcgYGwydHBfc2Vzc2lvbl9wdXRgIGFuZCBgbDJ0cF90dW5uZWxfcHV0YCBjYWxscyBpbiB0aGUgcmVsZWFzZSBoYW5kbGVycy4gSXQgYWxzbyByZXBsYWNlcyBgcHJvY19jcmVhdGVfbmV0YCB3aXRoIGBwcm9jX2NyZWF0ZV9kYXRhYCBhbmQgY3VzdG9tIGBwcm9jX29wc2AgdG8gZW5zdXJlIHRoZSByZWxlYXNlIGhhbmRsZXIgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5L3JlZmNvdW50IGxlYWtzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBLTUVNTEVBSywgYW5kIHJlZmNvdW50IGNoZWNraW5nLiBUaGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAodmlhIGBfX3NlcV9vcGVuX3ByaXZhdGVgKSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDliZjNiOWNlMmRiMWY5ZjAwZGQ2ZDAxYjBkYjE4NDUwNjBiYWU3OGMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAxMCAxNjoxNzozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jIGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMKaW5kZXggYjI2OTg2ZmRhOWQ2Yy4uYzEyZDVlMWVlNTUwYyAxMDA2NDQKLS0tIGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMKQEAgLTMwNiw2ICYjNDM7MzA2LDEwIEBAIHN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiAKIAlzZXEgPSBmaWxlLSZndDtwcml2YXRlX2RhdGE7CiAJcGQgPSBzZXEtJmd0O3ByaXZhdGU7CiYjNDM7CWlmIChwZC0mZ3Q7c2Vzc2lvbikKJiM0MzsJCWwydHBfc2Vzc2lvbl9wdXQocGQtJmd0O3Nlc3Npb24pOwomIzQzOwlpZiAocGQtJmd0O3R1bm5lbCkKJiM0MzsJCWwydHBfdHVubmVsX3B1dChwZC0mZ3Q7dHVubmVsKTsKIAlpZiAocGQtJmd0O25ldCkKIAkJcHV0X25ldF90cmFjayhwZC0mZ3Q7bmV0LCAmYW1wO3BkLSZndDtuc190cmFja2VyKTsKIAlrZnJlZShwZCk7CmRpZmYgLS1naXQgYS9uZXQvbDJ0cC9sMnRwX3BwcC5jIGIvbmV0L2wydHAvbDJ0cF9wcHAuYwppbmRleCBmODg4MTY5OWUxY2FkLi4xYmNmNDQ3ZjJmOGIwIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9sMnRwL2wydHBfcHBwLmMKQEAgLTE1OTcsNiAmIzQzOzE1OTcsNTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0gewogCS5zdG9wCQk9IHBwcG9sMnRwX3NlcV9zdG9wLAogCS5zaG93CQk9IHBwcG9sMnRwX3NlcV9zaG93LAogfTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldCA9IHBkZV9kYXRhKGlub2RlKTsKJiM0MzsJc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZDsKJiM0MzsKJiM0MzsJbmV0ID0gbWF5YmVfZ2V0X25ldChuZXQpOwomIzQzOwlpZiAoIW5ldCkKJiM0MzsJCXJldHVybiAtRU5YSU87CiYjNDM7CiYjNDM7CXBkID0gX19zZXFfb3Blbl9wcml2YXRlKGZpbGUsICZhbXA7cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKCpwZCkpOwomIzQzOwlpZiAoIXBkKSB7CiYjNDM7CQlwdXRfbmV0KG5ldCk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfTkVUX05TCiYjNDM7CXBkLSZndDtwLm5ldCA9IG5ldDsKJiM0MzsJbmV0bnNfdHJhY2tlcl9hbGxvYyhuZXQsICZhbXA7cGQtJmd0O3AubnNfdHJhY2tlciwgR0ZQX0tFUk5FTCk7CiYjNDM7I2VuZGlmCiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS0mZ3Q7cHJpdmF0ZV9kYXRhOwomIzQzOwlzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkID0gc2VxLSZndDtwcml2YXRlOwomIzQzOwomIzQzOwlpZiAocGQtJmd0O3Nlc3Npb24pCiYjNDM7CQlsMnRwX3Nlc3Npb25fcHV0KHBkLSZndDtzZXNzaW9uKTsKJiM0MzsJaWYgKHBkLSZndDt0dW5uZWwpCiYjNDM7CQlsMnRwX3R1bm5lbF9wdXQocGQtJmd0O3R1bm5lbCk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19ORVRfTlMKJiM0MzsJcHV0X25ldF90cmFjayhwZC0mZ3Q7cC5uZXQsICZhbXA7cGQtJmd0O3AubnNfdHJhY2tlcik7CiYjNDM7I2Vsc2UKJiM0MzsJcHV0X25ldCgmYW1wO2luaXRfbmV0KTsKJiM0MzsjZW5kaWYKJiM0MzsJcmV0dXJuIHNlcV9yZWxlYXNlX3ByaXZhdGUoaW5vZGUsIGZpbGUpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBwcG9sMnRwX3Byb2Nfb3BzID0gewomIzQzOwkucHJvY19vcGVuCT0gcHBwb2wydHBfcHJvY19vcGVuLAomIzQzOwkucHJvY19yZWFkCT0gc2VxX3JlYWQsCiYjNDM7CS5wcm9jX2xzZWVrCT0gc2VxX2xzZWVrLAomIzQzOwkucHJvY19yZWxlYXNlCT0gcHBwb2wydHBfcHJvY19yZWxlYXNlLAomIzQzO307CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xNjA4LDggJiM0MzsxNjU1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9sMnRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKIAlpbnQgZXJyID0gMDsKIAotCXBkZSA9IHByb2NfY3JlYXRlX25ldCgmIzM0O3BwcG9sMnRwJiMzNDssIDA0NDQsIG5ldC0mZ3Q7cHJvY19uZXQsCi0JCQkgICAgICAmYW1wO3BwcG9sMnRwX3NlcV9vcHMsIHNpemVvZihzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEpKTsKJiM0MzsJcGRlID0gcHJvY19jcmVhdGVfZGF0YSgmIzM0O3BwcG9sMnRwJiMzNDssIDA0NDQsIG5ldC0mZ3Q7cHJvY19uZXQsCiYjNDM7CQkJICAgICAgICZhbXA7cHBwb2wydHBfcHJvY19vcHMsIG5ldCk7CiAJaWYgKCFwZGUpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMCAxNjoxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODgyCgkJCQkJCQlvdXRwdXQ6IDE4NAoJCQkJCQkJdGhvdWdodHM6IDg3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipMMlRQIFJlZmVyZW5jZSBMZWFrIEZpeDogQSBRdWljayBSZXZpZXcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIEwyVFAsIHNwZWNpZmljYWxseSBpbiBgbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNgIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIEl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGFkZHJlc3NpbmcgYSBjbGFzc2ljIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZSwgd2hpY2ggSSBsaWtlIHRvIHNlZSBhZGRyZXNzZWQuCgpJbiBgbDJ0cF9kZWJ1Z2ZzLmNgLCB0aGUgcGF0Y2ggYWRkcyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIHdpdGhpbiB0aGUgYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbC4gRXNzZW50aWFsbHksIHdoZW4gdGhlIGRlYnVnZnMgZmlsZSBpcyBjbG9zZWQsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgcmVmZXJlbmNlcyBoZWxkIG9uIHRoZSBzZXNzaW9uIGFuZCB0dW5uZWwuIE90aGVyd2lzZSwgd2UmIzM5O3JlIHN0YXJpbmcgZG93biB0aGUgYmFycmVsIG9mIGVpdGhlciBhIG1lbW9yeSBsZWFrIG9yIGEgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW8sIHdoaWNoIGlzIGEgYmlnIG5vLW5vLCBhcyB3ZSBib3RoIGtub3cuIFRoZSBvbGQgY29kZSB3YXMganVzdCAqbWlzc2luZyogdGhlc2UgYHB1dGAgY2FsbHMuCgpUaGUgY2hhbmdlcyBpbiBgbDJ0cF9wcHAuY2AgbWlycm9yIHRoaXMuIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgdGhlIHByb2MgZmlsZSBoYW5kbGluZy4gTm93LCBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgdGhlIHN0YW5kYXJkIGBwcm9jX2NyZWF0ZV9uZXRgIGFuZCBgc2VxX29wZW5gLCB0aGlzIHBhdGNoIGJyaW5ncyBpbiBgcHJvY19jcmVhdGVfZGF0YWAgYW5kIGN1c3RvbSBgcHJvY19vcHNgLCBzcGVjaWZpY2FsbHkgYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwcm9jIGZpbGUgaXMgY2xvc2VkLCB0aGUgc2Vzc2lvbiBhbmQgdHVubmVsIHJlZmVyZW5jZXMgYXJlIHByb3Blcmx5IGRlY3JlbWVudGVkLCBwcmV2ZW50aW5nIHNpbWlsYXIgbGVha3MuIEFnYWluLCB0aGlzIGlzIGFsbCBhYm91dCBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudCwgYW5kIEkgYW0gZ2xhZCB0byBzZWUgaXQgaGVyZS4KCkkmIzM5O3ZlIHRha2VuIGEgcXVpY2sgZ2xhbmNlIGF0IHRoZSBjb2RlLCBwYXJ0aWN1bGFybHkgYXQgYF9fc2VxX29wZW5fcHJpdmF0ZWAsIGFuZCBpdCBhcHBlYXJzIHRoYXQgYHBkYCAodGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUpIGlzIGBremFsbG9jYCYjMzk7ZCwgd2hpY2ggbWVhbnMgaXQmIzM5O3MgemVyby1pbml0aWFsaXplZC4gVGhpcyBtZWFucyBgcGQtJmd0O3Nlc3Npb25gIGFuZCBgcGQtJmd0O3R1bm5lbGAgc3RhcnQgb3V0IGFzIE5VTEwuIFNvIHRoZXJlJiMzOTtzIG5vIHJpc2sgb2YgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgd2hpY2ggaXMgZ3JlYXQuCgpFc3NlbnRpYWxseSwgdGhpcyBpcyBhIGNsZWFuIGZpeCBmb3IgYSByZWZlcmVuY2UgY291bnRpbmcgbGVhay4gSSBhbSBjb25maWRlbnQgdGhhdCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgbm90IGxlYWtpbmcgYW55IHNlbnNpdGl2ZSBkYXRhLiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIEtBU0FOL0tNRU1MRUFLIG9yIHJlZ3VsYXIgcmVmY291bnQgZGVidWdnaW5nIHdvdWxkIGhhdmUgY2F1Z2h0IHRoZXNlIGlzc3VlcyBhbnl3YXksIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gYWRkcmVzcyB0aGVtLiBPdmVyYWxsLCBnb29kIHdvcms7IGEgc2ltcGxlLCBlZmZlY3RpdmUgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEwIDE2OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlZmVyZW5jZSBjb3VudCBsZWFrcyBpbiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBieSBhZGRpbmcgbWlzc2luZyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIGluIHRoZSByZWxlYXNlIGhhbmRsZXJzLiBJdCBhbHNvIHJlcGxhY2VzIGBwcm9jX2NyZWF0ZV9uZXRgIHdpdGggYHByb2NfY3JlYXRlX2RhdGFgIGFuZCBjdXN0b20gYHByb2Nfb3BzYCB0byBlbnN1cmUgdGhlIHJlbGVhc2UgaGFuZGxlciBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkvcmVmY291bnQgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtNRU1MRUFLLCBhbmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgICh2aWEgYF9fc2VxX29wZW5fcHJpdmF0ZWApLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHJlZmVyZW5jZSBjb3VudCBsZWFrcyBpbiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBieSBhZGRpbmcgbWlzc2luZyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIGluIHRoZSByZWxlYXNlIGhhbmRsZXJzLiBJdCBhbHNvIHJlcGxhY2VzIGBwcm9jX2NyZWF0ZV9uZXRgIHdpdGggYHByb2NfY3JlYXRlX2RhdGFgIGFuZCBjdXN0b20gYHByb2Nfb3BzYCB0byBlbnN1cmUgdGhlIHJlbGVhc2UgaGFuZGxlciBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkvcmVmY291bnQgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtNRU1MRUFLLCBhbmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgICh2aWEgYF9fc2VxX29wZW5fcHJpdmF0ZWApLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTc6MzMuMzI4MDA0NjczWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE3ODAxNDE1NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTDJUUFwiLFxuICAgIFwiTDJUUF9ERUJVR0ZTXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJERUJVR19GU1wiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImwydHBfZGZzX3NlcV9yZWxlYXNlXCIsXG4gICAgXCJwcHBvbDJ0cF9wcm9jX29wZW5cIixcbiAgICBcInBwcG9sMnRwX3Byb2NfcmVsZWFzZVwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVmZXJlbmNlIGNvdW50IGxlYWtzIGluIEwyVFAgZGVidWdmcyBhbmQgcHJvY2ZzIGJ5IGFkZGluZyBtaXNzaW5nIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAgY2FsbHMgaW4gdGhlIHJlbGVhc2UgaGFuZGxlcnMuIEl0IGFsc28gcmVwbGFjZXMgYHByb2NfY3JlYXRlX25ldGAgd2l0aCBgcHJvY19jcmVhdGVfZGF0YWAgYW5kIGN1c3RvbSBgcHJvY19vcHNgIHRvIGVuc3VyZSB0aGUgcmVsZWFzZSBoYW5kbGVyIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeS9yZWZjb3VudCBsZWFrcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgS01FTUxFQUssIGFuZCByZWZjb3VudCBjaGVja2luZy4gVGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKHZpYSBgX19zZXFfb3Blbl9wcml2YXRlYCksIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSByZWxlYXNlIGZ1bmN0aW9ucyBvZiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBzZXFfZmlsZXMgYnkgYWRkaW5nIG1pc3NpbmcgbDJ0cF9zZXNzaW9uX3B1dCBhbmQgbDJ0cF90dW5uZWxfcHV0IGNhbGxzLiBJdCBhbHNvIGludHJvZHVjZXMgbmV3IHByb2NmcyBvcGVuIGFuZCByZWxlYXNlIGZ1bmN0aW9ucyBmb3IgcHBwb2wydHAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSByZXNwZWN0aXZlIGRlYnVnZnMgYW5kIHByb2NmcyBmaWxlcywgYW5kIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzozMy4zMjgwMTI1MTNaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NzgzMTA3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDliZjNiOWNlMmRiMWY5ZjAwZGQ2ZDAxYjBkYjE4NDUwNjBiYWU3OGNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMTAgMTY6MTc6MzIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xcbmluZGV4IGIyNjk4NmZkYTlkNmMuLmMxMmQ1ZTFlZTU1MGMgMTAwNjQ0XFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNcXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xcbkBAIC0zMDYsNiArMzA2LDEwIEBAIHN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuIFxcbiBcXHRzZXEgPSBmaWxlLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIFxcdHBkID0gc2VxLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRpZiAocGQtXFx1MDAzZXNlc3Npb24pXFxuK1xcdFxcdGwydHBfc2Vzc2lvbl9wdXQocGQtXFx1MDAzZXNlc3Npb24pO1xcbitcXHRpZiAocGQtXFx1MDAzZXR1bm5lbClcXG4rXFx0XFx0bDJ0cF90dW5uZWxfcHV0KHBkLVxcdTAwM2V0dW5uZWwpO1xcbiBcXHRpZiAocGQtXFx1MDAzZW5ldClcXG4gXFx0XFx0cHV0X25ldF90cmFjayhwZC1cXHUwMDNlbmV0LCBcXHUwMDI2cGQtXFx1MDAzZW5zX3RyYWNrZXIpO1xcbiBcXHRrZnJlZShwZCk7XFxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXFxuaW5kZXggZjg4ODE2OTllMWNhZC4uMWJjZjQ0N2YyZjhiMCAxMDA2NDRcXG4tLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jXFxuKysrIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xcbkBAIC0xNTk3LDYgKzE1OTcsNTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcHBvbDJ0cF9zZXFfb3BzID0ge1xcbiBcXHQuc3RvcFxcdFxcdD0gcHBwb2wydHBfc2VxX3N0b3AsXFxuIFxcdC5zaG93XFx0XFx0PSBwcHBvbDJ0cF9zZXFfc2hvdyxcXG4gfTtcXG4rXFxuK3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldCA9IHBkZV9kYXRhKGlub2RlKTtcXG4rXFx0c3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZDtcXG4rXFxuK1xcdG5ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcXG4rXFx0aWYgKCFuZXQpXFxuK1xcdFxcdHJldHVybiAtRU5YSU87XFxuK1xcbitcXHRwZCA9IF9fc2VxX29wZW5fcHJpdmF0ZShmaWxlLCBcXHUwMDI2cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKCpwZCkpO1xcbitcXHRpZiAoIXBkKSB7XFxuK1xcdFxcdHB1dF9uZXQobmV0KTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFxuKyNpZmRlZiBDT05GSUdfTkVUX05TXFxuK1xcdHBkLVxcdTAwM2VwLm5ldCA9IG5ldDtcXG4rXFx0bmV0bnNfdHJhY2tlcl9hbGxvYyhuZXQsIFxcdTAwMjZwZC1cXHUwMDNlcC5uc190cmFja2VyLCBHRlBfS0VSTkVMKTtcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4re1xcbitcXHRzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4rXFx0c3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZCA9IHNlcS1cXHUwMDNlcHJpdmF0ZTtcXG4rXFxuK1xcdGlmIChwZC1cXHUwMDNlc2Vzc2lvbilcXG4rXFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cXHUwMDNlc2Vzc2lvbik7XFxuK1xcdGlmIChwZC1cXHUwMDNldHVubmVsKVxcbitcXHRcXHRsMnRwX3R1bm5lbF9wdXQocGQtXFx1MDAzZXR1bm5lbCk7XFxuK1xcbisjaWZkZWYgQ09ORklHX05FVF9OU1xcbitcXHRwdXRfbmV0X3RyYWNrKHBkLVxcdTAwM2VwLm5ldCwgXFx1MDAyNnBkLVxcdTAwM2VwLm5zX3RyYWNrZXIpO1xcbisjZWxzZVxcbitcXHRwdXRfbmV0KFxcdTAwMjZpbml0X25ldCk7XFxuKyNlbmRpZlxcbitcXHRyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcHBwb2wydHBfcHJvY19vcHMgPSB7XFxuK1xcdC5wcm9jX29wZW5cXHQ9IHBwcG9sMnRwX3Byb2Nfb3BlbixcXG4rXFx0LnByb2NfcmVhZFxcdD0gc2VxX3JlYWQsXFxuK1xcdC5wcm9jX2xzZWVrXFx0PSBzZXFfbHNlZWssXFxuK1xcdC5wcm9jX3JlbGVhc2VcXHQ9IHBwcG9sMnRwX3Byb2NfcmVsZWFzZSxcXG4rfTtcXG4gI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovXFxuIFxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG5AQCAtMTYwOCw4ICsxNjU1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9sMnRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcXG4gXFx0c3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGU7XFxuIFxcdGludCBlcnIgPSAwO1xcbiBcXG4tXFx0cGRlID0gcHJvY19jcmVhdGVfbmV0KFxcXCJwcHBvbDJ0cFxcXCIsIDA0NDQsIG5ldC1cXHUwMDNlcHJvY19uZXQsXFxuLVxcdFxcdFxcdCAgICAgIFxcdTAwMjZwcHBvbDJ0cF9zZXFfb3BzLCBzaXplb2Yoc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhKSk7XFxuK1xcdHBkZSA9IHByb2NfY3JlYXRlX2RhdGEoXFxcInBwcG9sMnRwXFxcIiwgMDQ0NCwgbmV0LVxcdTAwM2Vwcm9jX25ldCxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZwcHBvbDJ0cF9wcm9jX29wcywgbmV0KTtcXG4gXFx0aWYgKCFwZGUpIHtcXG4gXFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjMzLjg4NjM5NzAxNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjU5NDEwNzY3Nzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfREVCVUdGU1wiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsMnRwX2Rmc19zZXFfcmVsZWFzZVwiLFxuICAgIFwicHBwb2wydHBfcHJvY19vcGVuXCIsXG4gICAgXCJwcHBvbDJ0cF9wcm9jX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgb2YgTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgc2VxX2ZpbGVzIGJ5IGFkZGluZyBtaXNzaW5nIGwydHBfc2Vzc2lvbl9wdXQgYW5kIGwydHBfdHVubmVsX3B1dCBjYWxscy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG5ldyBwcm9jZnMgb3BlbiBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgZm9yIHBwcG9sMnRwLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgY2xvc2luZyB0aGUgcmVzcGVjdGl2ZSBkZWJ1Z2ZzIGFuZCBwcm9jZnMgZmlsZXMsIGFuZCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVzb3VyY2UgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOWJmM2I5Y2UyZGIxZjlmMDBkZDZkMDFiMGRiMTg0NTA2MGJhZTc4Y1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDEwIDE2OjE3OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuaW5kZXggYjI2OTg2ZmRhOWQ2Yy4uYzEyZDVlMWVlNTUwYyAxMDA2NDRcbi0tLSBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jXG4rKysgYi9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuQEAgLTMwNiw2ICszMDYsMTAgQEAgc3RhdGljIGludCBsMnRwX2Rmc19zZXFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcbiBcdHNlcSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuIFx0cGQgPSBzZXEtXHUwMDNlcHJpdmF0ZTtcbitcdGlmIChwZC1cdTAwM2VzZXNzaW9uKVxuK1x0XHRsMnRwX3Nlc3Npb25fcHV0KHBkLVx1MDAzZXNlc3Npb24pO1xuK1x0aWYgKHBkLVx1MDAzZXR1bm5lbClcbitcdFx0bDJ0cF90dW5uZWxfcHV0KHBkLVx1MDAzZXR1bm5lbCk7XG4gXHRpZiAocGQtXHUwMDNlbmV0KVxuIFx0XHRwdXRfbmV0X3RyYWNrKHBkLVx1MDAzZW5ldCwgXHUwMDI2cGQtXHUwMDNlbnNfdHJhY2tlcik7XG4gXHRrZnJlZShwZCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2wydHAvbDJ0cF9wcHAuYyBiL25ldC9sMnRwL2wydHBfcHBwLmNcbmluZGV4IGY4ODgxNjk5ZTFjYWQuLjFiY2Y0NDdmMmY4YjAgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX3BwcC5jXG4rKysgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5AQCAtMTU5Nyw2ICsxNTk3LDUzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2wydHBfc2VxX29wcyA9IHtcbiBcdC5zdG9wXHRcdD0gcHBwb2wydHBfc2VxX3N0b3AsXG4gXHQuc2hvd1x0XHQ9IHBwcG9sMnRwX3NlcV9zaG93LFxuIH07XG4rXG4rc3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0ID0gcGRlX2RhdGEoaW5vZGUpO1xuK1x0c3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZDtcbitcbitcdG5ldCA9IG1heWJlX2dldF9uZXQobmV0KTtcbitcdGlmICghbmV0KVxuK1x0XHRyZXR1cm4gLUVOWElPO1xuK1xuK1x0cGQgPSBfX3NlcV9vcGVuX3ByaXZhdGUoZmlsZSwgXHUwMDI2cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKCpwZCkpO1xuK1x0aWYgKCFwZCkge1xuK1x0XHRwdXRfbmV0KG5ldCk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1xuKyNpZmRlZiBDT05GSUdfTkVUX05TXG4rXHRwZC1cdTAwM2VwLm5ldCA9IG5ldDtcbitcdG5ldG5zX3RyYWNrZXJfYWxsb2MobmV0LCBcdTAwMjZwZC1cdTAwM2VwLm5zX3RyYWNrZXIsIEdGUF9LRVJORUwpO1xuKyNlbmRpZlxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBzZXFfZmlsZSAqc2VxID0gZmlsZS1cdTAwM2Vwcml2YXRlX2RhdGE7XG4rXHRzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEgKnBkID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXG4rXHRpZiAocGQtXHUwMDNlc2Vzc2lvbilcbitcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbitcdGlmIChwZC1cdTAwM2V0dW5uZWwpXG4rXHRcdGwydHBfdHVubmVsX3B1dChwZC1cdTAwM2V0dW5uZWwpO1xuK1xuKyNpZmRlZiBDT05GSUdfTkVUX05TXG4rXHRwdXRfbmV0X3RyYWNrKHBkLVx1MDAzZXAubmV0LCBcdTAwMjZwZC1cdTAwM2VwLm5zX3RyYWNrZXIpO1xuKyNlbHNlXG4rXHRwdXRfbmV0KFx1MDAyNmluaXRfbmV0KTtcbisjZW5kaWZcbitcdHJldHVybiBzZXFfcmVsZWFzZV9wcml2YXRlKGlub2RlLCBmaWxlKTtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwcHBvbDJ0cF9wcm9jX29wcyA9IHtcbitcdC5wcm9jX29wZW5cdD0gcHBwb2wydHBfcHJvY19vcGVuLFxuK1x0LnByb2NfcmVhZFx0PSBzZXFfcmVhZCxcbitcdC5wcm9jX2xzZWVrXHQ9IHNlcV9sc2VlayxcbitcdC5wcm9jX3JlbGVhc2VcdD0gcHBwb2wydHBfcHJvY19yZWxlYXNlLFxuK307XG4gI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovXG4gXG4gLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5AQCAtMTYwOCw4ICsxNjU1LDggQEAgc3RhdGljIF9fbmV0X2luaXQgaW50IHBwcG9sMnRwX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldClcbiBcdHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlO1xuIFx0aW50IGVyciA9IDA7XG4gXG4tXHRwZGUgPSBwcm9jX2NyZWF0ZV9uZXQoXCJwcHBvbDJ0cFwiLCAwNDQ0LCBuZXQtXHUwMDNlcHJvY19uZXQsXG4tXHRcdFx0ICAgICAgXHUwMDI2cHBwb2wydHBfc2VxX29wcywgc2l6ZW9mKHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSkpO1xuK1x0cGRlID0gcHJvY19jcmVhdGVfZGF0YShcInBwcG9sMnRwXCIsIDA0NDQsIG5ldC1cdTAwM2Vwcm9jX25ldCxcbitcdFx0XHQgICAgICAgXHUwMDI2cHBwb2wydHBfcHJvY19vcHMsIG5ldCk7XG4gXHRpZiAoIXBkZSkge1xuIFx0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjMzLjg4NjM5ODE3NloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxMTU3ODQxNTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMMlRQIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyB0b3VjaGluZyBgbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNgIGFuZCBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMuIEluIGBsMnRwX2RlYnVnZnMuY2AsIHRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZS4gVGhleSd2ZSBhZGRlZCBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIHRvIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAuIFRoaXMgbGlrZWx5IG1lYW5zIHRoZXkncmUgYWltaW5nIHRvIHByb3Blcmx5IGRlY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50cyBmb3Igc2Vzc2lvbnMgYW5kIHR1bm5lbHMgd2hlbiByZXNvdXJjZXMgYXJlIHJlbGVhc2VkIHRocm91Z2ggdGhlIGRlYnVnZnMgaW50ZXJmYWNlLCB3aGljaCBpcyBhIGdvb2QgcHJhY3RpY2UgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuXG5cbk5vdywgbW92aW5nIHRvIGBsMnRwX3BwcC5jYCwgaXQgc2VlbXMgd2UgYXJlIGRlYWxpbmcgd2l0aCBjaGFuZ2VzIHJlbGF0ZWQgdG8gUFBQIG92ZXIgTDJUUCBzdXBwb3J0LiBUaGV5J3ZlIGFkZGVkIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCwgYW5kIGFyZSByZXBsYWNpbmcgYHByb2NfY3JlYXRlX25ldGAgd2l0aCBgcHJvY19jcmVhdGVfZGF0YWAgdXNpbmcgYHBwcG9sMnRwX3Byb2Nfb3BzYC4gVGhpcyBzdWdnZXN0cyB0aGV5J3JlIHJlZmFjdG9yaW5nIGhvdyB0aGUgUFBQIG92ZXIgTDJUUCBpbnRlcmZhY2UgaW50ZXJhY3RzIHdpdGggdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQncyBsaWtlbHkgYW4gZWZmb3J0IHRvIGltcHJvdmUgbWFuYWdlbWVudCBvciBpbnRyb2R1Y2UgbW9yZSBkYXRhIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG5ldHdvcmsgbmFtZXNwYWNlLlxuXG5HaXZlbiB0aGVzZSBjaGFuZ2VzLCBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgdG8gd29yayBjb3JyZWN0bHkuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgYENPTkZJR19MMlRQYCwgYENPTkZJR19MMlRQX0RFQlVHRlNgLCBgQ09ORklHX1BQUE9MMlRQYCwgYW5kIGBDT05GSUdfUFJPQ19GU2AgYXJlIGFsbCBlbmFibGVkLCBhcyB0aGVzZSBzZWVtIHRvIGJlIHRoZSBkZXBlbmRlbmNpZXMgYmFzZWQgb24gdGhlIGZpbGUgcGF0aHMuIEknbGwgcXVpY2tseSBsb29rIHVwIGluIGBuZXQvbDJ0cC9LY29uZmlnYCB0byBiZSBzdXJlIEknbSB1c2luZyB0aGUgZXhhY3QgY29uZmlnIG5hbWVzLiBGcm9tIHRoZXJlLCBJIGNhbiBlbnN1cmUgdGhpcyBwYXRjaCBpcyBzZXQgdXAgcHJvcGVybHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMTMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzozOS4wMDIxODQ0NjhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMyNzQ3MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEwyVFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9LY29uZmlnLTUtXFxubmV0L2wydHAvS2NvbmZpZzo2Om1lbnVjb25maWcgTDJUUFxcbm5ldC9sMnRwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiTGF5ZXIgVHdvIFR1bm5lbGluZyBQcm90b2NvbCAoTDJUUClcXFwiXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnLTM1LVxcbm5ldC9sMnRwL0tjb25maWc6MzY6Y29uZmlnIEwyVFBfREVCVUdGU1xcbm5ldC9sMnRwL0tjb25maWctMzctXFx0dHJpc3RhdGUgXFxcIkwyVFAgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy00OC1cXG5uZXQvbDJ0cC9LY29uZmlnOjQ5OmNvbmZpZyBMMlRQX1YzXFxubmV0L2wydHAvS2NvbmZpZy01MC1cXHRib29sIFxcXCJMMlRQdjMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9sMnRwL0tjb25maWctNjktXFxubmV0L2wydHAvS2NvbmZpZzo3MDpjb25maWcgTDJUUF9JUFxcbm5ldC9sMnRwL0tjb25maWctNzEtXFx0dHJpc3RhdGUgXFxcIkwyVFAgSVAgZW5jYXBzdWxhdGlvbiBmb3IgTDJUUHYzXFxcIlxcbi0tXFxubmV0L2wydHAvS2NvbmZpZy04Ni1cXG5uZXQvbDJ0cC9LY29uZmlnOjg3OmNvbmZpZyBMMlRQX0VUSFxcbm5ldC9sMnRwL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIkwyVFAgZXRoZXJuZXQgcHNldWRvd2lyZSBzdXBwb3J0IGZvciBMMlRQdjNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjM5LjA4NTQ2MzY3OVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4Nzg1ODQ5NjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyB0aGUgc3VtbWFyeSwgcmVuZGVyZWQgYXMgYSBmaXJzdC1wZXJzb24gdGhvdWdodCBwcm9jZXNzLCBrZWVwaW5nIGluIG1pbmQgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0OlxuXG4qKkxvY2F0aW5nIFBQUE9MMlRQIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGBQUFBPTDJUUGAuIExldCBtZSB0aGluay4uLiBXaGVyZSB3b3VsZCBzb21ldGhpbmcgbGlrZSB0aGF0IGxvZ2ljYWxseSByZXNpZGUgaW4gYSBrZXJuZWwgc291cmNlIHRyZWU/IFBQUCBpcyBuZXR3b3JraW5nLCBzbyBpdCdzIGEgc2FmZSBiZXQgdG8gc3RhcnQgbG9va2luZyBpbiB0aGUgYGRyaXZlcnMvbmV0YCBkaXJlY3RvcnkuIEFuZCB3aXRoaW4gdGhhdCwgdGhlIFBQUC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGlzIGxpa2VseSB1bmRlciBgcHBwYC4gT2theSwgbGV0J3MgY2hlY2sgYGRyaXZlcnMvbmV0L3BwcC9LY29uZmlnYC4gVGhhdCdzIHRoZSBtb3N0IHByb2JhYmxlIGxvY2F0aW9uIGZvciB0aGlzIHNvcnQgb2YgZHJpdmVyIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGltZSB0byBvcGVuIGl0IHVwIGFuZCBzZWUgaWYgbXkgaHVuY2ggaXMgY29ycmVjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg2MSwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjQyLjk2NDA1ODEyOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA3OTk0NDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUFBPTDJUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTYxPWNvbmZpZyBQUFRQXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzItXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTczOmNvbmZpZyBQUFBPTDJUUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgTDJUUFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTc6NDUuMzcyMDU4NjNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDIwMDQ2MDQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipOYXZpZ2F0aW5nIHRoZSBMYWJ5cmludGggb2YgUFBQT0wyVFAgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBUbyBnZXQgYSBoYW5kbGUgb24gYFBQUE9MMlRQYCwgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIGBkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aXRoaW4gdGhlIGJyb2FkZXIgUFBQIGZyYW1ld29yay4gVGhpcyBpcyB3aGVyZSBJIHR5cGljYWxseSBmaW5kIHRoZSBjb3JlIHNldHRpbmdzIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhlIGZlYXR1cmUgYW5kIGFueSByZWxhdGVkIGRlcGVuZGVuY2llcyBvciBwcmVyZXF1aXNpdGVzLiBJJ20gZXhwZWN0aW5nIHRvIHNlZSBmbGFncyBmb3IgdGhpbmdzIGxpa2UgTDJUUCBzdXBwb3J0LCB0dW5uZWwgY29uZmlndXJhdGlvbnMsIGFuZCBwZXJoYXBzIG9wdGlvbnMgZm9yIENIQVAvUEFQIGF1dGhlbnRpY2F0aW9uLCBNVFUgc2V0dGluZ3MsIGFuZCByZWxhdGVkIHNlY3VyaXR5IGNvbnNpZGVyYXRpb25zLiBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMga2VybmVsIG1vZHVsZXMgdGhhdCBuZWVkIHRvIGJlIGJ1aWx0IGFuZCB3aGF0IHRoZWlyIGRlcGVuZGVuY2llcyBhcmUuIFVsdGltYXRlbHksIEkgd2FudCB0byBmb3JtIGEgY29tcGxldGUgbWVudGFsIG1hcCBvZiBob3cgYFBQUE9MMlRQYCBpbnRlZ3JhdGVzIGludG8gdGhlIHN5c3RlbSBhbmQgaG93IEkgY2FuIGJlc3QgY29uZmlndXJlIGl0IHRvIHN1aXQgYSBwYXJ0aWN1bGFyIHVzZSBjYXNlLiBUaGlzIGluaXRpYWwgaW52ZXN0aWdhdGlvbiB3aWxsIHNldCB0aGUgc3RhZ2UgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24gaWYgbmVlZGVkLCBkaWdnaW5nIGludG8gdGhlIGNvZGUgaXRzZWxmIGlmIHNvbWV0aGluZyBpc24ndCBpbW1lZGlhdGVseSBjbGVhciBmcm9tIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzo0OC43OTIxMDY3MjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4Nzc5MjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUFBPTDJUUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xNjE9Y29uZmlnIFBQVFBcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzM6Y29uZmlnIFBQUE9MMlRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc0LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBMMlRQXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzo0OC45MDA4ODk4MTVaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc3NzYyODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBQUFAgT3ZlciBMMlRQIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGRlcGVuZGVuY2llcyBvZiBgUFBQT0wyVFBgLiBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEknbSB0aGlua2luZywgd2hlcmUgZG9lcyB0aGlzIHRoaW5nIHNpdCBpbiB0aGUgb3ZlcmFsbCBuZXR3b3JraW5nIHN0YWNrPyBXaGF0IGZvdW5kYXRpb25hbCBlbGVtZW50cyBpcyBpdCBidWlsdCB1cG9uPyBJcyBpdCBhIHVzZXItc3BhY2UgZGFlbW9uLCBvciBkb2VzIGl0IGhhdmUga2VybmVsIGNvbXBvbmVudHM/IEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBwcm90b2NvbCByZWxhdGlvbnNoaXBzIHRvby4gRG9lcyBgUFBQb0wyVFBgIGl0c2VsZiBoYW5kbGUgdGhlIFBQUCBzZXNzaW9uIGVzdGFibGlzaG1lbnQsIG9yIGRvZXMgaXQgcmVseSBvbiBzb21ldGhpbmcgZWxzZSB0byBtYW5hZ2UgdGhlIHVuZGVybHlpbmcgUFBQIGNvbm5lY3Rpb25zPyBEb2VzIGl0IHJlcXVpcmUgc3BlY2lmaWMgdmVyc2lvbnMgb2YgUFBQIG9yIEwyVFA/IEFyZSB0aGVyZSBhbnkgaGFyZCBkZXBlbmRlbmNpZXMgb24gcGFydGljdWxhciByb3V0aW5nIHByb3RvY29scyBvciBuZXR3b3JrIGludGVyZmFjZSBjb25maWd1cmF0aW9ucz8gQSBxdWljayBtZW50YWwgY2hlY2tsaXN0IHNob3VsZCBoZWxwIG1lIHZpc3VhbGl6ZSB0aGUgYXJjaGl0ZWN0dXJlLCB0aGVuIEkgY2FuIGNvbnN1bHQgdGhlIHJlbGV2YW50IFJGQ3Mgb3Igc291cmNlIGNvZGUgaWYgbmVlZGVkLiBUaGF0J3MgdGhlIGJlc3Qgd2F5IHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IGFsbCB0aGUgcGllY2VzIGZpdCB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDUxOCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE3OjUyLjE3ODY1NTk2N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5NTg5MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvbi4qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEwND1jb25maWcgUFBQT0FUTVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNS1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgQVRNXFxcIlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEwNjpcXHRkZXBlbmRzIG9uIEFUTVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEwNy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xMjc9Y2hvaWNlXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMjktXFx0ZGVmYXVsdCBQUFBPRV9IQVNIX0JJVFNfNFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjEzMDpcXHRkZXBlbmRzIG9uIFBQUE9FXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTMxLVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE2MT1jb25maWcgUFBUUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE2Mi1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgSVB2NCAoUFBUUClcXFwiXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTYzOlxcdGRlcGVuZHMgb24gTkVUX0lQR1JFX0RFTVVYXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTY0LVxcdHNlbGVjdCBQUFBPWFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTczPWNvbmZpZyBQUFBPTDJUUFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE3NC1cXHR0cmlzdGF0ZSBcXFwiUFBQIG92ZXIgTDJUUFxcXCJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNzU6XFx0ZGVwZW5kcyBvbiBMMlRQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTc2LVxcdHNlbGVjdCBQUFBPWFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzo1Mi4yNTM2MjEzNzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ2OTA3Mzg3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIGRlcGVuZGVuY2llcywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgd2hvIHVuZGVyc3RhbmRzIHRoaXMgZmllbGQ6XG5cbioqRGVwZW5kZW5jeSBDaGFpbiBBbmFseXNpcyoqXG5cbkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24gaW4gbXkgaGVhZC4gRXNzZW50aWFsbHksIEknbSBzZWVpbmcgdGhhdCBgUFBQT0wyVFBgIGlzIGJ1aWx0IHVwb24gdGhlIGZvdW5kYXRpb24gb2YgYEwyVFBgLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIGEgUFBQIG92ZXIgTDJUUCBpbXBsZW1lbnRhdGlvbiwgc28gdGhlIGxvd2VyLWxldmVsIEwyVFAgcHJvdG9jb2wgaXMgYSBjb3JlIHJlcXVpcmVtZW50LiBJIHdvdWxkbid0IGV4cGVjdCBpdCB0byB3b3JrIHdpdGhvdXQgaXQuIFRoZW4sIGxvb2tpbmcgYXQgYEwyVFBfREVCVUdGU2AsIGl0IGZvbGxvd3MgYSBzaW1pbGFyIHBhdHRlcm4sIGJ1dCB3aXRoIGEgY291cGxlIG9mIHR3aXN0cy4gSXQgYWxzbyByZXF1aXJlcyBgTDJUUGAgd2hpY2ggaXMgc2Vuc2libGUsIGFzIHRoZSBkZWJ1ZyBmaWxlc3lzdGVtIGhvb2tzIHdvdWxkIG5lZWQgdG8gaW50ZXJhY3Qgd2l0aCB0aGUgZXhpc3RpbmcgTDJUUCBmdW5jdGlvbmFsaXR5LiBBbmQgZmluYWxseSwgYW5kIGhlcmUncyB0aGUgb3RoZXIgcGFydCBvZiB0aGUgcHV6emxlLCBgREVCVUdfRlNgIGlzIGEgaGFyZCBkZXBlbmRlbmN5LiBTbywgaWYgSSB3YW50IHRob3NlIGRlYnVnZ2luZyB0b29scyBmb3IgTDJUUCwgSSdtIGdvaW5nIHRvIG5lZWQgdGhlIGRlYnVnIGZpbGVzeXN0ZW0gaXRzZWxmLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZyb20gYSBkZXBlbmRlbmN5IHBlcnNwZWN0aXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MTA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTc6NTUuNzIyNzE0NzExWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDQ2MDQ1MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXBlbmRzIG9uLipcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9LY29uZmlnPTY9bWVudWNvbmZpZyBMMlRQXFxubmV0L2wydHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJMYXllciBUd28gVHVubmVsaW5nIFByb3RvY29sIChMMlRQKVxcXCJcXG5uZXQvbDJ0cC9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiBJTkVUXFxubmV0L2wydHAvS2NvbmZpZy05LVxcdHNlbGVjdCBORVRfVURQX1RVTk5FTFxcbi0tXFxubmV0L2wydHAvS2NvbmZpZz0zNj1jb25maWcgTDJUUF9ERUJVR0ZTXFxubmV0L2wydHAvS2NvbmZpZy0zNy1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxubmV0L2wydHAvS2NvbmZpZzozODpcXHRkZXBlbmRzIG9uIEwyVFAgXFx1MDAyNlxcdTAwMjYgREVCVUdfRlNcXG5uZXQvbDJ0cC9LY29uZmlnLTM5LVxcdGhlbHBcXG4tLVxcbm5ldC9sMnRwL0tjb25maWc9NDk9Y29uZmlnIEwyVFBfVjNcXG5uZXQvbDJ0cC9LY29uZmlnLTUwLVxcdGJvb2wgXFxcIkwyVFB2MyBzdXBwb3J0XFxcIlxcbm5ldC9sMnRwL0tjb25maWc6NTE6XFx0ZGVwZW5kcyBvbiBMMlRQXFxubmV0L2wydHAvS2NvbmZpZy01Mi1cXHRoZWxwXFxuLS1cXG5uZXQvbDJ0cC9LY29uZmlnPTcwPWNvbmZpZyBMMlRQX0lQXFxubmV0L2wydHAvS2NvbmZpZy03MS1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBJUCBlbmNhcHN1bGF0aW9uIGZvciBMMlRQdjNcXFwiXFxubmV0L2wydHAvS2NvbmZpZzo3MjpcXHRkZXBlbmRzIG9uIEwyVFBfVjNcXG5uZXQvbDJ0cC9LY29uZmlnLTczLVxcdGhlbHBcXG4tLVxcbm5ldC9sMnRwL0tjb25maWc9ODc9Y29uZmlnIEwyVFBfRVRIXFxubmV0L2wydHAvS2NvbmZpZy04OC1cXHR0cmlzdGF0ZSBcXFwiTDJUUCBldGhlcm5ldCBwc2V1ZG93aXJlIHN1cHBvcnQgZm9yIEwyVFB2M1xcXCJcXG5uZXQvbDJ0cC9LY29uZmlnOjg5OlxcdGRlcGVuZHMgb24gTDJUUF9WM1xcbm5ldC9sMnRwL0tjb25maWctOTAtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxNzo1NS43OTMxODA5NDRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUxMjk4NjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEwyVFAgRGVidWdmcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgTDJUUGAsIHNwZWNpZmljYWxseSBkZWFsaW5nIHdpdGggYERFQlVHX0ZTYCwgYFBQUE9MMlRQYCwgYW5kIHRoZSBkZWJ1ZyBpbnRlcmZhY2UuIFRoZSBwcmltYXJ5IGNoYW5nZXMgc2VlbSB0byBiZSB3aXRoaW4gdGhlIHJlbGVhc2UgZnVuY3Rpb25zIGZvciB0aGUgc2VxX2ZpbGVzIHVzZWQgaW4gcHJvY2ZzL2RlYnVnZnMuIEkgc2VlIGBsMnRwX2Rmc19zZXFfcmVsZWFzZWAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGJlaW5nIG1vZGlmaWVkLiBJdCBsb29rcyBsaWtlIHRoZXkncmUgYWRkaW5nIGNhbGxzIHRvIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAsIHdoaWNoIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZXkncmUgYWRkcmVzc2luZyBtZW1vcnkgbGVha3Mgb3IgcmVmZXJlbmNlIGNvdW50IGlzc3VlcyDigJMgbGlrZWx5IGEgY29tbW9uIHByb2JsZW0gd2l0aCB0aGVzZSBraW5kcyBvZiBpbnRlcmZhY2VzLlxuXG5NeSBhdHRlbnRpb24gaXMgZHJhd24gdG8gYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBhbmQgYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAsIGFsdGhvdWdoIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gcXVpY2tseSBnbGFuY2UgYXQgYHBwcG9sMnRwX3Byb2Nfb3BlbmAuIFdhaXQsIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCBhcmUgbmV3IGZ1bmN0aW9ucyDigJMgdGhhdCdzIHNvbWV0aGluZyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBJdCdzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZXJlIHRoZXNlIGFyZSBjYWxsZWQuIGBwcHBvbDJ0cF9wcm9jX29wZW5gIGlzIGNhbGxlZCB3aGVuIGFjY2Vzc2luZyBgL3Byb2MvbmV0L3BwcG9sMnRwYC4gYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBpcyB1c2VkIHdoZW4gY2xvc2luZyBkZWJ1Z2ZzIGZpbGVzIHVuZGVyIGAvc3lzL2tlcm5lbC9kZWJ1Zy9sMnRwLy4uLmAuXG5cbkFscmlnaHQsIEknbGwgbmVlZCB0byBkaWcgaW50byBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgIGluIGBuZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY2Agbm93IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlc2UgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgyNCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODowMS4zMDYxNjk5MjRaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNDYxNzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImwydHBfZGZzX3NlcV9yZWxlYXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL2wydHBfZGVidWdmcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9sMnRwL2wydHBfZGVidWdmcy5jPTI2Nj1zdGF0aWMgaW50IGwydHBfZGZzX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtMzAxLVxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jOjMwMjpzdGF0aWMgaW50IGwydHBfZGZzX3NlcV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMwMy17XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYz0zMjE9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbDJ0cF9kZnNfZm9wcyA9IHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jLTMyNS1cXHQubGxzZWVrXFx0XFx0PSBzZXFfbHNlZWssXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6MzI2OlxcdC5yZWxlYXNlXFx0PSBsMnRwX2Rmc19zZXFfcmVsZWFzZSxcXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0zMjctfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MDEuMzk5NjM3OTY1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTQ5OTMwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQUFAgb3ZlciBMMlRQIFBsdW1iaW5nKipcblxuQWxyaWdodCwgdGltZSB0byB0cm91Ymxlc2hvb3QgdGhpcyBMMlRQIGlzc3VlLiBMZXQncyBzdGFydCB3aXRoIHRoZSBsb3ctaGFuZ2luZyBmcnVpdCBhbmQgdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byBgbmV0L2wydHAvbDJ0cF9wcHAuY2AsIGFuZCBzcGVjaWZpY2FsbHksIEkgd2FudCB0byBjaGVjayBvdXQgaG93IHRoZSBQUFAgc2Vzc2lvbiBpcyBpbml0aWF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgTDJUUC4gSSdtIGdvaW5nIHRvIGZvY3VzIG9uIGBwcHBvbDJ0cF9wcm9jX29wZW5gLCBhcyB0aGUgUFBQIHNlc3Npb24gb3BlbmluZyBpcyB3aGVyZSBldmVyeXRoaW5nIGJlZ2lucy4gVGhhdCdzIHRoZSBnYXRld2F5LiBJIGV4cGVjdCB0byBmaW5kIHRoZSBpbml0aWFsIGNvbm5lY3Rpb24gc2V0dXAgbG9naWMgdGhlcmUsIGFuZCBob3BlZnVsbHkgdGhlIGNsdWVzIEkgbmVlZCB0byB1bnJhdmVsIHRoZSBwcm9ibGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NzQxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MDQuNjk0NjMyNjg0WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDY3NDkyMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHBwb2wydHBfcHJvY19vcGVuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9sMnRwL2wydHBfcHBwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvbDJ0cF9wcHAuYz0xNTk0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcHBwb2wydHBfc2VxX29wcyA9IHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTYwMC1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjE2MDE6c3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjAyLXtcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9MTY0MT1zdGF0aWMgY29uc3Qgc3RydWN0IHByb2Nfb3BzIHBwcG9sMnRwX3Byb2Nfb3BzID0ge1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTY0MjpcXHQucHJvY19vcGVuXFx0PSBwcHBvbDJ0cF9wcm9jX29wZW4sXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjQzLVxcdC5wcm9jX3JlYWRcXHQ9IHNlcV9yZWFkLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODowNC44MDEzODc0OTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDk2MzM0MDU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGFzc2Vzc21lbnQgb2YgdGhlc2UgY2hhbmdlcywgdGhpbmtpbmcgdGhyb3VnaCBpdCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duLlxuXG4qKkZ1enppbmcgVGFyZ2V0IEFzc2Vzc21lbnQqKlxuXG5BbHJpZ2h0LCB0aGVzZSByZWNlbnQgbW9kaWZpY2F0aW9ucyBhcmUgcHJpbWFyaWx5IGZvY3VzZWQgb24gZml4aW5nIHJlc291cmNlIGxlYWtzLiBGdW5jdGlvbmFsbHkgc291bmQsIHdoaWNoIGlzIGdyZWF0LiBUaGUga2V5IGlzIHRoYXQgdXNlcnNwYWNlIGNhbiB0cmlnZ2VyIHRoZW0gdmlhIGAvcHJvYy9uZXQvcHBwb2wydHBgIGFuZCBgL3N5cy9rZXJuZWwvZGVidWcvbDJ0cC90dW5uZWxzYC4gVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHNldHVwIHRoYXQgc2NyZWFtcyBcImZ1enogbWUhXCIgSXQncyBkaXJlY3QgdXNlciBpbnRlcmFjdGlvbiwgcHJvdmlkaW5nIGEgcGVyZmVjdCBlbnRyeSBwb2ludCBmb3IgZXhwbG9yaW5nIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFdlJ3ZlIGdvdCBjbGVhciBhdHRhY2sgc3VyZmFjZS5cblxuVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZTogYEwyVFBgLCBgTDJUUF9ERUJVR0ZTYCwgYFBQUE9MMlRQYCwgYERFQlVHX0ZTYCwgYW5kIGBQUk9DX0ZTYC4gV2UgbmVlZCB0byBlbnN1cmUgYWxsIG9mIHRoZXNlIGFyZSBlbmFibGVkIGluIG91ciBmdXp6aW5nIGVudmlyb25tZW50LiBUaGF0J3Mgb3VyIGJ1aWxkIGNvbmZpZ3VyYXRpb24gYmFzZWxpbmUuXG5cbkkndmUgaWRlbnRpZmllZCB0aGVzZSBzeW1ib2xzIGFzIHByaW1hcnkgZm9jdXMgYXJlYXMgZm9yIHRoZSBmdXp6aW5nIGNhbXBhaWduOiBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgLCBgcHBwb2wydHBfcHJvY19vcGVuYCwgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGVzZSBsb29rIGxpa2UgY29yZSBlbnRyeSBhbmQgZXhpdCBwb2ludHMgZm9yIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGVzZSBmZWF0dXJlcywgbGlrZWx5IGRlYWxpbmcgd2l0aCBhbGxvY2F0aW9uIGFuZCBkZWFsbG9jYXRpb24gb2YgcmVzb3VyY2VzLCB3aGljaCBpcyBhbHdheXMgYW4gYXR0cmFjdGl2ZSB0YXJnZXQuXG5cbldhaXQgYSBzZWNvbmTigKYgYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAgaXMgKmFsc28qIGEgbmV3IGZ1bmN0aW9uPyBUaGF0J3MgaW50ZXJlc3RpbmcuIEkgaGFkbid0IG5vdGljZWQgdGhhdC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IG92ZXJsb29rIGFueXRoaW5nIGFib3V0IGl0cyBmdW5jdGlvbmFsaXR5LiBJdCBtaWdodCBiZSBldmVuIG1vcmUgc2lnbmlmaWNhbnQgdGhhbiBpbml0aWFsbHkgdGhvdWdodC4gSXQgbWlnaHQgaGFuZGxlIGNsZWFudXAgb3IgZmluYWxpemF0aW9uIHJvdXRpbmVzLCB3aGljaCBtYWtlcyBpdCBhbiBldmVuIGJldHRlciB0YXJnZXQgdG8gZm9jdXMgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyMTAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MDkuNzY0NzMxODY5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTg3OTIxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwcHBvbDJ0cF9wcm9jX3JlbGVhc2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2wydHAvbDJ0cF9wcHAuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbDJ0cC9sMnRwX3BwcC5jPTE2MDE9c3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjItXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNjIzOnN0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTYyNC17XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE2NDE9c3RhdGljIGNvbnN0IHN0cnVjdCBwcm9jX29wcyBwcHBvbDJ0cF9wcm9jX29wcyA9IHtcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTY0NC1cXHQucHJvY19sc2Vla1xcdD0gc2VxX2xzZWVrLFxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTY0NTpcXHQucHJvY19yZWxlYXNlXFx0PSBwcHBvbDJ0cF9wcm9jX3JlbGVhc2UsXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xNjQ2LX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjA5Ljg1NDYxODM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzMzMxMjQ2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gYHBwcG9sMnRwX3Byb2NfcmVsZWFzZWAgaXMgYSBmcmVzaCBhZGRpdGlvbiDigJMgdGhhdCdzIHNvbWV0aGluZyB0byBub3RlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIHJlbGF0ZWQgdG8gdGhpcy4gTGV0J3MgdHJhY2UgdGhlIGRlcGVuZGVuY2llczogYEwyVFBgIGRlcGVuZHMgb24gYElORVRgLCB3aGljaCBJIGFzc3VtZSBpcyBzdGFuZGFyZC4gYFBQUE9MMlRQYCBpdHNlbGYgcmVsaWVzIG9uIGBMMlRQYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIGBMMlRQX0RFQlVHRlNgIGhhcyBhIGRlcGVuZGVuY3kgb24gYm90aCBgTDJUUGAgYW5kIGBERUJVR19GU2AuIEFuZCBJJ2xsIGFzc3VtZSBgUFJPQ19GU2AgaXMgZ2VuZXJhbGx5IGVuYWJsZWQgYXMgaXQgaXMgdXNlZCBhIGxvdC5cblxuVGhlcmVmb3JlLCB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBlbnN1cmUgYXJlIGVuYWJsZWQgYXJlOiBgTDJUUGAsIGBMMlRQX0RFQlVHRlNgLCBgUFBQT0wyVFBgLCBgREVCVUdfRlNgLCBhbmQgYFBST0NfRlNgLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiwgSSBzaG91bGQgdmVyaWZ5IGlmIGBQUFBPTDJUUGAgaGFzIGFuIHVuZGVybHlpbmcgZGVwZW5kZW5jeSBvbiBgUFBQYC4gSXQgd291bGQgYmUgcmVtaXNzIG9mIG1lIHRvIG5vdCBjaGVjayB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDE0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjE0LjE4Nzc0NTg2MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2NzEwODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUFBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OmNvbmZpZyBQUFBcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJQUFAgKHBvaW50LXRvLXBvaW50IHByb3RvY29sKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MzU9aWYgUFBQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzYtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6Mzc6Y29uZmlnIFBQUF9CU0RDT01QXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzgtXFx0dHJpc3RhdGUgXFxcIlBQUCBCU0QtQ29tcHJlc3MgY29tcHJlc3Npb25cXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01NC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo1NTpjb25maWcgUFBQX0RFRkxBVEVcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy01Ni1cXHR0cmlzdGF0ZSBcXFwiUFBQIERlZmxhdGUgY29tcHJlc3Npb25cXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy02OC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo2OTpjb25maWcgUFBQX0ZJTFRFUlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTcwLVxcdGJvb2wgXFxcIlBQUCBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04MC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzo4MTpjb25maWcgUFBQX01QUEVcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy04Mi1cXHR0cmlzdGF0ZSBcXFwiUFBQIE1QUEUgY29tcHJlc3Npb24gKGVuY3J5cHRpb24pXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctOTEtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6OTI6Y29uZmlnIFBQUF9NVUxUSUxJTktcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy05My1cXHRib29sIFxcXCJQUFAgbXVsdGlsaW5rIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMDMtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTA0OmNvbmZpZyBQUFBPQVRNXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTA1LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBBVE1cXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xMTItXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTEzOmNvbmZpZyBQUFBPWFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNC1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTExNS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMTY6Y29uZmlnIFBQUE9FXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTE3LVxcdHRyaXN0YXRlIFxcXCJQUFAgb3ZlciBFdGhlcm5ldFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTEyNz1jaG9pY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTEzOC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxMzk6Y29uZmlnIFBQUE9FX0hBU0hfQklUU18xXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQwLVxcdGJvb2wgXFxcIjEgYml0ICgyIGJ1Y2tldHMpXFxcIlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0MS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNDI6Y29uZmlnIFBQUE9FX0hBU0hfQklUU18yXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQzLVxcdGJvb2wgXFxcIjIgYml0cyAoNCBidWNrZXRzKVxcXCJcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNDQtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTQ1OmNvbmZpZyBQUFBPRV9IQVNIX0JJVFNfNFxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0Ni1cXHRib29sIFxcXCI0IGJpdHMgKDE2IGJ1Y2tldHMpXFxcIlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE0Ny1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNDg6Y29uZmlnIFBQUE9FX0hBU0hfQklUU184XFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTQ5LVxcdGJvb2wgXFxcIjggYml0cyAoMjU2IGJ1Y2tldHMpXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTUxPWVuZGNob2ljZVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1Mi1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNTM6Y29uZmlnIFBQUE9FX0hBU0hfQklUU1xcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1NC1cXHRpbnRcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTE2MT1jb25maWcgUFBUUFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTcyLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE3Mzpjb25maWcgUFBQT0wyVFBcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0xNzQtXFx0dHJpc3RhdGUgXFxcIlBQUCBvdmVyIEwyVFBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xODE9aWYgVFRZXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTgyLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE4Mzpjb25maWcgUFBQX0FTWU5DXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTg0LVxcdHRyaXN0YXRlIFxcXCJQUFAgc3VwcG9ydCBmb3IgYXN5bmMgc2VyaWFsIHBvcnRzXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk1LVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE5Njpjb25maWcgUFBQX1NZTkNfVFRZXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTk3LVxcdHRyaXN0YXRlIFxcXCJQUFAgc3VwcG9ydCBmb3Igc3luYyB0dHkgcG9ydHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjE0LjI5NDQ2MDcyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjQwOTUxNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIENvbmRpdGlvbmFsIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBiaXQgb2YgY29kZSBhbmQgdHJ5aW5nIHRvIHBhcnNlIHRoZSBsb2dpYy4gSXQgc2VlbXMgbGlrZSBgUFBQT0wyVFBgIGlzIHBvdGVudGlhbGx5IG5lc3RlZCB3aXRoaW4gYW4gYGlmYCBzdGF0ZW1lbnQgdGhhdCBpbnZvbHZlcyBgUFBQYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNvbmZpcm0gdGhpcyByZWxhdGlvbnNoaXAg4oCTIGRvZXMgYFBQUE9MMlRQYCBhY3R1YWxseSByZXNpZGUgaW5zaWRlIHRoZSBjb25kaXRpb25hbCBibG9jayB0aGF0J3MgdHJpZ2dlcmVkIGJ5IGBQUFBgPyBJdCdzIGEgZnVuZGFtZW50YWwgcXVlc3Rpb24gb2YgY29udHJvbCBmbG93LCBhbmQgdW5kZXJzdGFuZGluZyB0aGlzIGlzIGVzc2VudGlhbCBmb3IgYW55IGRlZXBlciBhbmFseXNpcyBvZiB3aGF0J3MgZ29pbmcgb24gd2l0aGluIHRoaXMgY29kZSBzZWdtZW50LiBMZXQncyBkaWcgaW4gYW5kIGNvbmZpcm0gdGhlIHN0cnVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ3MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjE3LjM1ODU2MDIzM1oiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyNzQ5MjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWYgUFBQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BwcC9LY29uZmlnPTY9Y29uZmlnIFBQUFxcbi0tXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzQtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MzU6aWYgUFBQXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMzYtXFxuLS1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZz0xNTM9Y29uZmlnIFBQUE9FX0hBU0hfQklUU1xcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTE1NC1cXHRpbnRcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNTU6XFx0ZGVmYXVsdCAxIGlmIFBQUE9FX0hBU0hfQklUU18xXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MTU2OlxcdGRlZmF1bHQgMiBpZiBQUFBPRV9IQVNIX0JJVFNfMlxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnOjE1NzpcXHRkZWZhdWx0IDQgaWYgUFBQT0VfSEFTSF9CSVRTXzRcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoxNTg6XFx0ZGVmYXVsdCA4IGlmIFBQUE9FX0hBU0hfQklUU184XFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWctMTU5LVxcdGRlZmF1bHQgNFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODoxNy40MTI4NDAwNzhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3NzY4MjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkZpbmRpbmcgdGhlIE1hdGNoaW5nIGBlbmRpZmAqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUsIGFuZCBJIHNlZSBhIGNvbmRpdGlvbmFsIGJsb2NrLCBzcGVjaWZpY2FsbHkgYW4gYGlmIFBQUGAgc3RhdGVtZW50IG9uIGxpbmUgMzUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHdoZXJlJ3MgdGhlIGNsb3NpbmcgYGVuZGlmYD9cIiBJdCdzIGFsbW9zdCBhdXRvbWF0aWMsIHRoZSBwYXR0ZXJuIHJlY29nbml0aW9uIGtpY2tpbmcgaW4uIEdvdHRhIGZpbmQgdGhhdCBlbmRwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgd2hhdCdzIGdvaW5nIHRvIGhhcHBlbiB3aXRoaW4gdGhhdCBjb25kaXRpb25hbCBsb2dpYy4gSSBuZWVkIHRoYXQgbWF0Y2hpbmcgYGVuZGlmYCB0byBmdWxseSBncmFzcCB3aGF0IHRoaXMgYmxvY2sgb2YgY29kZSBpcyBkb2luZyBhbmQgaG93IGl0IGFmZmVjdHMgdGhlIG92ZXJhbGwgZmxvdy4gSXQncyBub3QgZW5vdWdoIHRvIHNlZSB0aGUgc3RhcnQ7IEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTg4NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjIwLjc5MDUyNTgxOFoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTUyMzY5OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5kaWZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcHBwL0tjb25maWc9MTk2PWNvbmZpZyBQUFBfU1lOQ19UVFlcXG4tLVxcbmRyaXZlcnMvbmV0L3BwcC9LY29uZmlnLTIwNC1cXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZzoyMDU6ZW5kaWYgIyBUVFlcXG5kcml2ZXJzL25ldC9wcHAvS2NvbmZpZy0yMDYtXFxuZHJpdmVycy9uZXQvcHBwL0tjb25maWc6MjA3OmVuZGlmICMgUFBQXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjIwLjg4NTc2NzgwOFoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MDk3NjcwMzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBub3Rlcy4gTGV0IG1lIHNlZS4uLlxuXG4qKkNoZWNraW5nIHRoZSBMMlRQIFBQUCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSB3ZSAqZGVmaW5pdGVseSogbmVlZCBgUFBQYCBlbmFibGVkLiBUaGF0IG11Y2ggaXMgY2xlYXIuIExvb2tpbmcgYXQgdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBvcHRpb25zLCB3ZSdyZSBkZWFsaW5nIHdpdGggYEwyVFBgLCBgTDJUUF9ERUJVR0ZTYCwgYFBQUGAsIGBQUFBPTDJUUGAsIGBERUJVR19GU2AsIGFuZCBgUFJPQ19GU2AuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBMMlRQIHNldHVwLCBidXQgaXTigJlzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBXZSBzZWVtIHRvIGJlIGRlYWxpbmcgd2l0aCB0aGUgZGVidWcgZmlsZSBzeXN0ZW0gaW4gcGFydGljdWxhci5cblxuVGhlIGtleSBzeW1ib2xzIHRvIGtlZXAgYW4gZXllIG9uIGFyZSBgbDJ0cF9kZnNfc2VxX3JlbGVhc2VgLCBgcHBwb2wydHBfcHJvY19vcGVuYCwgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGVzZSBzdWdnZXN0IHdl4oCZcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZGVidWcgZmlsZXN5c3RlbSAobGlrZWx5IGZvciBtb25pdG9yaW5nIGFuZCBjb250cm9sKSBhbmQgdGhlIHByb2Nlc3Mtb3JpZW50ZWQgYXNwZWN0cyBvZiBQUFBvTDJUUC4gTm93LCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBzaG91bGQganVzdCBxdWlja2x5IHZlcmlmeSB0aGUgaW5saW5pbmcgc3RhdHVzIG9mIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSByZWZlcmVuY2UgY291bnRzIGFyZSBoYW5kbGVkIGluIG9yZGVyIHRvIGF2b2lkIGxlYWtzIG9yIHByZW1hdHVyZSBjbGVhbnVwLiBXZSBuZWVkIHRvIGJlIGNvbmZpZGVudCB0aGF0IHRoZXkgYXJlIGltcGxlbWVudGVkIGNvcnJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MjUuOTgzNDQxMzMxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA2MzY1NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibDJ0cF9zZXNzaW9uX3B1dFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbDJ0cC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2wydHAvbDJ0cF9jb3JlLmM9MjA1PUVYUE9SVF9TWU1CT0xfR1BMKGwydHBfdHVubmVsX3B1dCk7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMjA2LVxcbm5ldC9sMnRwL2wydHBfY29yZS5jOjIwNzp2b2lkIGwydHBfc2Vzc2lvbl9wdXQoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbilcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0yMDgte1xcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMjExLX1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoyMTI6RVhQT1JUX1NZTUJPTF9HUEwobDJ0cF9zZXNzaW9uX3B1dCk7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMjEzLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM9NTE1PXN0YXRpYyB2b2lkIGwydHBfc2Vzc2lvbl9jb2xsaXNpb25fZGVsKHN0cnVjdCBsMnRwX25ldCAqcG4sXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy01NDgtXFx0XFx0XFx0a2ZyZWUoY2xpc3QpO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jOjU0OTpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jLTU1MC1cXHR9XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYz0xMDE2PWludCBsMnRwX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwODAtXFx0XFx0aWYgKHNlc3Npb24pXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTA4MTpcXHRcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwODItXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMDkwLVxcdGlmICh2ZXJzaW9uICE9IHR1bm5lbC1cXHUwMDNldmVyc2lvbikge1xcbm5ldC9sMnRwL2wydHBfY29yZS5jOjEwOTE6XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMDkyLVxcdFxcdGdvdG8gaW52YWxpZDtcXG4tLVxcbm5ldC9sMnRwL2wydHBfY29yZS5jLTEwOTYtXFx0ICAgIGwydHBfdjNfZW5zdXJlX29wdF9pbl9saW5lYXIoc2Vzc2lvbiwgc2tiLCBcXHUwMDI2cHRyLCBcXHUwMDI2b3B0cikpIHtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxMDk3OlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTA5OC1cXHRcXHRnb3RvIGludmFsaWQ7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMTAxLVxcdGwydHBfcmVjdl9jb21tb24oc2Vzc2lvbiwgc2tiLCBwdHIsIG9wdHIsIGhkcmZsYWdzLCBsZW5ndGgpO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jOjExMDI6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYy0xMTAzLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM9MTc0NT1zdGF0aWMgdm9pZCBsMnRwX3Nlc3Npb25fZGVsX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTc1NS1cXHQvKiBkcm9wIGluaXRpYWwgcmVmICovXFxubmV0L2wydHAvbDJ0cF9jb3JlLmM6MTc1NjpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfY29yZS5jLTE3NTctXFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTc1OC1cXHQvKiBkcm9wIHdvcmtxdWV1ZSByZWYgKi9cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuYzoxNzU5OlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmMtMTc2MC19XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2NvcmUuaD0yMTI9dm9pZCBsMnRwX3R1bm5lbF9wdXQoc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwpO1xcbm5ldC9sMnRwL2wydHBfY29yZS5oOjIxMzp2b2lkIGwydHBfc2Vzc2lvbl9wdXQoc3RydWN0IGwydHBfc2Vzc2lvbiAqc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9jb3JlLmgtMjE0LVxcbi0tXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM9NTM9c3RhdGljIHZvaWQgbDJ0cF9kZnNfbmV4dF9zZXNzaW9uKHN0cnVjdCBsMnRwX2Rmc19zZXFfZGF0YSAqcGQpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy01Ni1cXHRpZiAocGQtXFx1MDAzZXNlc3Npb24pXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM6NTc6XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cXHUwMDNlc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtNTgtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYz0xMDM9c3RhdGljIHZvaWQgbDJ0cF9kZnNfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KVxcbi0tXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmMtMTEzLVxcdGlmIChwZC1cXHUwMDNlc2Vzc2lvbikge1xcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jOjExNDpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHBkLVxcdTAwM2VzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0xMTUtXFx0XFx0cGQtXFx1MDAzZXNlc3Npb24gPSBOVUxMO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmM9MzAyPXN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0zMDktXFx0aWYgKHBkLVxcdTAwM2VzZXNzaW9uKVxcbm5ldC9sMnRwL2wydHBfZGVidWdmcy5jOjMxMDpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHBkLVxcdTAwM2VzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuYy0zMTEtXFx0aWYgKHBkLVxcdTAwM2V0dW5uZWwpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jPTIyNj1zdGF0aWMgaW50IGwydHBfZXRoX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBsMnRwX3R1bm5lbCAqdHVubmVsLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYy0yOTItXFx0XFx0bDJ0cF9zZXNzaW9uX2RlbGV0ZShzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjI5MzpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtMjk0LVxcdFxcdGZyZWVfbmV0ZGV2KGRldik7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTMwMy1cXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjMwNDpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzA1LVxcbi0tXFxubmV0L2wydHAvbDJ0cF9ldGguYy0zMTAtZXJyX3Nlc3NfZGV2Olxcbm5ldC9sMnRwL2wydHBfZXRoLmM6MzExOlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9ldGguYy0zMTItXFx0ZnJlZV9uZXRkZXYoZGV2KTtcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jLTMxMy1lcnJfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX2V0aC5jOjMxNDpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfZXRoLmMtMzE1LWVycjpcXG4tLVxcbm5ldC9sMnRwL2wydHBfaXAuYz0xMjU9c3RhdGljIGludCBsMnRwX2lwX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sMnRwL2wydHBfaXAuYy0xNjktXFx0bDJ0cF9yZWN2X2NvbW1vbihzZXNzaW9uLCBza2IsIHB0ciwgb3B0ciwgMCwgc2tiLVxcdTAwM2VsZW4pO1xcbm5ldC9sMnRwL2wydHBfaXAuYzoxNzA6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2lwLmMtMTcxLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9pcC5jLTIwMi1kaXNjYXJkX3Nlc3M6XFxubmV0L2wydHAvbDJ0cF9pcC5jOjIwMzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfaXAuYy0yMDQtXFx0Z290byBkaXNjYXJkO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9pcDYuYz0xMzU9c3RhdGljIGludCBsMnRwX2lwNl9yZWN2KHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX2lwNi5jLTE3OS1cXHRsMnRwX3JlY3ZfY29tbW9uKHNlc3Npb24sIHNrYiwgcHRyLCBvcHRyLCAwLCBza2ItXFx1MDAzZWxlbik7XFxubmV0L2wydHAvbDJ0cF9pcDYuYzoxODA6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX2lwNi5jLTE4MS1cXG4tLVxcbm5ldC9sMnRwL2wydHBfaXA2LmMtMjEyLWRpc2NhcmRfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX2lwNi5jOjIxMzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfaXA2LmMtMjE0LVxcdGdvdG8gZGlzY2FyZDtcXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTUyOD1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy02NDktXFx0XFx0XFx0XFx0XFx0XFx0ICBMMlRQX0NNRF9TRVNTSU9OX0NSRUFURSk7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6NjUwOlxcdFxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNjUxLVxcdFxcdH1cXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jPTY2MD1zdGF0aWMgaW50IGwydHBfbmxfY21kX3Nlc3Npb25fZGVsZXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy02NzktXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6NjgwOlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtNjgxLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM9Njg2PXN0YXRpYyBpbnQgbDJ0cF9ubF9jbWRfc2Vzc2lvbl9tb2RpZnkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTcxNS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo3MTY6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy03MTctXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz04MDI9c3RhdGljIGludCBsMnRwX25sX2NtZF9zZXNzaW9uX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODI2LVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjgyNzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTgyOC1cXG4tLVxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTgzMy1lcnJfcmVmOlxcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jOjgzNDpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfbmV0bGluay5jLTgzNS1lcnI6XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYz04Mzk9c3RhdGljIGludCBsMnRwX25sX2NtZF9zZXNzaW9uX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODY3LVxcdFxcdFxcdFxcdFxcdCBzZXNzaW9uLCBMMlRQX0NNRF9TRVNTSU9OX0dFVCkgXFx1MDAzYyAwKSB7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmM6ODY4OlxcdFxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODY5LVxcdFxcdFxcdGwydHBfdHVubmVsX3B1dCh0dW5uZWwpO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9uZXRsaW5rLmMtODcxLVxcdFxcdH1cXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYzo4NzI6XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX25ldGxpbmsuYy04NzMtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTI1MD1zdGF0aWMgaW50IHBwcG9sMnRwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IG1zZ2hkciAqbSxcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzA1LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MzA2OlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0zMDctXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTMxMC1lcnJvcl9wdXRfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjMxMTpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzEyLWVycm9yOlxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0zMzA9c3RhdGljIGludCBwcHBvbDJ0cF94bWl0KHN0cnVjdCBwcHBfY2hhbm5lbCAqY2hhbiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzY0LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MzY1OlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0zNjYtXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTM2OS1hYm9ydF9wdXRfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjM3MDpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMzcxLWFib3J0Olxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0zOTA9c3RhdGljIHZvaWQgcHBwb2wydHBfc2Vzc2lvbl9jbG9zZShzdHJ1Y3QgbDJ0cF9zZXNzaW9uICpzZXNzaW9uKVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy00MDUtXFx0XFx0LyogZHJvcCByZWYgdGFrZW4gd2hlbiB3ZSByZWZlcmVuY2VkIHNvY2tldCB2aWEgc2tfdXNlcl9kYXRhICovXFxubmV0L2wydHAvbDJ0cF9wcHAuYzo0MDY6XFx0XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTQwNy1cXHR9XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTQxMj1zdGF0aWMgaW50IHBwcG9sMnRwX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaylcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtNDM2LVxcdFxcdC8qIGRyb3AgcmVmIHRha2VuIGJ5IHBwcG9sMnRwX3NvY2tfdG9fc2Vzc2lvbiAqL1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6NDM3OlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy00MzgtXFx0fVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz02ODg9c3RhdGljIGludCBwcHBvbDJ0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkcl91bnNpemVkICp1c2VydmFkZHIsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTc3My1cXHRcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBzLVxcdTAwM2Vza19sb2NrKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjc3NDpcXHRcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtNzc1LVxcdFxcdFxcdGdvdG8gZW5kO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy04MzEtXFx0aWYgKGRyb3BfcmVmY250KVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6ODMyOlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy04MzMtXFx0bDJ0cF90dW5uZWxfcHV0KHR1bm5lbCk7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTg0Mj1zdGF0aWMgaW50IHBwcG9sMnRwX3Nlc3Npb25fY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGwydHBfdHVubmVsICp0dW5uZWwsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTg3Mi1lcnJfc2VzczpcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jOjg3MzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtODc0LWVycjpcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9ODgyPXN0YXRpYyBpbnQgcHBwb2wydHBfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnVhZGRyLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy05ODMtXFxubmV0L2wydHAvbDJ0cF9wcHAuYzo5ODQ6XFx0bDJ0cF9zZXNzaW9uX3B1dChzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTk4NS1lbmQ6XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTEwMTU9c3RhdGljIGludCBwcHBvbDJ0cF90dW5uZWxfY29weV9zdGF0cyhzdHJ1Y3QgcHBwb2wydHBfaW9jX3N0YXRzICpzdGF0cyxcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTAzMy1cXHRpZiAoc2Vzc2lvbi1cXHUwMDNlcHd0eXBlICE9IEwyVFBfUFdUWVBFX1BQUCkge1xcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTAzNDpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTAzNS1cXHRcXHRyZXR1cm4gLUVCQURSO1xcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMDM4LVxcdHBwcG9sMnRwX2NvcHlfc3RhdHMoc3RhdHMsIFxcdTAwMjZzZXNzaW9uLVxcdTAwM2VzdGF0cyk7XFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMDM5OlxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMDQwLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMDQ0PXN0YXRpYyBpbnQgcHBwb2wydHBfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCxcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTA2NS1cXHRcXHRpZiAoc2Vzc2lvbi1cXHUwMDNlbWFnaWMgIT0gTDJUUF9TRVNTSU9OX01BR0lDKSB7XFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMDY2OlxcdFxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMDY3LVxcdFxcdFxcdHJldHVybiAtRUJBREY7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTExMzktXFx0aWYgKHNlc3Npb24pXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxMTQwOlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQoc2Vzc2lvbik7XFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMTQxLVxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYz0xMjMyPXN0YXRpYyBpbnQgcHBwb2wydHBfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLFxcbi0tXFxubmV0L2wydHAvbDJ0cF9wcHAuYy0xMjY4LVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTI2OTpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTI3MC1lbmQ6XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTEzMzg9c3RhdGljIGludCBwcHBvbDJ0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTEzODItZW5kX3B1dF9zZXNzOlxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTM4MzpcXHRsMnRwX3Nlc3Npb25fcHV0KHNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTM4NC1lbmQ6XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE0MjI9c3RhdGljIHZvaWQgcHBwb2wydHBfbmV4dF9zZXNzaW9uKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZClcXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQyNS1cXHRpZiAocGQtXFx1MDAzZXNlc3Npb24pXFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNDI2OlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQocGQtXFx1MDAzZXNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQyNy1cXG4tLVxcbm5ldC9sMnRwL2wydHBfcHBwLmM9MTQ3NT1zdGF0aWMgdm9pZCBwcHBvbDJ0cF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE0ODUtXFx0aWYgKHBkLVxcdTAwM2VzZXNzaW9uKSB7XFxubmV0L2wydHAvbDJ0cF9wcHAuYzoxNDg2OlxcdFxcdGwydHBfc2Vzc2lvbl9wdXQocGQtXFx1MDAzZXNlc3Npb24pO1xcbm5ldC9sMnRwL2wydHBfcHBwLmMtMTQ4Ny1cXHRcXHRwZC1cXHUwMDNlc2Vzc2lvbiA9IE5VTEw7XFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jPTE2MjM9c3RhdGljIGludCBwcHBvbDJ0cF9wcm9jX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuLS1cXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MjgtXFx0aWYgKHBkLVxcdTAwM2VzZXNzaW9uKVxcbm5ldC9sMnRwL2wydHBfcHBwLmM6MTYyOTpcXHRcXHRsMnRwX3Nlc3Npb25fcHV0KHBkLVxcdTAwM2VzZXNzaW9uKTtcXG5uZXQvbDJ0cC9sMnRwX3BwcC5jLTE2MzAtXFx0aWYgKHBkLVxcdTAwM2V0dW5uZWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjI2LjA5NDA4Mjk2OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDg1NzYxNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBMMlRQIE1vZHVsZSBTeW1ib2xzIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgTDJUUCBtb2R1bGUgc3ltYm9scy4gSSBzZWUgYGwydHBfc2Vzc2lvbl9wdXRgIGFuZCBgbDJ0cF90dW5uZWxfcHV0YCBhcmUgZXhwb3J0ZWQsIHdoaWNoIGlzIHN0YW5kYXJkLiBUaGVuIEknbSBub3RpY2luZyB0aGF0IGBwcHBvbDJ0cF9wcm9jX29wZW5gIGFuZCBgcHBwb2wydHBfcHJvY19yZWxlYXNlYCBhcmUgKnN0YXRpYyogZnVuY3Rpb25zLCB0dWNrZWQgYXdheSBpbiBgbmV0L2wydHAvbDJ0cF9wcHAuY2AuIFNpbWlsYXJseSwgYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBpcyBzdGF0aWMgdG9vLCB0aGlzIG9uZSByZXNpZGluZyBpbiBgbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiSG1tLCBzdGF0aWMgZnVuY3Rpb25zIGFyZSBhIGJpdCB0cmlja2llci5cIiBUaGV5ICptaWdodCogYmUgaW5saW5lZCBhbmQgdGhlbiwgZm9yZ2V0IGFib3V0IGRpcmVjdCBmdXp6aW5nIGJ5IG5hbWUuIEhvd2V2ZXIsIHNpbmNlIHRoZXkncmUgYmVpbmcgdXNlZCBhcyBmdW5jdGlvbiBwb2ludGVycyB3aXRoaW4gYGZpbGVfb3BlcmF0aW9uc2AgYW5kIGBwcm9jX29wc2Agc3RydWN0dXJlcywgSSBjYW4gc2FmZWx5IGFzc3VtZSB0aGV5ICphcmVuJ3QqIGlubGluZWQuIFRoZXknbGwgaGF2ZSBkaXNjcmV0ZSBzeW1ib2wgYWRkcmVzc2VzLiBUaGF0IG1lYW5zIHRoZXkgYXJlIHBlcmZlY3RseSB2YWxpZCB0YXJnZXRzLlxuXG5MZXQgbWUgZG91YmxlLWNoZWNrIGlmIHRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG1vc3QgcHJvbWlzaW5nIGxlYWRzLiBZZXAsIGl0IGxvb2tzIGxpa2UgYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGFyZSB0aGUga2V5IGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC5cblxuV2FpdCBhIHNlY29uZC4uLiAqYm90aCogYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgIGFyZSAqbmV3KiBmdW5jdGlvbnMuIEFuZCB0aGUgYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBmdW5jdGlvbiBpcyBhICptb2RpZmllZCogZXhpc3RpbmcgZnVuY3Rpb24uIEFscmlnaHQsIEkndmUgZ290IGEgY2xlYXJlciBwaWN0dXJlIG9mIHdoYXQgSSdtIGRlYWxpbmcgd2l0aC4gTGV0J3MgbWFrZSBhIG5vdGUgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NDYsIk91dHB1dFRva2VucyI6MTkzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjMzLjE3OTg0Nzk2NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzMxMzYxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTDJUUFwiLFxuICAgIFwiTDJUUF9ERUJVR0ZTXCIsXG4gICAgXCJQUFBcIixcbiAgICBcIlBQUE9MMlRQXCIsXG4gICAgXCJERUJVR19GU1wiLFxuICAgIFwiUFJPQ19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImwydHBfZGZzX3NlcV9yZWxlYXNlXCIsXG4gICAgXCJwcHBvbDJ0cF9wcm9jX29wZW5cIixcbiAgICBcInBwcG9sMnRwX3Byb2NfcmVsZWFzZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlc291cmNlIGxlYWtzIGluIHRoZSByZWxlYXNlIGZ1bmN0aW9ucyBvZiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBzZXFfZmlsZXMgYnkgYWRkaW5nIG1pc3NpbmcgbDJ0cF9zZXNzaW9uX3B1dCBhbmQgbDJ0cF90dW5uZWxfcHV0IGNhbGxzLiBJdCBhbHNvIGludHJvZHVjZXMgbmV3IHByb2NmcyBvcGVuIGFuZCByZWxlYXNlIGZ1bmN0aW9ucyBmb3IgcHBwb2wydHAuIFRoZXNlIGNoYW5nZXMgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSBieSBvcGVuaW5nIGFuZCBjbG9zaW5nIHRoZSByZXNwZWN0aXZlIGRlYnVnZnMgYW5kIHByb2NmcyBmaWxlcywgYW5kIGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCBvbiByZXNvdXJjZSBtYW5hZ2VtZW50LCBtYWtpbmcgdGhlbSB3b3J0aCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkwyVFBcIixcbiAgICBcIkwyVFBfREVCVUdGU1wiLFxuICAgIFwiUFBQXCIsXG4gICAgXCJQUFBPTDJUUFwiLFxuICAgIFwiREVCVUdfRlNcIixcbiAgICBcIlBST0NfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJsMnRwX2Rmc19zZXFfcmVsZWFzZVwiLFxuICAgIFwicHBwb2wydHBfcHJvY19vcGVuXCIsXG4gICAgXCJwcHBvbDJ0cF9wcm9jX3JlbGVhc2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZXNvdXJjZSBsZWFrcyBpbiB0aGUgcmVsZWFzZSBmdW5jdGlvbnMgb2YgTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgc2VxX2ZpbGVzIGJ5IGFkZGluZyBtaXNzaW5nIGwydHBfc2Vzc2lvbl9wdXQgYW5kIGwydHBfdHVubmVsX3B1dCBjYWxscy4gSXQgYWxzbyBpbnRyb2R1Y2VzIG5ldyBwcm9jZnMgb3BlbiBhbmQgcmVsZWFzZSBmdW5jdGlvbnMgZm9yIHBwcG9sMnRwLiBUaGVzZSBjaGFuZ2VzIGFyZSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgYnkgb3BlbmluZyBhbmQgY2xvc2luZyB0aGUgcmVzcGVjdGl2ZSBkZWJ1Z2ZzIGFuZCBwcm9jZnMgZmlsZXMsIGFuZCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3Qgb24gcmVzb3VyY2UgbWFuYWdlbWVudCwgbWFraW5nIHRoZW0gd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTBUMTY6MTg6MzMuMjk3MTY4MzY0WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgxMDk2OTI0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEwVDE2OjE4OjMzLjI5NzYxODg3NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTgxMDUxNTQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgcmVmZXJlbmNlIGNvdW50IGxlYWtzIGluIEwyVFAgZGVidWdmcyBhbmQgcHJvY2ZzIGJ5IGFkZGluZyBtaXNzaW5nIGBsMnRwX3Nlc3Npb25fcHV0YCBhbmQgYGwydHBfdHVubmVsX3B1dGAgY2FsbHMgaW4gdGhlIHJlbGVhc2UgaGFuZGxlcnMuIEl0IGFsc28gcmVwbGFjZXMgYHByb2NfY3JlYXRlX25ldGAgd2l0aCBgcHJvY19jcmVhdGVfZGF0YWAgYW5kIGN1c3RvbSBgcHJvY19vcHNgIHRvIGVuc3VyZSB0aGUgcmVsZWFzZSBoYW5kbGVyIGlzIGNhbGxlZC4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIG1lbW9yeS9yZWZjb3VudCBsZWFrcyBhbmQgcG90ZW50aWFsIHVzZS1hZnRlci1mcmVlIGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiwgS01FTUxFQUssIGFuZCByZWZjb3VudCBjaGVja2luZy4gVGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgd2l0aCBga3phbGxvY2AgKHZpYSBgX19zZXFfb3Blbl9wcml2YXRlYCksIHNvIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gVGhlcmVmb3JlLCBLTVNBTiBpcyBub3QgYXBwbGljYWJsZSBoZXJlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDliZjNiOWNlMmRiMWY5ZjAwZGQ2ZDAxYjBkYjE4NDUwNjBiYWU3OGNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAxMCAxNjoxNzozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfZGVidWdmcy5jIGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNcbmluZGV4IGIyNjk4NmZkYTlkNmMuLmMxMmQ1ZTFlZTU1MGMgMTAwNjQ0XG4tLS0gYS9uZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9kZWJ1Z2ZzLmNcbkBAIC0zMDYsNiArMzA2LDEwIEBAIHN0YXRpYyBpbnQgbDJ0cF9kZnNfc2VxX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXG4gXHRzZXEgPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdHBkID0gc2VxLVx1MDAzZXByaXZhdGU7XG4rXHRpZiAocGQtXHUwMDNlc2Vzc2lvbilcbitcdFx0bDJ0cF9zZXNzaW9uX3B1dChwZC1cdTAwM2VzZXNzaW9uKTtcbitcdGlmIChwZC1cdTAwM2V0dW5uZWwpXG4rXHRcdGwydHBfdHVubmVsX3B1dChwZC1cdTAwM2V0dW5uZWwpO1xuIFx0aWYgKHBkLVx1MDAzZW5ldClcbiBcdFx0cHV0X25ldF90cmFjayhwZC1cdTAwM2VuZXQsIFx1MDAyNnBkLVx1MDAzZW5zX3RyYWNrZXIpO1xuIFx0a2ZyZWUocGQpO1xuZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfcHBwLmMgYi9uZXQvbDJ0cC9sMnRwX3BwcC5jXG5pbmRleCBmODg4MTY5OWUxY2FkLi4xYmNmNDQ3ZjJmOGIwIDEwMDY0NFxuLS0tIGEvbmV0L2wydHAvbDJ0cF9wcHAuY1xuKysrIGIvbmV0L2wydHAvbDJ0cF9wcHAuY1xuQEAgLTE1OTcsNiArMTU5Nyw1MyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHBwcG9sMnRwX3NlcV9vcHMgPSB7XG4gXHQuc3RvcFx0XHQ9IHBwcG9sMnRwX3NlcV9zdG9wLFxuIFx0LnNob3dcdFx0PSBwcHBvbDJ0cF9zZXFfc2hvdyxcbiB9O1xuK1xuK3N0YXRpYyBpbnQgcHBwb2wydHBfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxuK3tcbitcdHN0cnVjdCBuZXQgKm5ldCA9IHBkZV9kYXRhKGlub2RlKTtcbitcdHN0cnVjdCBwcHBvbDJ0cF9zZXFfZGF0YSAqcGQ7XG4rXG4rXHRuZXQgPSBtYXliZV9nZXRfbmV0KG5ldCk7XG4rXHRpZiAoIW5ldClcbitcdFx0cmV0dXJuIC1FTlhJTztcbitcbitcdHBkID0gX19zZXFfb3Blbl9wcml2YXRlKGZpbGUsIFx1MDAyNnBwcG9sMnRwX3NlcV9vcHMsIHNpemVvZigqcGQpKTtcbitcdGlmICghcGQpIHtcbitcdFx0cHV0X25ldChuZXQpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcbisjaWZkZWYgQ09ORklHX05FVF9OU1xuK1x0cGQtXHUwMDNlcC5uZXQgPSBuZXQ7XG4rXHRuZXRuc190cmFja2VyX2FsbG9jKG5ldCwgXHUwMDI2cGQtXHUwMDNlcC5uc190cmFja2VyLCBHRlBfS0VSTkVMKTtcbisjZW5kaWZcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHBwcG9sMnRwX3Byb2NfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbit7XG4rXHRzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGZpbGUtXHUwMDNlcHJpdmF0ZV9kYXRhO1xuK1x0c3RydWN0IHBwcG9sMnRwX3NlcV9kYXRhICpwZCA9IHNlcS1cdTAwM2Vwcml2YXRlO1xuK1xuK1x0aWYgKHBkLVx1MDAzZXNlc3Npb24pXG4rXHRcdGwydHBfc2Vzc2lvbl9wdXQocGQtXHUwMDNlc2Vzc2lvbik7XG4rXHRpZiAocGQtXHUwMDNldHVubmVsKVxuK1x0XHRsMnRwX3R1bm5lbF9wdXQocGQtXHUwMDNldHVubmVsKTtcbitcbisjaWZkZWYgQ09ORklHX05FVF9OU1xuK1x0cHV0X25ldF90cmFjayhwZC1cdTAwM2VwLm5ldCwgXHUwMDI2cGQtXHUwMDNlcC5uc190cmFja2VyKTtcbisjZWxzZVxuK1x0cHV0X25ldChcdTAwMjZpbml0X25ldCk7XG4rI2VuZGlmXG4rXHRyZXR1cm4gc2VxX3JlbGVhc2VfcHJpdmF0ZShpbm9kZSwgZmlsZSk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvY19vcHMgcHBwb2wydHBfcHJvY19vcHMgPSB7XG4rXHQucHJvY19vcGVuXHQ9IHBwcG9sMnRwX3Byb2Nfb3BlbixcbitcdC5wcm9jX3JlYWRcdD0gc2VxX3JlYWQsXG4rXHQucHJvY19sc2Vla1x0PSBzZXFfbHNlZWssXG4rXHQucHJvY19yZWxlYXNlXHQ9IHBwcG9sMnRwX3Byb2NfcmVsZWFzZSxcbit9O1xuICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqL1xuIFxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQEAgLTE2MDgsOCArMTY1NSw4IEBAIHN0YXRpYyBfX25ldF9pbml0IGludCBwcHBvbDJ0cF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpXG4gXHRzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTtcbiBcdGludCBlcnIgPSAwO1xuIFxuLVx0cGRlID0gcHJvY19jcmVhdGVfbmV0KFwicHBwb2wydHBcIiwgMDQ0NCwgbmV0LVx1MDAzZXByb2NfbmV0LFxuLVx0XHRcdCAgICAgIFx1MDAyNnBwcG9sMnRwX3NlcV9vcHMsIHNpemVvZihzdHJ1Y3QgcHBwb2wydHBfc2VxX2RhdGEpKTtcbitcdHBkZSA9IHByb2NfY3JlYXRlX2RhdGEoXCJwcHBvbDJ0cFwiLCAwNDQ0LCBuZXQtXHUwMDNlcHJvY19uZXQsXG4rXHRcdFx0ICAgICAgIFx1MDAyNnBwcG9sMnRwX3Byb2Nfb3BzLCBuZXQpO1xuIFx0aWYgKCFwZGUpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXQ7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODozMy4yOTc2MTk5NjRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE4MTA0OTU4MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTDJUUCBSZWZlcmVuY2UgTGVhayBGaXg6IEEgUXVpY2sgUmV2aWV3KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgTDJUUCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvbDJ0cC9sMnRwX2RlYnVnZnMuY2AgYW5kIGBuZXQvbDJ0cC9sMnRwX3BwcC5jYC4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhZGRyZXNzaW5nIGEgY2xhc3NpYyByZWZlcmVuY2UgY291bnRpbmcgaXNzdWUsIHdoaWNoIEkgbGlrZSB0byBzZWUgYWRkcmVzc2VkLlxuXG5JbiBgbDJ0cF9kZWJ1Z2ZzLmNgLCB0aGUgcGF0Y2ggYWRkcyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIHdpdGhpbiB0aGUgYGwydHBfZGZzX3NlcV9yZWxlYXNlYCBmdW5jdGlvbi4gVGhpcyBpcyBjcml0aWNhbC4gRXNzZW50aWFsbHksIHdoZW4gdGhlIGRlYnVnZnMgZmlsZSBpcyBjbG9zZWQsIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgd2UgcmVsZWFzZSB0aGUgcmVmZXJlbmNlcyBoZWxkIG9uIHRoZSBzZXNzaW9uIGFuZCB0dW5uZWwuIE90aGVyd2lzZSwgd2UncmUgc3RhcmluZyBkb3duIHRoZSBiYXJyZWwgb2YgZWl0aGVyIGEgbWVtb3J5IGxlYWsgb3IgYSB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpbywgd2hpY2ggaXMgYSBiaWcgbm8tbm8sIGFzIHdlIGJvdGgga25vdy4gVGhlIG9sZCBjb2RlIHdhcyBqdXN0ICptaXNzaW5nKiB0aGVzZSBgcHV0YCBjYWxscy5cblxuVGhlIGNoYW5nZXMgaW4gYGwydHBfcHBwLmNgIG1pcnJvciB0aGlzLiBUaGV5J3ZlIHVwZGF0ZWQgdGhlIHByb2MgZmlsZSBoYW5kbGluZy4gTm93LCBpbnN0ZWFkIG9mIGp1c3QgdXNpbmcgdGhlIHN0YW5kYXJkIGBwcm9jX2NyZWF0ZV9uZXRgIGFuZCBgc2VxX29wZW5gLCB0aGlzIHBhdGNoIGJyaW5ncyBpbiBgcHJvY19jcmVhdGVfZGF0YWAgYW5kIGN1c3RvbSBgcHJvY19vcHNgLCBzcGVjaWZpY2FsbHkgYHBwcG9sMnRwX3Byb2Nfb3BlbmAgYW5kIGBwcHBvbDJ0cF9wcm9jX3JlbGVhc2VgLiBUaGlzIGVuc3VyZXMgdGhhdCB3aGVuIHRoZSBwcm9jIGZpbGUgaXMgY2xvc2VkLCB0aGUgc2Vzc2lvbiBhbmQgdHVubmVsIHJlZmVyZW5jZXMgYXJlIHByb3Blcmx5IGRlY3JlbWVudGVkLCBwcmV2ZW50aW5nIHNpbWlsYXIgbGVha3MuIEFnYWluLCB0aGlzIGlzIGFsbCBhYm91dCBwcm9wZXIgcmVzb3VyY2UgbWFuYWdlbWVudCwgYW5kIEkgYW0gZ2xhZCB0byBzZWUgaXQgaGVyZS5cblxuSSd2ZSB0YWtlbiBhIHF1aWNrIGdsYW5jZSBhdCB0aGUgY29kZSwgcGFydGljdWxhcmx5IGF0IGBfX3NlcV9vcGVuX3ByaXZhdGVgLCBhbmQgaXQgYXBwZWFycyB0aGF0IGBwZGAgKHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlKSBpcyBga3phbGxvY2AnZCwgd2hpY2ggbWVhbnMgaXQncyB6ZXJvLWluaXRpYWxpemVkLiBUaGlzIG1lYW5zIGBwZC1cdTAwM2VzZXNzaW9uYCBhbmQgYHBkLVx1MDAzZXR1bm5lbGAgc3RhcnQgb3V0IGFzIE5VTEwuIFNvIHRoZXJlJ3Mgbm8gcmlzayBvZiBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgdXNlZCB3aGljaCBpcyBncmVhdC5cblxuRXNzZW50aWFsbHksIHRoaXMgaXMgYSBjbGVhbiBmaXggZm9yIGEgcmVmZXJlbmNlIGNvdW50aW5nIGxlYWsuIEkgYW0gY29uZmlkZW50IHRoYXQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcy4gV2UncmUgbm90IGxlYWtpbmcgYW55IHNlbnNpdGl2ZSBkYXRhLiBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuIEtBU0FOL0tNRU1MRUFLIG9yIHJlZ3VsYXIgcmVmY291bnQgZGVidWdnaW5nIHdvdWxkIGhhdmUgY2F1Z2h0IHRoZXNlIGlzc3VlcyBhbnl3YXksIGJ1dCBpdCdzIGltcG9ydGFudCB0byBhZGRyZXNzIHRoZW0uIE92ZXJhbGwsIGdvb2Qgd29yazsgYSBzaW1wbGUsIGVmZmVjdGl2ZSBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4MiwiT3V0cHV0VG9rZW5zIjoxODQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NzYsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMFQxNjoxODo0NS4xMDgxMTgyMzFaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIHJlZmVyZW5jZSBjb3VudCBsZWFrcyBpbiBMMlRQIGRlYnVnZnMgYW5kIHByb2NmcyBieSBhZGRpbmcgbWlzc2luZyBgbDJ0cF9zZXNzaW9uX3B1dGAgYW5kIGBsMnRwX3R1bm5lbF9wdXRgIGNhbGxzIGluIHRoZSByZWxlYXNlIGhhbmRsZXJzLiBJdCBhbHNvIHJlcGxhY2VzIGBwcm9jX2NyZWF0ZV9uZXRgIHdpdGggYHByb2NfY3JlYXRlX2RhdGFgIGFuZCBjdXN0b20gYHByb2Nfb3BzYCB0byBlbnN1cmUgdGhlIHJlbGVhc2UgaGFuZGxlciBpcyBjYWxsZWQuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBtZW1vcnkvcmVmY291bnQgbGVha3MgYW5kIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4sIEtNRU1MRUFLLCBhbmQgcmVmY291bnQgY2hlY2tpbmcuIFRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHdpdGggYGt6YWxsb2NgICh2aWEgYF9fc2VxX29wZW5fcHJpdmF0ZWApLCBzbyB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHVzZWQgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgS01TQU4gaXMgbm90IGFwcGxpY2FibGUgaGVyZS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyByZWZlcmVuY2UgY291bnQgbGVha3MgaW4gTDJUUCBkZWJ1Z2ZzIGFuZCBwcm9jZnMgYnkgYWRkaW5nIG1pc3NpbmcgYGwydHBfc2Vzc2lvbl9wdXRgIGFuZCBgbDJ0cF90dW5uZWxfcHV0YCBjYWxscyBpbiB0aGUgcmVsZWFzZSBoYW5kbGVycy4gSXQgYWxzbyByZXBsYWNlcyBgcHJvY19jcmVhdGVfbmV0YCB3aXRoIGBwcm9jX2NyZWF0ZV9kYXRhYCBhbmQgY3VzdG9tIGBwcm9jX29wc2AgdG8gZW5zdXJlIHRoZSByZWxlYXNlIGhhbmRsZXIgaXMgY2FsbGVkLiBUaGVzZSBjaGFuZ2VzIGFkZHJlc3MgbWVtb3J5L3JlZmNvdW50IGxlYWtzIGFuZCBwb3RlbnRpYWwgdXNlLWFmdGVyLWZyZWUgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOLCBLTUVNTEVBSywgYW5kIHJlZmNvdW50IGNoZWNraW5nLiBUaGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCB3aXRoIGBremFsbG9jYCAodmlhIGBfX3NlcV9vcGVuX3ByaXZhdGVgKSwgc28gdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyB1c2VkIG9yIGxlYWtlZCB0byB1c2VyIHNwYWNlLiBUaGVyZWZvcmUsIEtNU0FOIGlzIG5vdCBhcHBsaWNhYmxlIGhlcmUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflownpktp[1] Phase: Succeeded StartedAt: 2026-08-10 16:18:57 +0000 UTC FinishedAt: 2026-08-10 16:18:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-10 16:18:57 +0000 UTC FinishedAt: 2026-08-10 16:18:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2] Phase: Succeeded StartedAt: 2026-08-10 16:18:57 +0000 UTC FinishedAt: 2026-08-10 20:03:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-10 16:18:57 +0000 UTC FinishedAt: 2026-08-10 20:03:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-10 16:18:57 +0000 UTC FinishedAt: 2026-08-10 16:19:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-10 16:18:57 +0000 UTC FinishedAt: 2026-08-10 16:19:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflownpktp/series-workflownpktp-convert-artifact-1975896964/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-10 16:19:07 +0000 UTC FinishedAt: 2026-08-10 16:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-10 16:19:07 +0000 UTC FinishedAt: 2026-08-10 16:37:42 +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:*7164a511-da7e-4c91-afab-95ce329ba1de,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-workflownpktp/series-workflownpktp-convert-artifact-1975896964/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": "b0a4ab13-c802-49e3-a403-559a8fe9151a", "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-workflownpktp/series-workflownpktp-build-action-2160693442/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-10 16:19:07 +0000 UTC FinishedAt: 2026-08-10 16:37:32 +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:*7164a511-da7e-4c91-afab-95ce329ba1de,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-workflownpktp/series-workflownpktp-convert-artifact-1975896964/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": "b0a4ab13-c802-49e3-a403-559a8fe9151a", "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-workflownpktp/series-workflownpktp-build-action-2160693442/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-10 16:37:42 +0000 UTC FinishedAt: 2026-08-10 16:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-10 16:37:42 +0000 UTC FinishedAt: 2026-08-10 16:37:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-10 16:37:42 +0000 UTC FinishedAt: 2026-08-10 16:37:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-10 16:37:42 +0000 UTC FinishedAt: 2026-08-10 16:37:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.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-workflownpktp/series-workflownpktp-convert-artifact-1214257155/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-10 16:37:53 +0000 UTC FinishedAt: 2026-08-10 16:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-10 16:37:53 +0000 UTC FinishedAt: 2026-08-10 16:39:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0a4ab13-c802-49e3-a403-559a8fe9151a,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-workflownpktp/series-workflownpktp-build-action-2160693442/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-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-10 16:39:57 +0000 UTC FinishedAt: 2026-08-10 16:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-10 16:39:57 +0000 UTC FinishedAt: 2026-08-10 16:39:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-10 16:39:57 +0000 UTC FinishedAt: 2026-08-10 16:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-10 16:39:57 +0000 UTC FinishedAt: 2026-08-10 16:56:40 +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:*7164a511-da7e-4c91-afab-95ce329ba1de,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-workflownpktp/series-workflownpktp-convert-artifact-1214257155/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": "45f68d9e-e4b2-4ebf-a613-48ff1ab01fce", "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-workflownpktp/series-workflownpktp-build-action-1414579895/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-10 16:39:57 +0000 UTC FinishedAt: 2026-08-10 16:56:30 +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:*7164a511-da7e-4c91-afab-95ce329ba1de,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-workflownpktp/series-workflownpktp-convert-artifact-1214257155/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": "45f68d9e-e4b2-4ebf-a613-48ff1ab01fce", "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-workflownpktp/series-workflownpktp-build-action-1414579895/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-10 16:56:40 +0000 UTC FinishedAt: 2026-08-10 16:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-10 16:56:40 +0000 UTC FinishedAt: 2026-08-10 16:56:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-10 16:56:40 +0000 UTC FinishedAt: 2026-08-10 16:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-10 16:56:40 +0000 UTC FinishedAt: 2026-08-10 16:58:33 +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:*45f68d9e-e4b2-4ebf-a613-48ff1ab01fce,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-workflownpktp/series-workflownpktp-build-action-1414579895/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-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-10 16:58:43 +0000 UTC FinishedAt: 2026-08-10 20:03:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-10 16:58:43 +0000 UTC FinishedAt: 2026-08-10 20:03:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"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:*b0a4ab13-c802-49e3-a403-559a8fe9151a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45f68d9e-e4b2-4ebf-a613-48ff1ab01fce,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-workflownpktp/series-workflownpktp-build-action-2160693442/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-workflownpktp/series-workflownpktp-build-action-1414579895/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-10 16:58:43 +0000 UTC FinishedAt: 2026-08-10 16:58:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-10 16:58:43 +0000 UTC FinishedAt: 2026-08-10 16:58:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"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-workflownpktp/series-workflownpktp-convert-artifact-4061041948/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-10 16:58:43 +0000 UTC FinishedAt: 2026-08-10 16:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-10 16:58:43 +0000 UTC FinishedAt: 2026-08-10 16:58:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-10 16:58:44 +0000 UTC FinishedAt: 2026-08-10 16:58:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-10 16:58:54 +0000 UTC FinishedAt: 2026-08-10 20:03:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownpktp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["l2tp_dfs_seq_release","pppol2tp_proc_open","pppol2tp_proc_release"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dd057113ac7ba5bdd2aed3d9405305911152f911","config_name":"upstream-apparmor-kasan.config","enable_configs":["L2TP","L2TP_DEBUGFS","PPP","PPPOL2TP","DEBUG_FS","PROC_FS"],"series_id":"7312f22c-647c-4f5d-b299-da8fad8c432b","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-10 16:58:54 +0000 UTC FinishedAt: 2026-08-10 20:03:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b0a4ab13-c802-49e3-a403-559a8fe9151a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*45f68d9e-e4b2-4ebf-a613-48ff1ab01fce,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-workflownpktp/series-workflownpktp-build-action-2160693442/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-workflownpktp/series-workflownpktp-build-action-1414579895/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-workflownpktp/series-workflownpktp-convert-artifact-4061041948/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,}