Name: series-workflow2g5cg Phase: Succeeded StartedAt: 2026-08-27 06:26:38 +0000 UTC FinishedAt: 2026-08-27 10:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[0] Phase: Succeeded StartedAt: 2026-08-27 06:26:38 +0000 UTC FinishedAt: 2026-08-27 06:46:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[0].run-triage Phase: Succeeded StartedAt: 2026-08-27 06:26:38 +0000 UTC FinishedAt: 2026-08-27 06:46:05 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "48b69cc8825d411a4c4df32de854434e9235a1b0", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "48b69cc8825d411a4c4df32de854434e9235a1b0", "config_name": "upstream-apparmor-kasan.config", "series_id": "0e874796-87e7-4ca4-a3c7-ddc18b694792" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "btf_struct_is_composed_of", "btf_type_is_arena_ptr", "btf_prepare_func_args" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZiYjMzQ7LAogICAgJiMzNDtidGZfdHlwZV9pc19hcmVuYV9wdHImIzM0OywKICAgICYjMzQ7YnRmX3ByZXBhcmVfZnVuY19hcmdzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBrZnVuY3MgYW5kIHN1YnByb2dyYW1zIHRvIHJldHVybiBzdHJ1Y3RzL3VuaW9ucyBjb250YWluaW5nIGFyZW5hIHBvaW50ZXJzIGJ5IHZhbHVlLiBJdCB1cGRhdGVzIHRoZSB2ZXJpZmllciYjMzk7cyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGUgdmVyaWZpZXIuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgcmV0dXJuaW5nIHN0cnVjdHMgb3IgdW5pb25zIGJ5IHZhbHVlIGZyb20ga2Z1bmNzIGFuZCBnbG9iYWwgc3VicHJvZ3JhbXMgaWYgdGhleSBhcmUgY29tcG9zZWQgb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgKHBvaW50ZXJzIHdpdGggdGhlIGBidGZfdHlwZV90YWcoXCYjMzQ7YXJlbmFcJiMzNDspYCBhdHRyaWJ1dGUpLiBQcmV2aW91c2x5LCBvbmx5IHNjYWxhcnMgd2VyZSBhbGxvd2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZlcmlmaWVyJiMzOTtzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIChoYW5kbGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCBhcmVuYSBwb2ludGVycykuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBzdWNoIGtmdW5jcyBvciBzdWJwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmN2U4YThhOTUwMWU1ZWEzYmNhOWI4ZTEyMmZkYzRlY2M1NDVlNjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjo0MzozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggODlkZWE2YjBiMDI0MS4uOTZiZjYzZDM0NDMyMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC01ODEsMjAgJiM0Mzs1ODEsMjcgQEAgYWdhaW5zdCB0aGUgYXJlbmEuIExhcmdlciBhY2Nlc3NlcyBtdXN0IHZlcmlmeSB0aGUgcmFuZ2UgZXhwbGljaXRseS5cbiBBIGtmdW5jIG1heSByZXR1cm4gYSBzY2FsYXIsIGEgcG9pbnRlciwgb3IgYSBzbWFsbCBzdHJ1Y3Qgb3IgdW5pb24gYnlcbiB2YWx1ZS4gQSBzY2FsYXIgb3IgcG9pbnRlciBvZiB1cCB0byA4IGJ5dGVzIGlzIHJldHVybmVkIGluIFIwLCBhcyB1c3VhbC5cbiBcbi1BIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFyc1xuLShyZWN1cnNpdmVseSksIHdoZXJlIGEgc2NhbGFyIGlzIGFuIGludGVnZXIgb3IgYW4gZW51bTsgYXJyYXlzIG9mIHNjYWxhcnMgYXJlXG4tYWxsb3dlZCBhcyBtZW1iZXJzLiBJdHMgYnl0ZXMgYXJlIGhhbmRlZCBiYWNrIHRvIHRoZSBwcm9ncmFtIGFzIHRoZSByYXdcbi1jb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyXG4tYW5kIGVzY2FwZSB0aGUgdmVyaWZpZXImIzM5O3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIEEgc3RydWN0XG4tb3IgdW5pb24gd2l0aCBhIHBvaW50ZXIgbWVtYmVyIGlzIHRoZXJlZm9yZSByZWplY3RlZCBhdCBsb2FkIHRpbWUsIGFuZCBzbyBpc1xuLW9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3QgcmV0dXJuIGluIFIwOlIyIGF0XG4tYWxsLlxuJiM0MztBIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycyBhbmQgYXJlbmFcbiYjNDM7cG9pbnRlcnMgKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtIGFuZCBhbiBhcmVuYVxuJiM0Mztwb2ludGVyIGlzIG9uZSBjYXJyeWluZyB0aGUgYGBidGZfdHlwZV90YWcoXCYjMzQ7YXJlbmFcJiMzNDspYGAgYXR0cmlidXRlOyBhcnJheXMgb2ZcbiYjNDM7ZWl0aGVyIGFyZSBhbGxvd2VkIGFzIG1lbWJlcnMuIEl0cyBieXRlcyBhcmUgaGFuZGVkIGJhY2sgdG8gdGhlIHByb2dyYW0gYXMgdGhlXG4mIzQzO3JhdyBjb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBtZW1iZXIgb2YgYW55IG90aGVyIHBvaW50ZXIgdHlwZSB3b3VsZCBiZVxuJiM0MztsYXVuZGVyZWQgaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kXG4mIzQzO3JlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3Qgb3IgdW5pb24gd2l0aCBzdWNoIGEgbWVtYmVyIGlzIHRoZXJlZm9yZSByZWplY3RlZFxuJiM0MzthdCBsb2FkIHRpbWUsIGFuZCBzbyBpcyBvbmUgd2l0aCBhIGZsb2F0aW5nLXBvaW50IG1lbWJlciwgd2hpY2ggdGhlIEFCSSBtYXkgbm90XG4mIzQzO3JldHVybiBpbiBSMDpSMiBhdCBhbGwuXG4mIzQzO1xuJiM0MztBbiBhcmVuYSBwb2ludGVyIG1lbWJlciBpcyBoYW5kZWQgYmFjayBhcyBhIHNjYWxhciB0b28sIGJ1dCBub3RoaW5nIGlzIGxvc3QgYnlcbiYjNDM7dGhhdC4gVGhlIHByb2dyYW0gbXVzdCBgYGNhc3Rfa2VybigpYGAgdGhlIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCwgYW5kIHRoZVxuJiM0Mzt2ZXJpZmllciBhbGxvd3MgdGhhdCBjYXN0IG9uIGFueSBzY2FsYXIsIHNvIGEgbGF1bmRlcmVkIGFyZW5hIGFkZHJlc3MgZ2l2ZXMgdGhlXG4mIzQzO3Byb2dyYW0gbm8gcmVhY2ggaXQgZGlkIG5vdCBhbHJlYWR5IGhhdmUuIFRoZSByZXN1bHQgaXMgY29uZmluZWQgdG8gdGhlXG4mIzQzO3Byb2dyYW0mIzM5O3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuXG4gXG4gQSBrZnVuYyBtYXkgYWxzbyByZXR1cm4gYSB2YWx1ZSBsYXJnZXIgdGhhbiA4IGJ5dGVzIGFuZCB1cCB0byAxNiBieXRlcyAtLSBhXG4tc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZFxuLWluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNIHVzZXMgZm9yIHRoZSBCUEZcbi10YXJnZXQ6IHRoZSBmaXJzdCA4IGJ5dGVzIGluIFIwIGFuZCB0aGUgc2Vjb25kIDggYnl0ZXMgaW4gUjIuIEEgc3RydWN0IG9yXG4tdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLlxuJiM0MztzdHJ1Y3Qgb3IgdW5pb24gb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMsIG9yIGFuIGBgX19pbnQxMjhgYC4gU3VjaCBhXG4mIzQzO3ZhbHVlIGlzIHJldHVybmVkIGluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNXG4mIzQzO3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLlxuJiM0MztBIHN0cnVjdCBvciB1bmlvbiBvZiA4IGJ5dGVzIG9yIGxlc3MgaXMgcmV0dXJuZWQgaW4gUjAgYWxvbmUuXG4gXG4gOjpcbiBcbkBAIC02MjAsMTAgJiM0Mzs2MjcsMTAgQEAgdXNlZCB3aGVuIHRoZSBwcm9ncmFtIGlzIEpJVGVkLCBzaW5jZSB0aGUgaW50ZXJwcmV0ZXIgcHJvcGFnYXRlcyBvbmx5IFIwIG91dCBvZlxuIGEgc3VicHJvZ3JhbTogd2l0aG91dCBhIEpJVCB0aGUgcmV0dXJuIHZhbHVlIHN0YXlzIGluIFIwIGFsb25lLCBhbmQgYSBjYWxsZXJcbiByZWFkaW5nIFIyIGlzIHJlamVjdGVkIGZvciByZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcmVnaXN0ZXIuIEEgZ2xvYmFsXG4gc3VicHJvZ3JhbSBpcyB2ZXJpZmllZCBpbiBpc29sYXRpb24sIHNvIGl0cyBieS12YWx1ZSBzdHJ1Y3Qgb3IgdW5pb24gcmV0dXJuIGlzXG4tcmVzdHJpY3RlZCB0byBzY2FsYXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkXG4taW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcyBub3QgY292ZXJlZDogaXRzIHJldHVyblxuLXZhbHVlIGlzIHRoZSBwcm9ncmFtJiMzOTtzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjAgYWxvbmUsIHNvIGEgZGVjbGFyZWQgdXBwZXJcbi1oYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC5cbiYjNDM7cmVzdHJpY3RlZCB0byBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyBqdXN0IGxpa2UgYSBrZnVuYyYjMzk7czsgYSBzdGF0aWNcbiYjNDM7c3VicHJvZ3JhbSBpcyB2ZXJpZmllZCBpbmxpbmUgYW5kIGhhcyBubyBzdWNoIHJlc3RyaWN0aW9uLiBUaGUgbWFpbiBwcm9ncmFtIGlzXG4mIzQzO25vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuIHZhbHVlIGlzIHRoZSBwcm9ncmFtJiMzOTtzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjBcbiYjNDM7YWxvbmUsIHNvIGEgZGVjbGFyZWQgdXBwZXIgaGFsZiBpcyBuZXZlciBsb29rZWQgYXQuXG4gXG4gQSBnbG9iYWwgc3VicHJvZ3JhbSBtdXN0IGxlYXZlIGEgc2NhbGFyIGluICpldmVyeSogcmVnaXN0ZXIgb2YgdGhlIHBhaXIsIHNvXG4gYm90aCBoYWx2ZXMgb2YgdGhlIHJldHVybmVkIHZhbHVlIGhhdmUgdG8gYmUgYXNzaWduZWQuIExlYXZpbmcgdGhlIHVwcGVyIGhhbGZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMDA0YjA2Nzg1NTIxYy4uYWU5ZjYwNjUzOWY0MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xNDg4LDggJiM0MzsxNDg4LDE1IEBAIGludCBicGZfam1wX29mZnNldChzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuIHN0cnVjdCBicGZfaWFycmF5ICpicGZfaW5zbl9zdWNjZXNzb3JzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZHgpO1xuIHZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKTtcbiBib29sIGJwZl9zdWJwcm9nX2lzX2dsb2JhbChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7XG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKTtcbiYjNDM7XG4mIzQzOy8qIEtpbmRzIG9mIG1lbWJlciBhIGJ5LXZhbHVlIHN0cnVjdCBvciB1bmlvbiBtYXkgYmUgY29tcG9zZWQgb2YuICovXG4mIzQzO2VudW0gYnRmX21lbWJlcl9raW5kIHtcbiYjNDM7XHRCVEZfTUVNQkVSX1NDQUxBUlx0PSBCSVQoMCksIC8qIGFuIGludCBvciBhbiBlbnVtICovXG4mIzQzO1x0QlRGX01FTUJFUl9BUkVOQV9QVFJcdD0gQklUKDEpLCAvKiBhIHBvaW50ZXIgY2FycnlpbmcgdGhlIFwmIzM0O2FyZW5hXCYjMzQ7IHR5cGUgdGFnICovXG4mIzQzO307XG4mIzQzO1xuJiM0Mztib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzKTtcbiBcbiBpbnQgYnBmX2ZpbmRfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKTtcbiBib29sIGJwZl9pc190aHJvd19rZnVuYyhzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnRmLmggYi9pbmNsdWRlL2xpbnV4L2J0Zi5oXG5pbmRleCA4OWQ1YTVjNGYxMTcxLi5kZGQwZjRmMzJkMjRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idGYuaFxuQEAgLTIzNSw2ICYjNDM7MjM1LDcgQEAgc3RydWN0IGJ0Zl9yZWNvcmQgKmJ0Zl9wYXJzZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVcbiBcdFx0XHRcdCAgICB1MzIgZmllbGRfbWFzaywgdTMyIHZhbHVlX3NpemUpO1xuIGludCBidGZfY2hlY2tfYW5kX2ZpeHVwX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBidGZfcmVjb3JkICpyZWMpO1xuIGJvb2wgYnRmX3R5cGVfaXNfdm9pZChjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpO1xuJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7XG4gczMyIGJ0Zl9maW5kX2J5X25hbWVfa2luZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGtpbmQpO1xuIHMzMiBicGZfZmluZF9idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgdTMyIGtpbmQsIHN0cnVjdCBidGYgKipidGZfcCk7XG4gc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDkxYjhjZTc3ZjY5OWEuLmY2ZDgyYThmZDYxN2IgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtMzUyMyw2ICYjNDM7MzUyMywyMiBAQCBzdGF0aWMgaW50IGJ0Zl90eXBlX3RhZ193YWxrKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7Ym9vbCBidGZfdHlwZV9pc19hcmVuYV9wdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LVx1MDAzZXR5cGUpOyBidGZfdHlwZV9pc19tb2RpZmllcih0KTtcbiYjNDM7XHQgICAgIHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtXHUwMDNldHlwZSkpIHtcbiYjNDM7XHRcdGlmICghYnRmX3R5cGVfaXNfdHlwZV90YWcodCkgfHwgYnRmX3R5cGVfa2ZsYWcodCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFzdHJjbXAoX19idGZfbmFtZV9ieV9vZmZzZXQoYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSwgXCYjMzQ7YXJlbmFcJiMzNDspKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJ0Zl9maW5kX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRcdFx0IHUzMiBvZmYsIGludCBzeiwgc3RydWN0IGJ0Zl9maWVsZF9pbmZvICppbmZvLCB1MzIgZmllbGRfbWFzaylcbiB7XG5AQCAtNzkyNyw1MSAmIzQzOzc5NDMsMTkgQEAgc3RhdGljIGludCBidGZfc2Nhbl9kZWNsX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGJ0Zl9zY2FuX3R5cGVfdGFncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsXG4tXHRcdFx0ICAgICAgdTMyICp0YWdzKVxuJiM0MztzdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxuIHtcbi1cdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVfdGFnX21hdGNoIGZ1bmNfdHlwZV90YWdzW10gPSB7XG4tXHRcdHsgXCYjMzQ7YXJlbmFcJiMzNDssIEFSR19UQUdfQVJFTkEgfSxcbi1cdH07XG4tXHRzdHJ1Y3QgYnRmX3R5cGVfdGFnX3dhbGtfY3R4IGN0eDtcbi1cdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcbi1cdGludCBlcnI7XG4tXG4gXHQvKiBGaW5kIHRoZSBmaXJzdCBwb2ludGVyIHR5cGUgaW4gdGhlIGNoYWluLiAqL1xuLVx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcyxcbi1cdCAqIHdoaWNoIG5laXRoZXIgTExWTSBub3IgR0NDIHN1cHBvcnQgYW55d2F5LlxuLVx0ICovXG4tXHRpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRjdHgudCA9IHQ7XG4tXHRlcnIgPSBidGZfdHlwZV90YWdfd2FsayhidGYsIFx1MDAyNmN0eCwgZnVuY190eXBlX3RhZ3MsXG4tXHRcdFx0XHRBUlJBWV9TSVpFKGZ1bmNfdHlwZV90YWdzKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGJwZl9sb2coXHUwMDI2ZW52LVx1MDAzZWxvZyxcbi1cdFx0XHRcJiMzNDtmdW5jdGlvbiBzaWduYXR1cmUgbWVtYmVyIGhhcyBtdWx0aXBsZSB0eXBlIHRhZ3NcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0KnRhZ3MgfD0gY3R4LnJlcztcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdGlmIChidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbiYjNDM7XHRcdCp0YWdzIHw9IEFSR19UQUdfQVJFTkE7XG4gfVxuIFxuIC8qIENoZWNrIHdoZXRoZXIgdGhlIHR5cGUgaXMgYSB2YWxpZCByZXR1cm4gdHlwZS4gKi9cbiBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHN1YnByb2csIGJvb2wgaXNfZ2xvYmFsKVxuIHtcbi1cdHUzMiB0YWdzID0gMDtcbi1cdGludCBlcnI7XG4tXG4tXHRlcnIgPSBidGZfc2Nhbl90eXBlX3RhZ3MoZW52LCBidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dGFncyk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuIFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBOVUxMKTtcbiBcbiBcdC8qXG5AQCAtNzk3OSw3ICYjNDM7Nzk2Myw3IEBAIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0XG4gXHQgKiBHZW5lcmFsIGFyZW5hIHZhcmlhYmxlcyBhcmUgbm90IGFsbG93ZWQsIHNpbmNlIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHJldHVybiBieSB2YWx1ZVxuIFx0ICogYSB2YXJpYWJsZSB0aGF0JiMzOTtzIG9uIHRoZSBoZWFwIGluIHRoZSBmaXJzdCBwbGFjZS5cbiBcdCAqL1xuLVx0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2ICh0YWdzIFx1MDAyNiBBUkdfVEFHX0FSRU5BKSBcdTAwMjZcdTAwMjYgYnRmX3R5cGVfaXNfcHRyKHQpKVxuJiM0MztcdGlmIChzdWJwcm9nIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBXZSBhbHdheXMgYWNjZXB0IHZvaWQgb3Igc2NhbGFycy4gKi9cbkBAIC03OTg5LDEzICYjNDM7Nzk3MywyMiBAQCBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidFxuIFx0aWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSBcdTAwMjZcdTAwMjYgdC1cdTAwM2VzaXplIFx1MDAzYz0gMTYpIHtcbiBcdFx0LypcbiBcdFx0ICogQSBnbG9iYWwgZnVuY3Rpb24mIzM5O3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZVxuLVx0XHQgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWxcbi1cdFx0ICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZFxuLVx0XHQgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi5cbiYjNDM7XHRcdCAqIHNjYWxhciBwYWlyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGFcbiYjNDM7XHRcdCAqIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gT25seVxuJiM0MztcdFx0ICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzXG4mIzQzO1x0XHQgKiBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUgb25lXG4mIzQzO1x0XHQgKiBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlXG4mIzQzO1x0XHQgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc29cbiYjNDM7XHRcdCAqIGl0cyBjYWxsZXIgcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXNcbiYjNDM7XHRcdCAqIGZpbmUuXG4gXHRcdCAqL1xuIFx0XHRib29sIGxvY2FsX2Z1bmMgPSBzdWJwcm9nIFx1MDAyNlx1MDAyNiAhaXNfZ2xvYmFsO1xuJiM0MztcdFx0dTMyIG1lbWJlcl9raW5kcyA9IEJURl9NRU1CRVJfU0NBTEFSO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdWJwcm9nKVxuJiM0MztcdFx0XHRtZW1iZXJfa2luZHMgfD0gQlRGX01FTUJFUl9BUkVOQV9QVFI7XG4gXG4tXHRcdGlmIChsb2NhbF9mdW5jIHx8IGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIHQsIDApKVxuJiM0MztcdFx0aWYgKGxvY2FsX2Z1bmMgfHwgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgbWVtYmVyX2tpbmRzKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC04MDkxLDcgJiM0Mzs4MDg0LDggQEAgaW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbiBcdFx0aWYgKGlzX2dsb2JhbCkge1xuIFx0XHRcdGJwZl9sb2cobG9nLFxuIFx0XHRcdFx0XCYjMzQ7R2xvYmFsIGZ1bmN0aW9uICVzKCkgaGFzIHVuc3VwcG9ydGVkIHJldHVybiB0eXBlLiBcJiMzNDtcbi1cdFx0XHRcdFwmIzM0O09ubHkgdm9pZCwgc2NhbGFyLCBvciBhIHNjYWxhci1vbmx5IHN0cnVjdC91bmlvbiB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0O09ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIFwmIzM0O1xuJiM0MztcdFx0XHRcdFwmIzM0O3NjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cXG5cJiMzNDssXG4gXHRcdFx0XHR0bmFtZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycjtcbkBAIC04MTA2LDkgJiM0Mzs4MTAwLDcgQEAgaW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBidGZfc2Nhbl90eXBlX3RhZ3MoZW52LCBidGYsIGFyZ3NbaV0udHlwZSwgXHUwMDI2dGFncyk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGJ0Zl9zY2FuX3R5cGVfdGFncyhidGYsIGFyZ3NbaV0udHlwZSwgXHUwMDI2dGFncyk7XG4gXG4gXHRcdHQgPSBidGZfdHlwZV9ieV9pZChidGYsIGFyZ3NbaV0udHlwZSk7XG4gXHRcdHdoaWxlIChidGZfdHlwZV9pc19tb2RpZmllcih0KSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGUwMzZhZTIwYmY2YjkuLjlhMzY4MDgxMzZjOWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTk5OTUsOSAmIzQzOzk5OTUsMTQgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFyZXR1cm5zX3ZvaWQpIHtcbiBcdFx0XHRucmVncyA9IGJwZl9yZXRfcmVnX3BhaXIoZW52LCBzdWJwcm9nKSA/IDIgOiAxO1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXHUwMDNlcmVncywgcmV0X3JlZ3NbaV0pO1xuJiM0MztcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzWzBdKTtcbiBcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4mIzQzO1x0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW3JldF9yZWdzW2ldXSwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiYjNDM7XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbiYjNDM7XHRcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xuQEAgLTEwNDAzLDEwICYjNDM7MTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGVcbiBcdFx0ICogcmV0dXJuIHJlZ2lzdGVyKHMpXG4gXHRcdCAqL1xuLVx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdGNhbGxlci1cdTAwM2VyZWdzW3JldF9yZWdzW2ldXSA9IGNhbGxlZS1cdTAwM2VyZWdzW3JldF9yZWdzW2ldXTtcbi1cdFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbcmVnbm9dLCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tyZWdub10sXG4mIzQzO1x0XHRcdFx0XHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xuJiM0MztcdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZWdub10gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZWdub107XG4mIzQzO1x0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcbkBAIC0xMTM0MiwxNSAmIzQzOzExMzUxLDMzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gLypcbiAgKiBNYXJrIHRoZSByZWdpc3RlcihzKSBob2xkaW5nIGEgQHNpemUgYnl0ZSBrZnVuYyByZXR1cm4gdmFsdWUgYXMgdW5rbm93blxuLSAqIHNjYWxhcnMuIEJvdGggaGFsdmVzIG9mIGEgcmVnaXN0ZXIgcGFpciBhcmUgdHJlYXRlZCB0aGUgc2FtZSB3YXkuXG4mIzQzOyAqIHNjYWxhcnMgYW5kIHJldHVybiBob3cgbWFueSByZWdpc3RlcnMgdGhhdCB0b29rLiBCb3RoIGhhbHZlcyBvZiBhIHJlZ2lzdGVyXG4mIzQzOyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LlxuJiM0MzsgKlxuJiM0MzsgKiBSMCBpcyB3cml0dGVuIGluIHRoZSBkaWFnbm9zdGljIG1vZGlmaWNhdGlvbiBzY29wZSB0aGUgY2FsbGVyIG9wZW5lZCBiZWZvcmVcbiYjNDM7ICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdFxuJiM0MzsgKiBzY29wZSBpcyB3aGF0IGNhcnJpZXMgaXRzIHByZS1jYWxsIHZhbHVlIGludG8gdGhlIGhpc3RvcnkuIEEgc2NvcGUgdHJhY2tzIGFcbiYjNDM7ICogc2luZ2xlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCBuZXN0LCBzbyBjbG9zZSBpdCBiZWZvcmUgcmVjb3JkaW5nIHRoZSByZXN0IG9mXG4mIzQzOyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJiMzOTtzIHNjb3BlIG9wZW4gZm9yXG4mIzQzOyAqIHRoZSBjYWxsZXIgdG8gY2xvc2UsIHNvIGEgbGF0ZXIgd3JpdGUgdG8gUjAgc3RpbGwgbGFuZHMgaW4gaXQuXG4gICovXG4tc3RhdGljIHZvaWQgbWFya19rZnVuY19yZXRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKVxuJiM0MztzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSlcbiB7XG4gXHR1MzIgaSwgbnJlZ3MgPSByZXRfcmVnc19jbnQoc2l6ZSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucmVnczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJldF9yZWdzWzBdKTtcbiYjNDM7XHRpZiAobnJlZ3MgPT0gMSlcbiYjNDM7XHRcdHJldHVybiBucmVncztcbiYjNDM7XG4mIzQzO1x0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuJiM0MztcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7XG4mIzQzO1x0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnJlZ3M7XG4gfVxuIFxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuQEAgLTExNjE5LDEwICYjNDM7MTE2NDYsMzMgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KGNvbnN0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwgdTMyIGFyZ19cbiBcdHJldHVybiBhcmduIFx1MDAzYz0gYXJnX2lkeDtcbiB9XG4gXG4tLyogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQgKi9cbi1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMpXG4mIzQzOyNkZWZpbmUgQlRGX01FTUJFUl9NQVhfREVQVEhcdDRcbiYjNDM7I2RlZmluZSBCVEZfTUVNQkVSX1BBVEhfTEVOXHQ2NFxuJiM0MztcbiYjNDM7c3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcltCVEZfTUVNQkVSX01BWF9ERVBUSF07XG4mIzQzO1x0aW50IGRlcHRoO1xuJiM0MztcdGJvb2wgdG9vX2RlZXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBidGZfbWVtYmVyX2tpbmRfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiYjNDM7XHRcdFx0XHQgICAgdTMyIG1lbWJlcl9raW5kcylcbiYjNDM7e1xuJiM0MztcdGlmICgobWVtYmVyX2tpbmRzIFx1MDAyNiBCVEZfTUVNQkVSX1NDQUxBUikgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmICgobWVtYmVyX2tpbmRzIFx1MDAyNiBCVEZfTUVNQkVSX0FSRU5BX1BUUikgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm5zIHRydWUgaWYgZXZlcnkgbWVtYmVyIG9mIHN0cnVjdCBAdCBpcyBvZiBhIGtpbmQgbGlzdGVkIGluXG4mIzQzOyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5XG4mIzQzOyAqIG1lbWJlciBjb3VudHMgYXMgaXRzIGVsZW1lbnQgdHlwZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcywgaW50IHJlYyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoICpwYXRoKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuQEAgLTExNjM2LDI3ICYjNDM7MTE2ODYsNjUgQEAgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QobWVtYmVyX3R5cGUpKSB7XG4tXHRcdFx0aWYgKHJlYyBcdTAwM2U9IDMpIHtcbiYjNDM7XHRcdFx0aWYgKHJlYyBcdTAwM2U9IEJURl9NRU1CRVJfTUFYX0RFUFRIIC0gMSkge1xuIFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aWYgKHBhdGgpXG4mIzQzO1x0XHRcdFx0XHRwYXRoLVx1MDAzZXRvb19kZWVwID0gdHJ1ZTtcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICYjNDM7IDEpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBidGYsIG1lbWJlcl90eXBlLCBtZW1iZXJfa2luZHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICByZWMgJiM0MzsgMSwgcGF0aCkpXG4mIzQzO1x0XHRcdFx0Z290byBiYWRfcGF0aDtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAoYnRmX3R5cGVfaXNfYXJyYXkobWVtYmVyX3R5cGUpKSB7XG4gXHRcdFx0YXJyYXkgPSBidGZfYXJyYXkobWVtYmVyX3R5cGUpO1xuIFx0XHRcdGlmICghYXJyYXktXHUwMDNlbmVsZW1zKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRcdGdvdG8gYmFkX21lbWJlcjtcbiBcdFx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXHUwMDNldHlwZSwgTlVMTCk7XG4tXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRpZiAoIWJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcykpXG4mIzQzO1x0XHRcdGdvdG8gYmFkX21lbWJlcjtcbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7YmFkX21lbWJlcjpcbiYjNDM7XHRpZiAocGF0aClcbiYjNDM7XHRcdHBhdGgtXHUwMDNlZGVwdGggPSByZWMgJiM0MzsgMTtcbiYjNDM7YmFkX3BhdGg6XG4mIzQzO1x0aWYgKHBhdGggXHUwMDI2XHUwMDI2IHBhdGgtXHUwMDNlZGVwdGgpXG4mIzQzO1x0XHRwYXRoLVx1MDAzZW1lbWJlcltyZWNdID0gbWVtYmVyO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnRmX3N0cnVjdF9tZW1iZXJfd2FsayhlbnYsIGJ0ZiwgdCwgbWVtYmVyX2tpbmRzLCAwLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbWVtYmVyX3BhdGhfc3RyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aCxcbiYjNDM7XHRcdFx0XHRjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbGVuID0gMDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0YnVmWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXRoLVx1MDAzZWRlcHRoOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHBhdGgtXHUwMDNlbWVtYmVyW2ldLVx1MDAzZW5hbWVfb2ZmKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW5hbWUgfHwgIW5hbWVbMF0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX3N6IC0gbGVuLCBcJiMzNDslcyVzXCYjMzQ7LCBsZW4gPyBcJiMzNDsuXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHR9XG4gfVxuIFxuIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcbkBAIC0xMjAzOSw3ICYjNDM7MTIxMjcsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHQgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgJiM0MzsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyAmIzQzOyAxXSkpKSB7XG4gXHRcdGlmICghYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4mIzQzO1x0XHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QpKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvIHZvaWQsIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEyMDU1LDcgJiM0MzsxMjE0Myw3IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4gXHRcdCAqIHNjYWxhcnMuIFRoZSBhY2Nlc3Mgc2l6ZSBpcyBkZXJpdmVkIGZyb20gdGhlIHBvaW50ZWQtdG8gQlRGIHR5cGUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcbiYjNDM7XHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgcG9pbnRlciB0eXBlICVzICVzIG11c3QgcG9pbnQgdG8gc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXG5cJiMzNDssXG4gXHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTMxMTEsNyAmIzQzOzEzMTk5LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4mIzQzO1x0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCkpIHtcbiBcdFx0XHRcdGVudW0gYnBmX3JlZ190eXBlIHJlZzJidGZfdHlwZSA9IGxvb2t1cF9yZWcyYnRmX2lkcyhyZWZfaWQpO1xuIFx0XHRcdFx0Y29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTtcbiBcbkBAIC0xMzY1Myw3ICYjNDM7MTM3NDEsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ1xuIFxuIFx0XHRzdHJ1Y3RfbWV0YSA9IGJ0Zl9maW5kX3N0cnVjdF9tZXRhKHJldF9idGYsIHJldF9idGZfaWQpO1xuIFx0XHRpZiAoaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEtXHUwMDNlZnVuY19pZCkpIHtcbi1cdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCwgMCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7YnBmX3BlcmNwdV9vYmpfbmV3IHR5cGUgSUQgYXJndW1lbnQgbXVzdCBiZSBvZiBhIHN0cnVjdCBvZiBzY2FsYXJzXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbkBAIC0xMzc2Nyw3ICYjNDM7MTM4NTUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDtcbiBcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4tXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xuJiM0MztcdHUzMiBpLCBuYXJncywgcHRyX3R5cGVfaWQsIHJldF9ucmVncyA9IDE7XG4gXHRzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2M7XG4gXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcbiBcdGludCBpZDtcbkBAIC0xNDAyMSwyNSAmIzQzOzE0MTA5LDU5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHR9XG4gXG4gXHRpZiAoYnRmX3R5cGVfaXNfc2NhbGFyKHQpKSB7XG4tXHRcdG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG4gXHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbiBcdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuIFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBidGZfbWVtYmVyX3BhdGggcGF0aCA9IHt9O1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSBcJiMzNDtcJiMzNDs7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZFxuLVx0XHQgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczpcbi1cdFx0ICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhclxuLVx0XHQgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cbiYjNDM7XHRcdCAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZFxuJiM0MztcdFx0ICogaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cbiYjNDM7XHRcdCAqIE9ubHkgc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXJcbiYjNDM7XHRcdCAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmVcbiYjNDM7XHRcdCAqIG9uZSBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlXG4mIzQzO1x0XHQgKiByZXN1bHQgdG8gdGhlIGFyZW5hLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgZGVzY19idGYsIHQsIDApKSB7XG4mIzQzO1x0XHRpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCxcbiYjNDM7XHRcdFx0XHRcdCAgICBCVEZfTUVNQkVSX1NDQUxBUiB8IEJURl9NRU1CRVJfQVJFTkFfUFRSLCAwLCBcdTAwMjZwYXRoKSkge1xuIFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XCYjMzQ7a2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFyc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDtrZXJuZWwgZnVuY3Rpb24gJXMgcmV0dXJucyAlcyAlcyB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXG4gXHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpKTtcbiYjNDM7XHRcdFx0aWYgKHBhdGgudG9vX2RlZXApIHtcbiYjNDM7XHRcdFx0XHRtZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdChcbiYjNDM7XHRcdFx0XHRcdGVudiwgXCYjMzQ7IEl0IG5lc3RzIHN0cnVjdHMgbW9yZSB0aGFuICVkIGxldmVscyBkZWVwLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdEJURl9NRU1CRVJfTUFYX0RFUFRIKTtcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChwYXRoLmRlcHRoKSB7XG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKmJhZCA9IHBhdGgubWVtYmVyW3BhdGguZGVwdGggLSAxXTtcbiYjNDM7XHRcdFx0XHRjaGFyIGJhZF9uYW1lW0JURl9NRU1CRVJfUEFUSF9MRU5dO1xuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsIFx1MDAyNnBhdGgsIGJhZF9uYW1lLCBzaXplb2YoYmFkX25hbWUpKTtcbiYjNDM7XHRcdFx0XHRiYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtXHUwMDNldHlwZSwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21lbWJlciAmIzM5OyVzJiMzOTsgaGFzIHR5cGUgJXNcXG5cJiMzNDssIGJhZF9uYW1lLFxuJiM0MztcdFx0XHRcdFx0YnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7XG4mIzQzO1x0XHRcdFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXG4mIzQzO1x0XHRcdFx0XHRlbnYsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDsgSXRzIG1lbWJlciAmIzM5OyVzJiMzOTsgaXMgJXMsIG5vdCBhIHNjYWxhciBvciBhbiBhcmVuYSBwb2ludGVyLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGJhZF9uYW1lLCBidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbiYjNDM7XHRcdFx0XHRlbnYsIGluc25faWR4LCBcJiMzNDt1bnN1cHBvcnRlZCBrZXJuZWwgZnVuY3Rpb24gcmV0dXJuIHR5cGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Q2FsbCBhIGtlcm5lbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25seSBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzIGJ5IHZhbHVlLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDslcygpIHJldHVybnMgJXMgJXMgYnkgdmFsdWUuJXMgXCYjMzQ7XG4mIzQzO1x0XHRcdFx0XCYjMzQ7T25seSBrZnVuY3MgcmV0dXJuaW5nIHNjYWxhciB2YWx1ZXMgb3IgYXJlbmEgcG9pbnRlcnMsIG9yIFwmIzM0O1xuJiM0MztcdFx0XHRcdFwmIzM0O3N0cnVjdHVyZXMgY29tcG9zZWQgb2Ygc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycyBhcmUgXCYjMzQ7XG4mIzQzO1x0XHRcdFx0XCYjMzQ7c3VwcG9ydGVkLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcbiYjNDM7XHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpLCBtZW1iZXJfbm90ZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbi1cdFx0bWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0XHRyZXRfbnJlZ3MgPSBtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbiBcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4gXHRcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cHRyX3R5cGVfaWQpO1xuIFx0XHRlcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XG5AQCAtMTQxNzAsNyAmIzQzOzE0MjkyLDggQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdCAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlXG4gXHQgKiBpdGVyYXRvciBwYXRoJiMzOTtzIGRpYWdub3N0aWMgcG9zaXRpb24uXG4gXHQgKi9cbi1cdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiYjNDM7XHRpZiAocmV0X25yZWdzID09IDEpXG4mIzQzO1x0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4gXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jXG5AQCAtMSwxMSAmIzQzOzEsNTMgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YWdncmVnYXRlX3JldF9mdW5jLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiwgKm1vZHVsZV9idGYgPSBOVUxMO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcbiYjNDM7XHRib29sIHRhZ2dlZCA9IGZhbHNlO1xuJiM0MztcdF9fczMyIGlkO1xuJiM0MztcbiYjNDM7XHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuJiM0MztcdGlmICghdm1saW51eF9idGYpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1vZHVsZV9idGYgPSBidGZfX2xvYWRfbW9kdWxlX2J0ZihcJiMzNDticGZfdGVzdG1vZFwmIzM0Oywgdm1saW51eF9idGYpO1xuJiM0MztcdGlmICghbW9kdWxlX2J0ZilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBwcm9nX3Rlc3RfcmV0X2FyZW5hOjphIGlzICYjMzk7dm9pZCBfX2FyZW5hX3RhZyAqJiMzOTs6IFBUUiAtXHUwMDNlIFRZUEVfVEFHIC1cdTAwM2Ugdm9pZCAqL1xuJiM0MztcdGlkID0gYnRmX19maW5kX2J5X25hbWVfa2luZChtb2R1bGVfYnRmLCBcJiMzNDtwcm9nX3Rlc3RfcmV0X2FyZW5hXCYjMzQ7LCBCVEZfS0lORF9TVFJVQ1QpO1xuJiM0MztcdGlmIChpZCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0dCA9IGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCBidGZfbWVtYmVycyhidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgaWQpKVswXS50eXBlKTtcbiYjNDM7XHRpZiAoIXQgfHwgIWJ0Zl9pc19wdHIodCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0dCA9IGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCB0LVx1MDAzZXR5cGUpO1xuJiM0MztcdHRhZ2dlZCA9IHQgXHUwMDI2XHUwMDI2IGJ0Zl9pc190eXBlX3RhZyh0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAhc3RyY21wKGJ0Zl9fbmFtZV9ieV9vZmZzZXQobW9kdWxlX2J0ZiwgdC1cdTAwM2VuYW1lX29mZiksIFwmIzM0O2FyZW5hXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XG4mIzQzO1x0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhZ2dlZDtcbiYjNDM7fVxuIFxuIHZvaWQgdGVzdF9hZ2dyZWdhdGVfcmV0KHZvaWQpXG4ge1xuIFx0UlVOX1RFU1RTKGFnZ3JlZ2F0ZV9yZXRfZnVuYyk7XG4gXHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuYyk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpXG4mIzQzO1x0XHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbmluZGV4IDZmNjZmYzgyMmNlZGUuLmYwMDc3ZDk1MWEyNWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiBcbiB0eXBlZGVmIHVuc2lnbmVkIF9faW50MTI4IHUxMjg7XG5AQCAtMjM0LDQgJiM0MzsyMzUsMTQ5IEBAIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX3VuaW9uX3B0cl9mYWlsKHZvaWQpXG4gXG4gI2VuZGlmXG4gXG4mIzQzOy8qXG4mIzQzOyAqIGdjYyByZXR1cm5zIGEgYnktdmFsdWUgc3RydWN0IHRocm91Z2ggYSBoaWRkZW4gcG9pbnRlciwgYW5kIGVtaXRzIHRoZVxuJiM0MzsgKiAmIzM5O3IwID0gcjEmIzM5OyByZXR1cm5pbmcgaXQgYWZ0ZXIgdGhlIF9fbmFrZWQgYm9keSYjMzk7cyBleGl0LCBsZWF2aW5nIHRoZVxuJiM0MzsgKiBzdWJwcm9ncmFtIGZhbGxpbmcgdGhyb3VnaC4gQnVpbGQgdGhlc2Ugd2l0aCBjbGFuZyBvbmx5LlxuJiM0MzsgKi9cbiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19fKVxuJiM0MztcbiYjNDM7c3RydWN0IGFyZW5hX3BhaXIge1xuJiM0MztcdHZvaWQgX19hcmVuYSAqbG87XG4mIzQzO1x0dm9pZCBfX2FyZW5hICpoaTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHtcbiYjNDM7XHR2b2lkIF9fYXJlbmEgKnA7XG4mIzQzO1x0X191NjQgeDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhcmVuYV9hcnJheSB7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICpwWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGFyZW5hX3NpbmdsZSB7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICpwO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dW5pb24gYXJlbmFfdXBhaXIge1xuJiM0MztcdHZvaWQgX19hcmVuYSAqcDtcbiYjNDM7XHRfX3U2NCBoYWx2ZXNbMl07XG4mIzQzO307XG4mIzQzO1xuJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjIgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX2xvYWRfaWZfSklUZWQoKVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7X19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfcGFpcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9wYWlyXTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3BhaXIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19uYWtlZCBzdHJ1Y3QgYXJlbmFfYW5kX3NjYWxhciBnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXIodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IyID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FuZF9zY2FsYXIodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7Y2FsbCAlW2dsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcl07XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0OlxuJiM0MztcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbmFrZWQgc3RydWN0IGFyZW5hX2FycmF5IGdsb2JhbF9yZXRfYXJlbmFfYXJyYXkodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IyID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FycmF5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFwmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FycmF5XTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX2FycmF5KVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9zaW5nbGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7Y2FsbCAlW2dsb2JhbF9yZXRfYXJlbmFfc2luZ2xlXTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX25ha2VkIHVuaW9uIGFyZW5hX3VwYWlyIGdsb2JhbF9yZXRfYXJlbmFfdW5pb24odm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IyID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3VuaW9uKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFwmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5lOWM4MmRmOGVmYjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuQEAgLTE4LDYgJiM0MzsxOCw4IEBAIHZvaWQgX19rZnVuY19idGZfcm9vdCh2b2lkKVxuIFx0OiBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOCksXG4gXHQgIFwmIzM0O3JcJiMzNDsoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwpLFxuIFx0ICBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0ciksXG4mIzQzO1x0ICBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCksXG4mIzQzO1x0ICBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApLFxuIFx0ICBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKSxcbiBcdCAgXCYjMzQ7clwmIzM0OyhcdTAwMjZicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcpKTtcbiB9XG5AQCAtNzEsNyAmIzQzOzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gXG4gU0VDKFwmIzM0O3RjXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21lbWJlciAmIzM5O3AmIzM5OyBoYXMgdHlwZSBQVFJcJiMzNDspXG4gX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtODQsNiAmIzQzOzg3LDM3IEBAIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfcHRyX2ZhaWwodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1wmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWVtYmVyICYjMzk7aW4ucCYjMzk7IGhhcyB0eXBlIFBUUlwmIzM0OylcbiYjNDM7X19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19uZXN0ZWRfcHRyX2ZhaWwodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjEgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O2NhbGwgJVticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWRdO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZClcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDttYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcJiMzNDspXG4mIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfdG9vX2RlZXBfZmFpbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyMSA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7Y2FsbCAlW2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXBdO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7dGNcJiMzNDspXG4gX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjIgIXJlYWRfb2tcJiMzNDspXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45NGMzNWUxYjU0N2NkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jXG5AQCAtMCwwICYjNDM7MSwxMjkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX2NsYW5nX21ham9yX18pIFx1MDAyNlx1MDAyNiBfX2NsYW5nX21ham9yX18gXHUwMDNlPSAyM1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSByZXR1cm5lZCBtZW1iZXIgY2FycmllcyB0aGUgYXJlbmEgdHlwZSB0YWcgYnV0IG5vdCB0aGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmXG4mIzQzOyAqIHJhdGhlciB0aGFuIHRoZSBjb21waWxlciBkb2luZyBpdC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICphLCAqYjtcbiYjNDM7XHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSByO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0LyogQm90aCBoYWx2ZXMgY29tZSBiYWNrIGluIFIwOlIyLCBwb2ludGluZyBhdCBwYWdlIGFuZCBwYWdlICYjNDM7IDQuICovXG4mIzQzO1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKCh1NjQpcGFnZSk7XG4mIzQzO1x0aWYgKCFyLmEgfHwgIXIuYilcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHRhID0gYXJlbmFfcHRyKHIuYSk7XG4mIzQzO1x0YiA9IGFyZW5hX3B0cihyLmIpO1xuJiM0MztcdCphID0gMTtcbiYjNDM7XHQqYiA9IDI7XG4mIzQzO1x0aWYgKCphICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XHRpZiAoKmIgIT0gMilcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgaGFsdmVzIGFyZSB0aGUgZmlyc3QgdHdvIHNsb3RzIG9mIHRoZSBwYWdlIHRoZSBwcm9ncmFtIGFsbG9jYXRlZC4gKi9cbiYjNDM7XHRwYWdlWzBdID0gNztcbiYjNDM7XHRpZiAoKmEgIT0gNylcbiYjNDM7XHRcdHJldHVybiA1O1xuJiM0MztcdHBhZ2VbMV0gPSA5O1xuJiM0MztcdGlmICgqYiAhPSA5KVxuJiM0MztcdFx0cmV0dXJuIDY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX21peGVkKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHUzMiBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHI7XG4mIzQzO1x0dTMyIHZvbGF0aWxlIF9fYXJlbmEgKnA7XG4mIzQzO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHQvKiBBbiBhcmVuYSBwb2ludGVyIGluIFIwIGJlc2lkZSBhIHNjYWxhciBpbiBSMi4gKi9cbiYjNDM7XHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoKHU2NClwYWdlKTtcbiYjNDM7XHRpZiAoIXIucClcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcdGlmIChyLnRhZyAhPSAweGJlZWYpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0cCA9IGFyZW5hX3B0cihyLnApO1xuJiM0MztcdCpwID0gMztcbiYjNDM7XHRpZiAoKnAgIT0gMylcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1wmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWVtYmVyICYjMzk7YiYjMzk7IGhhcyB0eXBlIFBUUlwmIzM0OylcbiYjNDM7aW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfdW50YWdnZWRfZmFpbCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByO1xuJiM0MztcbiYjNDM7XHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQoMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByLmEgPT0gci5iO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttZW1iZXIgJiMzOTtiJiMzOTsgaGFzIHR5cGUgUFRSXCYjMzQ7KVxuJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV91bmlvbl9mYWlsKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gcjtcbiYjNDM7XG4mIzQzO1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gci5hID09IHIuYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2Vsc2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7YWdncmVnYXRlX3JldF9rZnVuY19hcmVuYTogbmVlZHMgTExWTSAyMywgZHVtbXkgdGVzdFwmIzM0OylcbiYjNDM7X19za2lwKFwmIzM0O25lZWRzIExMVk0gMjNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgZHVtbXlfdGVzdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuY1xuQEAgLTYwLDcgJiM0Mzs2MCw3IEBAIF9fbm9pbmxpbmUgaW50IGV4Y2VwdGlvbl9jYl9va19hcmdfc21hbGwoaW50IGEpXG4gXG4gU0VDKFwmIzM0Oz90Y1wmIzM0OylcbiBfX2V4Y2VwdGlvbl9jYihleGNlcHRpb25fY2JfYmFkX3JldF90eXBlMSlcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7T25seSB2b2lkLCBzY2FsYXIsIG9yIGEgc2NhbGFyLW9ubHkgc3RydWN0L3VuaW9uIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiBzY2FsYXJzXCYjMzQ7KVxuIGludCByZWplY3RfZXhjZXB0aW9uX2NiX3R5cGVfMShzdHJ1Y3QgX19za19idWZmICpjdHgpXG4ge1xuIFx0YnBmX3Rocm93KDApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbmluZGV4IDgxNWYzNDJlYjRiMDUuLjY3MmEzYWFkZDljYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbkBAIC03MzQsNCAmIzQzOzczNCw1MiBAQCBpbnQgY2hlY2tfYXJlbmFfYXJnX3JldCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOyNpZiBkZWZpbmVkKF9fY2xhbmdfbWFqb3JfXykgXHUwMDI2XHUwMDI2IF9fY2xhbmdfbWFqb3JfXyBcdTAwM2U9IDIzXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHtcbiYjNDM7XHR1MzIgX19hcmVuYSAqZmlyc3Q7XG4mIzQzO1x0dTMyIF9fYXJlbmEgKnNlY29uZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO19fd2VhayBzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHNwbGl0X2FyZW5hX3BhZ2UodTMyIF9fYXJlbmEgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XG4mIzQzO1xuJiM0MztcdHBhaXIuZmlyc3QgPSBwYWdlO1xuJiM0MztcdHBhaXIuc2Vjb25kID0gcGFnZSAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGFpcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fbG9hZF9pZl9KSVRlZCgpXG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7XG4mIzQzO1x0c3RydWN0IGFyZW5hX3BhZ2VfcGFpciBwYWlyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0cGFpciA9IHNwbGl0X2FyZW5hX3BhZ2UocGFnZSk7XG4mIzQzO1x0aWYgKCFwYWlyLmZpcnN0IHx8ICFwYWlyLnNlY29uZClcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHQvKiBCb3RoIGhhbHZlcyBvZiB0aGUgcGFpciBtdXN0IHN0aWxsIGJlIHVzYWJsZSBhcyBhcmVuYSBwb2ludGVycy4gKi9cbiYjNDM7XHRmaXJzdCA9IHBhaXIuZmlyc3Q7XG4mIzQzO1x0c2Vjb25kID0gcGFpci5zZWNvbmQ7XG4mIzQzO1x0KmZpcnN0ID0gMTtcbiYjNDM7XHQqc2Vjb25kID0gMjtcbiYjNDM7XHRpZiAoKmZpcnN0ICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XHRpZiAoKnNlY29uZCAhPSAyKVxuJiM0MztcdFx0cmV0dXJuIDQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggODUwY2Y0ZjgzMGM0OC4uMGVmMmNlODc1ZDcxZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC05ODEsNiAmIzQzOzk4MSw0OCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKHU2NCB0YWcpXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKHU2NCBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gKHZvaWQgKikoYWRkciAmIzQzOyA0KSB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQodTY0IGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCByID0geyAucCA9ICh2b2lkICopYWRkciwgLnRhZyA9IDB4YmVlZiB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQodTY0IGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByID0geyAuYSA9ICh2b2lkICopYWRkciwgLmIgPSBOVUxMIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiByO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKHU2NCBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByID0geyAuYSA9ICh2b2lkICopYWRkciB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCh1NjQgdGFnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHIgPSB7IC5pbiA9IHsgLnAgPSBOVUxMIH0sIC50YWcgPSB0YWcgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCh1NjQgdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgciA9IHsgLmwxID0geyAubDIgPSB7IC5sMyA9IHsgLmw0ID0geyAudiA9IHYgfSB9IH0gfSB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcjtcbiYjNDM7fVxuJiM0MztcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpXG4ge1xuIFx0c3RydWN0IHByb2dfdGVzdF9yZXRfaWkgciA9IHsgLmEgPSBhLCAuYiA9IGIgfTtcbkBAIC0xNTM5LDYgJiM0MzsxNTgxLDEyIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X2kxMjgpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3BhaXIpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsLCBLRl9GQVNUQ0FMTClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24pXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paSlcbiAjZW5kaWZcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCA2NWU2OTNhZGE3MzY0Li5hMmU5ZTlmMzE4NGUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMiBAQCBzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyB7XG4gfTtcbiAjZW5kaWZcbiBcbiYjNDM7I2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpXG4mIzQzOyNkZWZpbmUgX19hcmVuYV90YWcgX19hdHRyaWJ1dGVfXygoYnRmX3R5cGVfdGFnKFwmIzM0O2FyZW5hXCYjMzQ7KSkpXG4mIzQzOyNlbHNlXG4mIzQzOyNkZWZpbmUgX19hcmVuYV90YWdcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0cnVjdCBicGZfaXRlcl90ZXN0bW9kX3NlcTtcbiBcbiBzdHJ1Y3QgcHJvZ190ZXN0X3Bhc3MxIHtcbkBAIC03MCw2ICYjNDM7NzYsNDUgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcHRyIHtcdC8qIDE2IGJ5dGVzOiBjb250YWlucyBhIHBvaW50ZXIgKi9cbiBcdF9fdTY0IHRhZztcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSB7XHQvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovXG4mIzQzO1x0dm9pZCBfX2FyZW5hX3RhZyAqYTtcbiYjNDM7XHR2b2lkIF9fYXJlbmFfdGFnICpiO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQge1x0LyogMTYgYnl0ZXM6IGFuIGFyZW5hIHBvaW50ZXIgYW5kIGEgc2NhbGFyICovXG4mIzQzO1x0dm9pZCBfX2FyZW5hX3RhZyAqcDtcbiYjNDM7XHRfX3U2NCB0YWc7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCB7XHQvKiAxNiBieXRlczogJiMzOTtiJiMzOTsgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xuJiM0MztcdHZvaWQgX19hcmVuYV90YWcgKmE7XG4mIzQzO1x0dm9pZCAqYjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3VuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24ge1x0LyogOCBieXRlczogJiMzOTtiJiMzOTsgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xuJiM0MztcdHZvaWQgX19hcmVuYV90YWcgKmE7XG4mIzQzO1x0dm9pZCAqYjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCB7XHQvKiAxNiBieXRlczogdGhlIHBvaW50ZXIgaGlkZXMgb25lIGxldmVsIGRvd24gKi9cbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dm9pZCAqcDtcbiYjNDM7XHR9IGluO1xuJiM0MztcdF9fdTY0IHRhZztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAge1x0LyogOCBieXRlcywgYnV0IG5lc3RlZCBwYXN0IHRoZSA0LWxldmVsIHdhbGsgbGltaXQgKi9cbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRcdFx0X191NjQgdjtcbiYjNDM7XHRcdFx0XHR9IGw0O1xuJiM0MztcdFx0XHR9IGwzO1xuJiM0MztcdFx0fSBsMjtcbiYjNDM7XHR9IGwxO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcge1x0LyogMjQgYnl0ZXM6IHRvbyBsYXJnZSBmb3IgUjA6UjIgKi9cbiBcdF9fdTY0IGE7XG4gXHRfX3U2NCBiO1xuQEAgLTE1OSw2ICYjNDM7MjA0LDEyIEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3BhaXIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcihfX3U2NCBhLCBfX3U2NCBiKSBfX2tzeW07XG4gc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9mYXN0Y2FsbChfX3U2NCBhLCBfX3U2NCBiKSBfX2tzeW07XG4gc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKSBfX2tzeW07XG4gc3RydWN0IHByb2dfdGVzdF9yZXRfcHRyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0cihfX3U2NCB0YWcpIF9fa3N5bTtcbiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZChfX3U2NCB0YWcpIF9fa3N5bTtcbiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltO1xuJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZChfX3U2NCBhZGRyKSBfX2tzeW07XG4mIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKF9fdTY0IGFkZHIpIF9fa3N5bTtcbiYjNDM7dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07XG4mIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcChfX3U2NCB2KSBfX2tzeW07XG4gc3RydWN0IHByb2dfdGVzdF9yZXRfYmlnIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZyh2b2lkKSBfX2tzeW07XG4gX191NjQgYnBmX2tmdW5jX2NhbGxfc3RhY2tfYXJnKF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsXG4gXHRcdFx0ICAgICAgIF9fdTY0IGUsIF9fdTY0IGYsIF9fdTY0IGcsIF9fdTY0IGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZiYjMzQ7LAogICAgJiMzNDtidGZfdHlwZV9pc19hcmVuYV9wdHImIzM0OywKICAgICYjMzQ7YnRmX3ByZXBhcmVfZnVuY19hcmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgcmV0dXJuaW5nIHN0cnVjdHMgb3IgdW5pb25zIGJ5IHZhbHVlIGZyb20ga2Z1bmNzIGFuZCBnbG9iYWwgc3VicHJvZ3JhbXMgaWYgdGhleSBhcmUgY29tcG9zZWQgb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgKHBvaW50ZXJzIHdpdGggdGhlIGBidGZfdHlwZV90YWcoXCYjMzQ7YXJlbmFcJiMzNDspYCBhdHRyaWJ1dGUpLiBQcmV2aW91c2x5LCBvbmx5IHNjYWxhcnMgd2VyZSBhbGxvd2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZlcmlmaWVyJiMzOTtzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIChoYW5kbGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCBhcmVuYSBwb2ludGVycykuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBzdWNoIGtmdW5jcyBvciBzdWJwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmN2U4YThhOTUwMWU1ZWEzYmNhOWI4ZTEyMmZkYzRlY2M1NDVlNjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjo0MzozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CmluZGV4IDg5ZGVhNmIwYjAyNDEuLjk2YmY2M2QzNDQzMjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdApAQCAtNTgxLDIwICYjNDM7NTgxLDI3IEBAIGFnYWluc3QgdGhlIGFyZW5hLiBMYXJnZXIgYWNjZXNzZXMgbXVzdCB2ZXJpZnkgdGhlIHJhbmdlIGV4cGxpY2l0bHkuCiBBIGtmdW5jIG1heSByZXR1cm4gYSBzY2FsYXIsIGEgcG9pbnRlciwgb3IgYSBzbWFsbCBzdHJ1Y3Qgb3IgdW5pb24gYnkKIHZhbHVlLiBBIHNjYWxhciBvciBwb2ludGVyIG9mIHVwIHRvIDggYnl0ZXMgaXMgcmV0dXJuZWQgaW4gUjAsIGFzIHVzdWFsLgogCi1BIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycwotKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtOyBhcnJheXMgb2Ygc2NhbGFycyBhcmUKLWFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGUgcmF3Ci1jb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyCi1hbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3QKLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXMKLW9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3QgcmV0dXJuIGluIFIwOlIyIGF0Ci1hbGwuCiYjNDM7QSBzdHJ1Y3Qgb3IgdW5pb24gcmV0dXJuZWQgYnkgdmFsdWUgbXVzdCBiZSBjb21wb3NlZCBvbmx5IG9mIHNjYWxhcnMgYW5kIGFyZW5hCiYjNDM7cG9pbnRlcnMgKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtIGFuZCBhbiBhcmVuYQomIzQzO3BvaW50ZXIgaXMgb25lIGNhcnJ5aW5nIHRoZSBgYGJ0Zl90eXBlX3RhZygmIzM0O2FyZW5hJiMzNDspYGAgYXR0cmlidXRlOyBhcnJheXMgb2YKJiM0MztlaXRoZXIgYXJlIGFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGUKJiM0MztyYXcgY29udGVudHMgb2YgUjAgKGFuZCBSMiksIHNvIGEgbWVtYmVyIG9mIGFueSBvdGhlciBwb2ludGVyIHR5cGUgd291bGQgYmUKJiM0MztsYXVuZGVyZWQgaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kCiYjNDM7cmVmZXJlbmNlIHRyYWNraW5nLiBBIHN0cnVjdCBvciB1bmlvbiB3aXRoIHN1Y2ggYSBtZW1iZXIgaXMgdGhlcmVmb3JlIHJlamVjdGVkCiYjNDM7YXQgbG9hZCB0aW1lLCBhbmQgc28gaXMgb25lIHdpdGggYSBmbG9hdGluZy1wb2ludCBtZW1iZXIsIHdoaWNoIHRoZSBBQkkgbWF5IG5vdAomIzQzO3JldHVybiBpbiBSMDpSMiBhdCBhbGwuCiYjNDM7CiYjNDM7QW4gYXJlbmEgcG9pbnRlciBtZW1iZXIgaXMgaGFuZGVkIGJhY2sgYXMgYSBzY2FsYXIgdG9vLCBidXQgbm90aGluZyBpcyBsb3N0IGJ5CiYjNDM7dGhhdC4gVGhlIHByb2dyYW0gbXVzdCBgYGNhc3Rfa2VybigpYGAgdGhlIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCwgYW5kIHRoZQomIzQzO3ZlcmlmaWVyIGFsbG93cyB0aGF0IGNhc3Qgb24gYW55IHNjYWxhciwgc28gYSBsYXVuZGVyZWQgYXJlbmEgYWRkcmVzcyBnaXZlcyB0aGUKJiM0Mztwcm9ncmFtIG5vIHJlYWNoIGl0IGRpZCBub3QgYWxyZWFkeSBoYXZlLiBUaGUgcmVzdWx0IGlzIGNvbmZpbmVkIHRvIHRoZQomIzQzO3Byb2dyYW0mIzM5O3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuCiAKIEEga2Z1bmMgbWF5IGFsc28gcmV0dXJuIGEgdmFsdWUgbGFyZ2VyIHRoYW4gOCBieXRlcyBhbmQgdXAgdG8gMTYgYnl0ZXMgLS0gYQotc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZAotaW4gdGhlIHJlZ2lzdGVyIHBhaXIgUjA6UjIsIG1hdGNoaW5nIHRoZSBjb252ZW50aW9uIExMVk0gdXNlcyBmb3IgdGhlIEJQRgotdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLiBBIHN0cnVjdCBvcgotdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLgomIzQzO3N0cnVjdCBvciB1bmlvbiBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycywgb3IgYW4gYGBfX2ludDEyOGBgLiBTdWNoIGEKJiM0Mzt2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTQomIzQzO3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLgomIzQzO0Egc3RydWN0IG9yIHVuaW9uIG9mIDggYnl0ZXMgb3IgbGVzcyBpcyByZXR1cm5lZCBpbiBSMCBhbG9uZS4KIAogOjoKIApAQCAtNjIwLDEwICYjNDM7NjI3LDEwIEBAIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBKSVRlZCwgc2luY2UgdGhlIGludGVycHJldGVyIHByb3BhZ2F0ZXMgb25seSBSMCBvdXQgb2YKIGEgc3VicHJvZ3JhbTogd2l0aG91dCBhIEpJVCB0aGUgcmV0dXJuIHZhbHVlIHN0YXlzIGluIFIwIGFsb25lLCBhbmQgYSBjYWxsZXIKIHJlYWRpbmcgUjIgaXMgcmVqZWN0ZWQgZm9yIHJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCByZWdpc3Rlci4gQSBnbG9iYWwKIHN1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW4gaXNvbGF0aW9uLCBzbyBpdHMgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIHJldHVybiBpcwotcmVzdHJpY3RlZCB0byBzY2FsYXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkCi1pbmxpbmUgYW5kIGhhcyBubyBzdWNoIHJlc3RyaWN0aW9uLiBUaGUgbWFpbiBwcm9ncmFtIGlzIG5vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuCi12YWx1ZSBpcyB0aGUgcHJvZ3JhbSYjMzk7cyBleGl0IGNvZGUsIHJlYWQgb3V0IG9mIFIwIGFsb25lLCBzbyBhIGRlY2xhcmVkIHVwcGVyCi1oYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC4KJiM0MztyZXN0cmljdGVkIHRvIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYwomIzQzO3N1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcwomIzQzO25vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuIHZhbHVlIGlzIHRoZSBwcm9ncmFtJiMzOTtzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjAKJiM0MzthbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlciBoYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC4KIAogQSBnbG9iYWwgc3VicHJvZ3JhbSBtdXN0IGxlYXZlIGEgc2NhbGFyIGluICpldmVyeSogcmVnaXN0ZXIgb2YgdGhlIHBhaXIsIHNvCiBib3RoIGhhbHZlcyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaGF2ZSB0byBiZSBhc3NpZ25lZC4gTGVhdmluZyB0aGUgdXBwZXIgaGFsZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggMDA0YjA2Nzg1NTIxYy4uYWU5ZjYwNjUzOWY0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC0xNDg4LDggJiM0MzsxNDg4LDE1IEBAIGludCBicGZfam1wX29mZnNldChzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogc3RydWN0IGJwZl9pYXJyYXkgKmJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCk7CiB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzayk7CiBib29sIGJwZl9zdWJwcm9nX2lzX2dsb2JhbChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7Ci1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyk7CiYjNDM7CiYjNDM7LyogS2luZHMgb2YgbWVtYmVyIGEgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIG1heSBiZSBjb21wb3NlZCBvZi4gKi8KJiM0MztlbnVtIGJ0Zl9tZW1iZXJfa2luZCB7CiYjNDM7CUJURl9NRU1CRVJfU0NBTEFSCT0gQklUKDApLCAvKiBhbiBpbnQgb3IgYW4gZW51bSAqLwomIzQzOwlCVEZfTUVNQkVSX0FSRU5BX1BUUgk9IEJJVCgxKSwgLyogYSBwb2ludGVyIGNhcnJ5aW5nIHRoZSAmIzM0O2FyZW5hJiMzNDsgdHlwZSB0YWcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO2Jvb2wgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcyk7CiAKIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpOwogYm9vbCBicGZfaXNfdGhyb3dfa2Z1bmMoc3RydWN0IGJwZl9pbnNuICppbnNuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnRmLmggYi9pbmNsdWRlL2xpbnV4L2J0Zi5oCmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnRmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idGYuaApAQCAtMjM1LDYgJiM0MzsyMzUsNyBAQCBzdHJ1Y3QgYnRmX3JlY29yZCAqYnRmX3BhcnNlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZQogCQkJCSAgICB1MzIgZmllbGRfbWFzaywgdTMyIHZhbHVlX3NpemUpOwogaW50IGJ0Zl9jaGVja19hbmRfZml4dXBfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYyk7CiBib29sIGJ0Zl90eXBlX2lzX3ZvaWQoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTsKJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7CiBzMzIgYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqbmFtZSwgdTgga2luZCk7CiBzMzIgYnBmX2ZpbmRfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBraW5kLCBzdHJ1Y3QgYnRmICoqYnRmX3ApOwogc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA5MWI4Y2U3N2Y2OTlhLi5mNmQ4MmE4ZmQ2MTdiIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTM1MjMsNiAmIzQzOzM1MjMsMjIgQEAgc3RhdGljIGludCBidGZfdHlwZV90YWdfd2Fsayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX3R5cGVfaXNfcHRyKHQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtJmd0O3R5cGUpOyBidGZfdHlwZV9pc19tb2RpZmllcih0KTsKJiM0MzsJICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LSZndDt0eXBlKSkgewomIzQzOwkJaWYgKCFidGZfdHlwZV9pc190eXBlX3RhZyh0KSB8fCBidGZfdHlwZV9rZmxhZyh0KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghc3RyY21wKF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC0mZ3Q7bmFtZV9vZmYpLCAmIzM0O2FyZW5hJiMzNDspKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGJ0Zl9maW5kX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiAJCQkgdTMyIG9mZiwgaW50IHN6LCBzdHJ1Y3QgYnRmX2ZpZWxkX2luZm8gKmluZm8sIHUzMiBmaWVsZF9tYXNrKQogewpAQCAtNzkyNyw1MSAmIzQzOzc5NDMsMTkgQEAgc3RhdGljIGludCBidGZfc2Nhbl9kZWNsX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsCi0JCQkgICAgICB1MzIgKnRhZ3MpCiYjNDM7c3RhdGljIHZvaWQgYnRmX3NjYW5fdHlwZV90YWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsIHUzMiAqdGFncykKIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl90eXBlX3RhZ19tYXRjaCBmdW5jX3R5cGVfdGFnc1tdID0gewotCQl7ICYjMzQ7YXJlbmEmIzM0OywgQVJHX1RBR19BUkVOQSB9LAotCX07Ci0Jc3RydWN0IGJ0Zl90eXBlX3RhZ193YWxrX2N0eCBjdHg7Ci0JY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwotCWludCBlcnI7Ci0KIAkvKiBGaW5kIHRoZSBmaXJzdCBwb2ludGVyIHR5cGUgaW4gdGhlIGNoYWluLiAqLwotCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwogCi0JLyoKLQkgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcywKLQkgKiB3aGljaCBuZWl0aGVyIExMVk0gbm9yIEdDQyBzdXBwb3J0IGFueXdheS4KLQkgKi8KLQlpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSkKLQkJcmV0dXJuIDA7Ci0KLQljdHgudCA9IHQ7Ci0JZXJyID0gYnRmX3R5cGVfdGFnX3dhbGsoYnRmLCAmYW1wO2N0eCwgZnVuY190eXBlX3RhZ3MsCi0JCQkJQVJSQVlfU0laRShmdW5jX3R5cGVfdGFncykpOwotCWlmIChlcnIpIHsKLQkJYnBmX2xvZygmYW1wO2Vudi0mZ3Q7bG9nLAotCQkJJiMzNDtmdW5jdGlvbiBzaWduYXR1cmUgbWVtYmVyIGhhcyBtdWx0aXBsZSB0eXBlIHRhZ3NcbiYjMzQ7KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JKnRhZ3MgfD0gY3R4LnJlczsKLQotCXJldHVybiAwOwomIzQzOwlpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpCiYjNDM7CQkqdGFncyB8PSBBUkdfVEFHX0FSRU5BOwogfQogCiAvKiBDaGVjayB3aGV0aGVyIHRoZSB0eXBlIGlzIGEgdmFsaWQgcmV0dXJuIHR5cGUuICovCiBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidGYsCiAJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHN1YnByb2csIGJvb2wgaXNfZ2xvYmFsKQogewotCXUzMiB0YWdzID0gMDsKLQlpbnQgZXJyOwotCi0JZXJyID0gYnRmX3NjYW5fdHlwZV90YWdzKGVudiwgYnRmLCB0LSZndDt0eXBlLCAmYW1wO3RhZ3MpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LSZndDt0eXBlLCBOVUxMKTsKIAogCS8qCkBAIC03OTc5LDcgJiM0Mzs3OTYzLDcgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnQKIAkgKiBHZW5lcmFsIGFyZW5hIHZhcmlhYmxlcyBhcmUgbm90IGFsbG93ZWQsIHNpbmNlIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHJldHVybiBieSB2YWx1ZQogCSAqIGEgdmFyaWFibGUgdGhhdCYjMzk7cyBvbiB0aGUgaGVhcCBpbiB0aGUgZmlyc3QgcGxhY2UuCiAJICovCi0JaWYgKHN1YnByb2cgJmFtcDsmYW1wOyAodGFncyAmYW1wOyBBUkdfVEFHX0FSRU5BKSAmYW1wOyZhbXA7IGJ0Zl90eXBlX2lzX3B0cih0KSkKJiM0MzsJaWYgKHN1YnByb2cgJmFtcDsmYW1wOyBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBXZSBhbHdheXMgYWNjZXB0IHZvaWQgb3Igc2NhbGFycy4gKi8KQEAgLTc5ODksMTMgJiM0Mzs3OTczLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0CiAJaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSAmYW1wOyZhbXA7IHQtJmd0O3NpemUgJmx0Oz0gMTYpIHsKIAkJLyoKIAkJICogQSBnbG9iYWwgZnVuY3Rpb24mIzM5O3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZQotCQkgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWwKLQkJICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZAotCQkgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi4KJiM0MzsJCSAqIHNjYWxhciBwYWlyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEKJiM0MzsJCSAqIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gT25seQomIzQzOwkJICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzCiYjNDM7CQkgKiBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUgb25lCiYjNDM7CQkgKiBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlCiYjNDM7CQkgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc28KJiM0MzsJCSAqIGl0cyBjYWxsZXIgcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXMKJiM0MzsJCSAqIGZpbmUuCiAJCSAqLwogCQlib29sIGxvY2FsX2Z1bmMgPSBzdWJwcm9nICZhbXA7JmFtcDsgIWlzX2dsb2JhbDsKJiM0MzsJCXUzMiBtZW1iZXJfa2luZHMgPSBCVEZfTUVNQkVSX1NDQUxBUjsKJiM0MzsKJiM0MzsJCWlmIChzdWJwcm9nKQomIzQzOwkJCW1lbWJlcl9raW5kcyB8PSBCVEZfTUVNQkVSX0FSRU5BX1BUUjsKIAotCQlpZiAobG9jYWxfZnVuYyB8fCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgYnRmLCB0LCAwKSkKJiM0MzsJCWlmIChsb2NhbF9mdW5jIHx8IGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIG1lbWJlcl9raW5kcykpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgwOTEsNyAmIzQzOzgwODQsOCBAQCBpbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKQogCQlpZiAoaXNfZ2xvYmFsKSB7CiAJCQlicGZfbG9nKGxvZywKIAkJCQkmIzM0O0dsb2JhbCBmdW5jdGlvbiAlcygpIGhhcyB1bnN1cHBvcnRlZCByZXR1cm4gdHlwZS4gJiMzNDsKLQkJCQkmIzM0O09ubHkgdm9pZCwgc2NhbGFyLCBvciBhIHNjYWxhci1vbmx5IHN0cnVjdC91bmlvbiB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXG4mIzM0OywKJiM0MzsJCQkJJiMzNDtPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiAmIzM0OwomIzQzOwkJCQkmIzM0O3NjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cbiYjMzQ7LAogCQkJCXRuYW1lKTsKIAkJfQogCQlyZXR1cm4gZXJyOwpAQCAtODEwNiw5ICYjNDM7ODEwMCw3IEBAIGludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCAmYW1wO3RhZ3MpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKJiM0MzsJCWJ0Zl9zY2FuX3R5cGVfdGFncyhidGYsIGFyZ3NbaV0udHlwZSwgJmFtcDt0YWdzKTsKIAogCQl0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBhcmdzW2ldLnR5cGUpOwogCQl3aGlsZSAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZTAzNmFlMjBiZjZiOS4uOWEzNjgwODEzNmM5YSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtOTk5NSw5ICYjNDM7OTk5NSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCSAqLwogCQlpZiAoIXJldHVybnNfdm9pZCkgewogCQkJbnJlZ3MgPSBicGZfcmV0X3JlZ19wYWlyKGVudiwgc3VicHJvZykgPyAyIDogMTsKLQkJCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCi0JCQkJbWFya19yZWdfdW5rbm93bihlbnYsIGNhbGxlci0mZ3Q7cmVncywgcmV0X3JlZ3NbaV0pOwomIzQzOwkJCW1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItJmd0O3JlZ3MsIHJldF9yZWdzWzBdKTsKIAkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCQlmb3IgKGkgPSAxOyBpICZsdDsgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7Y2FsbGVyLSZndDtyZWdzW3JldF9yZWdzW2ldXSwgTlVMTCwKJiM0MzsJCQkJCQkgICBCUEZfRElBR19NT0RfV1JJVEUpOwomIzQzOwkJCQltYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLSZndDtyZWdzLCByZXRfcmVnc1tpXSk7CiYjNDM7CQkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCQl9CiAJCX0KIAogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHsKQEAgLTEwNDAzLDEwICYjNDM7MTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KQogCQkgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGUKIAkJICogcmV0dXJuIHJlZ2lzdGVyKHMpCiAJCSAqLwotCQlicGZfZGlhZ19tb2RfYmVnaW4oZW52LCAmYW1wO2NhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IG5yZWdzOyBpJiM0MzsmIzQzOykKLQkJCWNhbGxlci0mZ3Q7cmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtJmd0O3JlZ3NbcmV0X3JlZ3NbaV1dOwotCQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdTMyIHJlZ25vID0gcmV0X3JlZ3NbaV07CiYjNDM7CiYjNDM7CQkJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtjYWxsZXItJmd0O3JlZ3NbcmVnbm9dLCAmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tyZWdub10sCiYjNDM7CQkJCQkgICBCUEZfRElBR19NT0RfV1JJVEUpOwomIzQzOwkJCWNhbGxlci0mZ3Q7cmVnc1tyZWdub10gPSBjYWxsZWUtJmd0O3JlZ3NbcmVnbm9dOwomIzQzOwkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCX0KIAl9CiAKIAkvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsCkBAIC0xMTM0MiwxNSAmIzQzOzExMzUxLDMzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAKIC8qCiAgKiBNYXJrIHRoZSByZWdpc3RlcihzKSBob2xkaW5nIGEgQHNpemUgYnl0ZSBrZnVuYyByZXR1cm4gdmFsdWUgYXMgdW5rbm93bgotICogc2NhbGFycy4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlciBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS4KJiM0MzsgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlcgomIzQzOyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LgomIzQzOyAqCiYjNDM7ICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlCiYjNDM7ICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdAomIzQzOyAqIHNjb3BlIGlzIHdoYXQgY2FycmllcyBpdHMgcHJlLWNhbGwgdmFsdWUgaW50byB0aGUgaGlzdG9yeS4gQSBzY29wZSB0cmFja3MgYQomIzQzOyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZgomIzQzOyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJiMzOTtzIHNjb3BlIG9wZW4gZm9yCiYjNDM7ICogdGhlIGNhbGxlciB0byBjbG9zZSwgc28gYSBsYXRlciB3cml0ZSB0byBSMCBzdGlsbCBsYW5kcyBpbiBpdC4KICAqLwotc3RhdGljIHZvaWQgbWFya19rZnVuY19yZXRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSkKJiM0MztzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKQogewogCXUzMiBpLCBucmVncyA9IHJldF9yZWdzX2NudChzaXplKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCiYjNDM7CW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1swXSk7CiYjNDM7CWlmIChucmVncyA9PSAxKQomIzQzOwkJcmV0dXJuIG5yZWdzOwomIzQzOwomIzQzOwlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJCW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7CiYjNDM7CQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yZWdzOwogfQogCiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKQEAgLTExNjE5LDEwICYjNDM7MTE2NDYsMzMgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KGNvbnN0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwgdTMyIGFyZ18KIAlyZXR1cm4gYXJnbiAmbHQ7PSBhcmdfaWR4OwogfQogCi0vKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZCAqLwotYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYykKJiM0MzsjZGVmaW5lIEJURl9NRU1CRVJfTUFYX0RFUFRICTQKJiM0MzsjZGVmaW5lIEJURl9NRU1CRVJfUEFUSF9MRU4JNjQKJiM0MzsKJiM0MztzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoIHsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcltCVEZfTUVNQkVSX01BWF9ERVBUSF07CiYjNDM7CWludCBkZXB0aDsKJiM0MzsJYm9vbCB0b29fZGVlcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAomIzQzOwkJCQkgICAgdTMyIG1lbWJlcl9raW5kcykKJiM0Mzt7CiYjNDM7CWlmICgobWVtYmVyX2tpbmRzICZhbXA7IEJURl9NRU1CRVJfU0NBTEFSKSAmYW1wOyZhbXA7IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoKG1lbWJlcl9raW5kcyAmYW1wOyBCVEZfTUVNQkVSX0FSRU5BX1BUUikgJmFtcDsmYW1wOyBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpbgomIzQzOyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5CiYjNDM7ICogbWVtYmVyIGNvdW50cyBhcyBpdHMgZWxlbWVudCB0eXBlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMsIGludCByZWMsCiYjNDM7CQkJCSAgIHN0cnVjdCBidGZfbWVtYmVyX3BhdGggKnBhdGgpCiB7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTsKIAljb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyOwpAQCAtMTE2MzYsMjcgJiM0MzsxMTY4Niw2NSBAQCBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCQltZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLSZndDt0eXBlLCBOVUxMKTsKIAkJaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChtZW1iZXJfdHlwZSkpIHsKLQkJCWlmIChyZWMgJmd0Oz0gMykgewomIzQzOwkJCWlmIChyZWMgJmd0Oz0gQlRGX01FTUJFUl9NQVhfREVQVEggLSAxKSB7CiAJCQkJdmVyYm9zZShlbnYsICYjMzQ7bWF4IHN0cnVjdCBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkXG4mIzM0Oyk7CiYjNDM7CQkJCWlmIChwYXRoKQomIzQzOwkJCQkJcGF0aC0mZ3Q7dG9vX2RlZXAgPSB0cnVlOwogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KLQkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyAmIzQzOyAxKSkKLQkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJaWYgKCFidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzLAomIzQzOwkJCQkJCSAgICByZWMgJiM0MzsgMSwgcGF0aCkpCiYjNDM7CQkJCWdvdG8gYmFkX3BhdGg7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoYnRmX3R5cGVfaXNfYXJyYXkobWVtYmVyX3R5cGUpKSB7CiAJCQlhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7CiAJCQlpZiAoIWFycmF5LSZndDtuZWxlbXMpCi0JCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCQlnb3RvIGJhZF9tZW1iZXI7CiAJCQltZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktJmd0O3R5cGUsIE5VTEwpOwotCQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSkKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICghYnRmX21lbWJlcl9raW5kX2FsbG93ZWQoYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzKSkKJiM0MzsJCQlnb3RvIGJhZF9tZW1iZXI7CiAJfQogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2JhZF9tZW1iZXI6CiYjNDM7CWlmIChwYXRoKQomIzQzOwkJcGF0aC0mZ3Q7ZGVwdGggPSByZWMgJiM0MzsgMTsKJiM0MztiYWRfcGF0aDoKJiM0MzsJaWYgKHBhdGggJmFtcDsmYW1wOyBwYXRoLSZndDtkZXB0aCkKJiM0MzsJCXBhdGgtJmd0O21lbWJlcltyZWNdID0gbWVtYmVyOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMsIDAsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KQomIzQzO3sKJiM0MzsJcmV0dXJuIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIEJURl9NRU1CRVJfU0NBTEFSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRmX21lbWJlcl9wYXRoX3N0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyX3BhdGggKnBhdGgsCiYjNDM7CQkJCWNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeikKJiM0Mzt7CiYjNDM7CXNpemVfdCBsZW4gPSAwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJYnVmWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGF0aC0mZ3Q7ZGVwdGg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBjaGFyICpuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcGF0aC0mZ3Q7bWVtYmVyW2ldLSZndDtuYW1lX29mZik7CiYjNDM7CiYjNDM7CQlpZiAoIW5hbWUgfHwgIW5hbWVbMF0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBidWZfc3ogLSBsZW4sICYjMzQ7JXMlcyYjMzQ7LCBsZW4gPyAmIzM0Oy4mIzM0OyA6ICYjMzQ7JiMzNDssIG5hbWUpOwomIzQzOwl9CiB9CiAKIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHsKQEAgLTEyMDM5LDcgJiM0MzsxMjEyNyw3IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiAJCSAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSkgfHwKIAkJICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnICYjNDM7IDFdKSkpIHsKIAkJaWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSAmYW1wOyZhbXA7ICFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpICZhbXA7JmFtcDsKLQkJICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS0mZ3Q7YnRmLCByZWZfdCwgMCkpIHsKJiM0MzsJCSAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byB2b2lkLCBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjA1NSw3ICYjNDM7MTIxNDMsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAogCQkgKiBzY2FsYXJzLiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZCBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlLgogCQkgKi8KIAkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpICZhbXA7JmFtcDsKLQkJICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS0mZ3Q7YnRmLCByZWZfdCwgMCkpIHsKJiM0MzsJCSAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzExMSw3ICYjNDM7MTMxOTksNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLSZndDtidGYsIHJlZl90LCAwKSkgewomIzQzOwkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQkJZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7CiAJCQkJY29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTsKIApAQCAtMTM2NTMsNyAmIzQzOzEzNzQxLDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmcKIAogCQlzdHJ1Y3RfbWV0YSA9IGJ0Zl9maW5kX3N0cnVjdF9tZXRhKHJldF9idGYsIHJldF9idGZfaWQpOwogCQlpZiAoaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEtJmd0O2Z1bmNfaWQpKSB7Ci0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCwgMCkpIHsKJiM0MzsJCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCkpIHsKIAkJCQl2ZXJib3NlKGVudiwgJiMzNDticGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcbiYjMzQ7KTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTEzNzY3LDcgJiM0MzsxMzg1NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDsKIAljb25zdCBjaGFyICpvcGVyYXRpb247CiAJaW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDsKLQl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkOwomIzQzOwl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkLCByZXRfbnJlZ3MgPSAxOwogCXN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYzsKIAlzdHJ1Y3QgYnRmICpkZXNjX2J0ZjsKIAlpbnQgaWQ7CkBAIC0xNDAyMSwyNSAmIzQzOzE0MTA5LDU5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJfQogCiAJaWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkgewotCQltYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXRfbnJlZ3MgPSBtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC0mZ3Q7c2l6ZSk7CiAJCWlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCAmYW1wOyZhbXA7IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fAogCQkgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpCiAJCQlfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCAmYW1wO3JlZ3NbQlBGX1JFR18wXSk7CiAJfSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHsKJiM0MzsJCXN0cnVjdCBidGZfbWVtYmVyX3BhdGggcGF0aCA9IHt9OwomIzQzOwkJY29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSAmIzM0OyYjMzQ7OwomIzQzOwogCQkvKgogCQkgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZAotCQkgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczoKLQkJICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhcgotCQkgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4KJiM0MzsJCSAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZAomIzQzOwkJICogaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4KJiM0MzsJCSAqIE9ubHkgc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIKJiM0MzsJCSAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUKJiM0MzsJCSAqIG9uZSBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlCiYjNDM7CQkgKiByZXN1bHQgdG8gdGhlIGFyZW5hLgogCQkgKi8KLQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgZGVzY19idGYsIHQsIDApKSB7CiYjNDM7CQlpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCwKJiM0MzsJCQkJCSAgICBCVEZfTUVNQkVSX1NDQUxBUiB8IEJURl9NRU1CRVJfQVJFTkFfUFRSLCAwLCAmYW1wO3BhdGgpKSB7CiAJCQl2ZXJib3NlKGVudiwKLQkJCQkmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcbiYjMzQ7LAomIzQzOwkJCQkmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcbiYjMzQ7LAogCQkJCWZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLAogCQkJCWJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpKTsKJiM0MzsJCQlpZiAocGF0aC50b29fZGVlcCkgewomIzQzOwkJCQltZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQkJCWVudiwgJiMzNDsgSXQgbmVzdHMgc3RydWN0cyBtb3JlIHRoYW4gJWQgbGV2ZWxzIGRlZXAuJiMzNDssCiYjNDM7CQkJCQlCVEZfTUVNQkVSX01BWF9ERVBUSCk7CiYjNDM7CQkJfSBlbHNlIGlmIChwYXRoLmRlcHRoKSB7CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBwYXRoLm1lbWJlcltwYXRoLmRlcHRoIC0gMV07CiYjNDM7CQkJCWNoYXIgYmFkX25hbWVbQlRGX01FTUJFUl9QQVRIX0xFTl07CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7CiYjNDM7CiYjNDM7CQkJCWJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsICZhbXA7cGF0aCwgYmFkX25hbWUsIHNpemVvZihiYWRfbmFtZSkpOwomIzQzOwkJCQliYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtJmd0O3R5cGUsIE5VTEwpOwomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDttZW1iZXIgJiMzOTslcyYjMzk7IGhhcyB0eXBlICVzXG4mIzM0OywgYmFkX25hbWUsCiYjNDM7CQkJCQlidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTsKJiM0MzsJCQkJbWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoCiYjNDM7CQkJCQllbnYsCiYjNDM7CQkJCQkmIzM0OyBJdHMgbWVtYmVyICYjMzk7JXMmIzM5OyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuJiMzNDssCiYjNDM7CQkJCQliYWRfbmFtZSwgYnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7CiYjNDM7CQkJfQomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIGluc25faWR4LCAmIzM0O3Vuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZSYjMzQ7LAomIzQzOwkJCQkmIzM0O0NhbGwgYSBrZXJuZWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9ubHkgc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4mIzM0OywKJiM0MzsJCQkJJiMzNDslcygpIHJldHVybnMgJXMgJXMgYnkgdmFsdWUuJXMgJiMzNDsKJiM0MzsJCQkJJiMzNDtPbmx5IGtmdW5jcyByZXR1cm5pbmcgc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycywgb3IgJiMzNDsKJiM0MzsJCQkJJiMzNDtzdHJ1Y3R1cmVzIGNvbXBvc2VkIG9mIHNjYWxhciB2YWx1ZXMgb3IgYXJlbmEgcG9pbnRlcnMgYXJlICYjMzQ7CiYjNDM7CQkJCSYjMzQ7c3VwcG9ydGVkLiYjMzQ7LAomIzQzOwkJCQlmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSwKJiM0MzsJCQkJYnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LSZndDtuYW1lX29mZiksIG1lbWJlcl9ub3RlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCW1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LSZndDtzaXplKTsKJiM0MzsJCXJldF9ucmVncyA9IG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LSZndDtzaXplKTsKIAl9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkgewogCQlwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LSZndDt0eXBlLCAmYW1wO3B0cl90eXBlX2lkKTsKIAkJZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsICZhbXA7bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7CkBAIC0xNDE3MCw3ICYjNDM7MTQyOTIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCSAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlCiAJICogaXRlcmF0b3IgcGF0aCYjMzk7cyBkaWFnbm9zdGljIHBvc2l0aW9uLgogCSAqLwotCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJaWYgKHJldF9ucmVncyA9PSAxKQomIzQzOwkJYnBmX2RpYWdfbW9kX2VuZChlbnYpOwogCiAJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSkgewogCQllcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsICZhbXA7bWV0YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMKaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYwpAQCAtMSwxMSAmIzQzOzEsNTMgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2FnZ3JlZ2F0ZV9yZXRfZnVuYy5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqdm1saW51eF9idGYsICptb2R1bGVfYnRmID0gTlVMTDsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwomIzQzOwlib29sIHRhZ2dlZCA9IGZhbHNlOwomIzQzOwlfX3MzMiBpZDsKJiM0MzsKJiM0MzsJdm1saW51eF9idGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTsKJiM0MzsJaWYgKCF2bWxpbnV4X2J0ZikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKCYjMzQ7YnBmX3Rlc3Rtb2QmIzM0Oywgdm1saW51eF9idGYpOwomIzQzOwlpZiAoIW1vZHVsZV9idGYpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogcHJvZ190ZXN0X3JldF9hcmVuYTo6YSBpcyAmIzM5O3ZvaWQgX19hcmVuYV90YWcgKiYjMzk7OiBQVFIgLSZndDsgVFlQRV9UQUcgLSZndDsgdm9pZCAqLwomIzQzOwlpZCA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQobW9kdWxlX2J0ZiwgJiMzNDtwcm9nX3Rlc3RfcmV0X2FyZW5hJiMzNDssIEJURl9LSU5EX1NUUlVDVCk7CiYjNDM7CWlmIChpZCAmbHQ7PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgYnRmX21lbWJlcnMoYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIGlkKSlbMF0udHlwZSk7CiYjNDM7CWlmICghdCB8fCAhYnRmX2lzX3B0cih0KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl0ID0gYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIHQtJmd0O3R5cGUpOwomIzQzOwl0YWdnZWQgPSB0ICZhbXA7JmFtcDsgYnRmX2lzX3R5cGVfdGFnKHQpICZhbXA7JmFtcDsKJiM0MzsJCSAhc3RyY21wKGJ0Zl9fbmFtZV9ieV9vZmZzZXQobW9kdWxlX2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpLCAmIzM0O2FyZW5hJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnRmX19mcmVlKG1vZHVsZV9idGYpOwomIzQzOwlidGZfX2ZyZWUodm1saW51eF9idGYpOwomIzQzOwomIzQzOwlyZXR1cm4gdGFnZ2VkOwomIzQzO30KIAogdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZCkKIHsKIAlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTsKIAlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuYyk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpCiYjNDM7CQlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSk7CiYjNDM7CWVsc2UKJiM0MzsJCXRlc3RfX3NraXAoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuYwppbmRleCA2ZjY2ZmM4MjJjZWRlLi5mMDA3N2Q5NTFhMjVkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfZnVuYy5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KICNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKICNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmX2FyZW5hX2NvbW1vbi5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAogdHlwZWRlZiB1bnNpZ25lZCBfX2ludDEyOCB1MTI4OwpAQCAtMjM0LDQgJiM0MzsyMzUsMTQ5IEBAIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX3VuaW9uX3B0cl9mYWlsKHZvaWQpCiAKICNlbmRpZgogCiYjNDM7LyoKJiM0MzsgKiBnY2MgcmV0dXJucyBhIGJ5LXZhbHVlIHN0cnVjdCB0aHJvdWdoIGEgaGlkZGVuIHBvaW50ZXIsIGFuZCBlbWl0cyB0aGUKJiM0MzsgKiAmIzM5O3IwID0gcjEmIzM5OyByZXR1cm5pbmcgaXQgYWZ0ZXIgdGhlIF9fbmFrZWQgYm9keSYjMzk7cyBleGl0LCBsZWF2aW5nIHRoZQomIzQzOyAqIHN1YnByb2dyYW0gZmFsbGluZyB0aHJvdWdoLiBCdWlsZCB0aGVzZSB3aXRoIGNsYW5nIG9ubHkuCiYjNDM7ICovCiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19fKQomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9wYWlyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpsbzsKJiM0MzsJdm9pZCBfX2FyZW5hICpoaTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwOwomIzQzOwlfX3U2NCB4OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFyZW5hX2FycmF5IHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwWzJdOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFyZW5hX3NpbmdsZSB7CiYjNDM7CXZvaWQgX19hcmVuYSAqcDsKJiM0Mzt9OwomIzQzOwomIzQzO3VuaW9uIGFyZW5hX3VwYWlyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwOwomIzQzOwlfX3U2NCBoYWx2ZXNbMl07CiYjNDM7fTsKJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9wYWlyKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3BhaXJdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9wYWlyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9hbmRfc2NhbGFyKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXJdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9hcnJheSBnbG9iYWxfcmV0X2FyZW5hX2FycmF5KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FycmF5KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FycmF5XTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfYXJyYXkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfc2luZ2xlKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZV07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19uYWtlZCB1bmlvbiBhcmVuYV91cGFpciBnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3VuaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfdW5pb24pCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMKaW5kZXggZDZiNDIyYWU5Nzg0Yi4uZTljODJkZjhlZmIyNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jCkBAIC0xOCw2ICYjNDM7MTgsOCBAQCB2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZCkKIAk6ICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9pMTI4KSwKIAkgICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwpLAogCSAgJiMzNDtyJiMzNDsoJmFtcDticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIpLAomIzQzOwkgICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKSwKJiM0MzsJICAmIzM0O3ImIzM0OygmYW1wO2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApLAogCSAgJiMzNDtyJiMzNDsoJmFtcDticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paSksCiAJICAmIzM0O3ImIzM0OygmYW1wO2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZykpOwogfQpAQCAtNzEsNyAmIzQzOzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpCiAKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAotX19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWVtYmVyICYjMzk7cCYjMzk7IGhhcyB0eXBlIFBUUiYjMzQ7KQogX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoCkBAIC04NCw2ICYjNDM7ODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKQogCTogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnMmIzM0OykKJiM0MztfX21zZygmIzM0O21lbWJlciAmIzM5O2luLnAmIzM5OyBoYXMgdHlwZSBQVFImIzM0OykKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX25lc3RlZF9wdHJfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZCYjMzQ7KQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfdG9vX2RlZXBfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcF07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbShicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjIgIXJlYWRfb2smIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2QKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jCkBAIC0wLDAgJiM0MzsxLDEyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSAmYW1wOyZhbXA7IF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAyMwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmCiYjNDM7ICogcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVyIGRvaW5nIGl0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpCiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqYSwgKmI7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHI7CiYjNDM7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwkvKiBCb3RoIGhhbHZlcyBjb21lIGJhY2sgaW4gUjA6UjIsIHBvaW50aW5nIGF0IHBhZ2UgYW5kIHBhZ2UgJiM0MzsgNC4gKi8KJiM0MzsJciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKCh1NjQpcGFnZSk7CiYjNDM7CWlmICghci5hIHx8ICFyLmIpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJYSA9IGFyZW5hX3B0cihyLmEpOwomIzQzOwliID0gYXJlbmFfcHRyKHIuYik7CiYjNDM7CSphID0gMTsKJiM0MzsJKmIgPSAyOwomIzQzOwlpZiAoKmEgIT0gMSkKJiM0MzsJCXJldHVybiAzOwomIzQzOwlpZiAoKmIgIT0gMikKJiM0MzsJCXJldHVybiA0OwomIzQzOwomIzQzOwkvKiBUaGUgaGFsdmVzIGFyZSB0aGUgZmlyc3QgdHdvIHNsb3RzIG9mIHRoZSBwYWdlIHRoZSBwcm9ncmFtIGFsbG9jYXRlZC4gKi8KJiM0MzsJcGFnZVswXSA9IDc7CiYjNDM7CWlmICgqYSAhPSA3KQomIzQzOwkJcmV0dXJuIDU7CiYjNDM7CXBhZ2VbMV0gPSA5OwomIzQzOwlpZiAoKmIgIT0gOSkKJiM0MzsJCXJldHVybiA2OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV9taXhlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCByOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqcDsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CS8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqLwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoKHU2NClwYWdlKTsKJiM0MzsJaWYgKCFyLnApCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJaWYgKHIudGFnICE9IDB4YmVlZikKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwlwID0gYXJlbmFfcHRyKHIucCk7CiYjNDM7CSpwID0gMzsKJiM0MzsJaWYgKCpwICE9IDMpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzJiMzNDspCiYjNDM7X19tc2coJiMzNDttZW1iZXIgJiMzOTtiJiMzOTsgaGFzIHR5cGUgUFRSJiMzNDspCiYjNDM7aW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfdW50YWdnZWRfZmFpbCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByOwomIzQzOwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQoMCk7CiYjNDM7CiYjNDM7CXJldHVybiByLmEgPT0gci5iOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjQKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWVtYmVyICYjMzk7YiYjMzk7IGhhcyB0eXBlIFBUUiYjMzQ7KQomIzQzO2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByOwomIzQzOwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24oMCk7CiYjNDM7CiYjNDM7CXJldHVybiByLmEgPT0gci5iOwomIzQzO30KJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0JiMzNDspCiYjNDM7X19za2lwKCYjMzQ7bmVlZHMgTExWTSAyMyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBkdW1teV90ZXN0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jCmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMKQEAgLTYwLDcgJiM0Mzs2MCw3IEBAIF9fbm9pbmxpbmUgaW50IGV4Y2VwdGlvbl9jYl9va19hcmdfc21hbGwoaW50IGEpCiAKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19leGNlcHRpb25fY2IoZXhjZXB0aW9uX2NiX2JhZF9yZXRfdHlwZTEpCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLiYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O09ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnMmIzM0OykKIGludCByZWplY3RfZXhjZXB0aW9uX2NiX3R5cGVfMShzdHJ1Y3QgX19za19idWZmICpjdHgpCiB7CiAJYnBmX3Rocm93KDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwppbmRleCA4MTVmMzQyZWI0YjA1Li42NzJhM2FhZGQ5Y2IyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwpAQCAtNzM0LDQgJiM0Mzs3MzQsNTIgQEAgaW50IGNoZWNrX2FyZW5hX2FyZ19yZXQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSAmYW1wOyZhbXA7IF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAyMwomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9wYWdlX3BhaXIgewomIzQzOwl1MzIgX19hcmVuYSAqZmlyc3Q7CiYjNDM7CXUzMiBfX2FyZW5hICpzZWNvbmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztfX3dlYWsgc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBzcGxpdF9hcmVuYV9wYWdlKHUzMiBfX2FyZW5hICpwYWdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBwYWlyOwomIzQzOwomIzQzOwlwYWlyLmZpcnN0ID0gcGFnZTsKJiM0MzsJcGFpci5zZWNvbmQgPSBwYWdlICYjNDM7IDE7CiYjNDM7CiYjNDM7CXJldHVybiBwYWlyOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7CiYjNDM7CXN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgcGFpcjsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXBhaXIgPSBzcGxpdF9hcmVuYV9wYWdlKHBhZ2UpOwomIzQzOwlpZiAoIXBhaXIuZmlyc3QgfHwgIXBhaXIuc2Vjb25kKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CS8qIEJvdGggaGFsdmVzIG9mIHRoZSBwYWlyIG11c3Qgc3RpbGwgYmUgdXNhYmxlIGFzIGFyZW5hIHBvaW50ZXJzLiAqLwomIzQzOwlmaXJzdCA9IHBhaXIuZmlyc3Q7CiYjNDM7CXNlY29uZCA9IHBhaXIuc2Vjb25kOwomIzQzOwkqZmlyc3QgPSAxOwomIzQzOwkqc2Vjb25kID0gMjsKJiM0MzsJaWYgKCpmaXJzdCAhPSAxKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWlmICgqc2Vjb25kICE9IDIpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggODUwY2Y0ZjgzMGM0OC4uMGVmMmNlODc1ZDcxZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC05ODEsNiAmIzQzOzk4MSw0OCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKHU2NCB0YWcpCiAJcmV0dXJuIHI7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSh1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9ICh2b2lkICopKGFkZHIgJiM0MzsgNCkgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgciA9IHsgLnAgPSAodm9pZCAqKWFkZHIsIC50YWcgPSAweGJlZWYgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gTlVMTCB9OwomIzQzOwomIzQzOwlyZXR1cm4gcjsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbih1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CXVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gciA9IHsgLmEgPSAodm9pZCAqKWFkZHIgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQodTY0IHRhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCByID0geyAuaW4gPSB7IC5wID0gTlVMTCB9LCAudGFnID0gdGFnIH07CiYjNDM7CiYjNDM7CXJldHVybiByOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXAodTY0IHYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHIgPSB7IC5sMSA9IHsgLmwyID0geyAubDMgPSB7IC5sNCA9IHsgLnYgPSB2IH0gfSB9IH0gfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwogX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKQogewogCXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2lpIHIgPSB7IC5hID0gYSwgLmIgPSBiIH07CkBAIC0xNTM5LDYgJiM0MzsxNTgxLDEyIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X2kxMjgpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcikKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9mYXN0Y2FsbCwgS0ZfRkFTVENBTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbikKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKQogI2VuZGlmCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKaW5kZXggNjVlNjkzYWRhNzM2NC4uYTJlOWU5ZjMxODRlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCkBAIC0yNiw2ICYjNDM7MjYsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgewogfTsKICNlbmRpZgogCiYjNDM7I2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpCiYjNDM7I2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoJiMzNDthcmVuYSYjMzQ7KSkpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIF9fYXJlbmFfdGFnCiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgYnBmX2l0ZXJfdGVzdG1vZF9zZXE7CiAKIHN0cnVjdCBwcm9nX3Rlc3RfcGFzczEgewpAQCAtNzAsNiAmIzQzOzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7CS8qIDE2IGJ5dGVzOiBjb250YWlucyBhIHBvaW50ZXIgKi8KIAlfX3U2NCB0YWc7CiB9OwogCiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgewkvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovCiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmE7CiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCB7CS8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqLwomIzQzOwl2b2lkIF9fYXJlbmFfdGFnICpwOwomIzQzOwlfX3U2NCB0YWc7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCB7CS8qIDE2IGJ5dGVzOiAmIzM5O2ImIzM5OyBsYWNrcyB0aGUgYXJlbmEgdGFnICovCiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmE7CiYjNDM7CXZvaWQgKmI7CiYjNDM7fTsKJiM0MzsKJiM0Mzt1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHsJLyogOCBieXRlczogJiMzOTtiJiMzOTsgbGFja3MgdGhlIGFyZW5hIHRhZyAqLwomIzQzOwl2b2lkIF9fYXJlbmFfdGFnICphOwomIzQzOwl2b2lkICpiOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHsJLyogMTYgYnl0ZXM6IHRoZSBwb2ludGVyIGhpZGVzIG9uZSBsZXZlbCBkb3duICovCiYjNDM7CXN0cnVjdCB7CiYjNDM7CQl2b2lkICpwOwomIzQzOwl9IGluOwomIzQzOwlfX3U2NCB0YWc7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHsJLyogOCBieXRlcywgYnV0IG5lc3RlZCBwYXN0IHRoZSA0LWxldmVsIHdhbGsgbGltaXQgKi8KJiM0MzsJc3RydWN0IHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJc3RydWN0IHsKJiM0MzsJCQkJc3RydWN0IHsKJiM0MzsJCQkJCV9fdTY0IHY7CiYjNDM7CQkJCX0gbDQ7CiYjNDM7CQkJfSBsMzsKJiM0MzsJCX0gbDI7CiYjNDM7CX0gbDE7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyB7CS8qIDI0IGJ5dGVzOiB0b28gbGFyZ2UgZm9yIFIwOlIyICovCiAJX191NjQgYTsKIAlfX3U2NCBiOwpAQCAtMTU5LDYgJiM0MzsyMDQsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wYWlyKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3BhaXIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwoX191NjQgYSwgX191NjQgYikgX19rc3ltOwogc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKSBfX2tzeW07CiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKF9fdTY0IHRhZykgX19rc3ltOwomIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltOwomIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKF9fdTY0IGFkZHIpIF9fa3N5bTsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07CiYjNDM7dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKF9fdTY0IHYpIF9fa3N5bTsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcodm9pZCkgX19rc3ltOwogX191NjQgYnBmX2tmdW5jX2NhbGxfc3RhY2tfYXJnKF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsCiAJCQkgICAgICAgX191NjQgZSwgX191NjQgZiwgX191NjQgZywgX191NjQgaCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MzUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGludGVyZXN0aW5nIG9uZSBhY3R1YWxseS4gVGhlIEJQRiB2ZXJpZmllciBpcyBiZWluZyB1cGRhdGVkIHRvIHBlcm1pdCBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUsICpwcm92aWRlZCogdGhvc2UgYWdncmVnYXRlcyBhcmUgbWFkZSB1cCBlbnRpcmVseSBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyAoZGVmaW5lZCBieSB0aGF0IGBidGZfdHlwZV90YWcoJiMzNDthcmVuYSYjMzQ7KWAgYXR0cmlidXRlKS4gIFByZXZpb3VzbHksIG9ubHkgc2NhbGFycyB3ZXJlIGFsbG93ZWQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBleHBhbnNpb24gb2Ygd2hhdCYjMzk7cyBwZXJtaXNzaWJsZSwgYW5kIGl0JiMzOTtzIGdvaW5nIHRvIHJlcXVpcmUgY2FyZWZ1bCByZXZpZXcuCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb25zIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBJJiMzOTttIHNlZWluZyBuZXcgZnVuY3Rpb25zIGxpa2UgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAgd2hpY2ggaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoZXNlIGFyZW5hIHBvaW50ZXIgdHlwZXMsIGFuZCBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAsIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0YWtpbmcgdGhlIHBsYWNlIG9mIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCBpbiBhIGZldyBzcG90cy4gVGhlbiB0aGVyZSBhcmUgY2hhbmdlcyB0byB0aGUgY29yZSBjYWxsLWNoZWNraW5nIGFuZCByZXR1cm4taGFuZGxpbmcgZnVuY3Rpb25zOiBgY2hlY2tfZnVuY19jYWxsYCwgYHByZXBhcmVfZnVuY19leGl0YCwgYG1hcmtfa2Z1bmNfcmV0X3JlZ3NgLCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgLiAgVGhlc2UgYXJlIHRoZSBoZWFydCBvZiB0aGUgdmVyaWZpZXIgbG9naWMsIHNvIGhhbmRsaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIHRob3NlIGFyZW5hIHBvaW50ZXJzIGNvcnJlY3RseSBpcyBnb2luZyB0byBiZSBrZXkuCgpUaGlzIGhhcyBmdXp6aW5nIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIFRoaXMgaXMgYSBjbGVhciBleHBhbnNpb24gb2YgZnVuY3Rpb25hbGl0eSBhbmQsIGFzIHdpdGggYW55IGNoYW5nZSB0byB0aGUgdmVyaWZpZXIsIEkmIzM5O2Qgd2FudCB0byBiZSBzdXJlIGl0JiMzOTtzIHJvYnVzdCBhZ2FpbnN0IG1pc2NvbmZpZ3VyYXRpb25zIG9yIG1hbGljaW91cyBpbnB1dC4gVGltZSB0byBwdXQgdGhlIGZ1enplciBvbiB0aGVzZS4KCkZpcnN0IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24uIEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAKKiAgIGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYAoqICAgYGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGtgCiogICBgbWFya19rZnVuY19yZXRfcmVnc2AKKiAgIGBjaGVja19rZnVuY19jYWxsYAoqICAgYGNoZWNrX2Z1bmNfY2FsbGAKKiAgIGBwcmVwYXJlX2Z1bmNfZXhpdGAKCkkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHdoYXQmIzM5O3MgY2hhbmdpbmcuCgpPbmUgbW9yZSB0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRlc3Rpbmcgd2l0aCB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEJQRiBhbmQgQlBGXF9TWVNDQUxMIHNob3VsZCBiZSBzdGFuZGFyZCwgYW5kIEJQRlxfSklUIHRvby4gQnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYW55IHNwZWNpYWwgY29uZmlncyByZWxhdGVkIHRvIEJQRiBhcmVuYXMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgZG8gYSBxdWljayBncmVwIGZvciBgQlBGX0FSRU5BYCBvciByZWxhdGVkIHRlcm1zLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHRoYXQmIzM5O3MgbmVlZGVkIGZvciB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9BUkVOQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQlBGIEFyZW5hOiBIdW50aW5nIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwmIzM5O3MgQlBGIHN1YnN5c3RlbSBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgYW4gJiMzNDthcmVuYSYjMzQ7IG1pZ2h0IGJlIGludm9sdmVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSWYgdGhlcmUmIzM5O3MgYW4gJiMzNDthcmVuYSwmIzM0OyBpdCYjMzk7cyBsaWtlbHkgY29udHJvbGxlZCBieSBzb21lIGBLY29uZmlnYCBzZXR0aW5nLCBkZXRlcm1pbmluZyBpdHMgc2l6ZSwgZW5hYmxpbmcvZGlzYWJsaW5nIGl0LCBvciB0d2Vha2luZyBpdHMgYmVoYXZpb3IuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBpbW1lZGlhdGVseSBgZ3JlcGAgZm9yICYjMzQ7YXJlbmEmIzM0OyB3aXRoaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBiaXJkJiMzOTtzLWV5ZSB2aWV3IG9mIGFueSBleGlzdGluZyBjb25maWd1cmF0aW9uIGtub2JzIHJlbGF0ZWQgdG8gdGhpcyBjb25jZXB0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGluaXRpYWwgc3RlcCB0byBjaGVjayB3aGljaCBvcHRpb25zIGFyZSBpbiB0aGUgc291cmNlIHRyZWUsIGFuZCBmcm9tIHRob3NlLCBxdWlja2x5IGxvb2sgZm9yIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgQlBGIHN1YnN5c3RlbSBwYXJhbWV0ZXJzIGFuZCByZWxhdGVkIHNvdXJjZSBjb2RlLiBJIGV4cGVjdCBJJiMzOTtsbCBxdWlja2x5IGZpbmQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZXJlLiBPbmNlIEkgaGF2ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGVuIEkgY2FuIHNlZSB3aGF0IHNvdXJjZSBmaWxlcyBhbmQgY29kZSBwYXRocyBhcmUgaW5mbHVlbmNlZCBieSB0aG9zZSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIyMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBCUEYgQXJlbmEgSXNzdWUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCB0aGlzIGZlZWxzIGxpa2UgaXQgY291bGQgYmUgYSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgQlBGIGFyZW5hLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvZGUsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL2FyZW5hLmNgLCBvciBzb21ldGhpbmcgY2xvc2VseSByZWxhdGVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGFyZW5hIG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIGRlYWxsb2NhdGVkLCBhbmQgaG93IGl04oCZcyBiZWluZyB0cmFja2VkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGZyYWdtZW50YXRpb24gcHJvYmxlbXMsIG9yIHBvc3NpYmx5IG1lbW9yeSBsZWFrcyB3aXRoaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBrZXJuZWwuIEEgcXVpY2sgc2NhbiBvZiByZWxhdGVkIGZpbGVzIG1pZ2h0IGFsc28gYmUgd2FycmFudGVkLCB0byBzZWUgaG93IHRoYXQgYXJlbmEgaXMgdXNlZCBhbmQgaW50ZXJhY3RlZCB3aXRoIGFjcm9zcyBvdGhlciBwYXJ0cyBvZiB0aGUgQlBGIHN5c3RlbS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBwcm92aWRlIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IHRoaXMgaXNzdWUsIHNvIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2FyZW5hLmMmIzM0OywKICAgICYjMzQ7YXJyYXltYXAuYyYjMzQ7LAogICAgJiMzNDtiYWNrdHJhY2suYyYjMzQ7LAogICAgJiMzNDtibG9vbV9maWx0ZXIuYyYjMzQ7LAogICAgJiMzNDticGZfY2dycF9zdG9yYWdlLmMmIzM0OywKICAgICYjMzQ7YnBmX2lub2RlX3N0b3JhZ2UuYyYjMzQ7LAogICAgJiMzNDticGZfaW5zbl9hcnJheS5jJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyLmMmIzM0OywKICAgICYjMzQ7YnBmX2xvY2FsX3N0b3JhZ2UuYyYjMzQ7LAogICAgJiMzNDticGZfbHJ1X2xpc3QuYyYjMzQ7LAogICAgJiMzNDticGZfbHJ1X2xpc3QuaCYjMzQ7LAogICAgJiMzNDticGZfbHNtLmMmIzM0OywKICAgICYjMzQ7YnBmX2xzbV9wcm90by5jJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzLmMmIzM0OywKICAgICYjMzQ7YnBmX3Rhc2tfc3RvcmFnZS5jJiMzNDssCiAgICAmIzM0O2J0Zi5jJiMzNDssCiAgICAmIzM0O2J0Zl9pdGVyLmMmIzM0OywKICAgICYjMzQ7YnRmX3JlbG9jYXRlLmMmIzM0OywKICAgICYjMzQ7Y2ZnLmMmIzM0OywKICAgICYjMzQ7Y2dyb3VwLmMmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDtjaGVja19idGYuYyYjMzQ7LAogICAgJiMzNDtjbnVtLmMmIzM0OywKICAgICYjMzQ7Y251bV9kZWZzLmgmIzM0OywKICAgICYjMzQ7Y29uc3RfZm9sZC5jJiMzNDssCiAgICAmIzM0O2NvcmUuYyYjMzQ7LAogICAgJiMzNDtjcHVtYXAuYyYjMzQ7LAogICAgJiMzNDtjcHVtYXNrLmMmIzM0OywKICAgICYjMzQ7Y3J5cHRvLmMmIzM0OywKICAgICYjMzQ7ZGV2bWFwLmMmIzM0OywKICAgICYjMzQ7ZGlhZ25vc3RpY3MuYyYjMzQ7LAogICAgJiMzNDtkaWFnbm9zdGljcy5oJiMzNDssCiAgICAmIzM0O2Rpc2FzbS5jJiMzNDssCiAgICAmIzM0O2Rpc2FzbS5oJiMzNDssCiAgICAmIzM0O2Rpc3BhdGNoZXIuYyYjMzQ7LAogICAgJiMzNDtkbWFidWZfaXRlci5jJiMzNDssCiAgICAmIzM0O2ZpeHVwcy5jJiMzNDssCiAgICAmIzM0O2hhc2h0YWIuYyYjMzQ7LAogICAgJiMzNDtoZWxwZXJzLmMmIzM0OywKICAgICYjMzQ7aW5vZGUuYyYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDtsaW5rX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDtsaXZlbmVzcy5jJiMzNDssCiAgICAmIzM0O2xvY2FsX3N0b3JhZ2UuYyYjMzQ7LAogICAgJiMzNDtsb2cuYyYjMzQ7LAogICAgJiMzNDtscG1fdHJpZS5jJiMzNDssCiAgICAmIzM0O21hcF9pbl9tYXAuYyYjMzQ7LAogICAgJiMzNDttYXBfaW5fbWFwLmgmIzM0OywKICAgICYjMzQ7bWFwX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDttZW1hbGxvYy5jJiMzNDssCiAgICAmIzM0O21tYXBfdW5sb2NrX3dvcmsuaCYjMzQ7LAogICAgJiMzNDttcHJvZy5jJiMzNDssCiAgICAmIzM0O25ldF9uYW1lc3BhY2UuYyYjMzQ7LAogICAgJiMzNDtvZmZsb2FkLmMmIzM0OywKICAgICYjMzQ7cGVyY3B1X2ZyZWVsaXN0LmMmIzM0OywKICAgICYjMzQ7cGVyY3B1X2ZyZWVsaXN0LmgmIzM0OywKICAgICYjMzQ7cHJvZ19pdGVyLmMmIzM0OywKICAgICYjMzQ7cXVldWVfc3RhY2tfbWFwcy5jJiMzNDssCiAgICAmIzM0O3JhbmdlX3RyZWUuYyYjMzQ7LAogICAgJiMzNDtyYW5nZV90cmVlLmgmIzM0OywKICAgICYjMzQ7cmVsb19jb3JlLmMmIzM0OywKICAgICYjMzQ7cmV1c2Vwb3J0X2FycmF5LmMmIzM0OywKICAgICYjMzQ7cmluZ2J1Zi5jJiMzNDssCiAgICAmIzM0O3Jxc3BpbmxvY2suYyYjMzQ7LAogICAgJiMzNDtycXNwaW5sb2NrLmgmIzM0OywKICAgICYjMzQ7c3RhY2ttYXAuYyYjMzQ7LAogICAgJiMzNDtzdGF0ZXMuYyYjMzQ7LAogICAgJiMzNDtzdHJlYW0uYyYjMzQ7LAogICAgJiMzNDtzeXNjYWxsLmMmIzM0OywKICAgICYjMzQ7c3lzZnNfYnRmLmMmIzM0OywKICAgICYjMzQ7dGFza19pdGVyLmMmIzM0OywKICAgICYjMzQ7dGN4LmMmIzM0OywKICAgICYjMzQ7dG51bS5jJiMzNDssCiAgICAmIzM0O3Rva2VuLmMmIzM0OywKICAgICYjMzQ7dHJhbXBvbGluZS5jJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7cHJlbG9hZCYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGFyZW5hLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBhcmVuYS5jYCBmaWxlIGhhcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBiYWtlZCBpbnRvIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSB3aXRoaW4gdGhhdCBmaWxlIGJlaGF2ZXMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIGNlcnRhaW4gYnVpbGQgY29uZmlndXJhdGlvbnMsIGZlYXR1cmUgZmxhZ3MsIG9yIHBsYXRmb3JtIHNwZWNpZmljcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgLCBgI2lmbmRlZmAsIGAjaWZgLCBgI2Vsc2VgLCBhbmQgYCNlbmRpZmAgdGhhdCBjb3VsZCBhZmZlY3Qgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgaW5jbHVkZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBJZGVudGlmeWluZyB0aGVzZSBkaXJlY3RpdmVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmaWxlJiMzOTtzIGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdmFyaWFiaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBkZXBsb3ltZW50cyBvciB1c2UgY2FzZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBwcm9qZWN0LiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGZpbGUgaXMgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmEubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXkgQlBGIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUuIEZpcnN0LCB0aGUgdXN1YWwgc3VzcGVjdHMgYXJlIGF0IHBsYXk6IGBDT05GSUdfTU1VYCwgYENPTkZJR182NEJJVGAsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGluaXRpYWwgc2NhbiB5aWVsZGVkIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHBhcnRpY3VsYXJseSByZWxldmFudCwgY2x1c3RlcmVkIGFyb3VuZCBgYnRmLmNgIGFuZCBgdmVyaWZpZXIuY2AuCgpJbiBgYnRmLmNgLCBJIHNhdyBgYnRmX3R5cGVfaXNfYXJlbmFfcHRyYCwgYGJ0Zl9zY2FuX3R5cGVfdGFnc2AgKHdoaWNoIHdhcyBtb2RpZmllZCksIGBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGVgIChhbHNvIG1vZGlmaWVkKSwgYW5kIGBidGZfcHJlcGFyZV9mdW5jX2FyZ3NgIChtb2RpZmllZCBhZ2FpbikuIFRoZW4sIG92ZXIgaW4gYHZlcmlmaWVyLmNgLCB0aGUgbGlzdCBpbmNsdWRlcyBgY2hlY2tfZnVuY19jYWxsYCAobW9kaWZpZWQpLCBgcHJlcGFyZV9mdW5jX2V4aXRgIChtb2RpZmllZCksIGBtYXJrX2tmdW5jX3JldF9yZWdzYCAobW9kaWZpZWQpLCBgYnRmX21lbWJlcl9raW5kX2FsbG93ZWRgIChhZGRlZCksIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCAoYWRkZWQpLCBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAgKGFkZGVkKSwgYGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3RgIChtb2RpZmllZCksIGBidGZfbWVtYmVyX3BhdGhfc3RyYCAoYWRkZWQpLCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgIChtb2RpZmllZCkuCgpBZnRlciBhIGZpcnN0IHBhc3MsIEkgbmFycm93ZWQgaXQgZG93biB0bzogYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCwgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgLCBgbWFya19rZnVuY19yZXRfcmVnc2AsIGBjaGVja19rZnVuY19jYWxsYCwgYGNoZWNrX2Z1bmNfY2FsbGAsIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJIGNoZWNrZWQgd2hpY2ggZnVuY3Rpb25zIGFyZSBzdGF0aWMuIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCwgYG1hcmtfa2Z1bmNfcmV0X3JlZ3NgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19mdW5jX2NhbGxgLCBhbmQgYHByZXBhcmVfZnVuY19leGl0YCBhcmUgYWxsIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYXMgSSBuZWVkIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciB0aGUgQVBJIGVudHJ5IHBvaW50cy4KCkdpdmVuIHRoYXQgY29uc3RyYWludCwgSSByZWZpbmVkIHRoZSBsaXN0IHRvIGZvY3VzIG9uIGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYCwgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGBidGZfcHJlcGFyZV9mdW5jX2FyZ3NgLCBhbmQgYGJwZl9jaGVja2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYCBhbmQgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXMgdGhhdCBJIHNob3VsZCBsb29rIGF0IHJpZ2h0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9Nzk1Nj1zdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy03OTkwLVxua2VybmVsL2JwZi9idGYuYzo3OTkxOlx0XHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxua2VybmVsL2JwZi9idGYuYy03OTkyLVx0XHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTY3Mz1zdGF0aWMgYm9vbCBidGZfc3RydWN0X21lbWJlcl93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjA6Ym9vbCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MjEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3Mjc9c3RhdGljIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTczMC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MzE6XHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ2hlY2tpbmcgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgQlRGIHR5cGUgYW5hbHlzaXMsIGFuZCBzcGVjaWZpY2FsbHksIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwuIEkmIzM5O20gYXNzdW1pbmcsIGJhc2VkIG9uIHRoZSBuYW1pbmcsIHRoYXQgdGhpcyBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBnaXZlbiBCVEYgdHlwZSBkZXNjcmlwdG9yIHJlcHJlc2VudHMgYSBwb2ludGVyIHRoYXQgcmVzaWRlcyB3aXRoaW4gc29tZSBtYW5hZ2VkIGFyZW5hIG9yIHBvb2wuCgpUaGUgaW1tZWRpYXRlIGltcGxpY2F0aW9ucyBhcmUgaW1wb3J0YW50LiBJcyB0aGlzIGNoZWNrIHBlcmZvcm1lZCBhdCBjb21waWxlIHRpbWUsIG9yIHJ1bnRpbWU/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGFyZSB0aGVyZSBvdGhlciBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIHRvIHF1YWxpZnkgYSBwb2ludGVyPyBBbmQgZG9lcyBpdCByZWxhdGUgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHNvbWUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3k/IE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHBhcnQgb2YgZW5zdXJpbmcgc2FmZXR5IGFuZCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGxpa2VseSB3aXRoaW4gYSBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtIG9yIGRyaXZlci4gQXJlIHRoZXJlIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgaGVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhdG9taWNhbGx5IGFjY2Vzc2VkIG1lbW9yeSBsb2NhdGlvbnMgb3IgYXJlIHRoZXJlIHBvdGVudGlhbGx5IHJhY2UgY29uZGl0aW9ucyB0byB3b3JyeSBhYm91dD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB2YXJpb3VzIHR5cGUgcXVhbGlmaWVycyB0b287IGNvbnN0LCB2b2xhdGlsZSwgZXRjLiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGhhdmUgdG8gY2hlY2sgbW9yZSB0aGFuIGp1c3QgdGhlIHBsYWluIEJURiB0eXBlIGtpbmQuIFRoaXMgY291bGQgaGF2ZSBzb21lIHJlYWwgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIHZlcmlmaWVyIGZ1bmN0aW9ucyBhcyB3ZWxsLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBwb3NzaWJsZSBjYXNlcyB3aGVyZSBhIHBvaW50ZXIgKndvdWxkbiYjMzk7dCogYmUgY29uc2lkZXJlZCBhcmVuYS1tYW5hZ2VkLiBBbmQgYnkgZGVmaW5pdGlvbiwgcG9pbnRlcnMgcmV0dXJuZWQgZnJvbSBtYWxsb2MsIG9yIGV2ZW4gc29tZXRoaW5nIHJldHVybmVkIGZyb20gYW4gZUJQRiBtYXAgYXJlIG5vdC4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBteSBsb2dpYyBpcyBhcyBjbGVhciBhcyBwb3NzaWJsZS4KCkkmIzM5O20gc3RhcnRpbmcgdG8gZm9ybXVsYXRlIGEgbWVudGFsIG1vZGVsLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSBteSBoeXBvdGhlc2VzLiBUaGlzIGlzIGEgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2sgZm9yIEJURi1iYXNlZCBhbmFseXNpcywgYW5kIGFueSBlcnJvcnMgaGVyZSBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCB3b3Jrcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfdHlwZV9pc19hcmVuYV9wdHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTM0ODY9c3RhdGljIGludCBidGZfdHlwZV90YWdfd2Fsayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zNTI1LVxua2VybmVsL2JwZi9idGYuYzozNTI2OmJvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxua2VybmVsL2JwZi9idGYuYy0zNTI3LXtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTc5NDY9c3RhdGljIHZvaWQgYnRmX3NjYW5fdHlwZV90YWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsIHUzMiAqdGFncylcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NTAtXG5rZXJuZWwvYnBmL2J0Zi5jOjc5NTE6XHRpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NTItXHRcdCp0YWdzIHw9IEFSR19UQUdfQVJFTkE7XG4tLVxua2VybmVsL2JwZi9idGYuYz03OTU2PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NjUtXHQgKi9cbmtlcm5lbC9icGYvYnRmLmM6Nzk2NjpcdGlmIChzdWJwcm9nIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbmtlcm5lbC9icGYvYnRmLmMtNzk2Ny1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjU4PXN0YXRpYyBib29sIGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY2Mi1cdFx0cmV0dXJuIHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2NjM6XHRpZiAoKG1lbWJlcl9raW5kcyBcdTAwMjYgQlRGX01FTUJFUl9BUkVOQV9QVFIpIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY2NC1cdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDE4CgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhYm91dCBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHJldHVybiB0eXBlcyBmcm9tIGtmdW5jcyBhbmQgc3VicHJvZ3JhbXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgZXhwYW5kaW5nIHRoZSBhbGxvd2VkIHJldHVybiB0eXBlcyBiZXlvbmQganVzdCBzaW1wbGUgc2NhbGFycyB0byBpbmNsdWRlIHN0cnVjdHMgb3IgdW5pb25zLCBhcyBsb25nIGFzIHRoZXkmIzM5O3JlIGNvbXBvc2VkIG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzLiBJIGtub3cgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgYW55IGNoYW5nZXMgaGVyZSB3YXJyYW50IGNhcmVmdWwgYXR0ZW50aW9uLgoKVGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGNoZWNrcyBhcmUgYGJ0Zl9wcmVwYXJlX2Z1bmNfYXJnc2AsIGBjaGVja19rZnVuY19jYWxsYCwgYW5kIGBjaGVja19mdW5jX2NhbGxgLiBTaW5jZSBgY2hlY2tfa2Z1bmNfY2FsbGAgYW5kIGBjaGVja19mdW5jX2NhbGxgIGFyZSBzdGF0aWMsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGlzIG5ldyBsb2dpYzogYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgIGFuZCBgYnRmX3R5cGVfaXNfYXJlbmFfcHRyYCwgYW5kIGFsc28gYGJ0Zl9wcmVwYXJlX2Z1bmNfYXJnc2AuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aG9zZSB0aHJlZSwgYW5kIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IG90aGVycy4KCkFzIGZvciBjb25maWd1cmF0aW9uLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIG1lbnRpb25zIGBidGZfdHlwZV90YWcoJiMzNDthcmVuYSYjMzQ7KWAsIGFuZCBJIGluaXRpYWxseSBsb29rZWQgZm9yIGEgc3BlY2lmaWMgYENPTkZJR19CUEZfQVJFTkFgIGJ1dCBjb25maXJtZWQgdGhhdCBpc24mIzM5O3QgcHJlc2VudCwgYnV0IGBhcmVuYS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTU1VYCwgYENPTkZJR182NEJJVGAsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgZW5hYmxlZC4gU28sIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IG5vIHNwZWNpYWwgY29uZmlnIGZsYWdzIGFyZSBuZWVkZWQgYmV5b25kIHRoZSBzdGFuZGFyZCBCUEYgb25lcy4KClNvLCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggZW5hYmxlcyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBpZiB0aGV5JiMzOTtyZSBjb21wb3NlZCBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyB0eXBlIGNoZWNraW5nIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCB0aGUgYXJlbmEgcG9pbnRlcnMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gdGhlIHBlcm1pdHRlZCByZXR1cm4gdHlwZXMuIEZyb20gdXNlcnNwYWNlLCB0aGlzIGlzIHRyaWdnZXJlZCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCB0aGUga2Z1bmNzIG9yIHN1YnByb2dyYW1zIHRoYXQgbm93IHJldHVybiBzdHJ1Y3RzL3VuaW9ucy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlc2Ugc3ltYm9sczoKCiogICBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAKKiAgIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgCiogICBgYnRmX3ByZXBhcmVfZnVuY19hcmdzYAoKT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mJiMzNDssCiAgICAmIzM0O2J0Zl90eXBlX2lzX2FyZW5hX3B0ciYjMzQ7LAogICAgJiMzNDtidGZfcHJlcGFyZV9mdW5jX2FyZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyBpZiB0aGV5IGFyZSBjb21wb3NlZCBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyAocG9pbnRlcnMgd2l0aCB0aGUgYGJ0Zl90eXBlX3RhZyhcJiMzNDthcmVuYVwmIzM0OylgIGF0dHJpYnV0ZSkuIFByZXZpb3VzbHksIG9ubHkgc2NhbGFycyB3ZXJlIGFsbG93ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXImIzM5O3MgdHlwZSBjaGVja2luZyBsb2dpYyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgKGhhbmRsaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIGFyZW5hIHBvaW50ZXJzKS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdGhhdCBjYWxsIHN1Y2gga2Z1bmNzIG9yIHN1YnByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2J0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YmIzM0OywKICAgICYjMzQ7YnRmX3R5cGVfaXNfYXJlbmFfcHRyJiMzNDssCiAgICAmIzM0O2J0Zl9wcmVwYXJlX2Z1bmNfYXJncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IHJldHVybmluZyBzdHJ1Y3RzIG9yIHVuaW9ucyBieSB2YWx1ZSBmcm9tIGtmdW5jcyBhbmQgZ2xvYmFsIHN1YnByb2dyYW1zIGlmIHRoZXkgYXJlIGNvbXBvc2VkIG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIChwb2ludGVycyB3aXRoIHRoZSBgYnRmX3R5cGVfdGFnKFwmIzM0O2FyZW5hXCYjMzQ7KWAgYXR0cmlidXRlKS4gUHJldmlvdXNseSwgb25seSBzY2FsYXJzIHdlcmUgYWxsb3dlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2ZXJpZmllciYjMzk7cyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZyAoaGFuZGxpbmcgbXVsdGlwbGUgcmV0dXJuIHJlZ2lzdGVycyBhbmQgYXJlbmEgcG9pbnRlcnMpLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwgc3VjaCBrZnVuY3Mgb3Igc3VicHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBrZnVuY3MgYW5kIHN1YnByb2dyYW1zIHRvIHJldHVybiBzdHJ1Y3RzL3VuaW9ucyBjb250YWluaW5nIGFyZW5hIHBvaW50ZXJzIGJ5IHZhbHVlLiBJdCB1cGRhdGVzIHRoZSB2ZXJpZmllciYjMzk7cyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGUgdmVyaWZpZXIuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmN2U4YThhOTUwMWU1ZWEzYmNhOWI4ZTEyMmZkYzRlY2M1NDVlNjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjo0MzozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CmluZGV4IDg5ZGVhNmIwYjAyNDEuLjk2YmY2M2QzNDQzMjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdApAQCAtNTgxLDIwICYjNDM7NTgxLDI3IEBAIGFnYWluc3QgdGhlIGFyZW5hLiBMYXJnZXIgYWNjZXNzZXMgbXVzdCB2ZXJpZnkgdGhlIHJhbmdlIGV4cGxpY2l0bHkuCiBBIGtmdW5jIG1heSByZXR1cm4gYSBzY2FsYXIsIGEgcG9pbnRlciwgb3IgYSBzbWFsbCBzdHJ1Y3Qgb3IgdW5pb24gYnkKIHZhbHVlLiBBIHNjYWxhciBvciBwb2ludGVyIG9mIHVwIHRvIDggYnl0ZXMgaXMgcmV0dXJuZWQgaW4gUjAsIGFzIHVzdWFsLgogCi1BIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycwotKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtOyBhcnJheXMgb2Ygc2NhbGFycyBhcmUKLWFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGUgcmF3Ci1jb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyCi1hbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3QKLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXMKLW9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3QgcmV0dXJuIGluIFIwOlIyIGF0Ci1hbGwuCiYjNDM7QSBzdHJ1Y3Qgb3IgdW5pb24gcmV0dXJuZWQgYnkgdmFsdWUgbXVzdCBiZSBjb21wb3NlZCBvbmx5IG9mIHNjYWxhcnMgYW5kIGFyZW5hCiYjNDM7cG9pbnRlcnMgKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtIGFuZCBhbiBhcmVuYQomIzQzO3BvaW50ZXIgaXMgb25lIGNhcnJ5aW5nIHRoZSBgYGJ0Zl90eXBlX3RhZygmIzM0O2FyZW5hJiMzNDspYGAgYXR0cmlidXRlOyBhcnJheXMgb2YKJiM0MztlaXRoZXIgYXJlIGFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGUKJiM0MztyYXcgY29udGVudHMgb2YgUjAgKGFuZCBSMiksIHNvIGEgbWVtYmVyIG9mIGFueSBvdGhlciBwb2ludGVyIHR5cGUgd291bGQgYmUKJiM0MztsYXVuZGVyZWQgaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kCiYjNDM7cmVmZXJlbmNlIHRyYWNraW5nLiBBIHN0cnVjdCBvciB1bmlvbiB3aXRoIHN1Y2ggYSBtZW1iZXIgaXMgdGhlcmVmb3JlIHJlamVjdGVkCiYjNDM7YXQgbG9hZCB0aW1lLCBhbmQgc28gaXMgb25lIHdpdGggYSBmbG9hdGluZy1wb2ludCBtZW1iZXIsIHdoaWNoIHRoZSBBQkkgbWF5IG5vdAomIzQzO3JldHVybiBpbiBSMDpSMiBhdCBhbGwuCiYjNDM7CiYjNDM7QW4gYXJlbmEgcG9pbnRlciBtZW1iZXIgaXMgaGFuZGVkIGJhY2sgYXMgYSBzY2FsYXIgdG9vLCBidXQgbm90aGluZyBpcyBsb3N0IGJ5CiYjNDM7dGhhdC4gVGhlIHByb2dyYW0gbXVzdCBgYGNhc3Rfa2VybigpYGAgdGhlIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCwgYW5kIHRoZQomIzQzO3ZlcmlmaWVyIGFsbG93cyB0aGF0IGNhc3Qgb24gYW55IHNjYWxhciwgc28gYSBsYXVuZGVyZWQgYXJlbmEgYWRkcmVzcyBnaXZlcyB0aGUKJiM0Mztwcm9ncmFtIG5vIHJlYWNoIGl0IGRpZCBub3QgYWxyZWFkeSBoYXZlLiBUaGUgcmVzdWx0IGlzIGNvbmZpbmVkIHRvIHRoZQomIzQzO3Byb2dyYW0mIzM5O3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuCiAKIEEga2Z1bmMgbWF5IGFsc28gcmV0dXJuIGEgdmFsdWUgbGFyZ2VyIHRoYW4gOCBieXRlcyBhbmQgdXAgdG8gMTYgYnl0ZXMgLS0gYQotc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZAotaW4gdGhlIHJlZ2lzdGVyIHBhaXIgUjA6UjIsIG1hdGNoaW5nIHRoZSBjb252ZW50aW9uIExMVk0gdXNlcyBmb3IgdGhlIEJQRgotdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLiBBIHN0cnVjdCBvcgotdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLgomIzQzO3N0cnVjdCBvciB1bmlvbiBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycywgb3IgYW4gYGBfX2ludDEyOGBgLiBTdWNoIGEKJiM0Mzt2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTQomIzQzO3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLgomIzQzO0Egc3RydWN0IG9yIHVuaW9uIG9mIDggYnl0ZXMgb3IgbGVzcyBpcyByZXR1cm5lZCBpbiBSMCBhbG9uZS4KIAogOjoKIApAQCAtNjIwLDEwICYjNDM7NjI3LDEwIEBAIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBKSVRlZCwgc2luY2UgdGhlIGludGVycHJldGVyIHByb3BhZ2F0ZXMgb25seSBSMCBvdXQgb2YKIGEgc3VicHJvZ3JhbTogd2l0aG91dCBhIEpJVCB0aGUgcmV0dXJuIHZhbHVlIHN0YXlzIGluIFIwIGFsb25lLCBhbmQgYSBjYWxsZXIKIHJlYWRpbmcgUjIgaXMgcmVqZWN0ZWQgZm9yIHJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCByZWdpc3Rlci4gQSBnbG9iYWwKIHN1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW4gaXNvbGF0aW9uLCBzbyBpdHMgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIHJldHVybiBpcwotcmVzdHJpY3RlZCB0byBzY2FsYXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkCi1pbmxpbmUgYW5kIGhhcyBubyBzdWNoIHJlc3RyaWN0aW9uLiBUaGUgbWFpbiBwcm9ncmFtIGlzIG5vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuCi12YWx1ZSBpcyB0aGUgcHJvZ3JhbSYjMzk7cyBleGl0IGNvZGUsIHJlYWQgb3V0IG9mIFIwIGFsb25lLCBzbyBhIGRlY2xhcmVkIHVwcGVyCi1oYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC4KJiM0MztyZXN0cmljdGVkIHRvIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYwomIzQzO3N1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcwomIzQzO25vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuIHZhbHVlIGlzIHRoZSBwcm9ncmFtJiMzOTtzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjAKJiM0MzthbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlciBoYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC4KIAogQSBnbG9iYWwgc3VicHJvZ3JhbSBtdXN0IGxlYXZlIGEgc2NhbGFyIGluICpldmVyeSogcmVnaXN0ZXIgb2YgdGhlIHBhaXIsIHNvCiBib3RoIGhhbHZlcyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaGF2ZSB0byBiZSBhc3NpZ25lZC4gTGVhdmluZyB0aGUgdXBwZXIgaGFsZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggMDA0YjA2Nzg1NTIxYy4uYWU5ZjYwNjUzOWY0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC0xNDg4LDggJiM0MzsxNDg4LDE1IEBAIGludCBicGZfam1wX29mZnNldChzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogc3RydWN0IGJwZl9pYXJyYXkgKmJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCk7CiB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzayk7CiBib29sIGJwZl9zdWJwcm9nX2lzX2dsb2JhbChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7Ci1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyk7CiYjNDM7CiYjNDM7LyogS2luZHMgb2YgbWVtYmVyIGEgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIG1heSBiZSBjb21wb3NlZCBvZi4gKi8KJiM0MztlbnVtIGJ0Zl9tZW1iZXJfa2luZCB7CiYjNDM7CUJURl9NRU1CRVJfU0NBTEFSCT0gQklUKDApLCAvKiBhbiBpbnQgb3IgYW4gZW51bSAqLwomIzQzOwlCVEZfTUVNQkVSX0FSRU5BX1BUUgk9IEJJVCgxKSwgLyogYSBwb2ludGVyIGNhcnJ5aW5nIHRoZSAmIzM0O2FyZW5hJiMzNDsgdHlwZSB0YWcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO2Jvb2wgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcyk7CiAKIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpOwogYm9vbCBicGZfaXNfdGhyb3dfa2Z1bmMoc3RydWN0IGJwZl9pbnNuICppbnNuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnRmLmggYi9pbmNsdWRlL2xpbnV4L2J0Zi5oCmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnRmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idGYuaApAQCAtMjM1LDYgJiM0MzsyMzUsNyBAQCBzdHJ1Y3QgYnRmX3JlY29yZCAqYnRmX3BhcnNlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZQogCQkJCSAgICB1MzIgZmllbGRfbWFzaywgdTMyIHZhbHVlX3NpemUpOwogaW50IGJ0Zl9jaGVja19hbmRfZml4dXBfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYyk7CiBib29sIGJ0Zl90eXBlX2lzX3ZvaWQoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTsKJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7CiBzMzIgYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqbmFtZSwgdTgga2luZCk7CiBzMzIgYnBmX2ZpbmRfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBraW5kLCBzdHJ1Y3QgYnRmICoqYnRmX3ApOwogc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA5MWI4Y2U3N2Y2OTlhLi5mNmQ4MmE4ZmQ2MTdiIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTM1MjMsNiAmIzQzOzM1MjMsMjIgQEAgc3RhdGljIGludCBidGZfdHlwZV90YWdfd2Fsayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX3R5cGVfaXNfcHRyKHQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtJmd0O3R5cGUpOyBidGZfdHlwZV9pc19tb2RpZmllcih0KTsKJiM0MzsJICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LSZndDt0eXBlKSkgewomIzQzOwkJaWYgKCFidGZfdHlwZV9pc190eXBlX3RhZyh0KSB8fCBidGZfdHlwZV9rZmxhZyh0KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghc3RyY21wKF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC0mZ3Q7bmFtZV9vZmYpLCAmIzM0O2FyZW5hJiMzNDspKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGJ0Zl9maW5kX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiAJCQkgdTMyIG9mZiwgaW50IHN6LCBzdHJ1Y3QgYnRmX2ZpZWxkX2luZm8gKmluZm8sIHUzMiBmaWVsZF9tYXNrKQogewpAQCAtNzkyNyw1MSAmIzQzOzc5NDMsMTkgQEAgc3RhdGljIGludCBidGZfc2Nhbl9kZWNsX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsCi0JCQkgICAgICB1MzIgKnRhZ3MpCiYjNDM7c3RhdGljIHZvaWQgYnRmX3NjYW5fdHlwZV90YWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsIHUzMiAqdGFncykKIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl90eXBlX3RhZ19tYXRjaCBmdW5jX3R5cGVfdGFnc1tdID0gewotCQl7ICYjMzQ7YXJlbmEmIzM0OywgQVJHX1RBR19BUkVOQSB9LAotCX07Ci0Jc3RydWN0IGJ0Zl90eXBlX3RhZ193YWxrX2N0eCBjdHg7Ci0JY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwotCWludCBlcnI7Ci0KIAkvKiBGaW5kIHRoZSBmaXJzdCBwb2ludGVyIHR5cGUgaW4gdGhlIGNoYWluLiAqLwotCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwogCi0JLyoKLQkgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcywKLQkgKiB3aGljaCBuZWl0aGVyIExMVk0gbm9yIEdDQyBzdXBwb3J0IGFueXdheS4KLQkgKi8KLQlpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSkKLQkJcmV0dXJuIDA7Ci0KLQljdHgudCA9IHQ7Ci0JZXJyID0gYnRmX3R5cGVfdGFnX3dhbGsoYnRmLCAmYW1wO2N0eCwgZnVuY190eXBlX3RhZ3MsCi0JCQkJQVJSQVlfU0laRShmdW5jX3R5cGVfdGFncykpOwotCWlmIChlcnIpIHsKLQkJYnBmX2xvZygmYW1wO2Vudi0mZ3Q7bG9nLAotCQkJJiMzNDtmdW5jdGlvbiBzaWduYXR1cmUgbWVtYmVyIGhhcyBtdWx0aXBsZSB0eXBlIHRhZ3NcbiYjMzQ7KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JKnRhZ3MgfD0gY3R4LnJlczsKLQotCXJldHVybiAwOwomIzQzOwlpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpCiYjNDM7CQkqdGFncyB8PSBBUkdfVEFHX0FSRU5BOwogfQogCiAvKiBDaGVjayB3aGV0aGVyIHRoZSB0eXBlIGlzIGEgdmFsaWQgcmV0dXJuIHR5cGUuICovCiBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidGYsCiAJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHN1YnByb2csIGJvb2wgaXNfZ2xvYmFsKQogewotCXUzMiB0YWdzID0gMDsKLQlpbnQgZXJyOwotCi0JZXJyID0gYnRmX3NjYW5fdHlwZV90YWdzKGVudiwgYnRmLCB0LSZndDt0eXBlLCAmYW1wO3RhZ3MpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LSZndDt0eXBlLCBOVUxMKTsKIAogCS8qCkBAIC03OTc5LDcgJiM0Mzs3OTYzLDcgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnQKIAkgKiBHZW5lcmFsIGFyZW5hIHZhcmlhYmxlcyBhcmUgbm90IGFsbG93ZWQsIHNpbmNlIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHJldHVybiBieSB2YWx1ZQogCSAqIGEgdmFyaWFibGUgdGhhdCYjMzk7cyBvbiB0aGUgaGVhcCBpbiB0aGUgZmlyc3QgcGxhY2UuCiAJICovCi0JaWYgKHN1YnByb2cgJmFtcDsmYW1wOyAodGFncyAmYW1wOyBBUkdfVEFHX0FSRU5BKSAmYW1wOyZhbXA7IGJ0Zl90eXBlX2lzX3B0cih0KSkKJiM0MzsJaWYgKHN1YnByb2cgJmFtcDsmYW1wOyBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBXZSBhbHdheXMgYWNjZXB0IHZvaWQgb3Igc2NhbGFycy4gKi8KQEAgLTc5ODksMTMgJiM0Mzs3OTczLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0CiAJaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSAmYW1wOyZhbXA7IHQtJmd0O3NpemUgJmx0Oz0gMTYpIHsKIAkJLyoKIAkJICogQSBnbG9iYWwgZnVuY3Rpb24mIzM5O3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZQotCQkgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWwKLQkJICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZAotCQkgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi4KJiM0MzsJCSAqIHNjYWxhciBwYWlyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEKJiM0MzsJCSAqIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gT25seQomIzQzOwkJICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzCiYjNDM7CQkgKiBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUgb25lCiYjNDM7CQkgKiBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlCiYjNDM7CQkgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc28KJiM0MzsJCSAqIGl0cyBjYWxsZXIgcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXMKJiM0MzsJCSAqIGZpbmUuCiAJCSAqLwogCQlib29sIGxvY2FsX2Z1bmMgPSBzdWJwcm9nICZhbXA7JmFtcDsgIWlzX2dsb2JhbDsKJiM0MzsJCXUzMiBtZW1iZXJfa2luZHMgPSBCVEZfTUVNQkVSX1NDQUxBUjsKJiM0MzsKJiM0MzsJCWlmIChzdWJwcm9nKQomIzQzOwkJCW1lbWJlcl9raW5kcyB8PSBCVEZfTUVNQkVSX0FSRU5BX1BUUjsKIAotCQlpZiAobG9jYWxfZnVuYyB8fCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgYnRmLCB0LCAwKSkKJiM0MzsJCWlmIChsb2NhbF9mdW5jIHx8IGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIG1lbWJlcl9raW5kcykpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgwOTEsNyAmIzQzOzgwODQsOCBAQCBpbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKQogCQlpZiAoaXNfZ2xvYmFsKSB7CiAJCQlicGZfbG9nKGxvZywKIAkJCQkmIzM0O0dsb2JhbCBmdW5jdGlvbiAlcygpIGhhcyB1bnN1cHBvcnRlZCByZXR1cm4gdHlwZS4gJiMzNDsKLQkJCQkmIzM0O09ubHkgdm9pZCwgc2NhbGFyLCBvciBhIHNjYWxhci1vbmx5IHN0cnVjdC91bmlvbiB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXG4mIzM0OywKJiM0MzsJCQkJJiMzNDtPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiAmIzM0OwomIzQzOwkJCQkmIzM0O3NjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cbiYjMzQ7LAogCQkJCXRuYW1lKTsKIAkJfQogCQlyZXR1cm4gZXJyOwpAQCAtODEwNiw5ICYjNDM7ODEwMCw3IEBAIGludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCAmYW1wO3RhZ3MpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKJiM0MzsJCWJ0Zl9zY2FuX3R5cGVfdGFncyhidGYsIGFyZ3NbaV0udHlwZSwgJmFtcDt0YWdzKTsKIAogCQl0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBhcmdzW2ldLnR5cGUpOwogCQl3aGlsZSAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZTAzNmFlMjBiZjZiOS4uOWEzNjgwODEzNmM5YSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtOTk5NSw5ICYjNDM7OTk5NSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCSAqLwogCQlpZiAoIXJldHVybnNfdm9pZCkgewogCQkJbnJlZ3MgPSBicGZfcmV0X3JlZ19wYWlyKGVudiwgc3VicHJvZykgPyAyIDogMTsKLQkJCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCi0JCQkJbWFya19yZWdfdW5rbm93bihlbnYsIGNhbGxlci0mZ3Q7cmVncywgcmV0X3JlZ3NbaV0pOwomIzQzOwkJCW1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItJmd0O3JlZ3MsIHJldF9yZWdzWzBdKTsKIAkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCQlmb3IgKGkgPSAxOyBpICZsdDsgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7Y2FsbGVyLSZndDtyZWdzW3JldF9yZWdzW2ldXSwgTlVMTCwKJiM0MzsJCQkJCQkgICBCUEZfRElBR19NT0RfV1JJVEUpOwomIzQzOwkJCQltYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLSZndDtyZWdzLCByZXRfcmVnc1tpXSk7CiYjNDM7CQkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCQl9CiAJCX0KIAogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHsKQEAgLTEwNDAzLDEwICYjNDM7MTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KQogCQkgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGUKIAkJICogcmV0dXJuIHJlZ2lzdGVyKHMpCiAJCSAqLwotCQlicGZfZGlhZ19tb2RfYmVnaW4oZW52LCAmYW1wO2NhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IG5yZWdzOyBpJiM0MzsmIzQzOykKLQkJCWNhbGxlci0mZ3Q7cmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtJmd0O3JlZ3NbcmV0X3JlZ3NbaV1dOwotCQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdTMyIHJlZ25vID0gcmV0X3JlZ3NbaV07CiYjNDM7CiYjNDM7CQkJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtjYWxsZXItJmd0O3JlZ3NbcmVnbm9dLCAmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tyZWdub10sCiYjNDM7CQkJCQkgICBCUEZfRElBR19NT0RfV1JJVEUpOwomIzQzOwkJCWNhbGxlci0mZ3Q7cmVnc1tyZWdub10gPSBjYWxsZWUtJmd0O3JlZ3NbcmVnbm9dOwomIzQzOwkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCX0KIAl9CiAKIAkvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsCkBAIC0xMTM0MiwxNSAmIzQzOzExMzUxLDMzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAKIC8qCiAgKiBNYXJrIHRoZSByZWdpc3RlcihzKSBob2xkaW5nIGEgQHNpemUgYnl0ZSBrZnVuYyByZXR1cm4gdmFsdWUgYXMgdW5rbm93bgotICogc2NhbGFycy4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlciBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS4KJiM0MzsgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlcgomIzQzOyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LgomIzQzOyAqCiYjNDM7ICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlCiYjNDM7ICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdAomIzQzOyAqIHNjb3BlIGlzIHdoYXQgY2FycmllcyBpdHMgcHJlLWNhbGwgdmFsdWUgaW50byB0aGUgaGlzdG9yeS4gQSBzY29wZSB0cmFja3MgYQomIzQzOyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZgomIzQzOyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJiMzOTtzIHNjb3BlIG9wZW4gZm9yCiYjNDM7ICogdGhlIGNhbGxlciB0byBjbG9zZSwgc28gYSBsYXRlciB3cml0ZSB0byBSMCBzdGlsbCBsYW5kcyBpbiBpdC4KICAqLwotc3RhdGljIHZvaWQgbWFya19rZnVuY19yZXRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSkKJiM0MztzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKQogewogCXUzMiBpLCBucmVncyA9IHJldF9yZWdzX2NudChzaXplKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCiYjNDM7CW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1swXSk7CiYjNDM7CWlmIChucmVncyA9PSAxKQomIzQzOwkJcmV0dXJuIG5yZWdzOwomIzQzOwomIzQzOwlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJCW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7CiYjNDM7CQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yZWdzOwogfQogCiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKQEAgLTExNjE5LDEwICYjNDM7MTE2NDYsMzMgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KGNvbnN0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwgdTMyIGFyZ18KIAlyZXR1cm4gYXJnbiAmbHQ7PSBhcmdfaWR4OwogfQogCi0vKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZCAqLwotYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYykKJiM0MzsjZGVmaW5lIEJURl9NRU1CRVJfTUFYX0RFUFRICTQKJiM0MzsjZGVmaW5lIEJURl9NRU1CRVJfUEFUSF9MRU4JNjQKJiM0MzsKJiM0MztzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoIHsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcltCVEZfTUVNQkVSX01BWF9ERVBUSF07CiYjNDM7CWludCBkZXB0aDsKJiM0MzsJYm9vbCB0b29fZGVlcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAomIzQzOwkJCQkgICAgdTMyIG1lbWJlcl9raW5kcykKJiM0Mzt7CiYjNDM7CWlmICgobWVtYmVyX2tpbmRzICZhbXA7IEJURl9NRU1CRVJfU0NBTEFSKSAmYW1wOyZhbXA7IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoKG1lbWJlcl9raW5kcyAmYW1wOyBCVEZfTUVNQkVSX0FSRU5BX1BUUikgJmFtcDsmYW1wOyBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpbgomIzQzOyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5CiYjNDM7ICogbWVtYmVyIGNvdW50cyBhcyBpdHMgZWxlbWVudCB0eXBlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMsIGludCByZWMsCiYjNDM7CQkJCSAgIHN0cnVjdCBidGZfbWVtYmVyX3BhdGggKnBhdGgpCiB7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTsKIAljb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyOwpAQCAtMTE2MzYsMjcgJiM0MzsxMTY4Niw2NSBAQCBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCQltZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLSZndDt0eXBlLCBOVUxMKTsKIAkJaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChtZW1iZXJfdHlwZSkpIHsKLQkJCWlmIChyZWMgJmd0Oz0gMykgewomIzQzOwkJCWlmIChyZWMgJmd0Oz0gQlRGX01FTUJFUl9NQVhfREVQVEggLSAxKSB7CiAJCQkJdmVyYm9zZShlbnYsICYjMzQ7bWF4IHN0cnVjdCBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkXG4mIzM0Oyk7CiYjNDM7CQkJCWlmIChwYXRoKQomIzQzOwkJCQkJcGF0aC0mZ3Q7dG9vX2RlZXAgPSB0cnVlOwogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KLQkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyAmIzQzOyAxKSkKLQkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJaWYgKCFidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzLAomIzQzOwkJCQkJCSAgICByZWMgJiM0MzsgMSwgcGF0aCkpCiYjNDM7CQkJCWdvdG8gYmFkX3BhdGg7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoYnRmX3R5cGVfaXNfYXJyYXkobWVtYmVyX3R5cGUpKSB7CiAJCQlhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7CiAJCQlpZiAoIWFycmF5LSZndDtuZWxlbXMpCi0JCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCQlnb3RvIGJhZF9tZW1iZXI7CiAJCQltZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktJmd0O3R5cGUsIE5VTEwpOwotCQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSkKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICghYnRmX21lbWJlcl9raW5kX2FsbG93ZWQoYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzKSkKJiM0MzsJCQlnb3RvIGJhZF9tZW1iZXI7CiAJfQogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2JhZF9tZW1iZXI6CiYjNDM7CWlmIChwYXRoKQomIzQzOwkJcGF0aC0mZ3Q7ZGVwdGggPSByZWMgJiM0MzsgMTsKJiM0MztiYWRfcGF0aDoKJiM0MzsJaWYgKHBhdGggJmFtcDsmYW1wOyBwYXRoLSZndDtkZXB0aCkKJiM0MzsJCXBhdGgtJmd0O21lbWJlcltyZWNdID0gbWVtYmVyOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMsIDAsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KQomIzQzO3sKJiM0MzsJcmV0dXJuIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIEJURl9NRU1CRVJfU0NBTEFSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRmX21lbWJlcl9wYXRoX3N0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyX3BhdGggKnBhdGgsCiYjNDM7CQkJCWNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeikKJiM0Mzt7CiYjNDM7CXNpemVfdCBsZW4gPSAwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJYnVmWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGF0aC0mZ3Q7ZGVwdGg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBjaGFyICpuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcGF0aC0mZ3Q7bWVtYmVyW2ldLSZndDtuYW1lX29mZik7CiYjNDM7CiYjNDM7CQlpZiAoIW5hbWUgfHwgIW5hbWVbMF0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBidWZfc3ogLSBsZW4sICYjMzQ7JXMlcyYjMzQ7LCBsZW4gPyAmIzM0Oy4mIzM0OyA6ICYjMzQ7JiMzNDssIG5hbWUpOwomIzQzOwl9CiB9CiAKIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHsKQEAgLTEyMDM5LDcgJiM0MzsxMjEyNyw3IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiAJCSAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSkgfHwKIAkJICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnICYjNDM7IDFdKSkpIHsKIAkJaWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSAmYW1wOyZhbXA7ICFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpICZhbXA7JmFtcDsKLQkJICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS0mZ3Q7YnRmLCByZWZfdCwgMCkpIHsKJiM0MzsJCSAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byB2b2lkLCBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjA1NSw3ICYjNDM7MTIxNDMsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAogCQkgKiBzY2FsYXJzLiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZCBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlLgogCQkgKi8KIAkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpICZhbXA7JmFtcDsKLQkJICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS0mZ3Q7YnRmLCByZWZfdCwgMCkpIHsKJiM0MzsJCSAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzExMSw3ICYjNDM7MTMxOTksNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLSZndDtidGYsIHJlZl90LCAwKSkgewomIzQzOwkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQkJZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7CiAJCQkJY29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTsKIApAQCAtMTM2NTMsNyAmIzQzOzEzNzQxLDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmcKIAogCQlzdHJ1Y3RfbWV0YSA9IGJ0Zl9maW5kX3N0cnVjdF9tZXRhKHJldF9idGYsIHJldF9idGZfaWQpOwogCQlpZiAoaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEtJmd0O2Z1bmNfaWQpKSB7Ci0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCwgMCkpIHsKJiM0MzsJCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCkpIHsKIAkJCQl2ZXJib3NlKGVudiwgJiMzNDticGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcbiYjMzQ7KTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTEzNzY3LDcgJiM0MzsxMzg1NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDsKIAljb25zdCBjaGFyICpvcGVyYXRpb247CiAJaW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDsKLQl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkOwomIzQzOwl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkLCByZXRfbnJlZ3MgPSAxOwogCXN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYzsKIAlzdHJ1Y3QgYnRmICpkZXNjX2J0ZjsKIAlpbnQgaWQ7CkBAIC0xNDAyMSwyNSAmIzQzOzE0MTA5LDU5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJfQogCiAJaWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkgewotCQltYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXRfbnJlZ3MgPSBtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC0mZ3Q7c2l6ZSk7CiAJCWlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCAmYW1wOyZhbXA7IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fAogCQkgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpCiAJCQlfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCAmYW1wO3JlZ3NbQlBGX1JFR18wXSk7CiAJfSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHsKJiM0MzsJCXN0cnVjdCBidGZfbWVtYmVyX3BhdGggcGF0aCA9IHt9OwomIzQzOwkJY29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSAmIzM0OyYjMzQ7OwomIzQzOwogCQkvKgogCQkgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZAotCQkgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczoKLQkJICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhcgotCQkgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4KJiM0MzsJCSAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZAomIzQzOwkJICogaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4KJiM0MzsJCSAqIE9ubHkgc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIKJiM0MzsJCSAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUKJiM0MzsJCSAqIG9uZSBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlCiYjNDM7CQkgKiByZXN1bHQgdG8gdGhlIGFyZW5hLgogCQkgKi8KLQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgZGVzY19idGYsIHQsIDApKSB7CiYjNDM7CQlpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCwKJiM0MzsJCQkJCSAgICBCVEZfTUVNQkVSX1NDQUxBUiB8IEJURl9NRU1CRVJfQVJFTkFfUFRSLCAwLCAmYW1wO3BhdGgpKSB7CiAJCQl2ZXJib3NlKGVudiwKLQkJCQkmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcbiYjMzQ7LAomIzQzOwkJCQkmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcbiYjMzQ7LAogCQkJCWZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLAogCQkJCWJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpKTsKJiM0MzsJCQlpZiAocGF0aC50b29fZGVlcCkgewomIzQzOwkJCQltZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQkJCWVudiwgJiMzNDsgSXQgbmVzdHMgc3RydWN0cyBtb3JlIHRoYW4gJWQgbGV2ZWxzIGRlZXAuJiMzNDssCiYjNDM7CQkJCQlCVEZfTUVNQkVSX01BWF9ERVBUSCk7CiYjNDM7CQkJfSBlbHNlIGlmIChwYXRoLmRlcHRoKSB7CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBwYXRoLm1lbWJlcltwYXRoLmRlcHRoIC0gMV07CiYjNDM7CQkJCWNoYXIgYmFkX25hbWVbQlRGX01FTUJFUl9QQVRIX0xFTl07CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7CiYjNDM7CiYjNDM7CQkJCWJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsICZhbXA7cGF0aCwgYmFkX25hbWUsIHNpemVvZihiYWRfbmFtZSkpOwomIzQzOwkJCQliYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtJmd0O3R5cGUsIE5VTEwpOwomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDttZW1iZXIgJiMzOTslcyYjMzk7IGhhcyB0eXBlICVzXG4mIzM0OywgYmFkX25hbWUsCiYjNDM7CQkJCQlidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTsKJiM0MzsJCQkJbWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoCiYjNDM7CQkJCQllbnYsCiYjNDM7CQkJCQkmIzM0OyBJdHMgbWVtYmVyICYjMzk7JXMmIzM5OyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuJiMzNDssCiYjNDM7CQkJCQliYWRfbmFtZSwgYnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7CiYjNDM7CQkJfQomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIGluc25faWR4LCAmIzM0O3Vuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZSYjMzQ7LAomIzQzOwkJCQkmIzM0O0NhbGwgYSBrZXJuZWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9ubHkgc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4mIzM0OywKJiM0MzsJCQkJJiMzNDslcygpIHJldHVybnMgJXMgJXMgYnkgdmFsdWUuJXMgJiMzNDsKJiM0MzsJCQkJJiMzNDtPbmx5IGtmdW5jcyByZXR1cm5pbmcgc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycywgb3IgJiMzNDsKJiM0MzsJCQkJJiMzNDtzdHJ1Y3R1cmVzIGNvbXBvc2VkIG9mIHNjYWxhciB2YWx1ZXMgb3IgYXJlbmEgcG9pbnRlcnMgYXJlICYjMzQ7CiYjNDM7CQkJCSYjMzQ7c3VwcG9ydGVkLiYjMzQ7LAomIzQzOwkJCQlmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSwKJiM0MzsJCQkJYnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LSZndDtuYW1lX29mZiksIG1lbWJlcl9ub3RlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCW1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LSZndDtzaXplKTsKJiM0MzsJCXJldF9ucmVncyA9IG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LSZndDtzaXplKTsKIAl9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkgewogCQlwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LSZndDt0eXBlLCAmYW1wO3B0cl90eXBlX2lkKTsKIAkJZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsICZhbXA7bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7CkBAIC0xNDE3MCw3ICYjNDM7MTQyOTIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCSAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlCiAJICogaXRlcmF0b3IgcGF0aCYjMzk7cyBkaWFnbm9zdGljIHBvc2l0aW9uLgogCSAqLwotCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJaWYgKHJldF9ucmVncyA9PSAxKQomIzQzOwkJYnBmX2RpYWdfbW9kX2VuZChlbnYpOwogCiAJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSkgewogCQllcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsICZhbXA7bWV0YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMKaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYwpAQCAtMSwxMSAmIzQzOzEsNTMgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2FnZ3JlZ2F0ZV9yZXRfZnVuYy5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqdm1saW51eF9idGYsICptb2R1bGVfYnRmID0gTlVMTDsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwomIzQzOwlib29sIHRhZ2dlZCA9IGZhbHNlOwomIzQzOwlfX3MzMiBpZDsKJiM0MzsKJiM0MzsJdm1saW51eF9idGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTsKJiM0MzsJaWYgKCF2bWxpbnV4X2J0ZikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKCYjMzQ7YnBmX3Rlc3Rtb2QmIzM0Oywgdm1saW51eF9idGYpOwomIzQzOwlpZiAoIW1vZHVsZV9idGYpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogcHJvZ190ZXN0X3JldF9hcmVuYTo6YSBpcyAmIzM5O3ZvaWQgX19hcmVuYV90YWcgKiYjMzk7OiBQVFIgLSZndDsgVFlQRV9UQUcgLSZndDsgdm9pZCAqLwomIzQzOwlpZCA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQobW9kdWxlX2J0ZiwgJiMzNDtwcm9nX3Rlc3RfcmV0X2FyZW5hJiMzNDssIEJURl9LSU5EX1NUUlVDVCk7CiYjNDM7CWlmIChpZCAmbHQ7PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgYnRmX21lbWJlcnMoYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIGlkKSlbMF0udHlwZSk7CiYjNDM7CWlmICghdCB8fCAhYnRmX2lzX3B0cih0KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl0ID0gYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIHQtJmd0O3R5cGUpOwomIzQzOwl0YWdnZWQgPSB0ICZhbXA7JmFtcDsgYnRmX2lzX3R5cGVfdGFnKHQpICZhbXA7JmFtcDsKJiM0MzsJCSAhc3RyY21wKGJ0Zl9fbmFtZV9ieV9vZmZzZXQobW9kdWxlX2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpLCAmIzM0O2FyZW5hJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnRmX19mcmVlKG1vZHVsZV9idGYpOwomIzQzOwlidGZfX2ZyZWUodm1saW51eF9idGYpOwomIzQzOwomIzQzOwlyZXR1cm4gdGFnZ2VkOwomIzQzO30KIAogdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZCkKIHsKIAlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTsKIAlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuYyk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpCiYjNDM7CQlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSk7CiYjNDM7CWVsc2UKJiM0MzsJCXRlc3RfX3NraXAoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuYwppbmRleCA2ZjY2ZmM4MjJjZWRlLi5mMDA3N2Q5NTFhMjVkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfZnVuYy5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KICNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKICNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmX2FyZW5hX2NvbW1vbi5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAogdHlwZWRlZiB1bnNpZ25lZCBfX2ludDEyOCB1MTI4OwpAQCAtMjM0LDQgJiM0MzsyMzUsMTQ5IEBAIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX3VuaW9uX3B0cl9mYWlsKHZvaWQpCiAKICNlbmRpZgogCiYjNDM7LyoKJiM0MzsgKiBnY2MgcmV0dXJucyBhIGJ5LXZhbHVlIHN0cnVjdCB0aHJvdWdoIGEgaGlkZGVuIHBvaW50ZXIsIGFuZCBlbWl0cyB0aGUKJiM0MzsgKiAmIzM5O3IwID0gcjEmIzM5OyByZXR1cm5pbmcgaXQgYWZ0ZXIgdGhlIF9fbmFrZWQgYm9keSYjMzk7cyBleGl0LCBsZWF2aW5nIHRoZQomIzQzOyAqIHN1YnByb2dyYW0gZmFsbGluZyB0aHJvdWdoLiBCdWlsZCB0aGVzZSB3aXRoIGNsYW5nIG9ubHkuCiYjNDM7ICovCiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19fKQomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9wYWlyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpsbzsKJiM0MzsJdm9pZCBfX2FyZW5hICpoaTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwOwomIzQzOwlfX3U2NCB4OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFyZW5hX2FycmF5IHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwWzJdOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFyZW5hX3NpbmdsZSB7CiYjNDM7CXZvaWQgX19hcmVuYSAqcDsKJiM0Mzt9OwomIzQzOwomIzQzO3VuaW9uIGFyZW5hX3VwYWlyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwOwomIzQzOwlfX3U2NCBoYWx2ZXNbMl07CiYjNDM7fTsKJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9wYWlyKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3BhaXJdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9wYWlyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9hbmRfc2NhbGFyKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXJdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9hcnJheSBnbG9iYWxfcmV0X2FyZW5hX2FycmF5KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FycmF5KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FycmF5XTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfYXJyYXkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfc2luZ2xlKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZV07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19uYWtlZCB1bmlvbiBhcmVuYV91cGFpciBnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3VuaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfdW5pb24pCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMKaW5kZXggZDZiNDIyYWU5Nzg0Yi4uZTljODJkZjhlZmIyNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jCkBAIC0xOCw2ICYjNDM7MTgsOCBAQCB2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZCkKIAk6ICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9pMTI4KSwKIAkgICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwpLAogCSAgJiMzNDtyJiMzNDsoJmFtcDticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIpLAomIzQzOwkgICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKSwKJiM0MzsJICAmIzM0O3ImIzM0OygmYW1wO2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApLAogCSAgJiMzNDtyJiMzNDsoJmFtcDticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paSksCiAJICAmIzM0O3ImIzM0OygmYW1wO2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZykpOwogfQpAQCAtNzEsNyAmIzQzOzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpCiAKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAotX19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWVtYmVyICYjMzk7cCYjMzk7IGhhcyB0eXBlIFBUUiYjMzQ7KQogX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoCkBAIC04NCw2ICYjNDM7ODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKQogCTogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnMmIzM0OykKJiM0MztfX21zZygmIzM0O21lbWJlciAmIzM5O2luLnAmIzM5OyBoYXMgdHlwZSBQVFImIzM0OykKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX25lc3RlZF9wdHJfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZCYjMzQ7KQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfdG9vX2RlZXBfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcF07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbShicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjIgIXJlYWRfb2smIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2QKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jCkBAIC0wLDAgJiM0MzsxLDEyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSAmYW1wOyZhbXA7IF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAyMwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmCiYjNDM7ICogcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVyIGRvaW5nIGl0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpCiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqYSwgKmI7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHI7CiYjNDM7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwkvKiBCb3RoIGhhbHZlcyBjb21lIGJhY2sgaW4gUjA6UjIsIHBvaW50aW5nIGF0IHBhZ2UgYW5kIHBhZ2UgJiM0MzsgNC4gKi8KJiM0MzsJciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKCh1NjQpcGFnZSk7CiYjNDM7CWlmICghci5hIHx8ICFyLmIpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJYSA9IGFyZW5hX3B0cihyLmEpOwomIzQzOwliID0gYXJlbmFfcHRyKHIuYik7CiYjNDM7CSphID0gMTsKJiM0MzsJKmIgPSAyOwomIzQzOwlpZiAoKmEgIT0gMSkKJiM0MzsJCXJldHVybiAzOwomIzQzOwlpZiAoKmIgIT0gMikKJiM0MzsJCXJldHVybiA0OwomIzQzOwomIzQzOwkvKiBUaGUgaGFsdmVzIGFyZSB0aGUgZmlyc3QgdHdvIHNsb3RzIG9mIHRoZSBwYWdlIHRoZSBwcm9ncmFtIGFsbG9jYXRlZC4gKi8KJiM0MzsJcGFnZVswXSA9IDc7CiYjNDM7CWlmICgqYSAhPSA3KQomIzQzOwkJcmV0dXJuIDU7CiYjNDM7CXBhZ2VbMV0gPSA5OwomIzQzOwlpZiAoKmIgIT0gOSkKJiM0MzsJCXJldHVybiA2OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV9taXhlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCByOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqcDsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CS8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqLwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoKHU2NClwYWdlKTsKJiM0MzsJaWYgKCFyLnApCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJaWYgKHIudGFnICE9IDB4YmVlZikKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwlwID0gYXJlbmFfcHRyKHIucCk7CiYjNDM7CSpwID0gMzsKJiM0MzsJaWYgKCpwICE9IDMpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzJiMzNDspCiYjNDM7X19tc2coJiMzNDttZW1iZXIgJiMzOTtiJiMzOTsgaGFzIHR5cGUgUFRSJiMzNDspCiYjNDM7aW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfdW50YWdnZWRfZmFpbCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByOwomIzQzOwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQoMCk7CiYjNDM7CiYjNDM7CXJldHVybiByLmEgPT0gci5iOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjQKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWVtYmVyICYjMzk7YiYjMzk7IGhhcyB0eXBlIFBUUiYjMzQ7KQomIzQzO2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByOwomIzQzOwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24oMCk7CiYjNDM7CiYjNDM7CXJldHVybiByLmEgPT0gci5iOwomIzQzO30KJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0JiMzNDspCiYjNDM7X19za2lwKCYjMzQ7bmVlZHMgTExWTSAyMyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBkdW1teV90ZXN0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jCmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMKQEAgLTYwLDcgJiM0Mzs2MCw3IEBAIF9fbm9pbmxpbmUgaW50IGV4Y2VwdGlvbl9jYl9va19hcmdfc21hbGwoaW50IGEpCiAKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19leGNlcHRpb25fY2IoZXhjZXB0aW9uX2NiX2JhZF9yZXRfdHlwZTEpCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLiYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O09ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnMmIzM0OykKIGludCByZWplY3RfZXhjZXB0aW9uX2NiX3R5cGVfMShzdHJ1Y3QgX19za19idWZmICpjdHgpCiB7CiAJYnBmX3Rocm93KDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwppbmRleCA4MTVmMzQyZWI0YjA1Li42NzJhM2FhZGQ5Y2IyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwpAQCAtNzM0LDQgJiM0Mzs3MzQsNTIgQEAgaW50IGNoZWNrX2FyZW5hX2FyZ19yZXQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSAmYW1wOyZhbXA7IF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAyMwomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9wYWdlX3BhaXIgewomIzQzOwl1MzIgX19hcmVuYSAqZmlyc3Q7CiYjNDM7CXUzMiBfX2FyZW5hICpzZWNvbmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztfX3dlYWsgc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBzcGxpdF9hcmVuYV9wYWdlKHUzMiBfX2FyZW5hICpwYWdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBwYWlyOwomIzQzOwomIzQzOwlwYWlyLmZpcnN0ID0gcGFnZTsKJiM0MzsJcGFpci5zZWNvbmQgPSBwYWdlICYjNDM7IDE7CiYjNDM7CiYjNDM7CXJldHVybiBwYWlyOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7CiYjNDM7CXN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgcGFpcjsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXBhaXIgPSBzcGxpdF9hcmVuYV9wYWdlKHBhZ2UpOwomIzQzOwlpZiAoIXBhaXIuZmlyc3QgfHwgIXBhaXIuc2Vjb25kKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CS8qIEJvdGggaGFsdmVzIG9mIHRoZSBwYWlyIG11c3Qgc3RpbGwgYmUgdXNhYmxlIGFzIGFyZW5hIHBvaW50ZXJzLiAqLwomIzQzOwlmaXJzdCA9IHBhaXIuZmlyc3Q7CiYjNDM7CXNlY29uZCA9IHBhaXIuc2Vjb25kOwomIzQzOwkqZmlyc3QgPSAxOwomIzQzOwkqc2Vjb25kID0gMjsKJiM0MzsJaWYgKCpmaXJzdCAhPSAxKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWlmICgqc2Vjb25kICE9IDIpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggODUwY2Y0ZjgzMGM0OC4uMGVmMmNlODc1ZDcxZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC05ODEsNiAmIzQzOzk4MSw0OCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKHU2NCB0YWcpCiAJcmV0dXJuIHI7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSh1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9ICh2b2lkICopKGFkZHIgJiM0MzsgNCkgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgciA9IHsgLnAgPSAodm9pZCAqKWFkZHIsIC50YWcgPSAweGJlZWYgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gTlVMTCB9OwomIzQzOwomIzQzOwlyZXR1cm4gcjsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbih1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CXVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gciA9IHsgLmEgPSAodm9pZCAqKWFkZHIgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQodTY0IHRhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCByID0geyAuaW4gPSB7IC5wID0gTlVMTCB9LCAudGFnID0gdGFnIH07CiYjNDM7CiYjNDM7CXJldHVybiByOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXAodTY0IHYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHIgPSB7IC5sMSA9IHsgLmwyID0geyAubDMgPSB7IC5sNCA9IHsgLnYgPSB2IH0gfSB9IH0gfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwogX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKQogewogCXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2lpIHIgPSB7IC5hID0gYSwgLmIgPSBiIH07CkBAIC0xNTM5LDYgJiM0MzsxNTgxLDEyIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X2kxMjgpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcikKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9mYXN0Y2FsbCwgS0ZfRkFTVENBTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbikKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKQogI2VuZGlmCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKaW5kZXggNjVlNjkzYWRhNzM2NC4uYTJlOWU5ZjMxODRlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCkBAIC0yNiw2ICYjNDM7MjYsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgewogfTsKICNlbmRpZgogCiYjNDM7I2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpCiYjNDM7I2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoJiMzNDthcmVuYSYjMzQ7KSkpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIF9fYXJlbmFfdGFnCiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgYnBmX2l0ZXJfdGVzdG1vZF9zZXE7CiAKIHN0cnVjdCBwcm9nX3Rlc3RfcGFzczEgewpAQCAtNzAsNiAmIzQzOzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7CS8qIDE2IGJ5dGVzOiBjb250YWlucyBhIHBvaW50ZXIgKi8KIAlfX3U2NCB0YWc7CiB9OwogCiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgewkvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovCiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmE7CiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCB7CS8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqLwomIzQzOwl2b2lkIF9fYXJlbmFfdGFnICpwOwomIzQzOwlfX3U2NCB0YWc7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCB7CS8qIDE2IGJ5dGVzOiAmIzM5O2ImIzM5OyBsYWNrcyB0aGUgYXJlbmEgdGFnICovCiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmE7CiYjNDM7CXZvaWQgKmI7CiYjNDM7fTsKJiM0MzsKJiM0Mzt1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHsJLyogOCBieXRlczogJiMzOTtiJiMzOTsgbGFja3MgdGhlIGFyZW5hIHRhZyAqLwomIzQzOwl2b2lkIF9fYXJlbmFfdGFnICphOwomIzQzOwl2b2lkICpiOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHsJLyogMTYgYnl0ZXM6IHRoZSBwb2ludGVyIGhpZGVzIG9uZSBsZXZlbCBkb3duICovCiYjNDM7CXN0cnVjdCB7CiYjNDM7CQl2b2lkICpwOwomIzQzOwl9IGluOwomIzQzOwlfX3U2NCB0YWc7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHsJLyogOCBieXRlcywgYnV0IG5lc3RlZCBwYXN0IHRoZSA0LWxldmVsIHdhbGsgbGltaXQgKi8KJiM0MzsJc3RydWN0IHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJc3RydWN0IHsKJiM0MzsJCQkJc3RydWN0IHsKJiM0MzsJCQkJCV9fdTY0IHY7CiYjNDM7CQkJCX0gbDQ7CiYjNDM7CQkJfSBsMzsKJiM0MzsJCX0gbDI7CiYjNDM7CX0gbDE7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyB7CS8qIDI0IGJ5dGVzOiB0b28gbGFyZ2UgZm9yIFIwOlIyICovCiAJX191NjQgYTsKIAlfX3U2NCBiOwpAQCAtMTU5LDYgJiM0MzsyMDQsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wYWlyKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3BhaXIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwoX191NjQgYSwgX191NjQgYikgX19rc3ltOwogc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKSBfX2tzeW07CiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKF9fdTY0IHRhZykgX19rc3ltOwomIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltOwomIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKF9fdTY0IGFkZHIpIF9fa3N5bTsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07CiYjNDM7dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKF9fdTY0IHYpIF9fa3N5bTsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcodm9pZCkgX19rc3ltOwogX191NjQgYnBmX2tmdW5jX2NhbGxfc3RhY2tfYXJnKF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsCiAJCQkgICAgICAgX191NjQgZSwgX191NjQgZiwgX191NjQgZywgX191NjQgaCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTMyCgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDExOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFZlcmlmaWVyIFBhdGNoIEFuYWx5c2lzOiBLTVNBTiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcGVybWl0IGtmdW5jcyBhbmQgc3VicHJvZ3JhbXMgdG8gcmV0dXJuIHN0cnVjdHMgYW5kIHVuaW9ucyBieSB2YWx1ZSwgZXZlbiBpZiB0aG9zZSBzdHJ1Y3RzIGNvbnRhaW4gJiMzNDthcmVuYSYjMzQ7IHBvaW50ZXJzLCB3aGljaCBpcyBhIGRlcGFydHVyZSBmcm9tIHByZXZpb3VzIHJlc3RyaWN0aW9ucy4gSXQgc2VlbXMgdGhlIG1haW4gY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBgYnRmX21lbWJlcl9raW5kYCwgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgLCBhbmQgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGFuZCBhZGp1c3RtZW50cyB0byBgbWFya19rZnVuY19yZXRfcmVnc2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXNzZW50aWFsbHksIHRoZSBjb3JlIGxvZ2ljIGlzIHN0aWxsIGFib3V0IHRoZSAqdmVyaWZpZXIqIC0gaXQmIzM5O3MgYSB0eXBlIGNoZWNrZXIsIG5vdCBhIG1lY2hhbmlzbSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGF0YSB0cmFuc2ZlciBpdHNlbGYuIFRoZSB2ZXJpZmllciBmbGFncyB0aGUgcmV0dXJuIHJlZ2lzdGVycyBhcyB1bmtub3duLCBhbmQgdGhlIGtlcm5lbCBmdW5jdGlvbiBzdXBwbGllcyB0aGUgZGF0YS4gVGhlc2UgdmFsdWVzIHJlc2lkZSB3aXRoaW4gdGhlIEJQRiByZWdpc3RlcnMgdGhlbXNlbHZlcy4gVGh1cywgaXQmIzM5O3MgYWJvdXQgY2hlY2tpbmcgcmV0dXJuIHZhbHVlIHR5cGVzLCBub3QgbmV3IG1lbW9yeSBleHBvc3VyZSB0byB1c2VyIHNwYWNlIGRpcmVjdGx5IGZyb20gdGhlIHZlcmlmaWVyIGNoYW5nZS4KClNvLCBjb3VsZCB1bmluaXRpYWxpemVkIG1lbW9yeSAqZnJvbSBhIGtmdW5jKiBiZSBleHBvc2VkPyBZZXMsIHBvdGVudGlhbGx5LCBpZiBhIGtmdW5jIHJldHVybnMgdW5pbml0aWFsaXplZCBkYXRhLiBIb3dldmVyLCB0aGUgZXhpc3RpbmcgS01TQU4gc2hvdWxkIGFscmVhZHkgY2F0Y2ggdGhpcyB3aGVuIHRoZSBCUEYgcHJvZ3JhbSBhdHRlbXB0cyB0byByZWFkIHN1Y2ggdmFsdWVzLCBvciB3aGVuIHRoZSBrZnVuYyBpdHNlbGYgcmV0dXJucyBpdC4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgbmV3IGtmdW5jcy4gVGhlIGFkZGVkIHRlc3QgY2FzZXMgYXJlIGluaXRpYWxpemVkIGNvcnJlY3RseS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGBtYXJrX2tmdW5jX3JldF9yZWdzYC4gQWgsIGl0IGp1c3QgaGFuZGxlcyB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyEgSXQgbWFya3MgdGhvc2UgcmVnaXN0ZXJzIGFzIGNvbnRhaW5pbmcgJiMzNDt1bmtub3duJiMzNDsgdmFsdWVzLCBidXQgbm90aGluZyBtb3JlLCBjb25maXJtaW5nIHRoYXQgdGhlIHZhbHVlcyBhcmUgYmVpbmcgZ2VuZXJhdGVkIGJ5IHRoZSBrZnVuYyBpdHNlbGYuIFRoaXMgaXMgY3JpdGljYWw6IHRoZSB2ZXJpZmllciBpc24mIzM5O3QgY3JlYXRpbmcgb3IgaW5pdGlhbGl6aW5nIG1lbW9yeSBoZXJlLiBUaGUgYHByZXBhcmVfZnVuY19leGl0YCBwYXJ0IGlzIHNpbXBseSBjb3B5aW5nIHJlZ2lzdGVycywgbm90aGluZyBuZXcuCgpGcm9tIG15IHVuZGVyc3RhbmRpbmcsIHRoaXMgaXMgcHVyZWx5IHZlcmlmaWVyIGxvZ2ljLiBJdCYjMzk7cyBhYm91dCBzdGF0aWMgYW5hbHlzaXMsIG5vdCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGtmdW5jcyBhcmUgcmVzcG9uc2libGUgZm9yIHJldHVybmluZyBpbml0aWFsaXplZCBkYXRhLiBUaHVzLCBpZiBhIGtmdW5jICpkaWQqIHJldHVybiB1bmluaXRpYWxpemVkIGRhdGEsIHRoYXQmIzM5O3MgYSBidWcgKndpdGhpbiB0aGUga2Z1bmMqLCBub3QgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIHBhdGNoLCBhbmQgZXhpc3RpbmcgS01TQU4vS0FTQU4gd291bGQgYWRkcmVzcyB0aGlzLiBJdCYjMzk7cyBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4KClJldmlld2luZyBLTVNBTiYjMzk7cyBjcml0aWNhbCBzY2VuYXJpb3Mg4oCTIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgZmllbGRzIG1heSBiZSB1bmluaXRpYWxpemVkLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgYnVmZmVyIGFjY2VzcyB3aXRoIGluY29ycmVjdCBib3VuZHMgY2hlY2tzIOKAkyBub25lIG9mIHRoZXNlIGFwcGx5IHRvIHRoZSBjb3JlIHZlcmlmaWVyIGNoYW5nZXMuIFRoZSB0ZXN0IGNhc2VzIHRoZW1zZWx2ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjaGFuZ2VzIGFyZSBzb2xlbHkgaW4gdGhlIHR5cGUtY2hlY2tpbmcgYW5kIHJlZ2lzdGVyIHN0YXRlLXRyYWNraW5nIGxvZ2ljIG9mIHRoZSB2ZXJpZmllci4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIG5vdGhpbmcgdGhhdCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGJleW9uZCB3aGF0JiMzOTtzIGFscmVhZHkgY292ZXJlZCBieSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHRvb2xzLiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGtmdW5jcyBhbmQgc3VicHJvZ3JhbXMgdG8gcmV0dXJuIHN0cnVjdHMvdW5pb25zIGNvbnRhaW5pbmcgYXJlbmEgcG9pbnRlcnMgYnkgdmFsdWUuIEl0IHVwZGF0ZXMgdGhlIHZlcmlmaWVyJiMzOTtzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMgcGhhc2Ugb2YgQlBGIHByb2dyYW1zLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoZSB2ZXJpZmllci4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cga2Z1bmNzIGFuZCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cy91bmlvbnMgY29udGFpbmluZyBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4gSXQgdXBkYXRlcyB0aGUgdmVyaWZpZXImIzM5O3MgdHlwZSBjaGVja2luZyBsb2dpYyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIHN0YXRpYyBhbmFseXNpcyBwaGFzZSBvZiBCUEYgcHJvZ3JhbXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlIHZlcmlmaWVyLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MzozNS4yMTYyMTExMDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NTc3MTU2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZlwiLFxuICAgIFwiYnRmX3R5cGVfaXNfYXJlbmFfcHRyXCIsXG4gICAgXCJidGZfcHJlcGFyZV9mdW5jX2FyZ3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cga2Z1bmNzIGFuZCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cy91bmlvbnMgY29udGFpbmluZyBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4gSXQgdXBkYXRlcyB0aGUgdmVyaWZpZXIncyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGUgdmVyaWZpZXIuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyBpZiB0aGV5IGFyZSBjb21wb3NlZCBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyAocG9pbnRlcnMgd2l0aCB0aGUgYGJ0Zl90eXBlX3RhZyhcXFwiYXJlbmFcXFwiKWAgYXR0cmlidXRlKS4gUHJldmlvdXNseSwgb25seSBzY2FsYXJzIHdlcmUgYWxsb3dlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2ZXJpZmllcidzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIChoYW5kbGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCBhcmVuYSBwb2ludGVycykuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBzdWNoIGtmdW5jcyBvciBzdWJwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDM6MzUuMjE2MjE4MTA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxMzk1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZjdlOGE4YTk1MDFlNWVhM2JjYTliOGUxMjJmZGM0ZWNjNTQ1ZTYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDA2OjQzOjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuaW5kZXggODlkZWE2YjBiMDI0MS4uOTZiZjYzZDM0NDMyMiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxcbkBAIC01ODEsMjAgKzU4MSwyNyBAQCBhZ2FpbnN0IHRoZSBhcmVuYS4gTGFyZ2VyIGFjY2Vzc2VzIG11c3QgdmVyaWZ5IHRoZSByYW5nZSBleHBsaWNpdGx5LlxcbiBBIGtmdW5jIG1heSByZXR1cm4gYSBzY2FsYXIsIGEgcG9pbnRlciwgb3IgYSBzbWFsbCBzdHJ1Y3Qgb3IgdW5pb24gYnlcXG4gdmFsdWUuIEEgc2NhbGFyIG9yIHBvaW50ZXIgb2YgdXAgdG8gOCBieXRlcyBpcyByZXR1cm5lZCBpbiBSMCwgYXMgdXN1YWwuXFxuIFxcbi1BIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFyc1xcbi0ocmVjdXJzaXZlbHkpLCB3aGVyZSBhIHNjYWxhciBpcyBhbiBpbnRlZ2VyIG9yIGFuIGVudW07IGFycmF5cyBvZiBzY2FsYXJzIGFyZVxcbi1hbGxvd2VkIGFzIG1lbWJlcnMuIEl0cyBieXRlcyBhcmUgaGFuZGVkIGJhY2sgdG8gdGhlIHByb2dyYW0gYXMgdGhlIHJhd1xcbi1jb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyXFxuLWFuZCBlc2NhcGUgdGhlIHZlcmlmaWVyJ3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIEEgc3RydWN0XFxuLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXNcXG4tb25lIHdpdGggYSBmbG9hdGluZy1wb2ludCBtZW1iZXIsIHdoaWNoIHRoZSBBQkkgbWF5IG5vdCByZXR1cm4gaW4gUjA6UjIgYXRcXG4tYWxsLlxcbitBIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycyBhbmQgYXJlbmFcXG4rcG9pbnRlcnMgKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtIGFuZCBhbiBhcmVuYVxcbitwb2ludGVyIGlzIG9uZSBjYXJyeWluZyB0aGUgYGBidGZfdHlwZV90YWcoXFxcImFyZW5hXFxcIilgYCBhdHRyaWJ1dGU7IGFycmF5cyBvZlxcbitlaXRoZXIgYXJlIGFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGVcXG4rcmF3IGNvbnRlbnRzIG9mIFIwIChhbmQgUjIpLCBzbyBhIG1lbWJlciBvZiBhbnkgb3RoZXIgcG9pbnRlciB0eXBlIHdvdWxkIGJlXFxuK2xhdW5kZXJlZCBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgdGhlIHZlcmlmaWVyJ3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZFxcbityZWZlcmVuY2UgdHJhY2tpbmcuIEEgc3RydWN0IG9yIHVuaW9uIHdpdGggc3VjaCBhIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWRcXG4rYXQgbG9hZCB0aW1lLCBhbmQgc28gaXMgb25lIHdpdGggYSBmbG9hdGluZy1wb2ludCBtZW1iZXIsIHdoaWNoIHRoZSBBQkkgbWF5IG5vdFxcbityZXR1cm4gaW4gUjA6UjIgYXQgYWxsLlxcbitcXG4rQW4gYXJlbmEgcG9pbnRlciBtZW1iZXIgaXMgaGFuZGVkIGJhY2sgYXMgYSBzY2FsYXIgdG9vLCBidXQgbm90aGluZyBpcyBsb3N0IGJ5XFxuK3RoYXQuIFRoZSBwcm9ncmFtIG11c3QgYGBjYXN0X2tlcm4oKWBgIHRoZSB2YWx1ZSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQsIGFuZCB0aGVcXG4rdmVyaWZpZXIgYWxsb3dzIHRoYXQgY2FzdCBvbiBhbnkgc2NhbGFyLCBzbyBhIGxhdW5kZXJlZCBhcmVuYSBhZGRyZXNzIGdpdmVzIHRoZVxcbitwcm9ncmFtIG5vIHJlYWNoIGl0IGRpZCBub3QgYWxyZWFkeSBoYXZlLiBUaGUgcmVzdWx0IGlzIGNvbmZpbmVkIHRvIHRoZVxcbitwcm9ncmFtJ3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuXFxuIFxcbiBBIGtmdW5jIG1heSBhbHNvIHJldHVybiBhIHZhbHVlIGxhcmdlciB0aGFuIDggYnl0ZXMgYW5kIHVwIHRvIDE2IGJ5dGVzIC0tIGFcXG4tc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZFxcbi1pbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTSB1c2VzIGZvciB0aGUgQlBGXFxuLXRhcmdldDogdGhlIGZpcnN0IDggYnl0ZXMgaW4gUjAgYW5kIHRoZSBzZWNvbmQgOCBieXRlcyBpbiBSMi4gQSBzdHJ1Y3Qgb3JcXG4tdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLlxcbitzdHJ1Y3Qgb3IgdW5pb24gb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMsIG9yIGFuIGBgX19pbnQxMjhgYC4gU3VjaCBhXFxuK3ZhbHVlIGlzIHJldHVybmVkIGluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNXFxuK3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLlxcbitBIHN0cnVjdCBvciB1bmlvbiBvZiA4IGJ5dGVzIG9yIGxlc3MgaXMgcmV0dXJuZWQgaW4gUjAgYWxvbmUuXFxuIFxcbiA6OlxcbiBcXG5AQCAtNjIwLDEwICs2MjcsMTAgQEAgdXNlZCB3aGVuIHRoZSBwcm9ncmFtIGlzIEpJVGVkLCBzaW5jZSB0aGUgaW50ZXJwcmV0ZXIgcHJvcGFnYXRlcyBvbmx5IFIwIG91dCBvZlxcbiBhIHN1YnByb2dyYW06IHdpdGhvdXQgYSBKSVQgdGhlIHJldHVybiB2YWx1ZSBzdGF5cyBpbiBSMCBhbG9uZSwgYW5kIGEgY2FsbGVyXFxuIHJlYWRpbmcgUjIgaXMgcmVqZWN0ZWQgZm9yIHJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCByZWdpc3Rlci4gQSBnbG9iYWxcXG4gc3VicHJvZ3JhbSBpcyB2ZXJpZmllZCBpbiBpc29sYXRpb24sIHNvIGl0cyBieS12YWx1ZSBzdHJ1Y3Qgb3IgdW5pb24gcmV0dXJuIGlzXFxuLXJlc3RyaWN0ZWQgdG8gc2NhbGFycyBqdXN0IGxpa2UgYSBrZnVuYydzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkXFxuLWlubGluZSBhbmQgaGFzIG5vIHN1Y2ggcmVzdHJpY3Rpb24uIFRoZSBtYWluIHByb2dyYW0gaXMgbm90IGNvdmVyZWQ6IGl0cyByZXR1cm5cXG4tdmFsdWUgaXMgdGhlIHByb2dyYW0ncyBleGl0IGNvZGUsIHJlYWQgb3V0IG9mIFIwIGFsb25lLCBzbyBhIGRlY2xhcmVkIHVwcGVyXFxuLWhhbGYgaXMgbmV2ZXIgbG9va2VkIGF0LlxcbityZXN0cmljdGVkIHRvIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGp1c3QgbGlrZSBhIGtmdW5jJ3M7IGEgc3RhdGljXFxuK3N1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpc1xcbitub3QgY292ZXJlZDogaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgcHJvZ3JhbSdzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjBcXG4rYWxvbmUsIHNvIGEgZGVjbGFyZWQgdXBwZXIgaGFsZiBpcyBuZXZlciBsb29rZWQgYXQuXFxuIFxcbiBBIGdsb2JhbCBzdWJwcm9ncmFtIG11c3QgbGVhdmUgYSBzY2FsYXIgaW4gKmV2ZXJ5KiByZWdpc3RlciBvZiB0aGUgcGFpciwgc29cXG4gYm90aCBoYWx2ZXMgb2YgdGhlIHJldHVybmVkIHZhbHVlIGhhdmUgdG8gYmUgYXNzaWduZWQuIExlYXZpbmcgdGhlIHVwcGVyIGhhbGZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5pbmRleCAwMDRiMDY3ODU1MjFjLi5hZTlmNjA2NTM5ZjQxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTE0ODgsOCArMTQ4OCwxNSBAQCBpbnQgYnBmX2ptcF9vZmZzZXQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcXG4gc3RydWN0IGJwZl9pYXJyYXkgKmJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCk7XFxuIHZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKTtcXG4gYm9vbCBicGZfc3VicHJvZ19pc19nbG9iYWwoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpO1xcbi1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKTtcXG4rXFxuKy8qIEtpbmRzIG9mIG1lbWJlciBhIGJ5LXZhbHVlIHN0cnVjdCBvciB1bmlvbiBtYXkgYmUgY29tcG9zZWQgb2YuICovXFxuK2VudW0gYnRmX21lbWJlcl9raW5kIHtcXG4rXFx0QlRGX01FTUJFUl9TQ0FMQVJcXHQ9IEJJVCgwKSwgLyogYW4gaW50IG9yIGFuIGVudW0gKi9cXG4rXFx0QlRGX01FTUJFUl9BUkVOQV9QVFJcXHQ9IEJJVCgxKSwgLyogYSBwb2ludGVyIGNhcnJ5aW5nIHRoZSBcXFwiYXJlbmFcXFwiIHR5cGUgdGFnICovXFxuK307XFxuK1xcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzKTtcXG4gXFxuIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpO1xcbiBib29sIGJwZl9pc190aHJvd19rZnVuYyhzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J0Zi5oIGIvaW5jbHVkZS9saW51eC9idGYuaFxcbmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9idGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnRmLmhcXG5AQCAtMjM1LDYgKzIzNSw3IEBAIHN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlXFxuIFxcdFxcdFxcdFxcdCAgICB1MzIgZmllbGRfbWFzaywgdTMyIHZhbHVlX3NpemUpO1xcbiBpbnQgYnRmX2NoZWNrX2FuZF9maXh1cF9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjKTtcXG4gYm9vbCBidGZfdHlwZV9pc192b2lkKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7XFxuK2Jvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTtcXG4gczMyIGJ0Zl9maW5kX2J5X25hbWVfa2luZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGtpbmQpO1xcbiBzMzIgYnBmX2ZpbmRfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBraW5kLCBzdHJ1Y3QgYnRmICoqYnRmX3ApO1xcbiBzdHJ1Y3QgYnRmICpidGZfZ2V0X21vZHVsZV9idGYoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kdWxlKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcXG5pbmRleCA5MWI4Y2U3N2Y2OTlhLi5mNmQ4MmE4ZmQ2MTdiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXFxuQEAgLTM1MjMsNiArMzUyMywyMiBAQCBzdGF0aWMgaW50IGJ0Zl90eXBlX3RhZ193YWxrKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2Jvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxcbit7XFxuK1xcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtXFx1MDAzZXR5cGUpOyBidGZfdHlwZV9pc19tb2RpZmllcih0KTtcXG4rXFx0ICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LVxcdTAwM2V0eXBlKSkge1xcbitcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3R5cGVfdGFnKHQpIHx8IGJ0Zl90eXBlX2tmbGFnKHQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCFzdHJjbXAoX19idGZfbmFtZV9ieV9vZmZzZXQoYnRmLCB0LVxcdTAwM2VuYW1lX29mZiksIFxcXCJhcmVuYVxcXCIpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGJ0Zl9maW5kX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuIFxcdFxcdFxcdCB1MzIgb2ZmLCBpbnQgc3osIHN0cnVjdCBidGZfZmllbGRfaW5mbyAqaW5mbywgdTMyIGZpZWxkX21hc2spXFxuIHtcXG5AQCAtNzkyNyw1MSArNzk0MywxOSBAQCBzdGF0aWMgaW50IGJ0Zl9zY2FuX2RlY2xfdGFncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCxcXG4tXFx0XFx0XFx0ICAgICAgdTMyICp0YWdzKVxcbitzdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxcbiB7XFxuLVxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVfdGFnX21hdGNoIGZ1bmNfdHlwZV90YWdzW10gPSB7XFxuLVxcdFxcdHsgXFxcImFyZW5hXFxcIiwgQVJHX1RBR19BUkVOQSB9LFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgYnRmX3R5cGVfdGFnX3dhbGtfY3R4IGN0eDtcXG4tXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4gXFx0LyogRmluZCB0aGUgZmlyc3QgcG9pbnRlciB0eXBlIGluIHRoZSBjaGFpbi4gKi9cXG4tXFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcyxcXG4tXFx0ICogd2hpY2ggbmVpdGhlciBMTFZNIG5vciBHQ0Mgc3VwcG9ydCBhbnl3YXkuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRjdHgudCA9IHQ7XFxuLVxcdGVyciA9IGJ0Zl90eXBlX3RhZ193YWxrKGJ0ZiwgXFx1MDAyNmN0eCwgZnVuY190eXBlX3RhZ3MsXFxuLVxcdFxcdFxcdFxcdEFSUkFZX1NJWkUoZnVuY190eXBlX3RhZ3MpKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRicGZfbG9nKFxcdTAwMjZlbnYtXFx1MDAzZWxvZyxcXG4tXFx0XFx0XFx0XFxcImZ1bmN0aW9uIHNpZ25hdHVyZSBtZW1iZXIgaGFzIG11bHRpcGxlIHR5cGUgdGFnc1xcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4tXFx0KnRhZ3MgfD0gY3R4LnJlcztcXG4tXFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpXFxuK1xcdFxcdCp0YWdzIHw9IEFSR19UQUdfQVJFTkE7XFxuIH1cXG4gXFxuIC8qIENoZWNrIHdoZXRoZXIgdGhlIHR5cGUgaXMgYSB2YWxpZCByZXR1cm4gdHlwZS4gKi9cXG4gc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCBzdWJwcm9nLCBib29sIGlzX2dsb2JhbClcXG4ge1xcbi1cXHR1MzIgdGFncyA9IDA7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRlcnIgPSBidGZfc2Nhbl90eXBlX3RhZ3MoZW52LCBidGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZ0YWdzKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFxuIFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbiBcXG4gXFx0LypcXG5AQCAtNzk3OSw3ICs3OTYzLDcgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRcXG4gXFx0ICogR2VuZXJhbCBhcmVuYSB2YXJpYWJsZXMgYXJlIG5vdCBhbGxvd2VkLCBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byByZXR1cm4gYnkgdmFsdWVcXG4gXFx0ICogYSB2YXJpYWJsZSB0aGF0J3Mgb24gdGhlIGhlYXAgaW4gdGhlIGZpcnN0IHBsYWNlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHN1YnByb2cgXFx1MDAyNlxcdTAwMjYgKHRhZ3MgXFx1MDAyNiBBUkdfVEFHX0FSRU5BKSBcXHUwMDI2XFx1MDAyNiBidGZfdHlwZV9pc19wdHIodCkpXFxuK1xcdGlmIChzdWJwcm9nIFxcdTAwMjZcXHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIFdlIGFsd2F5cyBhY2NlcHQgdm9pZCBvciBzY2FsYXJzLiAqL1xcbkBAIC03OTg5LDEzICs3OTczLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0XFxuIFxcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkgXFx1MDAyNlxcdTAwMjYgdC1cXHUwMDNlc2l6ZSBcXHUwMDNjPSAxNikge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBIGdsb2JhbCBmdW5jdGlvbidzIGNhbGxlciBtb2RlbHMgdGhlIHJldHVybiBhcyBhbiBvcGFxdWVcXG4tXFx0XFx0ICogc2NhbGFyIHBhaXIsIHNvIGl0IG1heSBvbmx5IHJldHVybiBzY2FsYXJzIGJ5IHZhbHVlLiBBIGxvY2FsXFxuLVxcdFxcdCAqIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc28gYSBwb2ludGVyIGZpZWxkIHN0YXlzIHRyYWNrZWRcXG4tXFx0XFx0ICogYW5kIG5lZWRzIG5vIHN1Y2ggcmVzdHJpY3Rpb24uXFxuK1xcdFxcdCAqIHNjYWxhciBwYWlyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGFcXG4rXFx0XFx0ICogc2NhbGFyIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLiBPbmx5XFxuK1xcdFxcdCAqIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGFyZSBhbGxvd2VkOiBhbiBhcmVuYSBwb2ludGVyIGhhc1xcbitcXHRcXHQgKiBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUgb25lXFxuK1xcdFxcdCAqIGZyb20gYW55IHNjYWxhciB3aXRoIGFkZHJfc3BhY2VfY2FzdCgpLCB3aGljaCBjb25maW5lcyB0aGVcXG4rXFx0XFx0ICogcmVzdWx0IHRvIHRoZSBhcmVuYS4gQSBsb2NhbCBmdW5jdGlvbiBpcyB2ZXJpZmllZCBpbmxpbmUsIHNvXFxuK1xcdFxcdCAqIGl0cyBjYWxsZXIgcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXNcXG4rXFx0XFx0ICogZmluZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJvb2wgbG9jYWxfZnVuYyA9IHN1YnByb2cgXFx1MDAyNlxcdTAwMjYgIWlzX2dsb2JhbDtcXG4rXFx0XFx0dTMyIG1lbWJlcl9raW5kcyA9IEJURl9NRU1CRVJfU0NBTEFSO1xcbitcXG4rXFx0XFx0aWYgKHN1YnByb2cpXFxuK1xcdFxcdFxcdG1lbWJlcl9raW5kcyB8PSBCVEZfTUVNQkVSX0FSRU5BX1BUUjtcXG4gXFxuLVxcdFxcdGlmIChsb2NhbF9mdW5jIHx8IGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIHQsIDApKVxcbitcXHRcXHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5AQCAtODA5MSw3ICs4MDg0LDggQEAgaW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4gXFx0XFx0aWYgKGlzX2dsb2JhbCkge1xcbiBcXHRcXHRcXHRicGZfbG9nKGxvZyxcXG4gXFx0XFx0XFx0XFx0XFxcIkdsb2JhbCBmdW5jdGlvbiAlcygpIGhhcyB1bnN1cHBvcnRlZCByZXR1cm4gdHlwZS4gXFxcIlxcbi1cXHRcXHRcXHRcXHRcXFwiT25seSB2b2lkLCBzY2FsYXIsIG9yIGEgc2NhbGFyLW9ubHkgc3RydWN0L3VuaW9uIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCJPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiBcXFwiXFxuK1xcdFxcdFxcdFxcdFxcXCJzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHR0bmFtZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtODEwNiw5ICs4MTAwLDcgQEAgaW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCBcXHUwMDI2dGFncyk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGJ0Zl9zY2FuX3R5cGVfdGFncyhidGYsIGFyZ3NbaV0udHlwZSwgXFx1MDAyNnRhZ3MpO1xcbiBcXG4gXFx0XFx0dCA9IGJ0Zl90eXBlX2J5X2lkKGJ0ZiwgYXJnc1tpXS50eXBlKTtcXG4gXFx0XFx0d2hpbGUgKGJ0Zl90eXBlX2lzX21vZGlmaWVyKHQpKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBlMDM2YWUyMGJmNmI5Li45YTM2ODA4MTM2YzlhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC05OTk1LDkgKzk5OTUsMTQgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKCFyZXR1cm5zX3ZvaWQpIHtcXG4gXFx0XFx0XFx0bnJlZ3MgPSBicGZfcmV0X3JlZ19wYWlyKGVudiwgc3VicHJvZykgPyAyIDogMTtcXG4tXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWdzOyBpKyspXFxuLVxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXFx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcXG4rXFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIGNhbGxlci1cXHUwMDNlcmVncywgcmV0X3JlZ3NbMF0pO1xcbiBcXHRcXHRcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBucmVnczsgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZjYWxsZXItXFx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xcbitcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVxcdTAwM2VyZWdzLCByZXRfcmVnc1tpXSk7XFxuK1xcdFxcdFxcdFxcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoZW52LVxcdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcXG5AQCAtMTA0MDMsMTAgKzEwNDA4LDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4gXFx0XFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlXFxuIFxcdFxcdCAqIHJldHVybiByZWdpc3RlcihzKVxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWdzOyBpKyspXFxuLVxcdFxcdFxcdGNhbGxlci1cXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXFx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dO1xcbi1cXHRcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucmVnczsgaSsrKSB7XFxuK1xcdFxcdFxcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xcbitcXG4rXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tyZWdub10sIFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbcmVnbm9dLFxcbitcXHRcXHRcXHRcXHRcXHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xcbitcXHRcXHRcXHRjYWxsZXItXFx1MDAzZXJlZ3NbcmVnbm9dID0gY2FsbGVlLVxcdTAwM2VyZWdzW3JlZ25vXTtcXG4rXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcXG5AQCAtMTEzNDIsMTUgKzExMzUxLDMzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcbiAvKlxcbiAgKiBNYXJrIHRoZSByZWdpc3RlcihzKSBob2xkaW5nIGEgQHNpemUgYnl0ZSBrZnVuYyByZXR1cm4gdmFsdWUgYXMgdW5rbm93blxcbi0gKiBzY2FsYXJzLiBCb3RoIGhhbHZlcyBvZiBhIHJlZ2lzdGVyIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LlxcbisgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlclxcbisgKiBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS5cXG4rICpcXG4rICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlXFxuKyAqIHRoZSBjYWxsZXItc2F2ZWQgc2NydWIsIHNpbmNlIFIwIGdldHMgbm8gc2NydWIgcmVjb3JkIG9mIGl0cyBvd24gYW5kIHRoYXRcXG4rICogc2NvcGUgaXMgd2hhdCBjYXJyaWVzIGl0cyBwcmUtY2FsbCB2YWx1ZSBpbnRvIHRoZSBoaXN0b3J5LiBBIHNjb3BlIHRyYWNrcyBhXFxuKyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZlxcbisgKiB0aGUgcmV0dXJuIHZhbHVlLiBBIHZhbHVlIHRoYXQgZml0cyBpbiBSMCBsZWF2ZXMgdGhlIGNhbGxlcidzIHNjb3BlIG9wZW4gZm9yXFxuKyAqIHRoZSBjYWxsZXIgdG8gY2xvc2UsIHNvIGEgbGF0ZXIgd3JpdGUgdG8gUjAgc3RpbGwgbGFuZHMgaW4gaXQuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBtYXJrX2tmdW5jX3JldF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSlcXG4rc3RhdGljIHUzMiBtYXJrX2tmdW5jX3JldF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHNpemUpXFxuIHtcXG4gXFx0dTMyIGksIG5yZWdzID0gcmV0X3JlZ3NfY250KHNpemUpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWdzOyBpKyspXFxuK1xcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1swXSk7XFxuK1xcdGlmIChucmVncyA9PSAxKVxcbitcXHRcXHRyZXR1cm4gbnJlZ3M7XFxuK1xcbitcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBucmVnczsgaSsrKSB7XFxuK1xcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW3JldF9yZWdzW2ldXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG4gXFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJldF9yZWdzW2ldKTtcXG4rXFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnJlZ3M7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbkBAIC0xMTYxOSwxMCArMTE2NDYsMzMgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KGNvbnN0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwgdTMyIGFyZ19cXG4gXFx0cmV0dXJuIGFyZ24gXFx1MDAzYz0gYXJnX2lkeDtcXG4gfVxcbiBcXG4tLyogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQgKi9cXG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMpXFxuKyNkZWZpbmUgQlRGX01FTUJFUl9NQVhfREVQVEhcXHQ0XFxuKyNkZWZpbmUgQlRGX01FTUJFUl9QQVRIX0xFTlxcdDY0XFxuK1xcbitzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcltCVEZfTUVNQkVSX01BWF9ERVBUSF07XFxuK1xcdGludCBkZXB0aDtcXG4rXFx0Ym9vbCB0b29fZGVlcDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbitcXHRcXHRcXHRcXHQgICAgdTMyIG1lbWJlcl9raW5kcylcXG4re1xcbitcXHRpZiAoKG1lbWJlcl9raW5kcyBcXHUwMDI2IEJURl9NRU1CRVJfU0NBTEFSKSBcXHUwMDI2XFx1MDAyNiBidGZfdHlwZV9pc19zY2FsYXIodCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoKG1lbWJlcl9raW5kcyBcXHUwMDI2IEJURl9NRU1CRVJfQVJFTkFfUFRSKSBcXHUwMDI2XFx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpblxcbisgKiBAbWVtYmVyX2tpbmRzLCBCVEZfTUVNQkVSX01BWF9ERVBUSCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkLiBBbiBhcnJheVxcbisgKiBtZW1iZXIgY291bnRzIGFzIGl0cyBlbGVtZW50IHR5cGUuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBidGZfc3RydWN0X21lbWJlcl93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzLCBpbnQgcmVjLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoICpwYXRoKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XFxuQEAgLTExNjM2LDI3ICsxMTY4Niw2NSBAQCBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFxuIFxcdFxcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUsIE5VTEwpO1xcbiBcXHRcXHRpZiAoYnRmX3R5cGVfaXNfc3RydWN0KG1lbWJlcl90eXBlKSkge1xcbi1cXHRcXHRcXHRpZiAocmVjIFxcdTAwM2U9IDMpIHtcXG4rXFx0XFx0XFx0aWYgKHJlYyBcXHUwMDNlPSBCVEZfTUVNQkVSX01BWF9ERVBUSCAtIDEpIHtcXG4gXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRpZiAocGF0aClcXG4rXFx0XFx0XFx0XFx0XFx0cGF0aC1cXHUwMDNldG9vX2RlZXAgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICsgMSkpXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0XFx0aWYgKCFidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmVjICsgMSwgcGF0aCkpXFxuK1xcdFxcdFxcdFxcdGdvdG8gYmFkX3BhdGg7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcXG4gXFx0XFx0XFx0YXJyYXkgPSBidGZfYXJyYXkobWVtYmVyX3R5cGUpO1xcbiBcXHRcXHRcXHRpZiAoIWFycmF5LVxcdTAwM2VuZWxlbXMpXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0XFx0XFx0Z290byBiYWRfbWVtYmVyO1xcbiBcXHRcXHRcXHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXFx1MDAzZXR5cGUsIE5VTEwpO1xcbi1cXHRcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihtZW1iZXJfdHlwZSkpXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICghYnRmX21lbWJlcl9raW5kX2FsbG93ZWQoYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzKSlcXG4rXFx0XFx0XFx0Z290byBiYWRfbWVtYmVyO1xcbiBcXHR9XFxuIFxcdHJldHVybiB0cnVlO1xcbitcXG4rYmFkX21lbWJlcjpcXG4rXFx0aWYgKHBhdGgpXFxuK1xcdFxcdHBhdGgtXFx1MDAzZWRlcHRoID0gcmVjICsgMTtcXG4rYmFkX3BhdGg6XFxuK1xcdGlmIChwYXRoIFxcdTAwMjZcXHUwMDI2IHBhdGgtXFx1MDAzZWRlcHRoKVxcbitcXHRcXHRwYXRoLVxcdTAwM2VtZW1iZXJbcmVjXSA9IG1lbWJlcjtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcylcXG4re1xcbitcXHRyZXR1cm4gYnRmX3N0cnVjdF9tZW1iZXJfd2FsayhlbnYsIGJ0ZiwgdCwgbWVtYmVyX2tpbmRzLCAwLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcXG4re1xcbitcXHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidGZfbWVtYmVyX3BhdGhfc3RyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aCxcXG4rXFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxcbit7XFxuK1xcdHNpemVfdCBsZW4gPSAwO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGJ1ZlswXSA9ICdcXFxcMCc7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYXRoLVxcdTAwM2VkZXB0aDsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKm5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCBwYXRoLVxcdTAwM2VtZW1iZXJbaV0tXFx1MDAzZW5hbWVfb2ZmKTtcXG4rXFxuK1xcdFxcdGlmICghbmFtZSB8fCAhbmFtZVswXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBidWZfc3ogLSBsZW4sIFxcXCIlcyVzXFxcIiwgbGVuID8gXFxcIi5cXFwiIDogXFxcIlxcXCIsIG5hbWUpO1xcbitcXHR9XFxuIH1cXG4gXFxuIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcXG5AQCAtMTIwMzksNyArMTIxMjcsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbiBcXHRcXHQgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZyArIDFdKSB8fFxcbiBcXHRcXHQgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcXG4gXFx0XFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcXHUwMDI2XFx1MDAyNiAhYnRmX3R5cGVfaXNfc2NhbGFyKHJlZl90KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVxcdTAwM2VidGYsIHJlZl90LCAwKSkge1xcbitcXHRcXHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVxcdTAwM2VidGYsIHJlZl90KSkge1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvIHZvaWQsIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0xMjA1NSw3ICsxMjE0Myw3IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuIFxcdFxcdCAqIHNjYWxhcnMuIFRoZSBhY2Nlc3Mgc2l6ZSBpcyBkZXJpdmVkIGZyb20gdGhlIHBvaW50ZWQtdG8gQlRGIHR5cGUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcXG4rXFx0XFx0ICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cXHUwMDNlYnRmLCByZWZfdCkpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTMxMTEsNyArMTMxOTksNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcXG4rXFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cXHUwMDNlYnRmLCByZWZfdCkpIHtcXG4gXFx0XFx0XFx0XFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7XFxuIFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7XFxuIFxcbkBAIC0xMzY1Myw3ICsxMzc0MSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3BlY2lhbF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnXFxuIFxcbiBcXHRcXHRzdHJ1Y3RfbWV0YSA9IGJ0Zl9maW5kX3N0cnVjdF9tZXRhKHJldF9idGYsIHJldF9idGZfaWQpO1xcbiBcXHRcXHRpZiAoaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpKSB7XFxuLVxcdFxcdFxcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIHJldF9idGYsIHJldF90LCAwKSkge1xcbitcXHRcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCkpIHtcXG4gXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJicGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0xMzc2Nyw3ICsxMzg1NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXg7XFxuIFxcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcXG4gXFx0aW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDtcXG4tXFx0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZDtcXG4rXFx0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZCwgcmV0X25yZWdzID0gMTtcXG4gXFx0c3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjO1xcbiBcXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcXG4gXFx0aW50IGlkO1xcbkBAIC0xNDAyMSwyNSArMTQxMDksNTkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xcbi1cXHRcXHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldF9ucmVncyA9IG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LVxcdTAwM2VzaXplKTtcXG4gXFx0XFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbiBcXHRcXHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXFxuIFxcdFxcdFxcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xcbiBcXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSkge1xcbitcXHRcXHRzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoIHBhdGggPSB7fTtcXG4rXFx0XFx0Y29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSBcXFwiXFxcIjtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSByZXR1cm5lZCBzdHJ1Y3QgY29tZXMgYmFjayBhcyByYXcgcmVnaXN0ZXIgYml0cyBtb2RlbGVkXFxuLVxcdFxcdCAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBpdCBtdXN0IGNvbnRhaW4gb25seSBzY2FsYXJzOlxcbi1cXHRcXHQgKiBvdGhlcndpc2UgYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyXFxuLVxcdFxcdCAqIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLlxcbitcXHRcXHQgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gYSBwb2ludGVyIG1lbWJlciB3b3VsZCBiZSBsYXVuZGVyZWRcXG4rXFx0XFx0ICogaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cXG4rXFx0XFx0ICogT25seSBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyBhcmUgYWxsb3dlZDogYW4gYXJlbmEgcG9pbnRlclxcbitcXHRcXHQgKiBoYXMgbm8gcHJvdmVuYW5jZSB0byBsb3NlLCBzaW5jZSBhIHByb2dyYW0gbWF5IGFscmVhZHkgZGVyaXZlXFxuK1xcdFxcdCAqIG9uZSBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlXFxuK1xcdFxcdCAqIHJlc3VsdCB0byB0aGUgYXJlbmEuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBkZXNjX2J0ZiwgdCwgMCkpIHtcXG4rXFx0XFx0aWYgKCFidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgZGVzY19idGYsIHQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBCVEZfTUVNQkVSX1NDQUxBUiB8IEJURl9NRU1CRVJfQVJFTkFfUFRSLCAwLCBcXHUwMDI2cGF0aCkpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsXFxuLVxcdFxcdFxcdFxcdFxcXCJrZXJuZWwgZnVuY3Rpb24gJXMgcmV0dXJucyAlcyAlcyB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwia2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXFxuIFxcdFxcdFxcdFxcdGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpKTtcXG4rXFx0XFx0XFx0aWYgKHBhdGgudG9vX2RlZXApIHtcXG4rXFx0XFx0XFx0XFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXFxuK1xcdFxcdFxcdFxcdFxcdGVudiwgXFxcIiBJdCBuZXN0cyBzdHJ1Y3RzIG1vcmUgdGhhbiAlZCBsZXZlbHMgZGVlcC5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRCVEZfTUVNQkVSX01BWF9ERVBUSCk7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAocGF0aC5kZXB0aCkge1xcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqYmFkID0gcGF0aC5tZW1iZXJbcGF0aC5kZXB0aCAtIDFdO1xcbitcXHRcXHRcXHRcXHRjaGFyIGJhZF9uYW1lW0JURl9NRU1CRVJfUEFUSF9MRU5dO1xcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJhZF90eXBlO1xcbitcXG4rXFx0XFx0XFx0XFx0YnRmX21lbWJlcl9wYXRoX3N0cihkZXNjX2J0ZiwgXFx1MDAyNnBhdGgsIGJhZF9uYW1lLCBzaXplb2YoYmFkX25hbWUpKTtcXG4rXFx0XFx0XFx0XFx0YmFkX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgYmFkLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtZW1iZXIgJyVzJyBoYXMgdHlwZSAlc1xcXFxuXFxcIiwgYmFkX25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdGJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpO1xcbitcXHRcXHRcXHRcXHRtZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdChcXG4rXFx0XFx0XFx0XFx0XFx0ZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiIEl0cyBtZW1iZXIgJyVzJyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0YmFkX25hbWUsIGJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKFxcbitcXHRcXHRcXHRcXHRlbnYsIGluc25faWR4LCBcXFwidW5zdXBwb3J0ZWQga2VybmVsIGZ1bmN0aW9uIHJldHVybiB0eXBlXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcIkNhbGwgYSBrZXJuZWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9ubHkgc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiJXMoKSByZXR1cm5zICVzICVzIGJ5IHZhbHVlLiVzIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFxcIk9ubHkga2Z1bmNzIHJldHVybmluZyBzY2FsYXIgdmFsdWVzIG9yIGFyZW5hIHBvaW50ZXJzLCBvciBcXFwiXFxuK1xcdFxcdFxcdFxcdFxcXCJzdHJ1Y3R1cmVzIGNvbXBvc2VkIG9mIHNjYWxhciB2YWx1ZXMgb3IgYXJlbmEgcG9pbnRlcnMgYXJlIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFxcInN1cHBvcnRlZC5cXFwiLFxcbitcXHRcXHRcXHRcXHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcXG4rXFx0XFx0XFx0XFx0YnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LVxcdTAwM2VuYW1lX29mZiksIG1lbWJlcl9ub3RlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXRfbnJlZ3MgPSBtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cXHUwMDNlc2l6ZSk7XFxuIFxcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XFxuIFxcdFxcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZwdHJfdHlwZV9pZCk7XFxuIFxcdFxcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XFxuQEAgLTE0MTcwLDcgKzE0MjkyLDggQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0ICogUmVjb3JkIFIwIGJlZm9yZSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgc25hcHNob3RzIHRoZSBhbHRlcm5hdGVcXG4gXFx0ICogaXRlcmF0b3IgcGF0aCdzIGRpYWdub3N0aWMgcG9zaXRpb24uXFxuIFxcdCAqL1xcbi1cXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdGlmIChyZXRfbnJlZ3MgPT0gMSlcXG4rXFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbiBcXG4gXFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpKSB7XFxuIFxcdFxcdGVyciA9IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoZW52LCBpbnNuX2lkeCwgXFx1MDAyNm1ldGEpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmNcXG5pbmRleCBlMGI5NGVkMTBmOTQxLi4wN2Q5ZDZlMWQ2Yjg4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xcbkBAIC0xLDExICsxLDUzIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9idGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImFnZ3JlZ2F0ZV9yZXRfZnVuYy5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJhZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuc2tlbC5oXFxcIlxcbitcXG4rc3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmLCAqbW9kdWxlX2J0ZiA9IE5VTEw7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcXG4rXFx0Ym9vbCB0YWdnZWQgPSBmYWxzZTtcXG4rXFx0X19zMzIgaWQ7XFxuK1xcbitcXHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbitcXHRpZiAoIXZtbGludXhfYnRmKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtb2R1bGVfYnRmID0gYnRmX19sb2FkX21vZHVsZV9idGYoXFxcImJwZl90ZXN0bW9kXFxcIiwgdm1saW51eF9idGYpO1xcbitcXHRpZiAoIW1vZHVsZV9idGYpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogcHJvZ190ZXN0X3JldF9hcmVuYTo6YSBpcyAndm9pZCBfX2FyZW5hX3RhZyAqJzogUFRSIC1cXHUwMDNlIFRZUEVfVEFHIC1cXHUwMDNlIHZvaWQgKi9cXG4rXFx0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKG1vZHVsZV9idGYsIFxcXCJwcm9nX3Rlc3RfcmV0X2FyZW5hXFxcIiwgQlRGX0tJTkRfU1RSVUNUKTtcXG4rXFx0aWYgKGlkIFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCBidGZfbWVtYmVycyhidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgaWQpKVswXS50eXBlKTtcXG4rXFx0aWYgKCF0IHx8ICFidGZfaXNfcHRyKHQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgdC1cXHUwMDNldHlwZSk7XFxuK1xcdHRhZ2dlZCA9IHQgXFx1MDAyNlxcdTAwMjYgYnRmX2lzX3R5cGVfdGFnKHQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAhc3RyY21wKGJ0Zl9fbmFtZV9ieV9vZmZzZXQobW9kdWxlX2J0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpLCBcXFwiYXJlbmFcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0YnRmX19mcmVlKG1vZHVsZV9idGYpO1xcbitcXHRidGZfX2ZyZWUodm1saW51eF9idGYpO1xcbitcXG4rXFx0cmV0dXJuIHRhZ2dlZDtcXG4rfVxcbiBcXG4gdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZClcXG4ge1xcbiBcXHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTtcXG4gXFx0UlVOX1RFU1RTKGFnZ3JlZ2F0ZV9yZXRfa2Z1bmMpO1xcbitcXG4rXFx0aWYgKHRlc3Rtb2RfaGFzX2FyZW5hX3RhZ2dlZF9tZW1iZXIoKSlcXG4rXFx0XFx0UlVOX1RFU1RTKGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcXG5pbmRleCA2ZjY2ZmM4MjJjZWRlLi5mMDA3N2Q5NTFhMjVkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xcbkBAIC0yLDYgKzIsNyBAQFxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4gXFxuIHR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjggdTEyODtcXG5AQCAtMjM0LDQgKzIzNSwxNDkgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfdW5pb25fcHRyX2ZhaWwodm9pZClcXG4gXFxuICNlbmRpZlxcbiBcXG4rLypcXG4rICogZ2NjIHJldHVybnMgYSBieS12YWx1ZSBzdHJ1Y3QgdGhyb3VnaCBhIGhpZGRlbiBwb2ludGVyLCBhbmQgZW1pdHMgdGhlXFxuKyAqICdyMCA9IHIxJyByZXR1cm5pbmcgaXQgYWZ0ZXIgdGhlIF9fbmFrZWQgYm9keSdzIGV4aXQsIGxlYXZpbmcgdGhlXFxuKyAqIHN1YnByb2dyYW0gZmFsbGluZyB0aHJvdWdoLiBCdWlsZCB0aGVzZSB3aXRoIGNsYW5nIG9ubHkuXFxuKyAqL1xcbisjaWYgZGVmaW5lZChfX2NsYW5nX18pXFxuK1xcbitzdHJ1Y3QgYXJlbmFfcGFpciB7XFxuK1xcdHZvaWQgX19hcmVuYSAqbG87XFxuK1xcdHZvaWQgX19hcmVuYSAqaGk7XFxuK307XFxuK1xcbitzdHJ1Y3QgYXJlbmFfYW5kX3NjYWxhciB7XFxuK1xcdHZvaWQgX19hcmVuYSAqcDtcXG4rXFx0X191NjQgeDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBhcmVuYV9hcnJheSB7XFxuK1xcdHZvaWQgX19hcmVuYSAqcFsyXTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBhcmVuYV9zaW5nbGUge1xcbitcXHR2b2lkIF9fYXJlbmEgKnA7XFxuK307XFxuK1xcbit1bmlvbiBhcmVuYV91cGFpciB7XFxuK1xcdHZvaWQgX19hcmVuYSAqcDtcXG4rXFx0X191NjQgaGFsdmVzWzJdO1xcbit9O1xcbitcXG4rX19uYWtlZCBzdHJ1Y3QgYXJlbmFfcGFpciBnbG9iYWxfcmV0X2FyZW5hX3BhaXIodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fbG9hZF9pZl9KSVRlZCgpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9wYWlyKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3BhaXJdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfcGFpcilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rX19uYWtlZCBzdHJ1Y3QgYXJlbmFfYW5kX3NjYWxhciBnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXIodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fbG9hZF9pZl9KSVRlZCgpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9hbmRfc2NhbGFyKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXJdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rX19uYWtlZCBzdHJ1Y3QgYXJlbmFfYXJyYXkgZ2xvYmFsX3JldF9hcmVuYV9hcnJheSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXFwicjIgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQpO1xcbit9XFxuK1xcbitTRUMoXFxcInRjXFxcIilcXG4rX19sb2FkX2lmX0pJVGVkKClcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FycmF5KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FycmF5XTtcXFwiXFxuK1xcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdDpcXG4rXFx0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX2FycmF5KVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9zaW5nbGUgZ2xvYmFsX3JldF9hcmVuYV9zaW5nbGUodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQpO1xcbit9XFxuK1xcbitTRUMoXFxcInRjXFxcIilcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3NpbmdsZSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9zaW5nbGVdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfc2luZ2xlKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitfX25ha2VkIHVuaW9uIGFyZW5hX3VwYWlyIGdsb2JhbF9yZXRfYXJlbmFfdW5pb24odm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fbG9hZF9pZl9KSVRlZCgpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV91bmlvbih2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV91bmlvbl07XFxcIlxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQ6XFxuK1xcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV91bmlvbilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rI2VuZGlmXFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5lOWM4MmRmOGVmYjI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXFxuQEAgLTE4LDYgKzE4LDggQEAgdm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXFxuIFxcdDogXFxcInJcXFwiKFxcdTAwMjZicGZfa2Z1bmNfY2FsbF90ZXN0X2kxMjgpLFxcbiBcXHQgIFxcXCJyXFxcIihcXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwpLFxcbiBcXHQgIFxcXCJyXFxcIihcXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKSxcXG4rXFx0ICBcXFwiclxcXCIoXFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCksXFxuK1xcdCAgXFxcInJcXFwiKFxcdTAwMjZicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKSxcXG4gXFx0ICBcXFwiclxcXCIoXFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKSxcXG4gXFx0ICBcXFwiclxcXCIoXFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZykpO1xcbiB9XFxuQEAgLTcxLDcgKzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXFxuIFxcbiBTRUMoXFxcInRjXFxcIilcXG4gX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFyc1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcXFwiKVxcbitfX21zZyhcXFwibWVtYmVyICdwJyBoYXMgdHlwZSBQVFJcXFwiKVxcbiBfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX3B0cl9mYWlsKHZvaWQpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5AQCAtODQsNiArODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitTRUMoXFxcInRjXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcXCIpXFxuK19fbXNnKFxcXCJtZW1iZXIgJ2luLnAnIGhhcyB0eXBlIFBUUlxcXCIpXFxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfbmVzdGVkX3B0cl9mYWlsKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInIxID0gMDtcXFwiXFxuK1xcdFxcXCJjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkXTtcXFwiXFxuK1xcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdDpcXG4rXFx0OiBfX2ltbShicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwidGNcXFwiKVxcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxcbitfX2ZhaWx1cmUgX19tc2coXFxcIm1heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcXCIpXFxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfdG9vX2RlZXBfZmFpbCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCJyMSA9IDA7XFxcIlxcbitcXHRcXFwiY2FsbCAlW2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXBdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuIFNFQyhcXFwidGNcXFwiKVxcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlIyICFyZWFkX29rXFxcIilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2RcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuY1xcbkBAIC0wLDAgKzEsMTI5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcXCJcXG4rXFxuKyNpZiBkZWZpbmVkKF9fY2xhbmdfbWFqb3JfXykgXFx1MDAyNlxcdTAwMjYgX19jbGFuZ19tYWpvcl9fIFxcdTAwM2U9IDIzXFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuKy8qXFxuKyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2VcXG4rICogcXVhbGlmaWVyLCBzbyB0aGUgcHJvZ3JhbSBjYXN0cyBpdCBpbnRvIHRoZSBhcmVuYSBhZGRyZXNzIHNwYWNlIGl0c2VsZlxcbisgKiByYXRoZXIgdGhhbiB0aGUgY29tcGlsZXIgZG9pbmcgaXQuXFxuKyAqL1xcbisjZGVmaW5lIGFyZW5hX3B0cihwKSAoKHUzMiB2b2xhdGlsZSBfX2FyZW5hICopKHApKVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19sb2FkX2lmX0pJVGVkKClcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hKHZvaWQgKmN0eClcXG4re1xcbitcXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICphLCAqYjtcXG4rXFx0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgcjtcXG4rXFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHQvKiBCb3RoIGhhbHZlcyBjb21lIGJhY2sgaW4gUjA6UjIsIHBvaW50aW5nIGF0IHBhZ2UgYW5kIHBhZ2UgKyA0LiAqL1xcbitcXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoKHU2NClwYWdlKTtcXG4rXFx0aWYgKCFyLmEgfHwgIXIuYilcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcbitcXHRhID0gYXJlbmFfcHRyKHIuYSk7XFxuK1xcdGIgPSBhcmVuYV9wdHIoci5iKTtcXG4rXFx0KmEgPSAxO1xcbitcXHQqYiA9IDI7XFxuK1xcdGlmICgqYSAhPSAxKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0aWYgKCpiICE9IDIpXFxuK1xcdFxcdHJldHVybiA0O1xcbitcXG4rXFx0LyogVGhlIGhhbHZlcyBhcmUgdGhlIGZpcnN0IHR3byBzbG90cyBvZiB0aGUgcGFnZSB0aGUgcHJvZ3JhbSBhbGxvY2F0ZWQuICovXFxuK1xcdHBhZ2VbMF0gPSA3O1xcbitcXHRpZiAoKmEgIT0gNylcXG4rXFx0XFx0cmV0dXJuIDU7XFxuK1xcdHBhZ2VbMV0gPSA5O1xcbitcXHRpZiAoKmIgIT0gOSlcXG4rXFx0XFx0cmV0dXJuIDY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19sb2FkX2lmX0pJVGVkKClcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX21peGVkKHZvaWQgKmN0eClcXG4re1xcbitcXHR1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHI7XFxuK1xcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICpwO1xcbitcXG4rXFx0aWYgKCFwYWdlKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdC8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqL1xcbitcXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoKHU2NClwYWdlKTtcXG4rXFx0aWYgKCFyLnApXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHRpZiAoci50YWcgIT0gMHhiZWVmKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdHAgPSBhcmVuYV9wdHIoci5wKTtcXG4rXFx0KnAgPSAzO1xcbitcXHRpZiAoKnAgIT0gMylcXG4rXFx0XFx0cmV0dXJuIDQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcXCIpXFxuK19fbXNnKFxcXCJtZW1iZXIgJ2InIGhhcyB0eXBlIFBUUlxcXCIpXFxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VudGFnZ2VkX2ZhaWwodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIHI7XFxuK1xcbitcXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQoMCk7XFxuK1xcbitcXHRyZXR1cm4gci5hID09IHIuYjtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcXCIpXFxuK19fbXNnKFxcXCJtZW1iZXIgJ2InIGhhcyB0eXBlIFBUUlxcXCIpXFxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KVxcbit7XFxuK1xcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gcjtcXG4rXFxuK1xcdHIgPSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbigwKTtcXG4rXFxuK1xcdHJldHVybiByLmEgPT0gci5iO1xcbit9XFxuK1xcbisjZWxzZVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0XFxcIilcXG4rX19za2lwKFxcXCJuZWVkcyBMTFZNIDIzXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBkdW1teV90ZXN0KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNlbmRpZlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuY1xcbmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jXFxuQEAgLTYwLDcgKzYwLDcgQEAgX19ub2lubGluZSBpbnQgZXhjZXB0aW9uX2NiX29rX2FyZ19zbWFsbChpbnQgYSlcXG4gXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19leGNlcHRpb25fY2IoZXhjZXB0aW9uX2NiX2JhZF9yZXRfdHlwZTEpXFxuLV9fZmFpbHVyZSBfX21zZyhcXFwiT25seSB2b2lkLCBzY2FsYXIsIG9yIGEgc2NhbGFyLW9ubHkgc3RydWN0L3VuaW9uIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIk9ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnNcXFwiKVxcbiBpbnQgcmVqZWN0X2V4Y2VwdGlvbl9jYl90eXBlXzEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbiB7XFxuIFxcdGJwZl90aHJvdygwKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xcbmluZGV4IDgxNWYzNDJlYjRiMDUuLjY3MmEzYWFkZDljYjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xcbkBAIC03MzQsNCArNzM0LDUyIEBAIGludCBjaGVja19hcmVuYV9hcmdfcmV0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKyNpZiBkZWZpbmVkKF9fY2xhbmdfbWFqb3JfXykgXFx1MDAyNlxcdTAwMjYgX19jbGFuZ19tYWpvcl9fIFxcdTAwM2U9IDIzXFxuK1xcbitzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHtcXG4rXFx0dTMyIF9fYXJlbmEgKmZpcnN0O1xcbitcXHR1MzIgX19hcmVuYSAqc2Vjb25kO1xcbit9O1xcbitcXG4rX193ZWFrIHN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgc3BsaXRfYXJlbmFfcGFnZSh1MzIgX19hcmVuYSAqcGFnZSlcXG4re1xcbitcXHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XFxuK1xcbitcXHRwYWlyLmZpcnN0ID0gcGFnZTtcXG4rXFx0cGFpci5zZWNvbmQgPSBwYWdlICsgMTtcXG4rXFxuK1xcdHJldHVybiBwYWlyO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2xvYWRfaWZfSklUZWQoKVxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGNoZWNrX2FyZW5hX3N0cnVjdF9yZXQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHUzMiBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0dTMyIHZvbGF0aWxlIF9fYXJlbmEgKmZpcnN0LCAqc2Vjb25kO1xcbitcXHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XFxuK1xcbitcXHRpZiAoIXBhZ2UpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0cGFpciA9IHNwbGl0X2FyZW5hX3BhZ2UocGFnZSk7XFxuK1xcdGlmICghcGFpci5maXJzdCB8fCAhcGFpci5zZWNvbmQpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXG4rXFx0LyogQm90aCBoYWx2ZXMgb2YgdGhlIHBhaXIgbXVzdCBzdGlsbCBiZSB1c2FibGUgYXMgYXJlbmEgcG9pbnRlcnMuICovXFxuK1xcdGZpcnN0ID0gcGFpci5maXJzdDtcXG4rXFx0c2Vjb25kID0gcGFpci5zZWNvbmQ7XFxuK1xcdCpmaXJzdCA9IDE7XFxuK1xcdCpzZWNvbmQgPSAyO1xcbitcXHRpZiAoKmZpcnN0ICE9IDEpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXHRpZiAoKnNlY29uZCAhPSAyKVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbmluZGV4IDg1MGNmNGY4MzBjNDguLjBlZjJjZTg3NWQ3MWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5AQCAtOTgxLDYgKzk4MSw0OCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKHU2NCB0YWcpXFxuIFxcdHJldHVybiByO1xcbiB9XFxuIFxcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSh1NjQgYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSByID0geyAuYSA9ICh2b2lkICopYWRkciwgLmIgPSAodm9pZCAqKShhZGRyICsgNCkgfTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZCh1NjQgYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCByID0geyAucCA9ICh2b2lkICopYWRkciwgLnRhZyA9IDB4YmVlZiB9O1xcbitcXG4rXFx0cmV0dXJuIHI7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKHU2NCBhZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9IE5VTEwgfTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyB1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKHU2NCBhZGRyKVxcbit7XFxuK1xcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gciA9IHsgLmEgPSAodm9pZCAqKWFkZHIgfTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9uZXN0ZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKHU2NCB0YWcpXFxuK3tcXG4rXFx0c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHIgPSB7IC5pbiA9IHsgLnAgPSBOVUxMIH0sIC50YWcgPSB0YWcgfTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXAodTY0IHYpXFxuK3tcXG4rXFx0c3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCByID0geyAubDEgPSB7IC5sMiA9IHsgLmwzID0geyAubDQgPSB7IC52ID0gdiB9IH0gfSB9IH07XFxuK1xcbitcXHRyZXR1cm4gcjtcXG4rfVxcbitcXG4gX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKVxcbiB7XFxuIFxcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2lpIHIgPSB7IC5hID0gYSwgLmIgPSBiIH07XFxuQEAgLTE1MzksNiArMTU4MSwxMiBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9pMTI4KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcilcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsLCBLRl9GQVNUQ0FMTClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0cilcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKVxcbiAjZW5kaWZcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG5pbmRleCA2NWU2OTNhZGE3MzY0Li5hMmU5ZTlmMzE4NGUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuQEAgLTI2LDYgKzI2LDEyIEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jIHtcXG4gfTtcXG4gI2VuZGlmXFxuIFxcbisjaWYgX19oYXNfYXR0cmlidXRlKGJ0Zl90eXBlX3RhZylcXG4rI2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoXFxcImFyZW5hXFxcIikpKVxcbisjZWxzZVxcbisjZGVmaW5lIF9fYXJlbmFfdGFnXFxuKyNlbmRpZlxcbitcXG4gc3RydWN0IGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxO1xcbiBcXG4gc3RydWN0IHByb2dfdGVzdF9wYXNzMSB7XFxuQEAgLTcwLDYgKzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7XFx0LyogMTYgYnl0ZXM6IGNvbnRhaW5zIGEgcG9pbnRlciAqL1xcbiBcXHRfX3U2NCB0YWc7XFxuIH07XFxuIFxcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSB7XFx0LyogMTYgYnl0ZXM6IHR3byBhcmVuYSBwb2ludGVycyAqL1xcbitcXHR2b2lkIF9fYXJlbmFfdGFnICphO1xcbitcXHR2b2lkIF9fYXJlbmFfdGFnICpiO1xcbit9O1xcbitcXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQge1xcdC8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqL1xcbitcXHR2b2lkIF9fYXJlbmFfdGFnICpwO1xcbitcXHRfX3U2NCB0YWc7XFxuK307XFxuK1xcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCB7XFx0LyogMTYgYnl0ZXM6ICdiJyBsYWNrcyB0aGUgYXJlbmEgdGFnICovXFxuK1xcdHZvaWQgX19hcmVuYV90YWcgKmE7XFxuK1xcdHZvaWQgKmI7XFxuK307XFxuK1xcbit1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHtcXHQvKiA4IGJ5dGVzOiAnYicgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xcbitcXHR2b2lkIF9fYXJlbmFfdGFnICphO1xcbitcXHR2b2lkICpiO1xcbit9O1xcbitcXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHtcXHQvKiAxNiBieXRlczogdGhlIHBvaW50ZXIgaGlkZXMgb25lIGxldmVsIGRvd24gKi9cXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0dm9pZCAqcDtcXG4rXFx0fSBpbjtcXG4rXFx0X191NjQgdGFnO1xcbit9O1xcbitcXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCB7XFx0LyogOCBieXRlcywgYnV0IG5lc3RlZCBwYXN0IHRoZSA0LWxldmVsIHdhbGsgbGltaXQgKi9cXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0XFx0XFx0X191NjQgdjtcXG4rXFx0XFx0XFx0XFx0fSBsNDtcXG4rXFx0XFx0XFx0fSBsMztcXG4rXFx0XFx0fSBsMjtcXG4rXFx0fSBsMTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyB7XFx0LyogMjQgYnl0ZXM6IHRvbyBsYXJnZSBmb3IgUjA6UjIgKi9cXG4gXFx0X191NjQgYTtcXG4gXFx0X191NjQgYjtcXG5AQCAtMTU5LDYgKzIwNCwxMiBAQCBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wYWlyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3BhaXIoX191NjQgYSwgX191NjQgYikgX19rc3ltO1xcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wYWlyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcXG4gc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKSBfX2tzeW07XFxuIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIoX191NjQgdGFnKSBfX2tzeW07XFxuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07XFxuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKF9fdTY0IGFkZHIpIF9fa3N5bTtcXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoX191NjQgYWRkcikgX19rc3ltO1xcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07XFxuK3VuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24oX191NjQgYWRkcikgX19rc3ltO1xcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXAoX191NjQgdikgX19rc3ltO1xcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKHZvaWQpIF9fa3N5bTtcXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfc3RhY2tfYXJnKF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsXFxuIFxcdFxcdFxcdCAgICAgICBfX3U2NCBlLCBfX3U2NCBmLCBfX3U2NCBnLCBfX3U2NCBoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MzozNS43NjMwOTkzMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDIzMjA5NDc0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZlwiLFxuICAgIFwiYnRmX3R5cGVfaXNfYXJlbmFfcHRyXCIsXG4gICAgXCJidGZfcHJlcGFyZV9mdW5jX2FyZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IHJldHVybmluZyBzdHJ1Y3RzIG9yIHVuaW9ucyBieSB2YWx1ZSBmcm9tIGtmdW5jcyBhbmQgZ2xvYmFsIHN1YnByb2dyYW1zIGlmIHRoZXkgYXJlIGNvbXBvc2VkIG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIChwb2ludGVycyB3aXRoIHRoZSBgYnRmX3R5cGVfdGFnKFxcXCJhcmVuYVxcXCIpYCBhdHRyaWJ1dGUpLiBQcmV2aW91c2x5LCBvbmx5IHNjYWxhcnMgd2VyZSBhbGxvd2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZlcmlmaWVyJ3MgdHlwZSBjaGVja2luZyBsb2dpYyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgKGhhbmRsaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIGFyZW5hIHBvaW50ZXJzKS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdGhhdCBjYWxsIHN1Y2gga2Z1bmNzIG9yIHN1YnByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZjdlOGE4YTk1MDFlNWVhM2JjYTliOGUxMjJmZGM0ZWNjNTQ1ZTYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6NDM6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggODlkZWE2YjBiMDI0MS4uOTZiZjYzZDM0NDMyMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC01ODEsMjAgKzU4MSwyNyBAQCBhZ2FpbnN0IHRoZSBhcmVuYS4gTGFyZ2VyIGFjY2Vzc2VzIG11c3QgdmVyaWZ5IHRoZSByYW5nZSBleHBsaWNpdGx5LlxuIEEga2Z1bmMgbWF5IHJldHVybiBhIHNjYWxhciwgYSBwb2ludGVyLCBvciBhIHNtYWxsIHN0cnVjdCBvciB1bmlvbiBieVxuIHZhbHVlLiBBIHNjYWxhciBvciBwb2ludGVyIG9mIHVwIHRvIDggYnl0ZXMgaXMgcmV0dXJuZWQgaW4gUjAsIGFzIHVzdWFsLlxuIFxuLUEgc3RydWN0IG9yIHVuaW9uIHJldHVybmVkIGJ5IHZhbHVlIG11c3QgYmUgY29tcG9zZWQgb25seSBvZiBzY2FsYXJzXG4tKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtOyBhcnJheXMgb2Ygc2NhbGFycyBhcmVcbi1hbGxvd2VkIGFzIG1lbWJlcnMuIEl0cyBieXRlcyBhcmUgaGFuZGVkIGJhY2sgdG8gdGhlIHByb2dyYW0gYXMgdGhlIHJhd1xuLWNvbnRlbnRzIG9mIFIwIChhbmQgUjIpLCBzbyBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcbi1hbmQgZXNjYXBlIHRoZSB2ZXJpZmllcidzIHBvaW50ZXIgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLiBBIHN0cnVjdFxuLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXNcbi1vbmUgd2l0aCBhIGZsb2F0aW5nLXBvaW50IG1lbWJlciwgd2hpY2ggdGhlIEFCSSBtYXkgbm90IHJldHVybiBpbiBSMDpSMiBhdFxuLWFsbC5cbitBIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycyBhbmQgYXJlbmFcbitwb2ludGVycyAocmVjdXJzaXZlbHkpLCB3aGVyZSBhIHNjYWxhciBpcyBhbiBpbnRlZ2VyIG9yIGFuIGVudW0gYW5kIGFuIGFyZW5hXG4rcG9pbnRlciBpcyBvbmUgY2FycnlpbmcgdGhlIGBgYnRmX3R5cGVfdGFnKFwiYXJlbmFcIilgYCBhdHRyaWJ1dGU7IGFycmF5cyBvZlxuK2VpdGhlciBhcmUgYWxsb3dlZCBhcyBtZW1iZXJzLiBJdHMgYnl0ZXMgYXJlIGhhbmRlZCBiYWNrIHRvIHRoZSBwcm9ncmFtIGFzIHRoZVxuK3JhdyBjb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBtZW1iZXIgb2YgYW55IG90aGVyIHBvaW50ZXIgdHlwZSB3b3VsZCBiZVxuK2xhdW5kZXJlZCBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgdGhlIHZlcmlmaWVyJ3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZFxuK3JlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3Qgb3IgdW5pb24gd2l0aCBzdWNoIGEgbWVtYmVyIGlzIHRoZXJlZm9yZSByZWplY3RlZFxuK2F0IGxvYWQgdGltZSwgYW5kIHNvIGlzIG9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3RcbityZXR1cm4gaW4gUjA6UjIgYXQgYWxsLlxuK1xuK0FuIGFyZW5hIHBvaW50ZXIgbWVtYmVyIGlzIGhhbmRlZCBiYWNrIGFzIGEgc2NhbGFyIHRvbywgYnV0IG5vdGhpbmcgaXMgbG9zdCBieVxuK3RoYXQuIFRoZSBwcm9ncmFtIG11c3QgYGBjYXN0X2tlcm4oKWBgIHRoZSB2YWx1ZSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQsIGFuZCB0aGVcbit2ZXJpZmllciBhbGxvd3MgdGhhdCBjYXN0IG9uIGFueSBzY2FsYXIsIHNvIGEgbGF1bmRlcmVkIGFyZW5hIGFkZHJlc3MgZ2l2ZXMgdGhlXG4rcHJvZ3JhbSBubyByZWFjaCBpdCBkaWQgbm90IGFscmVhZHkgaGF2ZS4gVGhlIHJlc3VsdCBpcyBjb25maW5lZCB0byB0aGVcbitwcm9ncmFtJ3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuXG4gXG4gQSBrZnVuYyBtYXkgYWxzbyByZXR1cm4gYSB2YWx1ZSBsYXJnZXIgdGhhbiA4IGJ5dGVzIGFuZCB1cCB0byAxNiBieXRlcyAtLSBhXG4tc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZFxuLWluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNIHVzZXMgZm9yIHRoZSBCUEZcbi10YXJnZXQ6IHRoZSBmaXJzdCA4IGJ5dGVzIGluIFIwIGFuZCB0aGUgc2Vjb25kIDggYnl0ZXMgaW4gUjIuIEEgc3RydWN0IG9yXG4tdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLlxuK3N0cnVjdCBvciB1bmlvbiBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycywgb3IgYW4gYGBfX2ludDEyOGBgLiBTdWNoIGFcbit2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTVxuK3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLlxuK0Egc3RydWN0IG9yIHVuaW9uIG9mIDggYnl0ZXMgb3IgbGVzcyBpcyByZXR1cm5lZCBpbiBSMCBhbG9uZS5cbiBcbiA6OlxuIFxuQEAgLTYyMCwxMCArNjI3LDEwIEBAIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBKSVRlZCwgc2luY2UgdGhlIGludGVycHJldGVyIHByb3BhZ2F0ZXMgb25seSBSMCBvdXQgb2ZcbiBhIHN1YnByb2dyYW06IHdpdGhvdXQgYSBKSVQgdGhlIHJldHVybiB2YWx1ZSBzdGF5cyBpbiBSMCBhbG9uZSwgYW5kIGEgY2FsbGVyXG4gcmVhZGluZyBSMiBpcyByZWplY3RlZCBmb3IgcmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHJlZ2lzdGVyLiBBIGdsb2JhbFxuIHN1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW4gaXNvbGF0aW9uLCBzbyBpdHMgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIHJldHVybiBpc1xuLXJlc3RyaWN0ZWQgdG8gc2NhbGFycyBqdXN0IGxpa2UgYSBrZnVuYydzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkXG4taW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcyBub3QgY292ZXJlZDogaXRzIHJldHVyblxuLXZhbHVlIGlzIHRoZSBwcm9ncmFtJ3MgZXhpdCBjb2RlLCByZWFkIG91dCBvZiBSMCBhbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlclxuLWhhbGYgaXMgbmV2ZXIgbG9va2VkIGF0LlxuK3Jlc3RyaWN0ZWQgdG8gc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMganVzdCBsaWtlIGEga2Z1bmMnczsgYSBzdGF0aWNcbitzdWJwcm9ncmFtIGlzIHZlcmlmaWVkIGlubGluZSBhbmQgaGFzIG5vIHN1Y2ggcmVzdHJpY3Rpb24uIFRoZSBtYWluIHByb2dyYW0gaXNcbitub3QgY292ZXJlZDogaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgcHJvZ3JhbSdzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjBcbithbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlciBoYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC5cbiBcbiBBIGdsb2JhbCBzdWJwcm9ncmFtIG11c3QgbGVhdmUgYSBzY2FsYXIgaW4gKmV2ZXJ5KiByZWdpc3RlciBvZiB0aGUgcGFpciwgc29cbiBib3RoIGhhbHZlcyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaGF2ZSB0byBiZSBhc3NpZ25lZC4gTGVhdmluZyB0aGUgdXBwZXIgaGFsZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAwMDRiMDY3ODU1MjFjLi5hZTlmNjA2NTM5ZjQxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE0ODgsOCArMTQ4OCwxNSBAQCBpbnQgYnBmX2ptcF9vZmZzZXQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbiBzdHJ1Y3QgYnBmX2lhcnJheSAqYnBmX2luc25fc3VjY2Vzc29ycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaWR4KTtcbiB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzayk7XG4gYm9vbCBicGZfc3VicHJvZ19pc19nbG9iYWwoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpO1xuLWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyk7XG4rXG4rLyogS2luZHMgb2YgbWVtYmVyIGEgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIG1heSBiZSBjb21wb3NlZCBvZi4gKi9cbitlbnVtIGJ0Zl9tZW1iZXJfa2luZCB7XG4rXHRCVEZfTUVNQkVSX1NDQUxBUlx0PSBCSVQoMCksIC8qIGFuIGludCBvciBhbiBlbnVtICovXG4rXHRCVEZfTUVNQkVSX0FSRU5BX1BUUlx0PSBCSVQoMSksIC8qIGEgcG9pbnRlciBjYXJyeWluZyB0aGUgXCJhcmVuYVwiIHR5cGUgdGFnICovXG4rfTtcbitcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpO1xuIFxuIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpO1xuIGJvb2wgYnBmX2lzX3Rocm93X2tmdW5jKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idGYuaCBiL2luY2x1ZGUvbGludXgvYnRmLmhcbmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J0Zi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J0Zi5oXG5AQCAtMjM1LDYgKzIzNSw3IEBAIHN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlXG4gXHRcdFx0XHQgICAgdTMyIGZpZWxkX21hc2ssIHUzMiB2YWx1ZV9zaXplKTtcbiBpbnQgYnRmX2NoZWNrX2FuZF9maXh1cF9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjKTtcbiBib29sIGJ0Zl90eXBlX2lzX3ZvaWQoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTtcbitib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7XG4gczMyIGJ0Zl9maW5kX2J5X25hbWVfa2luZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGtpbmQpO1xuIHMzMiBicGZfZmluZF9idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgdTMyIGtpbmQsIHN0cnVjdCBidGYgKipidGZfcCk7XG4gc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDkxYjhjZTc3ZjY5OWEuLmY2ZDgyYThmZDYxN2IgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtMzUyMyw2ICszNTIzLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3R5cGVfdGFnX3dhbGsoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2Jvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxuK3tcbitcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtXHUwMDNldHlwZSk7IGJ0Zl90eXBlX2lzX21vZGlmaWVyKHQpO1xuK1x0ICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LVx1MDAzZXR5cGUpKSB7XG4rXHRcdGlmICghYnRmX3R5cGVfaXNfdHlwZV90YWcodCkgfHwgYnRmX3R5cGVfa2ZsYWcodCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghc3RyY21wKF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC1cdTAwM2VuYW1lX29mZiksIFwiYXJlbmFcIikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnRmX2ZpbmRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiBcdFx0XHQgdTMyIG9mZiwgaW50IHN6LCBzdHJ1Y3QgYnRmX2ZpZWxkX2luZm8gKmluZm8sIHUzMiBmaWVsZF9tYXNrKVxuIHtcbkBAIC03OTI3LDUxICs3OTQzLDE5IEBAIHN0YXRpYyBpbnQgYnRmX3NjYW5fZGVjbF90YWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLFxuLVx0XHRcdCAgICAgIHUzMiAqdGFncylcbitzdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxuIHtcbi1cdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVfdGFnX21hdGNoIGZ1bmNfdHlwZV90YWdzW10gPSB7XG4tXHRcdHsgXCJhcmVuYVwiLCBBUkdfVEFHX0FSRU5BIH0sXG4tXHR9O1xuLVx0c3RydWN0IGJ0Zl90eXBlX3RhZ193YWxrX2N0eCBjdHg7XG4tXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4tXHRpbnQgZXJyO1xuLVxuIFx0LyogRmluZCB0aGUgZmlyc3QgcG9pbnRlciB0eXBlIGluIHRoZSBjaGFpbi4gKi9cbi1cdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcyxcbi1cdCAqIHdoaWNoIG5laXRoZXIgTExWTSBub3IgR0NDIHN1cHBvcnQgYW55d2F5LlxuLVx0ICovXG4tXHRpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRjdHgudCA9IHQ7XG4tXHRlcnIgPSBidGZfdHlwZV90YWdfd2FsayhidGYsIFx1MDAyNmN0eCwgZnVuY190eXBlX3RhZ3MsXG4tXHRcdFx0XHRBUlJBWV9TSVpFKGZ1bmNfdHlwZV90YWdzKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGJwZl9sb2coXHUwMDI2ZW52LVx1MDAzZWxvZyxcbi1cdFx0XHRcImZ1bmN0aW9uIHNpZ25hdHVyZSBtZW1iZXIgaGFzIG11bHRpcGxlIHR5cGUgdGFnc1xcblwiKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbi1cdCp0YWdzIHw9IGN0eC5yZXM7XG4tXG4tXHRyZXR1cm4gMDtcbitcdGlmIChidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbitcdFx0KnRhZ3MgfD0gQVJHX1RBR19BUkVOQTtcbiB9XG4gXG4gLyogQ2hlY2sgd2hldGhlciB0aGUgdHlwZSBpcyBhIHZhbGlkIHJldHVybiB0eXBlLiAqL1xuIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgc3VicHJvZywgYm9vbCBpc19nbG9iYWwpXG4ge1xuLVx0dTMyIHRhZ3MgPSAwO1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZ0YWdzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4gXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuIFxuIFx0LypcbkBAIC03OTc5LDcgKzc5NjMsNyBAQCBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidFxuIFx0ICogR2VuZXJhbCBhcmVuYSB2YXJpYWJsZXMgYXJlIG5vdCBhbGxvd2VkLCBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byByZXR1cm4gYnkgdmFsdWVcbiBcdCAqIGEgdmFyaWFibGUgdGhhdCdzIG9uIHRoZSBoZWFwIGluIHRoZSBmaXJzdCBwbGFjZS5cbiBcdCAqL1xuLVx0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2ICh0YWdzIFx1MDAyNiBBUkdfVEFHX0FSRU5BKSBcdTAwMjZcdTAwMjYgYnRmX3R5cGVfaXNfcHRyKHQpKVxuK1x0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIFdlIGFsd2F5cyBhY2NlcHQgdm9pZCBvciBzY2FsYXJzLiAqL1xuQEAgLTc5ODksMTMgKzc5NzMsMjIgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRcbiBcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkgXHUwMDI2XHUwMDI2IHQtXHUwMDNlc2l6ZSBcdTAwM2M9IDE2KSB7XG4gXHRcdC8qXG4gXHRcdCAqIEEgZ2xvYmFsIGZ1bmN0aW9uJ3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZVxuLVx0XHQgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWxcbi1cdFx0ICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZFxuLVx0XHQgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi5cbitcdFx0ICogc2NhbGFyIHBhaXIsIHNvIGEgcG9pbnRlciBtZW1iZXIgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYVxuK1x0XHQgKiBzY2FsYXIgYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIE9ubHlcbitcdFx0ICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzXG4rXHRcdCAqIG5vIHByb3ZlbmFuY2UgdG8gbG9zZSwgc2luY2UgYSBwcm9ncmFtIG1heSBhbHJlYWR5IGRlcml2ZSBvbmVcbitcdFx0ICogZnJvbSBhbnkgc2NhbGFyIHdpdGggYWRkcl9zcGFjZV9jYXN0KCksIHdoaWNoIGNvbmZpbmVzIHRoZVxuK1x0XHQgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc29cbitcdFx0ICogaXRzIGNhbGxlciByZWNlaXZlcyB0aGUgcmVhbCByZWdpc3RlciBzdGF0ZSBhbmQgYW55IG1lbWJlciBpc1xuK1x0XHQgKiBmaW5lLlxuIFx0XHQgKi9cbiBcdFx0Ym9vbCBsb2NhbF9mdW5jID0gc3VicHJvZyBcdTAwMjZcdTAwMjYgIWlzX2dsb2JhbDtcbitcdFx0dTMyIG1lbWJlcl9raW5kcyA9IEJURl9NRU1CRVJfU0NBTEFSO1xuK1xuK1x0XHRpZiAoc3VicHJvZylcbitcdFx0XHRtZW1iZXJfa2luZHMgfD0gQlRGX01FTUJFUl9BUkVOQV9QVFI7XG4gXG4tXHRcdGlmIChsb2NhbF9mdW5jIHx8IGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIHQsIDApKVxuK1x0XHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTgwOTEsNyArODA4NCw4IEBAIGludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHRcdGlmIChpc19nbG9iYWwpIHtcbiBcdFx0XHRicGZfbG9nKGxvZyxcbiBcdFx0XHRcdFwiR2xvYmFsIGZ1bmN0aW9uICVzKCkgaGFzIHVuc3VwcG9ydGVkIHJldHVybiB0eXBlLiBcIlxuLVx0XHRcdFx0XCJPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLlxcblwiLFxuK1x0XHRcdFx0XCJPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiBcIlxuK1x0XHRcdFx0XCJzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXFxuXCIsXG4gXHRcdFx0XHR0bmFtZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycjtcbkBAIC04MTA2LDkgKzgxMDAsNyBAQCBpbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCBcdTAwMjZ0YWdzKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRidGZfc2Nhbl90eXBlX3RhZ3MoYnRmLCBhcmdzW2ldLnR5cGUsIFx1MDAyNnRhZ3MpO1xuIFxuIFx0XHR0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBhcmdzW2ldLnR5cGUpO1xuIFx0XHR3aGlsZSAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li45YTM2ODA4MTM2YzlhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC05OTk1LDkgKzk5OTUsMTQgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFyZXR1cm5zX3ZvaWQpIHtcbiBcdFx0XHRucmVncyA9IGJwZl9yZXRfcmVnX3BhaXIoZW52LCBzdWJwcm9nKSA/IDIgOiAxO1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4tXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbitcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzWzBdKTtcbiBcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnJlZ3M7IGkrKykge1xuK1x0XHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dLCBOVUxMLFxuK1x0XHRcdFx0XHRcdCAgIEJQRl9ESUFHX01PRF9XUklURSk7XG4rXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbitcdFx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcbkBAIC0xMDQwMywxMCArMTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGVcbiBcdFx0ICogcmV0dXJuIHJlZ2lzdGVyKHMpXG4gXHRcdCAqL1xuLVx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkrKylcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV07XG4tXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkrKykge1xuK1x0XHRcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xuK1xuK1x0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbcmVnbm9dLFxuK1x0XHRcdFx0XHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xuK1x0XHRcdGNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSA9IGNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXTtcbitcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcbkBAIC0xMTM0MiwxNSArMTEzNTEsMzMgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcbiAvKlxuICAqIE1hcmsgdGhlIHJlZ2lzdGVyKHMpIGhvbGRpbmcgYSBAc2l6ZSBieXRlIGtmdW5jIHJldHVybiB2YWx1ZSBhcyB1bmtub3duXG4tICogc2NhbGFycy4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlciBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS5cbisgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlclxuKyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LlxuKyAqXG4rICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlXG4rICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdFxuKyAqIHNjb3BlIGlzIHdoYXQgY2FycmllcyBpdHMgcHJlLWNhbGwgdmFsdWUgaW50byB0aGUgaGlzdG9yeS4gQSBzY29wZSB0cmFja3MgYVxuKyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZlxuKyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJ3Mgc2NvcGUgb3BlbiBmb3JcbisgKiB0aGUgY2FsbGVyIHRvIGNsb3NlLCBzbyBhIGxhdGVyIHdyaXRlIHRvIFIwIHN0aWxsIGxhbmRzIGluIGl0LlxuICAqL1xuLXN0YXRpYyB2b2lkIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSlcbitzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKVxuIHtcbiBcdHUzMiBpLCBucmVncyA9IHJldF9yZWdzX2NudChzaXplKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4rXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmV0X3JlZ3NbMF0pO1xuK1x0aWYgKG5yZWdzID09IDEpXG4rXHRcdHJldHVybiBucmVncztcbitcbitcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yZWdzOyBpKyspIHtcbitcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7XG4rXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdH1cbitcbitcdHJldHVybiBucmVncztcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYWNxdWlyZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG5AQCAtMTE2MTksMTAgKzExNjQ2LDMzIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChjb25zdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsIHUzMiBhcmdfXG4gXHRyZXR1cm4gYXJnbiBcdTAwM2M9IGFyZ19pZHg7XG4gfVxuIFxuLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovXG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKVxuKyNkZWZpbmUgQlRGX01FTUJFUl9NQVhfREVQVEhcdDRcbisjZGVmaW5lIEJURl9NRU1CRVJfUEFUSF9MRU5cdDY0XG4rXG4rc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCB7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyW0JURl9NRU1CRVJfTUFYX0RFUFRIXTtcbitcdGludCBkZXB0aDtcbitcdGJvb2wgdG9vX2RlZXA7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBidGZfbWVtYmVyX2tpbmRfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbitcdFx0XHRcdCAgICB1MzIgbWVtYmVyX2tpbmRzKVxuK3tcbitcdGlmICgobWVtYmVyX2tpbmRzIFx1MDAyNiBCVEZfTUVNQkVSX1NDQUxBUikgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoKG1lbWJlcl9raW5kcyBcdTAwMjYgQlRGX01FTUJFUl9BUkVOQV9QVFIpIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpblxuKyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5XG4rICogbWVtYmVyIGNvdW50cyBhcyBpdHMgZWxlbWVudCB0eXBlLlxuKyAqL1xuK3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzLCBpbnQgcmVjLFxuK1x0XHRcdFx0ICAgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcbkBAIC0xMTYzNiwyNyArMTE2ODYsNjUgQEAgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QobWVtYmVyX3R5cGUpKSB7XG4tXHRcdFx0aWYgKHJlYyBcdTAwM2U9IDMpIHtcbitcdFx0XHRpZiAocmVjIFx1MDAzZT0gQlRGX01FTUJFUl9NQVhfREVQVEggLSAxKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXG5cIik7XG4rXHRcdFx0XHRpZiAocGF0aClcbitcdFx0XHRcdFx0cGF0aC1cdTAwM2V0b29fZGVlcCA9IHRydWU7XG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyArIDEpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGlmICghYnRmX3N0cnVjdF9tZW1iZXJfd2FsayhlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcyxcbitcdFx0XHRcdFx0XHQgICAgcmVjICsgMSwgcGF0aCkpXG4rXHRcdFx0XHRnb3RvIGJhZF9wYXRoO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcbiBcdFx0XHRhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7XG4gXHRcdFx0aWYgKCFhcnJheS1cdTAwM2VuZWxlbXMpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4gXHRcdFx0bWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LVx1MDAzZXR5cGUsIE5VTEwpO1xuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihtZW1iZXJfdHlwZSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRpZiAoIWJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcykpXG4rXHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4rXG4rYmFkX21lbWJlcjpcbitcdGlmIChwYXRoKVxuK1x0XHRwYXRoLVx1MDAzZWRlcHRoID0gcmVjICsgMTtcbitiYWRfcGF0aDpcbitcdGlmIChwYXRoIFx1MDAyNlx1MDAyNiBwYXRoLVx1MDAzZWRlcHRoKVxuK1x0XHRwYXRoLVx1MDAzZW1lbWJlcltyZWNdID0gbWVtYmVyO1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpXG4re1xuK1x0cmV0dXJuIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBidGYsIHQsIG1lbWJlcl9raW5kcywgMCwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbit7XG4rXHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBidGZfbWVtYmVyX3BhdGhfc3RyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aCxcbitcdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbit7XG4rXHRzaXplX3QgbGVuID0gMDtcbitcdGludCBpO1xuK1xuK1x0YnVmWzBdID0gJ1xcMCc7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXRoLVx1MDAzZWRlcHRoOyBpKyspIHtcbitcdFx0Y29uc3QgY2hhciAqbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHBhdGgtXHUwMDNlbWVtYmVyW2ldLVx1MDAzZW5hbWVfb2ZmKTtcbitcbitcdFx0aWYgKCFuYW1lIHx8ICFuYW1lWzBdKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX3N6IC0gbGVuLCBcIiVzJXNcIiwgbGVuID8gXCIuXCIgOiBcIlwiLCBuYW1lKTtcbitcdH1cbiB9XG4gXG4gZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuQEAgLTEyMDM5LDcgKzEyMTI3LDcgQEAgZ2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcbiBcdFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcdTAwMjZcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcbitcdFx0ICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90KSkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvIHZvaWQsIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxuXCIsXG4gXHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTIwNTUsNyArMTIxNDMsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHQgKiBzY2FsYXJzLiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZCBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4rXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxcblwiLFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEzMTExLDcgKzEzMTk5LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4rXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90KSkge1xuIFx0XHRcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7XG4gXHRcdFx0XHRjb25zdCBjaGFyICpleHBlY3RlZF90eXBlO1xuIFxuQEAgLTEzNjUzLDcgKzEzNzQxLDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdcbiBcbiBcdFx0c3RydWN0X21ldGEgPSBidGZfZmluZF9zdHJ1Y3RfbWV0YShyZXRfYnRmLCByZXRfYnRmX2lkKTtcbiBcdFx0aWYgKGlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpKSB7XG4tXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QsIDApKSB7XG4rXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJicGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG5AQCAtMTM3NjcsNyArMTM4NTUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDtcbiBcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4tXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xuK1x0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZCwgcmV0X25yZWdzID0gMTtcbiBcdHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYztcbiBcdHN0cnVjdCBidGYgKmRlc2NfYnRmO1xuIFx0aW50IGlkO1xuQEAgLTE0MDIxLDI1ICsxNDEwOSw1OSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0fVxuIFxuIFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xuLVx0XHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbitcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG4gXHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbiBcdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuIFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHtcbitcdFx0c3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCBwYXRoID0ge307XG4rXHRcdGNvbnN0IGNoYXIgKm1lbWJlcl9ub3RlID0gXCJcIjtcbitcbiBcdFx0LypcbiBcdFx0ICogVGhlIHJldHVybmVkIHN0cnVjdCBjb21lcyBiYWNrIGFzIHJhdyByZWdpc3RlciBiaXRzIG1vZGVsZWRcbi1cdFx0ICogYXMgYW4gdW5rbm93biBzY2FsYXIsIHNvIGl0IG11c3QgY29udGFpbiBvbmx5IHNjYWxhcnM6XG4tXHRcdCAqIG90aGVyd2lzZSBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcbi1cdFx0ICogYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuXG4rXHRcdCAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZFxuK1x0XHQgKiBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLlxuK1x0XHQgKiBPbmx5IHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGFyZSBhbGxvd2VkOiBhbiBhcmVuYSBwb2ludGVyXG4rXHRcdCAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmVcbitcdFx0ICogb25lIGZyb20gYW55IHNjYWxhciB3aXRoIGFkZHJfc3BhY2VfY2FzdCgpLCB3aGljaCBjb25maW5lcyB0aGVcbitcdFx0ICogcmVzdWx0IHRvIHRoZSBhcmVuYS5cbiBcdFx0ICovXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGRlc2NfYnRmLCB0LCAwKSkge1xuK1x0XHRpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCxcbitcdFx0XHRcdFx0ICAgIEJURl9NRU1CRVJfU0NBTEFSIHwgQlRGX01FTUJFUl9BUkVOQV9QVFIsIDAsIFx1MDAyNnBhdGgpKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsXG4tXHRcdFx0XHRcImtlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcXG5cIixcbitcdFx0XHRcdFwia2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcblwiLFxuIFx0XHRcdFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXG4gXHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpKTtcbitcdFx0XHRpZiAocGF0aC50b29fZGVlcCkge1xuK1x0XHRcdFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXG4rXHRcdFx0XHRcdGVudiwgXCIgSXQgbmVzdHMgc3RydWN0cyBtb3JlIHRoYW4gJWQgbGV2ZWxzIGRlZXAuXCIsXG4rXHRcdFx0XHRcdEJURl9NRU1CRVJfTUFYX0RFUFRIKTtcbitcdFx0XHR9IGVsc2UgaWYgKHBhdGguZGVwdGgpIHtcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBwYXRoLm1lbWJlcltwYXRoLmRlcHRoIC0gMV07XG4rXHRcdFx0XHRjaGFyIGJhZF9uYW1lW0JURl9NRU1CRVJfUEFUSF9MRU5dO1xuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpiYWRfdHlwZTtcbitcbitcdFx0XHRcdGJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsIFx1MDAyNnBhdGgsIGJhZF9uYW1lLCBzaXplb2YoYmFkX25hbWUpKTtcbitcdFx0XHRcdGJhZF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGJhZC1cdTAwM2V0eXBlLCBOVUxMKTtcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIm1lbWJlciAnJXMnIGhhcyB0eXBlICVzXFxuXCIsIGJhZF9uYW1lLFxuK1x0XHRcdFx0XHRidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbitcdFx0XHRcdG1lbWJlcl9ub3RlID0gYnBmX2RpYWdfZm10KFxuK1x0XHRcdFx0XHRlbnYsXG4rXHRcdFx0XHRcdFwiIEl0cyBtZW1iZXIgJyVzJyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuXCIsXG4rXHRcdFx0XHRcdGJhZF9uYW1lLCBidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbitcdFx0XHR9XG4rXHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4rXHRcdFx0XHRlbnYsIGluc25faWR4LCBcInVuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZVwiLFxuK1x0XHRcdFx0XCJDYWxsIGEga2VybmVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmx5IHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnMgYnkgdmFsdWUuXCIsXG4rXHRcdFx0XHRcIiVzKCkgcmV0dXJucyAlcyAlcyBieSB2YWx1ZS4lcyBcIlxuK1x0XHRcdFx0XCJPbmx5IGtmdW5jcyByZXR1cm5pbmcgc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycywgb3IgXCJcbitcdFx0XHRcdFwic3RydWN0dXJlcyBjb21wb3NlZCBvZiBzY2FsYXIgdmFsdWVzIG9yIGFyZW5hIHBvaW50ZXJzIGFyZSBcIlxuK1x0XHRcdFx0XCJzdXBwb3J0ZWQuXCIsXG4rXHRcdFx0XHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcbitcdFx0XHRcdGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC1cdTAwM2VuYW1lX29mZiksIG1lbWJlcl9ub3RlKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuLVx0XHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbitcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuIFx0XHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnB0cl90eXBlX2lkKTtcbiBcdFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFx1MDAyNm1ldGEsIHJlZ3MsIGluc25fYXV4LCBwdHJfdHlwZSwgZGVzY19idGYpO1xuQEAgLTE0MTcwLDcgKzE0MjkyLDggQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdCAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlXG4gXHQgKiBpdGVyYXRvciBwYXRoJ3MgZGlhZ25vc3RpYyBwb3NpdGlvbi5cbiBcdCAqL1xuLVx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuK1x0aWYgKHJldF9ucmVncyA9PSAxKVxuK1x0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4gXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jXG5AQCAtMSwxMSArMSw1MyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFwiYWdncmVnYXRlX3JldF9mdW5jLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJhZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLnNrZWwuaFwiXG4rXG4rc3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKVxuK3tcbitcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmLCAqbW9kdWxlX2J0ZiA9IE5VTEw7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4rXHRib29sIHRhZ2dlZCA9IGZhbHNlO1xuK1x0X19zMzIgaWQ7XG4rXG4rXHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuK1x0aWYgKCF2bWxpbnV4X2J0ZilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKFwiYnBmX3Rlc3Rtb2RcIiwgdm1saW51eF9idGYpO1xuK1x0aWYgKCFtb2R1bGVfYnRmKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIHByb2dfdGVzdF9yZXRfYXJlbmE6OmEgaXMgJ3ZvaWQgX19hcmVuYV90YWcgKic6IFBUUiAtXHUwMDNlIFRZUEVfVEFHIC1cdTAwM2Ugdm9pZCAqL1xuK1x0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKG1vZHVsZV9idGYsIFwicHJvZ190ZXN0X3JldF9hcmVuYVwiLCBCVEZfS0lORF9TVFJVQ1QpO1xuK1x0aWYgKGlkIFx1MDAzYz0gMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR0ID0gYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIGJ0Zl9tZW1iZXJzKGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCBpZCkpWzBdLnR5cGUpO1xuK1x0aWYgKCF0IHx8ICFidGZfaXNfcHRyKHQpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgdC1cdTAwM2V0eXBlKTtcbitcdHRhZ2dlZCA9IHQgXHUwMDI2XHUwMDI2IGJ0Zl9pc190eXBlX3RhZyh0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICFzdHJjbXAoYnRmX19uYW1lX2J5X29mZnNldChtb2R1bGVfYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSwgXCJhcmVuYVwiKTtcbitcbitvdXQ6XG4rXHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XG4rXHRidGZfX2ZyZWUodm1saW51eF9idGYpO1xuK1xuK1x0cmV0dXJuIHRhZ2dlZDtcbit9XG4gXG4gdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZClcbiB7XG4gXHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTtcbiBcdFJVTl9URVNUUyhhZ2dyZWdhdGVfcmV0X2tmdW5jKTtcbitcbitcdGlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpXG4rXHRcdFJVTl9URVNUUyhhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hKTtcbitcdGVsc2VcbitcdFx0dGVzdF9fc2tpcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbmluZGV4IDZmNjZmYzgyMmNlZGUuLmYwMDc3ZDk1MWEyNWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuIHR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjggdTEyODtcbkBAIC0yMzQsNCArMjM1LDE0OSBAQCBfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF91bmlvbl9wdHJfZmFpbCh2b2lkKVxuIFxuICNlbmRpZlxuIFxuKy8qXG4rICogZ2NjIHJldHVybnMgYSBieS12YWx1ZSBzdHJ1Y3QgdGhyb3VnaCBhIGhpZGRlbiBwb2ludGVyLCBhbmQgZW1pdHMgdGhlXG4rICogJ3IwID0gcjEnIHJldHVybmluZyBpdCBhZnRlciB0aGUgX19uYWtlZCBib2R5J3MgZXhpdCwgbGVhdmluZyB0aGVcbisgKiBzdWJwcm9ncmFtIGZhbGxpbmcgdGhyb3VnaC4gQnVpbGQgdGhlc2Ugd2l0aCBjbGFuZyBvbmx5LlxuKyAqL1xuKyNpZiBkZWZpbmVkKF9fY2xhbmdfXylcbitcbitzdHJ1Y3QgYXJlbmFfcGFpciB7XG4rXHR2b2lkIF9fYXJlbmEgKmxvO1xuK1x0dm9pZCBfX2FyZW5hICpoaTtcbit9O1xuK1xuK3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHtcbitcdHZvaWQgX19hcmVuYSAqcDtcbitcdF9fdTY0IHg7XG4rfTtcbitcbitzdHJ1Y3QgYXJlbmFfYXJyYXkge1xuK1x0dm9pZCBfX2FyZW5hICpwWzJdO1xuK307XG4rXG4rc3RydWN0IGFyZW5hX3NpbmdsZSB7XG4rXHR2b2lkIF9fYXJlbmEgKnA7XG4rfTtcbitcbit1bmlvbiBhcmVuYV91cGFpciB7XG4rXHR2b2lkIF9fYXJlbmEgKnA7XG4rXHRfX3U2NCBoYWx2ZXNbMl07XG4rfTtcbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJyMiA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0KTtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX2xvYWRfaWZfSklUZWQoKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3BhaXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9wYWlyXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3BhaXIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJyMiA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0KTtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX2xvYWRfaWZfSklUZWQoKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FuZF9zY2FsYXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9hcnJheSBnbG9iYWxfcmV0X2FyZW5hX2FycmF5KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjAgPSAwO1wiXG4rXHRcInIyID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQpO1xuK31cbitcbitTRUMoXCJ0Y1wiKVxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfYXJyYXkodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9hcnJheV07XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hcnJheSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQpO1xuK31cbitcbitTRUMoXCJ0Y1wiKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3NpbmdsZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZV07XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9zaW5nbGUpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHVuaW9uIGFyZW5hX3VwYWlyIGdsb2JhbF9yZXRfYXJlbmFfdW5pb24odm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMCA9IDA7XCJcbitcdFwicjIgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdCk7XG4rfVxuK1xuK1NFQyhcInRjXCIpXG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV91bmlvbih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5lOWM4MmRmOGVmYjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuQEAgLTE4LDYgKzE4LDggQEAgdm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXG4gXHQ6IFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOCksXG4gXHQgIFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKSxcbiBcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKSxcbitcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKSxcbitcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCksXG4gXHQgIFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKSxcbiBcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKSk7XG4gfVxuQEAgLTcxLDcgKzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gXG4gU0VDKFwidGNcIilcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuLV9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcIilcbitfX21zZyhcIm1lbWJlciAncCcgaGFzIHR5cGUgUFRSXCIpXG4gX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtODQsNiArODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rU0VDKFwidGNcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ2luLnAnIGhhcyB0eXBlIFBUUlwiKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfbmVzdGVkX3B0cl9mYWlsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjEgPSAwO1wiXG4rXHRcImNhbGwgJVticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWRdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInRjXCIpXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbitfX2ZhaWx1cmUgX19tc2coXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcIilcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX3Rvb19kZWVwX2ZhaWwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMSA9IDA7XCJcbitcdFwiY2FsbCAlW2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXBdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBTRUMoXCJ0Y1wiKVxuIF9fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiUjIgIXJlYWRfb2tcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2Rcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmNcbkBAIC0wLDAgKzEsMTI5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCJcbitcbisjaWYgZGVmaW5lZChfX2NsYW5nX21ham9yX18pIFx1MDAyNlx1MDAyNiBfX2NsYW5nX21ham9yX18gXHUwMDNlPSAyM1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbisvKlxuKyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2VcbisgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmXG4rICogcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVyIGRvaW5nIGl0LlxuKyAqL1xuKyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpXG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSh2b2lkICpjdHgpXG4re1xuK1x0dTMyIHZvbGF0aWxlIF9fYXJlbmEgKnBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqYSwgKmI7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSByO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEJvdGggaGFsdmVzIGNvbWUgYmFjayBpbiBSMDpSMiwgcG9pbnRpbmcgYXQgcGFnZSBhbmQgcGFnZSArIDQuICovXG4rXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoKHU2NClwYWdlKTtcbitcdGlmICghci5hIHx8ICFyLmIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0YSA9IGFyZW5hX3B0cihyLmEpO1xuK1x0YiA9IGFyZW5hX3B0cihyLmIpO1xuK1x0KmEgPSAxO1xuK1x0KmIgPSAyO1xuK1x0aWYgKCphICE9IDEpXG4rXHRcdHJldHVybiAzO1xuK1x0aWYgKCpiICE9IDIpXG4rXHRcdHJldHVybiA0O1xuK1xuK1x0LyogVGhlIGhhbHZlcyBhcmUgdGhlIGZpcnN0IHR3byBzbG90cyBvZiB0aGUgcGFnZSB0aGUgcHJvZ3JhbSBhbGxvY2F0ZWQuICovXG4rXHRwYWdlWzBdID0gNztcbitcdGlmICgqYSAhPSA3KVxuK1x0XHRyZXR1cm4gNTtcbitcdHBhZ2VbMV0gPSA5O1xuK1x0aWYgKCpiICE9IDkpXG4rXHRcdHJldHVybiA2O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfbWl4ZWQodm9pZCAqY3R4KVxuK3tcbitcdHUzMiBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgcjtcbitcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICpwO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqL1xuK1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKCh1NjQpcGFnZSk7XG4rXHRpZiAoIXIucClcbitcdFx0cmV0dXJuIDI7XG4rXHRpZiAoci50YWcgIT0gMHhiZWVmKVxuK1x0XHRyZXR1cm4gMztcbitcbitcdHAgPSBhcmVuYV9wdHIoci5wKTtcbitcdCpwID0gMztcbitcdGlmICgqcCAhPSAzKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1wiKVxuK19fbXNnKFwibWVtYmVyICdiJyBoYXMgdHlwZSBQVFJcIilcbitpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV91bnRhZ2dlZF9mYWlsKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByO1xuK1xuK1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKDApO1xuK1xuK1x0cmV0dXJuIHIuYSA9PSByLmI7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ2InIGhhcyB0eXBlIFBUUlwiKVxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KVxuK3tcbitcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gcjtcbitcbitcdHIgPSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbigwKTtcbitcbitcdHJldHVybiByLmEgPT0gci5iO1xuK31cbitcbisjZWxzZVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0XCIpXG4rX19za2lwKFwibmVlZHMgTExWTSAyM1wiKVxuK19fc3VjY2Vzc1xuK2ludCBkdW1teV90ZXN0KHZvaWQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuY1xuQEAgLTYwLDcgKzYwLDcgQEAgX19ub2lubGluZSBpbnQgZXhjZXB0aW9uX2NiX29rX2FyZ19zbWFsbChpbnQgYSlcbiBcbiBTRUMoXCI/dGNcIilcbiBfX2V4Y2VwdGlvbl9jYihleGNlcHRpb25fY2JfYmFkX3JldF90eXBlMSlcbi1fX2ZhaWx1cmUgX19tc2coXCJPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLlwiKVxuK19fZmFpbHVyZSBfX21zZyhcIk9ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnNcIilcbiBpbnQgcmVqZWN0X2V4Y2VwdGlvbl9jYl90eXBlXzEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIHtcbiBcdGJwZl90aHJvdygwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5pbmRleCA4MTVmMzQyZWI0YjA1Li42NzJhM2FhZGQ5Y2IyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5AQCAtNzM0LDQgKzczNCw1MiBAQCBpbnQgY2hlY2tfYXJlbmFfYXJnX3JldCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rI2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSBcdTAwMjZcdTAwMjYgX19jbGFuZ19tYWpvcl9fIFx1MDAzZT0gMjNcbitcbitzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHtcbitcdHUzMiBfX2FyZW5hICpmaXJzdDtcbitcdHUzMiBfX2FyZW5hICpzZWNvbmQ7XG4rfTtcbitcbitfX3dlYWsgc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBzcGxpdF9hcmVuYV9wYWdlKHUzMiBfX2FyZW5hICpwYWdlKVxuK3tcbitcdHN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgcGFpcjtcbitcbitcdHBhaXIuZmlyc3QgPSBwYWdlO1xuK1x0cGFpci5zZWNvbmQgPSBwYWdlICsgMTtcbitcbitcdHJldHVybiBwYWlyO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpXG4re1xuK1x0dTMyIF9fYXJlbmEgKnBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7XG4rXHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XG4rXG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0cGFpciA9IHNwbGl0X2FyZW5hX3BhZ2UocGFnZSk7XG4rXHRpZiAoIXBhaXIuZmlyc3QgfHwgIXBhaXIuc2Vjb25kKVxuK1x0XHRyZXR1cm4gMjtcbitcbitcdC8qIEJvdGggaGFsdmVzIG9mIHRoZSBwYWlyIG11c3Qgc3RpbGwgYmUgdXNhYmxlIGFzIGFyZW5hIHBvaW50ZXJzLiAqL1xuK1x0Zmlyc3QgPSBwYWlyLmZpcnN0O1xuK1x0c2Vjb25kID0gcGFpci5zZWNvbmQ7XG4rXHQqZmlyc3QgPSAxO1xuK1x0KnNlY29uZCA9IDI7XG4rXHRpZiAoKmZpcnN0ICE9IDEpXG4rXHRcdHJldHVybiAzO1xuK1x0aWYgKCpzZWNvbmQgIT0gMilcbitcdFx0cmV0dXJuIDQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCA4NTBjZjRmODMwYzQ4Li4wZWYyY2U4NzVkNzFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTk4MSw2ICs5ODEsNDggQEAgX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfcHRyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0cih1NjQgdGFnKVxuIFx0cmV0dXJuIHI7XG4gfVxuIFxuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKHU2NCBhZGRyKVxuK3tcbitcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9ICh2b2lkICopKGFkZHIgKyA0KSB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKHU2NCBhZGRyKVxuK3tcbitcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHIgPSB7IC5wID0gKHZvaWQgKilhZGRyLCAudGFnID0gMHhiZWVmIH07XG4rXG4rXHRyZXR1cm4gcjtcbit9XG4rXG4rX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQodTY0IGFkZHIpXG4re1xuK1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gTlVMTCB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24odTY0IGFkZHIpXG4re1xuK1x0dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByID0geyAuYSA9ICh2b2lkICopYWRkciB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQodTY0IHRhZylcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9uZXN0ZWQgciA9IHsgLmluID0geyAucCA9IE5VTEwgfSwgLnRhZyA9IHRhZyB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCh1NjQgdilcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHIgPSB7IC5sMSA9IHsgLmwyID0geyAubDMgPSB7IC5sNCA9IHsgLnYgPSB2IH0gfSB9IH0gfTtcbitcbitcdHJldHVybiByO1xuK31cbitcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpXG4ge1xuIFx0c3RydWN0IHByb2dfdGVzdF9yZXRfaWkgciA9IHsgLmEgPSBhLCAuYiA9IGIgfTtcbkBAIC0xNTM5LDYgKzE1ODEsMTIgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwsIEtGX0ZBU1RDQUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKVxuICNlbmRpZlxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IDY1ZTY5M2FkYTczNjQuLmEyZTllOWYzMTg0ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMjYsNiArMjYsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMge1xuIH07XG4gI2VuZGlmXG4gXG4rI2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpXG4rI2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoXCJhcmVuYVwiKSkpXG4rI2Vsc2VcbisjZGVmaW5lIF9fYXJlbmFfdGFnXG4rI2VuZGlmXG4rXG4gc3RydWN0IGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxO1xuIFxuIHN0cnVjdCBwcm9nX3Rlc3RfcGFzczEge1xuQEAgLTcwLDYgKzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7XHQvKiAxNiBieXRlczogY29udGFpbnMgYSBwb2ludGVyICovXG4gXHRfX3U2NCB0YWc7XG4gfTtcbiBcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSB7XHQvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovXG4rXHR2b2lkIF9fYXJlbmFfdGFnICphO1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqYjtcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHtcdC8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqL1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqcDtcbitcdF9fdTY0IHRhZztcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIHtcdC8qIDE2IGJ5dGVzOiAnYicgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqYTtcbitcdHZvaWQgKmI7XG4rfTtcbitcbit1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHtcdC8qIDggYnl0ZXM6ICdiJyBsYWNrcyB0aGUgYXJlbmEgdGFnICovXG4rXHR2b2lkIF9fYXJlbmFfdGFnICphO1xuK1x0dm9pZCAqYjtcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCB7XHQvKiAxNiBieXRlczogdGhlIHBvaW50ZXIgaGlkZXMgb25lIGxldmVsIGRvd24gKi9cbitcdHN0cnVjdCB7XG4rXHRcdHZvaWQgKnA7XG4rXHR9IGluO1xuK1x0X191NjQgdGFnO1xuK307XG4rXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCB7XHQvKiA4IGJ5dGVzLCBidXQgbmVzdGVkIHBhc3QgdGhlIDQtbGV2ZWwgd2FsayBsaW1pdCAqL1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3Qge1xuK1x0XHRcdFx0c3RydWN0IHtcbitcdFx0XHRcdFx0X191NjQgdjtcbitcdFx0XHRcdH0gbDQ7XG4rXHRcdFx0fSBsMztcbitcdFx0fSBsMjtcbitcdH0gbDE7XG4rfTtcbitcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcge1x0LyogMjQgYnl0ZXM6IHRvbyBsYXJnZSBmb3IgUjA6UjIgKi9cbiBcdF9fdTY0IGE7XG4gXHRfX3U2NCBiO1xuQEAgLTE1OSw2ICsyMDQsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wYWlyKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wYWlyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKF9fdTY0IHRhZykgX19rc3ltO1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07XG4rc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltO1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKF9fdTY0IGFkZHIpIF9fa3N5bTtcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07XG4rdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07XG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKF9fdTY0IHYpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKHZvaWQpIF9fa3N5bTtcbiBfX3U2NCBicGZfa2Z1bmNfY2FsbF9zdGFja19hcmcoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCxcbiBcdFx0XHQgICAgICAgX191NjQgZSwgX191NjQgZiwgX191NjQgZywgX191NjQgaCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQzOjM1Ljc2MzEwMDQ5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTMyMzI3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgb25lIGFjdHVhbGx5LiBUaGUgQlBGIHZlcmlmaWVyIGlzIGJlaW5nIHVwZGF0ZWQgdG8gcGVybWl0IGtmdW5jcyBhbmQgZ2xvYmFsIHN1YnByb2dyYW1zIHRvIHJldHVybiBzdHJ1Y3RzIG9yIHVuaW9ucyBieSB2YWx1ZSwgKnByb3ZpZGVkKiB0aG9zZSBhZ2dyZWdhdGVzIGFyZSBtYWRlIHVwIGVudGlyZWx5IG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIChkZWZpbmVkIGJ5IHRoYXQgYGJ0Zl90eXBlX3RhZyhcImFyZW5hXCIpYCBhdHRyaWJ1dGUpLiAgUHJldmlvdXNseSwgb25seSBzY2FsYXJzIHdlcmUgYWxsb3dlZC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGV4cGFuc2lvbiBvZiB3aGF0J3MgcGVybWlzc2libGUsIGFuZCBpdCdzIGdvaW5nIHRvIHJlcXVpcmUgY2FyZWZ1bCByZXZpZXcuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYGtlcm5lbC9icGYvYnRmLmNgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gIEknbSBzZWVpbmcgbmV3IGZ1bmN0aW9ucyBsaWtlIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHZlcmlmeWluZyB0aGVzZSBhcmVuYSBwb2ludGVyIHR5cGVzLCBhbmQgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgLCB0aGF0IGxvb2tzIGxpa2UgaXQncyB0YWtpbmcgdGhlIHBsYWNlIG9mIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCBpbiBhIGZldyBzcG90cy4gVGhlbiB0aGVyZSBhcmUgY2hhbmdlcyB0byB0aGUgY29yZSBjYWxsLWNoZWNraW5nIGFuZCByZXR1cm4taGFuZGxpbmcgZnVuY3Rpb25zOiBgY2hlY2tfZnVuY19jYWxsYCwgYHByZXBhcmVfZnVuY19leGl0YCwgYG1hcmtfa2Z1bmNfcmV0X3JlZ3NgLCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgLiAgVGhlc2UgYXJlIHRoZSBoZWFydCBvZiB0aGUgdmVyaWZpZXIgbG9naWMsIHNvIGhhbmRsaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIHRob3NlIGFyZW5hIHBvaW50ZXJzIGNvcnJlY3RseSBpcyBnb2luZyB0byBiZSBrZXkuXG5cblRoaXMgaGFzIGZ1enppbmcgd3JpdHRlbiBhbGwgb3ZlciBpdC4gVGhpcyBpcyBhIGNsZWFyIGV4cGFuc2lvbiBvZiBmdW5jdGlvbmFsaXR5IGFuZCwgYXMgd2l0aCBhbnkgY2hhbmdlIHRvIHRoZSB2ZXJpZmllciwgSSdkIHdhbnQgdG8gYmUgc3VyZSBpdCdzIHJvYnVzdCBhZ2FpbnN0IG1pc2NvbmZpZ3VyYXRpb25zIG9yIG1hbGljaW91cyBpbnB1dC4gVGltZSB0byBwdXQgdGhlIGZ1enplciBvbiB0aGVzZS5cblxuRmlyc3QgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbi4gSSdtIHRoaW5raW5nOlxuXG4qICAgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmBcbiogICBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmBcbiogICBgYnRmX3N0cnVjdF9tZW1iZXJfd2Fsa2BcbiogICBgbWFya19rZnVuY19yZXRfcmVnc2BcbiogICBgY2hlY2tfa2Z1bmNfY2FsbGBcbiogICBgY2hlY2tfZnVuY19jYWxsYFxuKiAgIGBwcmVwYXJlX2Z1bmNfZXhpdGBcblxuSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2Ygd2hhdCdzIGNoYW5naW5nLlxuXG5PbmUgbW9yZSB0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGVzdGluZyB3aXRoIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gQlBGIGFuZCBCUEZcXF9TWVNDQUxMIHNob3VsZCBiZSBzdGFuZGFyZCwgYW5kIEJQRlxcX0pJVCB0b28uIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGFueSBzcGVjaWFsIGNvbmZpZ3MgcmVsYXRlZCB0byBCUEYgYXJlbmFzIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0J3MgZG8gYSBxdWljayBncmVwIGZvciBgQlBGX0FSRU5BYCBvciByZWxhdGVkIHRlcm1zLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCdzIG5lZWRlZCBmb3IgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0Mzo0My4zMTYzMzU3MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MzQxOTk2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9BUkVOQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDM6NDUuNzc5NzYxOTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzYzNDUzMTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEJQRiBBcmVuYTogSHVudGluZyBmb3IgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwncyBCUEYgc3Vic3lzdGVtIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBhbiBcImFyZW5hXCIgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJZiB0aGVyZSdzIGFuIFwiYXJlbmEsXCIgaXQncyBsaWtlbHkgY29udHJvbGxlZCBieSBzb21lIGBLY29uZmlnYCBzZXR0aW5nLCBkZXRlcm1pbmluZyBpdHMgc2l6ZSwgZW5hYmxpbmcvZGlzYWJsaW5nIGl0LCBvciB0d2Vha2luZyBpdHMgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSBhbmQgaW1tZWRpYXRlbHkgYGdyZXBgIGZvciBcImFyZW5hXCIgd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBiaXJkJ3MtZXllIHZpZXcgb2YgYW55IGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24ga25vYnMgcmVsYXRlZCB0byB0aGlzIGNvbmNlcHQuIEl0J3MgYSBmdW5kYW1lbnRhbCBpbml0aWFsIHN0ZXAgdG8gY2hlY2sgd2hpY2ggb3B0aW9ucyBhcmUgaW4gdGhlIHNvdXJjZSB0cmVlLCBhbmQgZnJvbSB0aG9zZSwgcXVpY2tseSBsb29rIGZvciByZWxhdGlvbnNoaXBzIHRvIG90aGVyIEJQRiBzdWJzeXN0ZW0gcGFyYW1ldGVycyBhbmQgcmVsYXRlZCBzb3VyY2UgY29kZS4gSSBleHBlY3QgSSdsbCBxdWlja2x5IGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUuIE9uY2UgSSBoYXZlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZW4gSSBjYW4gc2VlIHdoYXQgc291cmNlIGZpbGVzIGFuZCBjb2RlIHBhdGhzIGFyZSBpbmZsdWVuY2VkIGJ5IHRob3NlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkyMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQzOjU5LjQxNDI5NjA2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgxMzE2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0Mzo1OS40ODIxMTYxMTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODczMjUwMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQlBGIEFyZW5hIElzc3VlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgdGhpcyBmZWVscyBsaWtlIGl0IGNvdWxkIGJlIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIEJQRiBhcmVuYS4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb2RlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi9hcmVuYS5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgcmVsYXRlZCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoZSBhcmVuYSBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkLCBkZWFsbG9jYXRlZCwgYW5kIGhvdyBpdOKAmXMgYmVpbmcgdHJhY2tlZC4gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGZyYWdtZW50YXRpb24gcHJvYmxlbXMsIG9yIHBvc3NpYmx5IG1lbW9yeSBsZWFrcyB3aXRoaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBrZXJuZWwuIEEgcXVpY2sgc2NhbiBvZiByZWxhdGVkIGZpbGVzIG1pZ2h0IGFsc28gYmUgd2FycmFudGVkLCB0byBzZWUgaG93IHRoYXQgYXJlbmEgaXMgdXNlZCBhbmQgaW50ZXJhY3RlZCB3aXRoIGFjcm9zcyBvdGhlciBwYXJ0cyBvZiB0aGUgQlBGIHN5c3RlbS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhpcyBpc3N1ZSwgc28gdGhpcyBpcyB3aGVyZSBJJ2xsIGJlZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIyMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ0OjA2LjM1NTM2ODY2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImFyZW5hLmNcIixcbiAgICBcImFycmF5bWFwLmNcIixcbiAgICBcImJhY2t0cmFjay5jXCIsXG4gICAgXCJibG9vbV9maWx0ZXIuY1wiLFxuICAgIFwiYnBmX2NncnBfc3RvcmFnZS5jXCIsXG4gICAgXCJicGZfaW5vZGVfc3RvcmFnZS5jXCIsXG4gICAgXCJicGZfaW5zbl9hcnJheS5jXCIsXG4gICAgXCJicGZfaXRlci5jXCIsXG4gICAgXCJicGZfbG9jYWxfc3RvcmFnZS5jXCIsXG4gICAgXCJicGZfbHJ1X2xpc3QuY1wiLFxuICAgIFwiYnBmX2xydV9saXN0LmhcIixcbiAgICBcImJwZl9sc20uY1wiLFxuICAgIFwiYnBmX2xzbV9wcm90by5jXCIsXG4gICAgXCJicGZfc3RydWN0X29wcy5jXCIsXG4gICAgXCJicGZfdGFza19zdG9yYWdlLmNcIixcbiAgICBcImJ0Zi5jXCIsXG4gICAgXCJidGZfaXRlci5jXCIsXG4gICAgXCJidGZfcmVsb2NhdGUuY1wiLFxuICAgIFwiY2ZnLmNcIixcbiAgICBcImNncm91cC5jXCIsXG4gICAgXCJjZ3JvdXBfaXRlci5jXCIsXG4gICAgXCJjaGVja19idGYuY1wiLFxuICAgIFwiY251bS5jXCIsXG4gICAgXCJjbnVtX2RlZnMuaFwiLFxuICAgIFwiY29uc3RfZm9sZC5jXCIsXG4gICAgXCJjb3JlLmNcIixcbiAgICBcImNwdW1hcC5jXCIsXG4gICAgXCJjcHVtYXNrLmNcIixcbiAgICBcImNyeXB0by5jXCIsXG4gICAgXCJkZXZtYXAuY1wiLFxuICAgIFwiZGlhZ25vc3RpY3MuY1wiLFxuICAgIFwiZGlhZ25vc3RpY3MuaFwiLFxuICAgIFwiZGlzYXNtLmNcIixcbiAgICBcImRpc2FzbS5oXCIsXG4gICAgXCJkaXNwYXRjaGVyLmNcIixcbiAgICBcImRtYWJ1Zl9pdGVyLmNcIixcbiAgICBcImZpeHVwcy5jXCIsXG4gICAgXCJoYXNodGFiLmNcIixcbiAgICBcImhlbHBlcnMuY1wiLFxuICAgIFwiaW5vZGUuY1wiLFxuICAgIFwia21lbV9jYWNoZV9pdGVyLmNcIixcbiAgICBcImxpbmtfaXRlci5jXCIsXG4gICAgXCJsaXZlbmVzcy5jXCIsXG4gICAgXCJsb2NhbF9zdG9yYWdlLmNcIixcbiAgICBcImxvZy5jXCIsXG4gICAgXCJscG1fdHJpZS5jXCIsXG4gICAgXCJtYXBfaW5fbWFwLmNcIixcbiAgICBcIm1hcF9pbl9tYXAuaFwiLFxuICAgIFwibWFwX2l0ZXIuY1wiLFxuICAgIFwibWVtYWxsb2MuY1wiLFxuICAgIFwibW1hcF91bmxvY2tfd29yay5oXCIsXG4gICAgXCJtcHJvZy5jXCIsXG4gICAgXCJuZXRfbmFtZXNwYWNlLmNcIixcbiAgICBcIm9mZmxvYWQuY1wiLFxuICAgIFwicGVyY3B1X2ZyZWVsaXN0LmNcIixcbiAgICBcInBlcmNwdV9mcmVlbGlzdC5oXCIsXG4gICAgXCJwcm9nX2l0ZXIuY1wiLFxuICAgIFwicXVldWVfc3RhY2tfbWFwcy5jXCIsXG4gICAgXCJyYW5nZV90cmVlLmNcIixcbiAgICBcInJhbmdlX3RyZWUuaFwiLFxuICAgIFwicmVsb19jb3JlLmNcIixcbiAgICBcInJldXNlcG9ydF9hcnJheS5jXCIsXG4gICAgXCJyaW5nYnVmLmNcIixcbiAgICBcInJxc3BpbmxvY2suY1wiLFxuICAgIFwicnFzcGlubG9jay5oXCIsXG4gICAgXCJzdGFja21hcC5jXCIsXG4gICAgXCJzdGF0ZXMuY1wiLFxuICAgIFwic3RyZWFtLmNcIixcbiAgICBcInN5c2NhbGwuY1wiLFxuICAgIFwic3lzZnNfYnRmLmNcIixcbiAgICBcInRhc2tfaXRlci5jXCIsXG4gICAgXCJ0Y3guY1wiLFxuICAgIFwidG51bS5jXCIsXG4gICAgXCJ0b2tlbi5jXCIsXG4gICAgXCJ0cmFtcG9saW5lLmNcIixcbiAgICBcInZlcmlmaWVyLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwicHJlbG9hZFwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ0OjA2LjM1NTU0MzQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMzNzk1NTgxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgYXJlbmEuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBhcmVuYS5jYCBmaWxlIGhhcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBiYWtlZCBpbnRvIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSB3aXRoaW4gdGhhdCBmaWxlIGJlaGF2ZXMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIGNlcnRhaW4gYnVpbGQgY29uZmlndXJhdGlvbnMsIGZlYXR1cmUgZmxhZ3MsIG9yIHBsYXRmb3JtIHNwZWNpZmljcy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGxpa2UgYCNpZmRlZmAsIGAjaWZuZGVmYCwgYCNpZmAsIGAjZWxzZWAsIGFuZCBgI2VuZGlmYCB0aGF0IGNvdWxkIGFmZmVjdCB3aGljaCBzZWN0aW9ucyBvZiBjb2RlIGFyZSBpbmNsdWRlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuIElkZW50aWZ5aW5nIHRoZXNlIGRpcmVjdGl2ZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZpbGUncyBmbGV4aWJpbGl0eSBhbmQgcG90ZW50aWFsIHZhcmlhYmlsaXR5IGFjcm9zcyBkaWZmZXJlbnQgZGVwbG95bWVudHMgb3IgdXNlIGNhc2VzLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIG15IG92ZXJhbGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnVpbGQgc3lzdGVtIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgcHJvamVjdC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGZpbGUgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMDgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDQ6MjkuNzM1MTA0MzM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU3Mjc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDQ6MjkuODA3Njc4OTgyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTU4MzAwNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtleSBCUEYgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUuIEZpcnN0LCB0aGUgdXN1YWwgc3VzcGVjdHMgYXJlIGF0IHBsYXk6IGBDT05GSUdfTU1VYCwgYENPTkZJR182NEJJVGAsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBjb3JlIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBzY2FuIHlpZWxkZWQgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50LCBjbHVzdGVyZWQgYXJvdW5kIGBidGYuY2AgYW5kIGB2ZXJpZmllci5jYC5cblxuSW4gYGJ0Zi5jYCwgSSBzYXcgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGBidGZfc2Nhbl90eXBlX3RhZ3NgICh3aGljaCB3YXMgbW9kaWZpZWQpLCBgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlYCAoYWxzbyBtb2RpZmllZCksIGFuZCBgYnRmX3ByZXBhcmVfZnVuY19hcmdzYCAobW9kaWZpZWQgYWdhaW4pLiBUaGVuLCBvdmVyIGluIGB2ZXJpZmllci5jYCwgdGhlIGxpc3QgaW5jbHVkZXMgYGNoZWNrX2Z1bmNfY2FsbGAgKG1vZGlmaWVkKSwgYHByZXBhcmVfZnVuY19leGl0YCAobW9kaWZpZWQpLCBgbWFya19rZnVuY19yZXRfcmVnc2AgKG1vZGlmaWVkKSwgYGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkYCAoYWRkZWQpLCBgYnRmX3N0cnVjdF9tZW1iZXJfd2Fsa2AgKGFkZGVkKSwgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgIChhZGRlZCksIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCAobW9kaWZpZWQpLCBgYnRmX21lbWJlcl9wYXRoX3N0cmAgKGFkZGVkKSwgYW5kIGBjaGVja19rZnVuY19jYWxsYCAobW9kaWZpZWQpLlxuXG5BZnRlciBhIGZpcnN0IHBhc3MsIEkgbmFycm93ZWQgaXQgZG93biB0bzogYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCwgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgLCBgbWFya19rZnVuY19yZXRfcmVnc2AsIGBjaGVja19rZnVuY19jYWxsYCwgYGNoZWNrX2Z1bmNfY2FsbGAsIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJIGNoZWNrZWQgd2hpY2ggZnVuY3Rpb25zIGFyZSBzdGF0aWMuIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCwgYG1hcmtfa2Z1bmNfcmV0X3JlZ3NgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19mdW5jX2NhbGxgLCBhbmQgYHByZXBhcmVfZnVuY19leGl0YCBhcmUgYWxsIHN0YXRpYy4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhcyBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBBUEkgZW50cnkgcG9pbnRzLlxuXG5HaXZlbiB0aGF0IGNvbnN0cmFpbnQsIEkgcmVmaW5lZCB0aGUgbGlzdCB0byBmb2N1cyBvbiBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAsIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgLCBgYnRmX3ByZXBhcmVfZnVuY19hcmdzYCwgYW5kIGBicGZfY2hlY2tgLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYCBhbmQgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXMgdGhhdCBJIHNob3VsZCBsb29rIGF0IHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDQ6NDMuNzY1OTgyMzk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg0Njk4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTc5NTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03OTkwLVxcbmtlcm5lbC9icGYvYnRmLmM6Nzk5MTpcXHRcXHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxcbmtlcm5lbC9icGYvYnRmLmMtNzk5Mi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTY3Mz1zdGF0aWMgYm9vbCBidGZfc3RydWN0X21lbWJlcl93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTcxOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjA6Ym9vbCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIxLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3Mjc9c3RhdGljIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzMwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MzE6XFx0cmV0dXJuIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIEJURl9NRU1CRVJfU0NBTEFSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MzItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0NDo0NC4yMjQ0NTc0NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk0NDU5MzY1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyBgYnRmX3R5cGVfaXNfYXJlbmFfcHRyYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBCVEYgdHlwZSBhbmFseXNpcywgYW5kIHNwZWNpZmljYWxseSwgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbC4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IHRoaXMgaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIGlmIGEgZ2l2ZW4gQlRGIHR5cGUgZGVzY3JpcHRvciByZXByZXNlbnRzIGEgcG9pbnRlciB0aGF0IHJlc2lkZXMgd2l0aGluIHNvbWUgbWFuYWdlZCBhcmVuYSBvciBwb29sLlxuXG5UaGUgaW1tZWRpYXRlIGltcGxpY2F0aW9ucyBhcmUgaW1wb3J0YW50LiBJcyB0aGlzIGNoZWNrIHBlcmZvcm1lZCBhdCBjb21waWxlIHRpbWUsIG9yIHJ1bnRpbWU/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGFyZSB0aGVyZSBvdGhlciBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIHRvIHF1YWxpZnkgYSBwb2ludGVyPyBBbmQgZG9lcyBpdCByZWxhdGUgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHNvbWUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3k/IE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHBhcnQgb2YgZW5zdXJpbmcgc2FmZXR5IGFuZCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGxpa2VseSB3aXRoaW4gYSBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtIG9yIGRyaXZlci4gQXJlIHRoZXJlIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgaGVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhdG9taWNhbGx5IGFjY2Vzc2VkIG1lbW9yeSBsb2NhdGlvbnMgb3IgYXJlIHRoZXJlIHBvdGVudGlhbGx5IHJhY2UgY29uZGl0aW9ucyB0byB3b3JyeSBhYm91dD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB2YXJpb3VzIHR5cGUgcXVhbGlmaWVycyB0b287IGNvbnN0LCB2b2xhdGlsZSwgZXRjLiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGhhdmUgdG8gY2hlY2sgbW9yZSB0aGFuIGp1c3QgdGhlIHBsYWluIEJURiB0eXBlIGtpbmQuIFRoaXMgY291bGQgaGF2ZSBzb21lIHJlYWwgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIHZlcmlmaWVyIGZ1bmN0aW9ucyBhcyB3ZWxsLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHBvc3NpYmxlIGNhc2VzIHdoZXJlIGEgcG9pbnRlciAqd291bGRuJ3QqIGJlIGNvbnNpZGVyZWQgYXJlbmEtbWFuYWdlZC4gQW5kIGJ5IGRlZmluaXRpb24sIHBvaW50ZXJzIHJldHVybmVkIGZyb20gbWFsbG9jLCBvciBldmVuIHNvbWV0aGluZyByZXR1cm5lZCBmcm9tIGFuIGVCUEYgbWFwIGFyZSBub3QuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgYXMgY2xlYXIgYXMgcG9zc2libGUuXG5cbkknbSBzdGFydGluZyB0byBmb3JtdWxhdGUgYSBtZW50YWwgbW9kZWwsIGFuZCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiB0byB2ZXJpZnkgbXkgaHlwb3RoZXNlcy4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBCVEYtYmFzZWQgYW5hbHlzaXMsIGFuZCBhbnkgZXJyb3JzIGhlcmUgY2FuIGxlYWQgdG8gc3VidGxlIGJ1Z3MgZG93biB0aGUgbGluZS4gTGV0J3Mgc2VlIGhvdyBpdCB3b3Jrcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjAzLjY3MDM5NjMyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0Njg4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX3R5cGVfaXNfYXJlbmFfcHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnRmLmM9MzQ4Nj1zdGF0aWMgaW50IGJ0Zl90eXBlX3RhZ193YWxrKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMzUyNS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjM1MjY6Ym9vbCBidGZfdHlwZV9pc19hcmVuYV9wdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXFxua2VybmVsL2JwZi9idGYuYy0zNTI3LXtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9Nzk0Nj1zdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03OTUwLVxcbmtlcm5lbC9icGYvYnRmLmM6Nzk1MTpcXHRpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpXFxua2VybmVsL2JwZi9idGYuYy03OTUyLVxcdFxcdCp0YWdzIHw9IEFSR19UQUdfQVJFTkE7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTc5NTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03OTY1LVxcdCAqL1xcbmtlcm5lbC9icGYvYnRmLmM6Nzk2NjpcXHRpZiAoc3VicHJvZyBcXHUwMDI2XFx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NjctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2NTg9c3RhdGljIGJvb2wgYnRmX21lbWJlcl9raW5kX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2NjItXFx0XFx0cmV0dXJuIHRydWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjYzOlxcdGlmICgobWVtYmVyX2tpbmRzIFxcdTAwMjYgQlRGX01FTUJFUl9BUkVOQV9QVFIpIFxcdTAwMjZcXHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY2NC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDU6MDMuNzI3ODY4NTIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzU2MTUyODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyByZXR1cm4gdHlwZXMgZnJvbSBrZnVuY3MgYW5kIHN1YnByb2dyYW1zLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgZXhwYW5kaW5nIHRoZSBhbGxvd2VkIHJldHVybiB0eXBlcyBiZXlvbmQganVzdCBzaW1wbGUgc2NhbGFycyB0byBpbmNsdWRlIHN0cnVjdHMgb3IgdW5pb25zLCBhcyBsb25nIGFzIHRoZXkncmUgY29tcG9zZWQgb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMuIEkga25vdyB0aGUgdmVyaWZpZXIgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhbnkgY2hhbmdlcyBoZXJlIHdhcnJhbnQgY2FyZWZ1bCBhdHRlbnRpb24uXG5cblRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBjaGVja3MgYXJlIGBidGZfcHJlcGFyZV9mdW5jX2FyZ3NgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGFuZCBgY2hlY2tfZnVuY19jYWxsYC4gU2luY2UgYGNoZWNrX2tmdW5jX2NhbGxgIGFuZCBgY2hlY2tfZnVuY19jYWxsYCBhcmUgc3RhdGljLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhpcyBuZXcgbG9naWM6IGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYCBhbmQgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGFuZCBhbHNvIGBidGZfcHJlcGFyZV9mdW5jX2FyZ3NgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzLiBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIHRob3NlIHRocmVlLCBhbmQgSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBvdGhlcnMuXG5cbkFzIGZvciBjb25maWd1cmF0aW9uLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIG1lbnRpb25zIGBidGZfdHlwZV90YWcoXCJhcmVuYVwiKWAsIGFuZCBJIGluaXRpYWxseSBsb29rZWQgZm9yIGEgc3BlY2lmaWMgYENPTkZJR19CUEZfQVJFTkFgIGJ1dCBjb25maXJtZWQgdGhhdCBpc24ndCBwcmVzZW50LCBidXQgYGFyZW5hLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgLCBgQ09ORklHXzY0QklUYCwgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSBlbmFibGVkLiBTbywgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgbm8gc3BlY2lhbCBjb25maWcgZmxhZ3MgYXJlIG5lZWRlZCBiZXlvbmQgdGhlIHN0YW5kYXJkIEJQRiBvbmVzLlxuXG5TbywgbGV0J3MgbmFpbCBkb3duIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggZW5hYmxlcyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBpZiB0aGV5J3JlIGNvbXBvc2VkIG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIHR5cGUgY2hlY2tpbmcgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIHRoZSBhcmVuYSBwb2ludGVycy4gSXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBwZXJtaXR0ZWQgcmV0dXJuIHR5cGVzLiBGcm9tIHVzZXJzcGFjZSwgdGhpcyBpcyB0cmlnZ2VyZWQgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwgdGhlIGtmdW5jcyBvciBzdWJwcm9ncmFtcyB0aGF0IG5vdyByZXR1cm4gc3RydWN0cy91bmlvbnMuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBzeW1ib2xzOlxuXG4qICAgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgXG4qICAgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmBcbiogICBgYnRmX3ByZXBhcmVfZnVuY19hcmdzYFxuXG5Pa2F5LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMTgsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjE4LjA4NDAyMzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZcIixcbiAgICBcImJ0Zl90eXBlX2lzX2FyZW5hX3B0clwiLFxuICAgIFwiYnRmX3ByZXBhcmVfZnVuY19hcmdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyBpZiB0aGV5IGFyZSBjb21wb3NlZCBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyAocG9pbnRlcnMgd2l0aCB0aGUgYGJ0Zl90eXBlX3RhZyhcXFwiYXJlbmFcXFwiKWAgYXR0cmlidXRlKS4gUHJldmlvdXNseSwgb25seSBzY2FsYXJzIHdlcmUgYWxsb3dlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2ZXJpZmllcidzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIChoYW5kbGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCBhcmVuYSBwb2ludGVycykuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBzdWNoIGtmdW5jcyBvciBzdWJwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mXCIsXG4gICAgXCJidGZfdHlwZV9pc19hcmVuYV9wdHJcIixcbiAgICBcImJ0Zl9wcmVwYXJlX2Z1bmNfYXJnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgcmV0dXJuaW5nIHN0cnVjdHMgb3IgdW5pb25zIGJ5IHZhbHVlIGZyb20ga2Z1bmNzIGFuZCBnbG9iYWwgc3VicHJvZ3JhbXMgaWYgdGhleSBhcmUgY29tcG9zZWQgb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgKHBvaW50ZXJzIHdpdGggdGhlIGBidGZfdHlwZV90YWcoXFxcImFyZW5hXFxcIilgIGF0dHJpYnV0ZSkuIFByZXZpb3VzbHksIG9ubHkgc2NhbGFycyB3ZXJlIGFsbG93ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXIncyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZyAoaGFuZGxpbmcgbXVsdGlwbGUgcmV0dXJuIHJlZ2lzdGVycyBhbmQgYXJlbmEgcG9pbnRlcnMpLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwgc3VjaCBrZnVuY3Mgb3Igc3VicHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjE4LjA4NDA0OTA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA4OTg2ODk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjE4LjA4NDQ1OTE2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODA4OTQ1NTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBrZnVuY3MgYW5kIHN1YnByb2dyYW1zIHRvIHJldHVybiBzdHJ1Y3RzL3VuaW9ucyBjb250YWluaW5nIGFyZW5hIHBvaW50ZXJzIGJ5IHZhbHVlLiBJdCB1cGRhdGVzIHRoZSB2ZXJpZmllcidzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMgcGhhc2Ugb2YgQlBGIHByb2dyYW1zLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoZSB2ZXJpZmllci5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZjdlOGE4YTk1MDFlNWVhM2JjYTliOGUxMjJmZGM0ZWNjNTQ1ZTYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6NDM6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggODlkZWE2YjBiMDI0MS4uOTZiZjYzZDM0NDMyMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC01ODEsMjAgKzU4MSwyNyBAQCBhZ2FpbnN0IHRoZSBhcmVuYS4gTGFyZ2VyIGFjY2Vzc2VzIG11c3QgdmVyaWZ5IHRoZSByYW5nZSBleHBsaWNpdGx5LlxuIEEga2Z1bmMgbWF5IHJldHVybiBhIHNjYWxhciwgYSBwb2ludGVyLCBvciBhIHNtYWxsIHN0cnVjdCBvciB1bmlvbiBieVxuIHZhbHVlLiBBIHNjYWxhciBvciBwb2ludGVyIG9mIHVwIHRvIDggYnl0ZXMgaXMgcmV0dXJuZWQgaW4gUjAsIGFzIHVzdWFsLlxuIFxuLUEgc3RydWN0IG9yIHVuaW9uIHJldHVybmVkIGJ5IHZhbHVlIG11c3QgYmUgY29tcG9zZWQgb25seSBvZiBzY2FsYXJzXG4tKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtOyBhcnJheXMgb2Ygc2NhbGFycyBhcmVcbi1hbGxvd2VkIGFzIG1lbWJlcnMuIEl0cyBieXRlcyBhcmUgaGFuZGVkIGJhY2sgdG8gdGhlIHByb2dyYW0gYXMgdGhlIHJhd1xuLWNvbnRlbnRzIG9mIFIwIChhbmQgUjIpLCBzbyBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcbi1hbmQgZXNjYXBlIHRoZSB2ZXJpZmllcidzIHBvaW50ZXIgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLiBBIHN0cnVjdFxuLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXNcbi1vbmUgd2l0aCBhIGZsb2F0aW5nLXBvaW50IG1lbWJlciwgd2hpY2ggdGhlIEFCSSBtYXkgbm90IHJldHVybiBpbiBSMDpSMiBhdFxuLWFsbC5cbitBIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycyBhbmQgYXJlbmFcbitwb2ludGVycyAocmVjdXJzaXZlbHkpLCB3aGVyZSBhIHNjYWxhciBpcyBhbiBpbnRlZ2VyIG9yIGFuIGVudW0gYW5kIGFuIGFyZW5hXG4rcG9pbnRlciBpcyBvbmUgY2FycnlpbmcgdGhlIGBgYnRmX3R5cGVfdGFnKFwiYXJlbmFcIilgYCBhdHRyaWJ1dGU7IGFycmF5cyBvZlxuK2VpdGhlciBhcmUgYWxsb3dlZCBhcyBtZW1iZXJzLiBJdHMgYnl0ZXMgYXJlIGhhbmRlZCBiYWNrIHRvIHRoZSBwcm9ncmFtIGFzIHRoZVxuK3JhdyBjb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBtZW1iZXIgb2YgYW55IG90aGVyIHBvaW50ZXIgdHlwZSB3b3VsZCBiZVxuK2xhdW5kZXJlZCBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgdGhlIHZlcmlmaWVyJ3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZFxuK3JlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3Qgb3IgdW5pb24gd2l0aCBzdWNoIGEgbWVtYmVyIGlzIHRoZXJlZm9yZSByZWplY3RlZFxuK2F0IGxvYWQgdGltZSwgYW5kIHNvIGlzIG9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3RcbityZXR1cm4gaW4gUjA6UjIgYXQgYWxsLlxuK1xuK0FuIGFyZW5hIHBvaW50ZXIgbWVtYmVyIGlzIGhhbmRlZCBiYWNrIGFzIGEgc2NhbGFyIHRvbywgYnV0IG5vdGhpbmcgaXMgbG9zdCBieVxuK3RoYXQuIFRoZSBwcm9ncmFtIG11c3QgYGBjYXN0X2tlcm4oKWBgIHRoZSB2YWx1ZSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQsIGFuZCB0aGVcbit2ZXJpZmllciBhbGxvd3MgdGhhdCBjYXN0IG9uIGFueSBzY2FsYXIsIHNvIGEgbGF1bmRlcmVkIGFyZW5hIGFkZHJlc3MgZ2l2ZXMgdGhlXG4rcHJvZ3JhbSBubyByZWFjaCBpdCBkaWQgbm90IGFscmVhZHkgaGF2ZS4gVGhlIHJlc3VsdCBpcyBjb25maW5lZCB0byB0aGVcbitwcm9ncmFtJ3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuXG4gXG4gQSBrZnVuYyBtYXkgYWxzbyByZXR1cm4gYSB2YWx1ZSBsYXJnZXIgdGhhbiA4IGJ5dGVzIGFuZCB1cCB0byAxNiBieXRlcyAtLSBhXG4tc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZFxuLWluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNIHVzZXMgZm9yIHRoZSBCUEZcbi10YXJnZXQ6IHRoZSBmaXJzdCA4IGJ5dGVzIGluIFIwIGFuZCB0aGUgc2Vjb25kIDggYnl0ZXMgaW4gUjIuIEEgc3RydWN0IG9yXG4tdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLlxuK3N0cnVjdCBvciB1bmlvbiBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycywgb3IgYW4gYGBfX2ludDEyOGBgLiBTdWNoIGFcbit2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTVxuK3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLlxuK0Egc3RydWN0IG9yIHVuaW9uIG9mIDggYnl0ZXMgb3IgbGVzcyBpcyByZXR1cm5lZCBpbiBSMCBhbG9uZS5cbiBcbiA6OlxuIFxuQEAgLTYyMCwxMCArNjI3LDEwIEBAIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBKSVRlZCwgc2luY2UgdGhlIGludGVycHJldGVyIHByb3BhZ2F0ZXMgb25seSBSMCBvdXQgb2ZcbiBhIHN1YnByb2dyYW06IHdpdGhvdXQgYSBKSVQgdGhlIHJldHVybiB2YWx1ZSBzdGF5cyBpbiBSMCBhbG9uZSwgYW5kIGEgY2FsbGVyXG4gcmVhZGluZyBSMiBpcyByZWplY3RlZCBmb3IgcmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHJlZ2lzdGVyLiBBIGdsb2JhbFxuIHN1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW4gaXNvbGF0aW9uLCBzbyBpdHMgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIHJldHVybiBpc1xuLXJlc3RyaWN0ZWQgdG8gc2NhbGFycyBqdXN0IGxpa2UgYSBrZnVuYydzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkXG4taW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcyBub3QgY292ZXJlZDogaXRzIHJldHVyblxuLXZhbHVlIGlzIHRoZSBwcm9ncmFtJ3MgZXhpdCBjb2RlLCByZWFkIG91dCBvZiBSMCBhbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlclxuLWhhbGYgaXMgbmV2ZXIgbG9va2VkIGF0LlxuK3Jlc3RyaWN0ZWQgdG8gc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMganVzdCBsaWtlIGEga2Z1bmMnczsgYSBzdGF0aWNcbitzdWJwcm9ncmFtIGlzIHZlcmlmaWVkIGlubGluZSBhbmQgaGFzIG5vIHN1Y2ggcmVzdHJpY3Rpb24uIFRoZSBtYWluIHByb2dyYW0gaXNcbitub3QgY292ZXJlZDogaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgcHJvZ3JhbSdzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjBcbithbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlciBoYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC5cbiBcbiBBIGdsb2JhbCBzdWJwcm9ncmFtIG11c3QgbGVhdmUgYSBzY2FsYXIgaW4gKmV2ZXJ5KiByZWdpc3RlciBvZiB0aGUgcGFpciwgc29cbiBib3RoIGhhbHZlcyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaGF2ZSB0byBiZSBhc3NpZ25lZC4gTGVhdmluZyB0aGUgdXBwZXIgaGFsZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAwMDRiMDY3ODU1MjFjLi5hZTlmNjA2NTM5ZjQxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE0ODgsOCArMTQ4OCwxNSBAQCBpbnQgYnBmX2ptcF9vZmZzZXQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbiBzdHJ1Y3QgYnBmX2lhcnJheSAqYnBmX2luc25fc3VjY2Vzc29ycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaWR4KTtcbiB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzayk7XG4gYm9vbCBicGZfc3VicHJvZ19pc19nbG9iYWwoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpO1xuLWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyk7XG4rXG4rLyogS2luZHMgb2YgbWVtYmVyIGEgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIG1heSBiZSBjb21wb3NlZCBvZi4gKi9cbitlbnVtIGJ0Zl9tZW1iZXJfa2luZCB7XG4rXHRCVEZfTUVNQkVSX1NDQUxBUlx0PSBCSVQoMCksIC8qIGFuIGludCBvciBhbiBlbnVtICovXG4rXHRCVEZfTUVNQkVSX0FSRU5BX1BUUlx0PSBCSVQoMSksIC8qIGEgcG9pbnRlciBjYXJyeWluZyB0aGUgXCJhcmVuYVwiIHR5cGUgdGFnICovXG4rfTtcbitcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpO1xuIFxuIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpO1xuIGJvb2wgYnBmX2lzX3Rocm93X2tmdW5jKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idGYuaCBiL2luY2x1ZGUvbGludXgvYnRmLmhcbmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J0Zi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J0Zi5oXG5AQCAtMjM1LDYgKzIzNSw3IEBAIHN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlXG4gXHRcdFx0XHQgICAgdTMyIGZpZWxkX21hc2ssIHUzMiB2YWx1ZV9zaXplKTtcbiBpbnQgYnRmX2NoZWNrX2FuZF9maXh1cF9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjKTtcbiBib29sIGJ0Zl90eXBlX2lzX3ZvaWQoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTtcbitib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7XG4gczMyIGJ0Zl9maW5kX2J5X25hbWVfa2luZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGtpbmQpO1xuIHMzMiBicGZfZmluZF9idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgdTMyIGtpbmQsIHN0cnVjdCBidGYgKipidGZfcCk7XG4gc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDkxYjhjZTc3ZjY5OWEuLmY2ZDgyYThmZDYxN2IgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtMzUyMyw2ICszNTIzLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3R5cGVfdGFnX3dhbGsoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2Jvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxuK3tcbitcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtXHUwMDNldHlwZSk7IGJ0Zl90eXBlX2lzX21vZGlmaWVyKHQpO1xuK1x0ICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LVx1MDAzZXR5cGUpKSB7XG4rXHRcdGlmICghYnRmX3R5cGVfaXNfdHlwZV90YWcodCkgfHwgYnRmX3R5cGVfa2ZsYWcodCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghc3RyY21wKF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC1cdTAwM2VuYW1lX29mZiksIFwiYXJlbmFcIikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnRmX2ZpbmRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiBcdFx0XHQgdTMyIG9mZiwgaW50IHN6LCBzdHJ1Y3QgYnRmX2ZpZWxkX2luZm8gKmluZm8sIHUzMiBmaWVsZF9tYXNrKVxuIHtcbkBAIC03OTI3LDUxICs3OTQzLDE5IEBAIHN0YXRpYyBpbnQgYnRmX3NjYW5fZGVjbF90YWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLFxuLVx0XHRcdCAgICAgIHUzMiAqdGFncylcbitzdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxuIHtcbi1cdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVfdGFnX21hdGNoIGZ1bmNfdHlwZV90YWdzW10gPSB7XG4tXHRcdHsgXCJhcmVuYVwiLCBBUkdfVEFHX0FSRU5BIH0sXG4tXHR9O1xuLVx0c3RydWN0IGJ0Zl90eXBlX3RhZ193YWxrX2N0eCBjdHg7XG4tXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4tXHRpbnQgZXJyO1xuLVxuIFx0LyogRmluZCB0aGUgZmlyc3QgcG9pbnRlciB0eXBlIGluIHRoZSBjaGFpbi4gKi9cbi1cdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcyxcbi1cdCAqIHdoaWNoIG5laXRoZXIgTExWTSBub3IgR0NDIHN1cHBvcnQgYW55d2F5LlxuLVx0ICovXG4tXHRpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRjdHgudCA9IHQ7XG4tXHRlcnIgPSBidGZfdHlwZV90YWdfd2FsayhidGYsIFx1MDAyNmN0eCwgZnVuY190eXBlX3RhZ3MsXG4tXHRcdFx0XHRBUlJBWV9TSVpFKGZ1bmNfdHlwZV90YWdzKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGJwZl9sb2coXHUwMDI2ZW52LVx1MDAzZWxvZyxcbi1cdFx0XHRcImZ1bmN0aW9uIHNpZ25hdHVyZSBtZW1iZXIgaGFzIG11bHRpcGxlIHR5cGUgdGFnc1xcblwiKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbi1cdCp0YWdzIHw9IGN0eC5yZXM7XG4tXG4tXHRyZXR1cm4gMDtcbitcdGlmIChidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbitcdFx0KnRhZ3MgfD0gQVJHX1RBR19BUkVOQTtcbiB9XG4gXG4gLyogQ2hlY2sgd2hldGhlciB0aGUgdHlwZSBpcyBhIHZhbGlkIHJldHVybiB0eXBlLiAqL1xuIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgc3VicHJvZywgYm9vbCBpc19nbG9iYWwpXG4ge1xuLVx0dTMyIHRhZ3MgPSAwO1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZ0YWdzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4gXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuIFxuIFx0LypcbkBAIC03OTc5LDcgKzc5NjMsNyBAQCBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidFxuIFx0ICogR2VuZXJhbCBhcmVuYSB2YXJpYWJsZXMgYXJlIG5vdCBhbGxvd2VkLCBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byByZXR1cm4gYnkgdmFsdWVcbiBcdCAqIGEgdmFyaWFibGUgdGhhdCdzIG9uIHRoZSBoZWFwIGluIHRoZSBmaXJzdCBwbGFjZS5cbiBcdCAqL1xuLVx0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2ICh0YWdzIFx1MDAyNiBBUkdfVEFHX0FSRU5BKSBcdTAwMjZcdTAwMjYgYnRmX3R5cGVfaXNfcHRyKHQpKVxuK1x0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIFdlIGFsd2F5cyBhY2NlcHQgdm9pZCBvciBzY2FsYXJzLiAqL1xuQEAgLTc5ODksMTMgKzc5NzMsMjIgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRcbiBcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkgXHUwMDI2XHUwMDI2IHQtXHUwMDNlc2l6ZSBcdTAwM2M9IDE2KSB7XG4gXHRcdC8qXG4gXHRcdCAqIEEgZ2xvYmFsIGZ1bmN0aW9uJ3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZVxuLVx0XHQgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWxcbi1cdFx0ICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZFxuLVx0XHQgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi5cbitcdFx0ICogc2NhbGFyIHBhaXIsIHNvIGEgcG9pbnRlciBtZW1iZXIgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYVxuK1x0XHQgKiBzY2FsYXIgYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIE9ubHlcbitcdFx0ICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzXG4rXHRcdCAqIG5vIHByb3ZlbmFuY2UgdG8gbG9zZSwgc2luY2UgYSBwcm9ncmFtIG1heSBhbHJlYWR5IGRlcml2ZSBvbmVcbitcdFx0ICogZnJvbSBhbnkgc2NhbGFyIHdpdGggYWRkcl9zcGFjZV9jYXN0KCksIHdoaWNoIGNvbmZpbmVzIHRoZVxuK1x0XHQgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc29cbitcdFx0ICogaXRzIGNhbGxlciByZWNlaXZlcyB0aGUgcmVhbCByZWdpc3RlciBzdGF0ZSBhbmQgYW55IG1lbWJlciBpc1xuK1x0XHQgKiBmaW5lLlxuIFx0XHQgKi9cbiBcdFx0Ym9vbCBsb2NhbF9mdW5jID0gc3VicHJvZyBcdTAwMjZcdTAwMjYgIWlzX2dsb2JhbDtcbitcdFx0dTMyIG1lbWJlcl9raW5kcyA9IEJURl9NRU1CRVJfU0NBTEFSO1xuK1xuK1x0XHRpZiAoc3VicHJvZylcbitcdFx0XHRtZW1iZXJfa2luZHMgfD0gQlRGX01FTUJFUl9BUkVOQV9QVFI7XG4gXG4tXHRcdGlmIChsb2NhbF9mdW5jIHx8IGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIHQsIDApKVxuK1x0XHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTgwOTEsNyArODA4NCw4IEBAIGludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHRcdGlmIChpc19nbG9iYWwpIHtcbiBcdFx0XHRicGZfbG9nKGxvZyxcbiBcdFx0XHRcdFwiR2xvYmFsIGZ1bmN0aW9uICVzKCkgaGFzIHVuc3VwcG9ydGVkIHJldHVybiB0eXBlLiBcIlxuLVx0XHRcdFx0XCJPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLlxcblwiLFxuK1x0XHRcdFx0XCJPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiBcIlxuK1x0XHRcdFx0XCJzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXFxuXCIsXG4gXHRcdFx0XHR0bmFtZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycjtcbkBAIC04MTA2LDkgKzgxMDAsNyBAQCBpbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCBcdTAwMjZ0YWdzKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRidGZfc2Nhbl90eXBlX3RhZ3MoYnRmLCBhcmdzW2ldLnR5cGUsIFx1MDAyNnRhZ3MpO1xuIFxuIFx0XHR0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBhcmdzW2ldLnR5cGUpO1xuIFx0XHR3aGlsZSAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li45YTM2ODA4MTM2YzlhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC05OTk1LDkgKzk5OTUsMTQgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFyZXR1cm5zX3ZvaWQpIHtcbiBcdFx0XHRucmVncyA9IGJwZl9yZXRfcmVnX3BhaXIoZW52LCBzdWJwcm9nKSA/IDIgOiAxO1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4tXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbitcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzWzBdKTtcbiBcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnJlZ3M7IGkrKykge1xuK1x0XHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dLCBOVUxMLFxuK1x0XHRcdFx0XHRcdCAgIEJQRl9ESUFHX01PRF9XUklURSk7XG4rXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbitcdFx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcbkBAIC0xMDQwMywxMCArMTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGVcbiBcdFx0ICogcmV0dXJuIHJlZ2lzdGVyKHMpXG4gXHRcdCAqL1xuLVx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkrKylcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV07XG4tXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkrKykge1xuK1x0XHRcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xuK1xuK1x0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbcmVnbm9dLFxuK1x0XHRcdFx0XHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xuK1x0XHRcdGNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSA9IGNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXTtcbitcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcbkBAIC0xMTM0MiwxNSArMTEzNTEsMzMgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcbiAvKlxuICAqIE1hcmsgdGhlIHJlZ2lzdGVyKHMpIGhvbGRpbmcgYSBAc2l6ZSBieXRlIGtmdW5jIHJldHVybiB2YWx1ZSBhcyB1bmtub3duXG4tICogc2NhbGFycy4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlciBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS5cbisgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlclxuKyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LlxuKyAqXG4rICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlXG4rICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdFxuKyAqIHNjb3BlIGlzIHdoYXQgY2FycmllcyBpdHMgcHJlLWNhbGwgdmFsdWUgaW50byB0aGUgaGlzdG9yeS4gQSBzY29wZSB0cmFja3MgYVxuKyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZlxuKyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJ3Mgc2NvcGUgb3BlbiBmb3JcbisgKiB0aGUgY2FsbGVyIHRvIGNsb3NlLCBzbyBhIGxhdGVyIHdyaXRlIHRvIFIwIHN0aWxsIGxhbmRzIGluIGl0LlxuICAqL1xuLXN0YXRpYyB2b2lkIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSlcbitzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKVxuIHtcbiBcdHUzMiBpLCBucmVncyA9IHJldF9yZWdzX2NudChzaXplKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4rXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmV0X3JlZ3NbMF0pO1xuK1x0aWYgKG5yZWdzID09IDEpXG4rXHRcdHJldHVybiBucmVncztcbitcbitcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yZWdzOyBpKyspIHtcbitcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7XG4rXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdH1cbitcbitcdHJldHVybiBucmVncztcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYWNxdWlyZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG5AQCAtMTE2MTksMTAgKzExNjQ2LDMzIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChjb25zdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsIHUzMiBhcmdfXG4gXHRyZXR1cm4gYXJnbiBcdTAwM2M9IGFyZ19pZHg7XG4gfVxuIFxuLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovXG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKVxuKyNkZWZpbmUgQlRGX01FTUJFUl9NQVhfREVQVEhcdDRcbisjZGVmaW5lIEJURl9NRU1CRVJfUEFUSF9MRU5cdDY0XG4rXG4rc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCB7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyW0JURl9NRU1CRVJfTUFYX0RFUFRIXTtcbitcdGludCBkZXB0aDtcbitcdGJvb2wgdG9vX2RlZXA7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBidGZfbWVtYmVyX2tpbmRfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbitcdFx0XHRcdCAgICB1MzIgbWVtYmVyX2tpbmRzKVxuK3tcbitcdGlmICgobWVtYmVyX2tpbmRzIFx1MDAyNiBCVEZfTUVNQkVSX1NDQUxBUikgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoKG1lbWJlcl9raW5kcyBcdTAwMjYgQlRGX01FTUJFUl9BUkVOQV9QVFIpIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpblxuKyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5XG4rICogbWVtYmVyIGNvdW50cyBhcyBpdHMgZWxlbWVudCB0eXBlLlxuKyAqL1xuK3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzLCBpbnQgcmVjLFxuK1x0XHRcdFx0ICAgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcbkBAIC0xMTYzNiwyNyArMTE2ODYsNjUgQEAgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QobWVtYmVyX3R5cGUpKSB7XG4tXHRcdFx0aWYgKHJlYyBcdTAwM2U9IDMpIHtcbitcdFx0XHRpZiAocmVjIFx1MDAzZT0gQlRGX01FTUJFUl9NQVhfREVQVEggLSAxKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXG5cIik7XG4rXHRcdFx0XHRpZiAocGF0aClcbitcdFx0XHRcdFx0cGF0aC1cdTAwM2V0b29fZGVlcCA9IHRydWU7XG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyArIDEpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGlmICghYnRmX3N0cnVjdF9tZW1iZXJfd2FsayhlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcyxcbitcdFx0XHRcdFx0XHQgICAgcmVjICsgMSwgcGF0aCkpXG4rXHRcdFx0XHRnb3RvIGJhZF9wYXRoO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcbiBcdFx0XHRhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7XG4gXHRcdFx0aWYgKCFhcnJheS1cdTAwM2VuZWxlbXMpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4gXHRcdFx0bWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LVx1MDAzZXR5cGUsIE5VTEwpO1xuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihtZW1iZXJfdHlwZSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRpZiAoIWJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcykpXG4rXHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4rXG4rYmFkX21lbWJlcjpcbitcdGlmIChwYXRoKVxuK1x0XHRwYXRoLVx1MDAzZWRlcHRoID0gcmVjICsgMTtcbitiYWRfcGF0aDpcbitcdGlmIChwYXRoIFx1MDAyNlx1MDAyNiBwYXRoLVx1MDAzZWRlcHRoKVxuK1x0XHRwYXRoLVx1MDAzZW1lbWJlcltyZWNdID0gbWVtYmVyO1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpXG4re1xuK1x0cmV0dXJuIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBidGYsIHQsIG1lbWJlcl9raW5kcywgMCwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbit7XG4rXHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBidGZfbWVtYmVyX3BhdGhfc3RyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aCxcbitcdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbit7XG4rXHRzaXplX3QgbGVuID0gMDtcbitcdGludCBpO1xuK1xuK1x0YnVmWzBdID0gJ1xcMCc7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXRoLVx1MDAzZWRlcHRoOyBpKyspIHtcbitcdFx0Y29uc3QgY2hhciAqbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHBhdGgtXHUwMDNlbWVtYmVyW2ldLVx1MDAzZW5hbWVfb2ZmKTtcbitcbitcdFx0aWYgKCFuYW1lIHx8ICFuYW1lWzBdKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX3N6IC0gbGVuLCBcIiVzJXNcIiwgbGVuID8gXCIuXCIgOiBcIlwiLCBuYW1lKTtcbitcdH1cbiB9XG4gXG4gZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuQEAgLTEyMDM5LDcgKzEyMTI3LDcgQEAgZ2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcbiBcdFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcdTAwMjZcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcbitcdFx0ICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90KSkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvIHZvaWQsIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxuXCIsXG4gXHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTIwNTUsNyArMTIxNDMsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHQgKiBzY2FsYXJzLiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZCBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4rXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxcblwiLFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEzMTExLDcgKzEzMTk5LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4rXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90KSkge1xuIFx0XHRcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7XG4gXHRcdFx0XHRjb25zdCBjaGFyICpleHBlY3RlZF90eXBlO1xuIFxuQEAgLTEzNjUzLDcgKzEzNzQxLDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdcbiBcbiBcdFx0c3RydWN0X21ldGEgPSBidGZfZmluZF9zdHJ1Y3RfbWV0YShyZXRfYnRmLCByZXRfYnRmX2lkKTtcbiBcdFx0aWYgKGlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpKSB7XG4tXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QsIDApKSB7XG4rXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJicGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG5AQCAtMTM3NjcsNyArMTM4NTUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDtcbiBcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4tXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xuK1x0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZCwgcmV0X25yZWdzID0gMTtcbiBcdHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYztcbiBcdHN0cnVjdCBidGYgKmRlc2NfYnRmO1xuIFx0aW50IGlkO1xuQEAgLTE0MDIxLDI1ICsxNDEwOSw1OSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0fVxuIFxuIFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xuLVx0XHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbitcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG4gXHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbiBcdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuIFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHtcbitcdFx0c3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCBwYXRoID0ge307XG4rXHRcdGNvbnN0IGNoYXIgKm1lbWJlcl9ub3RlID0gXCJcIjtcbitcbiBcdFx0LypcbiBcdFx0ICogVGhlIHJldHVybmVkIHN0cnVjdCBjb21lcyBiYWNrIGFzIHJhdyByZWdpc3RlciBiaXRzIG1vZGVsZWRcbi1cdFx0ICogYXMgYW4gdW5rbm93biBzY2FsYXIsIHNvIGl0IG11c3QgY29udGFpbiBvbmx5IHNjYWxhcnM6XG4tXHRcdCAqIG90aGVyd2lzZSBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcbi1cdFx0ICogYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuXG4rXHRcdCAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZFxuK1x0XHQgKiBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLlxuK1x0XHQgKiBPbmx5IHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGFyZSBhbGxvd2VkOiBhbiBhcmVuYSBwb2ludGVyXG4rXHRcdCAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmVcbitcdFx0ICogb25lIGZyb20gYW55IHNjYWxhciB3aXRoIGFkZHJfc3BhY2VfY2FzdCgpLCB3aGljaCBjb25maW5lcyB0aGVcbitcdFx0ICogcmVzdWx0IHRvIHRoZSBhcmVuYS5cbiBcdFx0ICovXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGRlc2NfYnRmLCB0LCAwKSkge1xuK1x0XHRpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCxcbitcdFx0XHRcdFx0ICAgIEJURl9NRU1CRVJfU0NBTEFSIHwgQlRGX01FTUJFUl9BUkVOQV9QVFIsIDAsIFx1MDAyNnBhdGgpKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsXG4tXHRcdFx0XHRcImtlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcXG5cIixcbitcdFx0XHRcdFwia2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcblwiLFxuIFx0XHRcdFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXG4gXHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpKTtcbitcdFx0XHRpZiAocGF0aC50b29fZGVlcCkge1xuK1x0XHRcdFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXG4rXHRcdFx0XHRcdGVudiwgXCIgSXQgbmVzdHMgc3RydWN0cyBtb3JlIHRoYW4gJWQgbGV2ZWxzIGRlZXAuXCIsXG4rXHRcdFx0XHRcdEJURl9NRU1CRVJfTUFYX0RFUFRIKTtcbitcdFx0XHR9IGVsc2UgaWYgKHBhdGguZGVwdGgpIHtcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBwYXRoLm1lbWJlcltwYXRoLmRlcHRoIC0gMV07XG4rXHRcdFx0XHRjaGFyIGJhZF9uYW1lW0JURl9NRU1CRVJfUEFUSF9MRU5dO1xuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpiYWRfdHlwZTtcbitcbitcdFx0XHRcdGJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsIFx1MDAyNnBhdGgsIGJhZF9uYW1lLCBzaXplb2YoYmFkX25hbWUpKTtcbitcdFx0XHRcdGJhZF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGJhZC1cdTAwM2V0eXBlLCBOVUxMKTtcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIm1lbWJlciAnJXMnIGhhcyB0eXBlICVzXFxuXCIsIGJhZF9uYW1lLFxuK1x0XHRcdFx0XHRidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbitcdFx0XHRcdG1lbWJlcl9ub3RlID0gYnBmX2RpYWdfZm10KFxuK1x0XHRcdFx0XHRlbnYsXG4rXHRcdFx0XHRcdFwiIEl0cyBtZW1iZXIgJyVzJyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuXCIsXG4rXHRcdFx0XHRcdGJhZF9uYW1lLCBidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbitcdFx0XHR9XG4rXHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4rXHRcdFx0XHRlbnYsIGluc25faWR4LCBcInVuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZVwiLFxuK1x0XHRcdFx0XCJDYWxsIGEga2VybmVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmx5IHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnMgYnkgdmFsdWUuXCIsXG4rXHRcdFx0XHRcIiVzKCkgcmV0dXJucyAlcyAlcyBieSB2YWx1ZS4lcyBcIlxuK1x0XHRcdFx0XCJPbmx5IGtmdW5jcyByZXR1cm5pbmcgc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycywgb3IgXCJcbitcdFx0XHRcdFwic3RydWN0dXJlcyBjb21wb3NlZCBvZiBzY2FsYXIgdmFsdWVzIG9yIGFyZW5hIHBvaW50ZXJzIGFyZSBcIlxuK1x0XHRcdFx0XCJzdXBwb3J0ZWQuXCIsXG4rXHRcdFx0XHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcbitcdFx0XHRcdGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC1cdTAwM2VuYW1lX29mZiksIG1lbWJlcl9ub3RlKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuLVx0XHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbitcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuIFx0XHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnB0cl90eXBlX2lkKTtcbiBcdFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFx1MDAyNm1ldGEsIHJlZ3MsIGluc25fYXV4LCBwdHJfdHlwZSwgZGVzY19idGYpO1xuQEAgLTE0MTcwLDcgKzE0MjkyLDggQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdCAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlXG4gXHQgKiBpdGVyYXRvciBwYXRoJ3MgZGlhZ25vc3RpYyBwb3NpdGlvbi5cbiBcdCAqL1xuLVx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuK1x0aWYgKHJldF9ucmVncyA9PSAxKVxuK1x0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4gXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jXG5AQCAtMSwxMSArMSw1MyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFwiYWdncmVnYXRlX3JldF9mdW5jLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJhZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLnNrZWwuaFwiXG4rXG4rc3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKVxuK3tcbitcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmLCAqbW9kdWxlX2J0ZiA9IE5VTEw7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4rXHRib29sIHRhZ2dlZCA9IGZhbHNlO1xuK1x0X19zMzIgaWQ7XG4rXG4rXHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuK1x0aWYgKCF2bWxpbnV4X2J0ZilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKFwiYnBmX3Rlc3Rtb2RcIiwgdm1saW51eF9idGYpO1xuK1x0aWYgKCFtb2R1bGVfYnRmKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIHByb2dfdGVzdF9yZXRfYXJlbmE6OmEgaXMgJ3ZvaWQgX19hcmVuYV90YWcgKic6IFBUUiAtXHUwMDNlIFRZUEVfVEFHIC1cdTAwM2Ugdm9pZCAqL1xuK1x0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKG1vZHVsZV9idGYsIFwicHJvZ190ZXN0X3JldF9hcmVuYVwiLCBCVEZfS0lORF9TVFJVQ1QpO1xuK1x0aWYgKGlkIFx1MDAzYz0gMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR0ID0gYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIGJ0Zl9tZW1iZXJzKGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCBpZCkpWzBdLnR5cGUpO1xuK1x0aWYgKCF0IHx8ICFidGZfaXNfcHRyKHQpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgdC1cdTAwM2V0eXBlKTtcbitcdHRhZ2dlZCA9IHQgXHUwMDI2XHUwMDI2IGJ0Zl9pc190eXBlX3RhZyh0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICFzdHJjbXAoYnRmX19uYW1lX2J5X29mZnNldChtb2R1bGVfYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSwgXCJhcmVuYVwiKTtcbitcbitvdXQ6XG4rXHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XG4rXHRidGZfX2ZyZWUodm1saW51eF9idGYpO1xuK1xuK1x0cmV0dXJuIHRhZ2dlZDtcbit9XG4gXG4gdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZClcbiB7XG4gXHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTtcbiBcdFJVTl9URVNUUyhhZ2dyZWdhdGVfcmV0X2tmdW5jKTtcbitcbitcdGlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpXG4rXHRcdFJVTl9URVNUUyhhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hKTtcbitcdGVsc2VcbitcdFx0dGVzdF9fc2tpcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbmluZGV4IDZmNjZmYzgyMmNlZGUuLmYwMDc3ZDk1MWEyNWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuIHR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjggdTEyODtcbkBAIC0yMzQsNCArMjM1LDE0OSBAQCBfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF91bmlvbl9wdHJfZmFpbCh2b2lkKVxuIFxuICNlbmRpZlxuIFxuKy8qXG4rICogZ2NjIHJldHVybnMgYSBieS12YWx1ZSBzdHJ1Y3QgdGhyb3VnaCBhIGhpZGRlbiBwb2ludGVyLCBhbmQgZW1pdHMgdGhlXG4rICogJ3IwID0gcjEnIHJldHVybmluZyBpdCBhZnRlciB0aGUgX19uYWtlZCBib2R5J3MgZXhpdCwgbGVhdmluZyB0aGVcbisgKiBzdWJwcm9ncmFtIGZhbGxpbmcgdGhyb3VnaC4gQnVpbGQgdGhlc2Ugd2l0aCBjbGFuZyBvbmx5LlxuKyAqL1xuKyNpZiBkZWZpbmVkKF9fY2xhbmdfXylcbitcbitzdHJ1Y3QgYXJlbmFfcGFpciB7XG4rXHR2b2lkIF9fYXJlbmEgKmxvO1xuK1x0dm9pZCBfX2FyZW5hICpoaTtcbit9O1xuK1xuK3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHtcbitcdHZvaWQgX19hcmVuYSAqcDtcbitcdF9fdTY0IHg7XG4rfTtcbitcbitzdHJ1Y3QgYXJlbmFfYXJyYXkge1xuK1x0dm9pZCBfX2FyZW5hICpwWzJdO1xuK307XG4rXG4rc3RydWN0IGFyZW5hX3NpbmdsZSB7XG4rXHR2b2lkIF9fYXJlbmEgKnA7XG4rfTtcbitcbit1bmlvbiBhcmVuYV91cGFpciB7XG4rXHR2b2lkIF9fYXJlbmEgKnA7XG4rXHRfX3U2NCBoYWx2ZXNbMl07XG4rfTtcbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJyMiA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0KTtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX2xvYWRfaWZfSklUZWQoKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3BhaXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9wYWlyXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3BhaXIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJyMiA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0KTtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX2xvYWRfaWZfSklUZWQoKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FuZF9zY2FsYXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9hcnJheSBnbG9iYWxfcmV0X2FyZW5hX2FycmF5KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjAgPSAwO1wiXG4rXHRcInIyID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQpO1xuK31cbitcbitTRUMoXCJ0Y1wiKVxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfYXJyYXkodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9hcnJheV07XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hcnJheSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQpO1xuK31cbitcbitTRUMoXCJ0Y1wiKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3NpbmdsZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZV07XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9zaW5nbGUpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHVuaW9uIGFyZW5hX3VwYWlyIGdsb2JhbF9yZXRfYXJlbmFfdW5pb24odm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMCA9IDA7XCJcbitcdFwicjIgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdCk7XG4rfVxuK1xuK1NFQyhcInRjXCIpXG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV91bmlvbih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5lOWM4MmRmOGVmYjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuQEAgLTE4LDYgKzE4LDggQEAgdm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXG4gXHQ6IFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOCksXG4gXHQgIFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKSxcbiBcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKSxcbitcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKSxcbitcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCksXG4gXHQgIFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKSxcbiBcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKSk7XG4gfVxuQEAgLTcxLDcgKzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gXG4gU0VDKFwidGNcIilcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuLV9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcIilcbitfX21zZyhcIm1lbWJlciAncCcgaGFzIHR5cGUgUFRSXCIpXG4gX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtODQsNiArODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rU0VDKFwidGNcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ2luLnAnIGhhcyB0eXBlIFBUUlwiKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfbmVzdGVkX3B0cl9mYWlsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjEgPSAwO1wiXG4rXHRcImNhbGwgJVticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWRdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInRjXCIpXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbitfX2ZhaWx1cmUgX19tc2coXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcIilcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX3Rvb19kZWVwX2ZhaWwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMSA9IDA7XCJcbitcdFwiY2FsbCAlW2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXBdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBTRUMoXCJ0Y1wiKVxuIF9fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiUjIgIXJlYWRfb2tcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2Rcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmNcbkBAIC0wLDAgKzEsMTI5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCJcbitcbisjaWYgZGVmaW5lZChfX2NsYW5nX21ham9yX18pIFx1MDAyNlx1MDAyNiBfX2NsYW5nX21ham9yX18gXHUwMDNlPSAyM1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbisvKlxuKyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2VcbisgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmXG4rICogcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVyIGRvaW5nIGl0LlxuKyAqL1xuKyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpXG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSh2b2lkICpjdHgpXG4re1xuK1x0dTMyIHZvbGF0aWxlIF9fYXJlbmEgKnBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqYSwgKmI7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSByO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEJvdGggaGFsdmVzIGNvbWUgYmFjayBpbiBSMDpSMiwgcG9pbnRpbmcgYXQgcGFnZSBhbmQgcGFnZSArIDQuICovXG4rXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoKHU2NClwYWdlKTtcbitcdGlmICghci5hIHx8ICFyLmIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0YSA9IGFyZW5hX3B0cihyLmEpO1xuK1x0YiA9IGFyZW5hX3B0cihyLmIpO1xuK1x0KmEgPSAxO1xuK1x0KmIgPSAyO1xuK1x0aWYgKCphICE9IDEpXG4rXHRcdHJldHVybiAzO1xuK1x0aWYgKCpiICE9IDIpXG4rXHRcdHJldHVybiA0O1xuK1xuK1x0LyogVGhlIGhhbHZlcyBhcmUgdGhlIGZpcnN0IHR3byBzbG90cyBvZiB0aGUgcGFnZSB0aGUgcHJvZ3JhbSBhbGxvY2F0ZWQuICovXG4rXHRwYWdlWzBdID0gNztcbitcdGlmICgqYSAhPSA3KVxuK1x0XHRyZXR1cm4gNTtcbitcdHBhZ2VbMV0gPSA5O1xuK1x0aWYgKCpiICE9IDkpXG4rXHRcdHJldHVybiA2O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfbWl4ZWQodm9pZCAqY3R4KVxuK3tcbitcdHUzMiBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgcjtcbitcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICpwO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqL1xuK1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKCh1NjQpcGFnZSk7XG4rXHRpZiAoIXIucClcbitcdFx0cmV0dXJuIDI7XG4rXHRpZiAoci50YWcgIT0gMHhiZWVmKVxuK1x0XHRyZXR1cm4gMztcbitcbitcdHAgPSBhcmVuYV9wdHIoci5wKTtcbitcdCpwID0gMztcbitcdGlmICgqcCAhPSAzKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1wiKVxuK19fbXNnKFwibWVtYmVyICdiJyBoYXMgdHlwZSBQVFJcIilcbitpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV91bnRhZ2dlZF9mYWlsKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByO1xuK1xuK1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKDApO1xuK1xuK1x0cmV0dXJuIHIuYSA9PSByLmI7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ2InIGhhcyB0eXBlIFBUUlwiKVxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KVxuK3tcbitcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gcjtcbitcbitcdHIgPSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbigwKTtcbitcbitcdHJldHVybiByLmEgPT0gci5iO1xuK31cbitcbisjZWxzZVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0XCIpXG4rX19za2lwKFwibmVlZHMgTExWTSAyM1wiKVxuK19fc3VjY2Vzc1xuK2ludCBkdW1teV90ZXN0KHZvaWQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuY1xuQEAgLTYwLDcgKzYwLDcgQEAgX19ub2lubGluZSBpbnQgZXhjZXB0aW9uX2NiX29rX2FyZ19zbWFsbChpbnQgYSlcbiBcbiBTRUMoXCI/dGNcIilcbiBfX2V4Y2VwdGlvbl9jYihleGNlcHRpb25fY2JfYmFkX3JldF90eXBlMSlcbi1fX2ZhaWx1cmUgX19tc2coXCJPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLlwiKVxuK19fZmFpbHVyZSBfX21zZyhcIk9ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnNcIilcbiBpbnQgcmVqZWN0X2V4Y2VwdGlvbl9jYl90eXBlXzEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIHtcbiBcdGJwZl90aHJvdygwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5pbmRleCA4MTVmMzQyZWI0YjA1Li42NzJhM2FhZGQ5Y2IyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5AQCAtNzM0LDQgKzczNCw1MiBAQCBpbnQgY2hlY2tfYXJlbmFfYXJnX3JldCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rI2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSBcdTAwMjZcdTAwMjYgX19jbGFuZ19tYWpvcl9fIFx1MDAzZT0gMjNcbitcbitzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHtcbitcdHUzMiBfX2FyZW5hICpmaXJzdDtcbitcdHUzMiBfX2FyZW5hICpzZWNvbmQ7XG4rfTtcbitcbitfX3dlYWsgc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBzcGxpdF9hcmVuYV9wYWdlKHUzMiBfX2FyZW5hICpwYWdlKVxuK3tcbitcdHN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgcGFpcjtcbitcbitcdHBhaXIuZmlyc3QgPSBwYWdlO1xuK1x0cGFpci5zZWNvbmQgPSBwYWdlICsgMTtcbitcbitcdHJldHVybiBwYWlyO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpXG4re1xuK1x0dTMyIF9fYXJlbmEgKnBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7XG4rXHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XG4rXG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0cGFpciA9IHNwbGl0X2FyZW5hX3BhZ2UocGFnZSk7XG4rXHRpZiAoIXBhaXIuZmlyc3QgfHwgIXBhaXIuc2Vjb25kKVxuK1x0XHRyZXR1cm4gMjtcbitcbitcdC8qIEJvdGggaGFsdmVzIG9mIHRoZSBwYWlyIG11c3Qgc3RpbGwgYmUgdXNhYmxlIGFzIGFyZW5hIHBvaW50ZXJzLiAqL1xuK1x0Zmlyc3QgPSBwYWlyLmZpcnN0O1xuK1x0c2Vjb25kID0gcGFpci5zZWNvbmQ7XG4rXHQqZmlyc3QgPSAxO1xuK1x0KnNlY29uZCA9IDI7XG4rXHRpZiAoKmZpcnN0ICE9IDEpXG4rXHRcdHJldHVybiAzO1xuK1x0aWYgKCpzZWNvbmQgIT0gMilcbitcdFx0cmV0dXJuIDQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCA4NTBjZjRmODMwYzQ4Li4wZWYyY2U4NzVkNzFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTk4MSw2ICs5ODEsNDggQEAgX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfcHRyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0cih1NjQgdGFnKVxuIFx0cmV0dXJuIHI7XG4gfVxuIFxuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKHU2NCBhZGRyKVxuK3tcbitcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9ICh2b2lkICopKGFkZHIgKyA0KSB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKHU2NCBhZGRyKVxuK3tcbitcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHIgPSB7IC5wID0gKHZvaWQgKilhZGRyLCAudGFnID0gMHhiZWVmIH07XG4rXG4rXHRyZXR1cm4gcjtcbit9XG4rXG4rX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQodTY0IGFkZHIpXG4re1xuK1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gTlVMTCB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24odTY0IGFkZHIpXG4re1xuK1x0dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByID0geyAuYSA9ICh2b2lkICopYWRkciB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQodTY0IHRhZylcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9uZXN0ZWQgciA9IHsgLmluID0geyAucCA9IE5VTEwgfSwgLnRhZyA9IHRhZyB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCh1NjQgdilcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHIgPSB7IC5sMSA9IHsgLmwyID0geyAubDMgPSB7IC5sNCA9IHsgLnYgPSB2IH0gfSB9IH0gfTtcbitcbitcdHJldHVybiByO1xuK31cbitcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpXG4ge1xuIFx0c3RydWN0IHByb2dfdGVzdF9yZXRfaWkgciA9IHsgLmEgPSBhLCAuYiA9IGIgfTtcbkBAIC0xNTM5LDYgKzE1ODEsMTIgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwsIEtGX0ZBU1RDQUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKVxuICNlbmRpZlxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IDY1ZTY5M2FkYTczNjQuLmEyZTllOWYzMTg0ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMjYsNiArMjYsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMge1xuIH07XG4gI2VuZGlmXG4gXG4rI2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpXG4rI2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoXCJhcmVuYVwiKSkpXG4rI2Vsc2VcbisjZGVmaW5lIF9fYXJlbmFfdGFnXG4rI2VuZGlmXG4rXG4gc3RydWN0IGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxO1xuIFxuIHN0cnVjdCBwcm9nX3Rlc3RfcGFzczEge1xuQEAgLTcwLDYgKzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7XHQvKiAxNiBieXRlczogY29udGFpbnMgYSBwb2ludGVyICovXG4gXHRfX3U2NCB0YWc7XG4gfTtcbiBcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSB7XHQvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovXG4rXHR2b2lkIF9fYXJlbmFfdGFnICphO1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqYjtcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHtcdC8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqL1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqcDtcbitcdF9fdTY0IHRhZztcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIHtcdC8qIDE2IGJ5dGVzOiAnYicgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqYTtcbitcdHZvaWQgKmI7XG4rfTtcbitcbit1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHtcdC8qIDggYnl0ZXM6ICdiJyBsYWNrcyB0aGUgYXJlbmEgdGFnICovXG4rXHR2b2lkIF9fYXJlbmFfdGFnICphO1xuK1x0dm9pZCAqYjtcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCB7XHQvKiAxNiBieXRlczogdGhlIHBvaW50ZXIgaGlkZXMgb25lIGxldmVsIGRvd24gKi9cbitcdHN0cnVjdCB7XG4rXHRcdHZvaWQgKnA7XG4rXHR9IGluO1xuK1x0X191NjQgdGFnO1xuK307XG4rXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCB7XHQvKiA4IGJ5dGVzLCBidXQgbmVzdGVkIHBhc3QgdGhlIDQtbGV2ZWwgd2FsayBsaW1pdCAqL1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3Qge1xuK1x0XHRcdFx0c3RydWN0IHtcbitcdFx0XHRcdFx0X191NjQgdjtcbitcdFx0XHRcdH0gbDQ7XG4rXHRcdFx0fSBsMztcbitcdFx0fSBsMjtcbitcdH0gbDE7XG4rfTtcbitcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcge1x0LyogMjQgYnl0ZXM6IHRvbyBsYXJnZSBmb3IgUjA6UjIgKi9cbiBcdF9fdTY0IGE7XG4gXHRfX3U2NCBiO1xuQEAgLTE1OSw2ICsyMDQsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wYWlyKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wYWlyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKF9fdTY0IHRhZykgX19rc3ltO1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07XG4rc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltO1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKF9fdTY0IGFkZHIpIF9fa3N5bTtcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07XG4rdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07XG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKF9fdTY0IHYpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKHZvaWQpIF9fa3N5bTtcbiBfX3U2NCBicGZfa2Z1bmNfY2FsbF9zdGFja19hcmcoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCxcbiBcdFx0XHQgICAgICAgX191NjQgZSwgX191NjQgZiwgX191NjQgZywgX191NjQgaCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjE4LjA4NDQ1OTc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDg5NDM4MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBQYXRjaCBBbmFseXNpczogS01TQU4gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllciB0byBwZXJtaXQga2Z1bmNzIGFuZCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cyBhbmQgdW5pb25zIGJ5IHZhbHVlLCBldmVuIGlmIHRob3NlIHN0cnVjdHMgY29udGFpbiBcImFyZW5hXCIgcG9pbnRlcnMsIHdoaWNoIGlzIGEgZGVwYXJ0dXJlIGZyb20gcHJldmlvdXMgcmVzdHJpY3Rpb25zLiBJdCBzZWVtcyB0aGUgbWFpbiBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGBidGZfbWVtYmVyX2tpbmRgLCBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAsIGFuZCBgYnRmX3R5cGVfaXNfYXJlbmFfcHRyYCwgYW5kIGFkanVzdG1lbnRzIHRvIGBtYXJrX2tmdW5jX3JldF9yZWdzYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB0aGUgY29yZSBsb2dpYyBpcyBzdGlsbCBhYm91dCB0aGUgKnZlcmlmaWVyKiAtIGl0J3MgYSB0eXBlIGNoZWNrZXIsIG5vdCBhIG1lY2hhbmlzbSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGF0YSB0cmFuc2ZlciBpdHNlbGYuIFRoZSB2ZXJpZmllciBmbGFncyB0aGUgcmV0dXJuIHJlZ2lzdGVycyBhcyB1bmtub3duLCBhbmQgdGhlIGtlcm5lbCBmdW5jdGlvbiBzdXBwbGllcyB0aGUgZGF0YS4gVGhlc2UgdmFsdWVzIHJlc2lkZSB3aXRoaW4gdGhlIEJQRiByZWdpc3RlcnMgdGhlbXNlbHZlcy4gVGh1cywgaXQncyBhYm91dCBjaGVja2luZyByZXR1cm4gdmFsdWUgdHlwZXMsIG5vdCBuZXcgbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UgZGlyZWN0bHkgZnJvbSB0aGUgdmVyaWZpZXIgY2hhbmdlLlxuXG5TbywgY291bGQgdW5pbml0aWFsaXplZCBtZW1vcnkgKmZyb20gYSBrZnVuYyogYmUgZXhwb3NlZD8gWWVzLCBwb3RlbnRpYWxseSwgaWYgYSBrZnVuYyByZXR1cm5zIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgdGhlIGV4aXN0aW5nIEtNU0FOIHNob3VsZCBhbHJlYWR5IGNhdGNoIHRoaXMgd2hlbiB0aGUgQlBGIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmVhZCBzdWNoIHZhbHVlcywgb3Igd2hlbiB0aGUga2Z1bmMgaXRzZWxmIHJldHVybnMgaXQuIENydWNpYWxseSwgdGhlIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgbmV3IGtmdW5jcy4gVGhlIGFkZGVkIHRlc3QgY2FzZXMgYXJlIGluaXRpYWxpemVkIGNvcnJlY3RseS5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBgbWFya19rZnVuY19yZXRfcmVnc2AuIEFoLCBpdCBqdXN0IGhhbmRsZXMgdmVyaWZpZXIgc3RhdGUgdHJhY2tpbmchIEl0IG1hcmtzIHRob3NlIHJlZ2lzdGVycyBhcyBjb250YWluaW5nIFwidW5rbm93blwiIHZhbHVlcywgYnV0IG5vdGhpbmcgbW9yZSwgY29uZmlybWluZyB0aGF0IHRoZSB2YWx1ZXMgYXJlIGJlaW5nIGdlbmVyYXRlZCBieSB0aGUga2Z1bmMgaXRzZWxmLiBUaGlzIGlzIGNyaXRpY2FsOiB0aGUgdmVyaWZpZXIgaXNuJ3QgY3JlYXRpbmcgb3IgaW5pdGlhbGl6aW5nIG1lbW9yeSBoZXJlLiBUaGUgYHByZXBhcmVfZnVuY19leGl0YCBwYXJ0IGlzIHNpbXBseSBjb3B5aW5nIHJlZ2lzdGVycywgbm90aGluZyBuZXcuXG5cbkZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyBwdXJlbHkgdmVyaWZpZXIgbG9naWMuIEl0J3MgYWJvdXQgc3RhdGljIGFuYWx5c2lzLCBub3QgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBrZnVuY3MgYXJlIHJlc3BvbnNpYmxlIGZvciByZXR1cm5pbmcgaW5pdGlhbGl6ZWQgZGF0YS4gVGh1cywgaWYgYSBrZnVuYyAqZGlkKiByZXR1cm4gdW5pbml0aWFsaXplZCBkYXRhLCB0aGF0J3MgYSBidWcgKndpdGhpbiB0aGUga2Z1bmMqLCBub3QgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIHBhdGNoLCBhbmQgZXhpc3RpbmcgS01TQU4vS0FTQU4gd291bGQgYWRkcmVzcyB0aGlzLiBJdCdzIGNvbmZpbmVkIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMgcGhhc2Ugb2YgQlBGIHByb2dyYW1zLlxuXG5SZXZpZXdpbmcgS01TQU4ncyBjcml0aWNhbCBzY2VuYXJpb3Mg4oCTIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgZmllbGRzIG1heSBiZSB1bmluaXRpYWxpemVkLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgYnVmZmVyIGFjY2VzcyB3aXRoIGluY29ycmVjdCBib3VuZHMgY2hlY2tzIOKAkyBub25lIG9mIHRoZXNlIGFwcGx5IHRvIHRoZSBjb3JlIHZlcmlmaWVyIGNoYW5nZXMuIFRoZSB0ZXN0IGNhc2VzIHRoZW1zZWx2ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBhcmUgc29sZWx5IGluIHRoZSB0eXBlLWNoZWNraW5nIGFuZCByZWdpc3RlciBzdGF0ZS10cmFja2luZyBsb2dpYyBvZiB0aGUgdmVyaWZpZXIuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBub3RoaW5nIHRoYXQgaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBiZXlvbmQgd2hhdCdzIGFscmVhZHkgY292ZXJlZCBieSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHRvb2xzLiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkzMiwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDU6MzYuMTczODk5NzUzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGtmdW5jcyBhbmQgc3VicHJvZ3JhbXMgdG8gcmV0dXJuIHN0cnVjdHMvdW5pb25zIGNvbnRhaW5pbmcgYXJlbmEgcG9pbnRlcnMgYnkgdmFsdWUuIEl0IHVwZGF0ZXMgdGhlIHZlcmlmaWVyJ3MgdHlwZSBjaGVja2luZyBsb2dpYyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIHN0YXRpYyBhbmFseXNpcyBwaGFzZSBvZiBCUEYgcHJvZ3JhbXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlIHZlcmlmaWVyLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cga2Z1bmNzIGFuZCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cy91bmlvbnMgY29udGFpbmluZyBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4gSXQgdXBkYXRlcyB0aGUgdmVyaWZpZXIncyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGUgdmVyaWZpZXIuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2g5cg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-27 06:26:38 +0000 UTC FinishedAt: 2026-08-27 06:45:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "48b69cc8825d411a4c4df32de854434e9235a1b0", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "48b69cc8825d411a4c4df32de854434e9235a1b0", "config_name": "upstream-apparmor-kasan.config", "series_id": "0e874796-87e7-4ca4-a3c7-ddc18b694792" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "btf_struct_is_composed_of", "btf_type_is_arena_ptr", "btf_prepare_func_args" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-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+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZiYjMzQ7LAogICAgJiMzNDtidGZfdHlwZV9pc19hcmVuYV9wdHImIzM0OywKICAgICYjMzQ7YnRmX3ByZXBhcmVfZnVuY19hcmdzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBrZnVuY3MgYW5kIHN1YnByb2dyYW1zIHRvIHJldHVybiBzdHJ1Y3RzL3VuaW9ucyBjb250YWluaW5nIGFyZW5hIHBvaW50ZXJzIGJ5IHZhbHVlLiBJdCB1cGRhdGVzIHRoZSB2ZXJpZmllciYjMzk7cyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGUgdmVyaWZpZXIuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgcmV0dXJuaW5nIHN0cnVjdHMgb3IgdW5pb25zIGJ5IHZhbHVlIGZyb20ga2Z1bmNzIGFuZCBnbG9iYWwgc3VicHJvZ3JhbXMgaWYgdGhleSBhcmUgY29tcG9zZWQgb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgKHBvaW50ZXJzIHdpdGggdGhlIGBidGZfdHlwZV90YWcoXCYjMzQ7YXJlbmFcJiMzNDspYCBhdHRyaWJ1dGUpLiBQcmV2aW91c2x5LCBvbmx5IHNjYWxhcnMgd2VyZSBhbGxvd2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZlcmlmaWVyJiMzOTtzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIChoYW5kbGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCBhcmVuYSBwb2ludGVycykuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBzdWNoIGtmdW5jcyBvciBzdWJwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFmN2U4YThhOTUwMWU1ZWEzYmNhOWI4ZTEyMmZkYzRlY2M1NDVlNjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjo0MzozNCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggODlkZWE2YjBiMDI0MS4uOTZiZjYzZDM0NDMyMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC01ODEsMjAgJiM0Mzs1ODEsMjcgQEAgYWdhaW5zdCB0aGUgYXJlbmEuIExhcmdlciBhY2Nlc3NlcyBtdXN0IHZlcmlmeSB0aGUgcmFuZ2UgZXhwbGljaXRseS5cbiBBIGtmdW5jIG1heSByZXR1cm4gYSBzY2FsYXIsIGEgcG9pbnRlciwgb3IgYSBzbWFsbCBzdHJ1Y3Qgb3IgdW5pb24gYnlcbiB2YWx1ZS4gQSBzY2FsYXIgb3IgcG9pbnRlciBvZiB1cCB0byA4IGJ5dGVzIGlzIHJldHVybmVkIGluIFIwLCBhcyB1c3VhbC5cbiBcbi1BIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFyc1xuLShyZWN1cnNpdmVseSksIHdoZXJlIGEgc2NhbGFyIGlzIGFuIGludGVnZXIgb3IgYW4gZW51bTsgYXJyYXlzIG9mIHNjYWxhcnMgYXJlXG4tYWxsb3dlZCBhcyBtZW1iZXJzLiBJdHMgYnl0ZXMgYXJlIGhhbmRlZCBiYWNrIHRvIHRoZSBwcm9ncmFtIGFzIHRoZSByYXdcbi1jb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyXG4tYW5kIGVzY2FwZSB0aGUgdmVyaWZpZXImIzM5O3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIEEgc3RydWN0XG4tb3IgdW5pb24gd2l0aCBhIHBvaW50ZXIgbWVtYmVyIGlzIHRoZXJlZm9yZSByZWplY3RlZCBhdCBsb2FkIHRpbWUsIGFuZCBzbyBpc1xuLW9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3QgcmV0dXJuIGluIFIwOlIyIGF0XG4tYWxsLlxuJiM0MztBIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycyBhbmQgYXJlbmFcbiYjNDM7cG9pbnRlcnMgKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtIGFuZCBhbiBhcmVuYVxuJiM0Mztwb2ludGVyIGlzIG9uZSBjYXJyeWluZyB0aGUgYGBidGZfdHlwZV90YWcoXCYjMzQ7YXJlbmFcJiMzNDspYGAgYXR0cmlidXRlOyBhcnJheXMgb2ZcbiYjNDM7ZWl0aGVyIGFyZSBhbGxvd2VkIGFzIG1lbWJlcnMuIEl0cyBieXRlcyBhcmUgaGFuZGVkIGJhY2sgdG8gdGhlIHByb2dyYW0gYXMgdGhlXG4mIzQzO3JhdyBjb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBtZW1iZXIgb2YgYW55IG90aGVyIHBvaW50ZXIgdHlwZSB3b3VsZCBiZVxuJiM0MztsYXVuZGVyZWQgaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kXG4mIzQzO3JlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3Qgb3IgdW5pb24gd2l0aCBzdWNoIGEgbWVtYmVyIGlzIHRoZXJlZm9yZSByZWplY3RlZFxuJiM0MzthdCBsb2FkIHRpbWUsIGFuZCBzbyBpcyBvbmUgd2l0aCBhIGZsb2F0aW5nLXBvaW50IG1lbWJlciwgd2hpY2ggdGhlIEFCSSBtYXkgbm90XG4mIzQzO3JldHVybiBpbiBSMDpSMiBhdCBhbGwuXG4mIzQzO1xuJiM0MztBbiBhcmVuYSBwb2ludGVyIG1lbWJlciBpcyBoYW5kZWQgYmFjayBhcyBhIHNjYWxhciB0b28sIGJ1dCBub3RoaW5nIGlzIGxvc3QgYnlcbiYjNDM7dGhhdC4gVGhlIHByb2dyYW0gbXVzdCBgYGNhc3Rfa2VybigpYGAgdGhlIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCwgYW5kIHRoZVxuJiM0Mzt2ZXJpZmllciBhbGxvd3MgdGhhdCBjYXN0IG9uIGFueSBzY2FsYXIsIHNvIGEgbGF1bmRlcmVkIGFyZW5hIGFkZHJlc3MgZ2l2ZXMgdGhlXG4mIzQzO3Byb2dyYW0gbm8gcmVhY2ggaXQgZGlkIG5vdCBhbHJlYWR5IGhhdmUuIFRoZSByZXN1bHQgaXMgY29uZmluZWQgdG8gdGhlXG4mIzQzO3Byb2dyYW0mIzM5O3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuXG4gXG4gQSBrZnVuYyBtYXkgYWxzbyByZXR1cm4gYSB2YWx1ZSBsYXJnZXIgdGhhbiA4IGJ5dGVzIGFuZCB1cCB0byAxNiBieXRlcyAtLSBhXG4tc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZFxuLWluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNIHVzZXMgZm9yIHRoZSBCUEZcbi10YXJnZXQ6IHRoZSBmaXJzdCA4IGJ5dGVzIGluIFIwIGFuZCB0aGUgc2Vjb25kIDggYnl0ZXMgaW4gUjIuIEEgc3RydWN0IG9yXG4tdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLlxuJiM0MztzdHJ1Y3Qgb3IgdW5pb24gb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMsIG9yIGFuIGBgX19pbnQxMjhgYC4gU3VjaCBhXG4mIzQzO3ZhbHVlIGlzIHJldHVybmVkIGluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNXG4mIzQzO3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLlxuJiM0MztBIHN0cnVjdCBvciB1bmlvbiBvZiA4IGJ5dGVzIG9yIGxlc3MgaXMgcmV0dXJuZWQgaW4gUjAgYWxvbmUuXG4gXG4gOjpcbiBcbkBAIC02MjAsMTAgJiM0Mzs2MjcsMTAgQEAgdXNlZCB3aGVuIHRoZSBwcm9ncmFtIGlzIEpJVGVkLCBzaW5jZSB0aGUgaW50ZXJwcmV0ZXIgcHJvcGFnYXRlcyBvbmx5IFIwIG91dCBvZlxuIGEgc3VicHJvZ3JhbTogd2l0aG91dCBhIEpJVCB0aGUgcmV0dXJuIHZhbHVlIHN0YXlzIGluIFIwIGFsb25lLCBhbmQgYSBjYWxsZXJcbiByZWFkaW5nIFIyIGlzIHJlamVjdGVkIGZvciByZWFkaW5nIGFuIHVuaW5pdGlhbGl6ZWQgcmVnaXN0ZXIuIEEgZ2xvYmFsXG4gc3VicHJvZ3JhbSBpcyB2ZXJpZmllZCBpbiBpc29sYXRpb24sIHNvIGl0cyBieS12YWx1ZSBzdHJ1Y3Qgb3IgdW5pb24gcmV0dXJuIGlzXG4tcmVzdHJpY3RlZCB0byBzY2FsYXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkXG4taW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcyBub3QgY292ZXJlZDogaXRzIHJldHVyblxuLXZhbHVlIGlzIHRoZSBwcm9ncmFtJiMzOTtzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjAgYWxvbmUsIHNvIGEgZGVjbGFyZWQgdXBwZXJcbi1oYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC5cbiYjNDM7cmVzdHJpY3RlZCB0byBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyBqdXN0IGxpa2UgYSBrZnVuYyYjMzk7czsgYSBzdGF0aWNcbiYjNDM7c3VicHJvZ3JhbSBpcyB2ZXJpZmllZCBpbmxpbmUgYW5kIGhhcyBubyBzdWNoIHJlc3RyaWN0aW9uLiBUaGUgbWFpbiBwcm9ncmFtIGlzXG4mIzQzO25vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuIHZhbHVlIGlzIHRoZSBwcm9ncmFtJiMzOTtzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjBcbiYjNDM7YWxvbmUsIHNvIGEgZGVjbGFyZWQgdXBwZXIgaGFsZiBpcyBuZXZlciBsb29rZWQgYXQuXG4gXG4gQSBnbG9iYWwgc3VicHJvZ3JhbSBtdXN0IGxlYXZlIGEgc2NhbGFyIGluICpldmVyeSogcmVnaXN0ZXIgb2YgdGhlIHBhaXIsIHNvXG4gYm90aCBoYWx2ZXMgb2YgdGhlIHJldHVybmVkIHZhbHVlIGhhdmUgdG8gYmUgYXNzaWduZWQuIExlYXZpbmcgdGhlIHVwcGVyIGhhbGZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuaW5kZXggMDA0YjA2Nzg1NTIxYy4uYWU5ZjYwNjUzOWY0MSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcbkBAIC0xNDg4LDggJiM0MzsxNDg4LDE1IEBAIGludCBicGZfam1wX29mZnNldChzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuIHN0cnVjdCBicGZfaWFycmF5ICpicGZfaW5zbl9zdWNjZXNzb3JzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHUzMiBpZHgpO1xuIHZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKTtcbiBib29sIGJwZl9zdWJwcm9nX2lzX2dsb2JhbChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7XG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKTtcbiYjNDM7XG4mIzQzOy8qIEtpbmRzIG9mIG1lbWJlciBhIGJ5LXZhbHVlIHN0cnVjdCBvciB1bmlvbiBtYXkgYmUgY29tcG9zZWQgb2YuICovXG4mIzQzO2VudW0gYnRmX21lbWJlcl9raW5kIHtcbiYjNDM7XHRCVEZfTUVNQkVSX1NDQUxBUlx0PSBCSVQoMCksIC8qIGFuIGludCBvciBhbiBlbnVtICovXG4mIzQzO1x0QlRGX01FTUJFUl9BUkVOQV9QVFJcdD0gQklUKDEpLCAvKiBhIHBvaW50ZXIgY2FycnlpbmcgdGhlIFwmIzM0O2FyZW5hXCYjMzQ7IHR5cGUgdGFnICovXG4mIzQzO307XG4mIzQzO1xuJiM0Mztib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuJiM0MztcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzKTtcbiBcbiBpbnQgYnBmX2ZpbmRfc3VicHJvZyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgb2ZmKTtcbiBib29sIGJwZl9pc190aHJvd19rZnVuYyhzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnRmLmggYi9pbmNsdWRlL2xpbnV4L2J0Zi5oXG5pbmRleCA4OWQ1YTVjNGYxMTcxLi5kZGQwZjRmMzJkMjRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9idGYuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idGYuaFxuQEAgLTIzNSw2ICYjNDM7MjM1LDcgQEAgc3RydWN0IGJ0Zl9yZWNvcmQgKmJ0Zl9wYXJzZV9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVcbiBcdFx0XHRcdCAgICB1MzIgZmllbGRfbWFzaywgdTMyIHZhbHVlX3NpemUpO1xuIGludCBidGZfY2hlY2tfYW5kX2ZpeHVwX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHN0cnVjdCBidGZfcmVjb3JkICpyZWMpO1xuIGJvb2wgYnRmX3R5cGVfaXNfdm9pZChjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpO1xuJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7XG4gczMyIGJ0Zl9maW5kX2J5X25hbWVfa2luZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGtpbmQpO1xuIHMzMiBicGZfZmluZF9idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgdTMyIGtpbmQsIHN0cnVjdCBidGYgKipidGZfcCk7XG4gc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDkxYjhjZTc3ZjY5OWEuLmY2ZDgyYThmZDYxN2IgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtMzUyMyw2ICYjNDM7MzUyMywyMiBAQCBzdGF0aWMgaW50IGJ0Zl90eXBlX3RhZ193YWxrKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7Ym9vbCBidGZfdHlwZV9pc19hcmVuYV9wdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWJ0Zl90eXBlX2lzX3B0cih0KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0Zm9yICh0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LVx1MDAzZXR5cGUpOyBidGZfdHlwZV9pc19tb2RpZmllcih0KTtcbiYjNDM7XHQgICAgIHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtXHUwMDNldHlwZSkpIHtcbiYjNDM7XHRcdGlmICghYnRmX3R5cGVfaXNfdHlwZV90YWcodCkgfHwgYnRmX3R5cGVfa2ZsYWcodCkpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFzdHJjbXAoX19idGZfbmFtZV9ieV9vZmZzZXQoYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSwgXCYjMzQ7YXJlbmFcJiMzNDspKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGJ0Zl9maW5kX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4gXHRcdFx0IHUzMiBvZmYsIGludCBzeiwgc3RydWN0IGJ0Zl9maWVsZF9pbmZvICppbmZvLCB1MzIgZmllbGRfbWFzaylcbiB7XG5AQCAtNzkyNyw1MSAmIzQzOzc5NDMsMTkgQEAgc3RhdGljIGludCBidGZfc2Nhbl9kZWNsX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGJ0Zl9zY2FuX3R5cGVfdGFncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsXG4tXHRcdFx0ICAgICAgdTMyICp0YWdzKVxuJiM0MztzdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxuIHtcbi1cdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVfdGFnX21hdGNoIGZ1bmNfdHlwZV90YWdzW10gPSB7XG4tXHRcdHsgXCYjMzQ7YXJlbmFcJiMzNDssIEFSR19UQUdfQVJFTkEgfSxcbi1cdH07XG4tXHRzdHJ1Y3QgYnRmX3R5cGVfdGFnX3dhbGtfY3R4IGN0eDtcbi1cdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcbi1cdGludCBlcnI7XG4tXG4gXHQvKiBGaW5kIHRoZSBmaXJzdCBwb2ludGVyIHR5cGUgaW4gdGhlIGNoYWluLiAqL1xuLVx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcyxcbi1cdCAqIHdoaWNoIG5laXRoZXIgTExWTSBub3IgR0NDIHN1cHBvcnQgYW55d2F5LlxuLVx0ICovXG4tXHRpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRjdHgudCA9IHQ7XG4tXHRlcnIgPSBidGZfdHlwZV90YWdfd2FsayhidGYsIFx1MDAyNmN0eCwgZnVuY190eXBlX3RhZ3MsXG4tXHRcdFx0XHRBUlJBWV9TSVpFKGZ1bmNfdHlwZV90YWdzKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGJwZl9sb2coXHUwMDI2ZW52LVx1MDAzZWxvZyxcbi1cdFx0XHRcJiMzNDtmdW5jdGlvbiBzaWduYXR1cmUgbWVtYmVyIGhhcyBtdWx0aXBsZSB0eXBlIHRhZ3NcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVx0KnRhZ3MgfD0gY3R4LnJlcztcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdGlmIChidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbiYjNDM7XHRcdCp0YWdzIHw9IEFSR19UQUdfQVJFTkE7XG4gfVxuIFxuIC8qIENoZWNrIHdoZXRoZXIgdGhlIHR5cGUgaXMgYSB2YWxpZCByZXR1cm4gdHlwZS4gKi9cbiBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidGYsXG4gXHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHN1YnByb2csIGJvb2wgaXNfZ2xvYmFsKVxuIHtcbi1cdHUzMiB0YWdzID0gMDtcbi1cdGludCBlcnI7XG4tXG4tXHRlcnIgPSBidGZfc2Nhbl90eXBlX3RhZ3MoZW52LCBidGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2dGFncyk7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuIFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdC1cdTAwM2V0eXBlLCBOVUxMKTtcbiBcbiBcdC8qXG5AQCAtNzk3OSw3ICYjNDM7Nzk2Myw3IEBAIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0XG4gXHQgKiBHZW5lcmFsIGFyZW5hIHZhcmlhYmxlcyBhcmUgbm90IGFsbG93ZWQsIHNpbmNlIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHJldHVybiBieSB2YWx1ZVxuIFx0ICogYSB2YXJpYWJsZSB0aGF0JiMzOTtzIG9uIHRoZSBoZWFwIGluIHRoZSBmaXJzdCBwbGFjZS5cbiBcdCAqL1xuLVx0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2ICh0YWdzIFx1MDAyNiBBUkdfVEFHX0FSRU5BKSBcdTAwMjZcdTAwMjYgYnRmX3R5cGVfaXNfcHRyKHQpKVxuJiM0MztcdGlmIChzdWJwcm9nIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKiBXZSBhbHdheXMgYWNjZXB0IHZvaWQgb3Igc2NhbGFycy4gKi9cbkBAIC03OTg5LDEzICYjNDM7Nzk3MywyMiBAQCBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidFxuIFx0aWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSBcdTAwMjZcdTAwMjYgdC1cdTAwM2VzaXplIFx1MDAzYz0gMTYpIHtcbiBcdFx0LypcbiBcdFx0ICogQSBnbG9iYWwgZnVuY3Rpb24mIzM5O3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZVxuLVx0XHQgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWxcbi1cdFx0ICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZFxuLVx0XHQgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi5cbiYjNDM7XHRcdCAqIHNjYWxhciBwYWlyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGFcbiYjNDM7XHRcdCAqIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gT25seVxuJiM0MztcdFx0ICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzXG4mIzQzO1x0XHQgKiBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUgb25lXG4mIzQzO1x0XHQgKiBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlXG4mIzQzO1x0XHQgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc29cbiYjNDM7XHRcdCAqIGl0cyBjYWxsZXIgcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXNcbiYjNDM7XHRcdCAqIGZpbmUuXG4gXHRcdCAqL1xuIFx0XHRib29sIGxvY2FsX2Z1bmMgPSBzdWJwcm9nIFx1MDAyNlx1MDAyNiAhaXNfZ2xvYmFsO1xuJiM0MztcdFx0dTMyIG1lbWJlcl9raW5kcyA9IEJURl9NRU1CRVJfU0NBTEFSO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzdWJwcm9nKVxuJiM0MztcdFx0XHRtZW1iZXJfa2luZHMgfD0gQlRGX01FTUJFUl9BUkVOQV9QVFI7XG4gXG4tXHRcdGlmIChsb2NhbF9mdW5jIHx8IGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIHQsIDApKVxuJiM0MztcdFx0aWYgKGxvY2FsX2Z1bmMgfHwgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgbWVtYmVyX2tpbmRzKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC04MDkxLDcgJiM0Mzs4MDg0LDggQEAgaW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbiBcdFx0aWYgKGlzX2dsb2JhbCkge1xuIFx0XHRcdGJwZl9sb2cobG9nLFxuIFx0XHRcdFx0XCYjMzQ7R2xvYmFsIGZ1bmN0aW9uICVzKCkgaGFzIHVuc3VwcG9ydGVkIHJldHVybiB0eXBlLiBcJiMzNDtcbi1cdFx0XHRcdFwmIzM0O09ubHkgdm9pZCwgc2NhbGFyLCBvciBhIHNjYWxhci1vbmx5IHN0cnVjdC91bmlvbiB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFwmIzM0O09ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIFwmIzM0O1xuJiM0MztcdFx0XHRcdFwmIzM0O3NjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cXG5cJiMzNDssXG4gXHRcdFx0XHR0bmFtZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycjtcbkBAIC04MTA2LDkgJiM0Mzs4MTAwLDcgQEAgaW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBidGZfc2Nhbl90eXBlX3RhZ3MoZW52LCBidGYsIGFyZ3NbaV0udHlwZSwgXHUwMDI2dGFncyk7XG4tXHRcdGlmIChlcnIpXG4tXHRcdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGJ0Zl9zY2FuX3R5cGVfdGFncyhidGYsIGFyZ3NbaV0udHlwZSwgXHUwMDI2dGFncyk7XG4gXG4gXHRcdHQgPSBidGZfdHlwZV9ieV9pZChidGYsIGFyZ3NbaV0udHlwZSk7XG4gXHRcdHdoaWxlIChidGZfdHlwZV9pc19tb2RpZmllcih0KSlcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbmluZGV4IGUwMzZhZTIwYmY2YjkuLjlhMzY4MDgxMzZjOWEgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xuQEAgLTk5OTUsOSAmIzQzOzk5OTUsMTQgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFyZXR1cm5zX3ZvaWQpIHtcbiBcdFx0XHRucmVncyA9IGJwZl9yZXRfcmVnX3BhaXIoZW52LCBzdWJwcm9nKSA/IDIgOiAxO1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXHUwMDNlcmVncywgcmV0X3JlZ3NbaV0pO1xuJiM0MztcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzWzBdKTtcbiBcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4mIzQzO1x0XHRcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW3JldF9yZWdzW2ldXSwgTlVMTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbiYjNDM7XHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbiYjNDM7XHRcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4mIzQzO1x0XHRcdH1cbiBcdFx0fVxuIFxuIFx0XHRpZiAoZW52LVx1MDAzZXN1YnByb2dfaW5mb1tzdWJwcm9nXS5taWdodF90aHJvdykge1xuQEAgLTEwNDAzLDEwICYjNDM7MTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGVcbiBcdFx0ICogcmV0dXJuIHJlZ2lzdGVyKHMpXG4gXHRcdCAqL1xuLVx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkmIzQzOyYjNDM7KVxuLVx0XHRcdGNhbGxlci1cdTAwM2VyZWdzW3JldF9yZWdzW2ldXSA9IGNhbGxlZS1cdTAwM2VyZWdzW3JldF9yZWdzW2ldXTtcbi1cdFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbcmVnbm9dLCBcdTAwMjZjYWxsZWUtXHUwMDNlcmVnc1tyZWdub10sXG4mIzQzO1x0XHRcdFx0XHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xuJiM0MztcdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZWdub10gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZWdub107XG4mIzQzO1x0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcbkBAIC0xMTM0MiwxNSAmIzQzOzExMzUxLDMzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gLypcbiAgKiBNYXJrIHRoZSByZWdpc3RlcihzKSBob2xkaW5nIGEgQHNpemUgYnl0ZSBrZnVuYyByZXR1cm4gdmFsdWUgYXMgdW5rbm93blxuLSAqIHNjYWxhcnMuIEJvdGggaGFsdmVzIG9mIGEgcmVnaXN0ZXIgcGFpciBhcmUgdHJlYXRlZCB0aGUgc2FtZSB3YXkuXG4mIzQzOyAqIHNjYWxhcnMgYW5kIHJldHVybiBob3cgbWFueSByZWdpc3RlcnMgdGhhdCB0b29rLiBCb3RoIGhhbHZlcyBvZiBhIHJlZ2lzdGVyXG4mIzQzOyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LlxuJiM0MzsgKlxuJiM0MzsgKiBSMCBpcyB3cml0dGVuIGluIHRoZSBkaWFnbm9zdGljIG1vZGlmaWNhdGlvbiBzY29wZSB0aGUgY2FsbGVyIG9wZW5lZCBiZWZvcmVcbiYjNDM7ICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdFxuJiM0MzsgKiBzY29wZSBpcyB3aGF0IGNhcnJpZXMgaXRzIHByZS1jYWxsIHZhbHVlIGludG8gdGhlIGhpc3RvcnkuIEEgc2NvcGUgdHJhY2tzIGFcbiYjNDM7ICogc2luZ2xlIHJlZ2lzdGVyIGFuZCBkb2VzIG5vdCBuZXN0LCBzbyBjbG9zZSBpdCBiZWZvcmUgcmVjb3JkaW5nIHRoZSByZXN0IG9mXG4mIzQzOyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJiMzOTtzIHNjb3BlIG9wZW4gZm9yXG4mIzQzOyAqIHRoZSBjYWxsZXIgdG8gY2xvc2UsIHNvIGEgbGF0ZXIgd3JpdGUgdG8gUjAgc3RpbGwgbGFuZHMgaW4gaXQuXG4gICovXG4tc3RhdGljIHZvaWQgbWFya19rZnVuY19yZXRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLVx0XHRcdFx0c3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKVxuJiM0MztzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSlcbiB7XG4gXHR1MzIgaSwgbnJlZ3MgPSByZXRfcmVnc19jbnQoc2l6ZSk7XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucmVnczsgaSYjNDM7JiM0MzspXG4mIzQzO1x0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJldF9yZWdzWzBdKTtcbiYjNDM7XHRpZiAobnJlZ3MgPT0gMSlcbiYjNDM7XHRcdHJldHVybiBucmVncztcbiYjNDM7XG4mIzQzO1x0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuJiM0MztcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yZWdzOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7XG4mIzQzO1x0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gbnJlZ3M7XG4gfVxuIFxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxuQEAgLTExNjE5LDEwICYjNDM7MTE2NDYsMzMgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KGNvbnN0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwgdTMyIGFyZ19cbiBcdHJldHVybiBhcmduIFx1MDAzYz0gYXJnX2lkeDtcbiB9XG4gXG4tLyogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQgKi9cbi1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLVx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMpXG4mIzQzOyNkZWZpbmUgQlRGX01FTUJFUl9NQVhfREVQVEhcdDRcbiYjNDM7I2RlZmluZSBCVEZfTUVNQkVSX1BBVEhfTEVOXHQ2NFxuJiM0MztcbiYjNDM7c3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCB7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcltCVEZfTUVNQkVSX01BWF9ERVBUSF07XG4mIzQzO1x0aW50IGRlcHRoO1xuJiM0MztcdGJvb2wgdG9vX2RlZXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBidGZfbWVtYmVyX2tpbmRfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiYjNDM7XHRcdFx0XHQgICAgdTMyIG1lbWJlcl9raW5kcylcbiYjNDM7e1xuJiM0MztcdGlmICgobWVtYmVyX2tpbmRzIFx1MDAyNiBCVEZfTUVNQkVSX1NDQUxBUikgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdGlmICgobWVtYmVyX2tpbmRzIFx1MDAyNiBCVEZfTUVNQkVSX0FSRU5BX1BUUikgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZXR1cm5zIHRydWUgaWYgZXZlcnkgbWVtYmVyIG9mIHN0cnVjdCBAdCBpcyBvZiBhIGtpbmQgbGlzdGVkIGluXG4mIzQzOyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5XG4mIzQzOyAqIG1lbWJlciBjb3VudHMgYXMgaXRzIGVsZW1lbnQgdHlwZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuJiM0MztcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcywgaW50IHJlYyxcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoICpwYXRoKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyO1xuQEAgLTExNjM2LDI3ICYjNDM7MTE2ODYsNjUgQEAgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QobWVtYmVyX3R5cGUpKSB7XG4tXHRcdFx0aWYgKHJlYyBcdTAwM2U9IDMpIHtcbiYjNDM7XHRcdFx0aWYgKHJlYyBcdTAwM2U9IEJURl9NRU1CRVJfTUFYX0RFUFRIIC0gMSkge1xuIFx0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdFx0aWYgKHBhdGgpXG4mIzQzO1x0XHRcdFx0XHRwYXRoLVx1MDAzZXRvb19kZWVwID0gdHJ1ZTtcbiBcdFx0XHRcdHJldHVybiBmYWxzZTtcbiBcdFx0XHR9XG4tXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICYjNDM7IDEpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBidGYsIG1lbWJlcl90eXBlLCBtZW1iZXJfa2luZHMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICByZWMgJiM0MzsgMSwgcGF0aCkpXG4mIzQzO1x0XHRcdFx0Z290byBiYWRfcGF0aDtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAoYnRmX3R5cGVfaXNfYXJyYXkobWVtYmVyX3R5cGUpKSB7XG4gXHRcdFx0YXJyYXkgPSBidGZfYXJyYXkobWVtYmVyX3R5cGUpO1xuIFx0XHRcdGlmICghYXJyYXktXHUwMDNlbmVsZW1zKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0XHRcdGdvdG8gYmFkX21lbWJlcjtcbiBcdFx0XHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXHUwMDNldHlwZSwgTlVMTCk7XG4tXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuLVx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRpZiAoIWJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcykpXG4mIzQzO1x0XHRcdGdvdG8gYmFkX21lbWJlcjtcbiBcdH1cbiBcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7YmFkX21lbWJlcjpcbiYjNDM7XHRpZiAocGF0aClcbiYjNDM7XHRcdHBhdGgtXHUwMDNlZGVwdGggPSByZWMgJiM0MzsgMTtcbiYjNDM7YmFkX3BhdGg6XG4mIzQzO1x0aWYgKHBhdGggXHUwMDI2XHUwMDI2IHBhdGgtXHUwMDNlZGVwdGgpXG4mIzQzO1x0XHRwYXRoLVx1MDAzZW1lbWJlcltyZWNdID0gbWVtYmVyO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Ym9vbCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnRmX3N0cnVjdF9tZW1iZXJfd2FsayhlbnYsIGJ0ZiwgdCwgbWVtYmVyX2tpbmRzLCAwLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBidGZfbWVtYmVyX3BhdGhfc3RyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aCxcbiYjNDM7XHRcdFx0XHRjaGFyICpidWYsIHNpemVfdCBidWZfc3opXG4mIzQzO3tcbiYjNDM7XHRzaXplX3QgbGVuID0gMDtcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0YnVmWzBdID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXRoLVx1MDAzZWRlcHRoOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHBhdGgtXHUwMDNlbWVtYmVyW2ldLVx1MDAzZW5hbWVfb2ZmKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIW5hbWUgfHwgIW5hbWVbMF0pXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0bGVuICYjNDM7PSBzY25wcmludGYoYnVmICYjNDM7IGxlbiwgYnVmX3N6IC0gbGVuLCBcJiMzNDslcyVzXCYjMzQ7LCBsZW4gPyBcJiMzNDsuXCYjMzQ7IDogXCYjMzQ7XCYjMzQ7LCBuYW1lKTtcbiYjNDM7XHR9XG4gfVxuIFxuIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcbkBAIC0xMjAzOSw3ICYjNDM7MTIxMjcsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHQgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLVx1MDAzZWJ0ZiwgXHUwMDI2YXJnc1thcmcgJiM0MzsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyAmIzQzOyAxXSkpKSB7XG4gXHRcdGlmICghYnRmX3R5cGVfaXNfdm9pZChyZWZfdCkgXHUwMDI2XHUwMDI2ICFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4mIzQzO1x0XHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QpKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0OyVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvIHZvaWQsIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxuXCYjMzQ7LFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEyMDU1LDcgJiM0MzsxMjE0Myw3IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXG4gXHRcdCAqIHNjYWxhcnMuIFRoZSBhY2Nlc3Mgc2l6ZSBpcyBkZXJpdmVkIGZyb20gdGhlIHBvaW50ZWQtdG8gQlRGIHR5cGUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcbiYjNDM7XHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7JXMgcG9pbnRlciB0eXBlICVzICVzIG11c3QgcG9pbnQgdG8gc2NhbGFyLCBvciBzdHJ1Y3Qgd2l0aCBzY2FsYXJcXG5cJiMzNDssXG4gXHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTMxMTEsNyAmIzQzOzEzMTk5LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4mIzQzO1x0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCkpIHtcbiBcdFx0XHRcdGVudW0gYnBmX3JlZ190eXBlIHJlZzJidGZfdHlwZSA9IGxvb2t1cF9yZWcyYnRmX2lkcyhyZWZfaWQpO1xuIFx0XHRcdFx0Y29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTtcbiBcbkBAIC0xMzY1Myw3ICYjNDM7MTM3NDEsNyBAQCBzdGF0aWMgaW50IGNoZWNrX3NwZWNpYWxfa2Z1bmMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ1xuIFxuIFx0XHRzdHJ1Y3RfbWV0YSA9IGJ0Zl9maW5kX3N0cnVjdF9tZXRhKHJldF9idGYsIHJldF9idGZfaWQpO1xuIFx0XHRpZiAoaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEtXHUwMDNlZnVuY19pZCkpIHtcbi1cdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCwgMCkpIHtcbiYjNDM7XHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCYjMzQ7YnBmX3BlcmNwdV9vYmpfbmV3IHR5cGUgSUQgYXJndW1lbnQgbXVzdCBiZSBvZiBhIHN0cnVjdCBvZiBzY2FsYXJzXFxuXCYjMzQ7KTtcbiBcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHRcdH1cbkBAIC0xMzc2Nyw3ICYjNDM7MTM4NTUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDtcbiBcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4tXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xuJiM0MztcdHUzMiBpLCBuYXJncywgcHRyX3R5cGVfaWQsIHJldF9ucmVncyA9IDE7XG4gXHRzdHJ1Y3QgYnBmX2tmdW5jX2Rlc2MgKmRlc2M7XG4gXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcbiBcdGludCBpZDtcbkBAIC0xNDAyMSwyNSAmIzQzOzE0MTA5LDU5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXG4gXHR9XG4gXG4gXHRpZiAoYnRmX3R5cGVfaXNfc2NhbGFyKHQpKSB7XG4tXHRcdG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LVx1MDAzZXNpemUpO1xuJiM0MztcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG4gXHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbiBcdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuIFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHtcbiYjNDM7XHRcdHN0cnVjdCBidGZfbWVtYmVyX3BhdGggcGF0aCA9IHt9O1xuJiM0MztcdFx0Y29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSBcJiMzNDtcJiMzNDs7XG4mIzQzO1xuIFx0XHQvKlxuIFx0XHQgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZFxuLVx0XHQgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczpcbi1cdFx0ICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhclxuLVx0XHQgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cbiYjNDM7XHRcdCAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZFxuJiM0MztcdFx0ICogaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cbiYjNDM7XHRcdCAqIE9ubHkgc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXJcbiYjNDM7XHRcdCAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmVcbiYjNDM7XHRcdCAqIG9uZSBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlXG4mIzQzO1x0XHQgKiByZXN1bHQgdG8gdGhlIGFyZW5hLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgZGVzY19idGYsIHQsIDApKSB7XG4mIzQzO1x0XHRpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCxcbiYjNDM7XHRcdFx0XHRcdCAgICBCVEZfTUVNQkVSX1NDQUxBUiB8IEJURl9NRU1CRVJfQVJFTkFfUFRSLCAwLCBcdTAwMjZwYXRoKSkge1xuIFx0XHRcdHZlcmJvc2UoZW52LFxuLVx0XHRcdFx0XCYjMzQ7a2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFyc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDtrZXJuZWwgZnVuY3Rpb24gJXMgcmV0dXJucyAlcyAlcyB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXFxuXCYjMzQ7LFxuIFx0XHRcdFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXG4gXHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpKTtcbiYjNDM7XHRcdFx0aWYgKHBhdGgudG9vX2RlZXApIHtcbiYjNDM7XHRcdFx0XHRtZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdChcbiYjNDM7XHRcdFx0XHRcdGVudiwgXCYjMzQ7IEl0IG5lc3RzIHN0cnVjdHMgbW9yZSB0aGFuICVkIGxldmVscyBkZWVwLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdEJURl9NRU1CRVJfTUFYX0RFUFRIKTtcbiYjNDM7XHRcdFx0fSBlbHNlIGlmIChwYXRoLmRlcHRoKSB7XG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKmJhZCA9IHBhdGgubWVtYmVyW3BhdGguZGVwdGggLSAxXTtcbiYjNDM7XHRcdFx0XHRjaGFyIGJhZF9uYW1lW0JURl9NRU1CRVJfUEFUSF9MRU5dO1xuJiM0MztcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7XG4mIzQzO1xuJiM0MztcdFx0XHRcdGJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsIFx1MDAyNnBhdGgsIGJhZF9uYW1lLCBzaXplb2YoYmFkX25hbWUpKTtcbiYjNDM7XHRcdFx0XHRiYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtXHUwMDNldHlwZSwgTlVMTCk7XG4mIzQzO1x0XHRcdFx0dmVyYm9zZShlbnYsIFwmIzM0O21lbWJlciAmIzM5OyVzJiMzOTsgaGFzIHR5cGUgJXNcXG5cJiMzNDssIGJhZF9uYW1lLFxuJiM0MztcdFx0XHRcdFx0YnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7XG4mIzQzO1x0XHRcdFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXG4mIzQzO1x0XHRcdFx0XHRlbnYsXG4mIzQzO1x0XHRcdFx0XHRcJiMzNDsgSXRzIG1lbWJlciAmIzM5OyVzJiMzOTsgaXMgJXMsIG5vdCBhIHNjYWxhciBvciBhbiBhcmVuYSBwb2ludGVyLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGJhZF9uYW1lLCBidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRicGZfZGlhZ19wcm9ncmFtX3N0cnVjdHVyZShcbiYjNDM7XHRcdFx0XHRlbnYsIGluc25faWR4LCBcJiMzNDt1bnN1cHBvcnRlZCBrZXJuZWwgZnVuY3Rpb24gcmV0dXJuIHR5cGVcJiMzNDssXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Q2FsbCBhIGtlcm5lbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgb25seSBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzIGJ5IHZhbHVlLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcJiMzNDslcygpIHJldHVybnMgJXMgJXMgYnkgdmFsdWUuJXMgXCYjMzQ7XG4mIzQzO1x0XHRcdFx0XCYjMzQ7T25seSBrZnVuY3MgcmV0dXJuaW5nIHNjYWxhciB2YWx1ZXMgb3IgYXJlbmEgcG9pbnRlcnMsIG9yIFwmIzM0O1xuJiM0MztcdFx0XHRcdFwmIzM0O3N0cnVjdHVyZXMgY29tcG9zZWQgb2Ygc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycyBhcmUgXCYjMzQ7XG4mIzQzO1x0XHRcdFx0XCYjMzQ7c3VwcG9ydGVkLlwmIzM0OyxcbiYjNDM7XHRcdFx0XHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcbiYjNDM7XHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpLCBtZW1iZXJfbm90ZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbi1cdFx0bWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4mIzQzO1x0XHRyZXRfbnJlZ3MgPSBtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbiBcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XG4gXHRcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXHUwMDNldHlwZSwgXHUwMDI2cHRyX3R5cGVfaWQpO1xuIFx0XHRlcnIgPSBjaGVja19zcGVjaWFsX2tmdW5jKGVudiwgXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XG5AQCAtMTQxNzAsNyAmIzQzOzE0MjkyLDggQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdCAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlXG4gXHQgKiBpdGVyYXRvciBwYXRoJiMzOTtzIGRpYWdub3N0aWMgcG9zaXRpb24uXG4gXHQgKi9cbi1cdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbiYjNDM7XHRpZiAocmV0X25yZWdzID09IDEpXG4mIzQzO1x0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4gXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jXG5AQCAtMSwxMSAmIzQzOzEsNTMgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAjaW5jbHVkZSBcdTAwM2N0ZXN0X3Byb2dzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2J0Zi5oXHUwMDNlXG4gI2luY2x1ZGUgXCYjMzQ7YWdncmVnYXRlX3JldF9mdW5jLnNrZWwuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuc2tlbC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuc2tlbC5oXCYjMzQ7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCB0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYnRmICp2bWxpbnV4X2J0ZiwgKm1vZHVsZV9idGYgPSBOVUxMO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcbiYjNDM7XHRib29sIHRhZ2dlZCA9IGZhbHNlO1xuJiM0MztcdF9fczMyIGlkO1xuJiM0MztcbiYjNDM7XHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuJiM0MztcdGlmICghdm1saW51eF9idGYpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdG1vZHVsZV9idGYgPSBidGZfX2xvYWRfbW9kdWxlX2J0ZihcJiMzNDticGZfdGVzdG1vZFwmIzM0Oywgdm1saW51eF9idGYpO1xuJiM0MztcdGlmICghbW9kdWxlX2J0ZilcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBwcm9nX3Rlc3RfcmV0X2FyZW5hOjphIGlzICYjMzk7dm9pZCBfX2FyZW5hX3RhZyAqJiMzOTs6IFBUUiAtXHUwMDNlIFRZUEVfVEFHIC1cdTAwM2Ugdm9pZCAqL1xuJiM0MztcdGlkID0gYnRmX19maW5kX2J5X25hbWVfa2luZChtb2R1bGVfYnRmLCBcJiMzNDtwcm9nX3Rlc3RfcmV0X2FyZW5hXCYjMzQ7LCBCVEZfS0lORF9TVFJVQ1QpO1xuJiM0MztcdGlmIChpZCBcdTAwM2M9IDApXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0dCA9IGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCBidGZfbWVtYmVycyhidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgaWQpKVswXS50eXBlKTtcbiYjNDM7XHRpZiAoIXQgfHwgIWJ0Zl9pc19wdHIodCkpXG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0dCA9IGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCB0LVx1MDAzZXR5cGUpO1xuJiM0MztcdHRhZ2dlZCA9IHQgXHUwMDI2XHUwMDI2IGJ0Zl9pc190eXBlX3RhZyh0KSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAhc3RyY21wKGJ0Zl9fbmFtZV9ieV9vZmZzZXQobW9kdWxlX2J0ZiwgdC1cdTAwM2VuYW1lX29mZiksIFwmIzM0O2FyZW5hXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO291dDpcbiYjNDM7XHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XG4mIzQzO1x0YnRmX19mcmVlKHZtbGludXhfYnRmKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRhZ2dlZDtcbiYjNDM7fVxuIFxuIHZvaWQgdGVzdF9hZ2dyZWdhdGVfcmV0KHZvaWQpXG4ge1xuIFx0UlVOX1RFU1RTKGFnZ3JlZ2F0ZV9yZXRfZnVuYyk7XG4gXHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuYyk7XG4mIzQzO1xuJiM0MztcdGlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpXG4mIzQzO1x0XHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSk7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dGVzdF9fc2tpcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbmluZGV4IDZmNjZmYzgyMmNlZGUuLmYwMDc3ZDk1MWEyNWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xuQEAgLTIsNiAmIzQzOzIsNyBAQFxuIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2JwZi9icGZfaGVscGVycy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2JwZl9hcmVuYV9jb21tb24uaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiBcbiB0eXBlZGVmIHVuc2lnbmVkIF9faW50MTI4IHUxMjg7XG5AQCAtMjM0LDQgJiM0MzsyMzUsMTQ5IEBAIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX3VuaW9uX3B0cl9mYWlsKHZvaWQpXG4gXG4gI2VuZGlmXG4gXG4mIzQzOy8qXG4mIzQzOyAqIGdjYyByZXR1cm5zIGEgYnktdmFsdWUgc3RydWN0IHRocm91Z2ggYSBoaWRkZW4gcG9pbnRlciwgYW5kIGVtaXRzIHRoZVxuJiM0MzsgKiAmIzM5O3IwID0gcjEmIzM5OyByZXR1cm5pbmcgaXQgYWZ0ZXIgdGhlIF9fbmFrZWQgYm9keSYjMzk7cyBleGl0LCBsZWF2aW5nIHRoZVxuJiM0MzsgKiBzdWJwcm9ncmFtIGZhbGxpbmcgdGhyb3VnaC4gQnVpbGQgdGhlc2Ugd2l0aCBjbGFuZyBvbmx5LlxuJiM0MzsgKi9cbiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19fKVxuJiM0MztcbiYjNDM7c3RydWN0IGFyZW5hX3BhaXIge1xuJiM0MztcdHZvaWQgX19hcmVuYSAqbG87XG4mIzQzO1x0dm9pZCBfX2FyZW5hICpoaTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHtcbiYjNDM7XHR2b2lkIF9fYXJlbmEgKnA7XG4mIzQzO1x0X191NjQgeDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBhcmVuYV9hcnJheSB7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICpwWzJdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGFyZW5hX3NpbmdsZSB7XG4mIzQzO1x0dm9pZCBfX2FyZW5hICpwO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7dW5pb24gYXJlbmFfdXBhaXIge1xuJiM0MztcdHZvaWQgX19hcmVuYSAqcDtcbiYjNDM7XHRfX3U2NCBoYWx2ZXNbMl07XG4mIzQzO307XG4mIzQzO1xuJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjIgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3RjXCYjMzQ7KVxuJiM0MztfX2xvYWRfaWZfSklUZWQoKVxuJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbiYjNDM7X19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfcGFpcih2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9wYWlyXTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3BhaXIpXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19uYWtlZCBzdHJ1Y3QgYXJlbmFfYW5kX3NjYWxhciBnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXIodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IyID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FuZF9zY2FsYXIodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7Y2FsbCAlW2dsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcl07XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O2V4aXQ7XCYjMzQ7XG4mIzQzO1x0OlxuJiM0MztcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbmFrZWQgc3RydWN0IGFyZW5hX2FycmF5IGdsb2JhbF9yZXRfYXJlbmFfYXJyYXkodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IyID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FycmF5KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFwmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FycmF5XTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX2FycmF5KVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9zaW5nbGUodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7Y2FsbCAlW2dsb2JhbF9yZXRfYXJlbmFfc2luZ2xlXTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSlcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX25ha2VkIHVuaW9uIGFyZW5hX3VwYWlyIGdsb2JhbF9yZXRfYXJlbmFfdW5pb24odm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjAgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IyID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDt0Y1wmIzM0OylcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3VuaW9uKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRhc20gdm9sYXRpbGUgKFxuJiM0MztcdFwmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTtcJiMzNDtcbiYjNDM7XHRcJiMzNDtyMCA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7ZXhpdDtcJiMzNDtcbiYjNDM7XHQ6XG4mIzQzO1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKVxuJiM0MztcdDogX19jbG9iYmVyX2FsbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBjaGFyIF9saWNlbnNlW10gU0VDKFwmIzM0O2xpY2Vuc2VcJiMzNDspID0gXCYjMzQ7R1BMXCYjMzQ7O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5lOWM4MmRmOGVmYjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuQEAgLTE4LDYgJiM0MzsxOCw4IEBAIHZvaWQgX19rZnVuY19idGZfcm9vdCh2b2lkKVxuIFx0OiBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOCksXG4gXHQgIFwmIzM0O3JcJiMzNDsoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwpLFxuIFx0ICBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0ciksXG4mIzQzO1x0ICBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCksXG4mIzQzO1x0ICBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApLFxuIFx0ICBcJiMzNDtyXCYjMzQ7KFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKSxcbiBcdCAgXCYjMzQ7clwmIzM0OyhcdTAwMjZicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcpKTtcbiB9XG5AQCAtNzEsNyAmIzQzOzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gXG4gU0VDKFwmIzM0O3RjXCYjMzQ7KVxuIF9fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4tX19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCYjMzQ7KVxuJiM0MztfX2ZhaWx1cmUgX19tc2coXCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcJiMzNDspXG4mIzQzO19fbXNnKFwmIzM0O21lbWJlciAmIzM5O3AmIzM5OyBoYXMgdHlwZSBQVFJcJiMzNDspXG4gX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtODQsNiAmIzQzOzg3LDM3IEBAIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfcHRyX2ZhaWwodm9pZClcbiBcdDogX19jbG9iYmVyX2FsbCk7XG4gfVxuIFxuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1wmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWVtYmVyICYjMzk7aW4ucCYjMzk7IGhhcyB0eXBlIFBUUlwmIzM0OylcbiYjNDM7X19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19uZXN0ZWRfcHRyX2ZhaWwodm9pZClcbiYjNDM7e1xuJiM0MztcdGFzbSB2b2xhdGlsZSAoXG4mIzQzO1x0XCYjMzQ7cjEgPSAwO1wmIzM0O1xuJiM0MztcdFwmIzM0O2NhbGwgJVticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWRdO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZClcbiYjNDM7XHQ6IF9fY2xvYmJlcl9hbGwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7dGNcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDttYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcJiMzNDspXG4mIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfdG9vX2RlZXBfZmFpbCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0YXNtIHZvbGF0aWxlIChcbiYjNDM7XHRcJiMzNDtyMSA9IDA7XCYjMzQ7XG4mIzQzO1x0XCYjMzQ7Y2FsbCAlW2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXBdO1wmIzM0O1xuJiM0MztcdFwmIzM0O3IwID0gMDtcJiMzNDtcbiYjNDM7XHRcJiMzNDtleGl0O1wmIzM0O1xuJiM0MztcdDpcbiYjNDM7XHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4mIzQzO1x0OiBfX2Nsb2JiZXJfYWxsKTtcbiYjNDM7fVxuJiM0MztcbiBTRUMoXCYjMzQ7dGNcJiMzNDspXG4gX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbiBfX2ZhaWx1cmUgX19tc2coXCYjMzQ7UjIgIXJlYWRfb2tcJiMzNDspXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi45NGMzNWUxYjU0N2NkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jXG5AQCAtMCwwICYjNDM7MSwxMjkgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2N2bWxpbnV4LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFwmIzM0O2JwZl9taXNjLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7Li4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjaWYgZGVmaW5lZChfX2NsYW5nX21ham9yX18pIFx1MDAyNlx1MDAyNiBfX2NsYW5nX21ham9yX18gXHUwMDNlPSAyM1xuJiM0MztcbiYjNDM7c3RydWN0IHtcbiYjNDM7XHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbiYjNDM7XHRfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7XG4mIzQzO1x0X191aW50KG1heF9lbnRyaWVzLCAyKTtcbiYjNDM7fSBhcmVuYSBTRUMoXCYjMzQ7Lm1hcHNcJiMzNDspO1xuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogQSByZXR1cm5lZCBtZW1iZXIgY2FycmllcyB0aGUgYXJlbmEgdHlwZSB0YWcgYnV0IG5vdCB0aGUgYWRkcmVzcyBzcGFjZVxuJiM0MzsgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmXG4mIzQzOyAqIHJhdGhlciB0aGFuIHRoZSBjb21waWxlciBkb2luZyBpdC5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpXG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICphLCAqYjtcbiYjNDM7XHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSByO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0LyogQm90aCBoYWx2ZXMgY29tZSBiYWNrIGluIFIwOlIyLCBwb2ludGluZyBhdCBwYWdlIGFuZCBwYWdlICYjNDM7IDQuICovXG4mIzQzO1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKCh1NjQpcGFnZSk7XG4mIzQzO1x0aWYgKCFyLmEgfHwgIXIuYilcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHRhID0gYXJlbmFfcHRyKHIuYSk7XG4mIzQzO1x0YiA9IGFyZW5hX3B0cihyLmIpO1xuJiM0MztcdCphID0gMTtcbiYjNDM7XHQqYiA9IDI7XG4mIzQzO1x0aWYgKCphICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XHRpZiAoKmIgIT0gMilcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHQvKiBUaGUgaGFsdmVzIGFyZSB0aGUgZmlyc3QgdHdvIHNsb3RzIG9mIHRoZSBwYWdlIHRoZSBwcm9ncmFtIGFsbG9jYXRlZC4gKi9cbiYjNDM7XHRwYWdlWzBdID0gNztcbiYjNDM7XHRpZiAoKmEgIT0gNylcbiYjNDM7XHRcdHJldHVybiA1O1xuJiM0MztcdHBhZ2VbMV0gPSA5O1xuJiM0MztcdGlmICgqYiAhPSA5KVxuJiM0MztcdFx0cmV0dXJuIDY7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbiYjNDM7X19sb2FkX2lmX0pJVGVkKClcbiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApXG4mIzQzO2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX21peGVkKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHUzMiBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuJiM0MztcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHI7XG4mIzQzO1x0dTMyIHZvbGF0aWxlIF9fYXJlbmEgKnA7XG4mIzQzO1xuJiM0MztcdGlmICghcGFnZSlcbiYjNDM7XHRcdHJldHVybiAxO1xuJiM0MztcbiYjNDM7XHQvKiBBbiBhcmVuYSBwb2ludGVyIGluIFIwIGJlc2lkZSBhIHNjYWxhciBpbiBSMi4gKi9cbiYjNDM7XHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoKHU2NClwYWdlKTtcbiYjNDM7XHRpZiAoIXIucClcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcdGlmIChyLnRhZyAhPSAweGJlZWYpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XG4mIzQzO1x0cCA9IGFyZW5hX3B0cihyLnApO1xuJiM0MztcdCpwID0gMztcbiYjNDM7XHRpZiAoKnAgIT0gMylcbiYjNDM7XHRcdHJldHVybiA0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1wmIzM0OylcbiYjNDM7X19tc2coXCYjMzQ7bWVtYmVyICYjMzk7YiYjMzk7IGhhcyB0eXBlIFBUUlwmIzM0OylcbiYjNDM7aW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfdW50YWdnZWRfZmFpbCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByO1xuJiM0MztcbiYjNDM7XHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQoMCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByLmEgPT0gci5iO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztTRUMoXCYjMzQ7c3lzY2FsbFwmIzM0OylcbiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbiYjNDM7X19mYWlsdXJlIF9fbXNnKFwmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCYjMzQ7KVxuJiM0MztfX21zZyhcJiMzNDttZW1iZXIgJiMzOTtiJiMzOTsgaGFzIHR5cGUgUFRSXCYjMzQ7KVxuJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV91bmlvbl9mYWlsKHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gcjtcbiYjNDM7XG4mIzQzO1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKDApO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gci5hID09IHIuYjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2Vsc2VcbiYjNDM7XG4mIzQzO1NFQyhcJiMzNDtzb2NrZXRcJiMzNDspXG4mIzQzO19fZGVzY3JpcHRpb24oXCYjMzQ7YWdncmVnYXRlX3JldF9rZnVuY19hcmVuYTogbmVlZHMgTExWTSAyMywgZHVtbXkgdGVzdFwmIzM0OylcbiYjNDM7X19za2lwKFwmIzM0O25lZWRzIExMVk0gMjNcJiMzNDspXG4mIzQzO19fc3VjY2Vzc1xuJiM0MztpbnQgZHVtbXlfdGVzdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuY1xuQEAgLTYwLDcgJiM0Mzs2MCw3IEBAIF9fbm9pbmxpbmUgaW50IGV4Y2VwdGlvbl9jYl9va19hcmdfc21hbGwoaW50IGEpXG4gXG4gU0VDKFwmIzM0Oz90Y1wmIzM0OylcbiBfX2V4Y2VwdGlvbl9jYihleGNlcHRpb25fY2JfYmFkX3JldF90eXBlMSlcbi1fX2ZhaWx1cmUgX19tc2coXCYjMzQ7T25seSB2b2lkLCBzY2FsYXIsIG9yIGEgc2NhbGFyLW9ubHkgc3RydWN0L3VuaW9uIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cJiMzNDspXG4mIzQzO19fZmFpbHVyZSBfX21zZyhcJiMzNDtPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiBzY2FsYXJzXCYjMzQ7KVxuIGludCByZWplY3RfZXhjZXB0aW9uX2NiX3R5cGVfMShzdHJ1Y3QgX19za19idWZmICpjdHgpXG4ge1xuIFx0YnBmX3Rocm93KDApO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbmluZGV4IDgxNWYzNDJlYjRiMDUuLjY3MmEzYWFkZDljYjIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbkBAIC03MzQsNCAmIzQzOzczNCw1MiBAQCBpbnQgY2hlY2tfYXJlbmFfYXJnX3JldCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOyNpZiBkZWZpbmVkKF9fY2xhbmdfbWFqb3JfXykgXHUwMDI2XHUwMDI2IF9fY2xhbmdfbWFqb3JfXyBcdTAwM2U9IDIzXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHtcbiYjNDM7XHR1MzIgX19hcmVuYSAqZmlyc3Q7XG4mIzQzO1x0dTMyIF9fYXJlbmEgKnNlY29uZDtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO19fd2VhayBzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHNwbGl0X2FyZW5hX3BhZ2UodTMyIF9fYXJlbmEgKnBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XG4mIzQzO1xuJiM0MztcdHBhaXIuZmlyc3QgPSBwYWdlO1xuJiM0MztcdHBhaXIuc2Vjb25kID0gcGFnZSAmIzQzOyAxO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGFpcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7U0VDKFwmIzM0O3N5c2NhbGxcJiMzNDspXG4mIzQzO19fbG9hZF9pZl9KSVRlZCgpXG4mIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKVxuJiM0MztpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpXG4mIzQzO3tcbiYjNDM7XHR1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcbiYjNDM7XHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7XG4mIzQzO1x0c3RydWN0IGFyZW5hX3BhZ2VfcGFpciBwYWlyO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBhZ2UpXG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XG4mIzQzO1x0cGFpciA9IHNwbGl0X2FyZW5hX3BhZ2UocGFnZSk7XG4mIzQzO1x0aWYgKCFwYWlyLmZpcnN0IHx8ICFwYWlyLnNlY29uZClcbiYjNDM7XHRcdHJldHVybiAyO1xuJiM0MztcbiYjNDM7XHQvKiBCb3RoIGhhbHZlcyBvZiB0aGUgcGFpciBtdXN0IHN0aWxsIGJlIHVzYWJsZSBhcyBhcmVuYSBwb2ludGVycy4gKi9cbiYjNDM7XHRmaXJzdCA9IHBhaXIuZmlyc3Q7XG4mIzQzO1x0c2Vjb25kID0gcGFpci5zZWNvbmQ7XG4mIzQzO1x0KmZpcnN0ID0gMTtcbiYjNDM7XHQqc2Vjb25kID0gMjtcbiYjNDM7XHRpZiAoKmZpcnN0ICE9IDEpXG4mIzQzO1x0XHRyZXR1cm4gMztcbiYjNDM7XHRpZiAoKnNlY29uZCAhPSAyKVxuJiM0MztcdFx0cmV0dXJuIDQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gY2hhciBfbGljZW5zZVtdIFNFQyhcJiMzNDtsaWNlbnNlXCYjMzQ7KSA9IFwmIzM0O0dQTFwmIzM0OztcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuaW5kZXggODUwY2Y0ZjgzMGM0OC4uMGVmMmNlODc1ZDcxZCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcbkBAIC05ODEsNiAmIzQzOzk4MSw0OCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKHU2NCB0YWcpXG4gXHRyZXR1cm4gcjtcbiB9XG4gXG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKHU2NCBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gKHZvaWQgKikoYWRkciAmIzQzOyA0KSB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQodTY0IGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCByID0geyAucCA9ICh2b2lkICopYWRkciwgLnRhZyA9IDB4YmVlZiB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQodTY0IGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByID0geyAuYSA9ICh2b2lkICopYWRkciwgLmIgPSBOVUxMIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiByO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztfX2JwZl9rZnVuYyB1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKHU2NCBhZGRyKVxuJiM0Mzt7XG4mIzQzO1x0dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByID0geyAuYSA9ICh2b2lkICopYWRkciB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCh1NjQgdGFnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHIgPSB7IC5pbiA9IHsgLnAgPSBOVUxMIH0sIC50YWcgPSB0YWcgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCh1NjQgdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgciA9IHsgLmwxID0geyAubDIgPSB7IC5sMyA9IHsgLmw0ID0geyAudiA9IHYgfSB9IH0gfSB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcjtcbiYjNDM7fVxuJiM0MztcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpXG4ge1xuIFx0c3RydWN0IHByb2dfdGVzdF9yZXRfaWkgciA9IHsgLmEgPSBhLCAuYiA9IGIgfTtcbkBAIC0xNTM5LDYgJiM0MzsxNTgxLDEyIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X2kxMjgpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3BhaXIpXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsLCBLRl9GQVNUQ0FMTClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZClcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKVxuJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24pXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQpXG4mIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paSlcbiAjZW5kaWZcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5pbmRleCA2NWU2OTNhZGE3MzY0Li5hMmU5ZTlmMzE4NGUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxuQEAgLTI2LDYgJiM0MzsyNiwxMiBAQCBzdHJ1Y3QgcHJvZ190ZXN0X3JlZl9rZnVuYyB7XG4gfTtcbiAjZW5kaWZcbiBcbiYjNDM7I2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpXG4mIzQzOyNkZWZpbmUgX19hcmVuYV90YWcgX19hdHRyaWJ1dGVfXygoYnRmX3R5cGVfdGFnKFwmIzM0O2FyZW5hXCYjMzQ7KSkpXG4mIzQzOyNlbHNlXG4mIzQzOyNkZWZpbmUgX19hcmVuYV90YWdcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIHN0cnVjdCBicGZfaXRlcl90ZXN0bW9kX3NlcTtcbiBcbiBzdHJ1Y3QgcHJvZ190ZXN0X3Bhc3MxIHtcbkBAIC03MCw2ICYjNDM7NzYsNDUgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcHRyIHtcdC8qIDE2IGJ5dGVzOiBjb250YWlucyBhIHBvaW50ZXIgKi9cbiBcdF9fdTY0IHRhZztcbiB9O1xuIFxuJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSB7XHQvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovXG4mIzQzO1x0dm9pZCBfX2FyZW5hX3RhZyAqYTtcbiYjNDM7XHR2b2lkIF9fYXJlbmFfdGFnICpiO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQge1x0LyogMTYgYnl0ZXM6IGFuIGFyZW5hIHBvaW50ZXIgYW5kIGEgc2NhbGFyICovXG4mIzQzO1x0dm9pZCBfX2FyZW5hX3RhZyAqcDtcbiYjNDM7XHRfX3U2NCB0YWc7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCB7XHQvKiAxNiBieXRlczogJiMzOTtiJiMzOTsgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xuJiM0MztcdHZvaWQgX19hcmVuYV90YWcgKmE7XG4mIzQzO1x0dm9pZCAqYjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3VuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24ge1x0LyogOCBieXRlczogJiMzOTtiJiMzOTsgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xuJiM0MztcdHZvaWQgX19hcmVuYV90YWcgKmE7XG4mIzQzO1x0dm9pZCAqYjtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCB7XHQvKiAxNiBieXRlczogdGhlIHBvaW50ZXIgaGlkZXMgb25lIGxldmVsIGRvd24gKi9cbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0dm9pZCAqcDtcbiYjNDM7XHR9IGluO1xuJiM0MztcdF9fdTY0IHRhZztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAge1x0LyogOCBieXRlcywgYnV0IG5lc3RlZCBwYXN0IHRoZSA0LWxldmVsIHdhbGsgbGltaXQgKi9cbiYjNDM7XHRzdHJ1Y3Qge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHRcdFx0X191NjQgdjtcbiYjNDM7XHRcdFx0XHR9IGw0O1xuJiM0MztcdFx0XHR9IGwzO1xuJiM0MztcdFx0fSBsMjtcbiYjNDM7XHR9IGwxO1xuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcge1x0LyogMjQgYnl0ZXM6IHRvbyBsYXJnZSBmb3IgUjA6UjIgKi9cbiBcdF9fdTY0IGE7XG4gXHRfX3U2NCBiO1xuQEAgLTE1OSw2ICYjNDM7MjA0LDEyIEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3BhaXIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcihfX3U2NCBhLCBfX3U2NCBiKSBfX2tzeW07XG4gc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9mYXN0Y2FsbChfX3U2NCBhLCBfX3U2NCBiKSBfX2tzeW07XG4gc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKSBfX2tzeW07XG4gc3RydWN0IHByb2dfdGVzdF9yZXRfcHRyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0cihfX3U2NCB0YWcpIF9fa3N5bTtcbiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZChfX3U2NCB0YWcpIF9fa3N5bTtcbiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltO1xuJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZChfX3U2NCBhZGRyKSBfX2tzeW07XG4mIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKF9fdTY0IGFkZHIpIF9fa3N5bTtcbiYjNDM7dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07XG4mIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcChfX3U2NCB2KSBfX2tzeW07XG4gc3RydWN0IHByb2dfdGVzdF9yZXRfYmlnIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZyh2b2lkKSBfX2tzeW07XG4gX191NjQgYnBmX2tmdW5jX2NhbGxfc3RhY2tfYXJnKF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsXG4gXHRcdFx0ICAgICAgIF9fdTY0IGUsIF9fdTY0IGYsIF9fdTY0IGcsIF9fdTY0IGgsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZiYjMzQ7LAogICAgJiMzNDtidGZfdHlwZV9pc19hcmVuYV9wdHImIzM0OywKICAgICYjMzQ7YnRmX3ByZXBhcmVfZnVuY19hcmdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgcmV0dXJuaW5nIHN0cnVjdHMgb3IgdW5pb25zIGJ5IHZhbHVlIGZyb20ga2Z1bmNzIGFuZCBnbG9iYWwgc3VicHJvZ3JhbXMgaWYgdGhleSBhcmUgY29tcG9zZWQgb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgKHBvaW50ZXJzIHdpdGggdGhlIGBidGZfdHlwZV90YWcoXCYjMzQ7YXJlbmFcJiMzNDspYCBhdHRyaWJ1dGUpLiBQcmV2aW91c2x5LCBvbmx5IHNjYWxhcnMgd2VyZSBhbGxvd2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZlcmlmaWVyJiMzOTtzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIChoYW5kbGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCBhcmVuYSBwb2ludGVycykuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBzdWNoIGtmdW5jcyBvciBzdWJwcm9ncmFtcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmN2U4YThhOTUwMWU1ZWEzYmNhOWI4ZTEyMmZkYzRlY2M1NDVlNjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjo0MzozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CmluZGV4IDg5ZGVhNmIwYjAyNDEuLjk2YmY2M2QzNDQzMjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdApAQCAtNTgxLDIwICYjNDM7NTgxLDI3IEBAIGFnYWluc3QgdGhlIGFyZW5hLiBMYXJnZXIgYWNjZXNzZXMgbXVzdCB2ZXJpZnkgdGhlIHJhbmdlIGV4cGxpY2l0bHkuCiBBIGtmdW5jIG1heSByZXR1cm4gYSBzY2FsYXIsIGEgcG9pbnRlciwgb3IgYSBzbWFsbCBzdHJ1Y3Qgb3IgdW5pb24gYnkKIHZhbHVlLiBBIHNjYWxhciBvciBwb2ludGVyIG9mIHVwIHRvIDggYnl0ZXMgaXMgcmV0dXJuZWQgaW4gUjAsIGFzIHVzdWFsLgogCi1BIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycwotKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtOyBhcnJheXMgb2Ygc2NhbGFycyBhcmUKLWFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGUgcmF3Ci1jb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyCi1hbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3QKLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXMKLW9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3QgcmV0dXJuIGluIFIwOlIyIGF0Ci1hbGwuCiYjNDM7QSBzdHJ1Y3Qgb3IgdW5pb24gcmV0dXJuZWQgYnkgdmFsdWUgbXVzdCBiZSBjb21wb3NlZCBvbmx5IG9mIHNjYWxhcnMgYW5kIGFyZW5hCiYjNDM7cG9pbnRlcnMgKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtIGFuZCBhbiBhcmVuYQomIzQzO3BvaW50ZXIgaXMgb25lIGNhcnJ5aW5nIHRoZSBgYGJ0Zl90eXBlX3RhZygmIzM0O2FyZW5hJiMzNDspYGAgYXR0cmlidXRlOyBhcnJheXMgb2YKJiM0MztlaXRoZXIgYXJlIGFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGUKJiM0MztyYXcgY29udGVudHMgb2YgUjAgKGFuZCBSMiksIHNvIGEgbWVtYmVyIG9mIGFueSBvdGhlciBwb2ludGVyIHR5cGUgd291bGQgYmUKJiM0MztsYXVuZGVyZWQgaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kCiYjNDM7cmVmZXJlbmNlIHRyYWNraW5nLiBBIHN0cnVjdCBvciB1bmlvbiB3aXRoIHN1Y2ggYSBtZW1iZXIgaXMgdGhlcmVmb3JlIHJlamVjdGVkCiYjNDM7YXQgbG9hZCB0aW1lLCBhbmQgc28gaXMgb25lIHdpdGggYSBmbG9hdGluZy1wb2ludCBtZW1iZXIsIHdoaWNoIHRoZSBBQkkgbWF5IG5vdAomIzQzO3JldHVybiBpbiBSMDpSMiBhdCBhbGwuCiYjNDM7CiYjNDM7QW4gYXJlbmEgcG9pbnRlciBtZW1iZXIgaXMgaGFuZGVkIGJhY2sgYXMgYSBzY2FsYXIgdG9vLCBidXQgbm90aGluZyBpcyBsb3N0IGJ5CiYjNDM7dGhhdC4gVGhlIHByb2dyYW0gbXVzdCBgYGNhc3Rfa2VybigpYGAgdGhlIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCwgYW5kIHRoZQomIzQzO3ZlcmlmaWVyIGFsbG93cyB0aGF0IGNhc3Qgb24gYW55IHNjYWxhciwgc28gYSBsYXVuZGVyZWQgYXJlbmEgYWRkcmVzcyBnaXZlcyB0aGUKJiM0Mztwcm9ncmFtIG5vIHJlYWNoIGl0IGRpZCBub3QgYWxyZWFkeSBoYXZlLiBUaGUgcmVzdWx0IGlzIGNvbmZpbmVkIHRvIHRoZQomIzQzO3Byb2dyYW0mIzM5O3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuCiAKIEEga2Z1bmMgbWF5IGFsc28gcmV0dXJuIGEgdmFsdWUgbGFyZ2VyIHRoYW4gOCBieXRlcyBhbmQgdXAgdG8gMTYgYnl0ZXMgLS0gYQotc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZAotaW4gdGhlIHJlZ2lzdGVyIHBhaXIgUjA6UjIsIG1hdGNoaW5nIHRoZSBjb252ZW50aW9uIExMVk0gdXNlcyBmb3IgdGhlIEJQRgotdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLiBBIHN0cnVjdCBvcgotdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLgomIzQzO3N0cnVjdCBvciB1bmlvbiBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycywgb3IgYW4gYGBfX2ludDEyOGBgLiBTdWNoIGEKJiM0Mzt2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTQomIzQzO3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLgomIzQzO0Egc3RydWN0IG9yIHVuaW9uIG9mIDggYnl0ZXMgb3IgbGVzcyBpcyByZXR1cm5lZCBpbiBSMCBhbG9uZS4KIAogOjoKIApAQCAtNjIwLDEwICYjNDM7NjI3LDEwIEBAIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBKSVRlZCwgc2luY2UgdGhlIGludGVycHJldGVyIHByb3BhZ2F0ZXMgb25seSBSMCBvdXQgb2YKIGEgc3VicHJvZ3JhbTogd2l0aG91dCBhIEpJVCB0aGUgcmV0dXJuIHZhbHVlIHN0YXlzIGluIFIwIGFsb25lLCBhbmQgYSBjYWxsZXIKIHJlYWRpbmcgUjIgaXMgcmVqZWN0ZWQgZm9yIHJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCByZWdpc3Rlci4gQSBnbG9iYWwKIHN1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW4gaXNvbGF0aW9uLCBzbyBpdHMgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIHJldHVybiBpcwotcmVzdHJpY3RlZCB0byBzY2FsYXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkCi1pbmxpbmUgYW5kIGhhcyBubyBzdWNoIHJlc3RyaWN0aW9uLiBUaGUgbWFpbiBwcm9ncmFtIGlzIG5vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuCi12YWx1ZSBpcyB0aGUgcHJvZ3JhbSYjMzk7cyBleGl0IGNvZGUsIHJlYWQgb3V0IG9mIFIwIGFsb25lLCBzbyBhIGRlY2xhcmVkIHVwcGVyCi1oYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC4KJiM0MztyZXN0cmljdGVkIHRvIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYwomIzQzO3N1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcwomIzQzO25vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuIHZhbHVlIGlzIHRoZSBwcm9ncmFtJiMzOTtzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjAKJiM0MzthbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlciBoYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC4KIAogQSBnbG9iYWwgc3VicHJvZ3JhbSBtdXN0IGxlYXZlIGEgc2NhbGFyIGluICpldmVyeSogcmVnaXN0ZXIgb2YgdGhlIHBhaXIsIHNvCiBib3RoIGhhbHZlcyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaGF2ZSB0byBiZSBhc3NpZ25lZC4gTGVhdmluZyB0aGUgdXBwZXIgaGFsZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggMDA0YjA2Nzg1NTIxYy4uYWU5ZjYwNjUzOWY0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC0xNDg4LDggJiM0MzsxNDg4LDE1IEBAIGludCBicGZfam1wX29mZnNldChzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogc3RydWN0IGJwZl9pYXJyYXkgKmJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCk7CiB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzayk7CiBib29sIGJwZl9zdWJwcm9nX2lzX2dsb2JhbChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7Ci1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyk7CiYjNDM7CiYjNDM7LyogS2luZHMgb2YgbWVtYmVyIGEgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIG1heSBiZSBjb21wb3NlZCBvZi4gKi8KJiM0MztlbnVtIGJ0Zl9tZW1iZXJfa2luZCB7CiYjNDM7CUJURl9NRU1CRVJfU0NBTEFSCT0gQklUKDApLCAvKiBhbiBpbnQgb3IgYW4gZW51bSAqLwomIzQzOwlCVEZfTUVNQkVSX0FSRU5BX1BUUgk9IEJJVCgxKSwgLyogYSBwb2ludGVyIGNhcnJ5aW5nIHRoZSAmIzM0O2FyZW5hJiMzNDsgdHlwZSB0YWcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO2Jvb2wgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcyk7CiAKIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpOwogYm9vbCBicGZfaXNfdGhyb3dfa2Z1bmMoc3RydWN0IGJwZl9pbnNuICppbnNuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnRmLmggYi9pbmNsdWRlL2xpbnV4L2J0Zi5oCmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnRmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idGYuaApAQCAtMjM1LDYgJiM0MzsyMzUsNyBAQCBzdHJ1Y3QgYnRmX3JlY29yZCAqYnRmX3BhcnNlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZQogCQkJCSAgICB1MzIgZmllbGRfbWFzaywgdTMyIHZhbHVlX3NpemUpOwogaW50IGJ0Zl9jaGVja19hbmRfZml4dXBfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYyk7CiBib29sIGJ0Zl90eXBlX2lzX3ZvaWQoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTsKJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7CiBzMzIgYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqbmFtZSwgdTgga2luZCk7CiBzMzIgYnBmX2ZpbmRfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBraW5kLCBzdHJ1Y3QgYnRmICoqYnRmX3ApOwogc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA5MWI4Y2U3N2Y2OTlhLi5mNmQ4MmE4ZmQ2MTdiIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTM1MjMsNiAmIzQzOzM1MjMsMjIgQEAgc3RhdGljIGludCBidGZfdHlwZV90YWdfd2Fsayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX3R5cGVfaXNfcHRyKHQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtJmd0O3R5cGUpOyBidGZfdHlwZV9pc19tb2RpZmllcih0KTsKJiM0MzsJICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LSZndDt0eXBlKSkgewomIzQzOwkJaWYgKCFidGZfdHlwZV9pc190eXBlX3RhZyh0KSB8fCBidGZfdHlwZV9rZmxhZyh0KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghc3RyY21wKF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC0mZ3Q7bmFtZV9vZmYpLCAmIzM0O2FyZW5hJiMzNDspKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGJ0Zl9maW5kX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiAJCQkgdTMyIG9mZiwgaW50IHN6LCBzdHJ1Y3QgYnRmX2ZpZWxkX2luZm8gKmluZm8sIHUzMiBmaWVsZF9tYXNrKQogewpAQCAtNzkyNyw1MSAmIzQzOzc5NDMsMTkgQEAgc3RhdGljIGludCBidGZfc2Nhbl9kZWNsX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsCi0JCQkgICAgICB1MzIgKnRhZ3MpCiYjNDM7c3RhdGljIHZvaWQgYnRmX3NjYW5fdHlwZV90YWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsIHUzMiAqdGFncykKIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl90eXBlX3RhZ19tYXRjaCBmdW5jX3R5cGVfdGFnc1tdID0gewotCQl7ICYjMzQ7YXJlbmEmIzM0OywgQVJHX1RBR19BUkVOQSB9LAotCX07Ci0Jc3RydWN0IGJ0Zl90eXBlX3RhZ193YWxrX2N0eCBjdHg7Ci0JY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwotCWludCBlcnI7Ci0KIAkvKiBGaW5kIHRoZSBmaXJzdCBwb2ludGVyIHR5cGUgaW4gdGhlIGNoYWluLiAqLwotCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwogCi0JLyoKLQkgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcywKLQkgKiB3aGljaCBuZWl0aGVyIExMVk0gbm9yIEdDQyBzdXBwb3J0IGFueXdheS4KLQkgKi8KLQlpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSkKLQkJcmV0dXJuIDA7Ci0KLQljdHgudCA9IHQ7Ci0JZXJyID0gYnRmX3R5cGVfdGFnX3dhbGsoYnRmLCAmYW1wO2N0eCwgZnVuY190eXBlX3RhZ3MsCi0JCQkJQVJSQVlfU0laRShmdW5jX3R5cGVfdGFncykpOwotCWlmIChlcnIpIHsKLQkJYnBmX2xvZygmYW1wO2Vudi0mZ3Q7bG9nLAotCQkJJiMzNDtmdW5jdGlvbiBzaWduYXR1cmUgbWVtYmVyIGhhcyBtdWx0aXBsZSB0eXBlIHRhZ3NcbiYjMzQ7KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JKnRhZ3MgfD0gY3R4LnJlczsKLQotCXJldHVybiAwOwomIzQzOwlpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpCiYjNDM7CQkqdGFncyB8PSBBUkdfVEFHX0FSRU5BOwogfQogCiAvKiBDaGVjayB3aGV0aGVyIHRoZSB0eXBlIGlzIGEgdmFsaWQgcmV0dXJuIHR5cGUuICovCiBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidGYsCiAJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHN1YnByb2csIGJvb2wgaXNfZ2xvYmFsKQogewotCXUzMiB0YWdzID0gMDsKLQlpbnQgZXJyOwotCi0JZXJyID0gYnRmX3NjYW5fdHlwZV90YWdzKGVudiwgYnRmLCB0LSZndDt0eXBlLCAmYW1wO3RhZ3MpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LSZndDt0eXBlLCBOVUxMKTsKIAogCS8qCkBAIC03OTc5LDcgJiM0Mzs3OTYzLDcgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnQKIAkgKiBHZW5lcmFsIGFyZW5hIHZhcmlhYmxlcyBhcmUgbm90IGFsbG93ZWQsIHNpbmNlIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHJldHVybiBieSB2YWx1ZQogCSAqIGEgdmFyaWFibGUgdGhhdCYjMzk7cyBvbiB0aGUgaGVhcCBpbiB0aGUgZmlyc3QgcGxhY2UuCiAJICovCi0JaWYgKHN1YnByb2cgJmFtcDsmYW1wOyAodGFncyAmYW1wOyBBUkdfVEFHX0FSRU5BKSAmYW1wOyZhbXA7IGJ0Zl90eXBlX2lzX3B0cih0KSkKJiM0MzsJaWYgKHN1YnByb2cgJmFtcDsmYW1wOyBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBXZSBhbHdheXMgYWNjZXB0IHZvaWQgb3Igc2NhbGFycy4gKi8KQEAgLTc5ODksMTMgJiM0Mzs3OTczLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0CiAJaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSAmYW1wOyZhbXA7IHQtJmd0O3NpemUgJmx0Oz0gMTYpIHsKIAkJLyoKIAkJICogQSBnbG9iYWwgZnVuY3Rpb24mIzM5O3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZQotCQkgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWwKLQkJICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZAotCQkgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi4KJiM0MzsJCSAqIHNjYWxhciBwYWlyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEKJiM0MzsJCSAqIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gT25seQomIzQzOwkJICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzCiYjNDM7CQkgKiBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUgb25lCiYjNDM7CQkgKiBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlCiYjNDM7CQkgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc28KJiM0MzsJCSAqIGl0cyBjYWxsZXIgcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXMKJiM0MzsJCSAqIGZpbmUuCiAJCSAqLwogCQlib29sIGxvY2FsX2Z1bmMgPSBzdWJwcm9nICZhbXA7JmFtcDsgIWlzX2dsb2JhbDsKJiM0MzsJCXUzMiBtZW1iZXJfa2luZHMgPSBCVEZfTUVNQkVSX1NDQUxBUjsKJiM0MzsKJiM0MzsJCWlmIChzdWJwcm9nKQomIzQzOwkJCW1lbWJlcl9raW5kcyB8PSBCVEZfTUVNQkVSX0FSRU5BX1BUUjsKIAotCQlpZiAobG9jYWxfZnVuYyB8fCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgYnRmLCB0LCAwKSkKJiM0MzsJCWlmIChsb2NhbF9mdW5jIHx8IGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIG1lbWJlcl9raW5kcykpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgwOTEsNyAmIzQzOzgwODQsOCBAQCBpbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKQogCQlpZiAoaXNfZ2xvYmFsKSB7CiAJCQlicGZfbG9nKGxvZywKIAkJCQkmIzM0O0dsb2JhbCBmdW5jdGlvbiAlcygpIGhhcyB1bnN1cHBvcnRlZCByZXR1cm4gdHlwZS4gJiMzNDsKLQkJCQkmIzM0O09ubHkgdm9pZCwgc2NhbGFyLCBvciBhIHNjYWxhci1vbmx5IHN0cnVjdC91bmlvbiB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXG4mIzM0OywKJiM0MzsJCQkJJiMzNDtPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiAmIzM0OwomIzQzOwkJCQkmIzM0O3NjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cbiYjMzQ7LAogCQkJCXRuYW1lKTsKIAkJfQogCQlyZXR1cm4gZXJyOwpAQCAtODEwNiw5ICYjNDM7ODEwMCw3IEBAIGludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCAmYW1wO3RhZ3MpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKJiM0MzsJCWJ0Zl9zY2FuX3R5cGVfdGFncyhidGYsIGFyZ3NbaV0udHlwZSwgJmFtcDt0YWdzKTsKIAogCQl0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBhcmdzW2ldLnR5cGUpOwogCQl3aGlsZSAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZTAzNmFlMjBiZjZiOS4uOWEzNjgwODEzNmM5YSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtOTk5NSw5ICYjNDM7OTk5NSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCSAqLwogCQlpZiAoIXJldHVybnNfdm9pZCkgewogCQkJbnJlZ3MgPSBicGZfcmV0X3JlZ19wYWlyKGVudiwgc3VicHJvZykgPyAyIDogMTsKLQkJCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCi0JCQkJbWFya19yZWdfdW5rbm93bihlbnYsIGNhbGxlci0mZ3Q7cmVncywgcmV0X3JlZ3NbaV0pOwomIzQzOwkJCW1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItJmd0O3JlZ3MsIHJldF9yZWdzWzBdKTsKIAkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCQlmb3IgKGkgPSAxOyBpICZsdDsgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7Y2FsbGVyLSZndDtyZWdzW3JldF9yZWdzW2ldXSwgTlVMTCwKJiM0MzsJCQkJCQkgICBCUEZfRElBR19NT0RfV1JJVEUpOwomIzQzOwkJCQltYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLSZndDtyZWdzLCByZXRfcmVnc1tpXSk7CiYjNDM7CQkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCQl9CiAJCX0KIAogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHsKQEAgLTEwNDAzLDEwICYjNDM7MTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KQogCQkgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGUKIAkJICogcmV0dXJuIHJlZ2lzdGVyKHMpCiAJCSAqLwotCQlicGZfZGlhZ19tb2RfYmVnaW4oZW52LCAmYW1wO2NhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IG5yZWdzOyBpJiM0MzsmIzQzOykKLQkJCWNhbGxlci0mZ3Q7cmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtJmd0O3JlZ3NbcmV0X3JlZ3NbaV1dOwotCQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdTMyIHJlZ25vID0gcmV0X3JlZ3NbaV07CiYjNDM7CiYjNDM7CQkJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtjYWxsZXItJmd0O3JlZ3NbcmVnbm9dLCAmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tyZWdub10sCiYjNDM7CQkJCQkgICBCUEZfRElBR19NT0RfV1JJVEUpOwomIzQzOwkJCWNhbGxlci0mZ3Q7cmVnc1tyZWdub10gPSBjYWxsZWUtJmd0O3JlZ3NbcmVnbm9dOwomIzQzOwkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCX0KIAl9CiAKIAkvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsCkBAIC0xMTM0MiwxNSAmIzQzOzExMzUxLDMzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAKIC8qCiAgKiBNYXJrIHRoZSByZWdpc3RlcihzKSBob2xkaW5nIGEgQHNpemUgYnl0ZSBrZnVuYyByZXR1cm4gdmFsdWUgYXMgdW5rbm93bgotICogc2NhbGFycy4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlciBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS4KJiM0MzsgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlcgomIzQzOyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LgomIzQzOyAqCiYjNDM7ICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlCiYjNDM7ICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdAomIzQzOyAqIHNjb3BlIGlzIHdoYXQgY2FycmllcyBpdHMgcHJlLWNhbGwgdmFsdWUgaW50byB0aGUgaGlzdG9yeS4gQSBzY29wZSB0cmFja3MgYQomIzQzOyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZgomIzQzOyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJiMzOTtzIHNjb3BlIG9wZW4gZm9yCiYjNDM7ICogdGhlIGNhbGxlciB0byBjbG9zZSwgc28gYSBsYXRlciB3cml0ZSB0byBSMCBzdGlsbCBsYW5kcyBpbiBpdC4KICAqLwotc3RhdGljIHZvaWQgbWFya19rZnVuY19yZXRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSkKJiM0MztzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKQogewogCXUzMiBpLCBucmVncyA9IHJldF9yZWdzX2NudChzaXplKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCiYjNDM7CW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1swXSk7CiYjNDM7CWlmIChucmVncyA9PSAxKQomIzQzOwkJcmV0dXJuIG5yZWdzOwomIzQzOwomIzQzOwlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJCW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7CiYjNDM7CQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yZWdzOwogfQogCiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKQEAgLTExNjE5LDEwICYjNDM7MTE2NDYsMzMgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KGNvbnN0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwgdTMyIGFyZ18KIAlyZXR1cm4gYXJnbiAmbHQ7PSBhcmdfaWR4OwogfQogCi0vKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZCAqLwotYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYykKJiM0MzsjZGVmaW5lIEJURl9NRU1CRVJfTUFYX0RFUFRICTQKJiM0MzsjZGVmaW5lIEJURl9NRU1CRVJfUEFUSF9MRU4JNjQKJiM0MzsKJiM0MztzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoIHsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcltCVEZfTUVNQkVSX01BWF9ERVBUSF07CiYjNDM7CWludCBkZXB0aDsKJiM0MzsJYm9vbCB0b29fZGVlcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAomIzQzOwkJCQkgICAgdTMyIG1lbWJlcl9raW5kcykKJiM0Mzt7CiYjNDM7CWlmICgobWVtYmVyX2tpbmRzICZhbXA7IEJURl9NRU1CRVJfU0NBTEFSKSAmYW1wOyZhbXA7IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoKG1lbWJlcl9raW5kcyAmYW1wOyBCVEZfTUVNQkVSX0FSRU5BX1BUUikgJmFtcDsmYW1wOyBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpbgomIzQzOyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5CiYjNDM7ICogbWVtYmVyIGNvdW50cyBhcyBpdHMgZWxlbWVudCB0eXBlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMsIGludCByZWMsCiYjNDM7CQkJCSAgIHN0cnVjdCBidGZfbWVtYmVyX3BhdGggKnBhdGgpCiB7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTsKIAljb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyOwpAQCAtMTE2MzYsMjcgJiM0MzsxMTY4Niw2NSBAQCBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCQltZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLSZndDt0eXBlLCBOVUxMKTsKIAkJaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChtZW1iZXJfdHlwZSkpIHsKLQkJCWlmIChyZWMgJmd0Oz0gMykgewomIzQzOwkJCWlmIChyZWMgJmd0Oz0gQlRGX01FTUJFUl9NQVhfREVQVEggLSAxKSB7CiAJCQkJdmVyYm9zZShlbnYsICYjMzQ7bWF4IHN0cnVjdCBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkXG4mIzM0Oyk7CiYjNDM7CQkJCWlmIChwYXRoKQomIzQzOwkJCQkJcGF0aC0mZ3Q7dG9vX2RlZXAgPSB0cnVlOwogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KLQkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyAmIzQzOyAxKSkKLQkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJaWYgKCFidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzLAomIzQzOwkJCQkJCSAgICByZWMgJiM0MzsgMSwgcGF0aCkpCiYjNDM7CQkJCWdvdG8gYmFkX3BhdGg7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoYnRmX3R5cGVfaXNfYXJyYXkobWVtYmVyX3R5cGUpKSB7CiAJCQlhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7CiAJCQlpZiAoIWFycmF5LSZndDtuZWxlbXMpCi0JCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCQlnb3RvIGJhZF9tZW1iZXI7CiAJCQltZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktJmd0O3R5cGUsIE5VTEwpOwotCQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSkKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICghYnRmX21lbWJlcl9raW5kX2FsbG93ZWQoYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzKSkKJiM0MzsJCQlnb3RvIGJhZF9tZW1iZXI7CiAJfQogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2JhZF9tZW1iZXI6CiYjNDM7CWlmIChwYXRoKQomIzQzOwkJcGF0aC0mZ3Q7ZGVwdGggPSByZWMgJiM0MzsgMTsKJiM0MztiYWRfcGF0aDoKJiM0MzsJaWYgKHBhdGggJmFtcDsmYW1wOyBwYXRoLSZndDtkZXB0aCkKJiM0MzsJCXBhdGgtJmd0O21lbWJlcltyZWNdID0gbWVtYmVyOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMsIDAsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KQomIzQzO3sKJiM0MzsJcmV0dXJuIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIEJURl9NRU1CRVJfU0NBTEFSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRmX21lbWJlcl9wYXRoX3N0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyX3BhdGggKnBhdGgsCiYjNDM7CQkJCWNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeikKJiM0Mzt7CiYjNDM7CXNpemVfdCBsZW4gPSAwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJYnVmWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGF0aC0mZ3Q7ZGVwdGg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBjaGFyICpuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcGF0aC0mZ3Q7bWVtYmVyW2ldLSZndDtuYW1lX29mZik7CiYjNDM7CiYjNDM7CQlpZiAoIW5hbWUgfHwgIW5hbWVbMF0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBidWZfc3ogLSBsZW4sICYjMzQ7JXMlcyYjMzQ7LCBsZW4gPyAmIzM0Oy4mIzM0OyA6ICYjMzQ7JiMzNDssIG5hbWUpOwomIzQzOwl9CiB9CiAKIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHsKQEAgLTEyMDM5LDcgJiM0MzsxMjEyNyw3IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiAJCSAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSkgfHwKIAkJICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnICYjNDM7IDFdKSkpIHsKIAkJaWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSAmYW1wOyZhbXA7ICFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpICZhbXA7JmFtcDsKLQkJICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS0mZ3Q7YnRmLCByZWZfdCwgMCkpIHsKJiM0MzsJCSAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byB2b2lkLCBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjA1NSw3ICYjNDM7MTIxNDMsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAogCQkgKiBzY2FsYXJzLiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZCBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlLgogCQkgKi8KIAkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpICZhbXA7JmFtcDsKLQkJICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS0mZ3Q7YnRmLCByZWZfdCwgMCkpIHsKJiM0MzsJCSAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzExMSw3ICYjNDM7MTMxOTksNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLSZndDtidGYsIHJlZl90LCAwKSkgewomIzQzOwkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQkJZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7CiAJCQkJY29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTsKIApAQCAtMTM2NTMsNyAmIzQzOzEzNzQxLDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmcKIAogCQlzdHJ1Y3RfbWV0YSA9IGJ0Zl9maW5kX3N0cnVjdF9tZXRhKHJldF9idGYsIHJldF9idGZfaWQpOwogCQlpZiAoaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEtJmd0O2Z1bmNfaWQpKSB7Ci0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCwgMCkpIHsKJiM0MzsJCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCkpIHsKIAkJCQl2ZXJib3NlKGVudiwgJiMzNDticGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcbiYjMzQ7KTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTEzNzY3LDcgJiM0MzsxMzg1NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDsKIAljb25zdCBjaGFyICpvcGVyYXRpb247CiAJaW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDsKLQl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkOwomIzQzOwl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkLCByZXRfbnJlZ3MgPSAxOwogCXN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYzsKIAlzdHJ1Y3QgYnRmICpkZXNjX2J0ZjsKIAlpbnQgaWQ7CkBAIC0xNDAyMSwyNSAmIzQzOzE0MTA5LDU5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJfQogCiAJaWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkgewotCQltYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXRfbnJlZ3MgPSBtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC0mZ3Q7c2l6ZSk7CiAJCWlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCAmYW1wOyZhbXA7IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fAogCQkgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpCiAJCQlfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCAmYW1wO3JlZ3NbQlBGX1JFR18wXSk7CiAJfSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHsKJiM0MzsJCXN0cnVjdCBidGZfbWVtYmVyX3BhdGggcGF0aCA9IHt9OwomIzQzOwkJY29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSAmIzM0OyYjMzQ7OwomIzQzOwogCQkvKgogCQkgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZAotCQkgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczoKLQkJICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhcgotCQkgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4KJiM0MzsJCSAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZAomIzQzOwkJICogaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4KJiM0MzsJCSAqIE9ubHkgc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIKJiM0MzsJCSAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUKJiM0MzsJCSAqIG9uZSBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlCiYjNDM7CQkgKiByZXN1bHQgdG8gdGhlIGFyZW5hLgogCQkgKi8KLQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgZGVzY19idGYsIHQsIDApKSB7CiYjNDM7CQlpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCwKJiM0MzsJCQkJCSAgICBCVEZfTUVNQkVSX1NDQUxBUiB8IEJURl9NRU1CRVJfQVJFTkFfUFRSLCAwLCAmYW1wO3BhdGgpKSB7CiAJCQl2ZXJib3NlKGVudiwKLQkJCQkmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcbiYjMzQ7LAomIzQzOwkJCQkmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcbiYjMzQ7LAogCQkJCWZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLAogCQkJCWJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpKTsKJiM0MzsJCQlpZiAocGF0aC50b29fZGVlcCkgewomIzQzOwkJCQltZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQkJCWVudiwgJiMzNDsgSXQgbmVzdHMgc3RydWN0cyBtb3JlIHRoYW4gJWQgbGV2ZWxzIGRlZXAuJiMzNDssCiYjNDM7CQkJCQlCVEZfTUVNQkVSX01BWF9ERVBUSCk7CiYjNDM7CQkJfSBlbHNlIGlmIChwYXRoLmRlcHRoKSB7CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBwYXRoLm1lbWJlcltwYXRoLmRlcHRoIC0gMV07CiYjNDM7CQkJCWNoYXIgYmFkX25hbWVbQlRGX01FTUJFUl9QQVRIX0xFTl07CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7CiYjNDM7CiYjNDM7CQkJCWJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsICZhbXA7cGF0aCwgYmFkX25hbWUsIHNpemVvZihiYWRfbmFtZSkpOwomIzQzOwkJCQliYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtJmd0O3R5cGUsIE5VTEwpOwomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDttZW1iZXIgJiMzOTslcyYjMzk7IGhhcyB0eXBlICVzXG4mIzM0OywgYmFkX25hbWUsCiYjNDM7CQkJCQlidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTsKJiM0MzsJCQkJbWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoCiYjNDM7CQkJCQllbnYsCiYjNDM7CQkJCQkmIzM0OyBJdHMgbWVtYmVyICYjMzk7JXMmIzM5OyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuJiMzNDssCiYjNDM7CQkJCQliYWRfbmFtZSwgYnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7CiYjNDM7CQkJfQomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIGluc25faWR4LCAmIzM0O3Vuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZSYjMzQ7LAomIzQzOwkJCQkmIzM0O0NhbGwgYSBrZXJuZWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9ubHkgc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4mIzM0OywKJiM0MzsJCQkJJiMzNDslcygpIHJldHVybnMgJXMgJXMgYnkgdmFsdWUuJXMgJiMzNDsKJiM0MzsJCQkJJiMzNDtPbmx5IGtmdW5jcyByZXR1cm5pbmcgc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycywgb3IgJiMzNDsKJiM0MzsJCQkJJiMzNDtzdHJ1Y3R1cmVzIGNvbXBvc2VkIG9mIHNjYWxhciB2YWx1ZXMgb3IgYXJlbmEgcG9pbnRlcnMgYXJlICYjMzQ7CiYjNDM7CQkJCSYjMzQ7c3VwcG9ydGVkLiYjMzQ7LAomIzQzOwkJCQlmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSwKJiM0MzsJCQkJYnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LSZndDtuYW1lX29mZiksIG1lbWJlcl9ub3RlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCW1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LSZndDtzaXplKTsKJiM0MzsJCXJldF9ucmVncyA9IG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LSZndDtzaXplKTsKIAl9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkgewogCQlwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LSZndDt0eXBlLCAmYW1wO3B0cl90eXBlX2lkKTsKIAkJZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsICZhbXA7bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7CkBAIC0xNDE3MCw3ICYjNDM7MTQyOTIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCSAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlCiAJICogaXRlcmF0b3IgcGF0aCYjMzk7cyBkaWFnbm9zdGljIHBvc2l0aW9uLgogCSAqLwotCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJaWYgKHJldF9ucmVncyA9PSAxKQomIzQzOwkJYnBmX2RpYWdfbW9kX2VuZChlbnYpOwogCiAJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSkgewogCQllcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsICZhbXA7bWV0YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMKaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYwpAQCAtMSwxMSAmIzQzOzEsNTMgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2FnZ3JlZ2F0ZV9yZXRfZnVuYy5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqdm1saW51eF9idGYsICptb2R1bGVfYnRmID0gTlVMTDsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwomIzQzOwlib29sIHRhZ2dlZCA9IGZhbHNlOwomIzQzOwlfX3MzMiBpZDsKJiM0MzsKJiM0MzsJdm1saW51eF9idGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTsKJiM0MzsJaWYgKCF2bWxpbnV4X2J0ZikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKCYjMzQ7YnBmX3Rlc3Rtb2QmIzM0Oywgdm1saW51eF9idGYpOwomIzQzOwlpZiAoIW1vZHVsZV9idGYpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogcHJvZ190ZXN0X3JldF9hcmVuYTo6YSBpcyAmIzM5O3ZvaWQgX19hcmVuYV90YWcgKiYjMzk7OiBQVFIgLSZndDsgVFlQRV9UQUcgLSZndDsgdm9pZCAqLwomIzQzOwlpZCA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQobW9kdWxlX2J0ZiwgJiMzNDtwcm9nX3Rlc3RfcmV0X2FyZW5hJiMzNDssIEJURl9LSU5EX1NUUlVDVCk7CiYjNDM7CWlmIChpZCAmbHQ7PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgYnRmX21lbWJlcnMoYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIGlkKSlbMF0udHlwZSk7CiYjNDM7CWlmICghdCB8fCAhYnRmX2lzX3B0cih0KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl0ID0gYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIHQtJmd0O3R5cGUpOwomIzQzOwl0YWdnZWQgPSB0ICZhbXA7JmFtcDsgYnRmX2lzX3R5cGVfdGFnKHQpICZhbXA7JmFtcDsKJiM0MzsJCSAhc3RyY21wKGJ0Zl9fbmFtZV9ieV9vZmZzZXQobW9kdWxlX2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpLCAmIzM0O2FyZW5hJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnRmX19mcmVlKG1vZHVsZV9idGYpOwomIzQzOwlidGZfX2ZyZWUodm1saW51eF9idGYpOwomIzQzOwomIzQzOwlyZXR1cm4gdGFnZ2VkOwomIzQzO30KIAogdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZCkKIHsKIAlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTsKIAlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuYyk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpCiYjNDM7CQlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSk7CiYjNDM7CWVsc2UKJiM0MzsJCXRlc3RfX3NraXAoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuYwppbmRleCA2ZjY2ZmM4MjJjZWRlLi5mMDA3N2Q5NTFhMjVkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfZnVuYy5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KICNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKICNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmX2FyZW5hX2NvbW1vbi5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAogdHlwZWRlZiB1bnNpZ25lZCBfX2ludDEyOCB1MTI4OwpAQCAtMjM0LDQgJiM0MzsyMzUsMTQ5IEBAIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX3VuaW9uX3B0cl9mYWlsKHZvaWQpCiAKICNlbmRpZgogCiYjNDM7LyoKJiM0MzsgKiBnY2MgcmV0dXJucyBhIGJ5LXZhbHVlIHN0cnVjdCB0aHJvdWdoIGEgaGlkZGVuIHBvaW50ZXIsIGFuZCBlbWl0cyB0aGUKJiM0MzsgKiAmIzM5O3IwID0gcjEmIzM5OyByZXR1cm5pbmcgaXQgYWZ0ZXIgdGhlIF9fbmFrZWQgYm9keSYjMzk7cyBleGl0LCBsZWF2aW5nIHRoZQomIzQzOyAqIHN1YnByb2dyYW0gZmFsbGluZyB0aHJvdWdoLiBCdWlsZCB0aGVzZSB3aXRoIGNsYW5nIG9ubHkuCiYjNDM7ICovCiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19fKQomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9wYWlyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpsbzsKJiM0MzsJdm9pZCBfX2FyZW5hICpoaTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwOwomIzQzOwlfX3U2NCB4OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFyZW5hX2FycmF5IHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwWzJdOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFyZW5hX3NpbmdsZSB7CiYjNDM7CXZvaWQgX19hcmVuYSAqcDsKJiM0Mzt9OwomIzQzOwomIzQzO3VuaW9uIGFyZW5hX3VwYWlyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwOwomIzQzOwlfX3U2NCBoYWx2ZXNbMl07CiYjNDM7fTsKJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9wYWlyKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3BhaXJdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9wYWlyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9hbmRfc2NhbGFyKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXJdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9hcnJheSBnbG9iYWxfcmV0X2FyZW5hX2FycmF5KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FycmF5KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FycmF5XTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfYXJyYXkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfc2luZ2xlKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZV07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19uYWtlZCB1bmlvbiBhcmVuYV91cGFpciBnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3VuaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfdW5pb24pCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMKaW5kZXggZDZiNDIyYWU5Nzg0Yi4uZTljODJkZjhlZmIyNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jCkBAIC0xOCw2ICYjNDM7MTgsOCBAQCB2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZCkKIAk6ICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9pMTI4KSwKIAkgICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwpLAogCSAgJiMzNDtyJiMzNDsoJmFtcDticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIpLAomIzQzOwkgICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKSwKJiM0MzsJICAmIzM0O3ImIzM0OygmYW1wO2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApLAogCSAgJiMzNDtyJiMzNDsoJmFtcDticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paSksCiAJICAmIzM0O3ImIzM0OygmYW1wO2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZykpOwogfQpAQCAtNzEsNyAmIzQzOzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpCiAKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAotX19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWVtYmVyICYjMzk7cCYjMzk7IGhhcyB0eXBlIFBUUiYjMzQ7KQogX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoCkBAIC04NCw2ICYjNDM7ODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKQogCTogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnMmIzM0OykKJiM0MztfX21zZygmIzM0O21lbWJlciAmIzM5O2luLnAmIzM5OyBoYXMgdHlwZSBQVFImIzM0OykKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX25lc3RlZF9wdHJfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZCYjMzQ7KQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfdG9vX2RlZXBfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcF07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbShicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjIgIXJlYWRfb2smIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2QKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jCkBAIC0wLDAgJiM0MzsxLDEyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSAmYW1wOyZhbXA7IF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAyMwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmCiYjNDM7ICogcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVyIGRvaW5nIGl0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpCiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqYSwgKmI7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHI7CiYjNDM7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwkvKiBCb3RoIGhhbHZlcyBjb21lIGJhY2sgaW4gUjA6UjIsIHBvaW50aW5nIGF0IHBhZ2UgYW5kIHBhZ2UgJiM0MzsgNC4gKi8KJiM0MzsJciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKCh1NjQpcGFnZSk7CiYjNDM7CWlmICghci5hIHx8ICFyLmIpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJYSA9IGFyZW5hX3B0cihyLmEpOwomIzQzOwliID0gYXJlbmFfcHRyKHIuYik7CiYjNDM7CSphID0gMTsKJiM0MzsJKmIgPSAyOwomIzQzOwlpZiAoKmEgIT0gMSkKJiM0MzsJCXJldHVybiAzOwomIzQzOwlpZiAoKmIgIT0gMikKJiM0MzsJCXJldHVybiA0OwomIzQzOwomIzQzOwkvKiBUaGUgaGFsdmVzIGFyZSB0aGUgZmlyc3QgdHdvIHNsb3RzIG9mIHRoZSBwYWdlIHRoZSBwcm9ncmFtIGFsbG9jYXRlZC4gKi8KJiM0MzsJcGFnZVswXSA9IDc7CiYjNDM7CWlmICgqYSAhPSA3KQomIzQzOwkJcmV0dXJuIDU7CiYjNDM7CXBhZ2VbMV0gPSA5OwomIzQzOwlpZiAoKmIgIT0gOSkKJiM0MzsJCXJldHVybiA2OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV9taXhlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCByOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqcDsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CS8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqLwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoKHU2NClwYWdlKTsKJiM0MzsJaWYgKCFyLnApCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJaWYgKHIudGFnICE9IDB4YmVlZikKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwlwID0gYXJlbmFfcHRyKHIucCk7CiYjNDM7CSpwID0gMzsKJiM0MzsJaWYgKCpwICE9IDMpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzJiMzNDspCiYjNDM7X19tc2coJiMzNDttZW1iZXIgJiMzOTtiJiMzOTsgaGFzIHR5cGUgUFRSJiMzNDspCiYjNDM7aW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfdW50YWdnZWRfZmFpbCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByOwomIzQzOwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQoMCk7CiYjNDM7CiYjNDM7CXJldHVybiByLmEgPT0gci5iOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjQKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWVtYmVyICYjMzk7YiYjMzk7IGhhcyB0eXBlIFBUUiYjMzQ7KQomIzQzO2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByOwomIzQzOwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24oMCk7CiYjNDM7CiYjNDM7CXJldHVybiByLmEgPT0gci5iOwomIzQzO30KJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0JiMzNDspCiYjNDM7X19za2lwKCYjMzQ7bmVlZHMgTExWTSAyMyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBkdW1teV90ZXN0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jCmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMKQEAgLTYwLDcgJiM0Mzs2MCw3IEBAIF9fbm9pbmxpbmUgaW50IGV4Y2VwdGlvbl9jYl9va19hcmdfc21hbGwoaW50IGEpCiAKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19leGNlcHRpb25fY2IoZXhjZXB0aW9uX2NiX2JhZF9yZXRfdHlwZTEpCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLiYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O09ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnMmIzM0OykKIGludCByZWplY3RfZXhjZXB0aW9uX2NiX3R5cGVfMShzdHJ1Y3QgX19za19idWZmICpjdHgpCiB7CiAJYnBmX3Rocm93KDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwppbmRleCA4MTVmMzQyZWI0YjA1Li42NzJhM2FhZGQ5Y2IyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwpAQCAtNzM0LDQgJiM0Mzs3MzQsNTIgQEAgaW50IGNoZWNrX2FyZW5hX2FyZ19yZXQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSAmYW1wOyZhbXA7IF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAyMwomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9wYWdlX3BhaXIgewomIzQzOwl1MzIgX19hcmVuYSAqZmlyc3Q7CiYjNDM7CXUzMiBfX2FyZW5hICpzZWNvbmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztfX3dlYWsgc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBzcGxpdF9hcmVuYV9wYWdlKHUzMiBfX2FyZW5hICpwYWdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBwYWlyOwomIzQzOwomIzQzOwlwYWlyLmZpcnN0ID0gcGFnZTsKJiM0MzsJcGFpci5zZWNvbmQgPSBwYWdlICYjNDM7IDE7CiYjNDM7CiYjNDM7CXJldHVybiBwYWlyOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7CiYjNDM7CXN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgcGFpcjsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXBhaXIgPSBzcGxpdF9hcmVuYV9wYWdlKHBhZ2UpOwomIzQzOwlpZiAoIXBhaXIuZmlyc3QgfHwgIXBhaXIuc2Vjb25kKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CS8qIEJvdGggaGFsdmVzIG9mIHRoZSBwYWlyIG11c3Qgc3RpbGwgYmUgdXNhYmxlIGFzIGFyZW5hIHBvaW50ZXJzLiAqLwomIzQzOwlmaXJzdCA9IHBhaXIuZmlyc3Q7CiYjNDM7CXNlY29uZCA9IHBhaXIuc2Vjb25kOwomIzQzOwkqZmlyc3QgPSAxOwomIzQzOwkqc2Vjb25kID0gMjsKJiM0MzsJaWYgKCpmaXJzdCAhPSAxKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWlmICgqc2Vjb25kICE9IDIpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggODUwY2Y0ZjgzMGM0OC4uMGVmMmNlODc1ZDcxZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC05ODEsNiAmIzQzOzk4MSw0OCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKHU2NCB0YWcpCiAJcmV0dXJuIHI7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSh1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9ICh2b2lkICopKGFkZHIgJiM0MzsgNCkgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgciA9IHsgLnAgPSAodm9pZCAqKWFkZHIsIC50YWcgPSAweGJlZWYgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gTlVMTCB9OwomIzQzOwomIzQzOwlyZXR1cm4gcjsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbih1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CXVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gciA9IHsgLmEgPSAodm9pZCAqKWFkZHIgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQodTY0IHRhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCByID0geyAuaW4gPSB7IC5wID0gTlVMTCB9LCAudGFnID0gdGFnIH07CiYjNDM7CiYjNDM7CXJldHVybiByOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXAodTY0IHYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHIgPSB7IC5sMSA9IHsgLmwyID0geyAubDMgPSB7IC5sNCA9IHsgLnYgPSB2IH0gfSB9IH0gfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwogX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKQogewogCXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2lpIHIgPSB7IC5hID0gYSwgLmIgPSBiIH07CkBAIC0xNTM5LDYgJiM0MzsxNTgxLDEyIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X2kxMjgpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcikKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9mYXN0Y2FsbCwgS0ZfRkFTVENBTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbikKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKQogI2VuZGlmCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKaW5kZXggNjVlNjkzYWRhNzM2NC4uYTJlOWU5ZjMxODRlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCkBAIC0yNiw2ICYjNDM7MjYsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgewogfTsKICNlbmRpZgogCiYjNDM7I2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpCiYjNDM7I2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoJiMzNDthcmVuYSYjMzQ7KSkpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIF9fYXJlbmFfdGFnCiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgYnBmX2l0ZXJfdGVzdG1vZF9zZXE7CiAKIHN0cnVjdCBwcm9nX3Rlc3RfcGFzczEgewpAQCAtNzAsNiAmIzQzOzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7CS8qIDE2IGJ5dGVzOiBjb250YWlucyBhIHBvaW50ZXIgKi8KIAlfX3U2NCB0YWc7CiB9OwogCiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgewkvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovCiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmE7CiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCB7CS8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqLwomIzQzOwl2b2lkIF9fYXJlbmFfdGFnICpwOwomIzQzOwlfX3U2NCB0YWc7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCB7CS8qIDE2IGJ5dGVzOiAmIzM5O2ImIzM5OyBsYWNrcyB0aGUgYXJlbmEgdGFnICovCiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmE7CiYjNDM7CXZvaWQgKmI7CiYjNDM7fTsKJiM0MzsKJiM0Mzt1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHsJLyogOCBieXRlczogJiMzOTtiJiMzOTsgbGFja3MgdGhlIGFyZW5hIHRhZyAqLwomIzQzOwl2b2lkIF9fYXJlbmFfdGFnICphOwomIzQzOwl2b2lkICpiOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHsJLyogMTYgYnl0ZXM6IHRoZSBwb2ludGVyIGhpZGVzIG9uZSBsZXZlbCBkb3duICovCiYjNDM7CXN0cnVjdCB7CiYjNDM7CQl2b2lkICpwOwomIzQzOwl9IGluOwomIzQzOwlfX3U2NCB0YWc7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHsJLyogOCBieXRlcywgYnV0IG5lc3RlZCBwYXN0IHRoZSA0LWxldmVsIHdhbGsgbGltaXQgKi8KJiM0MzsJc3RydWN0IHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJc3RydWN0IHsKJiM0MzsJCQkJc3RydWN0IHsKJiM0MzsJCQkJCV9fdTY0IHY7CiYjNDM7CQkJCX0gbDQ7CiYjNDM7CQkJfSBsMzsKJiM0MzsJCX0gbDI7CiYjNDM7CX0gbDE7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyB7CS8qIDI0IGJ5dGVzOiB0b28gbGFyZ2UgZm9yIFIwOlIyICovCiAJX191NjQgYTsKIAlfX3U2NCBiOwpAQCAtMTU5LDYgJiM0MzsyMDQsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wYWlyKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3BhaXIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwoX191NjQgYSwgX191NjQgYikgX19rc3ltOwogc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKSBfX2tzeW07CiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKF9fdTY0IHRhZykgX19rc3ltOwomIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltOwomIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKF9fdTY0IGFkZHIpIF9fa3N5bTsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07CiYjNDM7dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKF9fdTY0IHYpIF9fa3N5bTsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcodm9pZCkgX19rc3ltOwogX191NjQgYnBmX2tmdW5jX2NhbGxfc3RhY2tfYXJnKF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsCiAJCQkgICAgICAgX191NjQgZSwgX191NjQgZiwgX191NjQgZywgX191NjQgaCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc5MzUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGludGVyZXN0aW5nIG9uZSBhY3R1YWxseS4gVGhlIEJQRiB2ZXJpZmllciBpcyBiZWluZyB1cGRhdGVkIHRvIHBlcm1pdCBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUsICpwcm92aWRlZCogdGhvc2UgYWdncmVnYXRlcyBhcmUgbWFkZSB1cCBlbnRpcmVseSBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyAoZGVmaW5lZCBieSB0aGF0IGBidGZfdHlwZV90YWcoJiMzNDthcmVuYSYjMzQ7KWAgYXR0cmlidXRlKS4gIFByZXZpb3VzbHksIG9ubHkgc2NhbGFycyB3ZXJlIGFsbG93ZWQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBleHBhbnNpb24gb2Ygd2hhdCYjMzk7cyBwZXJtaXNzaWJsZSwgYW5kIGl0JiMzOTtzIGdvaW5nIHRvIHJlcXVpcmUgY2FyZWZ1bCByZXZpZXcuCgpNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSBtb2RpZmljYXRpb25zIGluIGBrZXJuZWwvYnBmL2J0Zi5jYCBhbmQgYGtlcm5lbC9icGYvdmVyaWZpZXIuY2AuICBJJiMzOTttIHNlZWluZyBuZXcgZnVuY3Rpb25zIGxpa2UgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAgd2hpY2ggaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCBmb3IgdmVyaWZ5aW5nIHRoZXNlIGFyZW5hIHBvaW50ZXIgdHlwZXMsIGFuZCBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAsIHRoYXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0YWtpbmcgdGhlIHBsYWNlIG9mIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCBpbiBhIGZldyBzcG90cy4gVGhlbiB0aGVyZSBhcmUgY2hhbmdlcyB0byB0aGUgY29yZSBjYWxsLWNoZWNraW5nIGFuZCByZXR1cm4taGFuZGxpbmcgZnVuY3Rpb25zOiBgY2hlY2tfZnVuY19jYWxsYCwgYHByZXBhcmVfZnVuY19leGl0YCwgYG1hcmtfa2Z1bmNfcmV0X3JlZ3NgLCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgLiAgVGhlc2UgYXJlIHRoZSBoZWFydCBvZiB0aGUgdmVyaWZpZXIgbG9naWMsIHNvIGhhbmRsaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIHRob3NlIGFyZW5hIHBvaW50ZXJzIGNvcnJlY3RseSBpcyBnb2luZyB0byBiZSBrZXkuCgpUaGlzIGhhcyBmdXp6aW5nIHdyaXR0ZW4gYWxsIG92ZXIgaXQuIFRoaXMgaXMgYSBjbGVhciBleHBhbnNpb24gb2YgZnVuY3Rpb25hbGl0eSBhbmQsIGFzIHdpdGggYW55IGNoYW5nZSB0byB0aGUgdmVyaWZpZXIsIEkmIzM5O2Qgd2FudCB0byBiZSBzdXJlIGl0JiMzOTtzIHJvYnVzdCBhZ2FpbnN0IG1pc2NvbmZpZ3VyYXRpb25zIG9yIG1hbGljaW91cyBpbnB1dC4gVGltZSB0byBwdXQgdGhlIGZ1enplciBvbiB0aGVzZS4KCkZpcnN0IEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24uIEkmIzM5O20gdGhpbmtpbmc6CgoqICAgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAKKiAgIGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYAoqICAgYGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGtgCiogICBgbWFya19rZnVuY19yZXRfcmVnc2AKKiAgIGBjaGVja19rZnVuY19jYWxsYAoqICAgYGNoZWNrX2Z1bmNfY2FsbGAKKiAgIGBwcmVwYXJlX2Z1bmNfZXhpdGAKCkkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHNjb3BlIG9mIHdoYXQmIzM5O3MgY2hhbmdpbmcuCgpPbmUgbW9yZSB0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRlc3Rpbmcgd2l0aCB0aGUgY29ycmVjdCBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEJQRiBhbmQgQlBGXF9TWVNDQUxMIHNob3VsZCBiZSBzdGFuZGFyZCwgYW5kIEJQRlxfSklUIHRvby4gQnV0IEkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYW55IHNwZWNpYWwgY29uZmlncyByZWxhdGVkIHRvIEJQRiBhcmVuYXMgYXJlIG5lZWRlZCB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5LiBMZXQmIzM5O3MgZG8gYSBxdWljayBncmVwIGZvciBgQlBGX0FSRU5BYCBvciByZWxhdGVkIHRlcm1zLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nIHRoYXQmIzM5O3MgbmVlZGVkIGZvciB0aGUgZnVsbCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0JQRl9BUkVOQSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5MjIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipLZXJuZWwgQlBGIEFyZW5hOiBIdW50aW5nIGZvciBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwmIzM5O3MgQlBGIHN1YnN5c3RlbSBoYW5kbGVzIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgYW4gJiMzNDthcmVuYSYjMzQ7IG1pZ2h0IGJlIGludm9sdmVkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSWYgdGhlcmUmIzM5O3MgYW4gJiMzNDthcmVuYSwmIzM0OyBpdCYjMzk7cyBsaWtlbHkgY29udHJvbGxlZCBieSBzb21lIGBLY29uZmlnYCBzZXR0aW5nLCBkZXRlcm1pbmluZyBpdHMgc2l6ZSwgZW5hYmxpbmcvZGlzYWJsaW5nIGl0LCBvciB0d2Vha2luZyBpdHMgYmVoYXZpb3IuCgpUaGVyZWZvcmUsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGFuZCBpbW1lZGlhdGVseSBgZ3JlcGAgZm9yICYjMzQ7YXJlbmEmIzM0OyB3aXRoaW4gYGtlcm5lbC9icGYvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBiaXJkJiMzOTtzLWV5ZSB2aWV3IG9mIGFueSBleGlzdGluZyBjb25maWd1cmF0aW9uIGtub2JzIHJlbGF0ZWQgdG8gdGhpcyBjb25jZXB0LiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGluaXRpYWwgc3RlcCB0byBjaGVjayB3aGljaCBvcHRpb25zIGFyZSBpbiB0aGUgc291cmNlIHRyZWUsIGFuZCBmcm9tIHRob3NlLCBxdWlja2x5IGxvb2sgZm9yIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgQlBGIHN1YnN5c3RlbSBwYXJhbWV0ZXJzIGFuZCByZWxhdGVkIHNvdXJjZSBjb2RlLiBJIGV4cGVjdCBJJiMzOTtsbCBxdWlja2x5IGZpbmQgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZXJlLiBPbmNlIEkgaGF2ZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLCB0aGVuIEkgY2FuIHNlZSB3aGF0IHNvdXJjZSBmaWxlcyBhbmQgY29kZSBwYXRocyBhcmUgaW5mbHVlbmNlZCBieSB0aG9zZSBzZXR0aW5ncy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FyZW5hJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTIyMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBCUEYgQXJlbmEgSXNzdWUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgYmFzZWQgb24gd2hhdCBJJiMzOTt2ZSBzZWVuLCB0aGlzIGZlZWxzIGxpa2UgaXQgY291bGQgYmUgYSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZSBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgQlBGIGFyZW5hLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvZGUsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBrZXJuZWwvYnBmL2FyZW5hLmNgLCBvciBzb21ldGhpbmcgY2xvc2VseSByZWxhdGVkIHdpdGhpbiB0aGUgQlBGIHN1YnN5c3RlbS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGFyZW5hIG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQsIGRlYWxsb2NhdGVkLCBhbmQgaG93IGl04oCZcyBiZWluZyB0cmFja2VkLiBJJiMzOTttIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGZyYWdtZW50YXRpb24gcHJvYmxlbXMsIG9yIHBvc3NpYmx5IG1lbW9yeSBsZWFrcyB3aXRoaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBrZXJuZWwuIEEgcXVpY2sgc2NhbiBvZiByZWxhdGVkIGZpbGVzIG1pZ2h0IGFsc28gYmUgd2FycmFudGVkLCB0byBzZWUgaG93IHRoYXQgYXJlbmEgaXMgdXNlZCBhbmQgaW50ZXJhY3RlZCB3aXRoIGFjcm9zcyBvdGhlciBwYXJ0cyBvZiB0aGUgQlBGIHN5c3RlbS4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBwcm92aWRlIHRoZSBrZXkgdG8gZmlndXJpbmcgb3V0IHRoaXMgaXNzdWUsIHNvIHRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgYmVnaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7a2VybmVsL2JwZiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O2FyZW5hLmMmIzM0OywKICAgICYjMzQ7YXJyYXltYXAuYyYjMzQ7LAogICAgJiMzNDtiYWNrdHJhY2suYyYjMzQ7LAogICAgJiMzNDtibG9vbV9maWx0ZXIuYyYjMzQ7LAogICAgJiMzNDticGZfY2dycF9zdG9yYWdlLmMmIzM0OywKICAgICYjMzQ7YnBmX2lub2RlX3N0b3JhZ2UuYyYjMzQ7LAogICAgJiMzNDticGZfaW5zbl9hcnJheS5jJiMzNDssCiAgICAmIzM0O2JwZl9pdGVyLmMmIzM0OywKICAgICYjMzQ7YnBmX2xvY2FsX3N0b3JhZ2UuYyYjMzQ7LAogICAgJiMzNDticGZfbHJ1X2xpc3QuYyYjMzQ7LAogICAgJiMzNDticGZfbHJ1X2xpc3QuaCYjMzQ7LAogICAgJiMzNDticGZfbHNtLmMmIzM0OywKICAgICYjMzQ7YnBmX2xzbV9wcm90by5jJiMzNDssCiAgICAmIzM0O2JwZl9zdHJ1Y3Rfb3BzLmMmIzM0OywKICAgICYjMzQ7YnBmX3Rhc2tfc3RvcmFnZS5jJiMzNDssCiAgICAmIzM0O2J0Zi5jJiMzNDssCiAgICAmIzM0O2J0Zl9pdGVyLmMmIzM0OywKICAgICYjMzQ7YnRmX3JlbG9jYXRlLmMmIzM0OywKICAgICYjMzQ7Y2ZnLmMmIzM0OywKICAgICYjMzQ7Y2dyb3VwLmMmIzM0OywKICAgICYjMzQ7Y2dyb3VwX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDtjaGVja19idGYuYyYjMzQ7LAogICAgJiMzNDtjbnVtLmMmIzM0OywKICAgICYjMzQ7Y251bV9kZWZzLmgmIzM0OywKICAgICYjMzQ7Y29uc3RfZm9sZC5jJiMzNDssCiAgICAmIzM0O2NvcmUuYyYjMzQ7LAogICAgJiMzNDtjcHVtYXAuYyYjMzQ7LAogICAgJiMzNDtjcHVtYXNrLmMmIzM0OywKICAgICYjMzQ7Y3J5cHRvLmMmIzM0OywKICAgICYjMzQ7ZGV2bWFwLmMmIzM0OywKICAgICYjMzQ7ZGlhZ25vc3RpY3MuYyYjMzQ7LAogICAgJiMzNDtkaWFnbm9zdGljcy5oJiMzNDssCiAgICAmIzM0O2Rpc2FzbS5jJiMzNDssCiAgICAmIzM0O2Rpc2FzbS5oJiMzNDssCiAgICAmIzM0O2Rpc3BhdGNoZXIuYyYjMzQ7LAogICAgJiMzNDtkbWFidWZfaXRlci5jJiMzNDssCiAgICAmIzM0O2ZpeHVwcy5jJiMzNDssCiAgICAmIzM0O2hhc2h0YWIuYyYjMzQ7LAogICAgJiMzNDtoZWxwZXJzLmMmIzM0OywKICAgICYjMzQ7aW5vZGUuYyYjMzQ7LAogICAgJiMzNDtrbWVtX2NhY2hlX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDtsaW5rX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDtsaXZlbmVzcy5jJiMzNDssCiAgICAmIzM0O2xvY2FsX3N0b3JhZ2UuYyYjMzQ7LAogICAgJiMzNDtsb2cuYyYjMzQ7LAogICAgJiMzNDtscG1fdHJpZS5jJiMzNDssCiAgICAmIzM0O21hcF9pbl9tYXAuYyYjMzQ7LAogICAgJiMzNDttYXBfaW5fbWFwLmgmIzM0OywKICAgICYjMzQ7bWFwX2l0ZXIuYyYjMzQ7LAogICAgJiMzNDttZW1hbGxvYy5jJiMzNDssCiAgICAmIzM0O21tYXBfdW5sb2NrX3dvcmsuaCYjMzQ7LAogICAgJiMzNDttcHJvZy5jJiMzNDssCiAgICAmIzM0O25ldF9uYW1lc3BhY2UuYyYjMzQ7LAogICAgJiMzNDtvZmZsb2FkLmMmIzM0OywKICAgICYjMzQ7cGVyY3B1X2ZyZWVsaXN0LmMmIzM0OywKICAgICYjMzQ7cGVyY3B1X2ZyZWVsaXN0LmgmIzM0OywKICAgICYjMzQ7cHJvZ19pdGVyLmMmIzM0OywKICAgICYjMzQ7cXVldWVfc3RhY2tfbWFwcy5jJiMzNDssCiAgICAmIzM0O3JhbmdlX3RyZWUuYyYjMzQ7LAogICAgJiMzNDtyYW5nZV90cmVlLmgmIzM0OywKICAgICYjMzQ7cmVsb19jb3JlLmMmIzM0OywKICAgICYjMzQ7cmV1c2Vwb3J0X2FycmF5LmMmIzM0OywKICAgICYjMzQ7cmluZ2J1Zi5jJiMzNDssCiAgICAmIzM0O3Jxc3BpbmxvY2suYyYjMzQ7LAogICAgJiMzNDtycXNwaW5sb2NrLmgmIzM0OywKICAgICYjMzQ7c3RhY2ttYXAuYyYjMzQ7LAogICAgJiMzNDtzdGF0ZXMuYyYjMzQ7LAogICAgJiMzNDtzdHJlYW0uYyYjMzQ7LAogICAgJiMzNDtzeXNjYWxsLmMmIzM0OywKICAgICYjMzQ7c3lzZnNfYnRmLmMmIzM0OywKICAgICYjMzQ7dGFza19pdGVyLmMmIzM0OywKICAgICYjMzQ7dGN4LmMmIzM0OywKICAgICYjMzQ7dG51bS5jJiMzNDssCiAgICAmIzM0O3Rva2VuLmMmIzM0OywKICAgICYjMzQ7dHJhbXBvbGluZS5jJiMzNDssCiAgICAmIzM0O3ZlcmlmaWVyLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7cHJlbG9hZCYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAxMDgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipBbmFseXppbmcgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gaW4gYGFyZW5hLmNgKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBhcmVuYS5jYCBmaWxlIGhhcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBiYWtlZCBpbnRvIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSB3aXRoaW4gdGhhdCBmaWxlIGJlaGF2ZXMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIGNlcnRhaW4gYnVpbGQgY29uZmlndXJhdGlvbnMsIGZlYXR1cmUgZmxhZ3MsIG9yIHBsYXRmb3JtIHNwZWNpZmljcy4gSSYjMzk7bSBnb2luZyB0byBsb29rIGZvciBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBsaWtlIGAjaWZkZWZgLCBgI2lmbmRlZmAsIGAjaWZgLCBgI2Vsc2VgLCBhbmQgYCNlbmRpZmAgdGhhdCBjb3VsZCBhZmZlY3Qgd2hpY2ggc2VjdGlvbnMgb2YgY29kZSBhcmUgaW5jbHVkZWQgZHVyaW5nIHRoZSBjb21waWxhdGlvbiBwcm9jZXNzLiBJZGVudGlmeWluZyB0aGVzZSBkaXJlY3RpdmVzIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmaWxlJiMzOTtzIGZsZXhpYmlsaXR5IGFuZCBwb3RlbnRpYWwgdmFyaWFiaWxpdHkgYWNyb3NzIGRpZmZlcmVudCBkZXBsb3ltZW50cyBvciB1c2UgY2FzZXMuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBpbmZvcm0gbXkgb3ZlcmFsbCB1bmRlcnN0YW5kaW5nIG9mIHRoZSBidWlsZCBzeXN0ZW0gYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgbW9kdWxlIGludGVncmF0ZXMgd2l0aCB0aGUgYnJvYWRlciBwcm9qZWN0LiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGZpbGUgaXMgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJlbmEubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxua2VybmVsL2JwZi9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBhcmVuYS5vIHJhbmdlX3RyZWUub1xua2VybmVsL2JwZi9NYWtlZmlsZS0yMS1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDQxNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBLZXkgQlBGIEZ1bmN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUuIEZpcnN0LCB0aGUgdXN1YWwgc3VzcGVjdHMgYXJlIGF0IHBsYXk6IGBDT05GSUdfTU1VYCwgYENPTkZJR182NEJJVGAsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIGxldCYjMzk7cyBnZXQgZG93biB0byB0aGUgY29yZSBmdW5jdGlvbnMuIE15IGluaXRpYWwgc2NhbiB5aWVsZGVkIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHBhcnRpY3VsYXJseSByZWxldmFudCwgY2x1c3RlcmVkIGFyb3VuZCBgYnRmLmNgIGFuZCBgdmVyaWZpZXIuY2AuCgpJbiBgYnRmLmNgLCBJIHNhdyBgYnRmX3R5cGVfaXNfYXJlbmFfcHRyYCwgYGJ0Zl9zY2FuX3R5cGVfdGFnc2AgKHdoaWNoIHdhcyBtb2RpZmllZCksIGBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGVgIChhbHNvIG1vZGlmaWVkKSwgYW5kIGBidGZfcHJlcGFyZV9mdW5jX2FyZ3NgIChtb2RpZmllZCBhZ2FpbikuIFRoZW4sIG92ZXIgaW4gYHZlcmlmaWVyLmNgLCB0aGUgbGlzdCBpbmNsdWRlcyBgY2hlY2tfZnVuY19jYWxsYCAobW9kaWZpZWQpLCBgcHJlcGFyZV9mdW5jX2V4aXRgIChtb2RpZmllZCksIGBtYXJrX2tmdW5jX3JldF9yZWdzYCAobW9kaWZpZWQpLCBgYnRmX21lbWJlcl9raW5kX2FsbG93ZWRgIChhZGRlZCksIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCAoYWRkZWQpLCBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAgKGFkZGVkKSwgYGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3RgIChtb2RpZmllZCksIGBidGZfbWVtYmVyX3BhdGhfc3RyYCAoYWRkZWQpLCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgIChtb2RpZmllZCkuCgpBZnRlciBhIGZpcnN0IHBhc3MsIEkgbmFycm93ZWQgaXQgZG93biB0bzogYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCwgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgLCBgbWFya19rZnVuY19yZXRfcmVnc2AsIGBjaGVja19rZnVuY19jYWxsYCwgYGNoZWNrX2Z1bmNfY2FsbGAsIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJIGNoZWNrZWQgd2hpY2ggZnVuY3Rpb25zIGFyZSBzdGF0aWMuIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCwgYG1hcmtfa2Z1bmNfcmV0X3JlZ3NgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19mdW5jX2NhbGxgLCBhbmQgYHByZXBhcmVfZnVuY19leGl0YCBhcmUgYWxsIHN0YXRpYy4gVGhhdCYjMzk7cyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgYXMgSSBuZWVkIHRvIGZvY3VzIG9uIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGZvciB0aGUgQVBJIGVudHJ5IHBvaW50cy4KCkdpdmVuIHRoYXQgY29uc3RyYWludCwgSSByZWZpbmVkIHRoZSBsaXN0IHRvIGZvY3VzIG9uIGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYCwgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGBidGZfcHJlcGFyZV9mdW5jX2FyZ3NgLCBhbmQgYGJwZl9jaGVja2AuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYCBhbmQgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXMgdGhhdCBJIHNob3VsZCBsb29rIGF0IHJpZ2h0IG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvYnRmLmM9Nzk1Nj1zdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy03OTkwLVxua2VybmVsL2JwZi9idGYuYzo3OTkxOlx0XHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxua2VybmVsL2JwZi9idGYuYy03OTkyLVx0XHRcdHJldHVybiAwO1xuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTY3Mz1zdGF0aWMgYm9vbCBidGZfc3RydWN0X21lbWJlcl93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MTktXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjA6Ym9vbCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MjEtXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3Mjc9c3RhdGljIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTczMC17XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MzE6XHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwMzgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQ2hlY2tpbmcgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgQlRGIHR5cGUgYW5hbHlzaXMsIGFuZCBzcGVjaWZpY2FsbHksIG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBrZXJuZWwuIEkmIzM5O20gYXNzdW1pbmcsIGJhc2VkIG9uIHRoZSBuYW1pbmcsIHRoYXQgdGhpcyBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBnaXZlbiBCVEYgdHlwZSBkZXNjcmlwdG9yIHJlcHJlc2VudHMgYSBwb2ludGVyIHRoYXQgcmVzaWRlcyB3aXRoaW4gc29tZSBtYW5hZ2VkIGFyZW5hIG9yIHBvb2wuCgpUaGUgaW1tZWRpYXRlIGltcGxpY2F0aW9ucyBhcmUgaW1wb3J0YW50LiBJcyB0aGlzIGNoZWNrIHBlcmZvcm1lZCBhdCBjb21waWxlIHRpbWUsIG9yIHJ1bnRpbWU/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGFyZSB0aGVyZSBvdGhlciBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIHRvIHF1YWxpZnkgYSBwb2ludGVyPyBBbmQgZG9lcyBpdCByZWxhdGUgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHNvbWUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3k/IE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHBhcnQgb2YgZW5zdXJpbmcgc2FmZXR5IGFuZCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGxpa2VseSB3aXRoaW4gYSBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtIG9yIGRyaXZlci4gQXJlIHRoZXJlIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgaGVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhdG9taWNhbGx5IGFjY2Vzc2VkIG1lbW9yeSBsb2NhdGlvbnMgb3IgYXJlIHRoZXJlIHBvdGVudGlhbGx5IHJhY2UgY29uZGl0aW9ucyB0byB3b3JyeSBhYm91dD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB2YXJpb3VzIHR5cGUgcXVhbGlmaWVycyB0b287IGNvbnN0LCB2b2xhdGlsZSwgZXRjLiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGhhdmUgdG8gY2hlY2sgbW9yZSB0aGFuIGp1c3QgdGhlIHBsYWluIEJURiB0eXBlIGtpbmQuIFRoaXMgY291bGQgaGF2ZSBzb21lIHJlYWwgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIHZlcmlmaWVyIGZ1bmN0aW9ucyBhcyB3ZWxsLgoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoZSBwb3NzaWJsZSBjYXNlcyB3aGVyZSBhIHBvaW50ZXIgKndvdWxkbiYjMzk7dCogYmUgY29uc2lkZXJlZCBhcmVuYS1tYW5hZ2VkLiBBbmQgYnkgZGVmaW5pdGlvbiwgcG9pbnRlcnMgcmV0dXJuZWQgZnJvbSBtYWxsb2MsIG9yIGV2ZW4gc29tZXRoaW5nIHJldHVybmVkIGZyb20gYW4gZUJQRiBtYXAgYXJlIG5vdC4gSSBoYXZlIHRvIG1ha2Ugc3VyZSBteSBsb2dpYyBpcyBhcyBjbGVhciBhcyBwb3NzaWJsZS4KCkkmIzM5O20gc3RhcnRpbmcgdG8gZm9ybXVsYXRlIGEgbWVudGFsIG1vZGVsLCBhbmQgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGltcGxlbWVudGF0aW9uIHRvIHZlcmlmeSBteSBoeXBvdGhlc2VzLiBUaGlzIGlzIGEgY3JpdGljYWwgYnVpbGRpbmcgYmxvY2sgZm9yIEJURi1iYXNlZCBhbmFseXNpcywgYW5kIGFueSBlcnJvcnMgaGVyZSBjYW4gbGVhZCB0byBzdWJ0bGUgYnVncyBkb3duIHRoZSBsaW5lLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCB3b3Jrcy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtidGZfdHlwZV9pc19hcmVuYV9wdHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2J0Zi5jPTM0ODY9c3RhdGljIGludCBidGZfdHlwZV90YWdfd2Fsayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tLVxua2VybmVsL2JwZi9idGYuYy0zNTI1LVxua2VybmVsL2JwZi9idGYuYzozNTI2OmJvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxua2VybmVsL2JwZi9idGYuYy0zNTI3LXtcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jPTc5NDY9c3RhdGljIHZvaWQgYnRmX3NjYW5fdHlwZV90YWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsIHUzMiAqdGFncylcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NTAtXG5rZXJuZWwvYnBmL2J0Zi5jOjc5NTE6XHRpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NTItXHRcdCp0YWdzIHw9IEFSR19UQUdfQVJFTkE7XG4tLVxua2VybmVsL2JwZi9idGYuYz03OTU2PXN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0Zixcbi0tXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NjUtXHQgKi9cbmtlcm5lbC9icGYvYnRmLmM6Nzk2NjpcdGlmIChzdWJwcm9nIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbmtlcm5lbC9icGYvYnRmLmMtNzk2Ny1cdFx0cmV0dXJuIDA7XG4tLVxua2VybmVsL2JwZi92ZXJpZmllci5jPTExNjU4PXN0YXRpYyBib29sIGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxuLS1cbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY2Mi1cdFx0cmV0dXJuIHRydWU7XG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE2NjM6XHRpZiAoKG1lbWJlcl9raW5kcyBcdTAwMjYgQlRGX01FTUJFUl9BUkVOQV9QVFIpIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY2NC1cdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMDE4CgkJCQkJCQlvdXRwdXQ6IDE3NwoJCQkJCQkJdGhvdWdodHM6IDQ2NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQlBGIFZlcmlmaWVyIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhYm91dCBob3cgdGhlIEJQRiB2ZXJpZmllciBoYW5kbGVzIHJldHVybiB0eXBlcyBmcm9tIGtmdW5jcyBhbmQgc3VicHJvZ3JhbXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgZXhwYW5kaW5nIHRoZSBhbGxvd2VkIHJldHVybiB0eXBlcyBiZXlvbmQganVzdCBzaW1wbGUgc2NhbGFycyB0byBpbmNsdWRlIHN0cnVjdHMgb3IgdW5pb25zLCBhcyBsb25nIGFzIHRoZXkmIzM5O3JlIGNvbXBvc2VkIG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzLiBJIGtub3cgdGhlIHZlcmlmaWVyIGlzIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgYW55IGNoYW5nZXMgaGVyZSB3YXJyYW50IGNhcmVmdWwgYXR0ZW50aW9uLgoKVGhlIGVudHJ5IHBvaW50cyBmb3IgdGhlIGNoZWNrcyBhcmUgYGJ0Zl9wcmVwYXJlX2Z1bmNfYXJnc2AsIGBjaGVja19rZnVuY19jYWxsYCwgYW5kIGBjaGVja19mdW5jX2NhbGxgLiBTaW5jZSBgY2hlY2tfa2Z1bmNfY2FsbGAgYW5kIGBjaGVja19mdW5jX2NhbGxgIGFyZSBzdGF0aWMsIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGlzIG5ldyBsb2dpYzogYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgIGFuZCBgYnRmX3R5cGVfaXNfYXJlbmFfcHRyYCwgYW5kIGFsc28gYGJ0Zl9wcmVwYXJlX2Z1bmNfYXJnc2AuIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0byBiZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzLiBJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aG9zZSB0aHJlZSwgYW5kIEkmIzM5O2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IG90aGVycy4KCkFzIGZvciBjb25maWd1cmF0aW9uLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIG1lbnRpb25zIGBidGZfdHlwZV90YWcoJiMzNDthcmVuYSYjMzQ7KWAsIGFuZCBJIGluaXRpYWxseSBsb29rZWQgZm9yIGEgc3BlY2lmaWMgYENPTkZJR19CUEZfQVJFTkFgIGJ1dCBjb25maXJtZWQgdGhhdCBpc24mIzM5O3QgcHJlc2VudCwgYnV0IGBhcmVuYS5jYCBpcyBjb21waWxlZCB3aGVuIGBDT05GSUdfTU1VYCwgYENPTkZJR182NEJJVGAsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCBhcmUgZW5hYmxlZC4gU28sIHRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IG5vIHNwZWNpYWwgY29uZmlnIGZsYWdzIGFyZSBuZWVkZWQgYmV5b25kIHRoZSBzdGFuZGFyZCBCUEYgb25lcy4KClNvLCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggZW5hYmxlcyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBpZiB0aGV5JiMzOTtyZSBjb21wb3NlZCBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGhvdyB0aGUgdmVyaWZpZXIgaGFuZGxlcyB0eXBlIGNoZWNraW5nIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCB0aGUgYXJlbmEgcG9pbnRlcnMuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc2hpZnQgaW4gdGhlIHBlcm1pdHRlZCByZXR1cm4gdHlwZXMuIEZyb20gdXNlcnNwYWNlLCB0aGlzIGlzIHRyaWdnZXJlZCB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCB0aGUga2Z1bmNzIG9yIHN1YnByb2dyYW1zIHRoYXQgbm93IHJldHVybiBzdHJ1Y3RzL3VuaW9ucy4KCkkmIzM5O2xsIGJlIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlc2Ugc3ltYm9sczoKCiogICBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAKKiAgIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgCiogICBgYnRmX3ByZXBhcmVfZnVuY19hcmdzYAoKT2theSwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mJiMzNDssCiAgICAmIzM0O2J0Zl90eXBlX2lzX2FyZW5hX3B0ciYjMzQ7LAogICAgJiMzNDtidGZfcHJlcGFyZV9mdW5jX2FyZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyBpZiB0aGV5IGFyZSBjb21wb3NlZCBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyAocG9pbnRlcnMgd2l0aCB0aGUgYGJ0Zl90eXBlX3RhZyhcJiMzNDthcmVuYVwmIzM0OylgIGF0dHJpYnV0ZSkuIFByZXZpb3VzbHksIG9ubHkgc2NhbGFycyB3ZXJlIGFsbG93ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXImIzM5O3MgdHlwZSBjaGVja2luZyBsb2dpYyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgKGhhbmRsaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIGFyZW5hIHBvaW50ZXJzKS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdGhhdCBjYWxsIHN1Y2gga2Z1bmNzIG9yIHN1YnByb2dyYW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2J0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YmIzM0OywKICAgICYjMzQ7YnRmX3R5cGVfaXNfYXJlbmFfcHRyJiMzNDssCiAgICAmIzM0O2J0Zl9wcmVwYXJlX2Z1bmNfYXJncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IHJldHVybmluZyBzdHJ1Y3RzIG9yIHVuaW9ucyBieSB2YWx1ZSBmcm9tIGtmdW5jcyBhbmQgZ2xvYmFsIHN1YnByb2dyYW1zIGlmIHRoZXkgYXJlIGNvbXBvc2VkIG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIChwb2ludGVycyB3aXRoIHRoZSBgYnRmX3R5cGVfdGFnKFwmIzM0O2FyZW5hXCYjMzQ7KWAgYXR0cmlidXRlKS4gUHJldmlvdXNseSwgb25seSBzY2FsYXJzIHdlcmUgYWxsb3dlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2ZXJpZmllciYjMzk7cyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZyAoaGFuZGxpbmcgbXVsdGlwbGUgcmV0dXJuIHJlZ2lzdGVycyBhbmQgYXJlbmEgcG9pbnRlcnMpLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwgc3VjaCBrZnVuY3Mgb3Igc3VicHJvZ3JhbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjcgMDY6NDU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBrZnVuY3MgYW5kIHN1YnByb2dyYW1zIHRvIHJldHVybiBzdHJ1Y3RzL3VuaW9ucyBjb250YWluaW5nIGFyZW5hIHBvaW50ZXJzIGJ5IHZhbHVlLiBJdCB1cGRhdGVzIHRoZSB2ZXJpZmllciYjMzk7cyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGUgdmVyaWZpZXIuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGFmN2U4YThhOTUwMWU1ZWEzYmNhOWI4ZTEyMmZkYzRlY2M1NDVlNjMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyNyAwNjo0MzozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0CmluZGV4IDg5ZGVhNmIwYjAyNDEuLjk2YmY2M2QzNDQzMjIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdApAQCAtNTgxLDIwICYjNDM7NTgxLDI3IEBAIGFnYWluc3QgdGhlIGFyZW5hLiBMYXJnZXIgYWNjZXNzZXMgbXVzdCB2ZXJpZnkgdGhlIHJhbmdlIGV4cGxpY2l0bHkuCiBBIGtmdW5jIG1heSByZXR1cm4gYSBzY2FsYXIsIGEgcG9pbnRlciwgb3IgYSBzbWFsbCBzdHJ1Y3Qgb3IgdW5pb24gYnkKIHZhbHVlLiBBIHNjYWxhciBvciBwb2ludGVyIG9mIHVwIHRvIDggYnl0ZXMgaXMgcmV0dXJuZWQgaW4gUjAsIGFzIHVzdWFsLgogCi1BIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycwotKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtOyBhcnJheXMgb2Ygc2NhbGFycyBhcmUKLWFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGUgcmF3Ci1jb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyCi1hbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3QKLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXMKLW9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3QgcmV0dXJuIGluIFIwOlIyIGF0Ci1hbGwuCiYjNDM7QSBzdHJ1Y3Qgb3IgdW5pb24gcmV0dXJuZWQgYnkgdmFsdWUgbXVzdCBiZSBjb21wb3NlZCBvbmx5IG9mIHNjYWxhcnMgYW5kIGFyZW5hCiYjNDM7cG9pbnRlcnMgKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtIGFuZCBhbiBhcmVuYQomIzQzO3BvaW50ZXIgaXMgb25lIGNhcnJ5aW5nIHRoZSBgYGJ0Zl90eXBlX3RhZygmIzM0O2FyZW5hJiMzNDspYGAgYXR0cmlidXRlOyBhcnJheXMgb2YKJiM0MztlaXRoZXIgYXJlIGFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGUKJiM0MztyYXcgY29udGVudHMgb2YgUjAgKGFuZCBSMiksIHNvIGEgbWVtYmVyIG9mIGFueSBvdGhlciBwb2ludGVyIHR5cGUgd291bGQgYmUKJiM0MztsYXVuZGVyZWQgaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHRoZSB2ZXJpZmllciYjMzk7cyBwb2ludGVyIHByb3ZlbmFuY2UgYW5kCiYjNDM7cmVmZXJlbmNlIHRyYWNraW5nLiBBIHN0cnVjdCBvciB1bmlvbiB3aXRoIHN1Y2ggYSBtZW1iZXIgaXMgdGhlcmVmb3JlIHJlamVjdGVkCiYjNDM7YXQgbG9hZCB0aW1lLCBhbmQgc28gaXMgb25lIHdpdGggYSBmbG9hdGluZy1wb2ludCBtZW1iZXIsIHdoaWNoIHRoZSBBQkkgbWF5IG5vdAomIzQzO3JldHVybiBpbiBSMDpSMiBhdCBhbGwuCiYjNDM7CiYjNDM7QW4gYXJlbmEgcG9pbnRlciBtZW1iZXIgaXMgaGFuZGVkIGJhY2sgYXMgYSBzY2FsYXIgdG9vLCBidXQgbm90aGluZyBpcyBsb3N0IGJ5CiYjNDM7dGhhdC4gVGhlIHByb2dyYW0gbXVzdCBgYGNhc3Rfa2VybigpYGAgdGhlIHZhbHVlIGJlZm9yZSBpdCBjYW4gYmUgdXNlZCwgYW5kIHRoZQomIzQzO3ZlcmlmaWVyIGFsbG93cyB0aGF0IGNhc3Qgb24gYW55IHNjYWxhciwgc28gYSBsYXVuZGVyZWQgYXJlbmEgYWRkcmVzcyBnaXZlcyB0aGUKJiM0Mztwcm9ncmFtIG5vIHJlYWNoIGl0IGRpZCBub3QgYWxyZWFkeSBoYXZlLiBUaGUgcmVzdWx0IGlzIGNvbmZpbmVkIHRvIHRoZQomIzQzO3Byb2dyYW0mIzM5O3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuCiAKIEEga2Z1bmMgbWF5IGFsc28gcmV0dXJuIGEgdmFsdWUgbGFyZ2VyIHRoYW4gOCBieXRlcyBhbmQgdXAgdG8gMTYgYnl0ZXMgLS0gYQotc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZAotaW4gdGhlIHJlZ2lzdGVyIHBhaXIgUjA6UjIsIG1hdGNoaW5nIHRoZSBjb252ZW50aW9uIExMVk0gdXNlcyBmb3IgdGhlIEJQRgotdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLiBBIHN0cnVjdCBvcgotdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLgomIzQzO3N0cnVjdCBvciB1bmlvbiBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycywgb3IgYW4gYGBfX2ludDEyOGBgLiBTdWNoIGEKJiM0Mzt2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTQomIzQzO3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLgomIzQzO0Egc3RydWN0IG9yIHVuaW9uIG9mIDggYnl0ZXMgb3IgbGVzcyBpcyByZXR1cm5lZCBpbiBSMCBhbG9uZS4KIAogOjoKIApAQCAtNjIwLDEwICYjNDM7NjI3LDEwIEBAIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBKSVRlZCwgc2luY2UgdGhlIGludGVycHJldGVyIHByb3BhZ2F0ZXMgb25seSBSMCBvdXQgb2YKIGEgc3VicHJvZ3JhbTogd2l0aG91dCBhIEpJVCB0aGUgcmV0dXJuIHZhbHVlIHN0YXlzIGluIFIwIGFsb25lLCBhbmQgYSBjYWxsZXIKIHJlYWRpbmcgUjIgaXMgcmVqZWN0ZWQgZm9yIHJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCByZWdpc3Rlci4gQSBnbG9iYWwKIHN1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW4gaXNvbGF0aW9uLCBzbyBpdHMgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIHJldHVybiBpcwotcmVzdHJpY3RlZCB0byBzY2FsYXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkCi1pbmxpbmUgYW5kIGhhcyBubyBzdWNoIHJlc3RyaWN0aW9uLiBUaGUgbWFpbiBwcm9ncmFtIGlzIG5vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuCi12YWx1ZSBpcyB0aGUgcHJvZ3JhbSYjMzk7cyBleGl0IGNvZGUsIHJlYWQgb3V0IG9mIFIwIGFsb25lLCBzbyBhIGRlY2xhcmVkIHVwcGVyCi1oYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC4KJiM0MztyZXN0cmljdGVkIHRvIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGp1c3QgbGlrZSBhIGtmdW5jJiMzOTtzOyBhIHN0YXRpYwomIzQzO3N1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcwomIzQzO25vdCBjb3ZlcmVkOiBpdHMgcmV0dXJuIHZhbHVlIGlzIHRoZSBwcm9ncmFtJiMzOTtzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjAKJiM0MzthbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlciBoYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC4KIAogQSBnbG9iYWwgc3VicHJvZ3JhbSBtdXN0IGxlYXZlIGEgc2NhbGFyIGluICpldmVyeSogcmVnaXN0ZXIgb2YgdGhlIHBhaXIsIHNvCiBib3RoIGhhbHZlcyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaGF2ZSB0byBiZSBhc3NpZ25lZC4gTGVhdmluZyB0aGUgdXBwZXIgaGFsZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmgKaW5kZXggMDA0YjA2Nzg1NTIxYy4uYWU5ZjYwNjUzOWY0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oCkBAIC0xNDg4LDggJiM0MzsxNDg4LDE1IEBAIGludCBicGZfam1wX29mZnNldChzdHJ1Y3QgYnBmX2luc24gKmluc24pOwogc3RydWN0IGJwZl9pYXJyYXkgKmJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCk7CiB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzayk7CiBib29sIGJwZl9zdWJwcm9nX2lzX2dsb2JhbChjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZyk7Ci1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyk7CiYjNDM7CiYjNDM7LyogS2luZHMgb2YgbWVtYmVyIGEgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIG1heSBiZSBjb21wb3NlZCBvZi4gKi8KJiM0MztlbnVtIGJ0Zl9tZW1iZXJfa2luZCB7CiYjNDM7CUJURl9NRU1CRVJfU0NBTEFSCT0gQklUKDApLCAvKiBhbiBpbnQgb3IgYW4gZW51bSAqLwomIzQzOwlCVEZfTUVNQkVSX0FSRU5BX1BUUgk9IEJJVCgxKSwgLyogYSBwb2ludGVyIGNhcnJ5aW5nIHRoZSAmIzM0O2FyZW5hJiMzNDsgdHlwZSB0YWcgKi8KJiM0Mzt9OwomIzQzOwomIzQzO2Jvb2wgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcyk7CiAKIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpOwogYm9vbCBicGZfaXNfdGhyb3dfa2Z1bmMoc3RydWN0IGJwZl9pbnNuICppbnNuKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnRmLmggYi9pbmNsdWRlL2xpbnV4L2J0Zi5oCmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYnRmLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9idGYuaApAQCAtMjM1LDYgJiM0MzsyMzUsNyBAQCBzdHJ1Y3QgYnRmX3JlY29yZCAqYnRmX3BhcnNlX2ZpZWxkcyhjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZQogCQkJCSAgICB1MzIgZmllbGRfbWFzaywgdTMyIHZhbHVlX3NpemUpOwogaW50IGJ0Zl9jaGVja19hbmRfZml4dXBfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0Ziwgc3RydWN0IGJ0Zl9yZWNvcmQgKnJlYyk7CiBib29sIGJ0Zl90eXBlX2lzX3ZvaWQoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTsKJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7CiBzMzIgYnRmX2ZpbmRfYnlfbmFtZV9raW5kKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3QgY2hhciAqbmFtZSwgdTgga2luZCk7CiBzMzIgYnBmX2ZpbmRfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBraW5kLCBzdHJ1Y3QgYnRmICoqYnRmX3ApOwogc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL2J0Zi5jIGIva2VybmVsL2JwZi9idGYuYwppbmRleCA5MWI4Y2U3N2Y2OTlhLi5mNmQ4MmE4ZmQ2MTdiIDEwMDY0NAotLS0gYS9rZXJuZWwvYnBmL2J0Zi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvYnRmLmMKQEAgLTM1MjMsNiAmIzQzOzM1MjMsMjIgQEAgc3RhdGljIGludCBidGZfdHlwZV90YWdfd2Fsayhjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0Mztib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCkKJiM0Mzt7CiYjNDM7CWlmICghYnRmX3R5cGVfaXNfcHRyKHQpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtJmd0O3R5cGUpOyBidGZfdHlwZV9pc19tb2RpZmllcih0KTsKJiM0MzsJICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LSZndDt0eXBlKSkgewomIzQzOwkJaWYgKCFidGZfdHlwZV9pc190eXBlX3RhZyh0KSB8fCBidGZfdHlwZV9rZmxhZyh0KSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmICghc3RyY21wKF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC0mZ3Q7bmFtZV9vZmYpLCAmIzM0O2FyZW5hJiMzNDspKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGJ0Zl9maW5kX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiAJCQkgdTMyIG9mZiwgaW50IHN6LCBzdHJ1Y3QgYnRmX2ZpZWxkX2luZm8gKmluZm8sIHUzMiBmaWVsZF9tYXNrKQogewpAQCAtNzkyNyw1MSAmIzQzOzc5NDMsMTkgQEAgc3RhdGljIGludCBidGZfc2Nhbl9kZWNsX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsCi0JCQkgICAgICB1MzIgKnRhZ3MpCiYjNDM7c3RhdGljIHZvaWQgYnRmX3NjYW5fdHlwZV90YWdzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgdTMyIHR5cGVfaWQsIHUzMiAqdGFncykKIHsKLQlzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl90eXBlX3RhZ19tYXRjaCBmdW5jX3R5cGVfdGFnc1tdID0gewotCQl7ICYjMzQ7YXJlbmEmIzM0OywgQVJHX1RBR19BUkVOQSB9LAotCX07Ci0Jc3RydWN0IGJ0Zl90eXBlX3RhZ193YWxrX2N0eCBjdHg7Ci0JY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwotCWludCBlcnI7Ci0KIAkvKiBGaW5kIHRoZSBmaXJzdCBwb2ludGVyIHR5cGUgaW4gdGhlIGNoYWluLiAqLwotCXQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwomIzQzOwljb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpOwogCi0JLyoKLQkgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcywKLQkgKiB3aGljaCBuZWl0aGVyIExMVk0gbm9yIEdDQyBzdXBwb3J0IGFueXdheS4KLQkgKi8KLQlpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSkKLQkJcmV0dXJuIDA7Ci0KLQljdHgudCA9IHQ7Ci0JZXJyID0gYnRmX3R5cGVfdGFnX3dhbGsoYnRmLCAmYW1wO2N0eCwgZnVuY190eXBlX3RhZ3MsCi0JCQkJQVJSQVlfU0laRShmdW5jX3R5cGVfdGFncykpOwotCWlmIChlcnIpIHsKLQkJYnBmX2xvZygmYW1wO2Vudi0mZ3Q7bG9nLAotCQkJJiMzNDtmdW5jdGlvbiBzaWduYXR1cmUgbWVtYmVyIGhhcyBtdWx0aXBsZSB0eXBlIHRhZ3NcbiYjMzQ7KTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0JKnRhZ3MgfD0gY3R4LnJlczsKLQotCXJldHVybiAwOwomIzQzOwlpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpCiYjNDM7CQkqdGFncyB8PSBBUkdfVEFHX0FSRU5BOwogfQogCiAvKiBDaGVjayB3aGV0aGVyIHRoZSB0eXBlIGlzIGEgdmFsaWQgcmV0dXJuIHR5cGUuICovCiBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidGYsCiAJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHN1YnByb2csIGJvb2wgaXNfZ2xvYmFsKQogewotCXUzMiB0YWdzID0gMDsKLQlpbnQgZXJyOwotCi0JZXJyID0gYnRmX3NjYW5fdHlwZV90YWdzKGVudiwgYnRmLCB0LSZndDt0eXBlLCAmYW1wO3RhZ3MpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KIAl0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LSZndDt0eXBlLCBOVUxMKTsKIAogCS8qCkBAIC03OTc5LDcgJiM0Mzs3OTYzLDcgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnQKIAkgKiBHZW5lcmFsIGFyZW5hIHZhcmlhYmxlcyBhcmUgbm90IGFsbG93ZWQsIHNpbmNlIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHJldHVybiBieSB2YWx1ZQogCSAqIGEgdmFyaWFibGUgdGhhdCYjMzk7cyBvbiB0aGUgaGVhcCBpbiB0aGUgZmlyc3QgcGxhY2UuCiAJICovCi0JaWYgKHN1YnByb2cgJmFtcDsmYW1wOyAodGFncyAmYW1wOyBBUkdfVEFHX0FSRU5BKSAmYW1wOyZhbXA7IGJ0Zl90eXBlX2lzX3B0cih0KSkKJiM0MzsJaWYgKHN1YnByb2cgJmFtcDsmYW1wOyBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSkKIAkJcmV0dXJuIDA7CiAKIAkvKiBXZSBhbHdheXMgYWNjZXB0IHZvaWQgb3Igc2NhbGFycy4gKi8KQEAgLTc5ODksMTMgJiM0Mzs3OTczLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0CiAJaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSAmYW1wOyZhbXA7IHQtJmd0O3NpemUgJmx0Oz0gMTYpIHsKIAkJLyoKIAkJICogQSBnbG9iYWwgZnVuY3Rpb24mIzM5O3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZQotCQkgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWwKLQkJICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZAotCQkgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi4KJiM0MzsJCSAqIHNjYWxhciBwYWlyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEKJiM0MzsJCSAqIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4gT25seQomIzQzOwkJICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzCiYjNDM7CQkgKiBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUgb25lCiYjNDM7CQkgKiBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlCiYjNDM7CQkgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc28KJiM0MzsJCSAqIGl0cyBjYWxsZXIgcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXMKJiM0MzsJCSAqIGZpbmUuCiAJCSAqLwogCQlib29sIGxvY2FsX2Z1bmMgPSBzdWJwcm9nICZhbXA7JmFtcDsgIWlzX2dsb2JhbDsKJiM0MzsJCXUzMiBtZW1iZXJfa2luZHMgPSBCVEZfTUVNQkVSX1NDQUxBUjsKJiM0MzsKJiM0MzsJCWlmIChzdWJwcm9nKQomIzQzOwkJCW1lbWJlcl9raW5kcyB8PSBCVEZfTUVNQkVSX0FSRU5BX1BUUjsKIAotCQlpZiAobG9jYWxfZnVuYyB8fCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgYnRmLCB0LCAwKSkKJiM0MzsJCWlmIChsb2NhbF9mdW5jIHx8IGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIG1lbWJlcl9raW5kcykpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTgwOTEsNyAmIzQzOzgwODQsOCBAQCBpbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKQogCQlpZiAoaXNfZ2xvYmFsKSB7CiAJCQlicGZfbG9nKGxvZywKIAkJCQkmIzM0O0dsb2JhbCBmdW5jdGlvbiAlcygpIGhhcyB1bnN1cHBvcnRlZCByZXR1cm4gdHlwZS4gJiMzNDsKLQkJCQkmIzM0O09ubHkgdm9pZCwgc2NhbGFyLCBvciBhIHNjYWxhci1vbmx5IHN0cnVjdC91bmlvbiB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXG4mIzM0OywKJiM0MzsJCQkJJiMzNDtPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiAmIzM0OwomIzQzOwkJCQkmIzM0O3NjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cbiYjMzQ7LAogCQkJCXRuYW1lKTsKIAkJfQogCQlyZXR1cm4gZXJyOwpAQCAtODEwNiw5ICYjNDM7ODEwMCw3IEBAIGludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpCiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCi0JCWVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCAmYW1wO3RhZ3MpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKJiM0MzsJCWJ0Zl9zY2FuX3R5cGVfdGFncyhidGYsIGFyZ3NbaV0udHlwZSwgJmFtcDt0YWdzKTsKIAogCQl0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBhcmdzW2ldLnR5cGUpOwogCQl3aGlsZSAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMKaW5kZXggZTAzNmFlMjBiZjZiOS4uOWEzNjgwODEzNmM5YSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuYwpAQCAtOTk5NSw5ICYjNDM7OTk5NSwxNCBAQCBzdGF0aWMgaW50IGNoZWNrX2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJCSAqLwogCQlpZiAoIXJldHVybnNfdm9pZCkgewogCQkJbnJlZ3MgPSBicGZfcmV0X3JlZ19wYWlyKGVudiwgc3VicHJvZykgPyAyIDogMTsKLQkJCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCi0JCQkJbWFya19yZWdfdW5rbm93bihlbnYsIGNhbGxlci0mZ3Q7cmVncywgcmV0X3JlZ3NbaV0pOwomIzQzOwkJCW1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItJmd0O3JlZ3MsIHJldF9yZWdzWzBdKTsKIAkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCQlmb3IgKGkgPSAxOyBpICZsdDsgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7Y2FsbGVyLSZndDtyZWdzW3JldF9yZWdzW2ldXSwgTlVMTCwKJiM0MzsJCQkJCQkgICBCUEZfRElBR19NT0RfV1JJVEUpOwomIzQzOwkJCQltYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLSZndDtyZWdzLCByZXRfcmVnc1tpXSk7CiYjNDM7CQkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCQl9CiAJCX0KIAogCQlpZiAoZW52LSZndDtzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHsKQEAgLTEwNDAzLDEwICYjNDM7MTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KQogCQkgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGUKIAkJICogcmV0dXJuIHJlZ2lzdGVyKHMpCiAJCSAqLwotCQlicGZfZGlhZ19tb2RfYmVnaW4oZW52LCAmYW1wO2NhbGxlci0mZ3Q7cmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTsKLQkJZm9yIChpID0gMDsgaSAmbHQ7IG5yZWdzOyBpJiM0MzsmIzQzOykKLQkJCWNhbGxlci0mZ3Q7cmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtJmd0O3JlZ3NbcmV0X3JlZ3NbaV1dOwotCQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnJlZ3M7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdTMyIHJlZ25vID0gcmV0X3JlZ3NbaV07CiYjNDM7CiYjNDM7CQkJYnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgJmFtcDtjYWxsZXItJmd0O3JlZ3NbcmVnbm9dLCAmYW1wO2NhbGxlZS0mZ3Q7cmVnc1tyZWdub10sCiYjNDM7CQkJCQkgICBCUEZfRElBR19NT0RfV1JJVEUpOwomIzQzOwkJCWNhbGxlci0mZ3Q7cmVnc1tyZWdub10gPSBjYWxsZWUtJmd0O3JlZ3NbcmVnbm9dOwomIzQzOwkJCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJCX0KIAl9CiAKIAkvKiBmb3IgY2FsbGJhY2tzIGxpa2UgYnBmX2xvb3Agb3IgYnBmX2Zvcl9lYWNoX21hcF9lbGVtIGdvIGJhY2sgdG8gY2FsbHNpdGUsCkBAIC0xMTM0MiwxNSAmIzQzOzExMzUxLDMzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuCiAKIC8qCiAgKiBNYXJrIHRoZSByZWdpc3RlcihzKSBob2xkaW5nIGEgQHNpemUgYnl0ZSBrZnVuYyByZXR1cm4gdmFsdWUgYXMgdW5rbm93bgotICogc2NhbGFycy4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlciBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS4KJiM0MzsgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlcgomIzQzOyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LgomIzQzOyAqCiYjNDM7ICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlCiYjNDM7ICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdAomIzQzOyAqIHNjb3BlIGlzIHdoYXQgY2FycmllcyBpdHMgcHJlLWNhbGwgdmFsdWUgaW50byB0aGUgaGlzdG9yeS4gQSBzY29wZSB0cmFja3MgYQomIzQzOyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZgomIzQzOyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJiMzOTtzIHNjb3BlIG9wZW4gZm9yCiYjNDM7ICogdGhlIGNhbGxlciB0byBjbG9zZSwgc28gYSBsYXRlciB3cml0ZSB0byBSMCBzdGlsbCBsYW5kcyBpbiBpdC4KICAqLwotc3RhdGljIHZvaWQgbWFya19rZnVuY19yZXRfcmVncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAotCQkJCXN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSkKJiM0MztzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKQogewogCXUzMiBpLCBucmVncyA9IHJldF9yZWdzX2NudChzaXplKTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspCiYjNDM7CW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1swXSk7CiYjNDM7CWlmIChucmVncyA9PSAxKQomIzQzOwkJcmV0dXJuIG5yZWdzOwomIzQzOwomIzQzOwlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CWZvciAoaSA9IDE7IGkgJmx0OyBucmVnczsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCWJwZl9kaWFnX21vZF9iZWdpbihlbnYsICZhbXA7cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7CiAJCW1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7CiYjNDM7CQlicGZfZGlhZ19tb2RfZW5kKGVudik7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIG5yZWdzOwogfQogCiBzdGF0aWMgYm9vbCBpc19rZnVuY19hY3F1aXJlKHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSkKQEAgLTExNjE5LDEwICYjNDM7MTE2NDYsMzMgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KGNvbnN0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwgdTMyIGFyZ18KIAlyZXR1cm4gYXJnbiAmbHQ7PSBhcmdfaWR4OwogfQogCi0vKiBSZXR1cm5zIHRydWUgaWYgc3RydWN0IGlzIGNvbXBvc2VkIG9mIHNjYWxhcnMsIDQgbGV2ZWxzIG9mIG5lc3RpbmcgYWxsb3dlZCAqLwotYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYykKJiM0MzsjZGVmaW5lIEJURl9NRU1CRVJfTUFYX0RFUFRICTQKJiM0MzsjZGVmaW5lIEJURl9NRU1CRVJfUEFUSF9MRU4JNjQKJiM0MzsKJiM0MztzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoIHsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcltCVEZfTUVNQkVSX01BWF9ERVBUSF07CiYjNDM7CWludCBkZXB0aDsKJiM0MzsJYm9vbCB0b29fZGVlcDsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBib29sIGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAomIzQzOwkJCQkgICAgdTMyIG1lbWJlcl9raW5kcykKJiM0Mzt7CiYjNDM7CWlmICgobWVtYmVyX2tpbmRzICZhbXA7IEJURl9NRU1CRVJfU0NBTEFSKSAmYW1wOyZhbXA7IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlpZiAoKG1lbWJlcl9raW5kcyAmYW1wOyBCVEZfTUVNQkVSX0FSRU5BX1BUUikgJmFtcDsmYW1wOyBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpbgomIzQzOyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5CiYjNDM7ICogbWVtYmVyIGNvdW50cyBhcyBpdHMgZWxlbWVudCB0eXBlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAomIzQzOwkJCQkgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMsIGludCByZWMsCiYjNDM7CQkJCSAgIHN0cnVjdCBidGZfbWVtYmVyX3BhdGggKnBhdGgpCiB7CiAJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICptZW1iZXJfdHlwZTsKIAljb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyOwpAQCAtMTE2MzYsMjcgJiM0MzsxMTY4Niw2NSBAQCBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwKIAogCQltZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgbWVtYmVyLSZndDt0eXBlLCBOVUxMKTsKIAkJaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdChtZW1iZXJfdHlwZSkpIHsKLQkJCWlmIChyZWMgJmd0Oz0gMykgewomIzQzOwkJCWlmIChyZWMgJmd0Oz0gQlRGX01FTUJFUl9NQVhfREVQVEggLSAxKSB7CiAJCQkJdmVyYm9zZShlbnYsICYjMzQ7bWF4IHN0cnVjdCBuZXN0aW5nIGRlcHRoIGV4Y2VlZGVkXG4mIzM0Oyk7CiYjNDM7CQkJCWlmIChwYXRoKQomIzQzOwkJCQkJcGF0aC0mZ3Q7dG9vX2RlZXAgPSB0cnVlOwogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KLQkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyAmIzQzOyAxKSkKLQkJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQkJaWYgKCFidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzLAomIzQzOwkJCQkJCSAgICByZWMgJiM0MzsgMSwgcGF0aCkpCiYjNDM7CQkJCWdvdG8gYmFkX3BhdGg7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAoYnRmX3R5cGVfaXNfYXJyYXkobWVtYmVyX3R5cGUpKSB7CiAJCQlhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7CiAJCQlpZiAoIWFycmF5LSZndDtuZWxlbXMpCi0JCQkJcmV0dXJuIGZhbHNlOwomIzQzOwkJCQlnb3RvIGJhZF9tZW1iZXI7CiAJCQltZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktJmd0O3R5cGUsIE5VTEwpOwotCQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSkKLQkJCXJldHVybiBmYWxzZTsKJiM0MzsJCWlmICghYnRmX21lbWJlcl9raW5kX2FsbG93ZWQoYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzKSkKJiM0MzsJCQlnb3RvIGJhZF9tZW1iZXI7CiAJfQogCXJldHVybiB0cnVlOwomIzQzOwomIzQzO2JhZF9tZW1iZXI6CiYjNDM7CWlmIChwYXRoKQomIzQzOwkJcGF0aC0mZ3Q7ZGVwdGggPSByZWMgJiM0MzsgMTsKJiM0MztiYWRfcGF0aDoKJiM0MzsJaWYgKHBhdGggJmFtcDsmYW1wOyBwYXRoLSZndDtkZXB0aCkKJiM0MzsJCXBhdGgtJmd0O21lbWJlcltyZWNdID0gbWVtYmVyOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsCiYjNDM7CQkJICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcykKJiM0Mzt7CiYjNDM7CXJldHVybiBidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMsIDAsIE5VTEwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KQomIzQzO3sKJiM0MzsJcmV0dXJuIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIEJURl9NRU1CRVJfU0NBTEFSKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYnRmX21lbWJlcl9wYXRoX3N0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyX3BhdGggKnBhdGgsCiYjNDM7CQkJCWNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeikKJiM0Mzt7CiYjNDM7CXNpemVfdCBsZW4gPSAwOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJYnVmWzBdID0gJiMzOTtcMCYjMzk7OwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcGF0aC0mZ3Q7ZGVwdGg7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQljb25zdCBjaGFyICpuYW1lID0gYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgcGF0aC0mZ3Q7bWVtYmVyW2ldLSZndDtuYW1lX29mZik7CiYjNDM7CiYjNDM7CQlpZiAoIW5hbWUgfHwgIW5hbWVbMF0pCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlsZW4gJiM0Mzs9IHNjbnByaW50ZihidWYgJiM0MzsgbGVuLCBidWZfc3ogLSBsZW4sICYjMzQ7JXMlcyYjMzQ7LCBsZW4gPyAmIzM0Oy4mIzM0OyA6ICYjMzQ7JiMzNDssIG5hbWUpOwomIzQzOwl9CiB9CiAKIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHsKQEAgLTEyMDM5LDcgJiM0MzsxMjEyNyw3IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsCiAJCSAoaXNfa2Z1bmNfYXJnX21lbV9zaXplKG1ldGEtJmd0O2J0ZiwgJmFtcDthcmdzW2FyZyAmIzQzOyAxXSkgfHwKIAkJICBpc19rZnVuY19hcmdfY29uc3RfbWVtX3NpemUobWV0YS0mZ3Q7YnRmLCAmYW1wO2FyZ3NbYXJnICYjNDM7IDFdKSkpIHsKIAkJaWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSAmYW1wOyZhbXA7ICFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpICZhbXA7JmFtcDsKLQkJICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS0mZ3Q7YnRmLCByZWZfdCwgMCkpIHsKJiM0MzsJCSAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byB2b2lkLCBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMjA1NSw3ICYjNDM7MTIxNDMsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLAogCQkgKiBzY2FsYXJzLiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZCBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlLgogCQkgKi8KIAkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpICZhbXA7JmFtcDsKLQkJICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS0mZ3Q7YnRmLCByZWZfdCwgMCkpIHsKJiM0MzsJCSAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQl2ZXJib3NlKGVudiwgJiMzNDslcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxuJiMzNDssCiAJCQkJcmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzExMSw3ICYjNDM7MTMxOTksNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZQogCQkJCWJyZWFrOwogCQkJfQogCi0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLSZndDtidGYsIHJlZl90LCAwKSkgewomIzQzOwkJCWlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtJmd0O2J0ZiwgcmVmX3QpKSB7CiAJCQkJZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7CiAJCQkJY29uc3QgY2hhciAqZXhwZWN0ZWRfdHlwZTsKIApAQCAtMTM2NTMsNyAmIzQzOzEzNzQxLDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmcKIAogCQlzdHJ1Y3RfbWV0YSA9IGJ0Zl9maW5kX3N0cnVjdF9tZXRhKHJldF9idGYsIHJldF9idGZfaWQpOwogCQlpZiAoaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEtJmd0O2Z1bmNfaWQpKSB7Ci0JCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCwgMCkpIHsKJiM0MzsJCQlpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCkpIHsKIAkJCQl2ZXJib3NlKGVudiwgJiMzNDticGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcbiYjMzQ7KTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KQEAgLTEzNzY3LDcgJiM0MzsxMzg1NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJc3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDsKIAljb25zdCBjaGFyICpvcGVyYXRpb247CiAJaW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDsKLQl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkOwomIzQzOwl1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkLCByZXRfbnJlZ3MgPSAxOwogCXN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYzsKIAlzdHJ1Y3QgYnRmICpkZXNjX2J0ZjsKIAlpbnQgaWQ7CkBAIC0xNDAyMSwyNSAmIzQzOzE0MTA5LDU5IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sCiAJfQogCiAJaWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkgewotCQltYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC0mZ3Q7c2l6ZSk7CiYjNDM7CQlyZXRfbnJlZ3MgPSBtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC0mZ3Q7c2l6ZSk7CiAJCWlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCAmYW1wOyZhbXA7IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fAogCQkgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpCiAJCQlfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCAmYW1wO3JlZ3NbQlBGX1JFR18wXSk7CiAJfSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHsKJiM0MzsJCXN0cnVjdCBidGZfbWVtYmVyX3BhdGggcGF0aCA9IHt9OwomIzQzOwkJY29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSAmIzM0OyYjMzQ7OwomIzQzOwogCQkvKgogCQkgKiBUaGUgcmV0dXJuZWQgc3RydWN0IGNvbWVzIGJhY2sgYXMgcmF3IHJlZ2lzdGVyIGJpdHMgbW9kZWxlZAotCQkgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gaXQgbXVzdCBjb250YWluIG9ubHkgc2NhbGFyczoKLQkJICogb3RoZXJ3aXNlIGEgcG9pbnRlciBmaWVsZCB3b3VsZCBiZSBsYXVuZGVyZWQgaW50byBhIHNjYWxhcgotCQkgKiBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4KJiM0MzsJCSAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZAomIzQzOwkJICogaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy4KJiM0MzsJCSAqIE9ubHkgc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIKJiM0MzsJCSAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUKJiM0MzsJCSAqIG9uZSBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlCiYjNDM7CQkgKiByZXN1bHQgdG8gdGhlIGFyZW5hLgogCQkgKi8KLQkJaWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgZGVzY19idGYsIHQsIDApKSB7CiYjNDM7CQlpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCwKJiM0MzsJCQkJCSAgICBCVEZfTUVNQkVSX1NDQUxBUiB8IEJURl9NRU1CRVJfQVJFTkFfUFRSLCAwLCAmYW1wO3BhdGgpKSB7CiAJCQl2ZXJib3NlKGVudiwKLQkJCQkmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcbiYjMzQ7LAomIzQzOwkJCQkmIzM0O2tlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcbiYjMzQ7LAogCQkJCWZ1bmNfbmFtZSwgYnRmX3R5cGVfc3RyKHQpLAogCQkJCWJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpKTsKJiM0MzsJCQlpZiAocGF0aC50b29fZGVlcCkgewomIzQzOwkJCQltZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdCgKJiM0MzsJCQkJCWVudiwgJiMzNDsgSXQgbmVzdHMgc3RydWN0cyBtb3JlIHRoYW4gJWQgbGV2ZWxzIGRlZXAuJiMzNDssCiYjNDM7CQkJCQlCVEZfTUVNQkVSX01BWF9ERVBUSCk7CiYjNDM7CQkJfSBlbHNlIGlmIChwYXRoLmRlcHRoKSB7CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBwYXRoLm1lbWJlcltwYXRoLmRlcHRoIC0gMV07CiYjNDM7CQkJCWNoYXIgYmFkX25hbWVbQlRGX01FTUJFUl9QQVRIX0xFTl07CiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBidGZfdHlwZSAqYmFkX3R5cGU7CiYjNDM7CiYjNDM7CQkJCWJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsICZhbXA7cGF0aCwgYmFkX25hbWUsIHNpemVvZihiYWRfbmFtZSkpOwomIzQzOwkJCQliYWRfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCBiYWQtJmd0O3R5cGUsIE5VTEwpOwomIzQzOwkJCQl2ZXJib3NlKGVudiwgJiMzNDttZW1iZXIgJiMzOTslcyYjMzk7IGhhcyB0eXBlICVzXG4mIzM0OywgYmFkX25hbWUsCiYjNDM7CQkJCQlidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTsKJiM0MzsJCQkJbWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoCiYjNDM7CQkJCQllbnYsCiYjNDM7CQkJCQkmIzM0OyBJdHMgbWVtYmVyICYjMzk7JXMmIzM5OyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuJiMzNDssCiYjNDM7CQkJCQliYWRfbmFtZSwgYnRmX3R5cGVfc3RyKGJhZF90eXBlKSk7CiYjNDM7CQkJfQomIzQzOwkJCWJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKAomIzQzOwkJCQllbnYsIGluc25faWR4LCAmIzM0O3Vuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZSYjMzQ7LAomIzQzOwkJCQkmIzM0O0NhbGwgYSBrZXJuZWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9ubHkgc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4mIzM0OywKJiM0MzsJCQkJJiMzNDslcygpIHJldHVybnMgJXMgJXMgYnkgdmFsdWUuJXMgJiMzNDsKJiM0MzsJCQkJJiMzNDtPbmx5IGtmdW5jcyByZXR1cm5pbmcgc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycywgb3IgJiMzNDsKJiM0MzsJCQkJJiMzNDtzdHJ1Y3R1cmVzIGNvbXBvc2VkIG9mIHNjYWxhciB2YWx1ZXMgb3IgYXJlbmEgcG9pbnRlcnMgYXJlICYjMzQ7CiYjNDM7CQkJCSYjMzQ7c3VwcG9ydGVkLiYjMzQ7LAomIzQzOwkJCQlmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSwKJiM0MzsJCQkJYnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LSZndDtuYW1lX29mZiksIG1lbWJlcl9ub3RlKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCW1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LSZndDtzaXplKTsKJiM0MzsJCXJldF9ucmVncyA9IG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LSZndDtzaXplKTsKIAl9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkgewogCQlwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LSZndDt0eXBlLCAmYW1wO3B0cl90eXBlX2lkKTsKIAkJZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsICZhbXA7bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7CkBAIC0xNDE3MCw3ICYjNDM7MTQyOTIsOCBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLAogCSAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlCiAJICogaXRlcmF0b3IgcGF0aCYjMzk7cyBkaWFnbm9zdGljIHBvc2l0aW9uLgogCSAqLwotCWJwZl9kaWFnX21vZF9lbmQoZW52KTsKJiM0MzsJaWYgKHJldF9ucmVncyA9PSAxKQomIzQzOwkJYnBmX2RpYWdfbW9kX2VuZChlbnYpOwogCiAJaWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoJmFtcDttZXRhKSkgewogCQllcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsICZhbXA7bWV0YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMKaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYwpAQCAtMSwxMSAmIzQzOzEsNTMgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAjaW5jbHVkZSAmbHQ7dGVzdF9wcm9ncy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGYvYnRmLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O2FnZ3JlZ2F0ZV9yZXRfZnVuYy5za2VsLmgmIzM0OwogI2luY2x1ZGUgJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLnNrZWwuaCYjMzQ7CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKQomIzQzO3sKJiM0MzsJc3RydWN0IGJ0ZiAqdm1saW51eF9idGYsICptb2R1bGVfYnRmID0gTlVMTDsKJiM0MzsJY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0OwomIzQzOwlib29sIHRhZ2dlZCA9IGZhbHNlOwomIzQzOwlfX3MzMiBpZDsKJiM0MzsKJiM0MzsJdm1saW51eF9idGYgPSBidGZfX2xvYWRfdm1saW51eF9idGYoKTsKJiM0MzsJaWYgKCF2bWxpbnV4X2J0ZikKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJbW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKCYjMzQ7YnBmX3Rlc3Rtb2QmIzM0Oywgdm1saW51eF9idGYpOwomIzQzOwlpZiAoIW1vZHVsZV9idGYpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogcHJvZ190ZXN0X3JldF9hcmVuYTo6YSBpcyAmIzM5O3ZvaWQgX19hcmVuYV90YWcgKiYjMzk7OiBQVFIgLSZndDsgVFlQRV9UQUcgLSZndDsgdm9pZCAqLwomIzQzOwlpZCA9IGJ0Zl9fZmluZF9ieV9uYW1lX2tpbmQobW9kdWxlX2J0ZiwgJiMzNDtwcm9nX3Rlc3RfcmV0X2FyZW5hJiMzNDssIEJURl9LSU5EX1NUUlVDVCk7CiYjNDM7CWlmIChpZCAmbHQ7PSAwKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CXQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgYnRmX21lbWJlcnMoYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIGlkKSlbMF0udHlwZSk7CiYjNDM7CWlmICghdCB8fCAhYnRmX2lzX3B0cih0KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwomIzQzOwl0ID0gYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIHQtJmd0O3R5cGUpOwomIzQzOwl0YWdnZWQgPSB0ICZhbXA7JmFtcDsgYnRmX2lzX3R5cGVfdGFnKHQpICZhbXA7JmFtcDsKJiM0MzsJCSAhc3RyY21wKGJ0Zl9fbmFtZV9ieV9vZmZzZXQobW9kdWxlX2J0ZiwgdC0mZ3Q7bmFtZV9vZmYpLCAmIzM0O2FyZW5hJiMzNDspOwomIzQzOwomIzQzO291dDoKJiM0MzsJYnRmX19mcmVlKG1vZHVsZV9idGYpOwomIzQzOwlidGZfX2ZyZWUodm1saW51eF9idGYpOwomIzQzOwomIzQzOwlyZXR1cm4gdGFnZ2VkOwomIzQzO30KIAogdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZCkKIHsKIAlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTsKIAlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuYyk7CiYjNDM7CiYjNDM7CWlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpCiYjNDM7CQlSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSk7CiYjNDM7CWVsc2UKJiM0MzsJCXRlc3RfX3NraXAoKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuYwppbmRleCA2ZjY2ZmM4MjJjZWRlLi5mMDA3N2Q5NTFhMjVkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfZnVuYy5jCkBAIC0yLDYgJiM0MzsyLDcgQEAKIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi8KICNpbmNsdWRlICZsdDtsaW51eC9icGYuaCZndDsKICNpbmNsdWRlICZsdDticGYvYnBmX2hlbHBlcnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YnBmX2FyZW5hX2NvbW1vbi5oJmd0OwogI2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKIAogdHlwZWRlZiB1bnNpZ25lZCBfX2ludDEyOCB1MTI4OwpAQCAtMjM0LDQgJiM0MzsyMzUsMTQ5IEBAIF9fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX3VuaW9uX3B0cl9mYWlsKHZvaWQpCiAKICNlbmRpZgogCiYjNDM7LyoKJiM0MzsgKiBnY2MgcmV0dXJucyBhIGJ5LXZhbHVlIHN0cnVjdCB0aHJvdWdoIGEgaGlkZGVuIHBvaW50ZXIsIGFuZCBlbWl0cyB0aGUKJiM0MzsgKiAmIzM5O3IwID0gcjEmIzM5OyByZXR1cm5pbmcgaXQgYWZ0ZXIgdGhlIF9fbmFrZWQgYm9keSYjMzk7cyBleGl0LCBsZWF2aW5nIHRoZQomIzQzOyAqIHN1YnByb2dyYW0gZmFsbGluZyB0aHJvdWdoLiBCdWlsZCB0aGVzZSB3aXRoIGNsYW5nIG9ubHkuCiYjNDM7ICovCiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19fKQomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9wYWlyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpsbzsKJiM0MzsJdm9pZCBfX2FyZW5hICpoaTsKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwOwomIzQzOwlfX3U2NCB4OwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFyZW5hX2FycmF5IHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwWzJdOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGFyZW5hX3NpbmdsZSB7CiYjNDM7CXZvaWQgX19hcmVuYSAqcDsKJiM0Mzt9OwomIzQzOwomIzQzO3VuaW9uIGFyZW5hX3VwYWlyIHsKJiM0MzsJdm9pZCBfX2FyZW5hICpwOwomIzQzOwlfX3U2NCBoYWx2ZXNbMl07CiYjNDM7fTsKJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9wYWlyKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3BhaXJdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9wYWlyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcih2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtyMiA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9hbmRfc2NhbGFyKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXJdOyYjMzQ7CiYjNDM7CSYjMzQ7cjAgPSAwOyYjMzQ7CiYjNDM7CSYjMzQ7ZXhpdDsmIzM0OwomIzQzOwk6CiYjNDM7CTogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKJiM0MztfX25ha2VkIHN0cnVjdCBhcmVuYV9hcnJheSBnbG9iYWxfcmV0X2FyZW5hX2FycmF5KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FycmF5KHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FycmF5XTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfYXJyYXkpCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzO19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CSk7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3RjJiMzNDspCiYjNDM7X19zdWNjZXNzIF9fcmV0dmFsKDApCiYjNDM7X19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfc2luZ2xlKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZV07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7X19uYWtlZCB1bmlvbiBhcmVuYV91cGFpciBnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O3IyID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2xvYWRfaWZfSklUZWQoKQomIzQzO19fc3VjY2VzcyBfX3JldHZhbCgwKQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3VuaW9uKHZvaWQpCiYjNDM7ewomIzQzOwlhc20gdm9sYXRpbGUgKAomIzQzOwkmIzM0O2NhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfdW5pb24pCiYjNDM7CTogX19jbG9iYmVyX2FsbCk7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMKaW5kZXggZDZiNDIyYWU5Nzg0Yi4uZTljODJkZjhlZmIyNiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jCkBAIC0xOCw2ICYjNDM7MTgsOCBAQCB2b2lkIF9fa2Z1bmNfYnRmX3Jvb3Qodm9pZCkKIAk6ICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9pMTI4KSwKIAkgICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwpLAogCSAgJiMzNDtyJiMzNDsoJmFtcDticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIpLAomIzQzOwkgICYjMzQ7ciYjMzQ7KCZhbXA7YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKSwKJiM0MzsJICAmIzM0O3ImIzM0OygmYW1wO2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApLAogCSAgJiMzNDtyJiMzNDsoJmFtcDticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paSksCiAJICAmIzM0O3ImIzM0OygmYW1wO2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZykpOwogfQpAQCAtNzEsNyAmIzQzOzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpCiAKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAotX19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMmIzM0OykKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWVtYmVyICYjMzk7cCYjMzk7IGhhcyB0eXBlIFBUUiYjMzQ7KQogX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKQogewogCWFzbSB2b2xhdGlsZSAoCkBAIC04NCw2ICYjNDM7ODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKQogCTogX19jbG9iYmVyX2FsbCk7CiB9CiAKJiM0MztTRUMoJiMzNDt0YyYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19mYWlsdXJlIF9fbXNnKCYjMzQ7aXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnMmIzM0OykKJiM0MztfX21zZygmIzM0O21lbWJlciAmIzM5O2luLnAmIzM5OyBoYXMgdHlwZSBQVFImIzM0OykKJiM0MztfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX25lc3RlZF9wdHJfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkXTsmIzM0OwomIzQzOwkmIzM0O3IwID0gMDsmIzM0OwomIzQzOwkmIzM0O2V4aXQ7JiMzNDsKJiM0MzsJOgomIzQzOwk6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCkKJiM0MzsJOiBfX2Nsb2JiZXJfYWxsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7dGMmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O21heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZCYjMzQ7KQomIzQzO19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfdG9vX2RlZXBfZmFpbCh2b2lkKQomIzQzO3sKJiM0MzsJYXNtIHZvbGF0aWxlICgKJiM0MzsJJiMzNDtyMSA9IDA7JiMzNDsKJiM0MzsJJiMzNDtjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcF07JiMzNDsKJiM0MzsJJiMzNDtyMCA9IDA7JiMzNDsKJiM0MzsJJiMzNDtleGl0OyYjMzQ7CiYjNDM7CToKJiM0MzsJOiBfX2ltbShicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKQomIzQzOwk6IF9fY2xvYmJlcl9hbGwpOwomIzQzO30KJiM0MzsKIFNFQygmIzM0O3RjJiMzNDspCiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAogX19mYWlsdXJlIF9fbXNnKCYjMzQ7UjIgIXJlYWRfb2smIzM0OykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2QKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jCkBAIC0wLDAgJiM0MzsxLDEyOSBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCiYjNDM7LyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqLwomIzQzOyNpbmNsdWRlICZsdDt2bWxpbnV4LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2JwZi9icGZfaGVscGVycy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDticGZfYXJlbmFfY29tbW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJiMzNDticGZfbWlzYy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0Oy4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCYjMzQ7CiYjNDM7CiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSAmYW1wOyZhbXA7IF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAyMwomIzQzOwomIzQzO3N0cnVjdCB7CiYjNDM7CV9fdWludCh0eXBlLCBCUEZfTUFQX1RZUEVfQVJFTkEpOwomIzQzOwlfX3VpbnQobWFwX2ZsYWdzLCBCUEZfRl9NTUFQQUJMRSk7CiYjNDM7CV9fdWludChtYXhfZW50cmllcywgMik7CiYjNDM7fSBhcmVuYSBTRUMoJiMzNDsubWFwcyYjMzQ7KTsKJiM0MzsKJiM0MzsvKgomIzQzOyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2UKJiM0MzsgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmCiYjNDM7ICogcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVyIGRvaW5nIGl0LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpCiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqYSwgKmI7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHI7CiYjNDM7CiYjNDM7CWlmICghcGFnZSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwomIzQzOwkvKiBCb3RoIGhhbHZlcyBjb21lIGJhY2sgaW4gUjA6UjIsIHBvaW50aW5nIGF0IHBhZ2UgYW5kIHBhZ2UgJiM0MzsgNC4gKi8KJiM0MzsJciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKCh1NjQpcGFnZSk7CiYjNDM7CWlmICghci5hIHx8ICFyLmIpCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsKJiM0MzsJYSA9IGFyZW5hX3B0cihyLmEpOwomIzQzOwliID0gYXJlbmFfcHRyKHIuYik7CiYjNDM7CSphID0gMTsKJiM0MzsJKmIgPSAyOwomIzQzOwlpZiAoKmEgIT0gMSkKJiM0MzsJCXJldHVybiAzOwomIzQzOwlpZiAoKmIgIT0gMikKJiM0MzsJCXJldHVybiA0OwomIzQzOwomIzQzOwkvKiBUaGUgaGFsdmVzIGFyZSB0aGUgZmlyc3QgdHdvIHNsb3RzIG9mIHRoZSBwYWdlIHRoZSBwcm9ncmFtIGFsbG9jYXRlZC4gKi8KJiM0MzsJcGFnZVswXSA9IDc7CiYjNDM7CWlmICgqYSAhPSA3KQomIzQzOwkJcmV0dXJuIDU7CiYjNDM7CXBhZ2VbMV0gPSA5OwomIzQzOwlpZiAoKmIgIT0gOSkKJiM0MzsJCXJldHVybiA2OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7U0VDKCYjMzQ7c3lzY2FsbCYjMzQ7KQomIzQzO19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0CiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV9taXhlZCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCByOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqcDsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CS8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqLwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoKHU2NClwYWdlKTsKJiM0MzsJaWYgKCFyLnApCiYjNDM7CQlyZXR1cm4gMjsKJiM0MzsJaWYgKHIudGFnICE9IDB4YmVlZikKJiM0MzsJCXJldHVybiAzOwomIzQzOwomIzQzOwlwID0gYXJlbmFfcHRyKHIucCk7CiYjNDM7CSpwID0gMzsKJiM0MzsJaWYgKCpwICE9IDMpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO1NFQygmIzM0O3N5c2NhbGwmIzM0OykKJiM0MztfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NAomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O2lzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzJiMzNDspCiYjNDM7X19tc2coJiMzNDttZW1iZXIgJiMzOTtiJiMzOTsgaGFzIHR5cGUgUFRSJiMzNDspCiYjNDM7aW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfdW50YWdnZWRfZmFpbCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByOwomIzQzOwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQoMCk7CiYjNDM7CiYjNDM7CXJldHVybiByLmEgPT0gci5iOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjQKJiM0MztfX2ZhaWx1cmUgX19tc2coJiMzNDtpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyYjMzQ7KQomIzQzO19fbXNnKCYjMzQ7bWVtYmVyICYjMzk7YiYjMzk7IGhhcyB0eXBlIFBUUiYjMzQ7KQomIzQzO2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByOwomIzQzOwomIzQzOwlyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24oMCk7CiYjNDM7CiYjNDM7CXJldHVybiByLmEgPT0gci5iOwomIzQzO30KJiM0MzsKJiM0MzsjZWxzZQomIzQzOwomIzQzO1NFQygmIzM0O3NvY2tldCYjMzQ7KQomIzQzO19fZGVzY3JpcHRpb24oJiMzNDthZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0JiMzNDspCiYjNDM7X19za2lwKCYjMzQ7bmVlZHMgTExWTSAyMyYjMzQ7KQomIzQzO19fc3VjY2VzcwomIzQzO2ludCBkdW1teV90ZXN0KHZvaWQpCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7Y2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jCmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMKQEAgLTYwLDcgJiM0Mzs2MCw3IEBAIF9fbm9pbmxpbmUgaW50IGV4Y2VwdGlvbl9jYl9va19hcmdfc21hbGwoaW50IGEpCiAKIFNFQygmIzM0Oz90YyYjMzQ7KQogX19leGNlcHRpb25fY2IoZXhjZXB0aW9uX2NiX2JhZF9yZXRfdHlwZTEpCi1fX2ZhaWx1cmUgX19tc2coJiMzNDtPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLiYjMzQ7KQomIzQzO19fZmFpbHVyZSBfX21zZygmIzM0O09ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnMmIzM0OykKIGludCByZWplY3RfZXhjZXB0aW9uX2NiX3R5cGVfMShzdHJ1Y3QgX19za19idWZmICpjdHgpCiB7CiAJYnBmX3Rocm93KDApOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwppbmRleCA4MTVmMzQyZWI0YjA1Li42NzJhM2FhZGQ5Y2IyIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYwpAQCAtNzM0LDQgJiM0Mzs3MzQsNTIgQEAgaW50IGNoZWNrX2FyZW5hX2FyZ19yZXQodm9pZCAqY3R4KQogCXJldHVybiAwOwogfQogCiYjNDM7I2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSAmYW1wOyZhbXA7IF9fY2xhbmdfbWFqb3JfXyAmZ3Q7PSAyMwomIzQzOwomIzQzO3N0cnVjdCBhcmVuYV9wYWdlX3BhaXIgewomIzQzOwl1MzIgX19hcmVuYSAqZmlyc3Q7CiYjNDM7CXUzMiBfX2FyZW5hICpzZWNvbmQ7CiYjNDM7fTsKJiM0MzsKJiM0MztfX3dlYWsgc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBzcGxpdF9hcmVuYV9wYWdlKHUzMiBfX2FyZW5hICpwYWdlKQomIzQzO3sKJiM0MzsJc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBwYWlyOwomIzQzOwomIzQzOwlwYWlyLmZpcnN0ID0gcGFnZTsKJiM0MzsJcGFpci5zZWNvbmQgPSBwYWdlICYjNDM7IDE7CiYjNDM7CiYjNDM7CXJldHVybiBwYWlyOwomIzQzO30KJiM0MzsKJiM0MztTRUMoJiMzNDtzeXNjYWxsJiMzNDspCiYjNDM7X19sb2FkX2lmX0pJVGVkKCkKJiM0MztfX3N1Y2Nlc3MgX19yZXR2YWwoMCkKJiM0MztpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpCiYjNDM7ewomIzQzOwl1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcygmYW1wO2FyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApOwomIzQzOwl1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7CiYjNDM7CXN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgcGFpcjsKJiM0MzsKJiM0MzsJaWYgKCFwYWdlKQomIzQzOwkJcmV0dXJuIDE7CiYjNDM7CiYjNDM7CXBhaXIgPSBzcGxpdF9hcmVuYV9wYWdlKHBhZ2UpOwomIzQzOwlpZiAoIXBhaXIuZmlyc3QgfHwgIXBhaXIuc2Vjb25kKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CiYjNDM7CS8qIEJvdGggaGFsdmVzIG9mIHRoZSBwYWlyIG11c3Qgc3RpbGwgYmUgdXNhYmxlIGFzIGFyZW5hIHBvaW50ZXJzLiAqLwomIzQzOwlmaXJzdCA9IHBhaXIuZmlyc3Q7CiYjNDM7CXNlY29uZCA9IHBhaXIuc2Vjb25kOwomIzQzOwkqZmlyc3QgPSAxOwomIzQzOwkqc2Vjb25kID0gMjsKJiM0MzsJaWYgKCpmaXJzdCAhPSAxKQomIzQzOwkJcmV0dXJuIDM7CiYjNDM7CWlmICgqc2Vjb25kICE9IDIpCiYjNDM7CQlyZXR1cm4gNDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwogY2hhciBfbGljZW5zZVtdIFNFQygmIzM0O2xpY2Vuc2UmIzM0OykgPSAmIzM0O0dQTCYjMzQ7OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMKaW5kZXggODUwY2Y0ZjgzMGM0OC4uMGVmMmNlODc1ZDcxZCAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jCkBAIC05ODEsNiAmIzQzOzk4MSw0OCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKHU2NCB0YWcpCiAJcmV0dXJuIHI7CiB9CiAKJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSh1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9ICh2b2lkICopKGFkZHIgJiM0MzsgNCkgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgciA9IHsgLnAgPSAodm9pZCAqKWFkZHIsIC50YWcgPSAweGJlZWYgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKHU2NCBhZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gTlVMTCB9OwomIzQzOwomIzQzOwlyZXR1cm4gcjsKJiM0Mzt9CiYjNDM7CiYjNDM7X19icGZfa2Z1bmMgdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbih1NjQgYWRkcikKJiM0Mzt7CiYjNDM7CXVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gciA9IHsgLmEgPSAodm9pZCAqKWFkZHIgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQodTY0IHRhZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCByID0geyAuaW4gPSB7IC5wID0gTlVMTCB9LCAudGFnID0gdGFnIH07CiYjNDM7CiYjNDM7CXJldHVybiByOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXAodTY0IHYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHIgPSB7IC5sMSA9IHsgLmwyID0geyAubDMgPSB7IC5sNCA9IHsgLnYgPSB2IH0gfSB9IH0gfTsKJiM0MzsKJiM0MzsJcmV0dXJuIHI7CiYjNDM7fQomIzQzOwogX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKQogewogCXN0cnVjdCBwcm9nX3Rlc3RfcmV0X2lpIHIgPSB7IC5hID0gYSwgLmIgPSBiIH07CkBAIC0xNTM5LDYgJiM0MzsxNTgxLDEyIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X2kxMjgpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcikKIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9mYXN0Y2FsbCwgS0ZfRkFTVENBTEwpCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSkKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQpCiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbikKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKQomIzQzO0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKQogI2VuZGlmCiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmgKaW5kZXggNjVlNjkzYWRhNzM2NC4uYTJlOWU5ZjMxODRlMiAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oCkBAIC0yNiw2ICYjNDM7MjYsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMgewogfTsKICNlbmRpZgogCiYjNDM7I2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpCiYjNDM7I2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoJiMzNDthcmVuYSYjMzQ7KSkpCiYjNDM7I2Vsc2UKJiM0MzsjZGVmaW5lIF9fYXJlbmFfdGFnCiYjNDM7I2VuZGlmCiYjNDM7CiBzdHJ1Y3QgYnBmX2l0ZXJfdGVzdG1vZF9zZXE7CiAKIHN0cnVjdCBwcm9nX3Rlc3RfcGFzczEgewpAQCAtNzAsNiAmIzQzOzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7CS8qIDE2IGJ5dGVzOiBjb250YWlucyBhIHBvaW50ZXIgKi8KIAlfX3U2NCB0YWc7CiB9OwogCiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgewkvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovCiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmE7CiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmI7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCB7CS8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqLwomIzQzOwl2b2lkIF9fYXJlbmFfdGFnICpwOwomIzQzOwlfX3U2NCB0YWc7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCB7CS8qIDE2IGJ5dGVzOiAmIzM5O2ImIzM5OyBsYWNrcyB0aGUgYXJlbmEgdGFnICovCiYjNDM7CXZvaWQgX19hcmVuYV90YWcgKmE7CiYjNDM7CXZvaWQgKmI7CiYjNDM7fTsKJiM0MzsKJiM0Mzt1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHsJLyogOCBieXRlczogJiMzOTtiJiMzOTsgbGFja3MgdGhlIGFyZW5hIHRhZyAqLwomIzQzOwl2b2lkIF9fYXJlbmFfdGFnICphOwomIzQzOwl2b2lkICpiOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHsJLyogMTYgYnl0ZXM6IHRoZSBwb2ludGVyIGhpZGVzIG9uZSBsZXZlbCBkb3duICovCiYjNDM7CXN0cnVjdCB7CiYjNDM7CQl2b2lkICpwOwomIzQzOwl9IGluOwomIzQzOwlfX3U2NCB0YWc7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHsJLyogOCBieXRlcywgYnV0IG5lc3RlZCBwYXN0IHRoZSA0LWxldmVsIHdhbGsgbGltaXQgKi8KJiM0MzsJc3RydWN0IHsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJc3RydWN0IHsKJiM0MzsJCQkJc3RydWN0IHsKJiM0MzsJCQkJCV9fdTY0IHY7CiYjNDM7CQkJCX0gbDQ7CiYjNDM7CQkJfSBsMzsKJiM0MzsJCX0gbDI7CiYjNDM7CX0gbDE7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyB7CS8qIDI0IGJ5dGVzOiB0b28gbGFyZ2UgZm9yIFIwOlIyICovCiAJX191NjQgYTsKIAlfX3U2NCBiOwpAQCAtMTU5LDYgJiM0MzsyMDQsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wYWlyKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3BhaXIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwoX191NjQgYSwgX191NjQgYikgX19rc3ltOwogc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKSBfX2tzeW07CiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKF9fdTY0IHRhZykgX19rc3ltOwomIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltOwomIzQzO3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKF9fdTY0IGFkZHIpIF9fa3N5bTsKJiM0MztzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07CiYjNDM7dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07CiYjNDM7c3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKF9fdTY0IHYpIF9fa3N5bTsKIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcodm9pZCkgX19rc3ltOwogX191NjQgYnBmX2tmdW5jX2NhbGxfc3RhY2tfYXJnKF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsCiAJCQkgICAgICAgX191NjQgZSwgX191NjQgZiwgX191NjQgZywgX191NjQgaCwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI3IDA2OjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTMyCgkJCQkJCQlvdXRwdXQ6IDEzMgoJCQkJCQkJdGhvdWdodHM6IDExOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQlBGIFZlcmlmaWVyIFBhdGNoIEFuYWx5c2lzOiBLTVNBTiBDb25zaWRlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBtZW1vcnkgc2FmZXR5IHBlcnNwZWN0aXZlLiBUaGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgYWx0ZXJzIHRoZSBCUEYgdmVyaWZpZXIgdG8gcGVybWl0IGtmdW5jcyBhbmQgc3VicHJvZ3JhbXMgdG8gcmV0dXJuIHN0cnVjdHMgYW5kIHVuaW9ucyBieSB2YWx1ZSwgZXZlbiBpZiB0aG9zZSBzdHJ1Y3RzIGNvbnRhaW4gJiMzNDthcmVuYSYjMzQ7IHBvaW50ZXJzLCB3aGljaCBpcyBhIGRlcGFydHVyZSBmcm9tIHByZXZpb3VzIHJlc3RyaWN0aW9ucy4gSXQgc2VlbXMgdGhlIG1haW4gY2hhbmdlcyByZXZvbHZlIGFyb3VuZCBgYnRmX21lbWJlcl9raW5kYCwgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgLCBhbmQgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGFuZCBhZGp1c3RtZW50cyB0byBgbWFya19rZnVuY19yZXRfcmVnc2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXNzZXNzIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gRXNzZW50aWFsbHksIHRoZSBjb3JlIGxvZ2ljIGlzIHN0aWxsIGFib3V0IHRoZSAqdmVyaWZpZXIqIC0gaXQmIzM5O3MgYSB0eXBlIGNoZWNrZXIsIG5vdCBhIG1lY2hhbmlzbSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGF0YSB0cmFuc2ZlciBpdHNlbGYuIFRoZSB2ZXJpZmllciBmbGFncyB0aGUgcmV0dXJuIHJlZ2lzdGVycyBhcyB1bmtub3duLCBhbmQgdGhlIGtlcm5lbCBmdW5jdGlvbiBzdXBwbGllcyB0aGUgZGF0YS4gVGhlc2UgdmFsdWVzIHJlc2lkZSB3aXRoaW4gdGhlIEJQRiByZWdpc3RlcnMgdGhlbXNlbHZlcy4gVGh1cywgaXQmIzM5O3MgYWJvdXQgY2hlY2tpbmcgcmV0dXJuIHZhbHVlIHR5cGVzLCBub3QgbmV3IG1lbW9yeSBleHBvc3VyZSB0byB1c2VyIHNwYWNlIGRpcmVjdGx5IGZyb20gdGhlIHZlcmlmaWVyIGNoYW5nZS4KClNvLCBjb3VsZCB1bmluaXRpYWxpemVkIG1lbW9yeSAqZnJvbSBhIGtmdW5jKiBiZSBleHBvc2VkPyBZZXMsIHBvdGVudGlhbGx5LCBpZiBhIGtmdW5jIHJldHVybnMgdW5pbml0aWFsaXplZCBkYXRhLiBIb3dldmVyLCB0aGUgZXhpc3RpbmcgS01TQU4gc2hvdWxkIGFscmVhZHkgY2F0Y2ggdGhpcyB3aGVuIHRoZSBCUEYgcHJvZ3JhbSBhdHRlbXB0cyB0byByZWFkIHN1Y2ggdmFsdWVzLCBvciB3aGVuIHRoZSBrZnVuYyBpdHNlbGYgcmV0dXJucyBpdC4gQ3J1Y2lhbGx5LCB0aGUgcGF0Y2ggKmRvZXNuJiMzOTt0KiBpbnRyb2R1Y2UgbmV3IGtmdW5jcy4gVGhlIGFkZGVkIHRlc3QgY2FzZXMgYXJlIGluaXRpYWxpemVkIGNvcnJlY3RseS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIGBtYXJrX2tmdW5jX3JldF9yZWdzYC4gQWgsIGl0IGp1c3QgaGFuZGxlcyB2ZXJpZmllciBzdGF0ZSB0cmFja2luZyEgSXQgbWFya3MgdGhvc2UgcmVnaXN0ZXJzIGFzIGNvbnRhaW5pbmcgJiMzNDt1bmtub3duJiMzNDsgdmFsdWVzLCBidXQgbm90aGluZyBtb3JlLCBjb25maXJtaW5nIHRoYXQgdGhlIHZhbHVlcyBhcmUgYmVpbmcgZ2VuZXJhdGVkIGJ5IHRoZSBrZnVuYyBpdHNlbGYuIFRoaXMgaXMgY3JpdGljYWw6IHRoZSB2ZXJpZmllciBpc24mIzM5O3QgY3JlYXRpbmcgb3IgaW5pdGlhbGl6aW5nIG1lbW9yeSBoZXJlLiBUaGUgYHByZXBhcmVfZnVuY19leGl0YCBwYXJ0IGlzIHNpbXBseSBjb3B5aW5nIHJlZ2lzdGVycywgbm90aGluZyBuZXcuCgpGcm9tIG15IHVuZGVyc3RhbmRpbmcsIHRoaXMgaXMgcHVyZWx5IHZlcmlmaWVyIGxvZ2ljLiBJdCYjMzk7cyBhYm91dCBzdGF0aWMgYW5hbHlzaXMsIG5vdCBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGtmdW5jcyBhcmUgcmVzcG9uc2libGUgZm9yIHJldHVybmluZyBpbml0aWFsaXplZCBkYXRhLiBUaHVzLCBpZiBhIGtmdW5jICpkaWQqIHJldHVybiB1bmluaXRpYWxpemVkIGRhdGEsIHRoYXQmIzM5O3MgYSBidWcgKndpdGhpbiB0aGUga2Z1bmMqLCBub3QgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIHBhdGNoLCBhbmQgZXhpc3RpbmcgS01TQU4vS0FTQU4gd291bGQgYWRkcmVzcyB0aGlzLiBJdCYjMzk7cyBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4KClJldmlld2luZyBLTVNBTiYjMzk7cyBjcml0aWNhbCBzY2VuYXJpb3Mg4oCTIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgZmllbGRzIG1heSBiZSB1bmluaXRpYWxpemVkLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgYnVmZmVyIGFjY2VzcyB3aXRoIGluY29ycmVjdCBib3VuZHMgY2hlY2tzIOKAkyBub25lIG9mIHRoZXNlIGFwcGx5IHRvIHRoZSBjb3JlIHZlcmlmaWVyIGNoYW5nZXMuIFRoZSB0ZXN0IGNhc2VzIHRoZW1zZWx2ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lc24mIzM5O3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZSBjaGFuZ2VzIGFyZSBzb2xlbHkgaW4gdGhlIHR5cGUtY2hlY2tpbmcgYW5kIHJlZ2lzdGVyIHN0YXRlLXRyYWNraW5nIGxvZ2ljIG9mIHRoZSB2ZXJpZmllci4gTm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8ga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIG5vdGhpbmcgdGhhdCBpbnRyb2R1Y2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGJleW9uZCB3aGF0JiMzOTtzIGFscmVhZHkgY292ZXJlZCBieSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHRvb2xzLiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNyAwNjo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGtmdW5jcyBhbmQgc3VicHJvZ3JhbXMgdG8gcmV0dXJuIHN0cnVjdHMvdW5pb25zIGNvbnRhaW5pbmcgYXJlbmEgcG9pbnRlcnMgYnkgdmFsdWUuIEl0IHVwZGF0ZXMgdGhlIHZlcmlmaWVyJiMzOTtzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMgcGhhc2Ugb2YgQlBGIHByb2dyYW1zLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoZSB2ZXJpZmllci4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cga2Z1bmNzIGFuZCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cy91bmlvbnMgY29udGFpbmluZyBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4gSXQgdXBkYXRlcyB0aGUgdmVyaWZpZXImIzM5O3MgdHlwZSBjaGVja2luZyBsb2dpYyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIHN0YXRpYyBhbmFseXNpcyBwaGFzZSBvZiBCUEYgcHJvZ3JhbXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlIHZlcmlmaWVyLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MzozNS4yMTYyMTExMDZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA5NTc3MTU2NDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZlwiLFxuICAgIFwiYnRmX3R5cGVfaXNfYXJlbmFfcHRyXCIsXG4gICAgXCJidGZfcHJlcGFyZV9mdW5jX2FyZ3NcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cga2Z1bmNzIGFuZCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cy91bmlvbnMgY29udGFpbmluZyBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4gSXQgdXBkYXRlcyB0aGUgdmVyaWZpZXIncyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGUgdmVyaWZpZXIuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyBpZiB0aGV5IGFyZSBjb21wb3NlZCBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyAocG9pbnRlcnMgd2l0aCB0aGUgYGJ0Zl90eXBlX3RhZyhcXFwiYXJlbmFcXFwiKWAgYXR0cmlidXRlKS4gUHJldmlvdXNseSwgb25seSBzY2FsYXJzIHdlcmUgYWxsb3dlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2ZXJpZmllcidzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIChoYW5kbGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCBhcmVuYSBwb2ludGVycykuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBzdWNoIGtmdW5jcyBvciBzdWJwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDM6MzUuMjE2MjE4MTA2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxMzk1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhZjdlOGE4YTk1MDFlNWVhM2JjYTliOGUxMjJmZGM0ZWNjNTQ1ZTYzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDI3IDA2OjQzOjM0IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3QgYi9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuaW5kZXggODlkZWE2YjBiMDI0MS4uOTZiZjYzZDM0NDMyMiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxcbkBAIC01ODEsMjAgKzU4MSwyNyBAQCBhZ2FpbnN0IHRoZSBhcmVuYS4gTGFyZ2VyIGFjY2Vzc2VzIG11c3QgdmVyaWZ5IHRoZSByYW5nZSBleHBsaWNpdGx5LlxcbiBBIGtmdW5jIG1heSByZXR1cm4gYSBzY2FsYXIsIGEgcG9pbnRlciwgb3IgYSBzbWFsbCBzdHJ1Y3Qgb3IgdW5pb24gYnlcXG4gdmFsdWUuIEEgc2NhbGFyIG9yIHBvaW50ZXIgb2YgdXAgdG8gOCBieXRlcyBpcyByZXR1cm5lZCBpbiBSMCwgYXMgdXN1YWwuXFxuIFxcbi1BIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFyc1xcbi0ocmVjdXJzaXZlbHkpLCB3aGVyZSBhIHNjYWxhciBpcyBhbiBpbnRlZ2VyIG9yIGFuIGVudW07IGFycmF5cyBvZiBzY2FsYXJzIGFyZVxcbi1hbGxvd2VkIGFzIG1lbWJlcnMuIEl0cyBieXRlcyBhcmUgaGFuZGVkIGJhY2sgdG8gdGhlIHByb2dyYW0gYXMgdGhlIHJhd1xcbi1jb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyXFxuLWFuZCBlc2NhcGUgdGhlIHZlcmlmaWVyJ3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIEEgc3RydWN0XFxuLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXNcXG4tb25lIHdpdGggYSBmbG9hdGluZy1wb2ludCBtZW1iZXIsIHdoaWNoIHRoZSBBQkkgbWF5IG5vdCByZXR1cm4gaW4gUjA6UjIgYXRcXG4tYWxsLlxcbitBIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycyBhbmQgYXJlbmFcXG4rcG9pbnRlcnMgKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtIGFuZCBhbiBhcmVuYVxcbitwb2ludGVyIGlzIG9uZSBjYXJyeWluZyB0aGUgYGBidGZfdHlwZV90YWcoXFxcImFyZW5hXFxcIilgYCBhdHRyaWJ1dGU7IGFycmF5cyBvZlxcbitlaXRoZXIgYXJlIGFsbG93ZWQgYXMgbWVtYmVycy4gSXRzIGJ5dGVzIGFyZSBoYW5kZWQgYmFjayB0byB0aGUgcHJvZ3JhbSBhcyB0aGVcXG4rcmF3IGNvbnRlbnRzIG9mIFIwIChhbmQgUjIpLCBzbyBhIG1lbWJlciBvZiBhbnkgb3RoZXIgcG9pbnRlciB0eXBlIHdvdWxkIGJlXFxuK2xhdW5kZXJlZCBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgdGhlIHZlcmlmaWVyJ3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZFxcbityZWZlcmVuY2UgdHJhY2tpbmcuIEEgc3RydWN0IG9yIHVuaW9uIHdpdGggc3VjaCBhIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWRcXG4rYXQgbG9hZCB0aW1lLCBhbmQgc28gaXMgb25lIHdpdGggYSBmbG9hdGluZy1wb2ludCBtZW1iZXIsIHdoaWNoIHRoZSBBQkkgbWF5IG5vdFxcbityZXR1cm4gaW4gUjA6UjIgYXQgYWxsLlxcbitcXG4rQW4gYXJlbmEgcG9pbnRlciBtZW1iZXIgaXMgaGFuZGVkIGJhY2sgYXMgYSBzY2FsYXIgdG9vLCBidXQgbm90aGluZyBpcyBsb3N0IGJ5XFxuK3RoYXQuIFRoZSBwcm9ncmFtIG11c3QgYGBjYXN0X2tlcm4oKWBgIHRoZSB2YWx1ZSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQsIGFuZCB0aGVcXG4rdmVyaWZpZXIgYWxsb3dzIHRoYXQgY2FzdCBvbiBhbnkgc2NhbGFyLCBzbyBhIGxhdW5kZXJlZCBhcmVuYSBhZGRyZXNzIGdpdmVzIHRoZVxcbitwcm9ncmFtIG5vIHJlYWNoIGl0IGRpZCBub3QgYWxyZWFkeSBoYXZlLiBUaGUgcmVzdWx0IGlzIGNvbmZpbmVkIHRvIHRoZVxcbitwcm9ncmFtJ3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuXFxuIFxcbiBBIGtmdW5jIG1heSBhbHNvIHJldHVybiBhIHZhbHVlIGxhcmdlciB0aGFuIDggYnl0ZXMgYW5kIHVwIHRvIDE2IGJ5dGVzIC0tIGFcXG4tc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZFxcbi1pbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTSB1c2VzIGZvciB0aGUgQlBGXFxuLXRhcmdldDogdGhlIGZpcnN0IDggYnl0ZXMgaW4gUjAgYW5kIHRoZSBzZWNvbmQgOCBieXRlcyBpbiBSMi4gQSBzdHJ1Y3Qgb3JcXG4tdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLlxcbitzdHJ1Y3Qgb3IgdW5pb24gb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMsIG9yIGFuIGBgX19pbnQxMjhgYC4gU3VjaCBhXFxuK3ZhbHVlIGlzIHJldHVybmVkIGluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNXFxuK3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLlxcbitBIHN0cnVjdCBvciB1bmlvbiBvZiA4IGJ5dGVzIG9yIGxlc3MgaXMgcmV0dXJuZWQgaW4gUjAgYWxvbmUuXFxuIFxcbiA6OlxcbiBcXG5AQCAtNjIwLDEwICs2MjcsMTAgQEAgdXNlZCB3aGVuIHRoZSBwcm9ncmFtIGlzIEpJVGVkLCBzaW5jZSB0aGUgaW50ZXJwcmV0ZXIgcHJvcGFnYXRlcyBvbmx5IFIwIG91dCBvZlxcbiBhIHN1YnByb2dyYW06IHdpdGhvdXQgYSBKSVQgdGhlIHJldHVybiB2YWx1ZSBzdGF5cyBpbiBSMCBhbG9uZSwgYW5kIGEgY2FsbGVyXFxuIHJlYWRpbmcgUjIgaXMgcmVqZWN0ZWQgZm9yIHJlYWRpbmcgYW4gdW5pbml0aWFsaXplZCByZWdpc3Rlci4gQSBnbG9iYWxcXG4gc3VicHJvZ3JhbSBpcyB2ZXJpZmllZCBpbiBpc29sYXRpb24sIHNvIGl0cyBieS12YWx1ZSBzdHJ1Y3Qgb3IgdW5pb24gcmV0dXJuIGlzXFxuLXJlc3RyaWN0ZWQgdG8gc2NhbGFycyBqdXN0IGxpa2UgYSBrZnVuYydzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkXFxuLWlubGluZSBhbmQgaGFzIG5vIHN1Y2ggcmVzdHJpY3Rpb24uIFRoZSBtYWluIHByb2dyYW0gaXMgbm90IGNvdmVyZWQ6IGl0cyByZXR1cm5cXG4tdmFsdWUgaXMgdGhlIHByb2dyYW0ncyBleGl0IGNvZGUsIHJlYWQgb3V0IG9mIFIwIGFsb25lLCBzbyBhIGRlY2xhcmVkIHVwcGVyXFxuLWhhbGYgaXMgbmV2ZXIgbG9va2VkIGF0LlxcbityZXN0cmljdGVkIHRvIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGp1c3QgbGlrZSBhIGtmdW5jJ3M7IGEgc3RhdGljXFxuK3N1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpc1xcbitub3QgY292ZXJlZDogaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgcHJvZ3JhbSdzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjBcXG4rYWxvbmUsIHNvIGEgZGVjbGFyZWQgdXBwZXIgaGFsZiBpcyBuZXZlciBsb29rZWQgYXQuXFxuIFxcbiBBIGdsb2JhbCBzdWJwcm9ncmFtIG11c3QgbGVhdmUgYSBzY2FsYXIgaW4gKmV2ZXJ5KiByZWdpc3RlciBvZiB0aGUgcGFpciwgc29cXG4gYm90aCBoYWx2ZXMgb2YgdGhlIHJldHVybmVkIHZhbHVlIGhhdmUgdG8gYmUgYXNzaWduZWQuIExlYXZpbmcgdGhlIHVwcGVyIGhhbGZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaCBiL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG5pbmRleCAwMDRiMDY3ODU1MjFjLi5hZTlmNjA2NTM5ZjQxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXFxuQEAgLTE0ODgsOCArMTQ4OCwxNSBAQCBpbnQgYnBmX2ptcF9vZmZzZXQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcXG4gc3RydWN0IGJwZl9pYXJyYXkgKmJwZl9pbnNuX3N1Y2Nlc3NvcnMoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgdTMyIGlkeCk7XFxuIHZvaWQgYnBmX2ZtdF9zdGFja19tYXNrKGNoYXIgKmJ1Ziwgc3NpemVfdCBidWZfc3osIHU2NCBzdGFja19tYXNrKTtcXG4gYm9vbCBicGZfc3VicHJvZ19pc19nbG9iYWwoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpO1xcbi1ib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi1cXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKTtcXG4rXFxuKy8qIEtpbmRzIG9mIG1lbWJlciBhIGJ5LXZhbHVlIHN0cnVjdCBvciB1bmlvbiBtYXkgYmUgY29tcG9zZWQgb2YuICovXFxuK2VudW0gYnRmX21lbWJlcl9raW5kIHtcXG4rXFx0QlRGX01FTUJFUl9TQ0FMQVJcXHQ9IEJJVCgwKSwgLyogYW4gaW50IG9yIGFuIGVudW0gKi9cXG4rXFx0QlRGX01FTUJFUl9BUkVOQV9QVFJcXHQ9IEJJVCgxKSwgLyogYSBwb2ludGVyIGNhcnJ5aW5nIHRoZSBcXFwiYXJlbmFcXFwiIHR5cGUgdGFnICovXFxuK307XFxuK1xcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzKTtcXG4gXFxuIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpO1xcbiBib29sIGJwZl9pc190aHJvd19rZnVuYyhzdHJ1Y3QgYnBmX2luc24gKmluc24pO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J0Zi5oIGIvaW5jbHVkZS9saW51eC9idGYuaFxcbmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9idGYuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvYnRmLmhcXG5AQCAtMjM1LDYgKzIzNSw3IEBAIHN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlXFxuIFxcdFxcdFxcdFxcdCAgICB1MzIgZmllbGRfbWFzaywgdTMyIHZhbHVlX3NpemUpO1xcbiBpbnQgYnRmX2NoZWNrX2FuZF9maXh1cF9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjKTtcXG4gYm9vbCBidGZfdHlwZV9pc192b2lkKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7XFxuK2Jvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTtcXG4gczMyIGJ0Zl9maW5kX2J5X25hbWVfa2luZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGtpbmQpO1xcbiBzMzIgYnBmX2ZpbmRfYnRmX2lkKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBraW5kLCBzdHJ1Y3QgYnRmICoqYnRmX3ApO1xcbiBzdHJ1Y3QgYnRmICpidGZfZ2V0X21vZHVsZV9idGYoY29uc3Qgc3RydWN0IG1vZHVsZSAqbW9kdWxlKTtcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcXG5pbmRleCA5MWI4Y2U3N2Y2OTlhLi5mNmQ4MmE4ZmQ2MTdiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvYnRmLmNcXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXFxuQEAgLTM1MjMsNiArMzUyMywyMiBAQCBzdGF0aWMgaW50IGJ0Zl90eXBlX3RhZ193YWxrKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK2Jvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxcbit7XFxuK1xcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtXFx1MDAzZXR5cGUpOyBidGZfdHlwZV9pc19tb2RpZmllcih0KTtcXG4rXFx0ICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LVxcdTAwM2V0eXBlKSkge1xcbitcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3R5cGVfdGFnKHQpIHx8IGJ0Zl90eXBlX2tmbGFnKHQpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKCFzdHJjbXAoX19idGZfbmFtZV9ieV9vZmZzZXQoYnRmLCB0LVxcdTAwM2VuYW1lX29mZiksIFxcXCJhcmVuYVxcXCIpKVxcbitcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGJ0Zl9maW5kX2twdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuIFxcdFxcdFxcdCB1MzIgb2ZmLCBpbnQgc3osIHN0cnVjdCBidGZfZmllbGRfaW5mbyAqaW5mbywgdTMyIGZpZWxkX21hc2spXFxuIHtcXG5AQCAtNzkyNyw1MSArNzk0MywxOSBAQCBzdGF0aWMgaW50IGJ0Zl9zY2FuX2RlY2xfdGFncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4tXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCxcXG4tXFx0XFx0XFx0ICAgICAgdTMyICp0YWdzKVxcbitzdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxcbiB7XFxuLVxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVfdGFnX21hdGNoIGZ1bmNfdHlwZV90YWdzW10gPSB7XFxuLVxcdFxcdHsgXFxcImFyZW5hXFxcIiwgQVJHX1RBR19BUkVOQSB9LFxcbi1cXHR9O1xcbi1cXHRzdHJ1Y3QgYnRmX3R5cGVfdGFnX3dhbGtfY3R4IGN0eDtcXG4tXFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0O1xcbi1cXHRpbnQgZXJyO1xcbi1cXG4gXFx0LyogRmluZCB0aGUgZmlyc3QgcG9pbnRlciB0eXBlIGluIHRoZSBjaGFpbi4gKi9cXG4tXFx0dCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgdHlwZV9pZCwgTlVMTCk7XFxuIFxcbi1cXHQvKlxcbi1cXHQgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcyxcXG4tXFx0ICogd2hpY2ggbmVpdGhlciBMTFZNIG5vciBHQ0Mgc3VwcG9ydCBhbnl3YXkuXFxuLVxcdCAqL1xcbi1cXHRpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSlcXG4tXFx0XFx0cmV0dXJuIDA7XFxuLVxcbi1cXHRjdHgudCA9IHQ7XFxuLVxcdGVyciA9IGJ0Zl90eXBlX3RhZ193YWxrKGJ0ZiwgXFx1MDAyNmN0eCwgZnVuY190eXBlX3RhZ3MsXFxuLVxcdFxcdFxcdFxcdEFSUkFZX1NJWkUoZnVuY190eXBlX3RhZ3MpKTtcXG4tXFx0aWYgKGVycikge1xcbi1cXHRcXHRicGZfbG9nKFxcdTAwMjZlbnYtXFx1MDAzZWxvZyxcXG4tXFx0XFx0XFx0XFxcImZ1bmN0aW9uIHNpZ25hdHVyZSBtZW1iZXIgaGFzIG11bHRpcGxlIHR5cGUgdGFnc1xcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4tXFx0KnRhZ3MgfD0gY3R4LnJlcztcXG4tXFxuLVxcdHJldHVybiAwO1xcbitcXHRpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpXFxuK1xcdFxcdCp0YWdzIHw9IEFSR19UQUdfQVJFTkE7XFxuIH1cXG4gXFxuIC8qIENoZWNrIHdoZXRoZXIgdGhlIHR5cGUgaXMgYSB2YWxpZCByZXR1cm4gdHlwZS4gKi9cXG4gc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCBzdWJwcm9nLCBib29sIGlzX2dsb2JhbClcXG4ge1xcbi1cXHR1MzIgdGFncyA9IDA7XFxuLVxcdGludCBlcnI7XFxuLVxcbi1cXHRlcnIgPSBidGZfc2Nhbl90eXBlX3RhZ3MoZW52LCBidGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZ0YWdzKTtcXG4tXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFxuIFxcdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHQtXFx1MDAzZXR5cGUsIE5VTEwpO1xcbiBcXG4gXFx0LypcXG5AQCAtNzk3OSw3ICs3OTYzLDcgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRcXG4gXFx0ICogR2VuZXJhbCBhcmVuYSB2YXJpYWJsZXMgYXJlIG5vdCBhbGxvd2VkLCBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byByZXR1cm4gYnkgdmFsdWVcXG4gXFx0ICogYSB2YXJpYWJsZSB0aGF0J3Mgb24gdGhlIGhlYXAgaW4gdGhlIGZpcnN0IHBsYWNlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKHN1YnByb2cgXFx1MDAyNlxcdTAwMjYgKHRhZ3MgXFx1MDAyNiBBUkdfVEFHX0FSRU5BKSBcXHUwMDI2XFx1MDAyNiBidGZfdHlwZV9pc19wdHIodCkpXFxuK1xcdGlmIChzdWJwcm9nIFxcdTAwMjZcXHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdC8qIFdlIGFsd2F5cyBhY2NlcHQgdm9pZCBvciBzY2FsYXJzLiAqL1xcbkBAIC03OTg5LDEzICs3OTczLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0XFxuIFxcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkgXFx1MDAyNlxcdTAwMjYgdC1cXHUwMDNlc2l6ZSBcXHUwMDNjPSAxNikge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBBIGdsb2JhbCBmdW5jdGlvbidzIGNhbGxlciBtb2RlbHMgdGhlIHJldHVybiBhcyBhbiBvcGFxdWVcXG4tXFx0XFx0ICogc2NhbGFyIHBhaXIsIHNvIGl0IG1heSBvbmx5IHJldHVybiBzY2FsYXJzIGJ5IHZhbHVlLiBBIGxvY2FsXFxuLVxcdFxcdCAqIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc28gYSBwb2ludGVyIGZpZWxkIHN0YXlzIHRyYWNrZWRcXG4tXFx0XFx0ICogYW5kIG5lZWRzIG5vIHN1Y2ggcmVzdHJpY3Rpb24uXFxuK1xcdFxcdCAqIHNjYWxhciBwYWlyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGFcXG4rXFx0XFx0ICogc2NhbGFyIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLiBPbmx5XFxuK1xcdFxcdCAqIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGFyZSBhbGxvd2VkOiBhbiBhcmVuYSBwb2ludGVyIGhhc1xcbitcXHRcXHQgKiBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmUgb25lXFxuK1xcdFxcdCAqIGZyb20gYW55IHNjYWxhciB3aXRoIGFkZHJfc3BhY2VfY2FzdCgpLCB3aGljaCBjb25maW5lcyB0aGVcXG4rXFx0XFx0ICogcmVzdWx0IHRvIHRoZSBhcmVuYS4gQSBsb2NhbCBmdW5jdGlvbiBpcyB2ZXJpZmllZCBpbmxpbmUsIHNvXFxuK1xcdFxcdCAqIGl0cyBjYWxsZXIgcmVjZWl2ZXMgdGhlIHJlYWwgcmVnaXN0ZXIgc3RhdGUgYW5kIGFueSBtZW1iZXIgaXNcXG4rXFx0XFx0ICogZmluZS5cXG4gXFx0XFx0ICovXFxuIFxcdFxcdGJvb2wgbG9jYWxfZnVuYyA9IHN1YnByb2cgXFx1MDAyNlxcdTAwMjYgIWlzX2dsb2JhbDtcXG4rXFx0XFx0dTMyIG1lbWJlcl9raW5kcyA9IEJURl9NRU1CRVJfU0NBTEFSO1xcbitcXG4rXFx0XFx0aWYgKHN1YnByb2cpXFxuK1xcdFxcdFxcdG1lbWJlcl9raW5kcyB8PSBCVEZfTUVNQkVSX0FSRU5BX1BUUjtcXG4gXFxuLVxcdFxcdGlmIChsb2NhbF9mdW5jIHx8IGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIHQsIDApKVxcbitcXHRcXHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFx0fVxcbiBcXG5AQCAtODA5MSw3ICs4MDg0LDggQEAgaW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4gXFx0XFx0aWYgKGlzX2dsb2JhbCkge1xcbiBcXHRcXHRcXHRicGZfbG9nKGxvZyxcXG4gXFx0XFx0XFx0XFx0XFxcIkdsb2JhbCBmdW5jdGlvbiAlcygpIGhhcyB1bnN1cHBvcnRlZCByZXR1cm4gdHlwZS4gXFxcIlxcbi1cXHRcXHRcXHRcXHRcXFwiT25seSB2b2lkLCBzY2FsYXIsIG9yIGEgc2NhbGFyLW9ubHkgc3RydWN0L3VuaW9uIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcXCJPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiBcXFwiXFxuK1xcdFxcdFxcdFxcdFxcXCJzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHR0bmFtZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtODEwNiw5ICs4MTAwLDcgQEAgaW50IGJ0Zl9wcmVwYXJlX2Z1bmNfYXJncyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgc3VicHJvZylcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCBcXHUwMDI2dGFncyk7XFxuLVxcdFxcdGlmIChlcnIpXFxuLVxcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGJ0Zl9zY2FuX3R5cGVfdGFncyhidGYsIGFyZ3NbaV0udHlwZSwgXFx1MDAyNnRhZ3MpO1xcbiBcXG4gXFx0XFx0dCA9IGJ0Zl90eXBlX2J5X2lkKGJ0ZiwgYXJnc1tpXS50eXBlKTtcXG4gXFx0XFx0d2hpbGUgKGJ0Zl90eXBlX2lzX21vZGlmaWVyKHQpKVxcbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL3ZlcmlmaWVyLmMgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcXG5pbmRleCBlMDM2YWUyMGJmNmI5Li45YTM2ODA4MTM2YzlhIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbisrKyBiL2tlcm5lbC9icGYvdmVyaWZpZXIuY1xcbkBAIC05OTk1LDkgKzk5OTUsMTQgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKCFyZXR1cm5zX3ZvaWQpIHtcXG4gXFx0XFx0XFx0bnJlZ3MgPSBicGZfcmV0X3JlZ19wYWlyKGVudiwgc3VicHJvZykgPyAyIDogMTtcXG4tXFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWdzOyBpKyspXFxuLVxcdFxcdFxcdFxcdG1hcmtfcmVnX3Vua25vd24oZW52LCBjYWxsZXItXFx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcXG4rXFx0XFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIGNhbGxlci1cXHUwMDNlcmVncywgcmV0X3JlZ3NbMF0pO1xcbiBcXHRcXHRcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdFxcdFxcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBucmVnczsgaSsrKSB7XFxuK1xcdFxcdFxcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZjYWxsZXItXFx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xcbitcXHRcXHRcXHRcXHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVxcdTAwM2VyZWdzLCByZXRfcmVnc1tpXSk7XFxuK1xcdFxcdFxcdFxcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcXG4rXFx0XFx0XFx0fVxcbiBcXHRcXHR9XFxuIFxcbiBcXHRcXHRpZiAoZW52LVxcdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcXG5AQCAtMTA0MDMsMTAgKzEwNDA4LDE0IEBAIHN0YXRpYyBpbnQgcHJlcGFyZV9mdW5jX2V4aXQoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50ICppbnNuX2lkeClcXG4gXFx0XFx0ICogcmV0dXJuIHRvIHRoZSBjYWxsZXIgd2hhdGV2ZXIgdGhlIGNhbGxlZSBoYWQgaW4gdGhlXFxuIFxcdFxcdCAqIHJldHVybiByZWdpc3RlcihzKVxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG4tXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWdzOyBpKyspXFxuLVxcdFxcdFxcdGNhbGxlci1cXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXFx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dO1xcbi1cXHRcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucmVnczsgaSsrKSB7XFxuK1xcdFxcdFxcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xcbitcXG4rXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXFx1MDAyNmNhbGxlci1cXHUwMDNlcmVnc1tyZWdub10sIFxcdTAwMjZjYWxsZWUtXFx1MDAzZXJlZ3NbcmVnbm9dLFxcbitcXHRcXHRcXHRcXHRcXHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xcbitcXHRcXHRcXHRjYWxsZXItXFx1MDAzZXJlZ3NbcmVnbm9dID0gY2FsbGVlLVxcdTAwM2VyZWdzW3JlZ25vXTtcXG4rXFx0XFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcXG5AQCAtMTEzNDIsMTUgKzExMzUxLDMzIEBAIHN0YXRpYyBpbnQgY2hlY2tfaGVscGVyX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuXFxuIFxcbiAvKlxcbiAgKiBNYXJrIHRoZSByZWdpc3RlcihzKSBob2xkaW5nIGEgQHNpemUgYnl0ZSBrZnVuYyByZXR1cm4gdmFsdWUgYXMgdW5rbm93blxcbi0gKiBzY2FsYXJzLiBCb3RoIGhhbHZlcyBvZiBhIHJlZ2lzdGVyIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LlxcbisgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlclxcbisgKiBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS5cXG4rICpcXG4rICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlXFxuKyAqIHRoZSBjYWxsZXItc2F2ZWQgc2NydWIsIHNpbmNlIFIwIGdldHMgbm8gc2NydWIgcmVjb3JkIG9mIGl0cyBvd24gYW5kIHRoYXRcXG4rICogc2NvcGUgaXMgd2hhdCBjYXJyaWVzIGl0cyBwcmUtY2FsbCB2YWx1ZSBpbnRvIHRoZSBoaXN0b3J5LiBBIHNjb3BlIHRyYWNrcyBhXFxuKyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZlxcbisgKiB0aGUgcmV0dXJuIHZhbHVlLiBBIHZhbHVlIHRoYXQgZml0cyBpbiBSMCBsZWF2ZXMgdGhlIGNhbGxlcidzIHNjb3BlIG9wZW4gZm9yXFxuKyAqIHRoZSBjYWxsZXIgdG8gY2xvc2UsIHNvIGEgbGF0ZXIgd3JpdGUgdG8gUjAgc3RpbGwgbGFuZHMgaW4gaXQuXFxuICAqL1xcbi1zdGF0aWMgdm9pZCBtYXJrX2tmdW5jX3JldF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSlcXG4rc3RhdGljIHUzMiBtYXJrX2tmdW5jX3JldF9yZWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYnBmX3JlZ19zdGF0ZSAqcmVncywgdTMyIHNpemUpXFxuIHtcXG4gXFx0dTMyIGksIG5yZWdzID0gcmV0X3JlZ3NfY250KHNpemUpO1xcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yZWdzOyBpKyspXFxuK1xcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1swXSk7XFxuK1xcdGlmIChucmVncyA9PSAxKVxcbitcXHRcXHRyZXR1cm4gbnJlZ3M7XFxuK1xcbitcXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdGZvciAoaSA9IDE7IGkgXFx1MDAzYyBucmVnczsgaSsrKSB7XFxuK1xcdFxcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFxcdTAwMjZyZWdzW3JldF9yZWdzW2ldXSwgTlVMTCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcXG4gXFx0XFx0bWFya19yZWdfdW5rbm93bihlbnYsIHJlZ3MsIHJldF9yZWdzW2ldKTtcXG4rXFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gbnJlZ3M7XFxuIH1cXG4gXFxuIHN0YXRpYyBib29sIGlzX2tmdW5jX2FjcXVpcmUoc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhKVxcbkBAIC0xMTYxOSwxMCArMTE2NDYsMzMgQEAgc3RhdGljIGJvb2wgaXNfa2Z1bmNfYXJnX2ltcGxpY2l0KGNvbnN0IHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSwgdTMyIGFyZ19cXG4gXFx0cmV0dXJuIGFyZ24gXFx1MDAzYz0gYXJnX2lkeDtcXG4gfVxcbiBcXG4tLyogUmV0dXJucyB0cnVlIGlmIHN0cnVjdCBpcyBjb21wb3NlZCBvZiBzY2FsYXJzLCA0IGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQgKi9cXG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxuLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIGludCByZWMpXFxuKyNkZWZpbmUgQlRGX01FTUJFUl9NQVhfREVQVEhcXHQ0XFxuKyNkZWZpbmUgQlRGX01FTUJFUl9QQVRIX0xFTlxcdDY0XFxuK1xcbitzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoIHtcXG4rXFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcltCVEZfTUVNQkVSX01BWF9ERVBUSF07XFxuK1xcdGludCBkZXB0aDtcXG4rXFx0Ym9vbCB0b29fZGVlcDtcXG4rfTtcXG4rXFxuK3N0YXRpYyBib29sIGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbitcXHRcXHRcXHRcXHQgICAgdTMyIG1lbWJlcl9raW5kcylcXG4re1xcbitcXHRpZiAoKG1lbWJlcl9raW5kcyBcXHUwMDI2IEJURl9NRU1CRVJfU0NBTEFSKSBcXHUwMDI2XFx1MDAyNiBidGZfdHlwZV9pc19zY2FsYXIodCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXHRpZiAoKG1lbWJlcl9raW5kcyBcXHUwMDI2IEJURl9NRU1CRVJfQVJFTkFfUFRSKSBcXHUwMDI2XFx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcXG4rXFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbitcXG4rLypcXG4rICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpblxcbisgKiBAbWVtYmVyX2tpbmRzLCBCVEZfTUVNQkVSX01BWF9ERVBUSCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkLiBBbiBhcnJheVxcbisgKiBtZW1iZXIgY291bnRzIGFzIGl0cyBlbGVtZW50IHR5cGUuXFxuKyAqL1xcbitzdGF0aWMgYm9vbCBidGZfc3RydWN0X21lbWJlcl93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzLCBpbnQgcmVjLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoICpwYXRoKVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqbWVtYmVyX3R5cGU7XFxuIFxcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXI7XFxuQEAgLTExNjM2LDI3ICsxMTY4Niw2NSBAQCBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4gXFxuIFxcdFxcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXFx1MDAzZXR5cGUsIE5VTEwpO1xcbiBcXHRcXHRpZiAoYnRmX3R5cGVfaXNfc3RydWN0KG1lbWJlcl90eXBlKSkge1xcbi1cXHRcXHRcXHRpZiAocmVjIFxcdTAwM2U9IDMpIHtcXG4rXFx0XFx0XFx0aWYgKHJlYyBcXHUwMDNlPSBCVEZfTUVNQkVSX01BWF9ERVBUSCAtIDEpIHtcXG4gXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRcXHRpZiAocGF0aClcXG4rXFx0XFx0XFx0XFx0XFx0cGF0aC1cXHUwMDNldG9vX2RlZXAgPSB0cnVlO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgcmVjICsgMSkpXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0XFx0aWYgKCFidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgcmVjICsgMSwgcGF0aCkpXFxuK1xcdFxcdFxcdFxcdGdvdG8gYmFkX3BhdGg7XFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcXG4gXFx0XFx0XFx0YXJyYXkgPSBidGZfYXJyYXkobWVtYmVyX3R5cGUpO1xcbiBcXHRcXHRcXHRpZiAoIWFycmF5LVxcdTAwM2VuZWxlbXMpXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0XFx0XFx0XFx0Z290byBiYWRfbWVtYmVyO1xcbiBcXHRcXHRcXHRtZW1iZXJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGJ0ZiwgYXJyYXktXFx1MDAzZXR5cGUsIE5VTEwpO1xcbi1cXHRcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihtZW1iZXJfdHlwZSkpXFxuLVxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIobWVtYmVyX3R5cGUpKVxcbi1cXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdGlmICghYnRmX21lbWJlcl9raW5kX2FsbG93ZWQoYnRmLCBtZW1iZXJfdHlwZSwgbWVtYmVyX2tpbmRzKSlcXG4rXFx0XFx0XFx0Z290byBiYWRfbWVtYmVyO1xcbiBcXHR9XFxuIFxcdHJldHVybiB0cnVlO1xcbitcXG4rYmFkX21lbWJlcjpcXG4rXFx0aWYgKHBhdGgpXFxuK1xcdFxcdHBhdGgtXFx1MDAzZWRlcHRoID0gcmVjICsgMTtcXG4rYmFkX3BhdGg6XFxuK1xcdGlmIChwYXRoIFxcdTAwMjZcXHUwMDI2IHBhdGgtXFx1MDAzZWRlcHRoKVxcbitcXHRcXHRwYXRoLVxcdTAwM2VtZW1iZXJbcmVjXSA9IG1lbWJlcjtcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgdTMyIG1lbWJlcl9raW5kcylcXG4re1xcbitcXHRyZXR1cm4gYnRmX3N0cnVjdF9tZW1iZXJfd2FsayhlbnYsIGJ0ZiwgdCwgbWVtYmVyX2tpbmRzLCAwLCBOVUxMKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcXG4re1xcbitcXHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBidGZfbWVtYmVyX3BhdGhfc3RyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aCxcXG4rXFx0XFx0XFx0XFx0Y2hhciAqYnVmLCBzaXplX3QgYnVmX3N6KVxcbit7XFxuK1xcdHNpemVfdCBsZW4gPSAwO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGJ1ZlswXSA9ICdcXFxcMCc7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBwYXRoLVxcdTAwM2VkZXB0aDsgaSsrKSB7XFxuK1xcdFxcdGNvbnN0IGNoYXIgKm5hbWUgPSBidGZfbmFtZV9ieV9vZmZzZXQoYnRmLCBwYXRoLVxcdTAwM2VtZW1iZXJbaV0tXFx1MDAzZW5hbWVfb2ZmKTtcXG4rXFxuK1xcdFxcdGlmICghbmFtZSB8fCAhbmFtZVswXSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGxlbiArPSBzY25wcmludGYoYnVmICsgbGVuLCBidWZfc3ogLSBsZW4sIFxcXCIlcyVzXFxcIiwgbGVuID8gXFxcIi5cXFwiIDogXFxcIlxcXCIsIG5hbWUpO1xcbitcXHR9XFxuIH1cXG4gXFxuIGVudW0ga2Z1bmNfcHRyX2FyZ190eXBlIHtcXG5AQCAtMTIwMzksNyArMTIxMjcsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxcbiBcXHRcXHQgKGlzX2tmdW5jX2FyZ19tZW1fc2l6ZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZyArIDFdKSB8fFxcbiBcXHRcXHQgIGlzX2tmdW5jX2FyZ19jb25zdF9tZW1fc2l6ZShtZXRhLVxcdTAwM2VidGYsIFxcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcXG4gXFx0XFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcXHUwMDI2XFx1MDAyNiAhYnRmX3R5cGVfaXNfc2NhbGFyKHJlZl90KSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVxcdTAwM2VidGYsIHJlZl90LCAwKSkge1xcbitcXHRcXHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVxcdTAwM2VidGYsIHJlZl90KSkge1xcbiBcXHRcXHRcXHR2ZXJib3NlKGVudiwgXFxcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvIHZvaWQsIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRcXHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbkBAIC0xMjA1NSw3ICsxMjE0Myw3IEBAIGdldF9rZnVuY19hcmdfdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsXFxuIFxcdFxcdCAqIHNjYWxhcnMuIFRoZSBhY2Nlc3Mgc2l6ZSBpcyBkZXJpdmVkIGZyb20gdGhlIHBvaW50ZWQtdG8gQlRGIHR5cGUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcXG4rXFx0XFx0ICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cXHUwMDNlYnRmLCByZWZfdCkpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCIlcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5AQCAtMTMxMTEsNyArMTMxOTksNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0XFx0fVxcbiBcXG4tXFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcXG4rXFx0XFx0XFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cXHUwMDNlYnRmLCByZWZfdCkpIHtcXG4gXFx0XFx0XFx0XFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7XFxuIFxcdFxcdFxcdFxcdGNvbnN0IGNoYXIgKmV4cGVjdGVkX3R5cGU7XFxuIFxcbkBAIC0xMzY1Myw3ICsxMzc0MSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfc3BlY2lhbF9rZnVuYyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2NhbGxfYXJnXFxuIFxcbiBcXHRcXHRzdHJ1Y3RfbWV0YSA9IGJ0Zl9maW5kX3N0cnVjdF9tZXRhKHJldF9idGYsIHJldF9idGZfaWQpO1xcbiBcXHRcXHRpZiAoaXNfYnBmX3BlcmNwdV9vYmpfbmV3X2tmdW5jKG1ldGEtXFx1MDAzZWZ1bmNfaWQpKSB7XFxuLVxcdFxcdFxcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIHJldF9idGYsIHJldF90LCAwKSkge1xcbitcXHRcXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCByZXRfYnRmLCByZXRfdCkpIHtcXG4gXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJicGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcXFxcblxcXCIpO1xcbiBcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0xMzc2Nyw3ICsxMzg1NSw3IEBAIHN0YXRpYyBpbnQgY2hlY2tfa2Z1bmNfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc24sXFxuIFxcdHN0cnVjdCBicGZfaW5zbl9hdXhfZGF0YSAqaW5zbl9hdXg7XFxuIFxcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcXG4gXFx0aW50IGVyciwgaW5zbl9pZHggPSAqaW5zbl9pZHhfcDtcXG4tXFx0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZDtcXG4rXFx0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZCwgcmV0X25yZWdzID0gMTtcXG4gXFx0c3RydWN0IGJwZl9rZnVuY19kZXNjICpkZXNjO1xcbiBcXHRzdHJ1Y3QgYnRmICpkZXNjX2J0ZjtcXG4gXFx0aW50IGlkO1xcbkBAIC0xNDAyMSwyNSArMTQxMDksNTkgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xcbi1cXHRcXHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cXHUwMDNlc2l6ZSk7XFxuK1xcdFxcdHJldF9ucmVncyA9IG1hcmtfa2Z1bmNfcmV0X3JlZ3MoZW52LCByZWdzLCB0LVxcdTAwM2VzaXplKTtcXG4gXFx0XFx0aWYgKG1ldGEuYnRmID09IGJ0Zl92bWxpbnV4IFxcdTAwMjZcXHUwMDI2IChtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrXSB8fFxcbiBcXHRcXHQgICAgbWV0YS5mdW5jX2lkID09IHNwZWNpYWxfa2Z1bmNfbGlzdFtLRl9icGZfcmVzX3NwaW5fbG9ja19pcnFzYXZlXSkpXFxuIFxcdFxcdFxcdF9fbWFya19yZWdfY29uc3RfemVybyhlbnYsIFxcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xcbiBcXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3N0cnVjdCh0KSkge1xcbitcXHRcXHRzdHJ1Y3QgYnRmX21lbWJlcl9wYXRoIHBhdGggPSB7fTtcXG4rXFx0XFx0Y29uc3QgY2hhciAqbWVtYmVyX25vdGUgPSBcXFwiXFxcIjtcXG4rXFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFRoZSByZXR1cm5lZCBzdHJ1Y3QgY29tZXMgYmFjayBhcyByYXcgcmVnaXN0ZXIgYml0cyBtb2RlbGVkXFxuLVxcdFxcdCAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBpdCBtdXN0IGNvbnRhaW4gb25seSBzY2FsYXJzOlxcbi1cXHRcXHQgKiBvdGhlcndpc2UgYSBwb2ludGVyIGZpZWxkIHdvdWxkIGJlIGxhdW5kZXJlZCBpbnRvIGEgc2NhbGFyXFxuLVxcdFxcdCAqIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLlxcbitcXHRcXHQgKiBhcyBhbiB1bmtub3duIHNjYWxhciwgc28gYSBwb2ludGVyIG1lbWJlciB3b3VsZCBiZSBsYXVuZGVyZWRcXG4rXFx0XFx0ICogaW50byBhIHNjYWxhciBhbmQgZXNjYXBlIHByb3ZlbmFuY2UgYW5kIHJlZmVyZW5jZSB0cmFja2luZy5cXG4rXFx0XFx0ICogT25seSBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyBhcmUgYWxsb3dlZDogYW4gYXJlbmEgcG9pbnRlclxcbitcXHRcXHQgKiBoYXMgbm8gcHJvdmVuYW5jZSB0byBsb3NlLCBzaW5jZSBhIHByb2dyYW0gbWF5IGFscmVhZHkgZGVyaXZlXFxuK1xcdFxcdCAqIG9uZSBmcm9tIGFueSBzY2FsYXIgd2l0aCBhZGRyX3NwYWNlX2Nhc3QoKSwgd2hpY2ggY29uZmluZXMgdGhlXFxuK1xcdFxcdCAqIHJlc3VsdCB0byB0aGUgYXJlbmEuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBkZXNjX2J0ZiwgdCwgMCkpIHtcXG4rXFx0XFx0aWYgKCFidGZfc3RydWN0X21lbWJlcl93YWxrKGVudiwgZGVzY19idGYsIHQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBCVEZfTUVNQkVSX1NDQUxBUiB8IEJURl9NRU1CRVJfQVJFTkFfUFRSLCAwLCBcXHUwMDI2cGF0aCkpIHtcXG4gXFx0XFx0XFx0dmVyYm9zZShlbnYsXFxuLVxcdFxcdFxcdFxcdFxcXCJrZXJuZWwgZnVuY3Rpb24gJXMgcmV0dXJucyAlcyAlcyB0aGF0IGlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwia2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXFxuIFxcdFxcdFxcdFxcdGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpKTtcXG4rXFx0XFx0XFx0aWYgKHBhdGgudG9vX2RlZXApIHtcXG4rXFx0XFx0XFx0XFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXFxuK1xcdFxcdFxcdFxcdFxcdGVudiwgXFxcIiBJdCBuZXN0cyBzdHJ1Y3RzIG1vcmUgdGhhbiAlZCBsZXZlbHMgZGVlcC5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRCVEZfTUVNQkVSX01BWF9ERVBUSCk7XFxuK1xcdFxcdFxcdH0gZWxzZSBpZiAocGF0aC5kZXB0aCkge1xcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqYmFkID0gcGF0aC5tZW1iZXJbcGF0aC5kZXB0aCAtIDFdO1xcbitcXHRcXHRcXHRcXHRjaGFyIGJhZF9uYW1lW0JURl9NRU1CRVJfUEFUSF9MRU5dO1xcbitcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKmJhZF90eXBlO1xcbitcXG4rXFx0XFx0XFx0XFx0YnRmX21lbWJlcl9wYXRoX3N0cihkZXNjX2J0ZiwgXFx1MDAyNnBhdGgsIGJhZF9uYW1lLCBzaXplb2YoYmFkX25hbWUpKTtcXG4rXFx0XFx0XFx0XFx0YmFkX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhkZXNjX2J0ZiwgYmFkLVxcdTAwM2V0eXBlLCBOVUxMKTtcXG4rXFx0XFx0XFx0XFx0dmVyYm9zZShlbnYsIFxcXCJtZW1iZXIgJyVzJyBoYXMgdHlwZSAlc1xcXFxuXFxcIiwgYmFkX25hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdGJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpO1xcbitcXHRcXHRcXHRcXHRtZW1iZXJfbm90ZSA9IGJwZl9kaWFnX2ZtdChcXG4rXFx0XFx0XFx0XFx0XFx0ZW52LFxcbitcXHRcXHRcXHRcXHRcXHRcXFwiIEl0cyBtZW1iZXIgJyVzJyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0YmFkX25hbWUsIGJ0Zl90eXBlX3N0cihiYWRfdHlwZSkpO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGJwZl9kaWFnX3Byb2dyYW1fc3RydWN0dXJlKFxcbitcXHRcXHRcXHRcXHRlbnYsIGluc25faWR4LCBcXFwidW5zdXBwb3J0ZWQga2VybmVsIGZ1bmN0aW9uIHJldHVybiB0eXBlXFxcIixcXG4rXFx0XFx0XFx0XFx0XFxcIkNhbGwgYSBrZXJuZWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9ubHkgc2NhbGFycyBvciBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXFwiJXMoKSByZXR1cm5zICVzICVzIGJ5IHZhbHVlLiVzIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFxcIk9ubHkga2Z1bmNzIHJldHVybmluZyBzY2FsYXIgdmFsdWVzIG9yIGFyZW5hIHBvaW50ZXJzLCBvciBcXFwiXFxuK1xcdFxcdFxcdFxcdFxcXCJzdHJ1Y3R1cmVzIGNvbXBvc2VkIG9mIHNjYWxhciB2YWx1ZXMgb3IgYXJlbmEgcG9pbnRlcnMgYXJlIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFxcInN1cHBvcnRlZC5cXFwiLFxcbitcXHRcXHRcXHRcXHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcXG4rXFx0XFx0XFx0XFx0YnRmX25hbWVfYnlfb2Zmc2V0KGRlc2NfYnRmLCB0LVxcdTAwM2VuYW1lX29mZiksIG1lbWJlcl9ub3RlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4tXFx0XFx0bWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRyZXRfbnJlZ3MgPSBtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cXHUwMDNlc2l6ZSk7XFxuIFxcdH0gZWxzZSBpZiAoYnRmX3R5cGVfaXNfcHRyKHQpKSB7XFxuIFxcdFxcdHB0cl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIHQtXFx1MDAzZXR5cGUsIFxcdTAwMjZwdHJfdHlwZV9pZCk7XFxuIFxcdFxcdGVyciA9IGNoZWNrX3NwZWNpYWxfa2Z1bmMoZW52LCBcXHUwMDI2bWV0YSwgcmVncywgaW5zbl9hdXgsIHB0cl90eXBlLCBkZXNjX2J0Zik7XFxuQEAgLTE0MTcwLDcgKzE0MjkyLDggQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcXG4gXFx0ICogUmVjb3JkIFIwIGJlZm9yZSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKCkgc25hcHNob3RzIHRoZSBhbHRlcm5hdGVcXG4gXFx0ICogaXRlcmF0b3IgcGF0aCdzIGRpYWdub3N0aWMgcG9zaXRpb24uXFxuIFxcdCAqL1xcbi1cXHRicGZfZGlhZ19tb2RfZW5kKGVudik7XFxuK1xcdGlmIChyZXRfbnJlZ3MgPT0gMSlcXG4rXFx0XFx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xcbiBcXG4gXFx0aWYgKGJwZl9pc19pdGVyX25leHRfa2Z1bmMoXFx1MDAyNm1ldGEpKSB7XFxuIFxcdFxcdGVyciA9IHByb2Nlc3NfaXRlcl9uZXh0X2NhbGwoZW52LCBpbnNuX2lkeCwgXFx1MDAyNm1ldGEpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ190ZXN0cy9hZ2dyZWdhdGVfcmV0LmNcXG5pbmRleCBlMGI5NGVkMTBmOTQxLi4wN2Q5ZDZlMWQ2Yjg4IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xcbkBAIC0xLDExICsxLDUzIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuIC8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4gI2luY2x1ZGUgXFx1MDAzY3Rlc3RfcHJvZ3MuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9idGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImFnZ3JlZ2F0ZV9yZXRfZnVuYy5za2VsLmhcXFwiXFxuICNpbmNsdWRlIFxcXCJhZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuc2tlbC5oXFxcIlxcbitcXG4rc3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKVxcbit7XFxuK1xcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmLCAqbW9kdWxlX2J0ZiA9IE5VTEw7XFxuK1xcdGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdDtcXG4rXFx0Ym9vbCB0YWdnZWQgPSBmYWxzZTtcXG4rXFx0X19zMzIgaWQ7XFxuK1xcbitcXHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xcbitcXHRpZiAoIXZtbGludXhfYnRmKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRtb2R1bGVfYnRmID0gYnRmX19sb2FkX21vZHVsZV9idGYoXFxcImJwZl90ZXN0bW9kXFxcIiwgdm1saW51eF9idGYpO1xcbitcXHRpZiAoIW1vZHVsZV9idGYpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0LyogcHJvZ190ZXN0X3JldF9hcmVuYTo6YSBpcyAndm9pZCBfX2FyZW5hX3RhZyAqJzogUFRSIC1cXHUwMDNlIFRZUEVfVEFHIC1cXHUwMDNlIHZvaWQgKi9cXG4rXFx0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKG1vZHVsZV9idGYsIFxcXCJwcm9nX3Rlc3RfcmV0X2FyZW5hXFxcIiwgQlRGX0tJTkRfU1RSVUNUKTtcXG4rXFx0aWYgKGlkIFxcdTAwM2M9IDApXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0dCA9IGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCBidGZfbWVtYmVycyhidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgaWQpKVswXS50eXBlKTtcXG4rXFx0aWYgKCF0IHx8ICFidGZfaXNfcHRyKHQpKVxcbitcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdHQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgdC1cXHUwMDNldHlwZSk7XFxuK1xcdHRhZ2dlZCA9IHQgXFx1MDAyNlxcdTAwMjYgYnRmX2lzX3R5cGVfdGFnKHQpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAhc3RyY21wKGJ0Zl9fbmFtZV9ieV9vZmZzZXQobW9kdWxlX2J0ZiwgdC1cXHUwMDNlbmFtZV9vZmYpLCBcXFwiYXJlbmFcXFwiKTtcXG4rXFxuK291dDpcXG4rXFx0YnRmX19mcmVlKG1vZHVsZV9idGYpO1xcbitcXHRidGZfX2ZyZWUodm1saW51eF9idGYpO1xcbitcXG4rXFx0cmV0dXJuIHRhZ2dlZDtcXG4rfVxcbiBcXG4gdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZClcXG4ge1xcbiBcXHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTtcXG4gXFx0UlVOX1RFU1RTKGFnZ3JlZ2F0ZV9yZXRfa2Z1bmMpO1xcbitcXG4rXFx0aWYgKHRlc3Rtb2RfaGFzX2FyZW5hX3RhZ2dlZF9tZW1iZXIoKSlcXG4rXFx0XFx0UlVOX1RFU1RTKGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEpO1xcbitcXHRlbHNlXFxuK1xcdFxcdHRlc3RfX3NraXAoKTtcXG4gfVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcXG5pbmRleCA2ZjY2ZmM4MjJjZWRlLi5mMDA3N2Q5NTFhMjVkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xcbkBAIC0yLDYgKzIsNyBAQFxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4gXFxuIHR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjggdTEyODtcXG5AQCAtMjM0LDQgKzIzNSwxNDkgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfdW5pb25fcHRyX2ZhaWwodm9pZClcXG4gXFxuICNlbmRpZlxcbiBcXG4rLypcXG4rICogZ2NjIHJldHVybnMgYSBieS12YWx1ZSBzdHJ1Y3QgdGhyb3VnaCBhIGhpZGRlbiBwb2ludGVyLCBhbmQgZW1pdHMgdGhlXFxuKyAqICdyMCA9IHIxJyByZXR1cm5pbmcgaXQgYWZ0ZXIgdGhlIF9fbmFrZWQgYm9keSdzIGV4aXQsIGxlYXZpbmcgdGhlXFxuKyAqIHN1YnByb2dyYW0gZmFsbGluZyB0aHJvdWdoLiBCdWlsZCB0aGVzZSB3aXRoIGNsYW5nIG9ubHkuXFxuKyAqL1xcbisjaWYgZGVmaW5lZChfX2NsYW5nX18pXFxuK1xcbitzdHJ1Y3QgYXJlbmFfcGFpciB7XFxuK1xcdHZvaWQgX19hcmVuYSAqbG87XFxuK1xcdHZvaWQgX19hcmVuYSAqaGk7XFxuK307XFxuK1xcbitzdHJ1Y3QgYXJlbmFfYW5kX3NjYWxhciB7XFxuK1xcdHZvaWQgX19hcmVuYSAqcDtcXG4rXFx0X191NjQgeDtcXG4rfTtcXG4rXFxuK3N0cnVjdCBhcmVuYV9hcnJheSB7XFxuK1xcdHZvaWQgX19hcmVuYSAqcFsyXTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBhcmVuYV9zaW5nbGUge1xcbitcXHR2b2lkIF9fYXJlbmEgKnA7XFxuK307XFxuK1xcbit1bmlvbiBhcmVuYV91cGFpciB7XFxuK1xcdHZvaWQgX19hcmVuYSAqcDtcXG4rXFx0X191NjQgaGFsdmVzWzJdO1xcbit9O1xcbitcXG4rX19uYWtlZCBzdHJ1Y3QgYXJlbmFfcGFpciBnbG9iYWxfcmV0X2FyZW5hX3BhaXIodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fbG9hZF9pZl9KSVRlZCgpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9wYWlyKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3BhaXJdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfcGFpcilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rX19uYWtlZCBzdHJ1Y3QgYXJlbmFfYW5kX3NjYWxhciBnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXIodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fbG9hZF9pZl9KSVRlZCgpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV9hbmRfc2NhbGFyKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXJdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rX19uYWtlZCBzdHJ1Y3QgYXJlbmFfYXJyYXkgZ2xvYmFsX3JldF9hcmVuYV9hcnJheSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXFwicjIgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQpO1xcbit9XFxuK1xcbitTRUMoXFxcInRjXFxcIilcXG4rX19sb2FkX2lmX0pJVGVkKClcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FycmF5KHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX2FycmF5XTtcXFwiXFxuK1xcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdDpcXG4rXFx0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX2FycmF5KVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9zaW5nbGUgZ2xvYmFsX3JldF9hcmVuYV9zaW5nbGUodm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQpO1xcbit9XFxuK1xcbitTRUMoXFxcInRjXFxcIilcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3NpbmdsZSh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9zaW5nbGVdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tKGdsb2JhbF9yZXRfYXJlbmFfc2luZ2xlKVxcbitcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbit9XFxuK1xcbitfX25ha2VkIHVuaW9uIGFyZW5hX3VwYWlyIGdsb2JhbF9yZXRfYXJlbmFfdW5pb24odm9pZClcXG4re1xcbitcXHRhc20gdm9sYXRpbGUgKFxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcInIyID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0KTtcXG4rfVxcbitcXG4rU0VDKFxcXCJ0Y1xcXCIpXFxuK19fbG9hZF9pZl9KSVRlZCgpXFxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV91bmlvbih2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV91bmlvbl07XFxcIlxcbitcXHRcXFwicjAgPSAwO1xcXCJcXG4rXFx0XFxcImV4aXQ7XFxcIlxcbitcXHQ6XFxuK1xcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV91bmlvbilcXG4rXFx0OiBfX2Nsb2JiZXJfYWxsKTtcXG4rfVxcbitcXG4rI2VuZGlmXFxuK1xcbiBjaGFyIF9saWNlbnNlW10gU0VDKFxcXCJsaWNlbnNlXFxcIikgPSBcXFwiR1BMXFxcIjtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5lOWM4MmRmOGVmYjI2IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXFxuQEAgLTE4LDYgKzE4LDggQEAgdm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXFxuIFxcdDogXFxcInJcXFwiKFxcdTAwMjZicGZfa2Z1bmNfY2FsbF90ZXN0X2kxMjgpLFxcbiBcXHQgIFxcXCJyXFxcIihcXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwpLFxcbiBcXHQgIFxcXCJyXFxcIihcXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKSxcXG4rXFx0ICBcXFwiclxcXCIoXFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZCksXFxuK1xcdCAgXFxcInJcXFwiKFxcdTAwMjZicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKSxcXG4gXFx0ICBcXFwiclxcXCIoXFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKSxcXG4gXFx0ICBcXFwiclxcXCIoXFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZykpO1xcbiB9XFxuQEAgLTcxLDcgKzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXFxuIFxcbiBTRUMoXFxcInRjXFxcIilcXG4gX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4tX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFyc1xcXCIpXFxuK19fZmFpbHVyZSBfX21zZyhcXFwiaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcXFwiKVxcbitfX21zZyhcXFwibWVtYmVyICdwJyBoYXMgdHlwZSBQVFJcXFwiKVxcbiBfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX3B0cl9mYWlsKHZvaWQpXFxuIHtcXG4gXFx0YXNtIHZvbGF0aWxlIChcXG5AQCAtODQsNiArODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxcbiBcXHQ6IF9fY2xvYmJlcl9hbGwpO1xcbiB9XFxuIFxcbitTRUMoXFxcInRjXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcXCIpXFxuK19fbXNnKFxcXCJtZW1iZXIgJ2luLnAnIGhhcyB0eXBlIFBUUlxcXCIpXFxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfbmVzdGVkX3B0cl9mYWlsKHZvaWQpXFxuK3tcXG4rXFx0YXNtIHZvbGF0aWxlIChcXG4rXFx0XFxcInIxID0gMDtcXFwiXFxuK1xcdFxcXCJjYWxsICVbYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkXTtcXFwiXFxuK1xcdFxcXCJyMCA9IDA7XFxcIlxcbitcXHRcXFwiZXhpdDtcXFwiXFxuK1xcdDpcXG4rXFx0OiBfX2ltbShicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQpXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuK1NFQyhcXFwidGNcXFwiKVxcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxcbitfX2ZhaWx1cmUgX19tc2coXFxcIm1heCBzdHJ1Y3QgbmVzdGluZyBkZXB0aCBleGNlZWRlZFxcXCIpXFxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfdG9vX2RlZXBfZmFpbCh2b2lkKVxcbit7XFxuK1xcdGFzbSB2b2xhdGlsZSAoXFxuK1xcdFxcXCJyMSA9IDA7XFxcIlxcbitcXHRcXFwiY2FsbCAlW2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXBdO1xcXCJcXG4rXFx0XFxcInIwID0gMDtcXFwiXFxuK1xcdFxcXCJleGl0O1xcXCJcXG4rXFx0OlxcbitcXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXFxuK1xcdDogX19jbG9iYmVyX2FsbCk7XFxuK31cXG4rXFxuIFNFQyhcXFwidGNcXFwiKVxcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxcbiBfX2ZhaWx1cmUgX19tc2coXFxcIlIyICFyZWFkX29rXFxcIilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2RcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuY1xcbkBAIC0wLDAgKzEsMTI5IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuKy8qIENvcHlyaWdodCAoYykgMjAyNiBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cXG4rI2luY2x1ZGUgXFx1MDAzY3ZtbGludXguaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2JwZi9icGZfaGVscGVycy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYnBmX2FyZW5hX2NvbW1vbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXFwiYnBmX21pc2MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIi4uL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaFxcXCJcXG4rXFxuKyNpZiBkZWZpbmVkKF9fY2xhbmdfbWFqb3JfXykgXFx1MDAyNlxcdTAwMjYgX19jbGFuZ19tYWpvcl9fIFxcdTAwM2U9IDIzXFxuK1xcbitzdHJ1Y3Qge1xcbitcXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcXG4rXFx0X191aW50KG1hcF9mbGFncywgQlBGX0ZfTU1BUEFCTEUpO1xcbitcXHRfX3VpbnQobWF4X2VudHJpZXMsIDIpO1xcbit9IGFyZW5hIFNFQyhcXFwiLm1hcHNcXFwiKTtcXG4rXFxuKy8qXFxuKyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2VcXG4rICogcXVhbGlmaWVyLCBzbyB0aGUgcHJvZ3JhbSBjYXN0cyBpdCBpbnRvIHRoZSBhcmVuYSBhZGRyZXNzIHNwYWNlIGl0c2VsZlxcbisgKiByYXRoZXIgdGhhbiB0aGUgY29tcGlsZXIgZG9pbmcgaXQuXFxuKyAqL1xcbisjZGVmaW5lIGFyZW5hX3B0cihwKSAoKHUzMiB2b2xhdGlsZSBfX2FyZW5hICopKHApKVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19sb2FkX2lmX0pJVGVkKClcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hKHZvaWQgKmN0eClcXG4re1xcbitcXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICphLCAqYjtcXG4rXFx0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgcjtcXG4rXFxuK1xcdGlmICghcGFnZSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcbitcXHQvKiBCb3RoIGhhbHZlcyBjb21lIGJhY2sgaW4gUjA6UjIsIHBvaW50aW5nIGF0IHBhZ2UgYW5kIHBhZ2UgKyA0LiAqL1xcbitcXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoKHU2NClwYWdlKTtcXG4rXFx0aWYgKCFyLmEgfHwgIXIuYilcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcbitcXHRhID0gYXJlbmFfcHRyKHIuYSk7XFxuK1xcdGIgPSBhcmVuYV9wdHIoci5iKTtcXG4rXFx0KmEgPSAxO1xcbitcXHQqYiA9IDI7XFxuK1xcdGlmICgqYSAhPSAxKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFx0aWYgKCpiICE9IDIpXFxuK1xcdFxcdHJldHVybiA0O1xcbitcXG4rXFx0LyogVGhlIGhhbHZlcyBhcmUgdGhlIGZpcnN0IHR3byBzbG90cyBvZiB0aGUgcGFnZSB0aGUgcHJvZ3JhbSBhbGxvY2F0ZWQuICovXFxuK1xcdHBhZ2VbMF0gPSA3O1xcbitcXHRpZiAoKmEgIT0gNylcXG4rXFx0XFx0cmV0dXJuIDU7XFxuK1xcdHBhZ2VbMV0gPSA5O1xcbitcXHRpZiAoKmIgIT0gOSlcXG4rXFx0XFx0cmV0dXJuIDY7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19sb2FkX2lmX0pJVGVkKClcXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXFxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX21peGVkKHZvaWQgKmN0eClcXG4re1xcbitcXHR1MzIgX19hcmVuYSAqcGFnZSA9IGJwZl9hcmVuYV9hbGxvY19wYWdlcyhcXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XFxuK1xcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHI7XFxuK1xcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICpwO1xcbitcXG4rXFx0aWYgKCFwYWdlKVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdC8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqL1xcbitcXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoKHU2NClwYWdlKTtcXG4rXFx0aWYgKCFyLnApXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXHRpZiAoci50YWcgIT0gMHhiZWVmKVxcbitcXHRcXHRyZXR1cm4gMztcXG4rXFxuK1xcdHAgPSBhcmVuYV9wdHIoci5wKTtcXG4rXFx0KnAgPSAzO1xcbitcXHRpZiAoKnAgIT0gMylcXG4rXFx0XFx0cmV0dXJuIDQ7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcXCIpXFxuK19fbXNnKFxcXCJtZW1iZXIgJ2InIGhhcyB0eXBlIFBUUlxcXCIpXFxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VudGFnZ2VkX2ZhaWwodm9pZCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIHI7XFxuK1xcbitcXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQoMCk7XFxuK1xcbitcXHRyZXR1cm4gci5hID09IHIuYjtcXG4rfVxcbitcXG4rU0VDKFxcXCJzeXNjYWxsXFxcIilcXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcXG4rX19mYWlsdXJlIF9fbXNnKFxcXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcXCIpXFxuK19fbXNnKFxcXCJtZW1iZXIgJ2InIGhhcyB0eXBlIFBUUlxcXCIpXFxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KVxcbit7XFxuK1xcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gcjtcXG4rXFxuK1xcdHIgPSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbigwKTtcXG4rXFxuK1xcdHJldHVybiByLmEgPT0gci5iO1xcbit9XFxuK1xcbisjZWxzZVxcbitcXG4rU0VDKFxcXCJzb2NrZXRcXFwiKVxcbitfX2Rlc2NyaXB0aW9uKFxcXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0XFxcIilcXG4rX19za2lwKFxcXCJuZWVkcyBMTFZNIDIzXFxcIilcXG4rX19zdWNjZXNzXFxuK2ludCBkdW1teV90ZXN0KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKyNlbmRpZlxcbitcXG4rY2hhciBfbGljZW5zZVtdIFNFQyhcXFwibGljZW5zZVxcXCIpID0gXFxcIkdQTFxcXCI7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuY1xcbmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2V4Y2VwdGlvbnNfZmFpbC5jXFxuQEAgLTYwLDcgKzYwLDcgQEAgX19ub2lubGluZSBpbnQgZXhjZXB0aW9uX2NiX29rX2FyZ19zbWFsbChpbnQgYSlcXG4gXFxuIFNFQyhcXFwiP3RjXFxcIilcXG4gX19leGNlcHRpb25fY2IoZXhjZXB0aW9uX2NiX2JhZF9yZXRfdHlwZTEpXFxuLV9fZmFpbHVyZSBfX21zZyhcXFwiT25seSB2b2lkLCBzY2FsYXIsIG9yIGEgc2NhbGFyLW9ubHkgc3RydWN0L3VuaW9uIHVwIHRvIDE2IGJ5dGVzIGlzIHN1cHBvcnRlZC5cXFwiKVxcbitfX2ZhaWx1cmUgX19tc2coXFxcIk9ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnNcXFwiKVxcbiBpbnQgcmVqZWN0X2V4Y2VwdGlvbl9jYl90eXBlXzEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxcbiB7XFxuIFxcdGJwZl90aHJvdygwKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xcbmluZGV4IDgxNWYzNDJlYjRiMDUuLjY3MmEzYWFkZDljYjIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuY1xcbkBAIC03MzQsNCArNzM0LDUyIEBAIGludCBjaGVja19hcmVuYV9hcmdfcmV0KHZvaWQgKmN0eClcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKyNpZiBkZWZpbmVkKF9fY2xhbmdfbWFqb3JfXykgXFx1MDAyNlxcdTAwMjYgX19jbGFuZ19tYWpvcl9fIFxcdTAwM2U9IDIzXFxuK1xcbitzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHtcXG4rXFx0dTMyIF9fYXJlbmEgKmZpcnN0O1xcbitcXHR1MzIgX19hcmVuYSAqc2Vjb25kO1xcbit9O1xcbitcXG4rX193ZWFrIHN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgc3BsaXRfYXJlbmFfcGFnZSh1MzIgX19hcmVuYSAqcGFnZSlcXG4re1xcbitcXHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XFxuK1xcbitcXHRwYWlyLmZpcnN0ID0gcGFnZTtcXG4rXFx0cGFpci5zZWNvbmQgPSBwYWdlICsgMTtcXG4rXFxuK1xcdHJldHVybiBwYWlyO1xcbit9XFxuK1xcbitTRUMoXFxcInN5c2NhbGxcXFwiKVxcbitfX2xvYWRfaWZfSklUZWQoKVxcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcXG4raW50IGNoZWNrX2FyZW5hX3N0cnVjdF9yZXQodm9pZCAqY3R4KVxcbit7XFxuK1xcdHUzMiBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFxcdTAwMjZhcmVuYSwgTlVMTCwgMSwgTlVNQV9OT19OT0RFLCAwKTtcXG4rXFx0dTMyIHZvbGF0aWxlIF9fYXJlbmEgKmZpcnN0LCAqc2Vjb25kO1xcbitcXHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XFxuK1xcbitcXHRpZiAoIXBhZ2UpXFxuK1xcdFxcdHJldHVybiAxO1xcbitcXG4rXFx0cGFpciA9IHNwbGl0X2FyZW5hX3BhZ2UocGFnZSk7XFxuK1xcdGlmICghcGFpci5maXJzdCB8fCAhcGFpci5zZWNvbmQpXFxuK1xcdFxcdHJldHVybiAyO1xcbitcXG4rXFx0LyogQm90aCBoYWx2ZXMgb2YgdGhlIHBhaXIgbXVzdCBzdGlsbCBiZSB1c2FibGUgYXMgYXJlbmEgcG9pbnRlcnMuICovXFxuK1xcdGZpcnN0ID0gcGFpci5maXJzdDtcXG4rXFx0c2Vjb25kID0gcGFpci5zZWNvbmQ7XFxuK1xcdCpmaXJzdCA9IDE7XFxuK1xcdCpzZWNvbmQgPSAyO1xcbitcXHRpZiAoKmZpcnN0ICE9IDEpXFxuK1xcdFxcdHJldHVybiAzO1xcbitcXHRpZiAoKnNlY29uZCAhPSAyKVxcbitcXHRcXHRyZXR1cm4gNDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisjZW5kaWZcXG4rXFxuIGNoYXIgX2xpY2Vuc2VbXSBTRUMoXFxcImxpY2Vuc2VcXFwiKSA9IFxcXCJHUExcXFwiO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbmluZGV4IDg1MGNmNGY4MzBjNDguLjBlZjJjZTg3NWQ3MWQgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmNcXG5AQCAtOTgxLDYgKzk4MSw0OCBAQCBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKHU2NCB0YWcpXFxuIFxcdHJldHVybiByO1xcbiB9XFxuIFxcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYSh1NjQgYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSByID0geyAuYSA9ICh2b2lkICopYWRkciwgLmIgPSAodm9pZCAqKShhZGRyICsgNCkgfTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZCh1NjQgYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV9taXhlZCByID0geyAucCA9ICh2b2lkICopYWRkciwgLnRhZyA9IDB4YmVlZiB9O1xcbitcXG4rXFx0cmV0dXJuIHI7XFxuK31cXG4rXFxuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKHU2NCBhZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9IE5VTEwgfTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyB1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKHU2NCBhZGRyKVxcbit7XFxuK1xcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gciA9IHsgLmEgPSAodm9pZCAqKWFkZHIgfTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9uZXN0ZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKHU2NCB0YWcpXFxuK3tcXG4rXFx0c3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHIgPSB7IC5pbiA9IHsgLnAgPSBOVUxMIH0sIC50YWcgPSB0YWcgfTtcXG4rXFxuK1xcdHJldHVybiByO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXAodTY0IHYpXFxuK3tcXG4rXFx0c3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCByID0geyAubDEgPSB7IC5sMiA9IHsgLmwzID0geyAubDQgPSB7IC52ID0gdiB9IH0gfSB9IH07XFxuK1xcbitcXHRyZXR1cm4gcjtcXG4rfVxcbitcXG4gX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKVxcbiB7XFxuIFxcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2lpIHIgPSB7IC5hID0gYSwgLmIgPSBiIH07XFxuQEAgLTE1MzksNiArMTU4MSwxMiBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9pMTI4KVxcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcilcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsLCBLRl9GQVNUQ0FMTClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0cilcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQpXFxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZClcXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcClcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKVxcbiAjZW5kaWZcXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2JpZylcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG5pbmRleCA2NWU2OTNhZGE3MzY0Li5hMmU5ZTlmMzE4NGUyIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXFxuQEAgLTI2LDYgKzI2LDEyIEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmVmX2tmdW5jIHtcXG4gfTtcXG4gI2VuZGlmXFxuIFxcbisjaWYgX19oYXNfYXR0cmlidXRlKGJ0Zl90eXBlX3RhZylcXG4rI2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoXFxcImFyZW5hXFxcIikpKVxcbisjZWxzZVxcbisjZGVmaW5lIF9fYXJlbmFfdGFnXFxuKyNlbmRpZlxcbitcXG4gc3RydWN0IGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxO1xcbiBcXG4gc3RydWN0IHByb2dfdGVzdF9wYXNzMSB7XFxuQEAgLTcwLDYgKzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7XFx0LyogMTYgYnl0ZXM6IGNvbnRhaW5zIGEgcG9pbnRlciAqL1xcbiBcXHRfX3U2NCB0YWc7XFxuIH07XFxuIFxcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSB7XFx0LyogMTYgYnl0ZXM6IHR3byBhcmVuYSBwb2ludGVycyAqL1xcbitcXHR2b2lkIF9fYXJlbmFfdGFnICphO1xcbitcXHR2b2lkIF9fYXJlbmFfdGFnICpiO1xcbit9O1xcbitcXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQge1xcdC8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqL1xcbitcXHR2b2lkIF9fYXJlbmFfdGFnICpwO1xcbitcXHRfX3U2NCB0YWc7XFxuK307XFxuK1xcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCB7XFx0LyogMTYgYnl0ZXM6ICdiJyBsYWNrcyB0aGUgYXJlbmEgdGFnICovXFxuK1xcdHZvaWQgX19hcmVuYV90YWcgKmE7XFxuK1xcdHZvaWQgKmI7XFxuK307XFxuK1xcbit1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHtcXHQvKiA4IGJ5dGVzOiAnYicgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xcbitcXHR2b2lkIF9fYXJlbmFfdGFnICphO1xcbitcXHR2b2lkICpiO1xcbit9O1xcbitcXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfbmVzdGVkIHtcXHQvKiAxNiBieXRlczogdGhlIHBvaW50ZXIgaGlkZXMgb25lIGxldmVsIGRvd24gKi9cXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0dm9pZCAqcDtcXG4rXFx0fSBpbjtcXG4rXFx0X191NjQgdGFnO1xcbit9O1xcbitcXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCB7XFx0LyogOCBieXRlcywgYnV0IG5lc3RlZCBwYXN0IHRoZSA0LWxldmVsIHdhbGsgbGltaXQgKi9cXG4rXFx0c3RydWN0IHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0XFx0XFx0X191NjQgdjtcXG4rXFx0XFx0XFx0XFx0fSBsNDtcXG4rXFx0XFx0XFx0fSBsMztcXG4rXFx0XFx0fSBsMjtcXG4rXFx0fSBsMTtcXG4rfTtcXG4rXFxuIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2JpZyB7XFx0LyogMjQgYnl0ZXM6IHRvbyBsYXJnZSBmb3IgUjA6UjIgKi9cXG4gXFx0X191NjQgYTtcXG4gXFx0X191NjQgYjtcXG5AQCAtMTU5LDYgKzIwNCwxMiBAQCBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wYWlyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3BhaXIoX191NjQgYSwgX191NjQgYikgX19rc3ltO1xcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wYWlyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcXG4gc3RydWN0IHByb2dfdGVzdF9yZXRfaWkgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfaWkoaW50IGEsIGludCBiKSBfX2tzeW07XFxuIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIoX191NjQgdGFnKSBfX2tzeW07XFxuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07XFxuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKF9fdTY0IGFkZHIpIF9fa3N5bTtcXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfbWl4ZWQoX191NjQgYWRkcikgX19rc3ltO1xcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07XFxuK3VuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24oX191NjQgYWRkcikgX19rc3ltO1xcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXAoX191NjQgdikgX19rc3ltO1xcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKHZvaWQpIF9fa3N5bTtcXG4gX191NjQgYnBmX2tmdW5jX2NhbGxfc3RhY2tfYXJnKF9fdTY0IGEsIF9fdTY0IGIsIF9fdTY0IGMsIF9fdTY0IGQsXFxuIFxcdFxcdFxcdCAgICAgICBfX3U2NCBlLCBfX3U2NCBmLCBfX3U2NCBnLCBfX3U2NCBoLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0MzozNS43NjMwOTkzMjRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDIzMjA5NDc0NjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZlwiLFxuICAgIFwiYnRmX3R5cGVfaXNfYXJlbmFfcHRyXCIsXG4gICAgXCJidGZfcHJlcGFyZV9mdW5jX2FyZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IHJldHVybmluZyBzdHJ1Y3RzIG9yIHVuaW9ucyBieSB2YWx1ZSBmcm9tIGtmdW5jcyBhbmQgZ2xvYmFsIHN1YnByb2dyYW1zIGlmIHRoZXkgYXJlIGNvbXBvc2VkIG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIChwb2ludGVycyB3aXRoIHRoZSBgYnRmX3R5cGVfdGFnKFxcXCJhcmVuYVxcXCIpYCBhdHRyaWJ1dGUpLiBQcmV2aW91c2x5LCBvbmx5IHNjYWxhcnMgd2VyZSBhbGxvd2VkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHZlcmlmaWVyJ3MgdHlwZSBjaGVja2luZyBsb2dpYyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcgKGhhbmRsaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIGFyZW5hIHBvaW50ZXJzKS4gSXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSB0aGUgYGJwZigpYCBzeXNjYWxsIHdoZW4gbG9hZGluZyBCUEYgcHJvZ3JhbXMgdGhhdCBjYWxsIHN1Y2gga2Z1bmNzIG9yIHN1YnByb2dyYW1zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZjdlOGE4YTk1MDFlNWVhM2JjYTliOGUxMjJmZGM0ZWNjNTQ1ZTYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6NDM6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggODlkZWE2YjBiMDI0MS4uOTZiZjYzZDM0NDMyMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC01ODEsMjAgKzU4MSwyNyBAQCBhZ2FpbnN0IHRoZSBhcmVuYS4gTGFyZ2VyIGFjY2Vzc2VzIG11c3QgdmVyaWZ5IHRoZSByYW5nZSBleHBsaWNpdGx5LlxuIEEga2Z1bmMgbWF5IHJldHVybiBhIHNjYWxhciwgYSBwb2ludGVyLCBvciBhIHNtYWxsIHN0cnVjdCBvciB1bmlvbiBieVxuIHZhbHVlLiBBIHNjYWxhciBvciBwb2ludGVyIG9mIHVwIHRvIDggYnl0ZXMgaXMgcmV0dXJuZWQgaW4gUjAsIGFzIHVzdWFsLlxuIFxuLUEgc3RydWN0IG9yIHVuaW9uIHJldHVybmVkIGJ5IHZhbHVlIG11c3QgYmUgY29tcG9zZWQgb25seSBvZiBzY2FsYXJzXG4tKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtOyBhcnJheXMgb2Ygc2NhbGFycyBhcmVcbi1hbGxvd2VkIGFzIG1lbWJlcnMuIEl0cyBieXRlcyBhcmUgaGFuZGVkIGJhY2sgdG8gdGhlIHByb2dyYW0gYXMgdGhlIHJhd1xuLWNvbnRlbnRzIG9mIFIwIChhbmQgUjIpLCBzbyBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcbi1hbmQgZXNjYXBlIHRoZSB2ZXJpZmllcidzIHBvaW50ZXIgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLiBBIHN0cnVjdFxuLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXNcbi1vbmUgd2l0aCBhIGZsb2F0aW5nLXBvaW50IG1lbWJlciwgd2hpY2ggdGhlIEFCSSBtYXkgbm90IHJldHVybiBpbiBSMDpSMiBhdFxuLWFsbC5cbitBIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycyBhbmQgYXJlbmFcbitwb2ludGVycyAocmVjdXJzaXZlbHkpLCB3aGVyZSBhIHNjYWxhciBpcyBhbiBpbnRlZ2VyIG9yIGFuIGVudW0gYW5kIGFuIGFyZW5hXG4rcG9pbnRlciBpcyBvbmUgY2FycnlpbmcgdGhlIGBgYnRmX3R5cGVfdGFnKFwiYXJlbmFcIilgYCBhdHRyaWJ1dGU7IGFycmF5cyBvZlxuK2VpdGhlciBhcmUgYWxsb3dlZCBhcyBtZW1iZXJzLiBJdHMgYnl0ZXMgYXJlIGhhbmRlZCBiYWNrIHRvIHRoZSBwcm9ncmFtIGFzIHRoZVxuK3JhdyBjb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBtZW1iZXIgb2YgYW55IG90aGVyIHBvaW50ZXIgdHlwZSB3b3VsZCBiZVxuK2xhdW5kZXJlZCBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgdGhlIHZlcmlmaWVyJ3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZFxuK3JlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3Qgb3IgdW5pb24gd2l0aCBzdWNoIGEgbWVtYmVyIGlzIHRoZXJlZm9yZSByZWplY3RlZFxuK2F0IGxvYWQgdGltZSwgYW5kIHNvIGlzIG9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3RcbityZXR1cm4gaW4gUjA6UjIgYXQgYWxsLlxuK1xuK0FuIGFyZW5hIHBvaW50ZXIgbWVtYmVyIGlzIGhhbmRlZCBiYWNrIGFzIGEgc2NhbGFyIHRvbywgYnV0IG5vdGhpbmcgaXMgbG9zdCBieVxuK3RoYXQuIFRoZSBwcm9ncmFtIG11c3QgYGBjYXN0X2tlcm4oKWBgIHRoZSB2YWx1ZSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQsIGFuZCB0aGVcbit2ZXJpZmllciBhbGxvd3MgdGhhdCBjYXN0IG9uIGFueSBzY2FsYXIsIHNvIGEgbGF1bmRlcmVkIGFyZW5hIGFkZHJlc3MgZ2l2ZXMgdGhlXG4rcHJvZ3JhbSBubyByZWFjaCBpdCBkaWQgbm90IGFscmVhZHkgaGF2ZS4gVGhlIHJlc3VsdCBpcyBjb25maW5lZCB0byB0aGVcbitwcm9ncmFtJ3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuXG4gXG4gQSBrZnVuYyBtYXkgYWxzbyByZXR1cm4gYSB2YWx1ZSBsYXJnZXIgdGhhbiA4IGJ5dGVzIGFuZCB1cCB0byAxNiBieXRlcyAtLSBhXG4tc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZFxuLWluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNIHVzZXMgZm9yIHRoZSBCUEZcbi10YXJnZXQ6IHRoZSBmaXJzdCA4IGJ5dGVzIGluIFIwIGFuZCB0aGUgc2Vjb25kIDggYnl0ZXMgaW4gUjIuIEEgc3RydWN0IG9yXG4tdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLlxuK3N0cnVjdCBvciB1bmlvbiBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycywgb3IgYW4gYGBfX2ludDEyOGBgLiBTdWNoIGFcbit2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTVxuK3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLlxuK0Egc3RydWN0IG9yIHVuaW9uIG9mIDggYnl0ZXMgb3IgbGVzcyBpcyByZXR1cm5lZCBpbiBSMCBhbG9uZS5cbiBcbiA6OlxuIFxuQEAgLTYyMCwxMCArNjI3LDEwIEBAIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBKSVRlZCwgc2luY2UgdGhlIGludGVycHJldGVyIHByb3BhZ2F0ZXMgb25seSBSMCBvdXQgb2ZcbiBhIHN1YnByb2dyYW06IHdpdGhvdXQgYSBKSVQgdGhlIHJldHVybiB2YWx1ZSBzdGF5cyBpbiBSMCBhbG9uZSwgYW5kIGEgY2FsbGVyXG4gcmVhZGluZyBSMiBpcyByZWplY3RlZCBmb3IgcmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHJlZ2lzdGVyLiBBIGdsb2JhbFxuIHN1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW4gaXNvbGF0aW9uLCBzbyBpdHMgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIHJldHVybiBpc1xuLXJlc3RyaWN0ZWQgdG8gc2NhbGFycyBqdXN0IGxpa2UgYSBrZnVuYydzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkXG4taW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcyBub3QgY292ZXJlZDogaXRzIHJldHVyblxuLXZhbHVlIGlzIHRoZSBwcm9ncmFtJ3MgZXhpdCBjb2RlLCByZWFkIG91dCBvZiBSMCBhbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlclxuLWhhbGYgaXMgbmV2ZXIgbG9va2VkIGF0LlxuK3Jlc3RyaWN0ZWQgdG8gc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMganVzdCBsaWtlIGEga2Z1bmMnczsgYSBzdGF0aWNcbitzdWJwcm9ncmFtIGlzIHZlcmlmaWVkIGlubGluZSBhbmQgaGFzIG5vIHN1Y2ggcmVzdHJpY3Rpb24uIFRoZSBtYWluIHByb2dyYW0gaXNcbitub3QgY292ZXJlZDogaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgcHJvZ3JhbSdzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjBcbithbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlciBoYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC5cbiBcbiBBIGdsb2JhbCBzdWJwcm9ncmFtIG11c3QgbGVhdmUgYSBzY2FsYXIgaW4gKmV2ZXJ5KiByZWdpc3RlciBvZiB0aGUgcGFpciwgc29cbiBib3RoIGhhbHZlcyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaGF2ZSB0byBiZSBhc3NpZ25lZC4gTGVhdmluZyB0aGUgdXBwZXIgaGFsZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAwMDRiMDY3ODU1MjFjLi5hZTlmNjA2NTM5ZjQxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE0ODgsOCArMTQ4OCwxNSBAQCBpbnQgYnBmX2ptcF9vZmZzZXQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbiBzdHJ1Y3QgYnBmX2lhcnJheSAqYnBmX2luc25fc3VjY2Vzc29ycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaWR4KTtcbiB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzayk7XG4gYm9vbCBicGZfc3VicHJvZ19pc19nbG9iYWwoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpO1xuLWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyk7XG4rXG4rLyogS2luZHMgb2YgbWVtYmVyIGEgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIG1heSBiZSBjb21wb3NlZCBvZi4gKi9cbitlbnVtIGJ0Zl9tZW1iZXJfa2luZCB7XG4rXHRCVEZfTUVNQkVSX1NDQUxBUlx0PSBCSVQoMCksIC8qIGFuIGludCBvciBhbiBlbnVtICovXG4rXHRCVEZfTUVNQkVSX0FSRU5BX1BUUlx0PSBCSVQoMSksIC8qIGEgcG9pbnRlciBjYXJyeWluZyB0aGUgXCJhcmVuYVwiIHR5cGUgdGFnICovXG4rfTtcbitcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpO1xuIFxuIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpO1xuIGJvb2wgYnBmX2lzX3Rocm93X2tmdW5jKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idGYuaCBiL2luY2x1ZGUvbGludXgvYnRmLmhcbmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J0Zi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J0Zi5oXG5AQCAtMjM1LDYgKzIzNSw3IEBAIHN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlXG4gXHRcdFx0XHQgICAgdTMyIGZpZWxkX21hc2ssIHUzMiB2YWx1ZV9zaXplKTtcbiBpbnQgYnRmX2NoZWNrX2FuZF9maXh1cF9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjKTtcbiBib29sIGJ0Zl90eXBlX2lzX3ZvaWQoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTtcbitib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7XG4gczMyIGJ0Zl9maW5kX2J5X25hbWVfa2luZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGtpbmQpO1xuIHMzMiBicGZfZmluZF9idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgdTMyIGtpbmQsIHN0cnVjdCBidGYgKipidGZfcCk7XG4gc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDkxYjhjZTc3ZjY5OWEuLmY2ZDgyYThmZDYxN2IgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtMzUyMyw2ICszNTIzLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3R5cGVfdGFnX3dhbGsoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2Jvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxuK3tcbitcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtXHUwMDNldHlwZSk7IGJ0Zl90eXBlX2lzX21vZGlmaWVyKHQpO1xuK1x0ICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LVx1MDAzZXR5cGUpKSB7XG4rXHRcdGlmICghYnRmX3R5cGVfaXNfdHlwZV90YWcodCkgfHwgYnRmX3R5cGVfa2ZsYWcodCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghc3RyY21wKF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC1cdTAwM2VuYW1lX29mZiksIFwiYXJlbmFcIikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnRmX2ZpbmRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiBcdFx0XHQgdTMyIG9mZiwgaW50IHN6LCBzdHJ1Y3QgYnRmX2ZpZWxkX2luZm8gKmluZm8sIHUzMiBmaWVsZF9tYXNrKVxuIHtcbkBAIC03OTI3LDUxICs3OTQzLDE5IEBAIHN0YXRpYyBpbnQgYnRmX3NjYW5fZGVjbF90YWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLFxuLVx0XHRcdCAgICAgIHUzMiAqdGFncylcbitzdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxuIHtcbi1cdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVfdGFnX21hdGNoIGZ1bmNfdHlwZV90YWdzW10gPSB7XG4tXHRcdHsgXCJhcmVuYVwiLCBBUkdfVEFHX0FSRU5BIH0sXG4tXHR9O1xuLVx0c3RydWN0IGJ0Zl90eXBlX3RhZ193YWxrX2N0eCBjdHg7XG4tXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4tXHRpbnQgZXJyO1xuLVxuIFx0LyogRmluZCB0aGUgZmlyc3QgcG9pbnRlciB0eXBlIGluIHRoZSBjaGFpbi4gKi9cbi1cdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcyxcbi1cdCAqIHdoaWNoIG5laXRoZXIgTExWTSBub3IgR0NDIHN1cHBvcnQgYW55d2F5LlxuLVx0ICovXG4tXHRpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRjdHgudCA9IHQ7XG4tXHRlcnIgPSBidGZfdHlwZV90YWdfd2FsayhidGYsIFx1MDAyNmN0eCwgZnVuY190eXBlX3RhZ3MsXG4tXHRcdFx0XHRBUlJBWV9TSVpFKGZ1bmNfdHlwZV90YWdzKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGJwZl9sb2coXHUwMDI2ZW52LVx1MDAzZWxvZyxcbi1cdFx0XHRcImZ1bmN0aW9uIHNpZ25hdHVyZSBtZW1iZXIgaGFzIG11bHRpcGxlIHR5cGUgdGFnc1xcblwiKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbi1cdCp0YWdzIHw9IGN0eC5yZXM7XG4tXG4tXHRyZXR1cm4gMDtcbitcdGlmIChidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbitcdFx0KnRhZ3MgfD0gQVJHX1RBR19BUkVOQTtcbiB9XG4gXG4gLyogQ2hlY2sgd2hldGhlciB0aGUgdHlwZSBpcyBhIHZhbGlkIHJldHVybiB0eXBlLiAqL1xuIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgc3VicHJvZywgYm9vbCBpc19nbG9iYWwpXG4ge1xuLVx0dTMyIHRhZ3MgPSAwO1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZ0YWdzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4gXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuIFxuIFx0LypcbkBAIC03OTc5LDcgKzc5NjMsNyBAQCBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidFxuIFx0ICogR2VuZXJhbCBhcmVuYSB2YXJpYWJsZXMgYXJlIG5vdCBhbGxvd2VkLCBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byByZXR1cm4gYnkgdmFsdWVcbiBcdCAqIGEgdmFyaWFibGUgdGhhdCdzIG9uIHRoZSBoZWFwIGluIHRoZSBmaXJzdCBwbGFjZS5cbiBcdCAqL1xuLVx0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2ICh0YWdzIFx1MDAyNiBBUkdfVEFHX0FSRU5BKSBcdTAwMjZcdTAwMjYgYnRmX3R5cGVfaXNfcHRyKHQpKVxuK1x0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIFdlIGFsd2F5cyBhY2NlcHQgdm9pZCBvciBzY2FsYXJzLiAqL1xuQEAgLTc5ODksMTMgKzc5NzMsMjIgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRcbiBcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkgXHUwMDI2XHUwMDI2IHQtXHUwMDNlc2l6ZSBcdTAwM2M9IDE2KSB7XG4gXHRcdC8qXG4gXHRcdCAqIEEgZ2xvYmFsIGZ1bmN0aW9uJ3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZVxuLVx0XHQgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWxcbi1cdFx0ICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZFxuLVx0XHQgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi5cbitcdFx0ICogc2NhbGFyIHBhaXIsIHNvIGEgcG9pbnRlciBtZW1iZXIgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYVxuK1x0XHQgKiBzY2FsYXIgYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIE9ubHlcbitcdFx0ICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzXG4rXHRcdCAqIG5vIHByb3ZlbmFuY2UgdG8gbG9zZSwgc2luY2UgYSBwcm9ncmFtIG1heSBhbHJlYWR5IGRlcml2ZSBvbmVcbitcdFx0ICogZnJvbSBhbnkgc2NhbGFyIHdpdGggYWRkcl9zcGFjZV9jYXN0KCksIHdoaWNoIGNvbmZpbmVzIHRoZVxuK1x0XHQgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc29cbitcdFx0ICogaXRzIGNhbGxlciByZWNlaXZlcyB0aGUgcmVhbCByZWdpc3RlciBzdGF0ZSBhbmQgYW55IG1lbWJlciBpc1xuK1x0XHQgKiBmaW5lLlxuIFx0XHQgKi9cbiBcdFx0Ym9vbCBsb2NhbF9mdW5jID0gc3VicHJvZyBcdTAwMjZcdTAwMjYgIWlzX2dsb2JhbDtcbitcdFx0dTMyIG1lbWJlcl9raW5kcyA9IEJURl9NRU1CRVJfU0NBTEFSO1xuK1xuK1x0XHRpZiAoc3VicHJvZylcbitcdFx0XHRtZW1iZXJfa2luZHMgfD0gQlRGX01FTUJFUl9BUkVOQV9QVFI7XG4gXG4tXHRcdGlmIChsb2NhbF9mdW5jIHx8IGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIHQsIDApKVxuK1x0XHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTgwOTEsNyArODA4NCw4IEBAIGludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHRcdGlmIChpc19nbG9iYWwpIHtcbiBcdFx0XHRicGZfbG9nKGxvZyxcbiBcdFx0XHRcdFwiR2xvYmFsIGZ1bmN0aW9uICVzKCkgaGFzIHVuc3VwcG9ydGVkIHJldHVybiB0eXBlLiBcIlxuLVx0XHRcdFx0XCJPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLlxcblwiLFxuK1x0XHRcdFx0XCJPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiBcIlxuK1x0XHRcdFx0XCJzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXFxuXCIsXG4gXHRcdFx0XHR0bmFtZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycjtcbkBAIC04MTA2LDkgKzgxMDAsNyBAQCBpbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCBcdTAwMjZ0YWdzKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRidGZfc2Nhbl90eXBlX3RhZ3MoYnRmLCBhcmdzW2ldLnR5cGUsIFx1MDAyNnRhZ3MpO1xuIFxuIFx0XHR0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBhcmdzW2ldLnR5cGUpO1xuIFx0XHR3aGlsZSAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li45YTM2ODA4MTM2YzlhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC05OTk1LDkgKzk5OTUsMTQgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFyZXR1cm5zX3ZvaWQpIHtcbiBcdFx0XHRucmVncyA9IGJwZl9yZXRfcmVnX3BhaXIoZW52LCBzdWJwcm9nKSA/IDIgOiAxO1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4tXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbitcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzWzBdKTtcbiBcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnJlZ3M7IGkrKykge1xuK1x0XHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dLCBOVUxMLFxuK1x0XHRcdFx0XHRcdCAgIEJQRl9ESUFHX01PRF9XUklURSk7XG4rXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbitcdFx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcbkBAIC0xMDQwMywxMCArMTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGVcbiBcdFx0ICogcmV0dXJuIHJlZ2lzdGVyKHMpXG4gXHRcdCAqL1xuLVx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkrKylcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV07XG4tXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkrKykge1xuK1x0XHRcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xuK1xuK1x0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbcmVnbm9dLFxuK1x0XHRcdFx0XHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xuK1x0XHRcdGNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSA9IGNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXTtcbitcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcbkBAIC0xMTM0MiwxNSArMTEzNTEsMzMgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcbiAvKlxuICAqIE1hcmsgdGhlIHJlZ2lzdGVyKHMpIGhvbGRpbmcgYSBAc2l6ZSBieXRlIGtmdW5jIHJldHVybiB2YWx1ZSBhcyB1bmtub3duXG4tICogc2NhbGFycy4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlciBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS5cbisgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlclxuKyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LlxuKyAqXG4rICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlXG4rICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdFxuKyAqIHNjb3BlIGlzIHdoYXQgY2FycmllcyBpdHMgcHJlLWNhbGwgdmFsdWUgaW50byB0aGUgaGlzdG9yeS4gQSBzY29wZSB0cmFja3MgYVxuKyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZlxuKyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJ3Mgc2NvcGUgb3BlbiBmb3JcbisgKiB0aGUgY2FsbGVyIHRvIGNsb3NlLCBzbyBhIGxhdGVyIHdyaXRlIHRvIFIwIHN0aWxsIGxhbmRzIGluIGl0LlxuICAqL1xuLXN0YXRpYyB2b2lkIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSlcbitzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKVxuIHtcbiBcdHUzMiBpLCBucmVncyA9IHJldF9yZWdzX2NudChzaXplKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4rXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmV0X3JlZ3NbMF0pO1xuK1x0aWYgKG5yZWdzID09IDEpXG4rXHRcdHJldHVybiBucmVncztcbitcbitcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yZWdzOyBpKyspIHtcbitcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7XG4rXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdH1cbitcbitcdHJldHVybiBucmVncztcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYWNxdWlyZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG5AQCAtMTE2MTksMTAgKzExNjQ2LDMzIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChjb25zdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsIHUzMiBhcmdfXG4gXHRyZXR1cm4gYXJnbiBcdTAwM2M9IGFyZ19pZHg7XG4gfVxuIFxuLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovXG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKVxuKyNkZWZpbmUgQlRGX01FTUJFUl9NQVhfREVQVEhcdDRcbisjZGVmaW5lIEJURl9NRU1CRVJfUEFUSF9MRU5cdDY0XG4rXG4rc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCB7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyW0JURl9NRU1CRVJfTUFYX0RFUFRIXTtcbitcdGludCBkZXB0aDtcbitcdGJvb2wgdG9vX2RlZXA7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBidGZfbWVtYmVyX2tpbmRfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbitcdFx0XHRcdCAgICB1MzIgbWVtYmVyX2tpbmRzKVxuK3tcbitcdGlmICgobWVtYmVyX2tpbmRzIFx1MDAyNiBCVEZfTUVNQkVSX1NDQUxBUikgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoKG1lbWJlcl9raW5kcyBcdTAwMjYgQlRGX01FTUJFUl9BUkVOQV9QVFIpIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpblxuKyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5XG4rICogbWVtYmVyIGNvdW50cyBhcyBpdHMgZWxlbWVudCB0eXBlLlxuKyAqL1xuK3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzLCBpbnQgcmVjLFxuK1x0XHRcdFx0ICAgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcbkBAIC0xMTYzNiwyNyArMTE2ODYsNjUgQEAgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QobWVtYmVyX3R5cGUpKSB7XG4tXHRcdFx0aWYgKHJlYyBcdTAwM2U9IDMpIHtcbitcdFx0XHRpZiAocmVjIFx1MDAzZT0gQlRGX01FTUJFUl9NQVhfREVQVEggLSAxKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXG5cIik7XG4rXHRcdFx0XHRpZiAocGF0aClcbitcdFx0XHRcdFx0cGF0aC1cdTAwM2V0b29fZGVlcCA9IHRydWU7XG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyArIDEpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGlmICghYnRmX3N0cnVjdF9tZW1iZXJfd2FsayhlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcyxcbitcdFx0XHRcdFx0XHQgICAgcmVjICsgMSwgcGF0aCkpXG4rXHRcdFx0XHRnb3RvIGJhZF9wYXRoO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcbiBcdFx0XHRhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7XG4gXHRcdFx0aWYgKCFhcnJheS1cdTAwM2VuZWxlbXMpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4gXHRcdFx0bWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LVx1MDAzZXR5cGUsIE5VTEwpO1xuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihtZW1iZXJfdHlwZSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRpZiAoIWJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcykpXG4rXHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4rXG4rYmFkX21lbWJlcjpcbitcdGlmIChwYXRoKVxuK1x0XHRwYXRoLVx1MDAzZWRlcHRoID0gcmVjICsgMTtcbitiYWRfcGF0aDpcbitcdGlmIChwYXRoIFx1MDAyNlx1MDAyNiBwYXRoLVx1MDAzZWRlcHRoKVxuK1x0XHRwYXRoLVx1MDAzZW1lbWJlcltyZWNdID0gbWVtYmVyO1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpXG4re1xuK1x0cmV0dXJuIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBidGYsIHQsIG1lbWJlcl9raW5kcywgMCwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbit7XG4rXHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBidGZfbWVtYmVyX3BhdGhfc3RyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aCxcbitcdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbit7XG4rXHRzaXplX3QgbGVuID0gMDtcbitcdGludCBpO1xuK1xuK1x0YnVmWzBdID0gJ1xcMCc7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXRoLVx1MDAzZWRlcHRoOyBpKyspIHtcbitcdFx0Y29uc3QgY2hhciAqbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHBhdGgtXHUwMDNlbWVtYmVyW2ldLVx1MDAzZW5hbWVfb2ZmKTtcbitcbitcdFx0aWYgKCFuYW1lIHx8ICFuYW1lWzBdKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX3N6IC0gbGVuLCBcIiVzJXNcIiwgbGVuID8gXCIuXCIgOiBcIlwiLCBuYW1lKTtcbitcdH1cbiB9XG4gXG4gZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuQEAgLTEyMDM5LDcgKzEyMTI3LDcgQEAgZ2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcbiBcdFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcdTAwMjZcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcbitcdFx0ICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90KSkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvIHZvaWQsIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxuXCIsXG4gXHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTIwNTUsNyArMTIxNDMsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHQgKiBzY2FsYXJzLiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZCBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4rXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxcblwiLFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEzMTExLDcgKzEzMTk5LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4rXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90KSkge1xuIFx0XHRcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7XG4gXHRcdFx0XHRjb25zdCBjaGFyICpleHBlY3RlZF90eXBlO1xuIFxuQEAgLTEzNjUzLDcgKzEzNzQxLDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdcbiBcbiBcdFx0c3RydWN0X21ldGEgPSBidGZfZmluZF9zdHJ1Y3RfbWV0YShyZXRfYnRmLCByZXRfYnRmX2lkKTtcbiBcdFx0aWYgKGlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpKSB7XG4tXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QsIDApKSB7XG4rXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJicGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG5AQCAtMTM3NjcsNyArMTM4NTUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDtcbiBcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4tXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xuK1x0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZCwgcmV0X25yZWdzID0gMTtcbiBcdHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYztcbiBcdHN0cnVjdCBidGYgKmRlc2NfYnRmO1xuIFx0aW50IGlkO1xuQEAgLTE0MDIxLDI1ICsxNDEwOSw1OSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0fVxuIFxuIFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xuLVx0XHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbitcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG4gXHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbiBcdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuIFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHtcbitcdFx0c3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCBwYXRoID0ge307XG4rXHRcdGNvbnN0IGNoYXIgKm1lbWJlcl9ub3RlID0gXCJcIjtcbitcbiBcdFx0LypcbiBcdFx0ICogVGhlIHJldHVybmVkIHN0cnVjdCBjb21lcyBiYWNrIGFzIHJhdyByZWdpc3RlciBiaXRzIG1vZGVsZWRcbi1cdFx0ICogYXMgYW4gdW5rbm93biBzY2FsYXIsIHNvIGl0IG11c3QgY29udGFpbiBvbmx5IHNjYWxhcnM6XG4tXHRcdCAqIG90aGVyd2lzZSBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcbi1cdFx0ICogYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuXG4rXHRcdCAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZFxuK1x0XHQgKiBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLlxuK1x0XHQgKiBPbmx5IHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGFyZSBhbGxvd2VkOiBhbiBhcmVuYSBwb2ludGVyXG4rXHRcdCAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmVcbitcdFx0ICogb25lIGZyb20gYW55IHNjYWxhciB3aXRoIGFkZHJfc3BhY2VfY2FzdCgpLCB3aGljaCBjb25maW5lcyB0aGVcbitcdFx0ICogcmVzdWx0IHRvIHRoZSBhcmVuYS5cbiBcdFx0ICovXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGRlc2NfYnRmLCB0LCAwKSkge1xuK1x0XHRpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCxcbitcdFx0XHRcdFx0ICAgIEJURl9NRU1CRVJfU0NBTEFSIHwgQlRGX01FTUJFUl9BUkVOQV9QVFIsIDAsIFx1MDAyNnBhdGgpKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsXG4tXHRcdFx0XHRcImtlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcXG5cIixcbitcdFx0XHRcdFwia2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcblwiLFxuIFx0XHRcdFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXG4gXHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpKTtcbitcdFx0XHRpZiAocGF0aC50b29fZGVlcCkge1xuK1x0XHRcdFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXG4rXHRcdFx0XHRcdGVudiwgXCIgSXQgbmVzdHMgc3RydWN0cyBtb3JlIHRoYW4gJWQgbGV2ZWxzIGRlZXAuXCIsXG4rXHRcdFx0XHRcdEJURl9NRU1CRVJfTUFYX0RFUFRIKTtcbitcdFx0XHR9IGVsc2UgaWYgKHBhdGguZGVwdGgpIHtcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBwYXRoLm1lbWJlcltwYXRoLmRlcHRoIC0gMV07XG4rXHRcdFx0XHRjaGFyIGJhZF9uYW1lW0JURl9NRU1CRVJfUEFUSF9MRU5dO1xuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpiYWRfdHlwZTtcbitcbitcdFx0XHRcdGJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsIFx1MDAyNnBhdGgsIGJhZF9uYW1lLCBzaXplb2YoYmFkX25hbWUpKTtcbitcdFx0XHRcdGJhZF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGJhZC1cdTAwM2V0eXBlLCBOVUxMKTtcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIm1lbWJlciAnJXMnIGhhcyB0eXBlICVzXFxuXCIsIGJhZF9uYW1lLFxuK1x0XHRcdFx0XHRidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbitcdFx0XHRcdG1lbWJlcl9ub3RlID0gYnBmX2RpYWdfZm10KFxuK1x0XHRcdFx0XHRlbnYsXG4rXHRcdFx0XHRcdFwiIEl0cyBtZW1iZXIgJyVzJyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuXCIsXG4rXHRcdFx0XHRcdGJhZF9uYW1lLCBidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbitcdFx0XHR9XG4rXHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4rXHRcdFx0XHRlbnYsIGluc25faWR4LCBcInVuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZVwiLFxuK1x0XHRcdFx0XCJDYWxsIGEga2VybmVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmx5IHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnMgYnkgdmFsdWUuXCIsXG4rXHRcdFx0XHRcIiVzKCkgcmV0dXJucyAlcyAlcyBieSB2YWx1ZS4lcyBcIlxuK1x0XHRcdFx0XCJPbmx5IGtmdW5jcyByZXR1cm5pbmcgc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycywgb3IgXCJcbitcdFx0XHRcdFwic3RydWN0dXJlcyBjb21wb3NlZCBvZiBzY2FsYXIgdmFsdWVzIG9yIGFyZW5hIHBvaW50ZXJzIGFyZSBcIlxuK1x0XHRcdFx0XCJzdXBwb3J0ZWQuXCIsXG4rXHRcdFx0XHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcbitcdFx0XHRcdGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC1cdTAwM2VuYW1lX29mZiksIG1lbWJlcl9ub3RlKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuLVx0XHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbitcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuIFx0XHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnB0cl90eXBlX2lkKTtcbiBcdFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFx1MDAyNm1ldGEsIHJlZ3MsIGluc25fYXV4LCBwdHJfdHlwZSwgZGVzY19idGYpO1xuQEAgLTE0MTcwLDcgKzE0MjkyLDggQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdCAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlXG4gXHQgKiBpdGVyYXRvciBwYXRoJ3MgZGlhZ25vc3RpYyBwb3NpdGlvbi5cbiBcdCAqL1xuLVx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuK1x0aWYgKHJldF9ucmVncyA9PSAxKVxuK1x0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4gXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jXG5AQCAtMSwxMSArMSw1MyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFwiYWdncmVnYXRlX3JldF9mdW5jLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJhZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLnNrZWwuaFwiXG4rXG4rc3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKVxuK3tcbitcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmLCAqbW9kdWxlX2J0ZiA9IE5VTEw7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4rXHRib29sIHRhZ2dlZCA9IGZhbHNlO1xuK1x0X19zMzIgaWQ7XG4rXG4rXHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuK1x0aWYgKCF2bWxpbnV4X2J0ZilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKFwiYnBmX3Rlc3Rtb2RcIiwgdm1saW51eF9idGYpO1xuK1x0aWYgKCFtb2R1bGVfYnRmKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIHByb2dfdGVzdF9yZXRfYXJlbmE6OmEgaXMgJ3ZvaWQgX19hcmVuYV90YWcgKic6IFBUUiAtXHUwMDNlIFRZUEVfVEFHIC1cdTAwM2Ugdm9pZCAqL1xuK1x0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKG1vZHVsZV9idGYsIFwicHJvZ190ZXN0X3JldF9hcmVuYVwiLCBCVEZfS0lORF9TVFJVQ1QpO1xuK1x0aWYgKGlkIFx1MDAzYz0gMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR0ID0gYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIGJ0Zl9tZW1iZXJzKGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCBpZCkpWzBdLnR5cGUpO1xuK1x0aWYgKCF0IHx8ICFidGZfaXNfcHRyKHQpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgdC1cdTAwM2V0eXBlKTtcbitcdHRhZ2dlZCA9IHQgXHUwMDI2XHUwMDI2IGJ0Zl9pc190eXBlX3RhZyh0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICFzdHJjbXAoYnRmX19uYW1lX2J5X29mZnNldChtb2R1bGVfYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSwgXCJhcmVuYVwiKTtcbitcbitvdXQ6XG4rXHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XG4rXHRidGZfX2ZyZWUodm1saW51eF9idGYpO1xuK1xuK1x0cmV0dXJuIHRhZ2dlZDtcbit9XG4gXG4gdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZClcbiB7XG4gXHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTtcbiBcdFJVTl9URVNUUyhhZ2dyZWdhdGVfcmV0X2tmdW5jKTtcbitcbitcdGlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpXG4rXHRcdFJVTl9URVNUUyhhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hKTtcbitcdGVsc2VcbitcdFx0dGVzdF9fc2tpcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbmluZGV4IDZmNjZmYzgyMmNlZGUuLmYwMDc3ZDk1MWEyNWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuIHR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjggdTEyODtcbkBAIC0yMzQsNCArMjM1LDE0OSBAQCBfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF91bmlvbl9wdHJfZmFpbCh2b2lkKVxuIFxuICNlbmRpZlxuIFxuKy8qXG4rICogZ2NjIHJldHVybnMgYSBieS12YWx1ZSBzdHJ1Y3QgdGhyb3VnaCBhIGhpZGRlbiBwb2ludGVyLCBhbmQgZW1pdHMgdGhlXG4rICogJ3IwID0gcjEnIHJldHVybmluZyBpdCBhZnRlciB0aGUgX19uYWtlZCBib2R5J3MgZXhpdCwgbGVhdmluZyB0aGVcbisgKiBzdWJwcm9ncmFtIGZhbGxpbmcgdGhyb3VnaC4gQnVpbGQgdGhlc2Ugd2l0aCBjbGFuZyBvbmx5LlxuKyAqL1xuKyNpZiBkZWZpbmVkKF9fY2xhbmdfXylcbitcbitzdHJ1Y3QgYXJlbmFfcGFpciB7XG4rXHR2b2lkIF9fYXJlbmEgKmxvO1xuK1x0dm9pZCBfX2FyZW5hICpoaTtcbit9O1xuK1xuK3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHtcbitcdHZvaWQgX19hcmVuYSAqcDtcbitcdF9fdTY0IHg7XG4rfTtcbitcbitzdHJ1Y3QgYXJlbmFfYXJyYXkge1xuK1x0dm9pZCBfX2FyZW5hICpwWzJdO1xuK307XG4rXG4rc3RydWN0IGFyZW5hX3NpbmdsZSB7XG4rXHR2b2lkIF9fYXJlbmEgKnA7XG4rfTtcbitcbit1bmlvbiBhcmVuYV91cGFpciB7XG4rXHR2b2lkIF9fYXJlbmEgKnA7XG4rXHRfX3U2NCBoYWx2ZXNbMl07XG4rfTtcbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJyMiA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0KTtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX2xvYWRfaWZfSklUZWQoKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3BhaXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9wYWlyXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3BhaXIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJyMiA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0KTtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX2xvYWRfaWZfSklUZWQoKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FuZF9zY2FsYXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9hcnJheSBnbG9iYWxfcmV0X2FyZW5hX2FycmF5KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjAgPSAwO1wiXG4rXHRcInIyID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQpO1xuK31cbitcbitTRUMoXCJ0Y1wiKVxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfYXJyYXkodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9hcnJheV07XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hcnJheSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQpO1xuK31cbitcbitTRUMoXCJ0Y1wiKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3NpbmdsZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZV07XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9zaW5nbGUpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHVuaW9uIGFyZW5hX3VwYWlyIGdsb2JhbF9yZXRfYXJlbmFfdW5pb24odm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMCA9IDA7XCJcbitcdFwicjIgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdCk7XG4rfVxuK1xuK1NFQyhcInRjXCIpXG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV91bmlvbih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5lOWM4MmRmOGVmYjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuQEAgLTE4LDYgKzE4LDggQEAgdm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXG4gXHQ6IFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOCksXG4gXHQgIFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKSxcbiBcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKSxcbitcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKSxcbitcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCksXG4gXHQgIFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKSxcbiBcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKSk7XG4gfVxuQEAgLTcxLDcgKzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gXG4gU0VDKFwidGNcIilcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuLV9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcIilcbitfX21zZyhcIm1lbWJlciAncCcgaGFzIHR5cGUgUFRSXCIpXG4gX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtODQsNiArODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rU0VDKFwidGNcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ2luLnAnIGhhcyB0eXBlIFBUUlwiKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfbmVzdGVkX3B0cl9mYWlsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjEgPSAwO1wiXG4rXHRcImNhbGwgJVticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWRdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInRjXCIpXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbitfX2ZhaWx1cmUgX19tc2coXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcIilcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX3Rvb19kZWVwX2ZhaWwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMSA9IDA7XCJcbitcdFwiY2FsbCAlW2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXBdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBTRUMoXCJ0Y1wiKVxuIF9fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiUjIgIXJlYWRfb2tcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2Rcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmNcbkBAIC0wLDAgKzEsMTI5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCJcbitcbisjaWYgZGVmaW5lZChfX2NsYW5nX21ham9yX18pIFx1MDAyNlx1MDAyNiBfX2NsYW5nX21ham9yX18gXHUwMDNlPSAyM1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbisvKlxuKyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2VcbisgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmXG4rICogcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVyIGRvaW5nIGl0LlxuKyAqL1xuKyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpXG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSh2b2lkICpjdHgpXG4re1xuK1x0dTMyIHZvbGF0aWxlIF9fYXJlbmEgKnBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqYSwgKmI7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSByO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEJvdGggaGFsdmVzIGNvbWUgYmFjayBpbiBSMDpSMiwgcG9pbnRpbmcgYXQgcGFnZSBhbmQgcGFnZSArIDQuICovXG4rXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoKHU2NClwYWdlKTtcbitcdGlmICghci5hIHx8ICFyLmIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0YSA9IGFyZW5hX3B0cihyLmEpO1xuK1x0YiA9IGFyZW5hX3B0cihyLmIpO1xuK1x0KmEgPSAxO1xuK1x0KmIgPSAyO1xuK1x0aWYgKCphICE9IDEpXG4rXHRcdHJldHVybiAzO1xuK1x0aWYgKCpiICE9IDIpXG4rXHRcdHJldHVybiA0O1xuK1xuK1x0LyogVGhlIGhhbHZlcyBhcmUgdGhlIGZpcnN0IHR3byBzbG90cyBvZiB0aGUgcGFnZSB0aGUgcHJvZ3JhbSBhbGxvY2F0ZWQuICovXG4rXHRwYWdlWzBdID0gNztcbitcdGlmICgqYSAhPSA3KVxuK1x0XHRyZXR1cm4gNTtcbitcdHBhZ2VbMV0gPSA5O1xuK1x0aWYgKCpiICE9IDkpXG4rXHRcdHJldHVybiA2O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfbWl4ZWQodm9pZCAqY3R4KVxuK3tcbitcdHUzMiBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgcjtcbitcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICpwO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqL1xuK1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKCh1NjQpcGFnZSk7XG4rXHRpZiAoIXIucClcbitcdFx0cmV0dXJuIDI7XG4rXHRpZiAoci50YWcgIT0gMHhiZWVmKVxuK1x0XHRyZXR1cm4gMztcbitcbitcdHAgPSBhcmVuYV9wdHIoci5wKTtcbitcdCpwID0gMztcbitcdGlmICgqcCAhPSAzKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1wiKVxuK19fbXNnKFwibWVtYmVyICdiJyBoYXMgdHlwZSBQVFJcIilcbitpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV91bnRhZ2dlZF9mYWlsKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByO1xuK1xuK1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKDApO1xuK1xuK1x0cmV0dXJuIHIuYSA9PSByLmI7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ2InIGhhcyB0eXBlIFBUUlwiKVxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KVxuK3tcbitcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gcjtcbitcbitcdHIgPSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbigwKTtcbitcbitcdHJldHVybiByLmEgPT0gci5iO1xuK31cbitcbisjZWxzZVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0XCIpXG4rX19za2lwKFwibmVlZHMgTExWTSAyM1wiKVxuK19fc3VjY2Vzc1xuK2ludCBkdW1teV90ZXN0KHZvaWQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuY1xuQEAgLTYwLDcgKzYwLDcgQEAgX19ub2lubGluZSBpbnQgZXhjZXB0aW9uX2NiX29rX2FyZ19zbWFsbChpbnQgYSlcbiBcbiBTRUMoXCI/dGNcIilcbiBfX2V4Y2VwdGlvbl9jYihleGNlcHRpb25fY2JfYmFkX3JldF90eXBlMSlcbi1fX2ZhaWx1cmUgX19tc2coXCJPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLlwiKVxuK19fZmFpbHVyZSBfX21zZyhcIk9ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnNcIilcbiBpbnQgcmVqZWN0X2V4Y2VwdGlvbl9jYl90eXBlXzEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIHtcbiBcdGJwZl90aHJvdygwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5pbmRleCA4MTVmMzQyZWI0YjA1Li42NzJhM2FhZGQ5Y2IyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5AQCAtNzM0LDQgKzczNCw1MiBAQCBpbnQgY2hlY2tfYXJlbmFfYXJnX3JldCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rI2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSBcdTAwMjZcdTAwMjYgX19jbGFuZ19tYWpvcl9fIFx1MDAzZT0gMjNcbitcbitzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHtcbitcdHUzMiBfX2FyZW5hICpmaXJzdDtcbitcdHUzMiBfX2FyZW5hICpzZWNvbmQ7XG4rfTtcbitcbitfX3dlYWsgc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBzcGxpdF9hcmVuYV9wYWdlKHUzMiBfX2FyZW5hICpwYWdlKVxuK3tcbitcdHN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgcGFpcjtcbitcbitcdHBhaXIuZmlyc3QgPSBwYWdlO1xuK1x0cGFpci5zZWNvbmQgPSBwYWdlICsgMTtcbitcbitcdHJldHVybiBwYWlyO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpXG4re1xuK1x0dTMyIF9fYXJlbmEgKnBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7XG4rXHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XG4rXG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0cGFpciA9IHNwbGl0X2FyZW5hX3BhZ2UocGFnZSk7XG4rXHRpZiAoIXBhaXIuZmlyc3QgfHwgIXBhaXIuc2Vjb25kKVxuK1x0XHRyZXR1cm4gMjtcbitcbitcdC8qIEJvdGggaGFsdmVzIG9mIHRoZSBwYWlyIG11c3Qgc3RpbGwgYmUgdXNhYmxlIGFzIGFyZW5hIHBvaW50ZXJzLiAqL1xuK1x0Zmlyc3QgPSBwYWlyLmZpcnN0O1xuK1x0c2Vjb25kID0gcGFpci5zZWNvbmQ7XG4rXHQqZmlyc3QgPSAxO1xuK1x0KnNlY29uZCA9IDI7XG4rXHRpZiAoKmZpcnN0ICE9IDEpXG4rXHRcdHJldHVybiAzO1xuK1x0aWYgKCpzZWNvbmQgIT0gMilcbitcdFx0cmV0dXJuIDQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCA4NTBjZjRmODMwYzQ4Li4wZWYyY2U4NzVkNzFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTk4MSw2ICs5ODEsNDggQEAgX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfcHRyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0cih1NjQgdGFnKVxuIFx0cmV0dXJuIHI7XG4gfVxuIFxuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKHU2NCBhZGRyKVxuK3tcbitcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9ICh2b2lkICopKGFkZHIgKyA0KSB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKHU2NCBhZGRyKVxuK3tcbitcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHIgPSB7IC5wID0gKHZvaWQgKilhZGRyLCAudGFnID0gMHhiZWVmIH07XG4rXG4rXHRyZXR1cm4gcjtcbit9XG4rXG4rX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQodTY0IGFkZHIpXG4re1xuK1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gTlVMTCB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24odTY0IGFkZHIpXG4re1xuK1x0dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByID0geyAuYSA9ICh2b2lkICopYWRkciB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQodTY0IHRhZylcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9uZXN0ZWQgciA9IHsgLmluID0geyAucCA9IE5VTEwgfSwgLnRhZyA9IHRhZyB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCh1NjQgdilcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHIgPSB7IC5sMSA9IHsgLmwyID0geyAubDMgPSB7IC5sNCA9IHsgLnYgPSB2IH0gfSB9IH0gfTtcbitcbitcdHJldHVybiByO1xuK31cbitcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpXG4ge1xuIFx0c3RydWN0IHByb2dfdGVzdF9yZXRfaWkgciA9IHsgLmEgPSBhLCAuYiA9IGIgfTtcbkBAIC0xNTM5LDYgKzE1ODEsMTIgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwsIEtGX0ZBU1RDQUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKVxuICNlbmRpZlxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IDY1ZTY5M2FkYTczNjQuLmEyZTllOWYzMTg0ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMjYsNiArMjYsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMge1xuIH07XG4gI2VuZGlmXG4gXG4rI2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpXG4rI2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoXCJhcmVuYVwiKSkpXG4rI2Vsc2VcbisjZGVmaW5lIF9fYXJlbmFfdGFnXG4rI2VuZGlmXG4rXG4gc3RydWN0IGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxO1xuIFxuIHN0cnVjdCBwcm9nX3Rlc3RfcGFzczEge1xuQEAgLTcwLDYgKzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7XHQvKiAxNiBieXRlczogY29udGFpbnMgYSBwb2ludGVyICovXG4gXHRfX3U2NCB0YWc7XG4gfTtcbiBcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSB7XHQvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovXG4rXHR2b2lkIF9fYXJlbmFfdGFnICphO1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqYjtcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHtcdC8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqL1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqcDtcbitcdF9fdTY0IHRhZztcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIHtcdC8qIDE2IGJ5dGVzOiAnYicgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqYTtcbitcdHZvaWQgKmI7XG4rfTtcbitcbit1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHtcdC8qIDggYnl0ZXM6ICdiJyBsYWNrcyB0aGUgYXJlbmEgdGFnICovXG4rXHR2b2lkIF9fYXJlbmFfdGFnICphO1xuK1x0dm9pZCAqYjtcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCB7XHQvKiAxNiBieXRlczogdGhlIHBvaW50ZXIgaGlkZXMgb25lIGxldmVsIGRvd24gKi9cbitcdHN0cnVjdCB7XG4rXHRcdHZvaWQgKnA7XG4rXHR9IGluO1xuK1x0X191NjQgdGFnO1xuK307XG4rXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCB7XHQvKiA4IGJ5dGVzLCBidXQgbmVzdGVkIHBhc3QgdGhlIDQtbGV2ZWwgd2FsayBsaW1pdCAqL1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3Qge1xuK1x0XHRcdFx0c3RydWN0IHtcbitcdFx0XHRcdFx0X191NjQgdjtcbitcdFx0XHRcdH0gbDQ7XG4rXHRcdFx0fSBsMztcbitcdFx0fSBsMjtcbitcdH0gbDE7XG4rfTtcbitcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcge1x0LyogMjQgYnl0ZXM6IHRvbyBsYXJnZSBmb3IgUjA6UjIgKi9cbiBcdF9fdTY0IGE7XG4gXHRfX3U2NCBiO1xuQEAgLTE1OSw2ICsyMDQsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wYWlyKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wYWlyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKF9fdTY0IHRhZykgX19rc3ltO1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07XG4rc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltO1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKF9fdTY0IGFkZHIpIF9fa3N5bTtcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07XG4rdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07XG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKF9fdTY0IHYpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKHZvaWQpIF9fa3N5bTtcbiBfX3U2NCBicGZfa2Z1bmNfY2FsbF9zdGFja19hcmcoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCxcbiBcdFx0XHQgICAgICAgX191NjQgZSwgX191NjQgZiwgX191NjQgZywgX191NjQgaCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQzOjM1Ljc2MzEwMDQ5NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1NTMyMzI3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEJQRiBWZXJpZmllciBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgaW50ZXJlc3Rpbmcgb25lIGFjdHVhbGx5LiBUaGUgQlBGIHZlcmlmaWVyIGlzIGJlaW5nIHVwZGF0ZWQgdG8gcGVybWl0IGtmdW5jcyBhbmQgZ2xvYmFsIHN1YnByb2dyYW1zIHRvIHJldHVybiBzdHJ1Y3RzIG9yIHVuaW9ucyBieSB2YWx1ZSwgKnByb3ZpZGVkKiB0aG9zZSBhZ2dyZWdhdGVzIGFyZSBtYWRlIHVwIGVudGlyZWx5IG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIChkZWZpbmVkIGJ5IHRoYXQgYGJ0Zl90eXBlX3RhZyhcImFyZW5hXCIpYCBhdHRyaWJ1dGUpLiAgUHJldmlvdXNseSwgb25seSBzY2FsYXJzIHdlcmUgYWxsb3dlZC4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGV4cGFuc2lvbiBvZiB3aGF0J3MgcGVybWlzc2libGUsIGFuZCBpdCdzIGdvaW5nIHRvIHJlcXVpcmUgY2FyZWZ1bCByZXZpZXcuXG5cbk15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIG1vZGlmaWNhdGlvbnMgaW4gYGtlcm5lbC9icGYvYnRmLmNgIGFuZCBga2VybmVsL2JwZi92ZXJpZmllci5jYC4gIEknbSBzZWVpbmcgbmV3IGZ1bmN0aW9ucyBsaWtlIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgIHdoaWNoIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgZm9yIHZlcmlmeWluZyB0aGVzZSBhcmVuYSBwb2ludGVyIHR5cGVzLCBhbmQgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgLCB0aGF0IGxvb2tzIGxpa2UgaXQncyB0YWtpbmcgdGhlIHBsYWNlIG9mIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCBpbiBhIGZldyBzcG90cy4gVGhlbiB0aGVyZSBhcmUgY2hhbmdlcyB0byB0aGUgY29yZSBjYWxsLWNoZWNraW5nIGFuZCByZXR1cm4taGFuZGxpbmcgZnVuY3Rpb25zOiBgY2hlY2tfZnVuY19jYWxsYCwgYHByZXBhcmVfZnVuY19leGl0YCwgYG1hcmtfa2Z1bmNfcmV0X3JlZ3NgLCBhbmQgYGNoZWNrX2tmdW5jX2NhbGxgLiAgVGhlc2UgYXJlIHRoZSBoZWFydCBvZiB0aGUgdmVyaWZpZXIgbG9naWMsIHNvIGhhbmRsaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIHRob3NlIGFyZW5hIHBvaW50ZXJzIGNvcnJlY3RseSBpcyBnb2luZyB0byBiZSBrZXkuXG5cblRoaXMgaGFzIGZ1enppbmcgd3JpdHRlbiBhbGwgb3ZlciBpdC4gVGhpcyBpcyBhIGNsZWFyIGV4cGFuc2lvbiBvZiBmdW5jdGlvbmFsaXR5IGFuZCwgYXMgd2l0aCBhbnkgY2hhbmdlIHRvIHRoZSB2ZXJpZmllciwgSSdkIHdhbnQgdG8gYmUgc3VyZSBpdCdzIHJvYnVzdCBhZ2FpbnN0IG1pc2NvbmZpZ3VyYXRpb25zIG9yIG1hbGljaW91cyBpbnB1dC4gVGltZSB0byBwdXQgdGhlIGZ1enplciBvbiB0aGVzZS5cblxuRmlyc3QgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGF0dGVudGlvbiBvbi4gSSdtIHRoaW5raW5nOlxuXG4qICAgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmBcbiogICBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmBcbiogICBgYnRmX3N0cnVjdF9tZW1iZXJfd2Fsa2BcbiogICBgbWFya19rZnVuY19yZXRfcmVnc2BcbiogICBgY2hlY2tfa2Z1bmNfY2FsbGBcbiogICBgY2hlY2tfZnVuY19jYWxsYFxuKiAgIGBwcmVwYXJlX2Z1bmNfZXhpdGBcblxuSSB3YW50IHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2Ygd2hhdCdzIGNoYW5naW5nLlxuXG5PbmUgbW9yZSB0aGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gdGVzdGluZyB3aXRoIHRoZSBjb3JyZWN0IGtlcm5lbCBjb25maWd1cmF0aW9ucy4gQlBGIGFuZCBCUEZcXF9TWVNDQUxMIHNob3VsZCBiZSBzdGFuZGFyZCwgYW5kIEJQRlxcX0pJVCB0b28uIEJ1dCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGFueSBzcGVjaWFsIGNvbmZpZ3MgcmVsYXRlZCB0byBCUEYgYXJlbmFzIGFyZSBuZWVkZWQgdG8gZW5hYmxlIHRoaXMgZnVuY3Rpb25hbGl0eS4gTGV0J3MgZG8gYSBxdWljayBncmVwIGZvciBgQlBGX0FSRU5BYCBvciByZWxhdGVkIHRlcm1zLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcgdGhhdCdzIG5lZWRlZCBmb3IgdGhlIGZ1bGwgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MzUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0Mzo0My4zMTYzMzU3MTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2MzQxOTk2OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0JQRl9BUkVOQVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDM6NDUuNzc5NzYxOTZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzYzNDUzMTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIEJQRiBBcmVuYTogSHVudGluZyBmb3IgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBrZXJuZWwncyBCUEYgc3Vic3lzdGVtIGhhbmRsZXMgbWVtb3J5IGFsbG9jYXRpb24gYW5kLCBzcGVjaWZpY2FsbHksIGhvdyBhbiBcImFyZW5hXCIgbWlnaHQgYmUgaW52b2x2ZWQuIE15IGZpcnN0IGluc3RpbmN0IGlzIGFsd2F5cyB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJZiB0aGVyZSdzIGFuIFwiYXJlbmEsXCIgaXQncyBsaWtlbHkgY29udHJvbGxlZCBieSBzb21lIGBLY29uZmlnYCBzZXR0aW5nLCBkZXRlcm1pbmluZyBpdHMgc2l6ZSwgZW5hYmxpbmcvZGlzYWJsaW5nIGl0LCBvciB0d2Vha2luZyBpdHMgYmVoYXZpb3IuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGp1bXAgaW50byB0aGUga2VybmVsIHNvdXJjZSBhbmQgaW1tZWRpYXRlbHkgYGdyZXBgIGZvciBcImFyZW5hXCIgd2l0aGluIGBrZXJuZWwvYnBmL0tjb25maWdgLiBUaGF0J3MgdGhlIHF1aWNrZXN0IHdheSB0byBnZXQgYSBiaXJkJ3MtZXllIHZpZXcgb2YgYW55IGV4aXN0aW5nIGNvbmZpZ3VyYXRpb24ga25vYnMgcmVsYXRlZCB0byB0aGlzIGNvbmNlcHQuIEl0J3MgYSBmdW5kYW1lbnRhbCBpbml0aWFsIHN0ZXAgdG8gY2hlY2sgd2hpY2ggb3B0aW9ucyBhcmUgaW4gdGhlIHNvdXJjZSB0cmVlLCBhbmQgZnJvbSB0aG9zZSwgcXVpY2tseSBsb29rIGZvciByZWxhdGlvbnNoaXBzIHRvIG90aGVyIEJQRiBzdWJzeXN0ZW0gcGFyYW1ldGVycyBhbmQgcmVsYXRlZCBzb3VyY2UgY29kZS4gSSBleHBlY3QgSSdsbCBxdWlja2x5IGZpbmQgd2hhdCBJJ20gbG9va2luZyBmb3IgdGhlcmUuIE9uY2UgSSBoYXZlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHRoZW4gSSBjYW4gc2VlIHdoYXQgc291cmNlIGZpbGVzIGFuZCBjb2RlIHBhdGhzIGFyZSBpbmZsdWVuY2VkIGJ5IHRob3NlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODkyMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQzOjU5LjQxNDI5NjA2N1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzgxMzE2NywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYXJlbmFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0Mzo1OS40ODIxMTYxMTRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2ODczMjUwMzQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgQlBGIEFyZW5hIElzc3VlKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBiYXNlZCBvbiB3aGF0IEkndmUgc2VlbiwgdGhpcyBmZWVscyBsaWtlIGl0IGNvdWxkIGJlIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIEJQRiBhcmVuYS4gTXkgaW5pdGlhbCBodW5jaCBpcyB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBjb2RlLCBhbmQgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBga2VybmVsL2JwZi9hcmVuYS5jYCwgb3Igc29tZXRoaW5nIGNsb3NlbHkgcmVsYXRlZCB3aXRoaW4gdGhlIEJQRiBzdWJzeXN0ZW0uIEkgd2FudCB0byBzZWUgaG93IHRoZSBhcmVuYSBtZW1vcnkgaXMgYmVpbmcgYWxsb2NhdGVkLCBkZWFsbG9jYXRlZCwgYW5kIGhvdyBpdOKAmXMgYmVpbmcgdHJhY2tlZC4gSSdtIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGZyYWdtZW50YXRpb24gcHJvYmxlbXMsIG9yIHBvc3NpYmx5IG1lbW9yeSBsZWFrcyB3aXRoaW4gdGhhdCBzZWN0aW9uIG9mIHRoZSBrZXJuZWwuIEEgcXVpY2sgc2NhbiBvZiByZWxhdGVkIGZpbGVzIG1pZ2h0IGFsc28gYmUgd2FycmFudGVkLCB0byBzZWUgaG93IHRoYXQgYXJlbmEgaXMgdXNlZCBhbmQgaW50ZXJhY3RlZCB3aXRoIGFjcm9zcyBvdGhlciBwYXJ0cyBvZiB0aGUgQlBGIHN5c3RlbS4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIHByb3ZpZGUgdGhlIGtleSB0byBmaWd1cmluZyBvdXQgdGhpcyBpc3N1ZSwgc28gdGhpcyBpcyB3aGVyZSBJJ2xsIGJlZ2luLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTIyMiwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ0OjA2LjM1NTM2ODY2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzM0MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJrZXJuZWwvYnBmXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImFyZW5hLmNcIixcbiAgICBcImFycmF5bWFwLmNcIixcbiAgICBcImJhY2t0cmFjay5jXCIsXG4gICAgXCJibG9vbV9maWx0ZXIuY1wiLFxuICAgIFwiYnBmX2NncnBfc3RvcmFnZS5jXCIsXG4gICAgXCJicGZfaW5vZGVfc3RvcmFnZS5jXCIsXG4gICAgXCJicGZfaW5zbl9hcnJheS5jXCIsXG4gICAgXCJicGZfaXRlci5jXCIsXG4gICAgXCJicGZfbG9jYWxfc3RvcmFnZS5jXCIsXG4gICAgXCJicGZfbHJ1X2xpc3QuY1wiLFxuICAgIFwiYnBmX2xydV9saXN0LmhcIixcbiAgICBcImJwZl9sc20uY1wiLFxuICAgIFwiYnBmX2xzbV9wcm90by5jXCIsXG4gICAgXCJicGZfc3RydWN0X29wcy5jXCIsXG4gICAgXCJicGZfdGFza19zdG9yYWdlLmNcIixcbiAgICBcImJ0Zi5jXCIsXG4gICAgXCJidGZfaXRlci5jXCIsXG4gICAgXCJidGZfcmVsb2NhdGUuY1wiLFxuICAgIFwiY2ZnLmNcIixcbiAgICBcImNncm91cC5jXCIsXG4gICAgXCJjZ3JvdXBfaXRlci5jXCIsXG4gICAgXCJjaGVja19idGYuY1wiLFxuICAgIFwiY251bS5jXCIsXG4gICAgXCJjbnVtX2RlZnMuaFwiLFxuICAgIFwiY29uc3RfZm9sZC5jXCIsXG4gICAgXCJjb3JlLmNcIixcbiAgICBcImNwdW1hcC5jXCIsXG4gICAgXCJjcHVtYXNrLmNcIixcbiAgICBcImNyeXB0by5jXCIsXG4gICAgXCJkZXZtYXAuY1wiLFxuICAgIFwiZGlhZ25vc3RpY3MuY1wiLFxuICAgIFwiZGlhZ25vc3RpY3MuaFwiLFxuICAgIFwiZGlzYXNtLmNcIixcbiAgICBcImRpc2FzbS5oXCIsXG4gICAgXCJkaXNwYXRjaGVyLmNcIixcbiAgICBcImRtYWJ1Zl9pdGVyLmNcIixcbiAgICBcImZpeHVwcy5jXCIsXG4gICAgXCJoYXNodGFiLmNcIixcbiAgICBcImhlbHBlcnMuY1wiLFxuICAgIFwiaW5vZGUuY1wiLFxuICAgIFwia21lbV9jYWNoZV9pdGVyLmNcIixcbiAgICBcImxpbmtfaXRlci5jXCIsXG4gICAgXCJsaXZlbmVzcy5jXCIsXG4gICAgXCJsb2NhbF9zdG9yYWdlLmNcIixcbiAgICBcImxvZy5jXCIsXG4gICAgXCJscG1fdHJpZS5jXCIsXG4gICAgXCJtYXBfaW5fbWFwLmNcIixcbiAgICBcIm1hcF9pbl9tYXAuaFwiLFxuICAgIFwibWFwX2l0ZXIuY1wiLFxuICAgIFwibWVtYWxsb2MuY1wiLFxuICAgIFwibW1hcF91bmxvY2tfd29yay5oXCIsXG4gICAgXCJtcHJvZy5jXCIsXG4gICAgXCJuZXRfbmFtZXNwYWNlLmNcIixcbiAgICBcIm9mZmxvYWQuY1wiLFxuICAgIFwicGVyY3B1X2ZyZWVsaXN0LmNcIixcbiAgICBcInBlcmNwdV9mcmVlbGlzdC5oXCIsXG4gICAgXCJwcm9nX2l0ZXIuY1wiLFxuICAgIFwicXVldWVfc3RhY2tfbWFwcy5jXCIsXG4gICAgXCJyYW5nZV90cmVlLmNcIixcbiAgICBcInJhbmdlX3RyZWUuaFwiLFxuICAgIFwicmVsb19jb3JlLmNcIixcbiAgICBcInJldXNlcG9ydF9hcnJheS5jXCIsXG4gICAgXCJyaW5nYnVmLmNcIixcbiAgICBcInJxc3BpbmxvY2suY1wiLFxuICAgIFwicnFzcGlubG9jay5oXCIsXG4gICAgXCJzdGFja21hcC5jXCIsXG4gICAgXCJzdGF0ZXMuY1wiLFxuICAgIFwic3RyZWFtLmNcIixcbiAgICBcInN5c2NhbGwuY1wiLFxuICAgIFwic3lzZnNfYnRmLmNcIixcbiAgICBcInRhc2tfaXRlci5jXCIsXG4gICAgXCJ0Y3guY1wiLFxuICAgIFwidG51bS5jXCIsXG4gICAgXCJ0b2tlbi5jXCIsXG4gICAgXCJ0cmFtcG9saW5lLmNcIixcbiAgICBcInZlcmlmaWVyLmNcIlxuICBdLFxuICBcIlN1YmRpcnNcIjogW1xuICAgIFwicHJlbG9hZFwiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ0OjA2LjM1NTU0MzQ3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjMzNzk1NTgxMDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyBDb25kaXRpb25hbCBDb21waWxhdGlvbiBpbiBgYXJlbmEuY2AqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlIGBhcmVuYS5jYCBmaWxlIGhhcyBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZGlyZWN0aXZlcyBiYWtlZCBpbnRvIGl0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgY29kZSB3aXRoaW4gdGhhdCBmaWxlIGJlaGF2ZXMgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIGNlcnRhaW4gYnVpbGQgY29uZmlndXJhdGlvbnMsIGZlYXR1cmUgZmxhZ3MsIG9yIHBsYXRmb3JtIHNwZWNpZmljcy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGxpa2UgYCNpZmRlZmAsIGAjaWZuZGVmYCwgYCNpZmAsIGAjZWxzZWAsIGFuZCBgI2VuZGlmYCB0aGF0IGNvdWxkIGFmZmVjdCB3aGljaCBzZWN0aW9ucyBvZiBjb2RlIGFyZSBpbmNsdWRlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuIElkZW50aWZ5aW5nIHRoZXNlIGRpcmVjdGl2ZXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGZpbGUncyBmbGV4aWJpbGl0eSBhbmQgcG90ZW50aWFsIHZhcmlhYmlsaXR5IGFjcm9zcyBkaWZmZXJlbnQgZGVwbG95bWVudHMgb3IgdXNlIGNhc2VzLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaW5mb3JtIG15IG92ZXJhbGwgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnVpbGQgc3lzdGVtIGFuZCBob3cgdGhpcyBwYXJ0aWN1bGFyIG1vZHVsZSBpbnRlZ3JhdGVzIHdpdGggdGhlIGJyb2FkZXIgcHJvamVjdC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGhvdyB0aGlzIGZpbGUgaXMgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMDgsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDQ6MjkuNzM1MTA0MzM1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjU3Mjc5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhcmVuYS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZT0xOT1pZmVxICgkKENPTkZJR19NTVUpJChDT05GSUdfNjRCSVQpLHl5KVxcbmtlcm5lbC9icGYvTWFrZWZpbGU6MjA6b2JqLSQoQ09ORklHX0JQRl9TWVNDQUxMKSArPSBhcmVuYS5vIHJhbmdlX3RyZWUub1xcbmtlcm5lbC9icGYvTWFrZWZpbGUtMjEtZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDQ6MjkuODA3Njc4OTgyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzOTU4MzAwNDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIEtleSBCUEYgRnVuY3Rpb25zKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgQlBGIGNvZGUuIEZpcnN0LCB0aGUgdXN1YWwgc3VzcGVjdHMgYXJlIGF0IHBsYXk6IGBDT05GSUdfTU1VYCwgYENPTkZJR182NEJJVGAsIGFuZCBgQ09ORklHX0JQRl9TWVNDQUxMYCDigJMgbm90aGluZyB1bmV4cGVjdGVkIHRoZXJlLiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBjb3JlIGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBzY2FuIHlpZWxkZWQgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IHNlZW0gcGFydGljdWxhcmx5IHJlbGV2YW50LCBjbHVzdGVyZWQgYXJvdW5kIGBidGYuY2AgYW5kIGB2ZXJpZmllci5jYC5cblxuSW4gYGJ0Zi5jYCwgSSBzYXcgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGBidGZfc2Nhbl90eXBlX3RhZ3NgICh3aGljaCB3YXMgbW9kaWZpZWQpLCBgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlYCAoYWxzbyBtb2RpZmllZCksIGFuZCBgYnRmX3ByZXBhcmVfZnVuY19hcmdzYCAobW9kaWZpZWQgYWdhaW4pLiBUaGVuLCBvdmVyIGluIGB2ZXJpZmllci5jYCwgdGhlIGxpc3QgaW5jbHVkZXMgYGNoZWNrX2Z1bmNfY2FsbGAgKG1vZGlmaWVkKSwgYHByZXBhcmVfZnVuY19leGl0YCAobW9kaWZpZWQpLCBgbWFya19rZnVuY19yZXRfcmVnc2AgKG1vZGlmaWVkKSwgYGJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkYCAoYWRkZWQpLCBgYnRmX3N0cnVjdF9tZW1iZXJfd2Fsa2AgKGFkZGVkKSwgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgIChhZGRlZCksIGBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0YCAobW9kaWZpZWQpLCBgYnRmX21lbWJlcl9wYXRoX3N0cmAgKGFkZGVkKSwgYW5kIGBjaGVja19rZnVuY19jYWxsYCAobW9kaWZpZWQpLlxuXG5BZnRlciBhIGZpcnN0IHBhc3MsIEkgbmFycm93ZWQgaXQgZG93biB0bzogYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCwgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgLCBgbWFya19rZnVuY19yZXRfcmVnc2AsIGBjaGVja19rZnVuY19jYWxsYCwgYGNoZWNrX2Z1bmNfY2FsbGAsIGFuZCBgcHJlcGFyZV9mdW5jX2V4aXRgLiBJIGNoZWNrZWQgd2hpY2ggZnVuY3Rpb25zIGFyZSBzdGF0aWMuIGBidGZfc3RydWN0X21lbWJlcl93YWxrYCwgYG1hcmtfa2Z1bmNfcmV0X3JlZ3NgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGBjaGVja19mdW5jX2NhbGxgLCBhbmQgYHByZXBhcmVfZnVuY19leGl0YCBhcmUgYWxsIHN0YXRpYy4gVGhhdCdzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLCBhcyBJIG5lZWQgdG8gZm9jdXMgb24gbm9uLXN0YXRpYyBmdW5jdGlvbnMgZm9yIHRoZSBBUEkgZW50cnkgcG9pbnRzLlxuXG5HaXZlbiB0aGF0IGNvbnN0cmFpbnQsIEkgcmVmaW5lZCB0aGUgbGlzdCB0byBmb2N1cyBvbiBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAsIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgLCBgYnRmX3ByZXBhcmVfZnVuY19hcmdzYCwgYW5kIGBicGZfY2hlY2tgLiBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYCBhbmQgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAuIEl0IGxvb2tzIGxpa2UgdGhlc2UgZnVuY3Rpb25zIGFyZSB0aGUga2V5IG9uZXMgdGhhdCBJIHNob3VsZCBsb29rIGF0IHJpZ2h0IG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDQ6NDMuNzY1OTgyMzk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTg0Njk4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2J0Zi5jPTc5NTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03OTkwLVxcbmtlcm5lbC9icGYvYnRmLmM6Nzk5MTpcXHRcXHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxcbmtlcm5lbC9icGYvYnRmLmMtNzk5Mi1cXHRcXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYz0xMTY3Mz1zdGF0aWMgYm9vbCBidGZfc3RydWN0X21lbWJlcl93YWxrKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTcxOS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MjA6Ym9vbCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzIxLVxcdFxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE3Mjc9c3RhdGljIGJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LFxcbi0tXFxua2VybmVsL2JwZi92ZXJpZmllci5jLTExNzMwLXtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM6MTE3MzE6XFx0cmV0dXJuIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2YoZW52LCBidGYsIHQsIEJURl9NRU1CRVJfU0NBTEFSKTtcXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE3MzItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yN1QwNjo0NDo0NC4yMjQ0NTc0NDdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTk0NDU5MzY1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipDaGVja2luZyBgYnRmX3R5cGVfaXNfYXJlbmFfcHRyYCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBidGZfdHlwZV9pc19hcmVuYV9wdHJgIGZ1bmN0aW9uLiBHaXZlbiB0aGUgY29udGV4dCwgSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBCVEYgdHlwZSBhbmFseXNpcywgYW5kIHNwZWNpZmljYWxseSwgbWVtb3J5IG1hbmFnZW1lbnQgaW4gdGhlIGtlcm5lbC4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IHRoaXMgaXMgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIGlmIGEgZ2l2ZW4gQlRGIHR5cGUgZGVzY3JpcHRvciByZXByZXNlbnRzIGEgcG9pbnRlciB0aGF0IHJlc2lkZXMgd2l0aGluIHNvbWUgbWFuYWdlZCBhcmVuYSBvciBwb29sLlxuXG5UaGUgaW1tZWRpYXRlIGltcGxpY2F0aW9ucyBhcmUgaW1wb3J0YW50LiBJcyB0aGlzIGNoZWNrIHBlcmZvcm1lZCBhdCBjb21waWxlIHRpbWUsIG9yIHJ1bnRpbWU/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGNvbnRleHRzIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGFyZSB0aGVyZSBvdGhlciBjaGVja3MgYmVpbmcgcGVyZm9ybWVkIHRvIHF1YWxpZnkgYSBwb2ludGVyPyBBbmQgZG9lcyBpdCByZWxhdGUgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uLCByZWZlcmVuY2UgY291bnRpbmcsIG9yIHNvbWUgb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3k/IE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGlzIGlzIHBhcnQgb2YgZW5zdXJpbmcgc2FmZXR5IGFuZCBwcmV2ZW50aW5nIG1lbW9yeSBsZWFrcyBvciB1c2UtYWZ0ZXItZnJlZSBzY2VuYXJpb3MsIGxpa2VseSB3aXRoaW4gYSBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtIG9yIGRyaXZlci4gQXJlIHRoZXJlIGltcGxpY2F0aW9ucyBmb3IgY29uY3VycmVuY3kgaGVyZT8gQXJlIHdlIGRlYWxpbmcgd2l0aCBhdG9taWNhbGx5IGFjY2Vzc2VkIG1lbW9yeSBsb2NhdGlvbnMgb3IgYXJlIHRoZXJlIHBvdGVudGlhbGx5IHJhY2UgY29uZGl0aW9ucyB0byB3b3JyeSBhYm91dD8gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB2YXJpb3VzIHR5cGUgcXVhbGlmaWVycyB0b287IGNvbnN0LCB2b2xhdGlsZSwgZXRjLiBUaGlzIGZ1bmN0aW9uIG1pZ2h0IGhhdmUgdG8gY2hlY2sgbW9yZSB0aGFuIGp1c3QgdGhlIHBsYWluIEJURiB0eXBlIGtpbmQuIFRoaXMgY291bGQgaGF2ZSBzb21lIHJlYWwgaW1wbGljYXRpb25zIGZvciBob3cgdGhlIHZlcmlmaWVyIGZ1bmN0aW9ucyBhcyB3ZWxsLlxuXG5JIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhlIHBvc3NpYmxlIGNhc2VzIHdoZXJlIGEgcG9pbnRlciAqd291bGRuJ3QqIGJlIGNvbnNpZGVyZWQgYXJlbmEtbWFuYWdlZC4gQW5kIGJ5IGRlZmluaXRpb24sIHBvaW50ZXJzIHJldHVybmVkIGZyb20gbWFsbG9jLCBvciBldmVuIHNvbWV0aGluZyByZXR1cm5lZCBmcm9tIGFuIGVCUEYgbWFwIGFyZSBub3QuIEkgaGF2ZSB0byBtYWtlIHN1cmUgbXkgbG9naWMgaXMgYXMgY2xlYXIgYXMgcG9zc2libGUuXG5cbkknbSBzdGFydGluZyB0byBmb3JtdWxhdGUgYSBtZW50YWwgbW9kZWwsIGFuZCBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbiB0byB2ZXJpZnkgbXkgaHlwb3RoZXNlcy4gVGhpcyBpcyBhIGNyaXRpY2FsIGJ1aWxkaW5nIGJsb2NrIGZvciBCVEYtYmFzZWQgYW5hbHlzaXMsIGFuZCBhbnkgZXJyb3JzIGhlcmUgY2FuIGxlYWQgdG8gc3VidGxlIGJ1Z3MgZG93biB0aGUgbGluZS4gTGV0J3Mgc2VlIGhvdyBpdCB3b3Jrcy4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjAzOCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjAzLjY3MDM5NjMyNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc0Njg4OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYnRmX3R5cGVfaXNfYXJlbmFfcHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvYnRmLmM9MzQ4Nj1zdGF0aWMgaW50IGJ0Zl90eXBlX3RhZ193YWxrKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmMtMzUyNS1cXG5rZXJuZWwvYnBmL2J0Zi5jOjM1MjY6Ym9vbCBidGZfdHlwZV9pc19hcmVuYV9wdHIoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQpXFxua2VybmVsL2JwZi9idGYuYy0zNTI3LXtcXG4tLVxcbmtlcm5lbC9icGYvYnRmLmM9Nzk0Nj1zdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03OTUwLVxcbmtlcm5lbC9icGYvYnRmLmM6Nzk1MTpcXHRpZiAoYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGJ0ZiwgdCkpXFxua2VybmVsL2JwZi9idGYuYy03OTUyLVxcdFxcdCp0YWdzIHw9IEFSR19UQUdfQVJFTkE7XFxuLS1cXG5rZXJuZWwvYnBmL2J0Zi5jPTc5NTY9c3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9idGYuYy03OTY1LVxcdCAqL1xcbmtlcm5lbC9icGYvYnRmLmM6Nzk2NjpcXHRpZiAoc3VicHJvZyBcXHUwMDI2XFx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcXG5rZXJuZWwvYnBmL2J0Zi5jLTc5NjctXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmM9MTE2NTg9c3RhdGljIGJvb2wgYnRmX21lbWJlcl9raW5kX2FsbG93ZWQoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXFxuLS1cXG5rZXJuZWwvYnBmL3ZlcmlmaWVyLmMtMTE2NjItXFx0XFx0cmV0dXJuIHRydWU7XFxua2VybmVsL2JwZi92ZXJpZmllci5jOjExNjYzOlxcdGlmICgobWVtYmVyX2tpbmRzIFxcdTAwMjYgQlRGX01FTUJFUl9BUkVOQV9QVFIpIFxcdTAwMjZcXHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxcbmtlcm5lbC9icGYvdmVyaWZpZXIuYy0xMTY2NC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDU6MDMuNzI3ODY4NTIyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MzU2MTUyODA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCUEYgVmVyaWZpZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgYWJvdXQgaG93IHRoZSBCUEYgdmVyaWZpZXIgaGFuZGxlcyByZXR1cm4gdHlwZXMgZnJvbSBrZnVuY3MgYW5kIHN1YnByb2dyYW1zLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgZXhwYW5kaW5nIHRoZSBhbGxvd2VkIHJldHVybiB0eXBlcyBiZXlvbmQganVzdCBzaW1wbGUgc2NhbGFycyB0byBpbmNsdWRlIHN0cnVjdHMgb3IgdW5pb25zLCBhcyBsb25nIGFzIHRoZXkncmUgY29tcG9zZWQgb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMuIEkga25vdyB0aGUgdmVyaWZpZXIgaXMgYSBjcml0aWNhbCBjb21wb25lbnQsIGFuZCBhbnkgY2hhbmdlcyBoZXJlIHdhcnJhbnQgY2FyZWZ1bCBhdHRlbnRpb24uXG5cblRoZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBjaGVja3MgYXJlIGBidGZfcHJlcGFyZV9mdW5jX2FyZ3NgLCBgY2hlY2tfa2Z1bmNfY2FsbGAsIGFuZCBgY2hlY2tfZnVuY19jYWxsYC4gU2luY2UgYGNoZWNrX2tmdW5jX2NhbGxgIGFuZCBgY2hlY2tfZnVuY19jYWxsYCBhcmUgc3RhdGljLCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhpcyBuZXcgbG9naWM6IGBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mYCBhbmQgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmAsIGFuZCBhbHNvIGBidGZfcHJlcGFyZV9mdW5jX2FyZ3NgLiBJIHNob3VsZCBkb3VibGUtY2hlY2sgdG8gYmUgc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzLiBJJ3ZlIGFscmVhZHkgY29uZmlybWVkIHRob3NlIHRocmVlLCBhbmQgSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBvdGhlcnMuXG5cbkFzIGZvciBjb25maWd1cmF0aW9uLCBgQ09ORklHX0JQRl9TWVNDQUxMYCBpcyBzdGFuZGFyZCwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIG1lbnRpb25zIGBidGZfdHlwZV90YWcoXCJhcmVuYVwiKWAsIGFuZCBJIGluaXRpYWxseSBsb29rZWQgZm9yIGEgc3BlY2lmaWMgYENPTkZJR19CUEZfQVJFTkFgIGJ1dCBjb25maXJtZWQgdGhhdCBpc24ndCBwcmVzZW50LCBidXQgYGFyZW5hLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19NTVVgLCBgQ09ORklHXzY0QklUYCwgYW5kIGBDT05GSUdfQlBGX1NZU0NBTExgIGFyZSBlbmFibGVkLiBTbywgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgbm8gc3BlY2lhbCBjb25maWcgZmxhZ3MgYXJlIG5lZWRlZCBiZXlvbmQgdGhlIHN0YW5kYXJkIEJQRiBvbmVzLlxuXG5TbywgbGV0J3MgbmFpbCBkb3duIHRoZSByZWFzb25pbmcuIFRoaXMgcGF0Y2ggZW5hYmxlcyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyB3aXRoaW4gdGhlIEJQRiB2ZXJpZmllciBpZiB0aGV5J3JlIGNvbXBvc2VkIG9mIHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzLiBUaGlzIGlzIGEgY2xlYXIgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gaG93IHRoZSB2ZXJpZmllciBoYW5kbGVzIHR5cGUgY2hlY2tpbmcgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIG11bHRpcGxlIHJldHVybiByZWdpc3RlcnMgYW5kIHRoZSBhcmVuYSBwb2ludGVycy4gSXQncyBhIGZ1bmRhbWVudGFsIHNoaWZ0IGluIHRoZSBwZXJtaXR0ZWQgcmV0dXJuIHR5cGVzLiBGcm9tIHVzZXJzcGFjZSwgdGhpcyBpcyB0cmlnZ2VyZWQgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwgdGhlIGtmdW5jcyBvciBzdWJwcm9ncmFtcyB0aGF0IG5vdyByZXR1cm4gc3RydWN0cy91bmlvbnMuXG5cbkknbGwgYmUgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byB0aGVzZSBzeW1ib2xzOlxuXG4qICAgYGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZgXG4qICAgYGJ0Zl90eXBlX2lzX2FyZW5hX3B0cmBcbiogICBgYnRmX3ByZXBhcmVfZnVuY19hcmdzYFxuXG5Pa2F5LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwMTgsIk91dHB1dFRva2VucyI6MTc3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjE4LjA4NDAyMzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2ZcIixcbiAgICBcImJ0Zl90eXBlX2lzX2FyZW5hX3B0clwiLFxuICAgIFwiYnRmX3ByZXBhcmVfZnVuY19hcmdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyByZXR1cm5pbmcgc3RydWN0cyBvciB1bmlvbnMgYnkgdmFsdWUgZnJvbSBrZnVuY3MgYW5kIGdsb2JhbCBzdWJwcm9ncmFtcyBpZiB0aGV5IGFyZSBjb21wb3NlZCBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyAocG9pbnRlcnMgd2l0aCB0aGUgYGJ0Zl90eXBlX3RhZyhcXFwiYXJlbmFcXFwiKWAgYXR0cmlidXRlKS4gUHJldmlvdXNseSwgb25seSBzY2FsYXJzIHdlcmUgYWxsb3dlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSB2ZXJpZmllcidzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nIChoYW5kbGluZyBtdWx0aXBsZSByZXR1cm4gcmVnaXN0ZXJzIGFuZCBhcmVuYSBwb2ludGVycykuIEl0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBicGYoKWAgc3lzY2FsbCB3aGVuIGxvYWRpbmcgQlBGIHByb2dyYW1zIHRoYXQgY2FsbCBzdWNoIGtmdW5jcyBvciBzdWJwcm9ncmFtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mXCIsXG4gICAgXCJidGZfdHlwZV9pc19hcmVuYV9wdHJcIixcbiAgICBcImJ0Zl9wcmVwYXJlX2Z1bmNfYXJnc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cgcmV0dXJuaW5nIHN0cnVjdHMgb3IgdW5pb25zIGJ5IHZhbHVlIGZyb20ga2Z1bmNzIGFuZCBnbG9iYWwgc3VicHJvZ3JhbXMgaWYgdGhleSBhcmUgY29tcG9zZWQgb2Ygc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgKHBvaW50ZXJzIHdpdGggdGhlIGBidGZfdHlwZV90YWcoXFxcImFyZW5hXFxcIilgIGF0dHJpYnV0ZSkuIFByZXZpb3VzbHksIG9ubHkgc2NhbGFycyB3ZXJlIGFsbG93ZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgdmVyaWZpZXIncyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZyAoaGFuZGxpbmcgbXVsdGlwbGUgcmV0dXJuIHJlZ2lzdGVycyBhbmQgYXJlbmEgcG9pbnRlcnMpLiBJdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHRoZSBgYnBmKClgIHN5c2NhbGwgd2hlbiBsb2FkaW5nIEJQRiBwcm9ncmFtcyB0aGF0IGNhbGwgc3VjaCBrZnVuY3Mgb3Igc3VicHJvZ3JhbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjE4LjA4NDA0OTA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA4OTg2ODk4MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjE4LjA4NDQ1OTE2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxODA4OTQ1NTg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEJQRiB2ZXJpZmllciB0byBhbGxvdyBrZnVuY3MgYW5kIHN1YnByb2dyYW1zIHRvIHJldHVybiBzdHJ1Y3RzL3VuaW9ucyBjb250YWluaW5nIGFyZW5hIHBvaW50ZXJzIGJ5IHZhbHVlLiBJdCB1cGRhdGVzIHRoZSB2ZXJpZmllcidzIHR5cGUgY2hlY2tpbmcgbG9naWMgYW5kIHJlZ2lzdGVyIHN0YXRlIHRyYWNraW5nLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlIGNoYW5nZXMgYXJlIGNvbmZpbmVkIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMgcGhhc2Ugb2YgQlBGIHByb2dyYW1zLiBTdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgYnVnIGRldGVjdG9ycyBhcmUgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzIGluIHRoZSB2ZXJpZmllci5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZjdlOGE4YTk1MDFlNWVhM2JjYTliOGUxMjJmZGM0ZWNjNTQ1ZTYzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMjcgMDY6NDM6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2JwZi9rZnVuY3MucnN0IGIvRG9jdW1lbnRhdGlvbi9icGYva2Z1bmNzLnJzdFxuaW5kZXggODlkZWE2YjBiMDI0MS4uOTZiZjYzZDM0NDMyMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vYnBmL2tmdW5jcy5yc3RcbkBAIC01ODEsMjAgKzU4MSwyNyBAQCBhZ2FpbnN0IHRoZSBhcmVuYS4gTGFyZ2VyIGFjY2Vzc2VzIG11c3QgdmVyaWZ5IHRoZSByYW5nZSBleHBsaWNpdGx5LlxuIEEga2Z1bmMgbWF5IHJldHVybiBhIHNjYWxhciwgYSBwb2ludGVyLCBvciBhIHNtYWxsIHN0cnVjdCBvciB1bmlvbiBieVxuIHZhbHVlLiBBIHNjYWxhciBvciBwb2ludGVyIG9mIHVwIHRvIDggYnl0ZXMgaXMgcmV0dXJuZWQgaW4gUjAsIGFzIHVzdWFsLlxuIFxuLUEgc3RydWN0IG9yIHVuaW9uIHJldHVybmVkIGJ5IHZhbHVlIG11c3QgYmUgY29tcG9zZWQgb25seSBvZiBzY2FsYXJzXG4tKHJlY3Vyc2l2ZWx5KSwgd2hlcmUgYSBzY2FsYXIgaXMgYW4gaW50ZWdlciBvciBhbiBlbnVtOyBhcnJheXMgb2Ygc2NhbGFycyBhcmVcbi1hbGxvd2VkIGFzIG1lbWJlcnMuIEl0cyBieXRlcyBhcmUgaGFuZGVkIGJhY2sgdG8gdGhlIHByb2dyYW0gYXMgdGhlIHJhd1xuLWNvbnRlbnRzIG9mIFIwIChhbmQgUjIpLCBzbyBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcbi1hbmQgZXNjYXBlIHRoZSB2ZXJpZmllcidzIHBvaW50ZXIgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLiBBIHN0cnVjdFxuLW9yIHVuaW9uIHdpdGggYSBwb2ludGVyIG1lbWJlciBpcyB0aGVyZWZvcmUgcmVqZWN0ZWQgYXQgbG9hZCB0aW1lLCBhbmQgc28gaXNcbi1vbmUgd2l0aCBhIGZsb2F0aW5nLXBvaW50IG1lbWJlciwgd2hpY2ggdGhlIEFCSSBtYXkgbm90IHJldHVybiBpbiBSMDpSMiBhdFxuLWFsbC5cbitBIHN0cnVjdCBvciB1bmlvbiByZXR1cm5lZCBieSB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9ubHkgb2Ygc2NhbGFycyBhbmQgYXJlbmFcbitwb2ludGVycyAocmVjdXJzaXZlbHkpLCB3aGVyZSBhIHNjYWxhciBpcyBhbiBpbnRlZ2VyIG9yIGFuIGVudW0gYW5kIGFuIGFyZW5hXG4rcG9pbnRlciBpcyBvbmUgY2FycnlpbmcgdGhlIGBgYnRmX3R5cGVfdGFnKFwiYXJlbmFcIilgYCBhdHRyaWJ1dGU7IGFycmF5cyBvZlxuK2VpdGhlciBhcmUgYWxsb3dlZCBhcyBtZW1iZXJzLiBJdHMgYnl0ZXMgYXJlIGhhbmRlZCBiYWNrIHRvIHRoZSBwcm9ncmFtIGFzIHRoZVxuK3JhdyBjb250ZW50cyBvZiBSMCAoYW5kIFIyKSwgc28gYSBtZW1iZXIgb2YgYW55IG90aGVyIHBvaW50ZXIgdHlwZSB3b3VsZCBiZVxuK2xhdW5kZXJlZCBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgdGhlIHZlcmlmaWVyJ3MgcG9pbnRlciBwcm92ZW5hbmNlIGFuZFxuK3JlZmVyZW5jZSB0cmFja2luZy4gQSBzdHJ1Y3Qgb3IgdW5pb24gd2l0aCBzdWNoIGEgbWVtYmVyIGlzIHRoZXJlZm9yZSByZWplY3RlZFxuK2F0IGxvYWQgdGltZSwgYW5kIHNvIGlzIG9uZSB3aXRoIGEgZmxvYXRpbmctcG9pbnQgbWVtYmVyLCB3aGljaCB0aGUgQUJJIG1heSBub3RcbityZXR1cm4gaW4gUjA6UjIgYXQgYWxsLlxuK1xuK0FuIGFyZW5hIHBvaW50ZXIgbWVtYmVyIGlzIGhhbmRlZCBiYWNrIGFzIGEgc2NhbGFyIHRvbywgYnV0IG5vdGhpbmcgaXMgbG9zdCBieVxuK3RoYXQuIFRoZSBwcm9ncmFtIG11c3QgYGBjYXN0X2tlcm4oKWBgIHRoZSB2YWx1ZSBiZWZvcmUgaXQgY2FuIGJlIHVzZWQsIGFuZCB0aGVcbit2ZXJpZmllciBhbGxvd3MgdGhhdCBjYXN0IG9uIGFueSBzY2FsYXIsIHNvIGEgbGF1bmRlcmVkIGFyZW5hIGFkZHJlc3MgZ2l2ZXMgdGhlXG4rcHJvZ3JhbSBubyByZWFjaCBpdCBkaWQgbm90IGFscmVhZHkgaGF2ZS4gVGhlIHJlc3VsdCBpcyBjb25maW5lZCB0byB0aGVcbitwcm9ncmFtJ3MgYXJlbmEgaW4gZWl0aGVyIGNhc2UuXG4gXG4gQSBrZnVuYyBtYXkgYWxzbyByZXR1cm4gYSB2YWx1ZSBsYXJnZXIgdGhhbiA4IGJ5dGVzIGFuZCB1cCB0byAxNiBieXRlcyAtLSBhXG4tc2NhbGFyLW9ubHkgc3RydWN0IG9yIHVuaW9uLCBvciBhbiBgYF9faW50MTI4YGAuIFN1Y2ggYSB2YWx1ZSBpcyByZXR1cm5lZFxuLWluIHRoZSByZWdpc3RlciBwYWlyIFIwOlIyLCBtYXRjaGluZyB0aGUgY29udmVudGlvbiBMTFZNIHVzZXMgZm9yIHRoZSBCUEZcbi10YXJnZXQ6IHRoZSBmaXJzdCA4IGJ5dGVzIGluIFIwIGFuZCB0aGUgc2Vjb25kIDggYnl0ZXMgaW4gUjIuIEEgc3RydWN0IG9yXG4tdW5pb24gb2YgOCBieXRlcyBvciBsZXNzIGlzIHJldHVybmVkIGluIFIwIGFsb25lLlxuK3N0cnVjdCBvciB1bmlvbiBvZiBzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycywgb3IgYW4gYGBfX2ludDEyOGBgLiBTdWNoIGFcbit2YWx1ZSBpcyByZXR1cm5lZCBpbiB0aGUgcmVnaXN0ZXIgcGFpciBSMDpSMiwgbWF0Y2hpbmcgdGhlIGNvbnZlbnRpb24gTExWTVxuK3VzZXMgZm9yIHRoZSBCUEYgdGFyZ2V0OiB0aGUgZmlyc3QgOCBieXRlcyBpbiBSMCBhbmQgdGhlIHNlY29uZCA4IGJ5dGVzIGluIFIyLlxuK0Egc3RydWN0IG9yIHVuaW9uIG9mIDggYnl0ZXMgb3IgbGVzcyBpcyByZXR1cm5lZCBpbiBSMCBhbG9uZS5cbiBcbiA6OlxuIFxuQEAgLTYyMCwxMCArNjI3LDEwIEBAIHVzZWQgd2hlbiB0aGUgcHJvZ3JhbSBpcyBKSVRlZCwgc2luY2UgdGhlIGludGVycHJldGVyIHByb3BhZ2F0ZXMgb25seSBSMCBvdXQgb2ZcbiBhIHN1YnByb2dyYW06IHdpdGhvdXQgYSBKSVQgdGhlIHJldHVybiB2YWx1ZSBzdGF5cyBpbiBSMCBhbG9uZSwgYW5kIGEgY2FsbGVyXG4gcmVhZGluZyBSMiBpcyByZWplY3RlZCBmb3IgcmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHJlZ2lzdGVyLiBBIGdsb2JhbFxuIHN1YnByb2dyYW0gaXMgdmVyaWZpZWQgaW4gaXNvbGF0aW9uLCBzbyBpdHMgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIHJldHVybiBpc1xuLXJlc3RyaWN0ZWQgdG8gc2NhbGFycyBqdXN0IGxpa2UgYSBrZnVuYydzOyBhIHN0YXRpYyBzdWJwcm9ncmFtIGlzIHZlcmlmaWVkXG4taW5saW5lIGFuZCBoYXMgbm8gc3VjaCByZXN0cmljdGlvbi4gVGhlIG1haW4gcHJvZ3JhbSBpcyBub3QgY292ZXJlZDogaXRzIHJldHVyblxuLXZhbHVlIGlzIHRoZSBwcm9ncmFtJ3MgZXhpdCBjb2RlLCByZWFkIG91dCBvZiBSMCBhbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlclxuLWhhbGYgaXMgbmV2ZXIgbG9va2VkIGF0LlxuK3Jlc3RyaWN0ZWQgdG8gc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMganVzdCBsaWtlIGEga2Z1bmMnczsgYSBzdGF0aWNcbitzdWJwcm9ncmFtIGlzIHZlcmlmaWVkIGlubGluZSBhbmQgaGFzIG5vIHN1Y2ggcmVzdHJpY3Rpb24uIFRoZSBtYWluIHByb2dyYW0gaXNcbitub3QgY292ZXJlZDogaXRzIHJldHVybiB2YWx1ZSBpcyB0aGUgcHJvZ3JhbSdzIGV4aXQgY29kZSwgcmVhZCBvdXQgb2YgUjBcbithbG9uZSwgc28gYSBkZWNsYXJlZCB1cHBlciBoYWxmIGlzIG5ldmVyIGxvb2tlZCBhdC5cbiBcbiBBIGdsb2JhbCBzdWJwcm9ncmFtIG11c3QgbGVhdmUgYSBzY2FsYXIgaW4gKmV2ZXJ5KiByZWdpc3RlciBvZiB0aGUgcGFpciwgc29cbiBib3RoIGhhbHZlcyBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgaGF2ZSB0byBiZSBhc3NpZ25lZC4gTGVhdmluZyB0aGUgdXBwZXIgaGFsZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnBmX3ZlcmlmaWVyLmggYi9pbmNsdWRlL2xpbnV4L2JwZl92ZXJpZmllci5oXG5pbmRleCAwMDRiMDY3ODU1MjFjLi5hZTlmNjA2NTM5ZjQxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuKysrIGIvaW5jbHVkZS9saW51eC9icGZfdmVyaWZpZXIuaFxuQEAgLTE0ODgsOCArMTQ4OCwxNSBAQCBpbnQgYnBmX2ptcF9vZmZzZXQoc3RydWN0IGJwZl9pbnNuICppbnNuKTtcbiBzdHJ1Y3QgYnBmX2lhcnJheSAqYnBmX2luc25fc3VjY2Vzc29ycyhzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCB1MzIgaWR4KTtcbiB2b2lkIGJwZl9mbXRfc3RhY2tfbWFzayhjaGFyICpidWYsIHNzaXplX3QgYnVmX3N6LCB1NjQgc3RhY2tfbWFzayk7XG4gYm9vbCBicGZfc3VicHJvZ19pc19nbG9iYWwoY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpO1xuLWJvb2wgYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCwgaW50IHJlYyk7XG4rXG4rLyogS2luZHMgb2YgbWVtYmVyIGEgYnktdmFsdWUgc3RydWN0IG9yIHVuaW9uIG1heSBiZSBjb21wb3NlZCBvZi4gKi9cbitlbnVtIGJ0Zl9tZW1iZXJfa2luZCB7XG4rXHRCVEZfTUVNQkVSX1NDQUxBUlx0PSBCSVQoMCksIC8qIGFuIGludCBvciBhbiBlbnVtICovXG4rXHRCVEZfTUVNQkVSX0FSRU5BX1BUUlx0PSBCSVQoMSksIC8qIGEgcG9pbnRlciBjYXJyeWluZyB0aGUgXCJhcmVuYVwiIHR5cGUgdGFnICovXG4rfTtcbitcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpO1xuIFxuIGludCBicGZfZmluZF9zdWJwcm9nKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBvZmYpO1xuIGJvb2wgYnBmX2lzX3Rocm93X2tmdW5jKHN0cnVjdCBicGZfaW5zbiAqaW5zbik7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idGYuaCBiL2luY2x1ZGUvbGludXgvYnRmLmhcbmluZGV4IDg5ZDVhNWM0ZjExNzEuLmRkZDBmNGYzMmQyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2J0Zi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2J0Zi5oXG5AQCAtMjM1LDYgKzIzNSw3IEBAIHN0cnVjdCBidGZfcmVjb3JkICpidGZfcGFyc2VfZmllbGRzKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlXG4gXHRcdFx0XHQgICAgdTMyIGZpZWxkX21hc2ssIHUzMiB2YWx1ZV9zaXplKTtcbiBpbnQgYnRmX2NoZWNrX2FuZF9maXh1cF9maWVsZHMoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCBzdHJ1Y3QgYnRmX3JlY29yZCAqcmVjKTtcbiBib29sIGJ0Zl90eXBlX2lzX3ZvaWQoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KTtcbitib29sIGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCk7XG4gczMyIGJ0Zl9maW5kX2J5X25hbWVfa2luZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IGNoYXIgKm5hbWUsIHU4IGtpbmQpO1xuIHMzMiBicGZfZmluZF9idGZfaWQoY29uc3QgY2hhciAqbmFtZSwgdTMyIGtpbmQsIHN0cnVjdCBidGYgKipidGZfcCk7XG4gc3RydWN0IGJ0ZiAqYnRmX2dldF9tb2R1bGVfYnRmKGNvbnN0IHN0cnVjdCBtb2R1bGUgKm1vZHVsZSk7XG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9idGYuYyBiL2tlcm5lbC9icGYvYnRmLmNcbmluZGV4IDkxYjhjZTc3ZjY5OWEuLmY2ZDgyYThmZDYxN2IgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2J0Zi5jXG4rKysgYi9rZXJuZWwvYnBmL2J0Zi5jXG5AQCAtMzUyMyw2ICszNTIzLDIyIEBAIHN0YXRpYyBpbnQgYnRmX3R5cGVfdGFnX3dhbGsoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK2Jvb2wgYnRmX3R5cGVfaXNfYXJlbmFfcHRyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0KVxuK3tcbitcdGlmICghYnRmX3R5cGVfaXNfcHRyKHQpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKHQgPSBidGZfdHlwZV9ieV9pZChidGYsIHQtXHUwMDNldHlwZSk7IGJ0Zl90eXBlX2lzX21vZGlmaWVyKHQpO1xuK1x0ICAgICB0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCB0LVx1MDAzZXR5cGUpKSB7XG4rXHRcdGlmICghYnRmX3R5cGVfaXNfdHlwZV90YWcodCkgfHwgYnRmX3R5cGVfa2ZsYWcodCkpXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdGlmICghc3RyY21wKF9fYnRmX25hbWVfYnlfb2Zmc2V0KGJ0ZiwgdC1cdTAwM2VuYW1lX29mZiksIFwiYXJlbmFcIikpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHR9XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYnRmX2ZpbmRfa3B0cihjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiBcdFx0XHQgdTMyIG9mZiwgaW50IHN6LCBzdHJ1Y3QgYnRmX2ZpZWxkX2luZm8gKmluZm8sIHUzMiBmaWVsZF9tYXNrKVxuIHtcbkBAIC03OTI3LDUxICs3OTQzLDE5IEBAIHN0YXRpYyBpbnQgYnRmX3NjYW5fZGVjbF90YWdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBidGZfc2Nhbl90eXBlX3RhZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgYnRmICpidGYsIHUzMiB0eXBlX2lkLFxuLVx0XHRcdCAgICAgIHUzMiAqdGFncylcbitzdGF0aWMgdm9pZCBidGZfc2Nhbl90eXBlX3RhZ3MoY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLCB1MzIgdHlwZV9pZCwgdTMyICp0YWdzKVxuIHtcbi1cdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX3R5cGVfdGFnX21hdGNoIGZ1bmNfdHlwZV90YWdzW10gPSB7XG4tXHRcdHsgXCJhcmVuYVwiLCBBUkdfVEFHX0FSRU5BIH0sXG4tXHR9O1xuLVx0c3RydWN0IGJ0Zl90eXBlX3RhZ193YWxrX2N0eCBjdHg7XG4tXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4tXHRpbnQgZXJyO1xuLVxuIFx0LyogRmluZCB0aGUgZmlyc3QgcG9pbnRlciB0eXBlIGluIHRoZSBjaGFpbi4gKi9cbi1cdHQgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIHR5cGVfaWQsIE5VTEwpO1xuK1x0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0eXBlX2lkLCBOVUxMKTtcbiBcbi1cdC8qXG4tXHQgKiBXZSBjdXJyZW50bHkgcmVqZWN0IHR5cGUgdGFncyBvbiBub24tcG9pbnRlciB0eXBlcyxcbi1cdCAqIHdoaWNoIG5laXRoZXIgTExWTSBub3IgR0NDIHN1cHBvcnQgYW55d2F5LlxuLVx0ICovXG4tXHRpZiAoIXQgfHwgIWJ0Zl90eXBlX2lzX3B0cih0KSlcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHRjdHgudCA9IHQ7XG4tXHRlcnIgPSBidGZfdHlwZV90YWdfd2FsayhidGYsIFx1MDAyNmN0eCwgZnVuY190eXBlX3RhZ3MsXG4tXHRcdFx0XHRBUlJBWV9TSVpFKGZ1bmNfdHlwZV90YWdzKSk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGJwZl9sb2coXHUwMDI2ZW52LVx1MDAzZWxvZyxcbi1cdFx0XHRcImZ1bmN0aW9uIHNpZ25hdHVyZSBtZW1iZXIgaGFzIG11bHRpcGxlIHR5cGUgdGFnc1xcblwiKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbi1cdCp0YWdzIHw9IGN0eC5yZXM7XG4tXG4tXHRyZXR1cm4gMDtcbitcdGlmIChidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbitcdFx0KnRhZ3MgfD0gQVJHX1RBR19BUkVOQTtcbiB9XG4gXG4gLyogQ2hlY2sgd2hldGhlciB0aGUgdHlwZSBpcyBhIHZhbGlkIHJldHVybiB0eXBlLiAqL1xuIHN0YXRpYyBpbnQgYnRmX3ZhbGlkYXRlX3JldHVybl90eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBidGYgKmJ0ZixcbiBcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgc3VicHJvZywgYm9vbCBpc19nbG9iYWwpXG4ge1xuLVx0dTMyIHRhZ3MgPSAwO1xuLVx0aW50IGVycjtcbi1cbi1cdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgdC1cdTAwM2V0eXBlLCBcdTAwMjZ0YWdzKTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4gXHR0ID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCB0LVx1MDAzZXR5cGUsIE5VTEwpO1xuIFxuIFx0LypcbkBAIC03OTc5LDcgKzc5NjMsNyBAQCBzdGF0aWMgaW50IGJ0Zl92YWxpZGF0ZV9yZXR1cm5fdHlwZShzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnRmICpidFxuIFx0ICogR2VuZXJhbCBhcmVuYSB2YXJpYWJsZXMgYXJlIG5vdCBhbGxvd2VkLCBzaW5jZSBpdCBtYWtlcyBubyBzZW5zZSB0byByZXR1cm4gYnkgdmFsdWVcbiBcdCAqIGEgdmFyaWFibGUgdGhhdCdzIG9uIHRoZSBoZWFwIGluIHRoZSBmaXJzdCBwbGFjZS5cbiBcdCAqL1xuLVx0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2ICh0YWdzIFx1MDAyNiBBUkdfVEFHX0FSRU5BKSBcdTAwMjZcdTAwMjYgYnRmX3R5cGVfaXNfcHRyKHQpKVxuK1x0aWYgKHN1YnByb2cgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX2FyZW5hX3B0cihidGYsIHQpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qIFdlIGFsd2F5cyBhY2NlcHQgdm9pZCBvciBzY2FsYXJzLiAqL1xuQEAgLTc5ODksMTMgKzc5NzMsMjIgQEAgc3RhdGljIGludCBidGZfdmFsaWRhdGVfcmV0dXJuX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJ0ZiAqYnRcbiBcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkgXHUwMDI2XHUwMDI2IHQtXHUwMDNlc2l6ZSBcdTAwM2M9IDE2KSB7XG4gXHRcdC8qXG4gXHRcdCAqIEEgZ2xvYmFsIGZ1bmN0aW9uJ3MgY2FsbGVyIG1vZGVscyB0aGUgcmV0dXJuIGFzIGFuIG9wYXF1ZVxuLVx0XHQgKiBzY2FsYXIgcGFpciwgc28gaXQgbWF5IG9ubHkgcmV0dXJuIHNjYWxhcnMgYnkgdmFsdWUuIEEgbG9jYWxcbi1cdFx0ICogZnVuY3Rpb24gaXMgdmVyaWZpZWQgaW5saW5lLCBzbyBhIHBvaW50ZXIgZmllbGQgc3RheXMgdHJhY2tlZFxuLVx0XHQgKiBhbmQgbmVlZHMgbm8gc3VjaCByZXN0cmljdGlvbi5cbitcdFx0ICogc2NhbGFyIHBhaXIsIHNvIGEgcG9pbnRlciBtZW1iZXIgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYVxuK1x0XHQgKiBzY2FsYXIgYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuIE9ubHlcbitcdFx0ICogc2NhbGFycyBhbmQgYXJlbmEgcG9pbnRlcnMgYXJlIGFsbG93ZWQ6IGFuIGFyZW5hIHBvaW50ZXIgaGFzXG4rXHRcdCAqIG5vIHByb3ZlbmFuY2UgdG8gbG9zZSwgc2luY2UgYSBwcm9ncmFtIG1heSBhbHJlYWR5IGRlcml2ZSBvbmVcbitcdFx0ICogZnJvbSBhbnkgc2NhbGFyIHdpdGggYWRkcl9zcGFjZV9jYXN0KCksIHdoaWNoIGNvbmZpbmVzIHRoZVxuK1x0XHQgKiByZXN1bHQgdG8gdGhlIGFyZW5hLiBBIGxvY2FsIGZ1bmN0aW9uIGlzIHZlcmlmaWVkIGlubGluZSwgc29cbitcdFx0ICogaXRzIGNhbGxlciByZWNlaXZlcyB0aGUgcmVhbCByZWdpc3RlciBzdGF0ZSBhbmQgYW55IG1lbWJlciBpc1xuK1x0XHQgKiBmaW5lLlxuIFx0XHQgKi9cbiBcdFx0Ym9vbCBsb2NhbF9mdW5jID0gc3VicHJvZyBcdTAwMjZcdTAwMjYgIWlzX2dsb2JhbDtcbitcdFx0dTMyIG1lbWJlcl9raW5kcyA9IEJURl9NRU1CRVJfU0NBTEFSO1xuK1xuK1x0XHRpZiAoc3VicHJvZylcbitcdFx0XHRtZW1iZXJfa2luZHMgfD0gQlRGX01FTUJFUl9BUkVOQV9QVFI7XG4gXG4tXHRcdGlmIChsb2NhbF9mdW5jIHx8IGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBidGYsIHQsIDApKVxuK1x0XHRpZiAobG9jYWxfZnVuYyB8fCBidGZfc3RydWN0X2lzX2NvbXBvc2VkX29mKGVudiwgYnRmLCB0LCBtZW1iZXJfa2luZHMpKVxuIFx0XHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTgwOTEsNyArODA4NCw4IEBAIGludCBidGZfcHJlcGFyZV9mdW5jX2FyZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgaW50IHN1YnByb2cpXG4gXHRcdGlmIChpc19nbG9iYWwpIHtcbiBcdFx0XHRicGZfbG9nKGxvZyxcbiBcdFx0XHRcdFwiR2xvYmFsIGZ1bmN0aW9uICVzKCkgaGFzIHVuc3VwcG9ydGVkIHJldHVybiB0eXBlLiBcIlxuLVx0XHRcdFx0XCJPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLlxcblwiLFxuK1x0XHRcdFx0XCJPbmx5IHZvaWQsIGEgc2NhbGFyLCBhbiBhcmVuYSBwb2ludGVyLCBvciBhIHN0cnVjdC91bmlvbiBvZiBcIlxuK1x0XHRcdFx0XCJzY2FsYXJzIGFuZCBhcmVuYSBwb2ludGVycyB1cCB0byAxNiBieXRlcyBpcyBzdXBwb3J0ZWQuXFxuXCIsXG4gXHRcdFx0XHR0bmFtZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycjtcbkBAIC04MTA2LDkgKzgxMDAsNyBAQCBpbnQgYnRmX3ByZXBhcmVfZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIGludCBzdWJwcm9nKVxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdGVyciA9IGJ0Zl9zY2FuX3R5cGVfdGFncyhlbnYsIGJ0ZiwgYXJnc1tpXS50eXBlLCBcdTAwMjZ0YWdzKTtcbi1cdFx0aWYgKGVycilcbi1cdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHRidGZfc2Nhbl90eXBlX3RhZ3MoYnRmLCBhcmdzW2ldLnR5cGUsIFx1MDAyNnRhZ3MpO1xuIFxuIFx0XHR0ID0gYnRmX3R5cGVfYnlfaWQoYnRmLCBhcmdzW2ldLnR5cGUpO1xuIFx0XHR3aGlsZSAoYnRmX3R5cGVfaXNfbW9kaWZpZXIodCkpXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi92ZXJpZmllci5jIGIva2VybmVsL2JwZi92ZXJpZmllci5jXG5pbmRleCBlMDM2YWUyMGJmNmI5Li45YTM2ODA4MTM2YzlhIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi92ZXJpZmllci5jXG4rKysgYi9rZXJuZWwvYnBmL3ZlcmlmaWVyLmNcbkBAIC05OTk1LDkgKzk5OTUsMTQgQEAgc3RhdGljIGludCBjaGVja19mdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0XHQgKi9cbiBcdFx0aWYgKCFyZXR1cm5zX3ZvaWQpIHtcbiBcdFx0XHRucmVncyA9IGJwZl9yZXRfcmVnX3BhaXIoZW52LCBzdWJwcm9nKSA/IDIgOiAxO1xuLVx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4tXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbitcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzWzBdKTtcbiBcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdFx0Zm9yIChpID0gMTsgaSBcdTAwM2MgbnJlZ3M7IGkrKykge1xuK1x0XHRcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2Y2FsbGVyLVx1MDAzZXJlZ3NbcmV0X3JlZ3NbaV1dLCBOVUxMLFxuK1x0XHRcdFx0XHRcdCAgIEJQRl9ESUFHX01PRF9XUklURSk7XG4rXHRcdFx0XHRtYXJrX3JlZ191bmtub3duKGVudiwgY2FsbGVyLVx1MDAzZXJlZ3MsIHJldF9yZWdzW2ldKTtcbitcdFx0XHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdFx0XHR9XG4gXHRcdH1cbiBcbiBcdFx0aWYgKGVudi1cdTAwM2VzdWJwcm9nX2luZm9bc3VicHJvZ10ubWlnaHRfdGhyb3cpIHtcbkBAIC0xMDQwMywxMCArMTA0MDgsMTQgQEAgc3RhdGljIGludCBwcmVwYXJlX2Z1bmNfZXhpdChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBpbnQgKmluc25faWR4KVxuIFx0XHQgKiByZXR1cm4gdG8gdGhlIGNhbGxlciB3aGF0ZXZlciB0aGUgY2FsbGVlIGhhZCBpbiB0aGVcbiBcdFx0ICogcmV0dXJuIHJlZ2lzdGVyKHMpXG4gXHRcdCAqL1xuLVx0XHRicGZfZGlhZ19tb2RfYmVnaW4oZW52LCBcdTAwMjZjYWxsZXItXHUwMDNlcmVnc1tCUEZfUkVHXzBdLCByMCwgQlBGX0RJQUdfTU9EX1dSSVRFKTtcbi1cdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkrKylcbi1cdFx0XHRjYWxsZXItXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV0gPSBjYWxsZWUtXHUwMDNlcmVnc1tyZXRfcmVnc1tpXV07XG4tXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJlZ3M7IGkrKykge1xuK1x0XHRcdHUzMiByZWdubyA9IHJldF9yZWdzW2ldO1xuK1xuK1x0XHRcdGJwZl9kaWFnX21vZF9iZWdpbihlbnYsIFx1MDAyNmNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSwgXHUwMDI2Y2FsbGVlLVx1MDAzZXJlZ3NbcmVnbm9dLFxuK1x0XHRcdFx0XHQgICBCUEZfRElBR19NT0RfV1JJVEUpO1xuK1x0XHRcdGNhbGxlci1cdTAwM2VyZWdzW3JlZ25vXSA9IGNhbGxlZS1cdTAwM2VyZWdzW3JlZ25vXTtcbitcdFx0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdC8qIGZvciBjYWxsYmFja3MgbGlrZSBicGZfbG9vcCBvciBicGZfZm9yX2VhY2hfbWFwX2VsZW0gZ28gYmFjayB0byBjYWxsc2l0ZSxcbkBAIC0xMTM0MiwxNSArMTEzNTEsMzMgQEAgc3RhdGljIGludCBjaGVja19oZWxwZXJfY2FsbChzdHJ1Y3QgYnBmX3ZlcmlmaWVyX2VudiAqZW52LCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcbiAvKlxuICAqIE1hcmsgdGhlIHJlZ2lzdGVyKHMpIGhvbGRpbmcgYSBAc2l6ZSBieXRlIGtmdW5jIHJldHVybiB2YWx1ZSBhcyB1bmtub3duXG4tICogc2NhbGFycy4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlciBwYWlyIGFyZSB0cmVhdGVkIHRoZSBzYW1lIHdheS5cbisgKiBzY2FsYXJzIGFuZCByZXR1cm4gaG93IG1hbnkgcmVnaXN0ZXJzIHRoYXQgdG9vay4gQm90aCBoYWx2ZXMgb2YgYSByZWdpc3RlclxuKyAqIHBhaXIgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgd2F5LlxuKyAqXG4rICogUjAgaXMgd3JpdHRlbiBpbiB0aGUgZGlhZ25vc3RpYyBtb2RpZmljYXRpb24gc2NvcGUgdGhlIGNhbGxlciBvcGVuZWQgYmVmb3JlXG4rICogdGhlIGNhbGxlci1zYXZlZCBzY3J1Yiwgc2luY2UgUjAgZ2V0cyBubyBzY3J1YiByZWNvcmQgb2YgaXRzIG93biBhbmQgdGhhdFxuKyAqIHNjb3BlIGlzIHdoYXQgY2FycmllcyBpdHMgcHJlLWNhbGwgdmFsdWUgaW50byB0aGUgaGlzdG9yeS4gQSBzY29wZSB0cmFja3MgYVxuKyAqIHNpbmdsZSByZWdpc3RlciBhbmQgZG9lcyBub3QgbmVzdCwgc28gY2xvc2UgaXQgYmVmb3JlIHJlY29yZGluZyB0aGUgcmVzdCBvZlxuKyAqIHRoZSByZXR1cm4gdmFsdWUuIEEgdmFsdWUgdGhhdCBmaXRzIGluIFIwIGxlYXZlcyB0aGUgY2FsbGVyJ3Mgc2NvcGUgb3BlbiBmb3JcbisgKiB0aGUgY2FsbGVyIHRvIGNsb3NlLCBzbyBhIGxhdGVyIHdyaXRlIHRvIFIwIHN0aWxsIGxhbmRzIGluIGl0LlxuICAqL1xuLXN0YXRpYyB2b2lkIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbi1cdFx0XHRcdHN0cnVjdCBicGZfcmVnX3N0YXRlICpyZWdzLCB1MzIgc2l6ZSlcbitzdGF0aWMgdTMyIG1hcmtfa2Z1bmNfcmV0X3JlZ3Moc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgICAgc3RydWN0IGJwZl9yZWdfc3RhdGUgKnJlZ3MsIHUzMiBzaXplKVxuIHtcbiBcdHUzMiBpLCBucmVncyA9IHJldF9yZWdzX2NudChzaXplKTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yZWdzOyBpKyspXG4rXHRtYXJrX3JlZ191bmtub3duKGVudiwgcmVncywgcmV0X3JlZ3NbMF0pO1xuK1x0aWYgKG5yZWdzID09IDEpXG4rXHRcdHJldHVybiBucmVncztcbitcbitcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdGZvciAoaSA9IDE7IGkgXHUwMDNjIG5yZWdzOyBpKyspIHtcbitcdFx0YnBmX2RpYWdfbW9kX2JlZ2luKGVudiwgXHUwMDI2cmVnc1tyZXRfcmVnc1tpXV0sIE5VTEwsIEJQRl9ESUFHX01PRF9XUklURSk7XG4gXHRcdG1hcmtfcmVnX3Vua25vd24oZW52LCByZWdzLCByZXRfcmVnc1tpXSk7XG4rXHRcdGJwZl9kaWFnX21vZF9lbmQoZW52KTtcbitcdH1cbitcbitcdHJldHVybiBucmVncztcbiB9XG4gXG4gc3RhdGljIGJvb2wgaXNfa2Z1bmNfYWNxdWlyZShzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEpXG5AQCAtMTE2MTksMTAgKzExNjQ2LDMzIEBAIHN0YXRpYyBib29sIGlzX2tmdW5jX2FyZ19pbXBsaWNpdChjb25zdCBzdHJ1Y3QgYnBmX2NhbGxfYXJnX21ldGEgKm1ldGEsIHUzMiBhcmdfXG4gXHRyZXR1cm4gYXJnbiBcdTAwM2M9IGFyZ19pZHg7XG4gfVxuIFxuLS8qIFJldHVybnMgdHJ1ZSBpZiBzdHJ1Y3QgaXMgY29tcG9zZWQgb2Ygc2NhbGFycywgNCBsZXZlbHMgb2YgbmVzdGluZyBhbGxvd2VkICovXG4tYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4tXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0Zixcbi1cdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCBpbnQgcmVjKVxuKyNkZWZpbmUgQlRGX01FTUJFUl9NQVhfREVQVEhcdDRcbisjZGVmaW5lIEJURl9NRU1CRVJfUEFUSF9MRU5cdDY0XG4rXG4rc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCB7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyW0JURl9NRU1CRVJfTUFYX0RFUFRIXTtcbitcdGludCBkZXB0aDtcbitcdGJvb2wgdG9vX2RlZXA7XG4rfTtcbitcbitzdGF0aWMgYm9vbCBidGZfbWVtYmVyX2tpbmRfYWxsb3dlZChjb25zdCBzdHJ1Y3QgYnRmICpidGYsIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbitcdFx0XHRcdCAgICB1MzIgbWVtYmVyX2tpbmRzKVxuK3tcbitcdGlmICgobWVtYmVyX2tpbmRzIFx1MDAyNiBCVEZfTUVNQkVSX1NDQUxBUikgXHUwMDI2XHUwMDI2IGJ0Zl90eXBlX2lzX3NjYWxhcih0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRpZiAoKG1lbWJlcl9raW5kcyBcdTAwMjYgQlRGX01FTUJFUl9BUkVOQV9QVFIpIFx1MDAyNlx1MDAyNiBidGZfdHlwZV9pc19hcmVuYV9wdHIoYnRmLCB0KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuKy8qXG4rICogUmV0dXJucyB0cnVlIGlmIGV2ZXJ5IG1lbWJlciBvZiBzdHJ1Y3QgQHQgaXMgb2YgYSBraW5kIGxpc3RlZCBpblxuKyAqIEBtZW1iZXJfa2luZHMsIEJURl9NRU1CRVJfTUFYX0RFUFRIIGxldmVscyBvZiBuZXN0aW5nIGFsbG93ZWQuIEFuIGFycmF5XG4rICogbWVtYmVyIGNvdW50cyBhcyBpdHMgZWxlbWVudCB0eXBlLlxuKyAqL1xuK3N0YXRpYyBib29sIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LCB1MzIgbWVtYmVyX2tpbmRzLCBpbnQgcmVjLFxuK1x0XHRcdFx0ICAgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKm1lbWJlcl90eXBlO1xuIFx0Y29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcjtcbkBAIC0xMTYzNiwyNyArMTE2ODYsNjUgQEAgYm9vbCBidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsXG4gXG4gXHRcdG1lbWJlcl90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoYnRmLCBtZW1iZXItXHUwMDNldHlwZSwgTlVMTCk7XG4gXHRcdGlmIChidGZfdHlwZV9pc19zdHJ1Y3QobWVtYmVyX3R5cGUpKSB7XG4tXHRcdFx0aWYgKHJlYyBcdTAwM2U9IDMpIHtcbitcdFx0XHRpZiAocmVjIFx1MDAzZT0gQlRGX01FTUJFUl9NQVhfREVQVEggLSAxKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcXG5cIik7XG4rXHRcdFx0XHRpZiAocGF0aClcbitcdFx0XHRcdFx0cGF0aC1cdTAwM2V0b29fZGVlcCA9IHRydWU7XG4gXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXHRcdFx0fVxuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIHJlYyArIDEpKVxuLVx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRcdGlmICghYnRmX3N0cnVjdF9tZW1iZXJfd2FsayhlbnYsIGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcyxcbitcdFx0XHRcdFx0XHQgICAgcmVjICsgMSwgcGF0aCkpXG4rXHRcdFx0XHRnb3RvIGJhZF9wYXRoO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChidGZfdHlwZV9pc19hcnJheShtZW1iZXJfdHlwZSkpIHtcbiBcdFx0XHRhcnJheSA9IGJ0Zl9hcnJheShtZW1iZXJfdHlwZSk7XG4gXHRcdFx0aWYgKCFhcnJheS1cdTAwM2VuZWxlbXMpXG4tXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdFx0XHRnb3RvIGJhZF9tZW1iZXI7XG4gXHRcdFx0bWVtYmVyX3R5cGUgPSBidGZfdHlwZV9za2lwX21vZGlmaWVycyhidGYsIGFycmF5LVx1MDAzZXR5cGUsIE5VTEwpO1xuLVx0XHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyKG1lbWJlcl90eXBlKSlcbi1cdFx0XHRcdHJldHVybiBmYWxzZTtcbi1cdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuLVx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcihtZW1iZXJfdHlwZSkpXG4tXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHRpZiAoIWJ0Zl9tZW1iZXJfa2luZF9hbGxvd2VkKGJ0ZiwgbWVtYmVyX3R5cGUsIG1lbWJlcl9raW5kcykpXG4rXHRcdFx0Z290byBiYWRfbWVtYmVyO1xuIFx0fVxuIFx0cmV0dXJuIHRydWU7XG4rXG4rYmFkX21lbWJlcjpcbitcdGlmIChwYXRoKVxuK1x0XHRwYXRoLVx1MDAzZWRlcHRoID0gcmVjICsgMTtcbitiYWRfcGF0aDpcbitcdGlmIChwYXRoIFx1MDAyNlx1MDAyNiBwYXRoLVx1MDAzZWRlcHRoKVxuK1x0XHRwYXRoLVx1MDAzZW1lbWJlcltyZWNdID0gbWVtYmVyO1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitib29sIGJ0Zl9zdHJ1Y3RfaXNfY29tcG9zZWRfb2Yoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuK1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsIHUzMiBtZW1iZXJfa2luZHMpXG4re1xuK1x0cmV0dXJuIGJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBidGYsIHQsIG1lbWJlcl9raW5kcywgMCwgTlVMTCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3Qoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbitcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdClcbit7XG4rXHRyZXR1cm4gYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZihlbnYsIGJ0ZiwgdCwgQlRGX01FTUJFUl9TQ0FMQVIpO1xuK31cbitcbitzdGF0aWMgdm9pZCBidGZfbWVtYmVyX3BhdGhfc3RyKGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCAqcGF0aCxcbitcdFx0XHRcdGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9zeilcbit7XG4rXHRzaXplX3QgbGVuID0gMDtcbitcdGludCBpO1xuK1xuK1x0YnVmWzBdID0gJ1xcMCc7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBwYXRoLVx1MDAzZWRlcHRoOyBpKyspIHtcbitcdFx0Y29uc3QgY2hhciAqbmFtZSA9IGJ0Zl9uYW1lX2J5X29mZnNldChidGYsIHBhdGgtXHUwMDNlbWVtYmVyW2ldLVx1MDAzZW5hbWVfb2ZmKTtcbitcbitcdFx0aWYgKCFuYW1lIHx8ICFuYW1lWzBdKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRsZW4gKz0gc2NucHJpbnRmKGJ1ZiArIGxlbiwgYnVmX3N6IC0gbGVuLCBcIiVzJXNcIiwgbGVuID8gXCIuXCIgOiBcIlwiLCBuYW1lKTtcbitcdH1cbiB9XG4gXG4gZW51bSBrZnVuY19wdHJfYXJnX3R5cGUge1xuQEAgLTEyMDM5LDcgKzEyMTI3LDcgQEAgZ2V0X2tmdW5jX2FyZ190eXBlKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWV0YSAqbWV0YSxcbiBcdFx0IChpc19rZnVuY19hcmdfbWVtX3NpemUobWV0YS1cdTAwM2VidGYsIFx1MDAyNmFyZ3NbYXJnICsgMV0pIHx8XG4gXHRcdCAgaXNfa2Z1bmNfYXJnX2NvbnN0X21lbV9zaXplKG1ldGEtXHUwMDNlYnRmLCBcdTAwMjZhcmdzW2FyZyArIDFdKSkpIHtcbiBcdFx0aWYgKCFidGZfdHlwZV9pc192b2lkKHJlZl90KSBcdTAwMjZcdTAwMjYgIWJ0Zl90eXBlX2lzX3NjYWxhcihyZWZfdCkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCwgMCkpIHtcbitcdFx0ICAgICFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90KSkge1xuIFx0XHRcdHZlcmJvc2UoZW52LCBcIiVzIHBvaW50ZXIgdHlwZSAlcyAlcyBtdXN0IHBvaW50IHRvIHZvaWQsIHNjYWxhciwgb3Igc3RydWN0IHdpdGggc2NhbGFyXFxuXCIsXG4gXHRcdFx0XHRyZWdfYXJnX25hbWUoZW52LCBhcmdubyksIGJ0Zl90eXBlX3N0cihyZWZfdCksIHJlZl90bmFtZSk7XG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtMTIwNTUsNyArMTIxNDMsNyBAQCBnZXRfa2Z1bmNfYXJnX3R5cGUoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9jYWxsX2FyZ19tZXRhICptZXRhLFxuIFx0XHQgKiBzY2FsYXJzLiBUaGUgYWNjZXNzIHNpemUgaXMgZGVyaXZlZCBmcm9tIHRoZSBwb2ludGVkLXRvIEJURiB0eXBlLlxuIFx0XHQgKi9cbiBcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXIocmVmX3QpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4rXHRcdCAgICAhYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIG1ldGEtXHUwMDNlYnRmLCByZWZfdCkpIHtcbiBcdFx0XHR2ZXJib3NlKGVudiwgXCIlcyBwb2ludGVyIHR5cGUgJXMgJXMgbXVzdCBwb2ludCB0byBzY2FsYXIsIG9yIHN0cnVjdCB3aXRoIHNjYWxhclxcblwiLFxuIFx0XHRcdFx0cmVnX2FyZ19uYW1lKGVudiwgYXJnbm8pLCBidGZfdHlwZV9zdHIocmVmX3QpLCByZWZfdG5hbWUpO1xuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTEzMTExLDcgKzEzMTk5LDcgQEAgc3RhdGljIGludCBjaGVja19rZnVuY19hcmdzKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdfbWVcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWJ0Zl90eXBlX2lzX3NjYWxhcl9zdHJ1Y3QoZW52LCBtZXRhLVx1MDAzZWJ0ZiwgcmVmX3QsIDApKSB7XG4rXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgbWV0YS1cdTAwM2VidGYsIHJlZl90KSkge1xuIFx0XHRcdFx0ZW51bSBicGZfcmVnX3R5cGUgcmVnMmJ0Zl90eXBlID0gbG9va3VwX3JlZzJidGZfaWRzKHJlZl9pZCk7XG4gXHRcdFx0XHRjb25zdCBjaGFyICpleHBlY3RlZF90eXBlO1xuIFxuQEAgLTEzNjUzLDcgKzEzNzQxLDcgQEAgc3RhdGljIGludCBjaGVja19zcGVjaWFsX2tmdW5jKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfY2FsbF9hcmdcbiBcbiBcdFx0c3RydWN0X21ldGEgPSBidGZfZmluZF9zdHJ1Y3RfbWV0YShyZXRfYnRmLCByZXRfYnRmX2lkKTtcbiBcdFx0aWYgKGlzX2JwZl9wZXJjcHVfb2JqX25ld19rZnVuYyhtZXRhLVx1MDAzZWZ1bmNfaWQpKSB7XG4tXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QsIDApKSB7XG4rXHRcdFx0aWYgKCFidGZfdHlwZV9pc19zY2FsYXJfc3RydWN0KGVudiwgcmV0X2J0ZiwgcmV0X3QpKSB7XG4gXHRcdFx0XHR2ZXJib3NlKGVudiwgXCJicGZfcGVyY3B1X29ial9uZXcgdHlwZSBJRCBhcmd1bWVudCBtdXN0IGJlIG9mIGEgc3RydWN0IG9mIHNjYWxhcnNcXG5cIik7XG4gXHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0XHR9XG5AQCAtMTM3NjcsNyArMTM4NTUsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0c3RydWN0IGJwZl9pbnNuX2F1eF9kYXRhICppbnNuX2F1eDtcbiBcdGNvbnN0IGNoYXIgKm9wZXJhdGlvbjtcbiBcdGludCBlcnIsIGluc25faWR4ID0gKmluc25faWR4X3A7XG4tXHR1MzIgaSwgbmFyZ3MsIHB0cl90eXBlX2lkO1xuK1x0dTMyIGksIG5hcmdzLCBwdHJfdHlwZV9pZCwgcmV0X25yZWdzID0gMTtcbiBcdHN0cnVjdCBicGZfa2Z1bmNfZGVzYyAqZGVzYztcbiBcdHN0cnVjdCBidGYgKmRlc2NfYnRmO1xuIFx0aW50IGlkO1xuQEAgLTE0MDIxLDI1ICsxNDEwOSw1OSBAQCBzdGF0aWMgaW50IGNoZWNrX2tmdW5jX2NhbGwoc3RydWN0IGJwZl92ZXJpZmllcl9lbnYgKmVudiwgc3RydWN0IGJwZl9pbnNuICppbnNuLFxuIFx0fVxuIFxuIFx0aWYgKGJ0Zl90eXBlX2lzX3NjYWxhcih0KSkge1xuLVx0XHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbitcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHRcdGlmIChtZXRhLmJ0ZiA9PSBidGZfdm1saW51eCBcdTAwMjZcdTAwMjYgKG1ldGEuZnVuY19pZCA9PSBzcGVjaWFsX2tmdW5jX2xpc3RbS0ZfYnBmX3Jlc19zcGluX2xvY2tdIHx8XG4gXHRcdCAgICBtZXRhLmZ1bmNfaWQgPT0gc3BlY2lhbF9rZnVuY19saXN0W0tGX2JwZl9yZXNfc3Bpbl9sb2NrX2lycXNhdmVdKSlcbiBcdFx0XHRfX21hcmtfcmVnX2NvbnN0X3plcm8oZW52LCBcdTAwMjZyZWdzW0JQRl9SRUdfMF0pO1xuIFx0fSBlbHNlIGlmIChidGZfdHlwZV9pc19zdHJ1Y3QodCkpIHtcbitcdFx0c3RydWN0IGJ0Zl9tZW1iZXJfcGF0aCBwYXRoID0ge307XG4rXHRcdGNvbnN0IGNoYXIgKm1lbWJlcl9ub3RlID0gXCJcIjtcbitcbiBcdFx0LypcbiBcdFx0ICogVGhlIHJldHVybmVkIHN0cnVjdCBjb21lcyBiYWNrIGFzIHJhdyByZWdpc3RlciBiaXRzIG1vZGVsZWRcbi1cdFx0ICogYXMgYW4gdW5rbm93biBzY2FsYXIsIHNvIGl0IG11c3QgY29udGFpbiBvbmx5IHNjYWxhcnM6XG4tXHRcdCAqIG90aGVyd2lzZSBhIHBvaW50ZXIgZmllbGQgd291bGQgYmUgbGF1bmRlcmVkIGludG8gYSBzY2FsYXJcbi1cdFx0ICogYW5kIGVzY2FwZSBwcm92ZW5hbmNlIGFuZCByZWZlcmVuY2UgdHJhY2tpbmcuXG4rXHRcdCAqIGFzIGFuIHVua25vd24gc2NhbGFyLCBzbyBhIHBvaW50ZXIgbWVtYmVyIHdvdWxkIGJlIGxhdW5kZXJlZFxuK1x0XHQgKiBpbnRvIGEgc2NhbGFyIGFuZCBlc2NhcGUgcHJvdmVuYW5jZSBhbmQgcmVmZXJlbmNlIHRyYWNraW5nLlxuK1x0XHQgKiBPbmx5IHNjYWxhcnMgYW5kIGFyZW5hIHBvaW50ZXJzIGFyZSBhbGxvd2VkOiBhbiBhcmVuYSBwb2ludGVyXG4rXHRcdCAqIGhhcyBubyBwcm92ZW5hbmNlIHRvIGxvc2UsIHNpbmNlIGEgcHJvZ3JhbSBtYXkgYWxyZWFkeSBkZXJpdmVcbitcdFx0ICogb25lIGZyb20gYW55IHNjYWxhciB3aXRoIGFkZHJfc3BhY2VfY2FzdCgpLCB3aGljaCBjb25maW5lcyB0aGVcbitcdFx0ICogcmVzdWx0IHRvIHRoZSBhcmVuYS5cbiBcdFx0ICovXG4tXHRcdGlmICghYnRmX3R5cGVfaXNfc2NhbGFyX3N0cnVjdChlbnYsIGRlc2NfYnRmLCB0LCAwKSkge1xuK1x0XHRpZiAoIWJ0Zl9zdHJ1Y3RfbWVtYmVyX3dhbGsoZW52LCBkZXNjX2J0ZiwgdCxcbitcdFx0XHRcdFx0ICAgIEJURl9NRU1CRVJfU0NBTEFSIHwgQlRGX01FTUJFUl9BUkVOQV9QVFIsIDAsIFx1MDAyNnBhdGgpKSB7XG4gXHRcdFx0dmVyYm9zZShlbnYsXG4tXHRcdFx0XHRcImtlcm5lbCBmdW5jdGlvbiAlcyByZXR1cm5zICVzICVzIHRoYXQgaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnNcXG5cIixcbitcdFx0XHRcdFwia2VybmVsIGZ1bmN0aW9uICVzIHJldHVybnMgJXMgJXMgdGhhdCBpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1xcblwiLFxuIFx0XHRcdFx0ZnVuY19uYW1lLCBidGZfdHlwZV9zdHIodCksXG4gXHRcdFx0XHRidGZfbmFtZV9ieV9vZmZzZXQoZGVzY19idGYsIHQtXHUwMDNlbmFtZV9vZmYpKTtcbitcdFx0XHRpZiAocGF0aC50b29fZGVlcCkge1xuK1x0XHRcdFx0bWVtYmVyX25vdGUgPSBicGZfZGlhZ19mbXQoXG4rXHRcdFx0XHRcdGVudiwgXCIgSXQgbmVzdHMgc3RydWN0cyBtb3JlIHRoYW4gJWQgbGV2ZWxzIGRlZXAuXCIsXG4rXHRcdFx0XHRcdEJURl9NRU1CRVJfTUFYX0RFUFRIKTtcbitcdFx0XHR9IGVsc2UgaWYgKHBhdGguZGVwdGgpIHtcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICpiYWQgPSBwYXRoLm1lbWJlcltwYXRoLmRlcHRoIC0gMV07XG4rXHRcdFx0XHRjaGFyIGJhZF9uYW1lW0JURl9NRU1CRVJfUEFUSF9MRU5dO1xuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IGJ0Zl90eXBlICpiYWRfdHlwZTtcbitcbitcdFx0XHRcdGJ0Zl9tZW1iZXJfcGF0aF9zdHIoZGVzY19idGYsIFx1MDAyNnBhdGgsIGJhZF9uYW1lLCBzaXplb2YoYmFkX25hbWUpKTtcbitcdFx0XHRcdGJhZF90eXBlID0gYnRmX3R5cGVfc2tpcF9tb2RpZmllcnMoZGVzY19idGYsIGJhZC1cdTAwM2V0eXBlLCBOVUxMKTtcbitcdFx0XHRcdHZlcmJvc2UoZW52LCBcIm1lbWJlciAnJXMnIGhhcyB0eXBlICVzXFxuXCIsIGJhZF9uYW1lLFxuK1x0XHRcdFx0XHRidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbitcdFx0XHRcdG1lbWJlcl9ub3RlID0gYnBmX2RpYWdfZm10KFxuK1x0XHRcdFx0XHRlbnYsXG4rXHRcdFx0XHRcdFwiIEl0cyBtZW1iZXIgJyVzJyBpcyAlcywgbm90IGEgc2NhbGFyIG9yIGFuIGFyZW5hIHBvaW50ZXIuXCIsXG4rXHRcdFx0XHRcdGJhZF9uYW1lLCBidGZfdHlwZV9zdHIoYmFkX3R5cGUpKTtcbitcdFx0XHR9XG4rXHRcdFx0YnBmX2RpYWdfcHJvZ3JhbV9zdHJ1Y3R1cmUoXG4rXHRcdFx0XHRlbnYsIGluc25faWR4LCBcInVuc3VwcG9ydGVkIGtlcm5lbCBmdW5jdGlvbiByZXR1cm4gdHlwZVwiLFxuK1x0XHRcdFx0XCJDYWxsIGEga2VybmVsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBvbmx5IHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnMgYnkgdmFsdWUuXCIsXG4rXHRcdFx0XHRcIiVzKCkgcmV0dXJucyAlcyAlcyBieSB2YWx1ZS4lcyBcIlxuK1x0XHRcdFx0XCJPbmx5IGtmdW5jcyByZXR1cm5pbmcgc2NhbGFyIHZhbHVlcyBvciBhcmVuYSBwb2ludGVycywgb3IgXCJcbitcdFx0XHRcdFwic3RydWN0dXJlcyBjb21wb3NlZCBvZiBzY2FsYXIgdmFsdWVzIG9yIGFyZW5hIHBvaW50ZXJzIGFyZSBcIlxuK1x0XHRcdFx0XCJzdXBwb3J0ZWQuXCIsXG4rXHRcdFx0XHRmdW5jX25hbWUsIGJ0Zl90eXBlX3N0cih0KSxcbitcdFx0XHRcdGJ0Zl9uYW1lX2J5X29mZnNldChkZXNjX2J0ZiwgdC1cdTAwM2VuYW1lX29mZiksIG1lbWJlcl9ub3RlKTtcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuLVx0XHRtYXJrX2tmdW5jX3JldF9yZWdzKGVudiwgcmVncywgdC1cdTAwM2VzaXplKTtcbitcdFx0cmV0X25yZWdzID0gbWFya19rZnVuY19yZXRfcmVncyhlbnYsIHJlZ3MsIHQtXHUwMDNlc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKGJ0Zl90eXBlX2lzX3B0cih0KSkge1xuIFx0XHRwdHJfdHlwZSA9IGJ0Zl90eXBlX3NraXBfbW9kaWZpZXJzKGRlc2NfYnRmLCB0LVx1MDAzZXR5cGUsIFx1MDAyNnB0cl90eXBlX2lkKTtcbiBcdFx0ZXJyID0gY2hlY2tfc3BlY2lhbF9rZnVuYyhlbnYsIFx1MDAyNm1ldGEsIHJlZ3MsIGluc25fYXV4LCBwdHJfdHlwZSwgZGVzY19idGYpO1xuQEAgLTE0MTcwLDcgKzE0MjkyLDggQEAgc3RhdGljIGludCBjaGVja19rZnVuY19jYWxsKHN0cnVjdCBicGZfdmVyaWZpZXJfZW52ICplbnYsIHN0cnVjdCBicGZfaW5zbiAqaW5zbixcbiBcdCAqIFJlY29yZCBSMCBiZWZvcmUgcHJvY2Vzc19pdGVyX25leHRfY2FsbCgpIHNuYXBzaG90cyB0aGUgYWx0ZXJuYXRlXG4gXHQgKiBpdGVyYXRvciBwYXRoJ3MgZGlhZ25vc3RpYyBwb3NpdGlvbi5cbiBcdCAqL1xuLVx0YnBmX2RpYWdfbW9kX2VuZChlbnYpO1xuK1x0aWYgKHJldF9ucmVncyA9PSAxKVxuK1x0XHRicGZfZGlhZ19tb2RfZW5kKGVudik7XG4gXG4gXHRpZiAoYnBmX2lzX2l0ZXJfbmV4dF9rZnVuYyhcdTAwMjZtZXRhKSkge1xuIFx0XHRlcnIgPSBwcm9jZXNzX2l0ZXJfbmV4dF9jYWxsKGVudiwgaW5zbl9pZHgsIFx1MDAyNm1ldGEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuaW5kZXggZTBiOTRlZDEwZjk0MS4uMDdkOWQ2ZTFkNmI4OCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9nX3Rlc3RzL2FnZ3JlZ2F0ZV9yZXQuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dfdGVzdHMvYWdncmVnYXRlX3JldC5jXG5AQCAtMSwxMSArMSw1MyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY3Rlc3RfcHJvZ3MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2JwZi9idGYuaFx1MDAzZVxuICNpbmNsdWRlIFwiYWdncmVnYXRlX3JldF9mdW5jLnNrZWwuaFwiXG4gI2luY2x1ZGUgXCJhZ2dyZWdhdGVfcmV0X2tmdW5jLnNrZWwuaFwiXG4rI2luY2x1ZGUgXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLnNrZWwuaFwiXG4rXG4rc3RhdGljIGJvb2wgdGVzdG1vZF9oYXNfYXJlbmFfdGFnZ2VkX21lbWJlcih2b2lkKVxuK3tcbitcdHN0cnVjdCBidGYgKnZtbGludXhfYnRmLCAqbW9kdWxlX2J0ZiA9IE5VTEw7XG4rXHRjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQ7XG4rXHRib29sIHRhZ2dlZCA9IGZhbHNlO1xuK1x0X19zMzIgaWQ7XG4rXG4rXHR2bWxpbnV4X2J0ZiA9IGJ0Zl9fbG9hZF92bWxpbnV4X2J0ZigpO1xuK1x0aWYgKCF2bWxpbnV4X2J0ZilcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0bW9kdWxlX2J0ZiA9IGJ0Zl9fbG9hZF9tb2R1bGVfYnRmKFwiYnBmX3Rlc3Rtb2RcIiwgdm1saW51eF9idGYpO1xuK1x0aWYgKCFtb2R1bGVfYnRmKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdC8qIHByb2dfdGVzdF9yZXRfYXJlbmE6OmEgaXMgJ3ZvaWQgX19hcmVuYV90YWcgKic6IFBUUiAtXHUwMDNlIFRZUEVfVEFHIC1cdTAwM2Ugdm9pZCAqL1xuK1x0aWQgPSBidGZfX2ZpbmRfYnlfbmFtZV9raW5kKG1vZHVsZV9idGYsIFwicHJvZ190ZXN0X3JldF9hcmVuYVwiLCBCVEZfS0lORF9TVFJVQ1QpO1xuK1x0aWYgKGlkIFx1MDAzYz0gMClcbitcdFx0Z290byBvdXQ7XG4rXG4rXHR0ID0gYnRmX190eXBlX2J5X2lkKG1vZHVsZV9idGYsIGJ0Zl9tZW1iZXJzKGJ0Zl9fdHlwZV9ieV9pZChtb2R1bGVfYnRmLCBpZCkpWzBdLnR5cGUpO1xuK1x0aWYgKCF0IHx8ICFidGZfaXNfcHRyKHQpKVxuK1x0XHRnb3RvIG91dDtcbitcbitcdHQgPSBidGZfX3R5cGVfYnlfaWQobW9kdWxlX2J0ZiwgdC1cdTAwM2V0eXBlKTtcbitcdHRhZ2dlZCA9IHQgXHUwMDI2XHUwMDI2IGJ0Zl9pc190eXBlX3RhZyh0KSBcdTAwMjZcdTAwMjZcbitcdFx0ICFzdHJjbXAoYnRmX19uYW1lX2J5X29mZnNldChtb2R1bGVfYnRmLCB0LVx1MDAzZW5hbWVfb2ZmKSwgXCJhcmVuYVwiKTtcbitcbitvdXQ6XG4rXHRidGZfX2ZyZWUobW9kdWxlX2J0Zik7XG4rXHRidGZfX2ZyZWUodm1saW51eF9idGYpO1xuK1xuK1x0cmV0dXJuIHRhZ2dlZDtcbit9XG4gXG4gdm9pZCB0ZXN0X2FnZ3JlZ2F0ZV9yZXQodm9pZClcbiB7XG4gXHRSVU5fVEVTVFMoYWdncmVnYXRlX3JldF9mdW5jKTtcbiBcdFJVTl9URVNUUyhhZ2dyZWdhdGVfcmV0X2tmdW5jKTtcbitcbitcdGlmICh0ZXN0bW9kX2hhc19hcmVuYV90YWdnZWRfbWVtYmVyKCkpXG4rXHRcdFJVTl9URVNUUyhhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hKTtcbitcdGVsc2VcbitcdFx0dGVzdF9fc2tpcCgpO1xuIH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbmluZGV4IDZmNjZmYzgyMmNlZGUuLmYwMDc3ZDk1MWEyNWQgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9mdW5jLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2Z1bmMuY1xuQEAgLTIsNiArMiw3IEBAXG4gLyogQ29weXJpZ2h0IChjKSAyMDI2IE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuIFxuIHR5cGVkZWYgdW5zaWduZWQgX19pbnQxMjggdTEyODtcbkBAIC0yMzQsNCArMjM1LDE0OSBAQCBfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF91bmlvbl9wdHJfZmFpbCh2b2lkKVxuIFxuICNlbmRpZlxuIFxuKy8qXG4rICogZ2NjIHJldHVybnMgYSBieS12YWx1ZSBzdHJ1Y3QgdGhyb3VnaCBhIGhpZGRlbiBwb2ludGVyLCBhbmQgZW1pdHMgdGhlXG4rICogJ3IwID0gcjEnIHJldHVybmluZyBpdCBhZnRlciB0aGUgX19uYWtlZCBib2R5J3MgZXhpdCwgbGVhdmluZyB0aGVcbisgKiBzdWJwcm9ncmFtIGZhbGxpbmcgdGhyb3VnaC4gQnVpbGQgdGhlc2Ugd2l0aCBjbGFuZyBvbmx5LlxuKyAqL1xuKyNpZiBkZWZpbmVkKF9fY2xhbmdfXylcbitcbitzdHJ1Y3QgYXJlbmFfcGFpciB7XG4rXHR2b2lkIF9fYXJlbmEgKmxvO1xuK1x0dm9pZCBfX2FyZW5hICpoaTtcbit9O1xuK1xuK3N0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIHtcbitcdHZvaWQgX19hcmVuYSAqcDtcbitcdF9fdTY0IHg7XG4rfTtcbitcbitzdHJ1Y3QgYXJlbmFfYXJyYXkge1xuK1x0dm9pZCBfX2FyZW5hICpwWzJdO1xuK307XG4rXG4rc3RydWN0IGFyZW5hX3NpbmdsZSB7XG4rXHR2b2lkIF9fYXJlbmEgKnA7XG4rfTtcbitcbit1bmlvbiBhcmVuYV91cGFpciB7XG4rXHR2b2lkIF9fYXJlbmEgKnA7XG4rXHRfX3U2NCBoYWx2ZXNbMl07XG4rfTtcbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9wYWlyIGdsb2JhbF9yZXRfYXJlbmFfcGFpcih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJyMiA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0KTtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX2xvYWRfaWZfSklUZWQoKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3BhaXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9wYWlyXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3BhaXIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9hbmRfc2NhbGFyIGdsb2JhbF9yZXRfYXJlbmFfYW5kX3NjYWxhcih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJyMiA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0KTtcbit9XG4rXG4rU0VDKFwidGNcIilcbitfX2xvYWRfaWZfSklUZWQoKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX2FuZF9zY2FsYXIodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9hbmRfc2NhbGFyXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX2FuZF9zY2FsYXIpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHN0cnVjdCBhcmVuYV9hcnJheSBnbG9iYWxfcmV0X2FyZW5hX2FycmF5KHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjAgPSAwO1wiXG4rXHRcInIyID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQpO1xuK31cbitcbitTRUMoXCJ0Y1wiKVxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4rX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9nbG9iYWxfYXJlbmFfYXJyYXkodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJjYWxsICVbZ2xvYmFsX3JldF9hcmVuYV9hcnJheV07XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9hcnJheSlcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK19fbmFrZWQgc3RydWN0IGFyZW5hX3NpbmdsZSBnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQpO1xuK31cbitcbitTRUMoXCJ0Y1wiKVxuK19fc3VjY2VzcyBfX3JldHZhbCgwKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfZ2xvYmFsX2FyZW5hX3NpbmdsZSh2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3NpbmdsZV07XCJcbitcdFwicjAgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdDpcbitcdDogX19pbW0oZ2xvYmFsX3JldF9hcmVuYV9zaW5nbGUpXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbitfX25ha2VkIHVuaW9uIGFyZW5hX3VwYWlyIGdsb2JhbF9yZXRfYXJlbmFfdW5pb24odm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMCA9IDA7XCJcbitcdFwicjIgPSAwO1wiXG4rXHRcImV4aXQ7XCJcbitcdCk7XG4rfVxuK1xuK1NFQyhcInRjXCIpXG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2dsb2JhbF9hcmVuYV91bmlvbih2b2lkKVxuK3tcbitcdGFzbSB2b2xhdGlsZSAoXG4rXHRcImNhbGwgJVtnbG9iYWxfcmV0X2FyZW5hX3VuaW9uXTtcIlxuK1x0XCJyMCA9IDA7XCJcbitcdFwiZXhpdDtcIlxuK1x0OlxuK1x0OiBfX2ltbShnbG9iYWxfcmV0X2FyZW5hX3VuaW9uKVxuK1x0OiBfX2Nsb2JiZXJfYWxsKTtcbit9XG4rXG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuYy5jXG5pbmRleCBkNmI0MjJhZTk3ODRiLi5lOWM4MmRmOGVmYjI2IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmMuY1xuQEAgLTE4LDYgKzE4LDggQEAgdm9pZCBfX2tmdW5jX2J0Zl9yb290KHZvaWQpXG4gXHQ6IFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOCksXG4gXHQgIFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKSxcbiBcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKSxcbitcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfbmVzdGVkKSxcbitcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCksXG4gXHQgIFwiclwiKFx1MDAyNmJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKSxcbiBcdCAgXCJyXCIoXHUwMDI2YnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKSk7XG4gfVxuQEAgLTcxLDcgKzczLDggQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19mYXN0Y2FsbF9mYWlsKHZvaWQpXG4gXG4gU0VDKFwidGNcIilcbiBfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuLV9fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzXCIpXG4rX19mYWlsdXJlIF9fbXNnKFwiaXMgbm90IGNvbXBvc2VkIG9mIHNjYWxhcnMgb3IgYXJlbmEgcG9pbnRlcnNcIilcbitfX21zZyhcIm1lbWJlciAncCcgaGFzIHR5cGUgUFRSXCIpXG4gX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIHtcbiBcdGFzbSB2b2xhdGlsZSAoXG5AQCAtODQsNiArODcsMzcgQEAgX19uYWtlZCBpbnQgYWdncmVnYXRlX3JldF9rZnVuY19wdHJfZmFpbCh2b2lkKVxuIFx0OiBfX2Nsb2JiZXJfYWxsKTtcbiB9XG4gXG4rU0VDKFwidGNcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ2luLnAnIGhhcyB0eXBlIFBUUlwiKVxuK19fbmFrZWQgaW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfbmVzdGVkX3B0cl9mYWlsKHZvaWQpXG4re1xuK1x0YXNtIHZvbGF0aWxlIChcbitcdFwicjEgPSAwO1wiXG4rXHRcImNhbGwgJVticGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWRdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X25lc3RlZClcbitcdDogX19jbG9iYmVyX2FsbCk7XG4rfVxuK1xuK1NFQyhcInRjXCIpXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbitfX2ZhaWx1cmUgX19tc2coXCJtYXggc3RydWN0IG5lc3RpbmcgZGVwdGggZXhjZWVkZWRcIilcbitfX25ha2VkIGludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX3Rvb19kZWVwX2ZhaWwodm9pZClcbit7XG4rXHRhc20gdm9sYXRpbGUgKFxuK1x0XCJyMSA9IDA7XCJcbitcdFwiY2FsbCAlW2JwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXBdO1wiXG4rXHRcInIwID0gMDtcIlxuK1x0XCJleGl0O1wiXG4rXHQ6XG4rXHQ6IF9faW1tKGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4rXHQ6IF9fY2xvYmJlcl9hbGwpO1xuK31cbitcbiBTRUMoXCJ0Y1wiKVxuIF9fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4gX19mYWlsdXJlIF9fbXNnKFwiUjIgIXJlYWRfb2tcIilcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL2FnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmEuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjk0YzM1ZTFiNTQ3Y2Rcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9hZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hLmNcbkBAIC0wLDAgKzEsMTI5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbisvKiBDb3B5cmlnaHQgKGMpIDIwMjYgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4rI2luY2x1ZGUgXHUwMDNjdm1saW51eC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYnBmL2JwZl9oZWxwZXJzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NicGZfYXJlbmFfY29tbW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcImJwZl9taXNjLmhcIlxuKyNpbmNsdWRlIFwiLi4vdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXCJcbitcbisjaWYgZGVmaW5lZChfX2NsYW5nX21ham9yX18pIFx1MDAyNlx1MDAyNiBfX2NsYW5nX21ham9yX18gXHUwMDNlPSAyM1xuK1xuK3N0cnVjdCB7XG4rXHRfX3VpbnQodHlwZSwgQlBGX01BUF9UWVBFX0FSRU5BKTtcbitcdF9fdWludChtYXBfZmxhZ3MsIEJQRl9GX01NQVBBQkxFKTtcbitcdF9fdWludChtYXhfZW50cmllcywgMik7XG4rfSBhcmVuYSBTRUMoXCIubWFwc1wiKTtcbitcbisvKlxuKyAqIEEgcmV0dXJuZWQgbWVtYmVyIGNhcnJpZXMgdGhlIGFyZW5hIHR5cGUgdGFnIGJ1dCBub3QgdGhlIGFkZHJlc3Mgc3BhY2VcbisgKiBxdWFsaWZpZXIsIHNvIHRoZSBwcm9ncmFtIGNhc3RzIGl0IGludG8gdGhlIGFyZW5hIGFkZHJlc3Mgc3BhY2UgaXRzZWxmXG4rICogcmF0aGVyIHRoYW4gdGhlIGNvbXBpbGVyIGRvaW5nIGl0LlxuKyAqL1xuKyNkZWZpbmUgYXJlbmFfcHRyKHApICgodTMyIHZvbGF0aWxlIF9fYXJlbmEgKikocCkpXG4rXG4rU0VDKFwic3lzY2FsbFwiKVxuK19fYXJjaF94ODZfNjQgX19hcmNoX2FybTY0XG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYSh2b2lkICpjdHgpXG4re1xuK1x0dTMyIHZvbGF0aWxlIF9fYXJlbmEgKnBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqYSwgKmI7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSByO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEJvdGggaGFsdmVzIGNvbWUgYmFjayBpbiBSMDpSMiwgcG9pbnRpbmcgYXQgcGFnZSBhbmQgcGFnZSArIDQuICovXG4rXHRyID0gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoKHU2NClwYWdlKTtcbitcdGlmICghci5hIHx8ICFyLmIpXG4rXHRcdHJldHVybiAyO1xuK1xuK1x0YSA9IGFyZW5hX3B0cihyLmEpO1xuK1x0YiA9IGFyZW5hX3B0cihyLmIpO1xuK1x0KmEgPSAxO1xuK1x0KmIgPSAyO1xuK1x0aWYgKCphICE9IDEpXG4rXHRcdHJldHVybiAzO1xuK1x0aWYgKCpiICE9IDIpXG4rXHRcdHJldHVybiA0O1xuK1xuK1x0LyogVGhlIGhhbHZlcyBhcmUgdGhlIGZpcnN0IHR3byBzbG90cyBvZiB0aGUgcGFnZSB0aGUgcHJvZ3JhbSBhbGxvY2F0ZWQuICovXG4rXHRwYWdlWzBdID0gNztcbitcdGlmICgqYSAhPSA3KVxuK1x0XHRyZXR1cm4gNTtcbitcdHBhZ2VbMV0gPSA5O1xuK1x0aWYgKCpiICE9IDkpXG4rXHRcdHJldHVybiA2O1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fbG9hZF9pZl9KSVRlZCgpXG4rX19zdWNjZXNzIF9fcmV0dmFsKDApXG4raW50IGFnZ3JlZ2F0ZV9yZXRfa2Z1bmNfYXJlbmFfbWl4ZWQodm9pZCAqY3R4KVxuK3tcbitcdHUzMiBfX2FyZW5hICpwYWdlID0gYnBmX2FyZW5hX2FsbG9jX3BhZ2VzKFx1MDAyNmFyZW5hLCBOVUxMLCAxLCBOVU1BX05PX05PREUsIDApO1xuK1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfbWl4ZWQgcjtcbitcdHUzMiB2b2xhdGlsZSBfX2FyZW5hICpwO1xuK1xuK1x0aWYgKCFwYWdlKVxuK1x0XHRyZXR1cm4gMTtcbitcbitcdC8qIEFuIGFyZW5hIHBvaW50ZXIgaW4gUjAgYmVzaWRlIGEgc2NhbGFyIGluIFIyLiAqL1xuK1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKCh1NjQpcGFnZSk7XG4rXHRpZiAoIXIucClcbitcdFx0cmV0dXJuIDI7XG4rXHRpZiAoci50YWcgIT0gMHhiZWVmKVxuK1x0XHRyZXR1cm4gMztcbitcbitcdHAgPSBhcmVuYV9wdHIoci5wKTtcbitcdCpwID0gMztcbitcdGlmICgqcCAhPSAzKVxuK1x0XHRyZXR1cm4gNDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19hcmNoX3g4Nl82NCBfX2FyY2hfYXJtNjRcbitfX2ZhaWx1cmUgX19tc2coXCJpcyBub3QgY29tcG9zZWQgb2Ygc2NhbGFycyBvciBhcmVuYSBwb2ludGVyc1wiKVxuK19fbXNnKFwibWVtYmVyICdiJyBoYXMgdHlwZSBQVFJcIilcbitpbnQgYWdncmVnYXRlX3JldF9rZnVuY19hcmVuYV91bnRhZ2dlZF9mYWlsKHZvaWQgKmN0eClcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCByO1xuK1xuK1x0ciA9IGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkKDApO1xuK1xuK1x0cmV0dXJuIHIuYSA9PSByLmI7XG4rfVxuK1xuK1NFQyhcInN5c2NhbGxcIilcbitfX2FyY2hfeDg2XzY0IF9fYXJjaF9hcm02NFxuK19fZmFpbHVyZSBfX21zZyhcImlzIG5vdCBjb21wb3NlZCBvZiBzY2FsYXJzIG9yIGFyZW5hIHBvaW50ZXJzXCIpXG4rX19tc2coXCJtZW1iZXIgJ2InIGhhcyB0eXBlIFBUUlwiKVxuK2ludCBhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hX3VuaW9uX2ZhaWwodm9pZCAqY3R4KVxuK3tcbitcdHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gcjtcbitcbitcdHIgPSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbigwKTtcbitcbitcdHJldHVybiByLmEgPT0gci5iO1xuK31cbitcbisjZWxzZVxuK1xuK1NFQyhcInNvY2tldFwiKVxuK19fZGVzY3JpcHRpb24oXCJhZ2dyZWdhdGVfcmV0X2tmdW5jX2FyZW5hOiBuZWVkcyBMTFZNIDIzLCBkdW1teSB0ZXN0XCIpXG4rX19za2lwKFwibmVlZHMgTExWTSAyM1wiKVxuK19fc3VjY2Vzc1xuK2ludCBkdW1teV90ZXN0KHZvaWQpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKyNlbmRpZlxuK1xuK2NoYXIgX2xpY2Vuc2VbXSBTRUMoXCJsaWNlbnNlXCIpID0gXCJHUExcIjtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbmluZGV4IDk3MDhlZmI5MzY4M2IuLmNkZTQ5ODJlOTk4OTYgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvZXhjZXB0aW9uc19mYWlsLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9leGNlcHRpb25zX2ZhaWwuY1xuQEAgLTYwLDcgKzYwLDcgQEAgX19ub2lubGluZSBpbnQgZXhjZXB0aW9uX2NiX29rX2FyZ19zbWFsbChpbnQgYSlcbiBcbiBTRUMoXCI/dGNcIilcbiBfX2V4Y2VwdGlvbl9jYihleGNlcHRpb25fY2JfYmFkX3JldF90eXBlMSlcbi1fX2ZhaWx1cmUgX19tc2coXCJPbmx5IHZvaWQsIHNjYWxhciwgb3IgYSBzY2FsYXItb25seSBzdHJ1Y3QvdW5pb24gdXAgdG8gMTYgYnl0ZXMgaXMgc3VwcG9ydGVkLlwiKVxuK19fZmFpbHVyZSBfX21zZyhcIk9ubHkgdm9pZCwgYSBzY2FsYXIsIGFuIGFyZW5hIHBvaW50ZXIsIG9yIGEgc3RydWN0L3VuaW9uIG9mIHNjYWxhcnNcIilcbiBpbnQgcmVqZWN0X2V4Y2VwdGlvbl9jYl90eXBlXzEoc3RydWN0IF9fc2tfYnVmZiAqY3R4KVxuIHtcbiBcdGJwZl90aHJvdygwKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvdmVyaWZpZXJfYXJlbmEuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5pbmRleCA4MTVmMzQyZWI0YjA1Li42NzJhM2FhZGQ5Y2IyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL3ZlcmlmaWVyX2FyZW5hLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy92ZXJpZmllcl9hcmVuYS5jXG5AQCAtNzM0LDQgKzczNCw1MiBAQCBpbnQgY2hlY2tfYXJlbmFfYXJnX3JldCh2b2lkICpjdHgpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rI2lmIGRlZmluZWQoX19jbGFuZ19tYWpvcl9fKSBcdTAwMjZcdTAwMjYgX19jbGFuZ19tYWpvcl9fIFx1MDAzZT0gMjNcbitcbitzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHtcbitcdHUzMiBfX2FyZW5hICpmaXJzdDtcbitcdHUzMiBfX2FyZW5hICpzZWNvbmQ7XG4rfTtcbitcbitfX3dlYWsgc3RydWN0IGFyZW5hX3BhZ2VfcGFpciBzcGxpdF9hcmVuYV9wYWdlKHUzMiBfX2FyZW5hICpwYWdlKVxuK3tcbitcdHN0cnVjdCBhcmVuYV9wYWdlX3BhaXIgcGFpcjtcbitcbitcdHBhaXIuZmlyc3QgPSBwYWdlO1xuK1x0cGFpci5zZWNvbmQgPSBwYWdlICsgMTtcbitcbitcdHJldHVybiBwYWlyO1xuK31cbitcbitTRUMoXCJzeXNjYWxsXCIpXG4rX19sb2FkX2lmX0pJVGVkKClcbitfX3N1Y2Nlc3MgX19yZXR2YWwoMClcbitpbnQgY2hlY2tfYXJlbmFfc3RydWN0X3JldCh2b2lkICpjdHgpXG4re1xuK1x0dTMyIF9fYXJlbmEgKnBhZ2UgPSBicGZfYXJlbmFfYWxsb2NfcGFnZXMoXHUwMDI2YXJlbmEsIE5VTEwsIDEsIE5VTUFfTk9fTk9ERSwgMCk7XG4rXHR1MzIgdm9sYXRpbGUgX19hcmVuYSAqZmlyc3QsICpzZWNvbmQ7XG4rXHRzdHJ1Y3QgYXJlbmFfcGFnZV9wYWlyIHBhaXI7XG4rXG4rXHRpZiAoIXBhZ2UpXG4rXHRcdHJldHVybiAxO1xuK1xuK1x0cGFpciA9IHNwbGl0X2FyZW5hX3BhZ2UocGFnZSk7XG4rXHRpZiAoIXBhaXIuZmlyc3QgfHwgIXBhaXIuc2Vjb25kKVxuK1x0XHRyZXR1cm4gMjtcbitcbitcdC8qIEJvdGggaGFsdmVzIG9mIHRoZSBwYWlyIG11c3Qgc3RpbGwgYmUgdXNhYmxlIGFzIGFyZW5hIHBvaW50ZXJzLiAqL1xuK1x0Zmlyc3QgPSBwYWlyLmZpcnN0O1xuK1x0c2Vjb25kID0gcGFpci5zZWNvbmQ7XG4rXHQqZmlyc3QgPSAxO1xuK1x0KnNlY29uZCA9IDI7XG4rXHRpZiAoKmZpcnN0ICE9IDEpXG4rXHRcdHJldHVybiAzO1xuK1x0aWYgKCpzZWNvbmQgIT0gMilcbitcdFx0cmV0dXJuIDQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rI2VuZGlmXG4rXG4gY2hhciBfbGljZW5zZVtdIFNFQyhcImxpY2Vuc2VcIikgPSBcIkdQTFwiO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZC5jXG5pbmRleCA4NTBjZjRmODMwYzQ4Li4wZWYyY2U4NzVkNzFkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2QuY1xuQEAgLTk4MSw2ICs5ODEsNDggQEAgX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfcHRyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X3B0cih1NjQgdGFnKVxuIFx0cmV0dXJuIHI7XG4gfVxuIFxuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKHU2NCBhZGRyKVxuK3tcbitcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hIHIgPSB7IC5hID0gKHZvaWQgKilhZGRyLCAuYiA9ICh2b2lkICopKGFkZHIgKyA0KSB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKHU2NCBhZGRyKVxuK3tcbitcdHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHIgPSB7IC5wID0gKHZvaWQgKilhZGRyLCAudGFnID0gMHhiZWVmIH07XG4rXG4rXHRyZXR1cm4gcjtcbit9XG4rXG4rX19icGZfa2Z1bmMgc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQodTY0IGFkZHIpXG4re1xuK1x0c3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQgciA9IHsgLmEgPSAodm9pZCAqKWFkZHIsIC5iID0gTlVMTCB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHVuaW9uIHByb2dfdGVzdF9yZXRfYXJlbmFfdW5pb24gYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW5pb24odTY0IGFkZHIpXG4re1xuK1x0dW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiByID0geyAuYSA9ICh2b2lkICopYWRkciB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQodTY0IHRhZylcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9uZXN0ZWQgciA9IHsgLmluID0geyAucCA9IE5VTEwgfSwgLnRhZyA9IHRhZyB9O1xuK1xuK1x0cmV0dXJuIHI7XG4rfVxuK1xuK19fYnBmX2tmdW5jIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X2RlZXAgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZGVlcCh1NjQgdilcbit7XG4rXHRzdHJ1Y3QgcHJvZ190ZXN0X3JldF9kZWVwIHIgPSB7IC5sMSA9IHsgLmwyID0geyAubDMgPSB7IC5sNCA9IHsgLnYgPSB2IH0gfSB9IH0gfTtcbitcbitcdHJldHVybiByO1xuK31cbitcbiBfX2JwZl9rZnVuYyBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpXG4ge1xuIFx0c3RydWN0IHByb2dfdGVzdF9yZXRfaWkgciA9IHsgLmEgPSBhLCAuYiA9IGIgfTtcbkBAIC0xNTM5LDYgKzE1ODEsMTIgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfaTEyOClcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcGFpcilcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfZmFzdGNhbGwsIEtGX0ZBU1RDQUxMKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wdHIpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV9taXhlZClcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmFfdW50YWdnZWQpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX3VuaW9uKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQpXG4rQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2RlZXApXG4gQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2lpKVxuICNlbmRpZlxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9iaWcpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Rlc3Rfa21vZHMvYnBmX3Rlc3Rtb2Rfa2Z1bmMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi90ZXN0X2ttb2RzL2JwZl90ZXN0bW9kX2tmdW5jLmhcbmluZGV4IDY1ZTY5M2FkYTczNjQuLmEyZTllOWYzMTg0ZTIgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvdGVzdF9rbW9kcy9icGZfdGVzdG1vZF9rZnVuYy5oXG5AQCAtMjYsNiArMjYsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZWZfa2Z1bmMge1xuIH07XG4gI2VuZGlmXG4gXG4rI2lmIF9faGFzX2F0dHJpYnV0ZShidGZfdHlwZV90YWcpXG4rI2RlZmluZSBfX2FyZW5hX3RhZyBfX2F0dHJpYnV0ZV9fKChidGZfdHlwZV90YWcoXCJhcmVuYVwiKSkpXG4rI2Vsc2VcbisjZGVmaW5lIF9fYXJlbmFfdGFnXG4rI2VuZGlmXG4rXG4gc3RydWN0IGJwZl9pdGVyX3Rlc3Rtb2Rfc2VxO1xuIFxuIHN0cnVjdCBwcm9nX3Rlc3RfcGFzczEge1xuQEAgLTcwLDYgKzc2LDQ1IEBAIHN0cnVjdCBwcm9nX3Rlc3RfcmV0X3B0ciB7XHQvKiAxNiBieXRlczogY29udGFpbnMgYSBwb2ludGVyICovXG4gXHRfX3U2NCB0YWc7XG4gfTtcbiBcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYSB7XHQvKiAxNiBieXRlczogdHdvIGFyZW5hIHBvaW50ZXJzICovXG4rXHR2b2lkIF9fYXJlbmFfdGFnICphO1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqYjtcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIHtcdC8qIDE2IGJ5dGVzOiBhbiBhcmVuYSBwb2ludGVyIGFuZCBhIHNjYWxhciAqL1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqcDtcbitcdF9fdTY0IHRhZztcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VudGFnZ2VkIHtcdC8qIDE2IGJ5dGVzOiAnYicgbGFja3MgdGhlIGFyZW5hIHRhZyAqL1xuK1x0dm9pZCBfX2FyZW5hX3RhZyAqYTtcbitcdHZvaWQgKmI7XG4rfTtcbitcbit1bmlvbiBwcm9nX3Rlc3RfcmV0X2FyZW5hX3VuaW9uIHtcdC8qIDggYnl0ZXM6ICdiJyBsYWNrcyB0aGUgYXJlbmEgdGFnICovXG4rXHR2b2lkIF9fYXJlbmFfdGFnICphO1xuK1x0dm9pZCAqYjtcbit9O1xuK1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCB7XHQvKiAxNiBieXRlczogdGhlIHBvaW50ZXIgaGlkZXMgb25lIGxldmVsIGRvd24gKi9cbitcdHN0cnVjdCB7XG4rXHRcdHZvaWQgKnA7XG4rXHR9IGluO1xuK1x0X191NjQgdGFnO1xuK307XG4rXG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCB7XHQvKiA4IGJ5dGVzLCBidXQgbmVzdGVkIHBhc3QgdGhlIDQtbGV2ZWwgd2FsayBsaW1pdCAqL1xuK1x0c3RydWN0IHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHRzdHJ1Y3Qge1xuK1x0XHRcdFx0c3RydWN0IHtcbitcdFx0XHRcdFx0X191NjQgdjtcbitcdFx0XHRcdH0gbDQ7XG4rXHRcdFx0fSBsMztcbitcdFx0fSBsMjtcbitcdH0gbDE7XG4rfTtcbitcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcge1x0LyogMjQgYnl0ZXM6IHRvbyBsYXJnZSBmb3IgUjA6UjIgKi9cbiBcdF9fdTY0IGE7XG4gXHRfX3U2NCBiO1xuQEAgLTE1OSw2ICsyMDQsMTIgQEAgc3RydWN0IHByb2dfdGVzdF9yZXRfcGFpciBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9wYWlyKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wYWlyIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2Zhc3RjYWxsKF9fdTY0IGEsIF9fdTY0IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9paSBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9paShpbnQgYSwgaW50IGIpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9wdHIgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfcHRyKF9fdTY0IHRhZykgX19rc3ltO1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X25lc3RlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9uZXN0ZWQoX191NjQgdGFnKSBfX2tzeW07XG4rc3RydWN0IHByb2dfdGVzdF9yZXRfYXJlbmEgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYXJlbmEoX191NjQgYWRkcikgX19rc3ltO1xuK3N0cnVjdCBwcm9nX3Rlc3RfcmV0X2FyZW5hX21peGVkIGJwZl9rZnVuY19jYWxsX3Rlc3RfcmV0X2FyZW5hX21peGVkKF9fdTY0IGFkZHIpIF9fa3N5bTtcbitzdHJ1Y3QgcHJvZ190ZXN0X3JldF9hcmVuYV91bnRhZ2dlZCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bnRhZ2dlZChfX3U2NCBhZGRyKSBfX2tzeW07XG4rdW5pb24gcHJvZ190ZXN0X3JldF9hcmVuYV91bmlvbiBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9hcmVuYV91bmlvbihfX3U2NCBhZGRyKSBfX2tzeW07XG4rc3RydWN0IHByb2dfdGVzdF9yZXRfZGVlcCBicGZfa2Z1bmNfY2FsbF90ZXN0X3JldF9kZWVwKF9fdTY0IHYpIF9fa3N5bTtcbiBzdHJ1Y3QgcHJvZ190ZXN0X3JldF9iaWcgYnBmX2tmdW5jX2NhbGxfdGVzdF9yZXRfYmlnKHZvaWQpIF9fa3N5bTtcbiBfX3U2NCBicGZfa2Z1bmNfY2FsbF9zdGFja19hcmcoX191NjQgYSwgX191NjQgYiwgX191NjQgYywgX191NjQgZCxcbiBcdFx0XHQgICAgICAgX191NjQgZSwgX191NjQgZiwgX191NjQgZywgX191NjQgaCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI3VDA2OjQ1OjE4LjA4NDQ1OTc4WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MDg5NDM4MDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJQRiBWZXJpZmllciBQYXRjaCBBbmFseXNpczogS01TQU4gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gZnJvbSBhIG1lbW9yeSBzYWZldHkgcGVyc3BlY3RpdmUuIFRoaXMgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIEJQRiB2ZXJpZmllciB0byBwZXJtaXQga2Z1bmNzIGFuZCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cyBhbmQgdW5pb25zIGJ5IHZhbHVlLCBldmVuIGlmIHRob3NlIHN0cnVjdHMgY29udGFpbiBcImFyZW5hXCIgcG9pbnRlcnMsIHdoaWNoIGlzIGEgZGVwYXJ0dXJlIGZyb20gcHJldmlvdXMgcmVzdHJpY3Rpb25zLiBJdCBzZWVtcyB0aGUgbWFpbiBjaGFuZ2VzIHJldm9sdmUgYXJvdW5kIGBidGZfbWVtYmVyX2tpbmRgLCBgYnRmX3N0cnVjdF9pc19jb21wb3NlZF9vZmAsIGFuZCBgYnRmX3R5cGVfaXNfYXJlbmFfcHRyYCwgYW5kIGFkanVzdG1lbnRzIHRvIGBtYXJrX2tmdW5jX3JldF9yZWdzYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGFzc2VzcyBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIEVzc2VudGlhbGx5LCB0aGUgY29yZSBsb2dpYyBpcyBzdGlsbCBhYm91dCB0aGUgKnZlcmlmaWVyKiAtIGl0J3MgYSB0eXBlIGNoZWNrZXIsIG5vdCBhIG1lY2hhbmlzbSBmb3IgbWVtb3J5IGFsbG9jYXRpb24gb3IgZGF0YSB0cmFuc2ZlciBpdHNlbGYuIFRoZSB2ZXJpZmllciBmbGFncyB0aGUgcmV0dXJuIHJlZ2lzdGVycyBhcyB1bmtub3duLCBhbmQgdGhlIGtlcm5lbCBmdW5jdGlvbiBzdXBwbGllcyB0aGUgZGF0YS4gVGhlc2UgdmFsdWVzIHJlc2lkZSB3aXRoaW4gdGhlIEJQRiByZWdpc3RlcnMgdGhlbXNlbHZlcy4gVGh1cywgaXQncyBhYm91dCBjaGVja2luZyByZXR1cm4gdmFsdWUgdHlwZXMsIG5vdCBuZXcgbWVtb3J5IGV4cG9zdXJlIHRvIHVzZXIgc3BhY2UgZGlyZWN0bHkgZnJvbSB0aGUgdmVyaWZpZXIgY2hhbmdlLlxuXG5TbywgY291bGQgdW5pbml0aWFsaXplZCBtZW1vcnkgKmZyb20gYSBrZnVuYyogYmUgZXhwb3NlZD8gWWVzLCBwb3RlbnRpYWxseSwgaWYgYSBrZnVuYyByZXR1cm5zIHVuaW5pdGlhbGl6ZWQgZGF0YS4gSG93ZXZlciwgdGhlIGV4aXN0aW5nIEtNU0FOIHNob3VsZCBhbHJlYWR5IGNhdGNoIHRoaXMgd2hlbiB0aGUgQlBGIHByb2dyYW0gYXR0ZW1wdHMgdG8gcmVhZCBzdWNoIHZhbHVlcywgb3Igd2hlbiB0aGUga2Z1bmMgaXRzZWxmIHJldHVybnMgaXQuIENydWNpYWxseSwgdGhlIHBhdGNoICpkb2Vzbid0KiBpbnRyb2R1Y2UgbmV3IGtmdW5jcy4gVGhlIGFkZGVkIHRlc3QgY2FzZXMgYXJlIGluaXRpYWxpemVkIGNvcnJlY3RseS5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBgbWFya19rZnVuY19yZXRfcmVnc2AuIEFoLCBpdCBqdXN0IGhhbmRsZXMgdmVyaWZpZXIgc3RhdGUgdHJhY2tpbmchIEl0IG1hcmtzIHRob3NlIHJlZ2lzdGVycyBhcyBjb250YWluaW5nIFwidW5rbm93blwiIHZhbHVlcywgYnV0IG5vdGhpbmcgbW9yZSwgY29uZmlybWluZyB0aGF0IHRoZSB2YWx1ZXMgYXJlIGJlaW5nIGdlbmVyYXRlZCBieSB0aGUga2Z1bmMgaXRzZWxmLiBUaGlzIGlzIGNyaXRpY2FsOiB0aGUgdmVyaWZpZXIgaXNuJ3QgY3JlYXRpbmcgb3IgaW5pdGlhbGl6aW5nIG1lbW9yeSBoZXJlLiBUaGUgYHByZXBhcmVfZnVuY19leGl0YCBwYXJ0IGlzIHNpbXBseSBjb3B5aW5nIHJlZ2lzdGVycywgbm90aGluZyBuZXcuXG5cbkZyb20gbXkgdW5kZXJzdGFuZGluZywgdGhpcyBpcyBwdXJlbHkgdmVyaWZpZXIgbG9naWMuIEl0J3MgYWJvdXQgc3RhdGljIGFuYWx5c2lzLCBub3QgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBrZnVuY3MgYXJlIHJlc3BvbnNpYmxlIGZvciByZXR1cm5pbmcgaW5pdGlhbGl6ZWQgZGF0YS4gVGh1cywgaWYgYSBrZnVuYyAqZGlkKiByZXR1cm4gdW5pbml0aWFsaXplZCBkYXRhLCB0aGF0J3MgYSBidWcgKndpdGhpbiB0aGUga2Z1bmMqLCBub3QgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIHBhdGNoLCBhbmQgZXhpc3RpbmcgS01TQU4vS0FTQU4gd291bGQgYWRkcmVzcyB0aGlzLiBJdCdzIGNvbmZpbmVkIHRvIHRoZSBzdGF0aWMgYW5hbHlzaXMgcGhhc2Ugb2YgQlBGIHByb2dyYW1zLlxuXG5SZXZpZXdpbmcgS01TQU4ncyBjcml0aWNhbCBzY2VuYXJpb3Mg4oCTIGtlcm5lbCBzdHJ1Y3R1cmVzIHBhc3NlZCB0byB1c2Vyc3BhY2Ugd2hlcmUgZmllbGRzIG1heSBiZSB1bmluaXRpYWxpemVkLCBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLCBhbGxvY2F0aW9uIG9mIGNvbXBsZXggc3RydWN0dXJlcywgb3IgYnVmZmVyIGFjY2VzcyB3aXRoIGluY29ycmVjdCBib3VuZHMgY2hlY2tzIOKAkyBub25lIG9mIHRoZXNlIGFwcGx5IHRvIHRoZSBjb3JlIHZlcmlmaWVyIGNoYW5nZXMuIFRoZSB0ZXN0IGNhc2VzIHRoZW1zZWx2ZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLlxuXG5UaGVyZWZvcmUsIHRoZSBwYXRjaCBkb2Vzbid0IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGUgY2hhbmdlcyBhcmUgc29sZWx5IGluIHRoZSB0eXBlLWNoZWNraW5nIGFuZCByZWdpc3RlciBzdGF0ZS10cmFja2luZyBsb2dpYyBvZiB0aGUgdmVyaWZpZXIuIE5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGtlcm5lbC10by11c2VyIGRhdGEgY29waWVzLCBub3RoaW5nIHRoYXQgaW50cm9kdWNlcyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBiZXlvbmQgd2hhdCdzIGFscmVhZHkgY292ZXJlZCBieSBleGlzdGluZyBtZW1vcnkgc2FmZXR5IHRvb2xzLiAqKk5lZWRzS01TQU4gPSBmYWxzZS4qKlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzkzMiwiT3V0cHV0VG9rZW5zIjoxMzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTk3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjdUMDY6NDU6MzYuMTczODk5NzUzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQlBGIHZlcmlmaWVyIHRvIGFsbG93IGtmdW5jcyBhbmQgc3VicHJvZ3JhbXMgdG8gcmV0dXJuIHN0cnVjdHMvdW5pb25zIGNvbnRhaW5pbmcgYXJlbmEgcG9pbnRlcnMgYnkgdmFsdWUuIEl0IHVwZGF0ZXMgdGhlIHZlcmlmaWVyJ3MgdHlwZSBjaGVja2luZyBsb2dpYyBhbmQgcmVnaXN0ZXIgc3RhdGUgdHJhY2tpbmcuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywga2VybmVsLXRvLXVzZXIgZGF0YSBjb3BpZXMsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdGhlIHN0YXRpYyBhbmFseXNpcyBwaGFzZSBvZiBCUEYgcHJvZ3JhbXMuIFN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBidWcgZGV0ZWN0b3JzIGFyZSBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMgaW4gdGhlIHZlcmlmaWVyLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBCUEYgdmVyaWZpZXIgdG8gYWxsb3cga2Z1bmNzIGFuZCBzdWJwcm9ncmFtcyB0byByZXR1cm4gc3RydWN0cy91bmlvbnMgY29udGFpbmluZyBhcmVuYSBwb2ludGVycyBieSB2YWx1ZS4gSXQgdXBkYXRlcyB0aGUgdmVyaWZpZXIncyB0eXBlIGNoZWNraW5nIGxvZ2ljIGFuZCByZWdpc3RlciBzdGF0ZSB0cmFja2luZy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBrZXJuZWwtdG8tdXNlciBkYXRhIGNvcGllcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIFRoZSBjaGFuZ2VzIGFyZSBjb25maW5lZCB0byB0aGUgc3RhdGljIGFuYWx5c2lzIHBoYXNlIG9mIEJQRiBwcm9ncmFtcy4gU3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGJ1ZyBkZXRlY3RvcnMgYXJlIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgc2FmZXR5IGlzc3VlcyBpbiB0aGUgdmVyaWZpZXIuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow2g5cg[1] Phase: Succeeded StartedAt: 2026-08-27 06:46:05 +0000 UTC FinishedAt: 2026-08-27 06:46:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-27 06:46:05 +0000 UTC FinishedAt: 2026-08-27 06:46:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2] Phase: Succeeded StartedAt: 2026-08-27 06:46:05 +0000 UTC FinishedAt: 2026-08-27 10:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-27 06:46:05 +0000 UTC FinishedAt: 2026-08-27 10:38:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-27 06:46:05 +0000 UTC FinishedAt: 2026-08-27 06:46:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-27 06:46:05 +0000 UTC FinishedAt: 2026-08-27 06:46:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow2g5cg/series-workflow2g5cg-convert-artifact-4057160683/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-27 06:46:26 +0000 UTC FinishedAt: 2026-08-27 07:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-27 06:46:26 +0000 UTC FinishedAt: 2026-08-27 07:12:43 +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:*ebde1ed2-2747-42c2-9eb2-c1be64b8c146,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-workflow2g5cg/series-workflow2g5cg-convert-artifact-4057160683/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": "a77df140-e844-4920-8534-907f52176ffb", "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-workflow2g5cg/series-workflow2g5cg-build-action-3103117289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-27 06:46:26 +0000 UTC FinishedAt: 2026-08-27 07:12:33 +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:*ebde1ed2-2747-42c2-9eb2-c1be64b8c146,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-workflow2g5cg/series-workflow2g5cg-convert-artifact-4057160683/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": "a77df140-e844-4920-8534-907f52176ffb", "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-workflow2g5cg/series-workflow2g5cg-build-action-3103117289/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-27 07:12:43 +0000 UTC FinishedAt: 2026-08-27 07:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-27 07:12:43 +0000 UTC FinishedAt: 2026-08-27 07:12:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-27 07:12:43 +0000 UTC FinishedAt: 2026-08-27 07:12:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-27 07:12:43 +0000 UTC FinishedAt: 2026-08-27 07:12:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.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-workflow2g5cg/series-workflow2g5cg-convert-artifact-2231586498/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-27 07:12:53 +0000 UTC FinishedAt: 2026-08-27 07:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-27 07:12:53 +0000 UTC FinishedAt: 2026-08-27 07:15:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a77df140-e844-4920-8534-907f52176ffb,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-workflow2g5cg/series-workflow2g5cg-build-action-3103117289/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-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-27 07:15:15 +0000 UTC FinishedAt: 2026-08-27 07:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-27 07:15:15 +0000 UTC FinishedAt: 2026-08-27 07:15:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-27 07:15:15 +0000 UTC FinishedAt: 2026-08-27 07:33:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-27 07:15:15 +0000 UTC FinishedAt: 2026-08-27 07:33:07 +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:*ebde1ed2-2747-42c2-9eb2-c1be64b8c146,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-workflow2g5cg/series-workflow2g5cg-convert-artifact-2231586498/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": "6fd16796-5e7e-4dee-8ba0-28ea441e5563", "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-workflow2g5cg/series-workflow2g5cg-build-action-3087139094/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-27 07:15:15 +0000 UTC FinishedAt: 2026-08-27 07:32:57 +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:*ebde1ed2-2747-42c2-9eb2-c1be64b8c146,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-workflow2g5cg/series-workflow2g5cg-convert-artifact-2231586498/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": "6fd16796-5e7e-4dee-8ba0-28ea441e5563", "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-workflow2g5cg/series-workflow2g5cg-build-action-3087139094/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-27 07:33:07 +0000 UTC FinishedAt: 2026-08-27 07:33:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-27 07:33:07 +0000 UTC FinishedAt: 2026-08-27 07:33:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-27 07:33:07 +0000 UTC FinishedAt: 2026-08-27 07:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-27 07:33:07 +0000 UTC FinishedAt: 2026-08-27 07:34:57 +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:*6fd16796-5e7e-4dee-8ba0-28ea441e5563,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-workflow2g5cg/series-workflow2g5cg-build-action-3087139094/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-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-27 07:35:07 +0000 UTC FinishedAt: 2026-08-27 10:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-27 07:35:07 +0000 UTC FinishedAt: 2026-08-27 10:38:40 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"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:*a77df140-e844-4920-8534-907f52176ffb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6fd16796-5e7e-4dee-8ba0-28ea441e5563,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-workflow2g5cg/series-workflow2g5cg-build-action-3103117289/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-workflow2g5cg/series-workflow2g5cg-build-action-3087139094/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-27 07:35:07 +0000 UTC FinishedAt: 2026-08-27 07:35:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-27 07:35:07 +0000 UTC FinishedAt: 2026-08-27 07:35:12 +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-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"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-workflow2g5cg/series-workflow2g5cg-convert-artifact-2023694839/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-27 07:35:07 +0000 UTC FinishedAt: 2026-08-27 07:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-27 07:35:07 +0000 UTC FinishedAt: 2026-08-27 07:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-27 07:35:07 +0000 UTC FinishedAt: 2026-08-27 07:35:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-27 07:35:18 +0000 UTC FinishedAt: 2026-08-27 10:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2g5cg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["btf_struct_is_composed_of","btf_type_is_arena_ptr","btf_prepare_func_args"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"48b69cc8825d411a4c4df32de854434e9235a1b0","config_name":"upstream-apparmor-kasan.config","series_id":"0e874796-87e7-4ca4-a3c7-ddc18b694792","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-27 07:35:18 +0000 UTC FinishedAt: 2026-08-27 10:38:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a77df140-e844-4920-8534-907f52176ffb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*6fd16796-5e7e-4dee-8ba0-28ea441e5563,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-workflow2g5cg/series-workflow2g5cg-build-action-3103117289/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-workflow2g5cg/series-workflow2g5cg-build-action-3087139094/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-workflow2g5cg/series-workflow2g5cg-convert-artifact-2023694839/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,}