Name: series-workflowzvpkl Phase: Succeeded StartedAt: 2026-07-11 10:25:00 +0000 UTC FinishedAt: 2026-07-11 15:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[0] Phase: Succeeded StartedAt: 2026-07-11 10:25:00 +0000 UTC FinishedAt: 2026-07-11 10:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[0].run-triage Phase: Succeeded StartedAt: 2026-07-11 10:25:00 +0000 UTC FinishedAt: 2026-07-11 10:45:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "95b4f54f93b0d85c0fc9bb9d73e79823959edf74", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "95b4f54f93b0d85c0fc9bb9d73e79823959edf74", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR" ], "series_id": "faafb85b-7edb-4cd9-ba23-834a719091eb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_probe_hits_wsum", "damon_merge_score", "damon_valid_probe_params", "damon_sysfs_set_probes", "damon_merge_regions_of", "kdamond_fn", "damon_pa_apply_probes", "weight_store", "damon_has_probe_weights" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3Njb3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19zZXRfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3JlZ2lvbnNfb2YmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9mbiYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7d2VpZ2h0X3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX2hhc19wcm9iZV93ZWlnaHRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgJiMzOTt3ZWlnaHQmIzM5OyBhdHRyaWJ1dGUgZm9yIERBTU9OIHByb2JlcywgZW5hYmxpbmcgJiMzOTtEYXRhIEF0dHJpYnV0ZXMtb25seSBNb25pdG9yaW5nJiMzOTsuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdXNlIHByb2JlIGhpdCB3ZWlnaHRlZCBzdW1zIGluc3RlYWQgb2YgYWNjZXNzIGNvdW50cyBmb3IgcmVnaW9uIGFkanVzdG1lbnQgd2hlbiB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBJdCBtb2RpZmllcyBzeXNmcyBpbnRlcmZhY2VzLCBjb3JlIHJlZ2lvbiBtZXJnaW5nIGxvZ2ljLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBwcm9iZSBhcHBsaWNhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3Jpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3ZmU5YzNjODdhNjU2MGQwNTEwZTE0OTI4YTBiZTQ4OTBiMGExM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxMDo0Mzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5pbmRleCBkZDZiNWJkNzZlMTE5Ni4uOTA3YTUwNGZiNjRjNTQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbkBAIC0xNjQsNiAmIzQzOzE2NCwxMiBAQCBEZXNjcmlwdGlvbjpcdFdyaXRpbmcgYSBudW1iZXIgJiMzOTtOJiMzOTsgdG8gdGhpcyBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZlxuIFx0XHRkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iZSBuYW1lZCAmIzM5OzAmIzM5OyB0byAmIzM5O04tMSYjMzk7IHVuZGVyIHRoZVxuIFx0XHRwcm9iZXMvIGRpcmVjdG9yeS5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjS1x1MDAzZS9jb250ZXh0cy9cdTAwM2NDXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1x1MDAzY1BcdTAwM2Uvd2VpZ2h0XG4mIzQzO0RhdGU6XHRcdEp1bCAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbiYjNDM7RGVzY3JpcHRpb246XHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlXG4mIzQzO1x0XHRwZXItcHJvYmUgYXR0cmlidXRlIHdlaWdodC5cbiYjNDM7XG4gV2hhdDpcdFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjS1x1MDAzZS9jb250ZXh0cy9cdTAwM2NDXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1x1MDAzY1BcdTAwM2UvZmlsdGVycy9ucl9maWx0ZXJzXG4gRGF0ZTpcdFx0TWF5IDIwMjZcbiBDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggYjI2NDllYTAxMWY5MzEuLmRhNWY5YWZkMDhhZWY4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5AQCAtNzMsOSAmIzQzOzczLDEwIEBAIGNvbW1hIChcJiMzNDssXCYjMzQ7KS5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGludGVydmFsc19nb2FsL2FjY2Vzc19icCxhZ2dycyxtaW5fc2FtcGxlX3VzLG1heF9zYW1wbGVfdXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgbnJfcmVnaW9ucy9taW4sbWF4XG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YHByb2JlcyBcdTAwM2NkYW1vbl91c2FnZV9zeXNmc19wcm9iZXNcdTAwM2VgL25yX3Byb2Jlc1xuLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9maWx0ZXJzL25yX2ZpbHRlcnNcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3R5cGUsbWF0Y2hpbmcsYWxsb3cscGF0aFxuLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLlxuJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0XG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGZpbHRlcnMvbnJfZmlsdGVyc1xuJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGhcbiYjNDM7ICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLlxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdGFyZ2V0cyBcdTAwM2NzeXNmc190YXJnZXRzXHUwMDNlYC9ucl90YXJnZXRzXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YDAgXHUwMDNjc3lzZnNfdGFyZ2V0XHUwMDNlYC9waWRfdGFyZ2V0LG9ic29sZXRlX3RhcmdldFxuQEAgLTI4Niw2ICYjNDM7Mjg3LDEwIEBAIEluIGVhY2ggcHJvYmUgZGlyZWN0b3J5LCBvbmUgZGlyZWN0b3J5LCBgYGZpbHRlcnNgYCBleGlzdHMuICBUaGUgZGlyZWN0b3J5XG4gY29udGFpbnMgZmlsZXMgZm9yIGluc3RhbGxpbmcgZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lXG4gdGhlIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgcHJvYmUuXG4gXG4mIzQzO0VhY2ggcHJvYmUgZGlyZWN0b3J5IGFsc28gY29udGFpbnMgYGB3ZWlnaHRgYCBmaWxlLiAgUmVhZGluZyBmcm9tIGFuZCB3cml0aW5nXG4mIzQzO3RvIHRoZSBmaWxlIGdldHMgYW5kIHNldHMgdGhlIDpyZWY6YGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nXG4mIzQzO1x1MDAzY2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmdcdTAwM2VgIHdlaWdodCBmb3IgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgcHJvYmUuXG4mIzQzO1xuIEluIHRoZSBiZWdpbm5pbmcsIGBgZmlsdGVyc2BgIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9maWx0ZXJzYGAuXG4gV3JpdGluZyBhIG51bWJlciAoYGBOYGApIHRvIHRoZSBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZiBjaGlsZCBkaXJlY3Rvcmllc1xuIG5hbWVkIGBgMGBgIHRvIGBgTi0xYGAuICBFYWNoIGRpcmVjdG9yeSByZXByZXNlbnRzIGVhY2ggZmlsdGVyIGFuZCB3b3JrcyBpbiBhXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCA0NTdkNmU4YmM3ODc4NS4uYWVkNmNiMWNmNDgzMTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTMxNiw2ICYjNDM7MzE2LDMxIEBAIEFub3RoZXIgd2F5IHRvIGRvIHRoaXMgZm9yIGhpZ2hlciBhY2N1cmFjeSBpcyB1c2luZyA6cmVmOmBEQU1PUyBmaWx0ZXJcbiBpbmZvcm1hdGlvbiBpbiBwYWdlIGxldmVsLiAgQnV0LCBiZWNhdXNlIGl0IGlzIG9wZXJhdGVkIGluIHBhZ2UgbGV2ZWwsIHRoZVxuIG92ZXJoZWFkIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5LlxuIFxuJiM0MzsuLiBfZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZzpcbiYjNDM7XG4mIzQzO0RhdGEgQXR0cmlidXRlcy1vbmx5IE1vbml0b3JpbmdcbiYjNDM7fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuJiM0MztcbiYjNDM7RGF0YSBhY2Nlc3MgaXMgdGhlIHByaW1hcnkgbW9uaXRvcmluZyBpbmZvcm1hdGlvbiBmb3IgREFNT04uICBIZW5jZSBpdFxuJiM0Mzs6cmVmOmBhZGp1c3RzIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcdTAwM2VgIHJlZ2lvbnMgdXNpbmcgdGhlIGFjY2Vzc1xuJiM0Mzs6cmVmOmBjb3VudGVyIFx1MDAzY2RhbW9uX2Rlc2lnbl9yZWdpb25fYmFzZWRfc2FtcGxpbmdcdTAwM2VgIChgYG5yX2FjY2Vzc2VzYGApLiAgSW4gc29tZVxuJiM0Mzt1c2UgY2FzZXMsIGhvd2V2ZXIsIHVzZXJzIG1heSB3YW50IHNvbWUgb2YgOnJlZjpgYXR0cmlidXRlc1xuJiM0MztcdTAwM2NkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nXHUwMDNlYCB0byBiZSB0aGUgcHJpbWFyeSBpbmZvcm1hdGlvbi5cbiYjNDM7XG4mIzQzO0RhdGEgYXR0cmlidXRlcy1vbmx5IG1vbml0b3JpbmcgbW9kZSBzdXBwb3J0cyB0aGlzIHVzZSBjYXNlLiAgRm9yIHRoZSBtb2RlLFxuJiM0MztlYWNoIGF0dHJpYnV0ZSBwcm9iZSBoYXMgdGhlaXIgcHJpb3JpdHkgd2VpZ2h0IHZhbHVlLiAgVXNlcnMgY2FuIGRlc2NyaWJlIGJ5XG4mIzQzO3doYXQgY29tYmluYXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMgdGhlIHByaW1hcnkgaW5mb3JtYXRpb24gaXMgZGVjaWRlZCwgYnlcbiYjNDM7c2V0dGluZyB0aGUgcHJpb3JpdHkgd2VpZ2h0IHZhbHVlLiAgSWYgdGhlIHRvdGFsIHN1bSBvZiB0aGUgd2VpZ2h0cyBpcyBub3RcbiYjNDM7emVybywgdGhlIG1vZGUgaXMgZW5hYmxlZC4gIFRoZSByZWdpb25zIGFkanVzdG1lbnQgbWVjaGFuaXNtIHVzZXMgdGhlIHdlaWdodGVkXG4mIzQzO3N1bSBvZiB0aGUgOnJlZjpgcHJvYmUgaGl0IGNvdW50cyBcdTAwM2NkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nXHUwMDNlYCBpbnN0ZWFkXG4mIzQzO29mIGBgbnJfYWNjZXNzZXNgYCBpbiB0aGUgY2FzZS4gIFdoZW4gdGhlIG1vZGUgaXMgZW5hYmxlZCwgYWNjZXNzIG1vbml0b3JpbmcgaXNcbiYjNDM7YXV0b21hdGljYWxseSB0dXJuZWQgb2ZmLiAgVGhlIGFjY2VzcyBjb3VudGVyIChgYG5yX2FjY2Vzc2VzYGApIHdpbGwgYWx3YXlzIGJlXG4mIzQzO3plcm8gYW5kIG5vdCB1cGRhdGVkLiAgSGVuY2UgdGhlIG1vZGUgaXMgY2FsbGVkIERhdGEgQXR0cmlidXRlcyBcJiMzNDtvbmx5XCYjMzQ7XG4mIzQzO21vbml0b3JpbmcuXG4mIzQzO1xuJiM0MztSZWZlciB0byB0aGUgOnJlZjpgYWRtaW4gZ3VpZGUgXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXHUwMDNlYCB0byBrbm93IGhvdyB1c2Vyc1xuJiM0MztjYW4gdXNlIHRoZSBtb2RlLlxuJiM0MztcbiBEeW5hbWljIFRhcmdldCBTcGFjZSBVcGRhdGVzIEhhbmRsaW5nXG4gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggNjNmNTk2OTU3YzFmMWYuLmY2OTQ0MmE5ZDQzMTI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC02NDcsNyAmIzQzOzY0NywxMCBAQCBlbnVtIGRhbW9uX29wc19pZCB7XG4gICogSXQgc2hvdWxkIGFsc28gcmV0dXJuIG1heCBudW1iZXIgb2Ygb2JzZXJ2ZWQgYWNjZXNzZXMgdGhhdCBtYWRlIGFzIGEgcmVzdWx0XG4gICogb2YgaXRzIHVwZGF0ZS4gIFRoZSB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yIHJlZ2lvbnMgYWRqdXN0bWVudCB0aHJlc2hvbGQuXG4gICogQGFwcGx5X3Byb2JlcyBzaG91bGQgYXBwbHkgdGhlIGRhdGEgYXR0cmlidXRlIHByb2JlcyB0byBlYWNoIHJlZ2lvbiBhbmRcbi0gKiBhY2NvcmRpbmdseSB1cGRhdGUgdGhlIHByb2JlIGhpdHMgY291bnRlciBvZiB0aGUgcmVnaW9uLlxuJiM0MzsgKiBhY2NvcmRpbmdseSB1cGRhdGUgdGhlIHByb2JlIGhpdHMgY291bnRlciBvZiB0aGUgcmVnaW9uLiAgSXQgc2hvdWxkIGFsc29cbiYjNDM7ICogc2V0IFx1MDAyNmRhbW9uX3JlZ2lvbi1cdTAwM2VzYW1wbGluZ19hZGRyIG9mIGVhY2ggcmVnaW9uIGlmIGBgc2V0X3NhbXBsZXNgYCBpcyB0cnVlLlxuJiM0MzsgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4aW11bSBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiByZWdpb25zIGlmXG4mIzQzOyAqIGBgcmV0dXJuX21heF93c3VtYGAgaXMgdHJ1ZS5cbiAgKiBAZ2V0X3NjaGVtZV9zY29yZSBzaG91bGQgcmV0dXJuIHRoZSBwcmlvcml0eSBzY29yZSBvZiBhIHJlZ2lvbiBmb3IgYSBzY2hlbWVcbiAgKiBhcyBhbiBpbnRlZ2VyIGluIFswLCBcdTAwMjZEQU1PU19NQVhfU0NPUkVdLlxuICAqIEBhcHBseV9zY2hlbWUgaXMgY2FsbGVkIGZyb20gQGtkYW1vbmQgd2hlbiBhIHJlZ2lvbiBmb3IgdXNlciBwcm92aWRlZFxuQEAgLTY2NSw3ICYjNDM7NjY4LDggQEAgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xuIFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XG4gXHR2b2lkICgqcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbiBcdHVuc2lnbmVkIGludCAoKmNoZWNrX2FjY2Vzc2VzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbi1cdHZvaWQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xuJiM0MztcdHVuc2lnbmVkIGludCAoKmFwcGx5X3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbiYjNDM7XHRcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pO1xuIFx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSk7XG4gXHR1bnNpZ25lZCBsb25nICgqYXBwbHlfc2NoZW1lKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuQEAgLTc2MCwxMCAmIzQzOzc2NCwxMiBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiAvKipcbiAgKiBzdHJ1Y3QgZGFtb25fcHJvYmUgLSBEYXRhIHJlZ2lvbiBhdHRyaWJ1dGUgcHJvYmUuXG4gICpcbiYjNDM7ICogQHdlaWdodDpcdFJlbGF0aXZlIHByaW9yaXR5IG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoaXMgcHJvYmUuXG4gICogQGZpbHRlcnM6XHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXG4gICogQGxpc3Q6XHRTaWJsaW5ncyBsaXN0LlxuICAqL1xuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdlaWdodDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuQEAgLTEwMDYsNiAmIzQzOzEwMTIsOCBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuIFx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMTE0NzNhYTFmNzBmNDEuLjgwNmE2N2QwMmE2ZTkwIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4gXHRwID0ga21hbGxvY19vYmooKnApO1xuIFx0aWYgKCFwKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRwLVx1MDAzZXdlaWdodCA9IDA7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWZpbHRlcnMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiBcdHJldHVybiBwO1xuQEAgLTIwOCw2ICYjNDM7MjA5LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX250aF9wcm9iZShpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjKSB7XG4mIzQzO1x0XHRpZiAocC1cdTAwM2V3ZWlnaHQpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkYW1vbl9tdnN1bSgpIC0gUmV0dXJucyBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBmb3IgYSB0aW1lIHdpbmRvdy5cbiAgKiBAY3VycmVudF9ucjpcdFx0VGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIHdpbmRvdy5cbkBAIC0zOTIsNiAmIzQzOzQwNCwzMCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0cmV0dXJuIGxpc3RfaXNfbGFzdChcdTAwMjZyLVx1MDAzZWxpc3QsIFx1MDAyNnQtXHUwMDNlcmVnaW9uc19saXN0KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4mIzQzOyAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4mIzQzOyAqIEBsYXN0Olx0aWYgdGhlIHJlcXVlc3QgaXMgZm9yIGxhc3Qtd2luZG93IGFnZ3JlZ2F0ZWQgcHJvYmUgaGl0cy5cbiYjNDM7ICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cbiYjNDM7ICovXG4mIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3VtID0gMDtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1xuJiM0MztcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbiYjNDM7XHRcdGlmIChsYXN0KVxuJiM0MztcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3VtICYjNDM7PSByLVx1MDAzZXByb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtXHUwMDNld2VpZ2h0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gc3VtO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ2hlY2sgd2hldGhlciBhIHJlZ2lvbiBpcyBpbnRlcnNlY3RpbmcgYW4gYWRkcmVzcyByYW5nZVxuICAqXG5AQCAtMTMwMiw2ICYjNDM7MTMzOCwzNCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdGRhbW9zX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXHUwMDI2cy1cdTAwM2VvcHNfZmlsdGVycyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuJiM0MztcdHVuc2lnbmVkIGludCB3c3VtLCB3c3VtX3RvX2FkZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsIFx1MDAzZSBVOF9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG4mIzQzO1x0bWF4X3Byb2JlX2hpdHMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmN0eC1cdTAwM2VhdHRycyk7XG4mIzQzO1x0d3N1bSA9IDA7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuJiM0MztcdFx0aWYgKHByb2JlLVx1MDAzZXdlaWdodCBcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0d3N1bV90b19hZGQgPSBwcm9iZS1cdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcbiYjNDM7XHRcdGlmIChVSU5UX01BWCAtIHdzdW0gXHUwMDNjIHdzdW1fdG9fYWRkKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR3c3VtICYjNDM7PSB3c3VtX3RvX2FkZDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkYW1vc19jb21taXRfZGVzdHMoKSAtIENvcHkgbWlncmF0aW9uIGRlc3RpbmF0aW9ucyBmcm9tIEBzcmMgdG8gQGRzdC5cbiAgKiBAZHN0Olx0RGVzdGluYXRpb24gc3RydWN0dXJlIHRvIHVwZGF0ZS5cbkBAIC0xNjU4LDYgJiM0MzsxNzIyLDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShkc3RfcHJvYmUsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSYjNDM7JiM0MzssIHNyYyk7XG4gXHRcdGlmIChzcmNfcHJvYmUpIHtcbiYjNDM7XHRcdFx0ZHN0X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE2NzQsNiAmIzQzOzE3MzksNyBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdGlmICghbmV3X3Byb2JlKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRkYW1vbl9hZGRfcHJvYmUoZHN0LCBuZXdfcHJvYmUpO1xuJiM0MztcdFx0bmV3X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE3MDQsNiAmIzQzOzE3NzAsOSBAQCBzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGlmICghZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHNyYykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTMyMjEsNiAmIzQzOzMyOTAsMTYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXG4mIzQzO3tcbiYjNDM7XHRpZiAodXNlX3Byb2JlX2hpdHMpXG4mIzQzO1x0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7XG4mIzQzO1x0aWYgKGxhc3QpXG4mIzQzO1x0XHRyZXR1cm4gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuJiM0MztcdHJldHVybiByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTWVyZ2UgYWRqYWNlbnQgcmVnaW9ucyBoYXZpbmcgc2ltaWxhciBhY2Nlc3MgZnJlcXVlbmNpZXNcbiAgKlxuQEAgLTMyMjksMjQgJiM0MzszMzA4LDM4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gICogc3pfbGltaXRcdHNpemUgdXBwZXIgbGltaXQgb2YgZWFjaCByZWdpb25cbiAgKi9cbiBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3pfbGltaXQpXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHN6X2xpbWl0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcbiYjNDM7XHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcbi1cdFx0aWYgKGFicyhyLVx1MDAzZW5yX2FjY2Vzc2VzIC0gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKSBcdTAwM2UgdGhyZXMpXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgc2NvcmUsIGxhc3Rfc2NvcmUsIGRpZmY7XG4mIzQzO1xuJiM0MztcdFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG4mIzQzO1x0XHRsYXN0X3Njb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgdHJ1ZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFic19kaWZmKHNjb3JlLCBsYXN0X3Njb3JlKSBcdTAwM2UgdGhyZXMpXG4gXHRcdFx0ci1cdTAwM2VhZ2UgPSAwO1xuLVx0XHRlbHNlIGlmICgoci1cdTAwM2Vucl9hY2Nlc3NlcyA9PSAwKSAhPSAoci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID09IDApKVxuJiM0MztcdFx0ZWxzZSBpZiAoKHNjb3JlID09IDApICE9IChsYXN0X3Njb3JlID09IDApKVxuIFx0XHRcdHItXHUwMDNlYWdlID0gMDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHItXHUwMDNlYWdlJiM0MzsmIzQzOztcbiBcbi1cdFx0aWYgKHByZXYgXHUwMDI2XHUwMDI2IHByZXYtXHUwMDNlYXIuZW5kID09IHItXHUwMDNlYXIuc3RhcnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhYnMocHJldi1cdTAwM2Vucl9hY2Nlc3NlcyAtIHItXHUwMDNlbnJfYWNjZXNzZXMpIFx1MDAzYz0gdGhyZXMgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBkYW1vbl9zel9yZWdpb24ocHJldikgJiM0MzsgZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gc3pfbGltaXQpXG4tXHRcdFx0ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRwcmV2ID0gcjtcbiYjNDM7XHRcdGlmICghcHJldilcbiYjNDM7XHRcdFx0Z290byBzZXRfcHJldl9jb250aW51ZTtcbiYjNDM7XHRcdGlmIChwcmV2LVx1MDAzZWFyLmVuZCAhPSByLVx1MDAzZWFyLnN0YXJ0KVxuJiM0MztcdFx0XHRnb3RvIHNldF9wcmV2X2NvbnRpbnVlO1xuJiM0MztcdFx0ZGlmZiA9IGFic19kaWZmKHNjb3JlLCBkYW1vbl9tZXJnZV9zY29yZShwcmV2LCBmYWxzZSwgY3R4LFxuJiM0MztcdFx0XHRcdFx0dXNlX3Byb2JlX2hpdHMpKTtcbiYjNDM7XHRcdGlmIChkaWZmIFx1MDAzZSB0aHJlcylcbiYjNDM7XHRcdFx0Z290byBzZXRfcHJldl9jb250aW51ZTtcbiYjNDM7XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocHJldikgJiM0MzsgZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzZSBzel9saW1pdClcbiYjNDM7XHRcdFx0Z290byBzZXRfcHJldl9jb250aW51ZTtcbiYjNDM7XHRcdGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHQsIHByZXYsIHIpO1xuJiM0MztcdFx0Y29udGludWU7XG4mIzQzO3NldF9wcmV2X2NvbnRpbnVlOlxuJiM0MztcdFx0cHJldiA9IHI7XG4gXHR9XG4gfVxuIFxuQEAgLTMyNzksNyAmIzQzOzMzNzIsNyBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbiBcdGRvIHtcbiBcdFx0bnJfcmVnaW9ucyA9IDA7XG4gXHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4tXHRcdFx0ZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCB0aHJlc2hvbGQsIHN6X2xpbWl0KTtcbiYjNDM7XHRcdFx0ZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCB0aHJlc2hvbGQsIHN6X2xpbWl0LCBjKTtcbiBcdFx0XHRucl9yZWdpb25zICYjNDM7PSBkYW1vbl9ucl9yZWdpb25zKHQpO1xuIFx0XHR9XG4gXHRcdHRocmVzaG9sZCA9IG1heCgxLCB0aHJlc2hvbGQgKiAyKTtcbkBAIC0zNjQzLDcgJiM0MzszNzM2LDYgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGF0YTtcbi1cdHVuc2lnbmVkIGludCBtYXhfbnJfYWNjZXNzZXMgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtrZGFtb25kICglZCkgc3RhcnRzXFxuXCYjMzQ7LCBjdXJyZW50LVx1MDAzZXBpZCk7XG5AQCAtMzY3NiwyNSAmIzQzOzM3NjgsMzggQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRcdHVuc2lnbmVkIGxvbmcgbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSBjdHgtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXM7XG4gXHRcdHVuc2lnbmVkIGxvbmcgbmV4dF9vcHNfdXBkYXRlX3NpcyA9IGN0eC1cdTAwM2VuZXh0X29wc191cGRhdGVfc2lzO1xuIFx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWw7XG4mIzQzO1x0XHRib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XG4mIzQzO1x0XHRib29sIGdldF9tYXhfd3N1bTtcbiBcbiBcdFx0aWYgKGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKGN0eCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdGlmIChjdHgtXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcylcbiYjNDM7XHRcdGlmICghYWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcylcbiBcdFx0XHRjdHgtXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcyhjdHgpO1xuIFxuIFx0XHRrZGFtb25kX3VzbGVlcChzYW1wbGVfaW50ZXJ2YWwpO1xuIFx0XHRjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMmIzQzOyYjNDM7O1xuIFxuLVx0XHRpZiAoY3R4LVx1MDAzZW9wcy5jaGVja19hY2Nlc3Nlcylcbi1cdFx0XHRtYXhfbnJfYWNjZXNzZXMgPSBjdHgtXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKGN0eCk7XG4tXHRcdGlmIChjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2Jlcylcbi1cdFx0XHRjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2JlcyhjdHgpO1xuJiM0MztcdFx0aWYgKCFhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMpXG4mIzQzO1x0XHRcdG1heF9tZXJnZV9zY29yZSA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbiYjNDM7XHRcdGlmIChjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2Jlcykge1xuJiM0MztcdFx0XHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4mIzQzO1x0XHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdGFjY2Vzc19jaGVja19kaXNhYmxlZClcbiYjNDM7XHRcdFx0XHRnZXRfbWF4X3dzdW0gPSB0cnVlO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0Z2V0X21heF93c3VtID0gZmFsc2U7XG4mIzQzO1x0XHRcdG1heF93c3VtID0gY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxuJiM0MztcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkLCBnZXRfbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRpZiAoZ2V0X21heF93c3VtKVxuJiM0MztcdFx0XHRcdG1heF9tZXJnZV9zY29yZSA9IG1heF93c3VtO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4gXHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSkge1xuIFx0XHRcdGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhjdHgsXG4tXHRcdFx0XHRcdG1heF9ucl9hY2Nlc3NlcyAvIDEwLFxuJiM0MztcdFx0XHRcdFx0bWF4X21lcmdlX3Njb3JlIC8gMTAsXG4gXHRcdFx0XHRcdHN6X2xpbWl0KTtcbiBcdFx0XHQvKiBvbmxpbmUgdXBkYXRlcyBtaWdodCBiZSBtYWRlICovXG4gXHRcdFx0c3pfbGltaXQgPSBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhjdHgpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCA2MTcyNDY0OTgxNzMwNC4uYjg1Zjg4YTdhMzhmNGQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTY2LDExICYjNDM7MTY2LDEzIEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHBhc3M7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxuIHtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuIFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XG4gXG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4gXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG5AQCAtMTc4LDYgJiM0MzsxODAsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0XHRcdHBoeXNfYWRkcl90IHBhO1xuIFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4mIzQzO1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuIFx0XHRcdHBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlc2FtcGxpbmdfYWRkcixcbiBcdFx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCk7XG4gXHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbkBAIC0xODgsOCAmIzQzOzE5MywxMiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0XHRcdH1cbiBcdFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuJiM0MztcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyZXR1cm4gbWF4X3dzdW07XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcbmluZGV4IDZkN2UzNmM5ZTUwOWQyLi5iNWZlMDM2Zjc4MDE1MiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0xMDY1LDYgJiM0MzsxMDY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcbiBcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xuIFx0c3RydWN0IGtvYmplY3Qga29iajtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmZpbHRlcnM7XG4gfTtcbiBcbkBAIC0xMTAwLDEyICYjNDM7MTEwMSwzNSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19wcm9iZV9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSAqcHJvYmUpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0Y2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxuJiM0MztcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBwcm9iZS1cdTAwM2V3ZWlnaHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxuJiM0MztcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xuJiM0MztcdGludCBlcnIgPSBrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2cHJvYmUtXHUwMDNld2VpZ2h0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4ge1xuIFx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSwga29iaikpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ciA9XG4mIzQzO1x0XHRfX0FUVFJfUldfTU9ERSh3ZWlnaHQsIDA2MDApO1xuJiM0MztcbiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfcHJvYmVfYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ci5hdHRyLFxuIFx0TlVMTCxcbiB9O1xuIEFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfcHJvYmUpO1xuQEAgLTE5NjUsNiAmIzQzOzE5ODksNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwKTtcbiBcdFx0c3lzX3Byb2JlID0gc3lzX3Byb2Jlcy1cdTAwM2Vwcm9iZXNfYXJyW2ldO1xuJiM0MztcdFx0cC1cdTAwM2V3ZWlnaHQgPSBzeXNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuIFx0XHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmUocCwgc3lzX3Byb2JlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggZDk3MjgwMjcwYzI3YjguLjZhZDczNTU5ZGQ4ZWFiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuIFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiBcdHVuc2lnbmVkIGxvbmcgc2FbXSA9IHswLCAxMDAsIDExNCwgMTIyLCAxMzAsIDE1NiwgMTcwLCAxODQsIDIzMH07XG5AQCAtMjM2LDIwICYjNDM7MjM3LDI3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHR1bnNpZ25lZCBsb25nIGVhZGRyc1tdID0gezExMiwgMTMwLCAxNTYsIDE3MCwgMjMwLCAxMDE3MH07XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O2N0eCBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XG4gXHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuLVx0aWYgKCF0KVxuJiM0MztcdGlmICghdCkge1xuJiM0MztcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDt0YXJnZXQgYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzYSk7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHNhW2ldLCBlYVtpXSk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuJiM0MztcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cmVnaW9uIGFsbG9jIGZhaWxcJiMzNDspO1xuIFx0XHR9XG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBucnNbaV07XG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG4tXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTkpO1xuJiM0MztcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgOSwgOTk5OSwgY3R4KTtcbiBcdC8qIDAtMTEyLCAxMTQtMTMwLCAxMzAtMTU2LCAxNTYtMTcwLCAxNzAtMjMwLCAyMzAtMTAxNzAgKi9cbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCA2dSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpJiM0MzsmIzQzOykge1xuQEAgLTI1OCw2ICYjNDM7MjY2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCBlYWRkcnNbaV0pO1xuIFx0fVxuIFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4mIzQzO1x0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfd3N1bSYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9zY29yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfc2V0X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9yZWdpb25zX29mJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfZm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O3dlaWdodF9zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICYjMzk7d2VpZ2h0JiMzOTsgYXR0cmlidXRlIGZvciBEQU1PTiBwcm9iZXMsIGVuYWJsaW5nICYjMzk7RGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZyYjMzk7LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHVzZSBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtcyBpbnN0ZWFkIG9mIGFjY2VzcyBjb3VudHMgZm9yIHJlZ2lvbiBhZGp1c3RtZW50IHdoZW4gd2VpZ2h0cyBhcmUgY29uZmlndXJlZC4gSXQgbW9kaWZpZXMgc3lzZnMgaW50ZXJmYWNlcywgY29yZSByZWdpb24gbWVyZ2luZyBsb2dpYywgYW5kIHBoeXNpY2FsIGFkZHJlc3MgcHJvYmUgYXBwbGljYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3ZmU5YzNjODdhNjU2MGQwNTEwZTE0OTI4YTBiZTQ4OTBiMGExM2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAxMDo0Mzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24KaW5kZXggZGQ2YjViZDc2ZTExOTYuLjkwN2E1MDRmYjY0YzU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgpAQCAtMTY0LDYgJiM0MzsxNjQsMTIgQEAgRGVzY3JpcHRpb246CVdyaXRpbmcgYSBudW1iZXIgJiMzOTtOJiMzOTsgdG8gdGhpcyBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZgogCQlkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iZSBuYW1lZCAmIzM5OzAmIzM5OyB0byAmIzM5O04tMSYjMzk7IHVuZGVyIHRoZQogCQlwcm9iZXMvIGRpcmVjdG9yeS4KIAomIzQzO1doYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7SyZndDsvY29udGV4dHMvJmx0O0MmZ3Q7L21vbml0b3JpbmdfYXR0cnMvcHJvYmVzLyZsdDtQJmd0Oy93ZWlnaHQKJiM0MztEYXRlOgkJSnVsIDIwMjYKJiM0MztDb250YWN0OglTSiBQYXJrICZsdDtzakBrZXJuZWwub3JnJmd0OwomIzQzO0Rlc2NyaXB0aW9uOglXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlCiYjNDM7CQlwZXItcHJvYmUgYXR0cmlidXRlIHdlaWdodC4KJiM0MzsKIFdoYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7SyZndDsvY29udGV4dHMvJmx0O0MmZ3Q7L21vbml0b3JpbmdfYXR0cnMvcHJvYmVzLyZsdDtQJmd0Oy9maWx0ZXJzL25yX2ZpbHRlcnMKIERhdGU6CQlNYXkgMjAyNgogQ29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggYjI2NDllYTAxMWY5MzEuLmRhNWY5YWZkMDhhZWY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdApAQCAtNzMsOSAmIzQzOzczLDEwIEBAIGNvbW1hICgmIzM0OywmIzM0OykuCiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGludGVydmFsc19nb2FsL2FjY2Vzc19icCxhZ2dycyxtaW5fc2FtcGxlX3VzLG1heF9zYW1wbGVfdXMKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBucl9yZWdpb25zL21pbixtYXgKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBwcm9iZXMgJmx0O2RhbW9uX3VzYWdlX3N5c2ZzX3Byb2JlcyZndDtgL25yX3Byb2JlcwotICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL2ZpbHRlcnMvbnJfZmlsdGVycwotICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGgKLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLgomIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC93ZWlnaHQKJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnMKJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGgKJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uCiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLgogICAgIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdGFyZ2V0cyAmbHQ7c3lzZnNfdGFyZ2V0cyZndDtgL25yX3RhcmdldHMKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmAwICZsdDtzeXNmc190YXJnZXQmZ3Q7YC9waWRfdGFyZ2V0LG9ic29sZXRlX3RhcmdldApAQCAtMjg2LDYgJiM0MzsyODcsMTAgQEAgSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3RvcnkKIGNvbnRhaW5zIGZpbGVzIGZvciBpbnN0YWxsaW5nIGZpbHRlcnMgZm9yIHRoZSBwcm9iZSwgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZQogdGhlIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgcHJvYmUuCiAKJiM0MztFYWNoIHByb2JlIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGBgd2VpZ2h0YGAgZmlsZS4gIFJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZwomIzQzO3RvIHRoZSBmaWxlIGdldHMgYW5kIHNldHMgdGhlIDpyZWY6YGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nCiYjNDM7Jmx0O2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmcmZ3Q7YCB3ZWlnaHQgZm9yIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHByb2JlLgomIzQzOwogSW4gdGhlIGJlZ2lubmluZywgYGBmaWx0ZXJzYGAgZGlyZWN0b3J5IGhhcyBvbmx5IG9uZSBmaWxlLCBgYG5yX2ZpbHRlcnNgYC4KIFdyaXRpbmcgYSBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXMKIG5hbWVkIGBgMGBgIHRvIGBgTi0xYGAuICBFYWNoIGRpcmVjdG9yeSByZXByZXNlbnRzIGVhY2ggZmlsdGVyIGFuZCB3b3JrcyBpbiBhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKaW5kZXggNDU3ZDZlOGJjNzg3ODUuLmFlZDZjYjFjZjQ4MzEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CkBAIC0zMTYsNiAmIzQzOzMxNiwzMSBAQCBBbm90aGVyIHdheSB0byBkbyB0aGlzIGZvciBoaWdoZXIgYWNjdXJhY3kgaXMgdXNpbmcgOnJlZjpgREFNT1MgZmlsdGVyCiBpbmZvcm1hdGlvbiBpbiBwYWdlIGxldmVsLiAgQnV0LCBiZWNhdXNlIGl0IGlzIG9wZXJhdGVkIGluIHBhZ2UgbGV2ZWwsIHRoZQogb3ZlcmhlYWQgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkuCiAKJiM0MzsuLiBfZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZzoKJiM0MzsKJiM0MztEYXRhIEF0dHJpYnV0ZXMtb25seSBNb25pdG9yaW5nCiYjNDM7fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgomIzQzOwomIzQzO0RhdGEgYWNjZXNzIGlzIHRoZSBwcmltYXJ5IG1vbml0b3JpbmcgaW5mb3JtYXRpb24gZm9yIERBTU9OLiAgSGVuY2UgaXQKJiM0Mzs6cmVmOmBhZGp1c3RzICZsdDtkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nJmd0O2AgcmVnaW9ucyB1c2luZyB0aGUgYWNjZXNzCiYjNDM7OnJlZjpgY291bnRlciAmbHQ7ZGFtb25fZGVzaWduX3JlZ2lvbl9iYXNlZF9zYW1wbGluZyZndDtgIChgYG5yX2FjY2Vzc2VzYGApLiAgSW4gc29tZQomIzQzO3VzZSBjYXNlcywgaG93ZXZlciwgdXNlcnMgbWF5IHdhbnQgc29tZSBvZiA6cmVmOmBhdHRyaWJ1dGVzCiYjNDM7Jmx0O2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmcmZ3Q7YCB0byBiZSB0aGUgcHJpbWFyeSBpbmZvcm1hdGlvbi4KJiM0MzsKJiM0MztEYXRhIGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nIG1vZGUgc3VwcG9ydHMgdGhpcyB1c2UgY2FzZS4gIEZvciB0aGUgbW9kZSwKJiM0MztlYWNoIGF0dHJpYnV0ZSBwcm9iZSBoYXMgdGhlaXIgcHJpb3JpdHkgd2VpZ2h0IHZhbHVlLiAgVXNlcnMgY2FuIGRlc2NyaWJlIGJ5CiYjNDM7d2hhdCBjb21iaW5hdGlvbiBvZiB0aGUgYXR0cmlidXRlcyB0aGUgcHJpbWFyeSBpbmZvcm1hdGlvbiBpcyBkZWNpZGVkLCBieQomIzQzO3NldHRpbmcgdGhlIHByaW9yaXR5IHdlaWdodCB2YWx1ZS4gIElmIHRoZSB0b3RhbCBzdW0gb2YgdGhlIHdlaWdodHMgaXMgbm90CiYjNDM7emVybywgdGhlIG1vZGUgaXMgZW5hYmxlZC4gIFRoZSByZWdpb25zIGFkanVzdG1lbnQgbWVjaGFuaXNtIHVzZXMgdGhlIHdlaWdodGVkCiYjNDM7c3VtIG9mIHRoZSA6cmVmOmBwcm9iZSBoaXQgY291bnRzICZsdDtkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nJmd0O2AgaW5zdGVhZAomIzQzO29mIGBgbnJfYWNjZXNzZXNgYCBpbiB0aGUgY2FzZS4gIFdoZW4gdGhlIG1vZGUgaXMgZW5hYmxlZCwgYWNjZXNzIG1vbml0b3JpbmcgaXMKJiM0MzthdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYuICBUaGUgYWNjZXNzIGNvdW50ZXIgKGBgbnJfYWNjZXNzZXNgYCkgd2lsbCBhbHdheXMgYmUKJiM0Mzt6ZXJvIGFuZCBub3QgdXBkYXRlZC4gIEhlbmNlIHRoZSBtb2RlIGlzIGNhbGxlZCBEYXRhIEF0dHJpYnV0ZXMgJiMzNDtvbmx5JiMzNDsKJiM0Mzttb25pdG9yaW5nLgomIzQzOwomIzQzO1JlZmVyIHRvIHRoZSA6cmVmOmBhZG1pbiBndWlkZSAmbHQ7ZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzJmd0O2AgdG8ga25vdyBob3cgdXNlcnMKJiM0MztjYW4gdXNlIHRoZSBtb2RlLgomIzQzOwogRHluYW1pYyBUYXJnZXQgU3BhY2UgVXBkYXRlcyBIYW5kbGluZwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKaW5kZXggNjNmNTk2OTU3YzFmMWYuLmY2OTQ0MmE5ZDQzMTI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCkBAIC02NDcsNyAmIzQzOzY0NywxMCBAQCBlbnVtIGRhbW9uX29wc19pZCB7CiAgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4IG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyB0aGF0IG1hZGUgYXMgYSByZXN1bHQKICAqIG9mIGl0cyB1cGRhdGUuICBUaGUgdmFsdWUgd2lsbCBiZSB1c2VkIGZvciByZWdpb25zIGFkanVzdG1lbnQgdGhyZXNob2xkLgogICogQGFwcGx5X3Byb2JlcyBzaG91bGQgYXBwbHkgdGhlIGRhdGEgYXR0cmlidXRlIHByb2JlcyB0byBlYWNoIHJlZ2lvbiBhbmQKLSAqIGFjY29yZGluZ2x5IHVwZGF0ZSB0aGUgcHJvYmUgaGl0cyBjb3VudGVyIG9mIHRoZSByZWdpb24uCiYjNDM7ICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi4gIEl0IHNob3VsZCBhbHNvCiYjNDM7ICogc2V0ICZhbXA7ZGFtb25fcmVnaW9uLSZndDtzYW1wbGluZ19hZGRyIG9mIGVhY2ggcmVnaW9uIGlmIGBgc2V0X3NhbXBsZXNgYCBpcyB0cnVlLgomIzQzOyAqIEl0IHNob3VsZCBhbHNvIHJldHVybiBtYXhpbXVtIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIHJlZ2lvbnMgaWYKJiM0MzsgKiBgYHJldHVybl9tYXhfd3N1bWBgIGlzIHRydWUuCiAgKiBAZ2V0X3NjaGVtZV9zY29yZSBzaG91bGQgcmV0dXJuIHRoZSBwcmlvcml0eSBzY29yZSBvZiBhIHJlZ2lvbiBmb3IgYSBzY2hlbWUKICAqIGFzIGFuIGludGVnZXIgaW4gWzAsICZhbXA7REFNT1NfTUFYX1NDT1JFXS4KICAqIEBhcHBseV9zY2hlbWUgaXMgY2FsbGVkIGZyb20gQGtkYW1vbmQgd2hlbiBhIHJlZ2lvbiBmb3IgdXNlciBwcm92aWRlZApAQCAtNjY1LDcgJiM0Mzs2NjgsOCBAQCBzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7CiAJdm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7CiAJdm9pZCAoKnByZXBhcmVfYWNjZXNzX2NoZWNrcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7CiAJdW5zaWduZWQgaW50ICgqY2hlY2tfYWNjZXNzZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpOwotCXZvaWQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpOwomIzQzOwl1bnNpZ25lZCBpbnQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsCiYjNDM7CQkJYm9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pOwogCWludCAoKmdldF9zY2hlbWVfc2NvcmUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsCiAJCQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSk7CiAJdW5zaWduZWQgbG9uZyAoKmFwcGx5X3NjaGVtZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwKQEAgLTc2MCwxMCAmIzQzOzc2NCwxMiBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHsKIC8qKgogICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLgogICoKJiM0MzsgKiBAd2VpZ2h0OglSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLgogICogQGZpbHRlcnM6CUZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4KICAqIEBsaXN0OglTaWJsaW5ncyBsaXN0LgogICovCiBzdHJ1Y3QgZGFtb25fcHJvYmUgewomIzQzOwl1bnNpZ25lZCBpbnQgd2VpZ2h0OwogCXN0cnVjdCBsaXN0X2hlYWQgZmlsdGVyczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwpAQCAtMTAwNiw2ICYjNDM7MTAxMiw4IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7CiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKIAkJdW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAxMTQ3M2FhMWY3MGY0MS4uODA2YTY3ZDAyYTZlOTAgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZCkKIAlwID0ga21hbGxvY19vYmooKnApOwogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CXAtJmd0O3dlaWdodCA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtwLSZndDtmaWx0ZXJzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3AtJmd0O2xpc3QpOwogCXJldHVybiBwOwpAQCAtMjA4LDYgJiM0MzsyMDksMTcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjKSB7CiYjNDM7CQlpZiAocC0mZ3Q7d2VpZ2h0KQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogZGFtb25fbXZzdW0oKSAtIFJldHVybnMgcHNldWRvIG1vdmluZyBzdW0gdmFsdWUgZm9yIGEgdGltZSB3aW5kb3cuCiAgKiBAY3VycmVudF9ucjoJCVRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuCkBAIC0zOTIsNiAmIzQzOzQwNCwzMCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCXJldHVybiBsaXN0X2lzX2xhc3QoJmFtcDtyLSZndDtsaXN0LCAmYW1wO3QtJmd0O3JlZ2lvbnNfbGlzdCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uCiYjNDM7ICogQHI6CQlyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuCiYjNDM7ICogQGxhc3Q6CWlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuCiYjNDM7ICogQGN0eDoJY29udGV4dCBvZiAmYW1wO3IuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLgomIzQzOyAqLwomIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAomIzQzOwkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTsKJiM0MzsJdW5zaWduZWQgaW50IHN1bSA9IDA7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkgewomIzQzOwkJaWYgKGxhc3QpCiYjNDM7CQkJc3VtICYjNDM7PSByLSZndDtsYXN0X3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtJmd0O3dlaWdodDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzdW0gJiM0Mzs9IHItJmd0O3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtJmd0O3dlaWdodDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gc3VtOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDaGVjayB3aGV0aGVyIGEgcmVnaW9uIGlzIGludGVyc2VjdGluZyBhbiBhZGRyZXNzIHJhbmdlCiAgKgpAQCAtMTMwMiw2ICYjNDM7MTMzOCwzNCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpCiAJCWRhbW9zX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoJmFtcDtzLSZndDtvcHNfZmlsdGVycyk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7CiYjNDM7CXVuc2lnbmVkIGNoYXIgbWF4X3Byb2JlX2hpdHM7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CXVuc2lnbmVkIGludCB3c3VtLCB3c3VtX3RvX2FkZDsKJiM0MzsKJiM0MzsJaWYgKCFkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXNhbXBsZV9pbnRlcnZhbCA9IGN0eC0mZ3Q7YXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxOwomIzQzOwlpZiAoY3R4LSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsICZndDsgVThfTUFYKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBpbnZhbGlkIGlmIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbiBvdmVyZmxvdyAqLwomIzQzOwltYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDtjdHgtJmd0O2F0dHJzKTsKJiM0MzsJd3N1bSA9IDA7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKJiM0MzsJCWlmIChwcm9iZS0mZ3Q7d2VpZ2h0ICZndDsgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cykKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl3c3VtX3RvX2FkZCA9IHByb2JlLSZndDt3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0czsKJiM0MzsJCWlmIChVSU5UX01BWCAtIHdzdW0gJmx0OyB3c3VtX3RvX2FkZCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl3c3VtICYjNDM7PSB3c3VtX3RvX2FkZDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuCiAgKiBAZHN0OglEZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgdG8gdXBkYXRlLgpAQCAtMTY1OCw2ICYjNDM7MTcyMiw3IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYykKIAlkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKGRzdF9wcm9iZSwgbmV4dCwgZHN0KSB7CiAJCXNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShpJiM0MzsmIzQzOywgc3JjKTsKIAkJaWYgKHNyY19wcm9iZSkgewomIzQzOwkJCWRzdF9wcm9iZS0mZ3Q7d2VpZ2h0ID0gc3JjX3Byb2JlLSZndDt3ZWlnaHQ7CiAJCQllcnIgPSBkYW1vbl9jb21taXRfZmlsdGVycyhkc3RfcHJvYmUsIHNyY19wcm9iZSk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CkBAIC0xNjc0LDYgJiM0MzsxNzM5LDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQogCQlpZiAoIW5ld19wcm9iZSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlkYW1vbl9hZGRfcHJvYmUoZHN0LCBuZXdfcHJvYmUpOwomIzQzOwkJbmV3X3Byb2JlLSZndDt3ZWlnaHQgPSBzcmNfcHJvYmUtJmd0O3dlaWdodDsKIAkJZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMobmV3X3Byb2JlLCBzcmNfcHJvYmUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTE3MDQsNiAmIzQzOzE3NzAsOSBAQCBzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYykKIAkJfQogCX0KIAomIzQzOwlpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJZXJyID0gZGFtb25fY29tbWl0X3NjaGVtZXMoZHN0LCBzcmMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0zMjIxLDYgJiM0MzszMjkwLDE2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJZGFtb25fZGVzdHJveV9yZWdpb24ociwgdCk7CiB9CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cykKJiM0Mzt7CiYjNDM7CWlmICh1c2VfcHJvYmVfaGl0cykKJiM0MzsJCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTsKJiM0MzsJaWYgKGxhc3QpCiYjNDM7CQlyZXR1cm4gci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlczsKJiM0MzsJcmV0dXJuIHItJmd0O25yX2FjY2Vzc2VzOwomIzQzO30KJiM0MzsKIC8qCiAgKiBNZXJnZSBhZGphY2VudCByZWdpb25zIGhhdmluZyBzaW1pbGFyIGFjY2VzcyBmcmVxdWVuY2llcwogICoKQEAgLTMyMjksMjQgJiM0MzszMzA4LDM4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAgKiBzel9saW1pdAlzaXplIHVwcGVyIGxpbWl0IG9mIGVhY2ggcmVnaW9uCiAgKi8KIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3pfbGltaXQpCiYjNDM7CQl1bnNpZ25lZCBsb25nIHN6X2xpbWl0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiB7CiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDsKJiM0MzsJYm9vbCB1c2VfcHJvYmVfaGl0cyA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7CiAKIAlkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7Ci0JCWlmIChhYnMoci0mZ3Q7bnJfYWNjZXNzZXMgLSByLSZndDtsYXN0X25yX2FjY2Vzc2VzKSAmZ3Q7IHRocmVzKQomIzQzOwkJdW5zaWduZWQgaW50IHNjb3JlLCBsYXN0X3Njb3JlLCBkaWZmOwomIzQzOwomIzQzOwkJc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7CiYjNDM7CQlsYXN0X3Njb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgdHJ1ZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7CiYjNDM7CiYjNDM7CQlpZiAoYWJzX2RpZmYoc2NvcmUsIGxhc3Rfc2NvcmUpICZndDsgdGhyZXMpCiAJCQlyLSZndDthZ2UgPSAwOwotCQllbHNlIGlmICgoci0mZ3Q7bnJfYWNjZXNzZXMgPT0gMCkgIT0gKHItJmd0O2xhc3RfbnJfYWNjZXNzZXMgPT0gMCkpCiYjNDM7CQllbHNlIGlmICgoc2NvcmUgPT0gMCkgIT0gKGxhc3Rfc2NvcmUgPT0gMCkpCiAJCQlyLSZndDthZ2UgPSAwOwogCQllbHNlCiAJCQlyLSZndDthZ2UmIzQzOyYjNDM7OwogCi0JCWlmIChwcmV2ICZhbXA7JmFtcDsgcHJldi0mZ3Q7YXIuZW5kID09IHItJmd0O2FyLnN0YXJ0ICZhbXA7JmFtcDsKLQkJICAgIGFicyhwcmV2LSZndDtucl9hY2Nlc3NlcyAtIHItJmd0O25yX2FjY2Vzc2VzKSAmbHQ7PSB0aHJlcyAmYW1wOyZhbXA7Ci0JCSAgICBkYW1vbl9zel9yZWdpb24ocHJldikgJiM0MzsgZGFtb25fc3pfcmVnaW9uKHIpICZsdDs9IHN6X2xpbWl0KQotCQkJZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7Ci0JCWVsc2UKLQkJCXByZXYgPSByOwomIzQzOwkJaWYgKCFwcmV2KQomIzQzOwkJCWdvdG8gc2V0X3ByZXZfY29udGludWU7CiYjNDM7CQlpZiAocHJldi0mZ3Q7YXIuZW5kICE9IHItJmd0O2FyLnN0YXJ0KQomIzQzOwkJCWdvdG8gc2V0X3ByZXZfY29udGludWU7CiYjNDM7CQlkaWZmID0gYWJzX2RpZmYoc2NvcmUsIGRhbW9uX21lcmdlX3Njb3JlKHByZXYsIGZhbHNlLCBjdHgsCiYjNDM7CQkJCQl1c2VfcHJvYmVfaGl0cykpOwomIzQzOwkJaWYgKGRpZmYgJmd0OyB0aHJlcykKJiM0MzsJCQlnb3RvIHNldF9wcmV2X2NvbnRpbnVlOwomIzQzOwkJaWYgKGRhbW9uX3N6X3JlZ2lvbihwcmV2KSAmIzQzOyBkYW1vbl9zel9yZWdpb24ocikgJmd0OyBzel9saW1pdCkKJiM0MzsJCQlnb3RvIHNldF9wcmV2X2NvbnRpbnVlOwomIzQzOwkJZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7CiYjNDM7CQljb250aW51ZTsKJiM0MztzZXRfcHJldl9jb250aW51ZToKJiM0MzsJCXByZXYgPSByOwogCX0KIH0KIApAQCAtMzI3OSw3ICYjNDM7MzM3Miw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLAogCWRvIHsKIAkJbnJfcmVnaW9ucyA9IDA7CiAJCWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7Ci0JCQlkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIHRocmVzaG9sZCwgc3pfbGltaXQpOwomIzQzOwkJCWRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCwgYyk7CiAJCQlucl9yZWdpb25zICYjNDM7PSBkYW1vbl9ucl9yZWdpb25zKHQpOwogCQl9CiAJCXRocmVzaG9sZCA9IG1heCgxLCB0aHJlc2hvbGQgKiAyKTsKQEAgLTM2NDMsNyAmIzQzOzM3MzYsNiBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGRhdGE7Ci0JdW5zaWduZWQgaW50IG1heF9ucl9hY2Nlc3NlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7CiAKIAlwcl9kZWJ1ZygmIzM0O2tkYW1vbmQgKCVkKSBzdGFydHNcbiYjMzQ7LCBjdXJyZW50LSZndDtwaWQpOwpAQCAtMzY3NiwyNSAmIzQzOzM3NjgsMzggQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpCiAJCXVuc2lnbmVkIGxvbmcgbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSBjdHgtJmd0O25leHRfYWdncmVnYXRpb25fc2lzOwogCQl1bnNpZ25lZCBsb25nIG5leHRfb3BzX3VwZGF0ZV9zaXMgPSBjdHgtJmd0O25leHRfb3BzX3VwZGF0ZV9zaXM7CiAJCXVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWw7CiYjNDM7CQlib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07CiYjNDM7CQlib29sIGdldF9tYXhfd3N1bTsKIAogCQlpZiAoa2RhbW9uZF93YWl0X2FjdGl2YXRpb24oY3R4KSkKIAkJCWJyZWFrOwogCi0JCWlmIChjdHgtJmd0O29wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpCiYjNDM7CQlpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCAmYW1wOyZhbXA7IGN0eC0mZ3Q7b3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcykKIAkJCWN0eC0mZ3Q7b3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcyhjdHgpOwogCiAJCWtkYW1vbmRfdXNsZWVwKHNhbXBsZV9pbnRlcnZhbCk7CiAJCWN0eC0mZ3Q7cGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMmIzQzOyYjNDM7OwogCi0JCWlmIChjdHgtJmd0O29wcy5jaGVja19hY2Nlc3NlcykKLQkJCW1heF9ucl9hY2Nlc3NlcyA9IGN0eC0mZ3Q7b3BzLmNoZWNrX2FjY2Vzc2VzKGN0eCk7Ci0JCWlmIChjdHgtJmd0O29wcy5hcHBseV9wcm9iZXMpCi0JCQljdHgtJmd0O29wcy5hcHBseV9wcm9iZXMoY3R4KTsKJiM0MzsJCWlmICghYWNjZXNzX2NoZWNrX2Rpc2FibGVkICZhbXA7JmFtcDsgY3R4LSZndDtvcHMuY2hlY2tfYWNjZXNzZXMpCiYjNDM7CQkJbWF4X21lcmdlX3Njb3JlID0gY3R4LSZndDtvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTsKJiM0MzsJCWlmIChjdHgtJmd0O29wcy5hcHBseV9wcm9iZXMpIHsKJiM0MzsJCQlpZiAodGltZV9hZnRlcl9lcShjdHgtJmd0O3Bhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLAomIzQzOwkJCQkJCW5leHRfYWdncmVnYXRpb25fc2lzKSAmYW1wOyZhbXA7CiYjNDM7CQkJCQlhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpCiYjNDM7CQkJCWdldF9tYXhfd3N1bSA9IHRydWU7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlnZXRfbWF4X3dzdW0gPSBmYWxzZTsKJiM0MzsJCQltYXhfd3N1bSA9IGN0eC0mZ3Q7b3BzLmFwcGx5X3Byb2JlcyhjdHgsCiYjNDM7CQkJCQlhY2Nlc3NfY2hlY2tfZGlzYWJsZWQsIGdldF9tYXhfd3N1bSk7CiYjNDM7CQkJaWYgKGdldF9tYXhfd3N1bSkKJiM0MzsJCQkJbWF4X21lcmdlX3Njb3JlID0gbWF4X3dzdW07CiYjNDM7CQl9CiAKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LSZndDtwYXNzZWRfc2FtcGxlX2ludGVydmFscywKIAkJCQkJbmV4dF9hZ2dyZWdhdGlvbl9zaXMpKSB7CiAJCQlrZGFtb25kX21lcmdlX3JlZ2lvbnMoY3R4LAotCQkJCQltYXhfbnJfYWNjZXNzZXMgLyAxMCwKJiM0MzsJCQkJCW1heF9tZXJnZV9zY29yZSAvIDEwLAogCQkJCQlzel9saW1pdCk7CiAJCQkvKiBvbmxpbmUgdXBkYXRlcyBtaWdodCBiZSBtYWRlICovCiAJCQlzel9saW1pdCA9IGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKGN0eCk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCA2MTcyNDY0OTgxNzMwNC4uYjg1Zjg4YTdhMzhmNGQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMTY2LDExICYjNDM7MTY2LDEzIEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiBwYXNzOwogfQogCi1zdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCWJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKQogewogCXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKIAlzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7CiYjNDM7CXVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7CiAKIAlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiAJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7CkBAIC0xNzgsNiAmIzQzOzE4MCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJCQlwaHlzX2FkZHJfdCBwYTsKIAkJCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKJiM0MzsJCQlpZiAoc2V0X3NhbXBsZXMpCiYjNDM7CQkJCXItJmd0O3NhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci0mZ3Q7YXIuc3RhcnQsCiYjNDM7CQkJCQkJci0mZ3Q7YXIuZW5kKTsKIAkJCXBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItJmd0O3NhbXBsaW5nX2FkZHIsCiAJCQkJCWN0eC0mZ3Q7YWRkcl91bml0KTsKIAkJCWZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhKSk7CkBAIC0xODgsOCAmIzQzOzE5MywxMiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCQkJfQogCQkJaWYgKGZvbGlvKQogCQkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldHVybl9tYXhfd3N1bSkKJiM0MzsJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAomIzQzOwkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAl9CiYjNDM7CXJldHVybiBtYXhfd3N1bTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jCmluZGV4IDZkN2UzNmM5ZTUwOWQyLi5iNWZlMDM2Zjc4MDE1MiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jCkBAIC0xMDY1LDYgJiM0MzsxMDY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHsKIAogc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlIHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwomIzQzOwl1bnNpZ25lZCBpbnQgd2VpZ2h0OwogCXN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpmaWx0ZXJzOwogfTsKIApAQCAtMTEwMCwxMiAmIzQzOzExMDEsMzUgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlKQogCX0KIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiYjNDM7CQljaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlLCBrb2JqKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgcHJvYmUtJmd0O3dlaWdodCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHdlaWdodF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlLCBrb2JqKTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCAmYW1wO3Byb2JlLSZndDt3ZWlnaHQpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKIAlrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlLCBrb2JqKSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3Byb2JlX3dlaWdodF9hdHRyID0KJiM0MzsJCV9fQVRUUl9SV19NT0RFKHdlaWdodCwgMDYwMCk7CiYjNDM7CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfcHJvYmVfYXR0cnNbXSA9IHsKJiM0MzsJJmFtcDtkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogQVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcm9iZSk7CkBAIC0xOTY1LDYgJiM0MzsxOTg5LDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKIAkJCXJldHVybiAtRU5PTUVNOwogCQlkYW1vbl9hZGRfcHJvYmUoY3R4LCBwKTsKIAkJc3lzX3Byb2JlID0gc3lzX3Byb2Jlcy0mZ3Q7cHJvYmVzX2FycltpXTsKJiM0MzsJCXAtJmd0O3dlaWdodCA9IHN5c19wcm9iZS0mZ3Q7d2VpZ2h0OwogCQllcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmUocCwgc3lzX3Byb2JlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggZDk3MjgwMjcwYzI3YjguLjZhZDczNTU5ZGQ4ZWFiIDEwMDY0NAotLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeCkKIAogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdCkKIHsKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqY3R4OwogCXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKIAl1bnNpZ25lZCBsb25nIHNhW10gPSB7MCwgMTAwLCAxMTQsIDEyMiwgMTMwLCAxNTYsIDE3MCwgMTg0LCAyMzB9OwpAQCAtMjM2LDIwICYjNDM7MjM3LDI3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJdW5zaWduZWQgbG9uZyBlYWRkcnNbXSA9IHsxMTIsIDEzMCwgMTU2LCAxNzAsIDIzMCwgMTAxNzB9OwogCWludCBpOwogCiYjNDM7CWN0eCA9IGRhbW9uX25ld19jdHgoKTsKJiM0MzsJaWYgKCFjdHgpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7Y3R4IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CiAJdCA9IGRhbW9uX25ld190YXJnZXQoKTsKLQlpZiAoIXQpCiYjNDM7CWlmICghdCkgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoY3R4KTsKIAkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O3RhcmdldCBhbGxvYyBmYWlsJiMzNDspOwomIzQzOwl9CiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoc2EpOyBpJiM0MzsmIzQzOykgewogCQlyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pOwogCQlpZiAoIXIpIHsKIAkJCWRhbW9uX2ZyZWVfdGFyZ2V0KHQpOwomIzQzOwkJCWRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7CiAJCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7cmVnaW9uIGFsbG9jIGZhaWwmIzM0Oyk7CiAJCX0KIAkJci0mZ3Q7bnJfYWNjZXNzZXMgPSBucnNbaV07CiAJCWRhbW9uX2FkZF9yZWdpb24ociwgdCk7CiAJfQogCi0JZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCA5LCA5OTk5KTsKJiM0MzsJZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCA5LCA5OTk5LCBjdHgpOwogCS8qIDAtMTEyLCAxMTQtMTMwLCAxMzAtMTU2LCAxNTYtMTcwLCAxNzAtMjMwLCAyMzAtMTAxNzAgKi8KIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgNnUpOwogCWZvciAoaSA9IDA7IGkgJmx0OyA2OyBpJiM0MzsmIzQzOykgewpAQCAtMjU4LDYgJiM0MzsyNjYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KQogCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuZW5kLCBlYWRkcnNbaV0pOwogCX0KIAlkYW1vbl9mcmVlX3RhcmdldCh0KTsKJiM0MzsJZGFtb25fZGVzdHJveV9jdHgoY3R4KTsKIH0KIAogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgaW50cm9kdWNpbmcgYSBgd2VpZ2h0YCBhdHRyaWJ1dGUgdG8gREFNT04gcHJvYmVzLiBUaGlzIGlzIHByZXR0eSBzaWduaWZpY2FudDsgaXQmIzM5O3MgZW5hYmxpbmcgJiMzNDtEYXRhIEF0dHJpYnV0ZXMtb25seSBNb25pdG9yaW5nLCYjMzQ7IHdoaWNoIGNvdWxkIG9wZW4gdXAgc29tZSBpbnRlcmVzdGluZyBwb3NzaWJpbGl0aWVzLiBJJiMzOTttIHNlZWluZyBpdCB0b3VjaCBxdWl0ZSBhIGZldyBmaWxlczogYERvY3VtZW50YXRpb24vYCwgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGUgc3lzZnMgaW50ZXJmYWNlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCwgYW5kIGV2ZW4gYSBLVW5pdCB0ZXN0IGZpbGUsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBidWcgZml4LgoKU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYSBuZXcgYHdlaWdodGAgc3lzZnMgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgYSBgZGFtb25fbWVyZ2Vfc2NvcmVgLCBhbmQgY3J1Y2lhbGx5LCBpdCB3aWxsIGJlIHVzaW5nIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGlmIHRoZSBwcm9iZSB3ZWlnaHRzIGFyZSBhY3RpdmUsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB3aWxsIGJlIGNoZWNrZWQgYnkgYGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eClgLiBJIHNob3VsZCBsb29rIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhvdyB3ZWlnaHRzIGFyZSBlbmFibGVkLiBBbHNvLCBga2RhbW9uZF9mbmAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIGBtYXhfd3N1bWAgYW5kIHNraXAgdGhlIGFjY2VzcyBjaGVja3Mgd2hlbiBwcm9iZSB3ZWlnaHRzIGFyZSBhY3RpdmUgYW5kIGBhY2Nlc3NfY2hlY2tfZGlzYWJsZWRgLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBBbHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBtbS9kYW1vbi9LY29uZmlnYCBmb3IgdGhlIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9uczogYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBhbmQgYENPTkZJR19EQU1PTl9QQUREUmAuCgpOb3csIGxldCBtZSBydW4gYSBxdWljayBzZWFyY2ggb24gYENPTkZJR19EQU1PTmAgdGhyb3VnaG91dCB0aGUga2VybmVsIHRyZWUgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGV4aXN0aW5nIHVzYWdlIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIGFuZCBob3cgdGhpcyBuZXcgd2VpZ2h0IGZlYXR1cmUgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvcmUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggREFNT04gY29uZmlndXJhdGlvbnMgaGVyZTogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9QQUREUmAuIE5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgZHJpdmluZyB0aGUgYWN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGNyaXRpY2FsIG9uZXMgc2VlbSB0byBiZTogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYCwgYGtkYW1vbmRfZm5gLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCwgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLCBhbmQgdGhlbiB0aGUgc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucywgYHdlaWdodF9zdG9yZWAsIGFuZCBgd2VpZ2h0X3Nob3dgLiBUaGUgZmlyc3QgZnVuY3Rpb24gbGlzdGVkLCBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgbG9va3MgbGlrZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBvbmUgdG8gc3RhcnQgd2l0aCwgc28gSSYjMzk7bGwgY2hlY2sgaXRzIGxvY2F0aW9uIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgaXMgYWxsIHdvcmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz00MDE9c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDA3LS8qKlxubW0vZGFtb24vY29yZS5jOjQwODogKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG5tbS9kYW1vbi9jb3JlLmMtNDA5LSAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4tLVxubW0vZGFtb24vY29yZS5jLTQxNC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0MTU6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmMtNDE2LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jPTMyOTM9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTYtXHRpZiAodXNlX3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmM6MzI5NzpcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xubW0vZGFtb24vY29yZS5jLTMyOTgtXHRpZiAobGFzdClcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE2OT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xOTYtXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbm1tL2RhbW9uL3BhZGRyLmM6MTk3Olx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxubW0vZGFtb24vcGFkZHIuYy0xOTgtXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGZpbHRlcmVkIHRocm91Z2ggbXkgZXhwZXJ0IGxlbnM6CgoqKkFuYWx5emluZyBEQU1PTiBQcm9iaW5nIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBteSBicmFpbiBpcyBmb2N1c2VkLiBNeSBwcmlvcml0aWVzIGluIHRoaXMgREFNT04gY29udGV4dCBhcmUgY2xlYXJseSBsYWlkIG91dC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgYGRhbW9uX21lcmdlX3Njb3JlYCwgYGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc2AsIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYCwgYHdlaWdodF9zdG9yZWAsIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLCBhbmQgYGtkYW1vbmRfZm5gLiBUaG9zZSBhcmUgdGhlIGNvcmUgY29tcG9uZW50cyB0aGF0IG5lZWQgdGhlIGNsb3Nlc3Qgc2NydXRpbnkuIEl0JiMzOTtzIGEgdmVyeSB0YXJnZXRlZCBsaXN0LCBzbyB0aGUgZ29hbCBpcyBsaWtlbHkgYSBzcGVjaWZpYyBpc3N1ZS4KCk15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIGZlZCBpbnRvIHRoaXMgYXJlIHZhbGlkLCBiZWNhdXNlIGl0IGlzIHRoZSBnYXRla2VlcGVyIG9mIHdoYXQgaXMgdmFsaWQsIGFuZCB0aGVyZWZvcmUgY29ycmVjdCBmdW5jdGlvbmluZyBvZiB0aGUgdW5kZXJseWluZyBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgcHJvYmVzIGFyZSBiZWluZyBpbml0aWF0ZWQgYW5kIHdoYXQgY2hlY2tzIGFuZCBiYWxhbmNlcyBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBEQU1PTiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTMzMD1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNDAtXG5tbS9kYW1vbi9jb3JlLmM6MTM0MTpzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTEzNDIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzUwPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVxubW0vZGFtb24vY29yZS5jOjE3NzM6XHRpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKVxubW0vZGFtb24vY29yZS5jLTE3NzQtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTE1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgdXNlciBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgV2VpZ2h0IFN0b3JlKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHdlaWdodF9zdG9yZWAuIEkgbmVlZCB0byBhc3Nlc3MgaXRzIHN0YXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGludGVncml0eS4gSXMgaXQgcG9wdWxhdGVkIGNvcnJlY3RseT8gQXJlIHRoZSB3ZWlnaHRzIGluIHRoZSBmb3JtYXQgSSBleHBlY3QsIG9yIGRpZCBzb21ldGhpbmcgdXBzdHJlYW0gbWVzcyB3aXRoIHRoZSBkYXRhPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHVuZXhwZWN0ZWQgdmFsdWVzIGltbWVkaWF0ZWx5LiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cyBpZiB0aGUgd2VpZ2h0cyBhcmUgY29ycnVwdGVkIG9yIG1pc2NhbGlicmF0ZWQ/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCByYW5nZSBmcm9tIHN1YnRsZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiB0byBvdXRyaWdodCBtb2RlbCBmYWlsdXJlLiBNeSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBkZWJ1Z2dpbmcgc2NlbmFyaW9zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgd2VpZ2h0X3N0b3JlYCBpc24mIzM5O3Qgc2lsZW50bHkgYnJva2VuIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgY291bGQgc2F2ZSBtZSBhIGhlYWRhY2hlIGRvd24gdGhlIGxpbmUsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2VpZ2h0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDgwPXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDg4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwODk6c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwOTAtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTA0PXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMTEyLVxubW0vZGFtb24vc3lzZnMuYzoxMTEzOnN0YXRpYyBzc2l6ZV90IHdlaWdodF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMTExNC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBEQU1PTiBDb21wb25lbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgYGRhbW9uX21lcmdlX3Njb3JlYCwgYGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc2AsIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLiBBbmQgdGhlIGFzc29jaWF0ZWQgY29uZmlncyBhcmUgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9QQUREUmAuIFNlZW1zIGxpa2UgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBhIERBTU9OIHNldHVwLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gIFRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIGZvciBwcm9iZSBjb25maWd1cmF0aW9uLiAgVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gIEkmIzM5O2QgYmV0dGVyIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IG9uZS4gIEl0IHNob3VsZCBiZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AsIHJpZ2h0PyAgTGV0JiMzOTtzIGdvIHRha2UgYSBwZWVrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19zZXRfcHJvYmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MTk2Nz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTk3Ny1cbm1tL2RhbW9uL3N5c2ZzLmM6MTk3ODpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMuYy0xOTc5LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmVzICpzeXNfcHJvYmVzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTEwLVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vc3lzZnMuYzoyMTExOlx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlcyhjdHgsIHN5c19jdHgtXHUwMDNlYXR0cnMtXHUwMDNlcHJvYmVzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjExMi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZnVuY3Rpb25zIGluIGEgREFNT04gY29udGV4dDoKCioqREFNT04gUHJvYmUgYW5kIFJlZ2lvbiBNYW5hZ2VtZW50IFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBJJiMzOTttIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgREFNT04gYW5hbHlzaXMuIEkgbmVlZCB0byBiZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYCBmdW5jdGlvbiBpbiBteSBhc3Nlc3NtZW50LiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBwcm9iZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYW5kIGNvbmZpZ3VyZWQgYXQgdGhlIHVzZXIgbGV2ZWwsIHdoaWNoIGRpcmVjdGx5IGltcGFjdHMgREFNT04mIzM5O3MgYmVoYXZpb3IuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGF0IGludGVyYWN0aW9uLgoKVGhlbiwgbW92aW5nIG9uLCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAgaXMgYSBrZXkgYXJlYSB0byByZS1leGFtaW5lLiBSZWdpb24gbWVyZ2luZyBpcyBhdCB0aGUgaGVhcnQgb2YgREFNT04mIzM5O3MgZWZmaWNpZW5jeSwgYW5kIHRoaXMgZnVuY3Rpb24gZ292ZXJucyBob3cgcmVnaW9ucyBhcmUgY29tYmluZWQgYmFzZWQgb24gYWNjZXNzIHBhdHRlcm5zIG9yIG90aGVyIGNyaXRlcmlhLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIGFuZCBhbGdvcml0aG1zIGVtcGxveWVkIGhlcmUuIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIG1lcmdlIGxvZ2ljIGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gZHluYW1pY2FsbHkgYWRhcHRzIHRvIGNoYW5naW5nIG1lbW9yeSBhY2Nlc3MgY2hhcmFjdGVyaXN0aWNzLCBhbmQgc28sIGNyaXRpY2FsIHRvIGFueSBwZXJmb3JtYW5jZSBhbmQgb3ZlcmhlYWQgZXZhbHVhdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgREFNT04gZGVjaWRlcyB0byBtZXJnZSBvciBub3QgdG8gbWVyZ2UgdGhlc2UgcmVnaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbWVyZ2VfcmVnaW9uc19vZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI5Mz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMwOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzEwOnN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxubW0vZGFtb24vY29yZS5jLTMzMTEtXHRcdHVuc2lnbmVkIGxvbmcgc3pfbGltaXQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM2Mz1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM3NC1cdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYzozMzc1Olx0XHRcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCwgYyk7XG5tbS9kYW1vbi9jb3JlLmMtMzM3Ni1cdFx0XHRucl9yZWdpb25zICYjNDM7PSBkYW1vbl9ucl9yZWdpb25zKHQpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yMjc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjU5LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjI2MDpcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgOSwgOTk5OSwgY3R4KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNjEtXHQvKiAwLTExMiwgMTE0LTEzMCwgMTMwLTE1NiwgMTU2LTE3MCwgMTcwLTIzMCwgMjMwLTEwMTcwICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKlByb2Nlc3NpbmcgYSBDb2RlIEludGVncmF0aW9uKioKClJpZ2h0LCBJIG5lZWQgdG8gYnJpbmcgaW4gdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSwgYW5kIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB3b3JrIHdpdGggYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0IGxpa2VseSBoYW5kbGVzIGhvdyB3ZSBjb21iaW5lIHRoZXNlIHNwZWNpZmljIHJlZ2lvbnMgaW4gdGhlIGRhdGFzZXQuCgpCZWZvcmUgSSBjb21taXQgdG8gdXNpbmcgdGhhdCB0aG91Z2gsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGtkYW1vbmRfZm5gLCBhcyBpdCBzb3VuZHMgbGlrZSBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIGZyYW1ld29yayBhbmQgY291bGQgdmVyeSB3ZWxsIGFmZmVjdCBvciBiZSBhZmZlY3RlZCBieSBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAuIFVuZGVyc3RhbmRpbmcgdGhlIGV4YWN0IHJvbGUgb2YgYGtkYW1vbmRfZm5gIGlzIGNydWNpYWwgYmVmb3JlIHByb2NlZWRpbmcuIE5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgY29uZmxpY3RzIG9yIGluZWZmaWNpZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDEyPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzQtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXG5tbS9kYW1vbi9jb3JlLmM6MTAzNTogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwMzYtICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAzOS0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbm1tL2RhbW9uL2NvcmUuYzoxMDQwOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxubW0vZGFtb24vY29yZS5jLTEwNDEtICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA0Nz1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA3My1cdC8qXG5tbS9kYW1vbi9jb3JlLmM6MTA3NDpcdCAqIG5leHRfaW50ZXJ2YWxzX3R1bmVfc2lzIHdpbGwgYmUgdXBkYXRlZCBpbnNpZGUga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwNzUtXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjEtXG5tbS9kYW1vbi9jb3JlLmM6MTkyMjpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG5tbS9kYW1vbi9jb3JlLmMtMTkyMy1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkzMj1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTM5LVx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYzoxOTQwOlx0XHRjdHgtXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXCYjMzQ7a2RhbW9uZC4lZFwmIzM0Oyxcbm1tL2RhbW9uL2NvcmUuYy0xOTQxLVx0XHRcdFx0bnJfcnVubmluZ19jdHhzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzNj12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MjA0MTpcdFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cbm1tL2RhbW9uL2NvcmUuYy0yMDQyLVx0XHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM3MTQ9c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3MzUtICovXG5tbS9kYW1vbi9jb3JlLmM6MzczNjpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbm1tL2RhbW9uL2NvcmUuYy0zNzM3LXtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQ5NT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUyMS0gKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTIyOiAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFwmIzM0O21tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVwmIzM0Oylcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTIzLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBhbmQgSW50ZWdyYXRpbmcgYGtkYW1vbmRfZm5gIGFuZCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmdWxseSB1cCB0byBzcGVlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhZmZhaXJzLiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gaW5jbHVkZSBga2RhbW9uZF9mbmAgaW4gdGhlIGVxdWF0aW9uLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBjb21wb25lbnQsIHNvIEkgZG9uJiMzOTt0IHdhbnQgdG8gb3Zlcmxvb2sgdGhhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGhpbiB0aGlzIHN5c3RlbS4KCkFuZCB0aGVuLCBJIHNob3VsZCBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCB0aGUgZnVuY3Rpb24sIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLiBJIHJlbWVtYmVyIHRoYXQgb25lLi4uIGl0JiMzOTtzIHBpdm90YWwsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBpbnB1dHMsIG91dHB1dHMsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNsZWFyIG9uIGhvdyB0aG9zZSB0d28gZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHksIGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wYV9hcHBseV9wcm9iZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcGFkZHIuYz0xNTM9c3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX3Bhc3MocGh5c19hZGRyX3QgcGEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNjgtXG5tbS9kYW1vbi9wYWRkci5jOjE2OTpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9wYWRkci5jLTE3MC1cdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vcGFkZHIuYz00NDc9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQ1NC1cdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXG5tbS9kYW1vbi9wYWRkci5jOjQ1NTpcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3BhX2FwcGx5X3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmMtNDU2LVx0XHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MzkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSByZXF1ZXN0ZWQsIHNwZWFraW5nIGFzIGFuIGV4cGVydDoKCioqQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIG9mIENvcmUgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoYXMgbWUgZm9jdXNpbmcgb24gYSBjcnVjaWFsIGludGVncmF0aW9uIHBvaW50OiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBmdW5jdGlvbiBpcyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBbaW5zZXJ0IGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIOKAkyBlLmcuLCBwcm9iZSBhcHBsaWNhdGlvbiwgcG90ZW50aWFsbHkgcGVyZm9ybWFuY2UgZGF0YSBpbmplY3Rpb24sIG9yIHNvbWUgb3RoZXIga2V5IHBhcnQgb2YgdGhlIHN5c3RlbV0uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdHMgYmVoYXZpb3VyIGlzIGFsaWduZWQgd2l0aCBteSBkZXNpZ24gc3BlY2lmaWNhdGlvbnMuCgpCZXlvbmQgdGhhdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0d28gbGlrZWx5IHJlbGF0ZWQgYXNwZWN0cyB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2ssIGFuZCB0aG9zZSBhcmUgYHdlaWdodF9zdG9yZWAgYW5kIGB3ZWlnaHRfc2hvd2AuIEkmIzM5O20gYXNzdW1pbmcsIGJhc2VkIG9uIHRoZSBuYW1pbmcsIHRoYXQgdGhlc2UgcmVsYXRlIHRvIGhvdyBzb21lIGZvcm0gb2Ygd2VpZ2h0aW5nIG1lY2hhbmlzbSBpcyBtYW5hZ2VkLiBHaXZlbiBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCwgSSBleHBlY3QgdGhlc2UgbGlrZWx5IHJlbGF0ZSB0byBob3cgcHJvYmVzIGFyZSB3ZWlnaHRlZCBhbmQgaG93IHRob3NlIHdlaWdodHMgYXJlIHJldHJpZXZlZCBvciBkaXNwbGF5ZWQuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugd2VpZ2h0cyBhcmUgY29ycmVjdGx5IHN0b3JlZCwgcmV0cmlldmVkLCBhbmQgdGhhdCBhbnkgdmlzdWFsIHJlcHJlc2VudGF0aW9uIChpZiB0aGVyZSBpcyBvbmUpIGlzIGFjY3VyYXRlLiBUaGVzZSBhcmUga2V5IGFyZWFzIHRvIG1vbml0b3IgZm9yIHBlcmZvcm1hbmNlIGFuZCBhY2N1cmFjeS4gVGhleSBtaWdodCBiZSBhIHNvdXJjZSBvZiBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgb3IgZXJyb3JzLCBzbyBhIHRob3JvdWdoIGNoZWNrIGlzIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2VpZ2h0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDgwPXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDg4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwODk6c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwOTAtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTA0PXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMTEyLVxubW0vZGFtb24vc3lzZnMuYzoxMTEzOnN0YXRpYyBzc2l6ZV90IHdlaWdodF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMTExNC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipSZXZpZXdpbmcgREFNT04mIzM5O3MgQ29yZSBDb21wb25lbnRzKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0IEkmIzM5O3ZlIGdvdCBpbiBteSBoZWFkIHJpZ2h0IG5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgREFNT04gY29tcG9uZW50cy4gSSBuZWVkIHRvIGtlZXAgYHdlaWdodF9zdG9yZWAgaW4gbWluZCwgb2J2aW91c2x5IOKAkyBpdCYjMzk7cyBjcnVjaWFsLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgZnVuY3Rpb25zLiBGaXJzdCwgSSBoYXZlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb25fbWVyZ2Vfc2NvcmVgLCBhbmQgYGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc2AuIFRob3NlIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBwcm9iaW5nIGFuZCBzY29yaW5nIHBhcnQgb2YgdGhlIERBTU9OIGltcGxlbWVudGF0aW9uLCBoYW5kbGluZyB2YWxpZGF0aW9uIGFuZCBzdW1tYXJpemF0aW9uLiBUaGVuIHRoZXJlJiMzOTtzIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYCwgd2hpY2ggaXMgdGhlIGludGVyZmFjZSB0aHJvdWdoIHdoaWNoIHVzZXJzIGNhbiB0d2VhayB0aGUgcHJvYmluZyBwYXJhbWV0ZXJzLiBOZXh0LCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAsIGFuZCBga2RhbW9uZF9mbmAsIHNvIHRob3NlIGhhbmRsZSByZWdpb24gbWFuYWdlbWVudCBhbmQgYmFja2dyb3VuZCBkYWVtb24gb3BlcmF0aW9ucy4gYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AgaXMgaW1wb3J0YW50LiBBbmQgbGFzdGx5LCBsZXQmIzM5O3MgaW5jbHVkZSBgd2VpZ2h0X3N0b3JlYC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgdGhlIHVzdWFsIHN1c3BlY3RzOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1BBRERSYC4gV2FpdCwgbm93IHRoYXQgSSBjb25zaWRlciB0aGF0LCBkb2VzIGBEQU1PTl9WQUREUmAgaGF2ZSB0aGUgYGFwcGx5X3Byb2Jlc2AgY29tcG9uZW50IGluIHRoZSBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBhbGwgY29uc2lzdGVudCBpbiB0aGUgY29kZS4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIG5leHQgdGhpbmcgSSB3aWxsIGxvb2sgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwcGx5X3Byb2JlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzczNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc4NS1cdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgPSBjdHgtXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmM6Mzc4NjpcdFx0aWYgKGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XG5tbS9kYW1vbi9jb3JlLmMtMzc4Ny1cdFx0XHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM3OTItXHRcdFx0XHRnZXRfbWF4X3dzdW0gPSBmYWxzZTtcbm1tL2RhbW9uL2NvcmUuYzozNzkzOlx0XHRcdG1heF93c3VtID0gY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxubW0vZGFtb24vY29yZS5jLTM3OTQtXHRcdFx0XHRcdGFjY2Vzc19jaGVja19kaXNhYmxlZCwgZ2V0X21heF93c3VtKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE1Mz1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE2OC1cbm1tL2RhbW9uL3BhZGRyLmM6MTY5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3BhZGRyLmMtMTcwLVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ0Nz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDU0LVx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDU1Olx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYy00NTYtXHRcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIEFkZHJlc3MgU3BhY2UgUHJvYmluZyBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIHdhcyBsb29raW5nIGF0IGhvdyBEQU1PTiBoYW5kbGVzIGFkZHJlc3Mgc3BhY2UgcHJvYmluZywgYW5kIHRoZSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0hleSwgZG9lcyBgREFNT05fVkFERFJgIGhhdmUgdGhlIGBhcHBseV9wcm9iZXNgIGZ1bmN0aW9uPyYjMzQ7IFR1cm5zIG91dCwgbm8sIGl0IGRvZXNuJiMzOTt0LiBUaGF0IGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHNvbGVseSB3aXRoaW4gYHBhZGRyLmNgLiBUaGlzIGlzIGltcG9ydGFudCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGlzIHJlYWxseSBzb2xpZGlmaWVzIHRoZSBpZGVhIHRoYXQgd2UgKm5lZWQqIGBEQU1PTl9QQUREUmAuIE90aGVyd2lzZSwgaG93IHdvdWxkIHRoaXMgd29yaz8KCk5vdywgSSByZWFsbHkgbmVlZCB0byByZXZpc2l0IGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvciBtYWRlIGFueSBpbmNvcnJlY3QgYXNzdW1wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIHZldHRpbmcgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIGZvciBwcm9iaW5nLCBlc3BlY2lhbGx5IGdpdmVuIHRoaXMgYGFwcGx5X3Byb2Jlc2Agc2l0dWF0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBnaXZlbiB0aGlzIHNlcGFyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTMzMD1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNDAtXG5tbS9kYW1vbi9jb3JlLmM6MTM0MTpzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTEzNDIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzUwPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVxubW0vZGFtb24vY29yZS5jOjE3NzM6XHRpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKVxubW0vZGFtb24vY29yZS5jLTE3NzQtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUyMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgRGFtb24gUHJvYmUgUGFyYW1ldGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiBpbmNvcnBvcmF0aW5nIHRoZSBgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgZnVuZGFtZW50YWw7IGl0IHJlcHJlc2VudHMgdGhlIHNldCBvZiBwYXJhbWV0ZXJzIHdoaWNoIGFyZSBkZWVtZWQgY29ycmVjdCBhbmQgYWNjZXB0YWJsZSB0byB1c2UgZm9yIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiBwcm9iaW5nLiBJIGtub3cgaXRzIGNydWNpYWwgZm9yIHRoZSBhbmFseXNpcy4gQmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGNyaXRpY2FsIHN0cnVjdHVyZSBpcyBwcmVzZW50IGFuZCBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhlIHRhc2suCgpOZXh0LCBhbmQgcHJvYmFibHkganVzdCBhcyBjcml0aWNhbCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c2AgaXMgcHJvcGVybHkgZXN0YWJsaXNoZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBldmVyeXRoaW5nIHdpbGwgZnVuY3Rpb24gY29ycmVjdGx5LiBXZWlnaHRpbmcgaXMgYSBmdW5kYW1lbnRhbCBlbGVtZW50IGluIHRoZSBEYW1vbiBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciB0aGUgZXhpc3Rpbmcgd2VpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25faGFzX3Byb2JlX3dlaWdodHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTIwMD1zdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjExLVxubW0vZGFtb24vY29yZS5jOjIxMjpzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTIxMy17XG4tLVxubW0vZGFtb24vY29yZS5jPTEzNDE9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM0Ny1cbm1tL2RhbW9uL2NvcmUuYzoxMzQ4Olx0aWYgKCFkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpKVxubW0vZGFtb24vY29yZS5jLTEzNDktXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzEwPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzEzLVx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcbm1tL2RhbW9uL2NvcmUuYzozMzE0Olx0Ym9vbCB1c2VfcHJvYmVfaGl0cyA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzMxNS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzczNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3MC1cdFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsO1xubW0vZGFtb24vY29yZS5jOjM3NzE6XHRcdGJvb2wgYWNjZXNzX2NoZWNrX2Rpc2FibGVkID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNzcyLVx0XHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjM1CgkJCQkJCQlvdXRwdXQ6IDIyNwoJCQkJCQkJdGhvdWdodHM6IDI2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBEQU1PTiBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSBwbGFuIGZvciBmdXp6aW5nIHRoZXNlIERBTU9OIGZ1bmN0aW9ucy4gSSYjMzk7bGwgaW5jbHVkZSBgZGFtb25faGFzX3Byb2JlX3dlaWdodHNgIGFzIGl0JiMzOTtzIGEgcGFydCBvZiB0aGUgb3ZlcmFsbCBsb2dpYy4KCkhlcmUmIzM5O3MgdGhlIGZpbmFsaXplZCBsaXN0IG9mIGZ1bmN0aW9ucyB0byB0YXJnZXQ6CgoqICAgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAKKiAgIGBkYW1vbl9tZXJnZV9zY29yZWAKKiAgIGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgCiogICBgZGFtb25fc3lzZnNfc2V0X3Byb2Jlc2AKKiAgIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYAoqICAgYGtkYW1vbmRfZm5gCiogICBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYAoqICAgYHdlaWdodF9zdG9yZWAKKiAgIGBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c2AKClJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBrZXkgZmxhZ3M6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUEFERFJgLgoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2hpbGUgYGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzYCBjYW4gYmUgZ2xvc3NlZCBvdmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIGNvbmZpZyBvcHRpb25zIHJlcXVpcmVkIGZvciB0aGVzZSBmdW5jdGlvbnMsIHJpZ2h0PyBBbmQgY2hlY2tpbmcgdGhvc2UgcmVxdWlyZW1lbnRzOgoKKiAgIGBEQU1PTl9QQUREUmAgaXMgY2xlYXJseSBuZWNlc3NhcnkgZm9yIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLgoqICAgQW5kIGBEQU1PTl9TWVNGU2Agd2lsbCBiZSBuZWVkZWQgZm9yIHRoZSBgd2VpZ2h0X3N0b3JlYCBhbmQgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgIGFzIHdlbGwuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgcGxhbi4gSSYjMzk7bGwgb3V0cHV0IHRoZSByZXN1bHRzIGFuZCBwcmVwYXJlIHRoZSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9wcm9iZV9oaXRzX3dzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NldF9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfcmVnaW9uc19vZiYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDt3ZWlnaHRfc3RvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25faGFzX3Byb2JlX3dlaWdodHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAmIzM5O3dlaWdodCYjMzk7IGF0dHJpYnV0ZSBmb3IgREFNT04gcHJvYmVzLCBlbmFibGluZyAmIzM5O0RhdGEgQXR0cmlidXRlcy1vbmx5IE1vbml0b3JpbmcmIzM5Oy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyB0byB1c2UgcHJvYmUgaGl0IHdlaWdodGVkIHN1bXMgaW5zdGVhZCBvZiBhY2Nlc3MgY291bnRzIGZvciByZWdpb24gYWRqdXN0bWVudCB3aGVuIHdlaWdodHMgYXJlIGNvbmZpZ3VyZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIGludGVyZmFjZXMsIGNvcmUgcmVnaW9uIG1lcmdpbmcgbG9naWMsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHByb2JlIGFwcGxpY2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfd3N1bSYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9zY29yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfc2V0X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9yZWdpb25zX29mJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfZm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O3dlaWdodF9zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICYjMzk7d2VpZ2h0JiMzOTsgYXR0cmlidXRlIGZvciBEQU1PTiBwcm9iZXMsIGVuYWJsaW5nICYjMzk7RGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZyYjMzk7LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHVzZSBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtcyBpbnN0ZWFkIG9mIGFjY2VzcyBjb3VudHMgZm9yIHJlZ2lvbiBhZGp1c3RtZW50IHdoZW4gd2VpZ2h0cyBhcmUgY29uZmlndXJlZC4gSXQgbW9kaWZpZXMgc3lzZnMgaW50ZXJmYWNlcywgY29yZSByZWdpb24gbWVyZ2luZyBsb2dpYywgYW5kIHBoeXNpY2FsIGFkZHJlc3MgcHJvYmUgYXBwbGljYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0Mzo1My41ODk5MTI5NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDk1NjY4NjczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9zY29yZVwiLFxuICAgIFwiZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zZXRfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcIndlaWdodF9zdG9yZVwiLFxuICAgIFwiZGFtb25faGFzX3Byb2JlX3dlaWdodHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICd3ZWlnaHQnIGF0dHJpYnV0ZSBmb3IgREFNT04gcHJvYmVzLCBlbmFibGluZyAnRGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZycuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdXNlIHByb2JlIGhpdCB3ZWlnaHRlZCBzdW1zIGluc3RlYWQgb2YgYWNjZXNzIGNvdW50cyBmb3IgcmVnaW9uIGFkanVzdG1lbnQgd2hlbiB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBJdCBtb2RpZmllcyBzeXNmcyBpbnRlcmZhY2VzLCBjb3JlIHJlZ2lvbiBtZXJnaW5nIGxvZ2ljLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBwcm9iZSBhcHBsaWNhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0Mzo1My41ODk5MjMwNDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzkzMjU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3ZmU5YzNjODdhNjU2MGQwNTEwZTE0OTI4YTBiZTQ4OTBiMGExM2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTA6NDM6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbmluZGV4IGRkNmI1YmQ3NmUxMTk2Li45MDdhNTA0ZmI2NGM1NCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXFxuQEAgLTE2NCw2ICsxNjQsMTIgQEAgRGVzY3JpcHRpb246XFx0V3JpdGluZyBhIG51bWJlciAnTicgdG8gdGhpcyBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZlxcbiBcXHRcXHRkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iZSBuYW1lZCAnMCcgdG8gJ04tMScgdW5kZXIgdGhlXFxuIFxcdFxcdHByb2Jlcy8gZGlyZWN0b3J5LlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cXHUwMDNjS1xcdTAwM2UvY29udGV4dHMvXFx1MDAzY0NcXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1xcdTAwM2NQXFx1MDAzZS93ZWlnaHRcXG4rRGF0ZTpcXHRcXHRKdWwgMjAyNlxcbitDb250YWN0OlxcdFNKIFBhcmsgXFx1MDAzY3NqQGtlcm5lbC5vcmdcXHUwMDNlXFxuK0Rlc2NyaXB0aW9uOlxcdFdyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSB0aGlzIGZpbGUgc2V0cyBhbmQgZ2V0cyB0aGVcXG4rXFx0XFx0cGVyLXByb2JlIGF0dHJpYnV0ZSB3ZWlnaHQuXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NLXFx1MDAzZS9jb250ZXh0cy9cXHUwMDNjQ1xcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXFx1MDAzY1BcXHUwMDNlL2ZpbHRlcnMvbnJfZmlsdGVyc1xcbiBEYXRlOlxcdFxcdE1heSAyMDI2XFxuIENvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbmluZGV4IGIyNjQ5ZWEwMTFmOTMxLi5kYTVmOWFmZDA4YWVmOCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuQEAgLTczLDkgKzczLDEwIEBAIGNvbW1hIChcXFwiLFxcXCIpLlxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGludGVydmFsc19nb2FsL2FjY2Vzc19icCxhZ2dycyxtaW5fc2FtcGxlX3VzLG1heF9zYW1wbGVfdXNcXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heFxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgcHJvYmVzIFxcdTAwM2NkYW1vbl91c2FnZV9zeXNmc19wcm9iZXNcXHUwMDNlYC9ucl9wcm9iZXNcXG4tICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL2ZpbHRlcnMvbnJfZmlsdGVyc1xcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3R5cGUsbWF0Y2hpbmcsYWxsb3cscGF0aFxcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3dlaWdodFxcbisgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnNcXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvdHlwZSxtYXRjaGluZyxhbGxvdyxwYXRoXFxuKyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdGFyZ2V0cyBcXHUwMDNjc3lzZnNfdGFyZ2V0c1xcdTAwM2VgL25yX3RhcmdldHNcXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YDAgXFx1MDAzY3N5c2ZzX3RhcmdldFxcdTAwM2VgL3BpZF90YXJnZXQsb2Jzb2xldGVfdGFyZ2V0XFxuQEAgLTI4Niw2ICsyODcsMTAgQEAgSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3RvcnlcXG4gY29udGFpbnMgZmlsZXMgZm9yIGluc3RhbGxpbmcgZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lXFxuIHRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlIHByb2JlLlxcbiBcXG4rRWFjaCBwcm9iZSBkaXJlY3RvcnkgYWxzbyBjb250YWlucyBgYHdlaWdodGBgIGZpbGUuICBSZWFkaW5nIGZyb20gYW5kIHdyaXRpbmdcXG4rdG8gdGhlIGZpbGUgZ2V0cyBhbmQgc2V0cyB0aGUgOnJlZjpgYXR0cmlidXRlcy1vbmx5IG1vbml0b3JpbmdcXG4rXFx1MDAzY2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmdcXHUwMDNlYCB3ZWlnaHQgZm9yIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHByb2JlLlxcbitcXG4gSW4gdGhlIGJlZ2lubmluZywgYGBmaWx0ZXJzYGAgZGlyZWN0b3J5IGhhcyBvbmx5IG9uZSBmaWxlLCBgYG5yX2ZpbHRlcnNgYC5cXG4gV3JpdGluZyBhIG51bWJlciAoYGBOYGApIHRvIHRoZSBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZiBjaGlsZCBkaXJlY3Rvcmllc1xcbiBuYW1lZCBgYDBgYCB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIGZpbHRlciBhbmQgd29ya3MgaW4gYVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG5pbmRleCA0NTdkNmU4YmM3ODc4NS4uYWVkNmNiMWNmNDgzMTAgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuQEAgLTMxNiw2ICszMTYsMzEgQEAgQW5vdGhlciB3YXkgdG8gZG8gdGhpcyBmb3IgaGlnaGVyIGFjY3VyYWN5IGlzIHVzaW5nIDpyZWY6YERBTU9TIGZpbHRlclxcbiBpbmZvcm1hdGlvbiBpbiBwYWdlIGxldmVsLiAgQnV0LCBiZWNhdXNlIGl0IGlzIG9wZXJhdGVkIGluIHBhZ2UgbGV2ZWwsIHRoZVxcbiBvdmVyaGVhZCBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YgdGhlIG1lbW9yeS5cXG4gXFxuKy4uIF9kYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nOlxcbitcXG4rRGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZ1xcbit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuK1xcbitEYXRhIGFjY2VzcyBpcyB0aGUgcHJpbWFyeSBtb25pdG9yaW5nIGluZm9ybWF0aW9uIGZvciBEQU1PTi4gIEhlbmNlIGl0XFxuKzpyZWY6YGFkanVzdHMgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcXHUwMDNlYCByZWdpb25zIHVzaW5nIHRoZSBhY2Nlc3NcXG4rOnJlZjpgY291bnRlciBcXHUwMDNjZGFtb25fZGVzaWduX3JlZ2lvbl9iYXNlZF9zYW1wbGluZ1xcdTAwM2VgIChgYG5yX2FjY2Vzc2VzYGApLiAgSW4gc29tZVxcbit1c2UgY2FzZXMsIGhvd2V2ZXIsIHVzZXJzIG1heSB3YW50IHNvbWUgb2YgOnJlZjpgYXR0cmlidXRlc1xcbitcXHUwMDNjZGFtb25fZGVzaWduX2RhdGFfYXR0cnNfbW9uaXRvcmluZ1xcdTAwM2VgIHRvIGJlIHRoZSBwcmltYXJ5IGluZm9ybWF0aW9uLlxcbitcXG4rRGF0YSBhdHRyaWJ1dGVzLW9ubHkgbW9uaXRvcmluZyBtb2RlIHN1cHBvcnRzIHRoaXMgdXNlIGNhc2UuICBGb3IgdGhlIG1vZGUsXFxuK2VhY2ggYXR0cmlidXRlIHByb2JlIGhhcyB0aGVpciBwcmlvcml0eSB3ZWlnaHQgdmFsdWUuICBVc2VycyBjYW4gZGVzY3JpYmUgYnlcXG4rd2hhdCBjb21iaW5hdGlvbiBvZiB0aGUgYXR0cmlidXRlcyB0aGUgcHJpbWFyeSBpbmZvcm1hdGlvbiBpcyBkZWNpZGVkLCBieVxcbitzZXR0aW5nIHRoZSBwcmlvcml0eSB3ZWlnaHQgdmFsdWUuICBJZiB0aGUgdG90YWwgc3VtIG9mIHRoZSB3ZWlnaHRzIGlzIG5vdFxcbit6ZXJvLCB0aGUgbW9kZSBpcyBlbmFibGVkLiAgVGhlIHJlZ2lvbnMgYWRqdXN0bWVudCBtZWNoYW5pc20gdXNlcyB0aGUgd2VpZ2h0ZWRcXG4rc3VtIG9mIHRoZSA6cmVmOmBwcm9iZSBoaXQgY291bnRzIFxcdTAwM2NkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nXFx1MDAzZWAgaW5zdGVhZFxcbitvZiBgYG5yX2FjY2Vzc2VzYGAgaW4gdGhlIGNhc2UuICBXaGVuIHRoZSBtb2RlIGlzIGVuYWJsZWQsIGFjY2VzcyBtb25pdG9yaW5nIGlzXFxuK2F1dG9tYXRpY2FsbHkgdHVybmVkIG9mZi4gIFRoZSBhY2Nlc3MgY291bnRlciAoYGBucl9hY2Nlc3Nlc2BgKSB3aWxsIGFsd2F5cyBiZVxcbit6ZXJvIGFuZCBub3QgdXBkYXRlZC4gIEhlbmNlIHRoZSBtb2RlIGlzIGNhbGxlZCBEYXRhIEF0dHJpYnV0ZXMgXFxcIm9ubHlcXFwiXFxuK21vbml0b3JpbmcuXFxuK1xcbitSZWZlciB0byB0aGUgOnJlZjpgYWRtaW4gZ3VpZGUgXFx1MDAzY2RhbW9uX3VzYWdlX3N5c2ZzX3Byb2Jlc1xcdTAwM2VgIHRvIGtub3cgaG93IHVzZXJzXFxuK2NhbiB1c2UgdGhlIG1vZGUuXFxuK1xcbiBEeW5hbWljIFRhcmdldCBTcGFjZSBVcGRhdGVzIEhhbmRsaW5nXFxuIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IDYzZjU5Njk1N2MxZjFmLi5mNjk0NDJhOWQ0MzEyOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNjQ3LDcgKzY0NywxMCBAQCBlbnVtIGRhbW9uX29wc19pZCB7XFxuICAqIEl0IHNob3VsZCBhbHNvIHJldHVybiBtYXggbnVtYmVyIG9mIG9ic2VydmVkIGFjY2Vzc2VzIHRoYXQgbWFkZSBhcyBhIHJlc3VsdFxcbiAgKiBvZiBpdHMgdXBkYXRlLiAgVGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBmb3IgcmVnaW9ucyBhZGp1c3RtZW50IHRocmVzaG9sZC5cXG4gICogQGFwcGx5X3Byb2JlcyBzaG91bGQgYXBwbHkgdGhlIGRhdGEgYXR0cmlidXRlIHByb2JlcyB0byBlYWNoIHJlZ2lvbiBhbmRcXG4tICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi5cXG4rICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi4gIEl0IHNob3VsZCBhbHNvXFxuKyAqIHNldCBcXHUwMDI2ZGFtb25fcmVnaW9uLVxcdTAwM2VzYW1wbGluZ19hZGRyIG9mIGVhY2ggcmVnaW9uIGlmIGBgc2V0X3NhbXBsZXNgYCBpcyB0cnVlLlxcbisgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4aW11bSBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiByZWdpb25zIGlmXFxuKyAqIGBgcmV0dXJuX21heF93c3VtYGAgaXMgdHJ1ZS5cXG4gICogQGdldF9zY2hlbWVfc2NvcmUgc2hvdWxkIHJldHVybiB0aGUgcHJpb3JpdHkgc2NvcmUgb2YgYSByZWdpb24gZm9yIGEgc2NoZW1lXFxuICAqIGFzIGFuIGludGVnZXIgaW4gWzAsIFxcdTAwMjZEQU1PU19NQVhfU0NPUkVdLlxcbiAgKiBAYXBwbHlfc2NoZW1lIGlzIGNhbGxlZCBmcm9tIEBrZGFtb25kIHdoZW4gYSByZWdpb24gZm9yIHVzZXIgcHJvdmlkZWRcXG5AQCAtNjY1LDcgKzY2OCw4IEBAIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIHtcXG4gXFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuIFxcdHZvaWQgKCpwcmVwYXJlX2FjY2Vzc19jaGVja3MpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xcbiBcXHR1bnNpZ25lZCBpbnQgKCpjaGVja19hY2Nlc3Nlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuLVxcdHZvaWQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xcbitcXHR1bnNpZ25lZCBpbnQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXFxuK1xcdFxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKTtcXG4gXFx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcXG4gXFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzY2hlbWUpO1xcbiBcXHR1bnNpZ25lZCBsb25nICgqYXBwbHlfc2NoZW1lKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbkBAIC03NjAsMTAgKzc2NCwxMiBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcXG4gLyoqXFxuICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cXG4gICpcXG4rICogQHdlaWdodDpcXHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxcbiAgKiBAZmlsdGVyczpcXHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXFxuICAqIEBsaXN0OlxcdFNpYmxpbmdzIGxpc3QuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fcHJvYmUge1xcbitcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG5AQCAtMTAwNiw2ICsxMDEyLDggQEAgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuIHVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4rXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4gXFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCAxMTQ3M2FhMWY3MGY0MS4uODA2YTY3ZDAyYTZlOTAgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxcbiBcXHRwID0ga21hbGxvY19vYmooKnApO1xcbiBcXHRpZiAoIXApXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRwLVxcdTAwM2V3ZWlnaHQgPSAwO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlZmlsdGVycyk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwLVxcdTAwM2VsaXN0KTtcXG4gXFx0cmV0dXJuIHA7XFxuQEAgLTIwOCw2ICsyMDksMTcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcXG4rXFx0XFx0aWYgKHAtXFx1MDAzZXdlaWdodClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBkYW1vbl9tdnN1bSgpIC0gUmV0dXJucyBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBmb3IgYSB0aW1lIHdpbmRvdy5cXG4gICogQGN1cnJlbnRfbnI6XFx0XFx0VGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIHdpbmRvdy5cXG5AQCAtMzkyLDYgKzQwNCwzMCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRyZXR1cm4gbGlzdF9pc19sYXN0KFxcdTAwMjZyLVxcdTAwM2VsaXN0LCBcXHUwMDI2dC1cXHUwMDNlcmVnaW9uc19saXN0KTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cXG4rICogQHI6XFx0XFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxcbisgKiBAbGFzdDpcXHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxcbisgKiBAY3R4OlxcdGNvbnRleHQgb2YgXFx1MDAyNnIuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXFxuKyAqL1xcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4rXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuK1xcdHVuc2lnbmVkIGludCBzdW0gPSAwO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxuK1xcdFxcdGlmIChsYXN0KVxcbitcXHRcXHRcXHRzdW0gKz0gci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN1bSArPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbitcXHR9XFxuK1xcdHJldHVybiBzdW07XFxuK31cXG4rXFxuIC8qXFxuICAqIENoZWNrIHdoZXRoZXIgYSByZWdpb24gaXMgaW50ZXJzZWN0aW5nIGFuIGFkZHJlc3MgcmFuZ2VcXG4gICpcXG5AQCAtMTMwMiw2ICsxMzM4LDM0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBkYW1vcyAqcylcXG4gXFx0XFx0ZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcXHUwMDI2cy1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbitcXHR1bnNpZ25lZCBjaGFyIG1heF9wcm9iZV9oaXRzO1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbitcXHR1bnNpZ25lZCBpbnQgd3N1bSwgd3N1bV90b19hZGQ7XFxuK1xcbitcXHRpZiAoIWRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0c2FtcGxlX2ludGVydmFsID0gY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XFxuK1xcdGlmIChjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwgXFx1MDAzZSBVOF9NQVgpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXFxuK1xcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2Y3R4LVxcdTAwM2VhdHRycyk7XFxuK1xcdHdzdW0gPSAwO1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxuK1xcdFxcdGlmIChwcm9iZS1cXHUwMDNld2VpZ2h0IFxcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR3c3VtX3RvX2FkZCA9IHByb2JlLVxcdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcXG4rXFx0XFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcXHUwMDNjIHdzdW1fdG9fYWRkKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHdzdW0gKz0gd3N1bV90b19hZGQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qXFxuICAqIGRhbW9zX2NvbW1pdF9kZXN0cygpIC0gQ29weSBtaWdyYXRpb24gZGVzdGluYXRpb25zIGZyb20gQHNyYyB0byBAZHN0LlxcbiAgKiBAZHN0OlxcdERlc3RpbmF0aW9uIHN0cnVjdHVyZSB0byB1cGRhdGUuXFxuQEAgLTE2NTgsNiArMTcyMiw3IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4gXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShkc3RfcHJvYmUsIG5leHQsIGRzdCkge1xcbiBcXHRcXHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSsrLCBzcmMpO1xcbiBcXHRcXHRpZiAoc3JjX3Byb2JlKSB7XFxuK1xcdFxcdFxcdGRzdF9wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuIFxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTY3NCw2ICsxNzM5LDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbiBcXHRcXHRpZiAoIW5ld19wcm9iZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdGRhbW9uX2FkZF9wcm9iZShkc3QsIG5ld19wcm9iZSk7XFxuK1xcdFxcdG5ld19wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuIFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTcwNCw2ICsxNzcwLDkgQEAgc3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0aWYgKCFkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3JjKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTMyMjEsNiArMzI5MCwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcXG4re1xcbitcXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxuK1xcdFxcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcXG4rXFx0aWYgKGxhc3QpXFxuK1xcdFxcdHJldHVybiByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xcbitcXHRyZXR1cm4gci1cXHUwMDNlbnJfYWNjZXNzZXM7XFxuK31cXG4rXFxuIC8qXFxuICAqIE1lcmdlIGFkamFjZW50IHJlZ2lvbnMgaGF2aW5nIHNpbWlsYXIgYWNjZXNzIGZyZXF1ZW5jaWVzXFxuICAqXFxuQEAgLTMyMjksMjQgKzMzMDgsMzggQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gICogc3pfbGltaXRcXHRzaXplIHVwcGVyIGxpbWl0IG9mIGVhY2ggcmVnaW9uXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcXG4tXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzel9saW1pdClcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpwcmV2ID0gTlVMTCwgKm5leHQ7XFxuK1xcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbiBcXG4gXFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUociwgbmV4dCwgdCkge1xcbi1cXHRcXHRpZiAoYWJzKHItXFx1MDAzZW5yX2FjY2Vzc2VzIC0gci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcykgXFx1MDAzZSB0aHJlcylcXG4rXFx0XFx0dW5zaWduZWQgaW50IHNjb3JlLCBsYXN0X3Njb3JlLCBkaWZmO1xcbitcXG4rXFx0XFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XFxuK1xcdFxcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcXG4rXFxuK1xcdFxcdGlmIChhYnNfZGlmZihzY29yZSwgbGFzdF9zY29yZSkgXFx1MDAzZSB0aHJlcylcXG4gXFx0XFx0XFx0ci1cXHUwMDNlYWdlID0gMDtcXG4tXFx0XFx0ZWxzZSBpZiAoKHItXFx1MDAzZW5yX2FjY2Vzc2VzID09IDApICE9IChyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID09IDApKVxcbitcXHRcXHRlbHNlIGlmICgoc2NvcmUgPT0gMCkgIT0gKGxhc3Rfc2NvcmUgPT0gMCkpXFxuIFxcdFxcdFxcdHItXFx1MDAzZWFnZSA9IDA7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ci1cXHUwMDNlYWdlKys7XFxuIFxcbi1cXHRcXHRpZiAocHJldiBcXHUwMDI2XFx1MDAyNiBwcmV2LVxcdTAwM2Vhci5lbmQgPT0gci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGFicyhwcmV2LVxcdTAwM2Vucl9hY2Nlc3NlcyAtIHItXFx1MDAzZW5yX2FjY2Vzc2VzKSBcXHUwMDNjPSB0aHJlcyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgZGFtb25fc3pfcmVnaW9uKHByZXYpICsgZGFtb25fc3pfcmVnaW9uKHIpIFxcdTAwM2M9IHN6X2xpbWl0KVxcbi1cXHRcXHRcXHRkYW1vbl9tZXJnZV90d29fcmVnaW9ucyh0LCBwcmV2LCByKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRwcmV2ID0gcjtcXG4rXFx0XFx0aWYgKCFwcmV2KVxcbitcXHRcXHRcXHRnb3RvIHNldF9wcmV2X2NvbnRpbnVlO1xcbitcXHRcXHRpZiAocHJldi1cXHUwMDNlYXIuZW5kICE9IHItXFx1MDAzZWFyLnN0YXJ0KVxcbitcXHRcXHRcXHRnb3RvIHNldF9wcmV2X2NvbnRpbnVlO1xcbitcXHRcXHRkaWZmID0gYWJzX2RpZmYoc2NvcmUsIGRhbW9uX21lcmdlX3Njb3JlKHByZXYsIGZhbHNlLCBjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdHVzZV9wcm9iZV9oaXRzKSk7XFxuK1xcdFxcdGlmIChkaWZmIFxcdTAwM2UgdGhyZXMpXFxuK1xcdFxcdFxcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XFxuK1xcdFxcdGlmIChkYW1vbl9zel9yZWdpb24ocHJldikgKyBkYW1vbl9zel9yZWdpb24ocikgXFx1MDAzZSBzel9saW1pdClcXG4rXFx0XFx0XFx0Z290byBzZXRfcHJldl9jb250aW51ZTtcXG4rXFx0XFx0ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7XFxuK1xcdFxcdGNvbnRpbnVlO1xcbitzZXRfcHJldl9jb250aW51ZTpcXG4rXFx0XFx0cHJldiA9IHI7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzI3OSw3ICszMzcyLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuIFxcdGRvIHtcXG4gXFx0XFx0bnJfcmVnaW9ucyA9IDA7XFxuIFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuLVxcdFxcdFxcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCk7XFxuK1xcdFxcdFxcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCwgYyk7XFxuIFxcdFxcdFxcdG5yX3JlZ2lvbnMgKz0gZGFtb25fbnJfcmVnaW9ucyh0KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR0aHJlc2hvbGQgPSBtYXgoMSwgdGhyZXNob2xkICogMik7XFxuQEAgLTM2NDMsNyArMzczNiw2IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBkYXRhO1xcbi1cXHR1bnNpZ25lZCBpbnQgbWF4X25yX2FjY2Vzc2VzID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwia2RhbW9uZCAoJWQpIHN0YXJ0c1xcXFxuXFxcIiwgY3VycmVudC1cXHUwMDNlcGlkKTtcXG5AQCAtMzY3NiwyNSArMzc2OCwzOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXM7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dF9vcHNfdXBkYXRlX3NpcyA9IGN0eC1cXHUwMDNlbmV4dF9vcHNfdXBkYXRlX3NpcztcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcXG4rXFx0XFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XFxuK1xcdFxcdGJvb2wgZ2V0X21heF93c3VtO1xcbiBcXG4gXFx0XFx0aWYgKGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKGN0eCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcylcXG4rXFx0XFx0aWYgKCFhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VvcHMucHJlcGFyZV9hY2Nlc3NfY2hlY2tzKVxcbiBcXHRcXHRcXHRjdHgtXFx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MoY3R4KTtcXG4gXFxuIFxcdFxcdGtkYW1vbmRfdXNsZWVwKHNhbXBsZV9pbnRlcnZhbCk7XFxuIFxcdFxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMrKztcXG4gXFxuLVxcdFxcdGlmIChjdHgtXFx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcylcXG4tXFx0XFx0XFx0bWF4X25yX2FjY2Vzc2VzID0gY3R4LVxcdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNlb3BzLmFwcGx5X3Byb2JlcylcXG4tXFx0XFx0XFx0Y3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCk7XFxuK1xcdFxcdGlmICghYWNjZXNzX2NoZWNrX2Rpc2FibGVkIFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKVxcbitcXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgPSBjdHgtXFx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcyhjdHgpO1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XFxuK1xcdFxcdFxcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG5leHRfYWdncmVnYXRpb25fc2lzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpXFxuK1xcdFxcdFxcdFxcdGdldF9tYXhfd3N1bSA9IHRydWU7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0Z2V0X21heF93c3VtID0gZmFsc2U7XFxuK1xcdFxcdFxcdG1heF93c3VtID0gY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkLCBnZXRfbWF4X3dzdW0pO1xcbitcXHRcXHRcXHRpZiAoZ2V0X21heF93c3VtKVxcbitcXHRcXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgPSBtYXhfd3N1bTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcXG4gXFx0XFx0XFx0XFx0XFx0bmV4dF9hZ2dyZWdhdGlvbl9zaXMpKSB7XFxuIFxcdFxcdFxcdGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhjdHgsXFxuLVxcdFxcdFxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyAvIDEwLFxcbitcXHRcXHRcXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcXG4gXFx0XFx0XFx0XFx0XFx0c3pfbGltaXQpO1xcbiBcXHRcXHRcXHQvKiBvbmxpbmUgdXBkYXRlcyBtaWdodCBiZSBtYWRlICovXFxuIFxcdFxcdFxcdHN6X2xpbWl0ID0gZGFtb25fYXBwbHlfbWluX25yX3JlZ2lvbnMoY3R4KTtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcXG5pbmRleCA2MTcyNDY0OTgxNzMwNC4uYjg1Zjg4YTdhMzhmNGQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtMTY2LDExICsxNjYsMTMgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX3Bhc3MocGh5c19hZGRyX3QgcGEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiBwYXNzO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbitzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuK1xcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuIFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuIFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG4rXFx0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcXG4gXFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcXG4gXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG5AQCAtMTc4LDYgKzE4MCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdFxcdFxcdHBoeXNfYWRkcl90IHBhO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4rXFx0XFx0XFx0aWYgKHNldF9zYW1wbGVzKVxcbitcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXFx1MDAzZWFyLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbiBcXHRcXHRcXHRwYSA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2VzYW1wbGluZ19hZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCk7XFxuIFxcdFxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhKSk7XFxuQEAgLTE4OCw4ICsxOTMsMTIgQEAgc3RhdGljIHZvaWQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxuK1xcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0cmV0dXJuIG1heF93c3VtO1xcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xcbmluZGV4IDZkN2UzNmM5ZTUwOWQyLi5iNWZlMDM2Zjc4MDE1MiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXFxuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xcbkBAIC0xMDY1LDYgKzEwNjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xcbiBcXG4gc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlIHtcXG4gXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4rXFx0dW5zaWduZWQgaW50IHdlaWdodDtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmZpbHRlcnM7XFxuIH07XFxuIFxcbkBAIC0xMTAwLDEyICsxMTAxLDM1IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHRjaGFyICpidWYpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbitcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xcbitcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIHByb2JlLVxcdTAwM2V3ZWlnaHQpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbitcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xcbitcXHRpbnQgZXJyID0ga3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZwcm9iZS1cXHUwMDNld2VpZ2h0KTtcXG4rXFxuK1xcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4ge1xcbiBcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlLCBrb2JqKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJvYmVfd2VpZ2h0X2F0dHIgPVxcbitcXHRcXHRfX0FUVFJfUldfTU9ERSh3ZWlnaHQsIDA2MDApO1xcbitcXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XFxuK1xcdFxcdTAwMjZkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ci5hdHRyLFxcbiBcXHROVUxMLFxcbiB9O1xcbiBBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3Byb2JlKTtcXG5AQCAtMTk2NSw2ICsxOTg5LDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdGRhbW9uX2FkZF9wcm9iZShjdHgsIHApO1xcbiBcXHRcXHRzeXNfcHJvYmUgPSBzeXNfcHJvYmVzLVxcdTAwM2Vwcm9iZXNfYXJyW2ldO1xcbitcXHRcXHRwLVxcdTAwM2V3ZWlnaHQgPSBzeXNfcHJvYmUtXFx1MDAzZXdlaWdodDtcXG4gXFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlKHAsIHN5c19wcm9iZSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IGQ5NzI4MDI3MGMyN2I4Li42YWQ3MzU1OWRkOGVhYiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMjI2LDYgKzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcXG4gXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIHtcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbiBcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbiBcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNhW10gPSB7MCwgMTAwLCAxMTQsIDEyMiwgMTMwLCAxNTYsIDE3MCwgMTg0LCAyMzB9O1xcbkBAIC0yMzYsMjAgKzIzNywyNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHR1bnNpZ25lZCBsb25nIGVhZGRyc1tdID0gezExMiwgMTMwLCAxNTYsIDE3MCwgMjMwLCAxMDE3MH07XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiY3R4IGFsbG9jIGZhaWxcXFwiKTtcXG4rXFxuIFxcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XFxuLVxcdGlmICghdClcXG4rXFx0aWYgKCF0KSB7XFxuK1xcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuIFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInRhcmdldCBhbGxvYyBmYWlsXFxcIik7XFxuK1xcdH1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoc2EpOyBpKyspIHtcXG4gXFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oc2FbaV0sIGVhW2ldKTtcXG4gXFx0XFx0aWYgKCFyKSB7XFxuIFxcdFxcdFxcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xcbitcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbiBcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gbnJzW2ldO1xcbiBcXHRcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbiBcXHR9XFxuIFxcbi1cXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTkpO1xcbitcXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTksIGN0eCk7XFxuIFxcdC8qIDAtMTEyLCAxMTQtMTMwLCAxMzAtMTU2LCAxNTYtMTcwLCAxNzAtMjMwLCAyMzAtMTAxNzAgKi9cXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDZ1KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDY7IGkrKykge1xcbkBAIC0yNTgsNiArMjY2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLmVuZCwgZWFkZHJzW2ldKTtcXG4gXFx0fVxcbiBcXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTA6NDM6NTQuMTg4NzE1NDYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDM1Nzg2NTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9zY29yZVwiLFxuICAgIFwiZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zZXRfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcIndlaWdodF9zdG9yZVwiLFxuICAgIFwiZGFtb25faGFzX3Byb2JlX3dlaWdodHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICd3ZWlnaHQnIGF0dHJpYnV0ZSBmb3IgREFNT04gcHJvYmVzLCBlbmFibGluZyAnRGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZycuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdXNlIHByb2JlIGhpdCB3ZWlnaHRlZCBzdW1zIGluc3RlYWQgb2YgYWNjZXNzIGNvdW50cyBmb3IgcmVnaW9uIGFkanVzdG1lbnQgd2hlbiB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBJdCBtb2RpZmllcyBzeXNmcyBpbnRlcmZhY2VzLCBjb3JlIHJlZ2lvbiBtZXJnaW5nIGxvZ2ljLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBwcm9iZSBhcHBsaWNhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM3ZmU5YzNjODdhNjU2MGQwNTEwZTE0OTI4YTBiZTQ4OTBiMGExM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxMDo0Mzo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbmluZGV4IGRkNmI1YmQ3NmUxMTk2Li45MDdhNTA0ZmI2NGM1NCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuQEAgLTE2NCw2ICsxNjQsMTIgQEAgRGVzY3JpcHRpb246XHRXcml0aW5nIGEgbnVtYmVyICdOJyB0byB0aGlzIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mXG4gXHRcdGRpcmVjdG9yaWVzIGZvciBlYWNoIERBTU9OIHByb2JlIG5hbWVkICcwJyB0byAnTi0xJyB1bmRlciB0aGVcbiBcdFx0cHJvYmVzLyBkaXJlY3RvcnkuXG4gXG4rV2hhdDpcdFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjS1x1MDAzZS9jb250ZXh0cy9cdTAwM2NDXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1x1MDAzY1BcdTAwM2Uvd2VpZ2h0XG4rRGF0ZTpcdFx0SnVsIDIwMjZcbitDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4rRGVzY3JpcHRpb246XHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlXG4rXHRcdHBlci1wcm9iZSBhdHRyaWJ1dGUgd2VpZ2h0LlxuK1xuIFdoYXQ6XHRcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY0tcdTAwM2UvY29udGV4dHMvXHUwMDNjQ1x1MDAzZS9tb25pdG9yaW5nX2F0dHJzL3Byb2Jlcy9cdTAwM2NQXHUwMDNlL2ZpbHRlcnMvbnJfZmlsdGVyc1xuIERhdGU6XHRcdE1heSAyMDI2XG4gQ29udGFjdDpcdFNKIFBhcmsgXHUwMDNjc2pAa2VybmVsLm9yZ1x1MDAzZVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbmluZGV4IGIyNjQ5ZWEwMTFmOTMxLi5kYTVmOWFmZDA4YWVmOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTczLDkgKzczLDEwIEBAIGNvbW1hIChcIixcIikuXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBpbnRlcnZhbHNfZ29hbC9hY2Nlc3NfYnAsYWdncnMsbWluX3NhbXBsZV91cyxtYXhfc2FtcGxlX3VzXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBwcm9iZXMgXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXHUwMDNlYC9ucl9wcm9iZXNcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvZmlsdGVycy9ucl9maWx0ZXJzXG4tICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGhcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cbisgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0XG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgZmlsdGVycy9ucl9maWx0ZXJzXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvdHlwZSxtYXRjaGluZyxhbGxvdyxwYXRoXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLlxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdGFyZ2V0cyBcdTAwM2NzeXNmc190YXJnZXRzXHUwMDNlYC9ucl90YXJnZXRzXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YDAgXHUwMDNjc3lzZnNfdGFyZ2V0XHUwMDNlYC9waWRfdGFyZ2V0LG9ic29sZXRlX3RhcmdldFxuQEAgLTI4Niw2ICsyODcsMTAgQEAgSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3RvcnlcbiBjb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBmaWx0ZXJzIGZvciB0aGUgcHJvYmUsIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmVcbiB0aGUgZGF0YSBhdHRyaWJ1dGUgZm9yIHRoZSBwcm9iZS5cbiBcbitFYWNoIHByb2JlIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGBgd2VpZ2h0YGAgZmlsZS4gIFJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZ1xuK3RvIHRoZSBmaWxlIGdldHMgYW5kIHNldHMgdGhlIDpyZWY6YGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nXG4rXHUwMDNjZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZ1x1MDAzZWAgd2VpZ2h0IGZvciB0aGUgYXR0cmlidXRlIG9mIHRoZSBwcm9iZS5cbitcbiBJbiB0aGUgYmVnaW5uaW5nLCBgYGZpbHRlcnNgYCBkaXJlY3RvcnkgaGFzIG9ubHkgb25lIGZpbGUsIGBgbnJfZmlsdGVyc2BgLlxuIFdyaXRpbmcgYSBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXNcbiBuYW1lZCBgYDBgYCB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIGZpbHRlciBhbmQgd29ya3MgaW4gYVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggNDU3ZDZlOGJjNzg3ODUuLmFlZDZjYjFjZjQ4MzEwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbkBAIC0zMTYsNiArMzE2LDMxIEBAIEFub3RoZXIgd2F5IHRvIGRvIHRoaXMgZm9yIGhpZ2hlciBhY2N1cmFjeSBpcyB1c2luZyA6cmVmOmBEQU1PUyBmaWx0ZXJcbiBpbmZvcm1hdGlvbiBpbiBwYWdlIGxldmVsLiAgQnV0LCBiZWNhdXNlIGl0IGlzIG9wZXJhdGVkIGluIHBhZ2UgbGV2ZWwsIHRoZVxuIG92ZXJoZWFkIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5LlxuIFxuKy4uIF9kYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nOlxuK1xuK0RhdGEgQXR0cmlidXRlcy1vbmx5IE1vbml0b3Jpbmdcbit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4rXG4rRGF0YSBhY2Nlc3MgaXMgdGhlIHByaW1hcnkgbW9uaXRvcmluZyBpbmZvcm1hdGlvbiBmb3IgREFNT04uICBIZW5jZSBpdFxuKzpyZWY6YGFkanVzdHMgXHUwMDNjZGFtb25fZGVzaWduX2RhdGFfYXR0cnNfbW9uaXRvcmluZ1x1MDAzZWAgcmVnaW9ucyB1c2luZyB0aGUgYWNjZXNzXG4rOnJlZjpgY291bnRlciBcdTAwM2NkYW1vbl9kZXNpZ25fcmVnaW9uX2Jhc2VkX3NhbXBsaW5nXHUwMDNlYCAoYGBucl9hY2Nlc3Nlc2BgKS4gIEluIHNvbWVcbit1c2UgY2FzZXMsIGhvd2V2ZXIsIHVzZXJzIG1heSB3YW50IHNvbWUgb2YgOnJlZjpgYXR0cmlidXRlc1xuK1x1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcdTAwM2VgIHRvIGJlIHRoZSBwcmltYXJ5IGluZm9ybWF0aW9uLlxuK1xuK0RhdGEgYXR0cmlidXRlcy1vbmx5IG1vbml0b3JpbmcgbW9kZSBzdXBwb3J0cyB0aGlzIHVzZSBjYXNlLiAgRm9yIHRoZSBtb2RlLFxuK2VhY2ggYXR0cmlidXRlIHByb2JlIGhhcyB0aGVpciBwcmlvcml0eSB3ZWlnaHQgdmFsdWUuICBVc2VycyBjYW4gZGVzY3JpYmUgYnlcbit3aGF0IGNvbWJpbmF0aW9uIG9mIHRoZSBhdHRyaWJ1dGVzIHRoZSBwcmltYXJ5IGluZm9ybWF0aW9uIGlzIGRlY2lkZWQsIGJ5XG4rc2V0dGluZyB0aGUgcHJpb3JpdHkgd2VpZ2h0IHZhbHVlLiAgSWYgdGhlIHRvdGFsIHN1bSBvZiB0aGUgd2VpZ2h0cyBpcyBub3Rcbit6ZXJvLCB0aGUgbW9kZSBpcyBlbmFibGVkLiAgVGhlIHJlZ2lvbnMgYWRqdXN0bWVudCBtZWNoYW5pc20gdXNlcyB0aGUgd2VpZ2h0ZWRcbitzdW0gb2YgdGhlIDpyZWY6YHByb2JlIGhpdCBjb3VudHMgXHUwMDNjZGFtb25fZGVzaWduX2RhdGFfYXR0cnNfbW9uaXRvcmluZ1x1MDAzZWAgaW5zdGVhZFxuK29mIGBgbnJfYWNjZXNzZXNgYCBpbiB0aGUgY2FzZS4gIFdoZW4gdGhlIG1vZGUgaXMgZW5hYmxlZCwgYWNjZXNzIG1vbml0b3JpbmcgaXNcbithdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYuICBUaGUgYWNjZXNzIGNvdW50ZXIgKGBgbnJfYWNjZXNzZXNgYCkgd2lsbCBhbHdheXMgYmVcbit6ZXJvIGFuZCBub3QgdXBkYXRlZC4gIEhlbmNlIHRoZSBtb2RlIGlzIGNhbGxlZCBEYXRhIEF0dHJpYnV0ZXMgXCJvbmx5XCJcbittb25pdG9yaW5nLlxuK1xuK1JlZmVyIHRvIHRoZSA6cmVmOmBhZG1pbiBndWlkZSBcdTAwM2NkYW1vbl91c2FnZV9zeXNmc19wcm9iZXNcdTAwM2VgIHRvIGtub3cgaG93IHVzZXJzXG4rY2FuIHVzZSB0aGUgbW9kZS5cbitcbiBEeW5hbWljIFRhcmdldCBTcGFjZSBVcGRhdGVzIEhhbmRsaW5nXG4gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggNjNmNTk2OTU3YzFmMWYuLmY2OTQ0MmE5ZDQzMTI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC02NDcsNyArNjQ3LDEwIEBAIGVudW0gZGFtb25fb3BzX2lkIHtcbiAgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4IG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyB0aGF0IG1hZGUgYXMgYSByZXN1bHRcbiAgKiBvZiBpdHMgdXBkYXRlLiAgVGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBmb3IgcmVnaW9ucyBhZGp1c3RtZW50IHRocmVzaG9sZC5cbiAgKiBAYXBwbHlfcHJvYmVzIHNob3VsZCBhcHBseSB0aGUgZGF0YSBhdHRyaWJ1dGUgcHJvYmVzIHRvIGVhY2ggcmVnaW9uIGFuZFxuLSAqIGFjY29yZGluZ2x5IHVwZGF0ZSB0aGUgcHJvYmUgaGl0cyBjb3VudGVyIG9mIHRoZSByZWdpb24uXG4rICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi4gIEl0IHNob3VsZCBhbHNvXG4rICogc2V0IFx1MDAyNmRhbW9uX3JlZ2lvbi1cdTAwM2VzYW1wbGluZ19hZGRyIG9mIGVhY2ggcmVnaW9uIGlmIGBgc2V0X3NhbXBsZXNgYCBpcyB0cnVlLlxuKyAqIEl0IHNob3VsZCBhbHNvIHJldHVybiBtYXhpbXVtIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIHJlZ2lvbnMgaWZcbisgKiBgYHJldHVybl9tYXhfd3N1bWBgIGlzIHRydWUuXG4gICogQGdldF9zY2hlbWVfc2NvcmUgc2hvdWxkIHJldHVybiB0aGUgcHJpb3JpdHkgc2NvcmUgb2YgYSByZWdpb24gZm9yIGEgc2NoZW1lXG4gICogYXMgYW4gaW50ZWdlciBpbiBbMCwgXHUwMDI2REFNT1NfTUFYX1NDT1JFXS5cbiAgKiBAYXBwbHlfc2NoZW1lIGlzIGNhbGxlZCBmcm9tIEBrZGFtb25kIHdoZW4gYSByZWdpb24gZm9yIHVzZXIgcHJvdmlkZWRcbkBAIC02NjUsNyArNjY4LDggQEAgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xuIFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XG4gXHR2b2lkICgqcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbiBcdHVuc2lnbmVkIGludCAoKmNoZWNrX2FjY2Vzc2VzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbi1cdHZvaWQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xuK1x0dW5zaWduZWQgaW50ICgqYXBwbHlfcHJvYmVzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuK1x0XHRcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKTtcbiBcdGludCAoKmdldF9zY2hlbWVfc2NvcmUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4gXHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzY2hlbWUpO1xuIFx0dW5zaWduZWQgbG9uZyAoKmFwcGx5X3NjaGVtZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbkBAIC03NjAsMTAgKzc2NCwxMiBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiAvKipcbiAgKiBzdHJ1Y3QgZGFtb25fcHJvYmUgLSBEYXRhIHJlZ2lvbiBhdHRyaWJ1dGUgcHJvYmUuXG4gICpcbisgKiBAd2VpZ2h0Olx0UmVsYXRpdmUgcHJpb3JpdHkgb2YgdGhlIGF0dHJpYnV0ZSBmb3IgdGhpcyBwcm9iZS5cbiAgKiBAZmlsdGVyczpcdEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS5cbiAgKiBAbGlzdDpcdFNpYmxpbmdzIGxpc3QuXG4gICovXG4gc3RydWN0IGRhbW9uX3Byb2JlIHtcbitcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbkBAIC0xMDA2LDYgKzEwMTIsOCBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiBcbiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbiBcdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDExNDczYWExZjcwZjQxLi44MDZhNjdkMDJhNmU5MCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTY2LDYgKzE2Niw3IEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4gXHRwID0ga21hbGxvY19vYmooKnApO1xuIFx0aWYgKCFwKVxuIFx0XHRyZXR1cm4gTlVMTDtcbitcdHAtXHUwMDNld2VpZ2h0ID0gMDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnAtXHUwMDNlZmlsdGVycyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuIFx0cmV0dXJuIHA7XG5AQCAtMjA4LDYgKzIwOSwxNyBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcbitcdFx0aWYgKHAtXHUwMDNld2VpZ2h0KVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKlxuICAqIGRhbW9uX212c3VtKCkgLSBSZXR1cm5zIHBzZXVkbyBtb3Zpbmcgc3VtIHZhbHVlIGZvciBhIHRpbWUgd2luZG93LlxuICAqIEBjdXJyZW50X25yOlx0XHRUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgYWdncmVnYXRpb24gd2luZG93LlxuQEAgLTM5Miw2ICs0MDQsMzAgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdHJldHVybiBsaXN0X2lzX2xhc3QoXHUwMDI2ci1cdTAwM2VsaXN0LCBcdTAwMjZ0LVx1MDAzZXJlZ2lvbnNfbGlzdCk7XG4gfVxuIFxuKy8qKlxuKyAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbisgKiBAcjpcdFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxuKyAqIEBsYXN0Olx0aWYgdGhlIHJlcXVlc3QgaXMgZm9yIGxhc3Qtd2luZG93IGFnZ3JlZ2F0ZWQgcHJvYmUgaGl0cy5cbisgKiBAY3R4Olx0Y29udGV4dCBvZiBcdTAwMjZyLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cbisgKi9cbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXHR1bnNpZ25lZCBpbnQgc3VtID0gMDtcbitcdGludCBpID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbitcdFx0aWYgKGxhc3QpXG4rXHRcdFx0c3VtICs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4rXHRcdGVsc2VcbitcdFx0XHRzdW0gKz0gci1cdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4rXHR9XG4rXHRyZXR1cm4gc3VtO1xuK31cbitcbiAvKlxuICAqIENoZWNrIHdoZXRoZXIgYSByZWdpb24gaXMgaW50ZXJzZWN0aW5nIGFuIGFkZHJlc3MgcmFuZ2VcbiAgKlxuQEAgLTEzMDIsNiArMTMzOCwzNCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdGRhbW9zX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXHUwMDI2cy1cdTAwM2VvcHNfZmlsdGVycyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG4rXHR1bnNpZ25lZCBjaGFyIG1heF9wcm9iZV9oaXRzO1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbitcdHVuc2lnbmVkIGludCB3c3VtLCB3c3VtX3RvX2FkZDtcbitcbitcdGlmICghZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xuK1x0aWYgKGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsIFx1MDAzZSBVOF9NQVgpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG4rXHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbitcdHdzdW0gPSAwO1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuK1x0XHRpZiAocHJvYmUtXHUwMDNld2VpZ2h0IFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0d3N1bV90b19hZGQgPSBwcm9iZS1cdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcbitcdFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcdTAwM2Mgd3N1bV90b19hZGQpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR3c3VtICs9IHdzdW1fdG9fYWRkO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuXG4gICogQGRzdDpcdERlc3RpbmF0aW9uIHN0cnVjdHVyZSB0byB1cGRhdGUuXG5AQCAtMTY1OCw2ICsxNzIyLDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShkc3RfcHJvYmUsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSsrLCBzcmMpO1xuIFx0XHRpZiAoc3JjX3Byb2JlKSB7XG4rXHRcdFx0ZHN0X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE2NzQsNiArMTczOSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiBcdFx0aWYgKCFuZXdfcHJvYmUpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGRhbW9uX2FkZF9wcm9iZShkc3QsIG5ld19wcm9iZSk7XG4rXHRcdG5ld19wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuIFx0XHRlcnIgPSBkYW1vbl9jb21taXRfZmlsdGVycyhuZXdfcHJvYmUsIHNyY19wcm9iZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0xNzA0LDYgKzE3NzAsOSBAQCBzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKCFkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3JjKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTMyMjEsNiArMzI5MCwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0ZGFtb25fZGVzdHJveV9yZWdpb24ociwgdCk7XG4gfVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuK1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXG4re1xuK1x0aWYgKHVzZV9wcm9iZV9oaXRzKVxuK1x0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7XG4rXHRpZiAobGFzdClcbitcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcztcbitcdHJldHVybiByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuK31cbitcbiAvKlxuICAqIE1lcmdlIGFkamFjZW50IHJlZ2lvbnMgaGF2aW5nIHNpbWlsYXIgYWNjZXNzIGZyZXF1ZW5jaWVzXG4gICpcbkBAIC0zMjI5LDI0ICszMzA4LDM4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gICogc3pfbGltaXRcdHNpemUgdXBwZXIgbGltaXQgb2YgZWFjaCByZWdpb25cbiAgKi9cbiBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3pfbGltaXQpXG4rXHRcdHVuc2lnbmVkIGxvbmcgc3pfbGltaXQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xuK1x0Ym9vbCB1c2VfcHJvYmVfaGl0cyA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG4gXG4gXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7XG4tXHRcdGlmIChhYnMoci1cdTAwM2Vucl9hY2Nlc3NlcyAtIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcykgXHUwMDNlIHRocmVzKVxuK1x0XHR1bnNpZ25lZCBpbnQgc2NvcmUsIGxhc3Rfc2NvcmUsIGRpZmY7XG4rXG4rXHRcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xuK1x0XHRsYXN0X3Njb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgdHJ1ZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG4rXG4rXHRcdGlmIChhYnNfZGlmZihzY29yZSwgbGFzdF9zY29yZSkgXHUwMDNlIHRocmVzKVxuIFx0XHRcdHItXHUwMDNlYWdlID0gMDtcbi1cdFx0ZWxzZSBpZiAoKHItXHUwMDNlbnJfYWNjZXNzZXMgPT0gMCkgIT0gKHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9PSAwKSlcbitcdFx0ZWxzZSBpZiAoKHNjb3JlID09IDApICE9IChsYXN0X3Njb3JlID09IDApKVxuIFx0XHRcdHItXHUwMDNlYWdlID0gMDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHItXHUwMDNlYWdlKys7XG4gXG4tXHRcdGlmIChwcmV2IFx1MDAyNlx1MDAyNiBwcmV2LVx1MDAzZWFyLmVuZCA9PSByLVx1MDAzZWFyLnN0YXJ0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgYWJzKHByZXYtXHUwMDNlbnJfYWNjZXNzZXMgLSByLVx1MDAzZW5yX2FjY2Vzc2VzKSBcdTAwM2M9IHRocmVzIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZGFtb25fc3pfcmVnaW9uKHByZXYpICsgZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gc3pfbGltaXQpXG4tXHRcdFx0ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRwcmV2ID0gcjtcbitcdFx0aWYgKCFwcmV2KVxuK1x0XHRcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XG4rXHRcdGlmIChwcmV2LVx1MDAzZWFyLmVuZCAhPSByLVx1MDAzZWFyLnN0YXJ0KVxuK1x0XHRcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XG4rXHRcdGRpZmYgPSBhYnNfZGlmZihzY29yZSwgZGFtb25fbWVyZ2Vfc2NvcmUocHJldiwgZmFsc2UsIGN0eCxcbitcdFx0XHRcdFx0dXNlX3Byb2JlX2hpdHMpKTtcbitcdFx0aWYgKGRpZmYgXHUwMDNlIHRocmVzKVxuK1x0XHRcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XG4rXHRcdGlmIChkYW1vbl9zel9yZWdpb24ocHJldikgKyBkYW1vbl9zel9yZWdpb24ocikgXHUwMDNlIHN6X2xpbWl0KVxuK1x0XHRcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XG4rXHRcdGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHQsIHByZXYsIHIpO1xuK1x0XHRjb250aW51ZTtcbitzZXRfcHJldl9jb250aW51ZTpcbitcdFx0cHJldiA9IHI7XG4gXHR9XG4gfVxuIFxuQEAgLTMyNzksNyArMzM3Miw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLFxuIFx0ZG8ge1xuIFx0XHRucl9yZWdpb25zID0gMDtcbiBcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbi1cdFx0XHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIHRocmVzaG9sZCwgc3pfbGltaXQpO1xuK1x0XHRcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCwgYyk7XG4gXHRcdFx0bnJfcmVnaW9ucyArPSBkYW1vbl9ucl9yZWdpb25zKHQpO1xuIFx0XHR9XG4gXHRcdHRocmVzaG9sZCA9IG1heCgxLCB0aHJlc2hvbGQgKiAyKTtcbkBAIC0zNjQzLDcgKzM3MzYsNiBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBkYXRhO1xuLVx0dW5zaWduZWQgaW50IG1heF9ucl9hY2Nlc3NlcyA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHN6X2xpbWl0ID0gMDtcbiBcbiBcdHByX2RlYnVnKFwia2RhbW9uZCAoJWQpIHN0YXJ0c1xcblwiLCBjdXJyZW50LVx1MDAzZXBpZCk7XG5AQCAtMzY3NiwyNSArMzc2OCwzOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdFx0dW5zaWduZWQgbG9uZyBuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcztcbiBcdFx0dW5zaWduZWQgbG9uZyBuZXh0X29wc191cGRhdGVfc2lzID0gY3R4LVx1MDAzZW5leHRfb3BzX3VwZGF0ZV9zaXM7XG4gXHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcbitcdFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xuK1x0XHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XG4rXHRcdGJvb2wgZ2V0X21heF93c3VtO1xuIFxuIFx0XHRpZiAoa2RhbW9uZF93YWl0X2FjdGl2YXRpb24oY3R4KSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0aWYgKGN0eC1cdTAwM2VvcHMucHJlcGFyZV9hY2Nlc3NfY2hlY2tzKVxuK1x0XHRpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpXG4gXHRcdFx0Y3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MoY3R4KTtcbiBcbiBcdFx0a2RhbW9uZF91c2xlZXAoc2FtcGxlX2ludGVydmFsKTtcbiBcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzKys7XG4gXG4tXHRcdGlmIChjdHgtXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKVxuLVx0XHRcdG1heF9ucl9hY2Nlc3NlcyA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbi1cdFx0aWYgKGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKVxuLVx0XHRcdGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCk7XG4rXHRcdGlmICghYWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKVxuK1x0XHRcdG1heF9tZXJnZV9zY29yZSA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbitcdFx0aWYgKGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XG4rXHRcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxuK1x0XHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkKVxuK1x0XHRcdFx0Z2V0X21heF93c3VtID0gdHJ1ZTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRnZXRfbWF4X3dzdW0gPSBmYWxzZTtcbitcdFx0XHRtYXhfd3N1bSA9IGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcbitcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkLCBnZXRfbWF4X3dzdW0pO1xuK1x0XHRcdGlmIChnZXRfbWF4X3dzdW0pXG4rXHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgPSBtYXhfd3N1bTtcbitcdFx0fVxuIFxuIFx0XHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4gXHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSkge1xuIFx0XHRcdGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhjdHgsXG4tXHRcdFx0XHRcdG1heF9ucl9hY2Nlc3NlcyAvIDEwLFxuK1x0XHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcbiBcdFx0XHRcdFx0c3pfbGltaXQpO1xuIFx0XHRcdC8qIG9ubGluZSB1cGRhdGVzIG1pZ2h0IGJlIG1hZGUgKi9cbiBcdFx0XHRzel9saW1pdCA9IGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKGN0eCk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDYxNzI0NjQ5ODE3MzA0Li5iODVmODhhN2EzOGY0ZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0xNjYsMTEgKzE2NiwxMyBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBwYXNzO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4ge1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiBcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4gXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X3dzdW0gPSAwO1xuIFxuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuQEAgLTE3OCw2ICsxODAsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0XHRcdHBoeXNfYWRkcl90IHBhO1xuIFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4rXHRcdFx0aWYgKHNldF9zYW1wbGVzKVxuK1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4rXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuIFx0XHRcdHBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlc2FtcGxpbmdfYWRkcixcbiBcdFx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCk7XG4gXHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbkBAIC0xODgsOCArMTkzLDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRcdFx0fVxuIFx0XHRcdGlmIChmb2xpbylcbiBcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbitcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbitcdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0fVxuK1x0cmV0dXJuIG1heF93c3VtO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCA2ZDdlMzZjOWU1MDlkMi4uYjVmZTAzNmY3ODAxNTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMTA2NSw2ICsxMDY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcbiBcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xuIFx0c3RydWN0IGtvYmplY3Qga29iajtcbitcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVycztcbiB9O1xuIFxuQEAgLTExMDAsMTIgKzExMDEsMzUgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuK1x0XHRjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxuK1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSwga29iaik7XG4rXG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXVcXG5cIiwgcHJvYmUtXHUwMDNld2VpZ2h0KTtcbit9XG4rXG4rc3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSAqcHJvYmUgPSBjb250YWluZXJfb2Yoa29iaixcbitcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZwcm9iZS1cdTAwM2V3ZWlnaHQpO1xuK1xuK1x0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19wcm9iZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxuIHtcbiBcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ciA9XG4rXHRcdF9fQVRUUl9SV19NT0RFKHdlaWdodCwgMDYwMCk7XG4rXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ci5hdHRyLFxuIFx0TlVMTCxcbiB9O1xuIEFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfcHJvYmUpO1xuQEAgLTE5NjUsNiArMTk4OSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGRhbW9uX2FkZF9wcm9iZShjdHgsIHApO1xuIFx0XHRzeXNfcHJvYmUgPSBzeXNfcHJvYmVzLVx1MDAzZXByb2Jlc19hcnJbaV07XG4rXHRcdHAtXHUwMDNld2VpZ2h0ID0gc3lzX3Byb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlKHAsIHN5c19wcm9iZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGQ5NzI4MDI3MGMyN2I4Li42YWQ3MzU1OWRkOGVhYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMjI2LDYgKzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuIFx0dW5zaWduZWQgbG9uZyBzYVtdID0gezAsIDEwMCwgMTE0LCAxMjIsIDEzMCwgMTU2LCAxNzAsIDE4NCwgMjMwfTtcbkBAIC0yMzYsMjAgKzIzNywyNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0dW5zaWduZWQgbG9uZyBlYWRkcnNbXSA9IHsxMTIsIDEzMCwgMTU2LCAxNzAsIDIzMCwgMTAxNzB9O1xuIFx0aW50IGk7XG4gXG4rXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4rXHRpZiAoIWN0eClcbitcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcImN0eCBhbGxvYyBmYWlsXCIpO1xuK1xuIFx0dCA9IGRhbW9uX25ld190YXJnZXQoKTtcbi1cdGlmICghdClcbitcdGlmICghdCkge1xuK1x0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwidGFyZ2V0IGFsbG9jIGZhaWxcIik7XG4rXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNhKTsgaSsrKSB7XG4gXHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHNhW2ldLCBlYVtpXSk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuK1x0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4gXHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInJlZ2lvbiBhbGxvYyBmYWlsXCIpO1xuIFx0XHR9XG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBucnNbaV07XG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG4tXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTkpO1xuK1x0ZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCA5LCA5OTk5LCBjdHgpO1xuIFx0LyogMC0xMTIsIDExNC0xMzAsIDEzMC0xNTYsIDE1Ni0xNzAsIDE3MC0yMzAsIDIzMC0xMDE3MCAqL1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDZ1KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkrKykge1xuQEAgLTI1OCw2ICsyNjYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIGVhZGRyc1tpXSk7XG4gXHR9XG4gXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbitcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0Mzo1NC4xODg3MTcwMjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEzNTEzODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgYSBgd2VpZ2h0YCBhdHRyaWJ1dGUgdG8gREFNT04gcHJvYmVzLiBUaGlzIGlzIHByZXR0eSBzaWduaWZpY2FudDsgaXQncyBlbmFibGluZyBcIkRhdGEgQXR0cmlidXRlcy1vbmx5IE1vbml0b3JpbmcsXCIgd2hpY2ggY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIHBvc3NpYmlsaXRpZXMuIEknbSBzZWVpbmcgaXQgdG91Y2ggcXVpdGUgYSBmZXcgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2AsIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLCBjb3JlIERBTU9OIGZ1bmN0aW9uYWxpdHkgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi9wYWRkci5jYCwgdGhlIHN5c2ZzIGludGVyZmFjZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AsIGFuZCBldmVuIGEgS1VuaXQgdGVzdCBmaWxlLCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgYnVnIGZpeC5cblxuU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIG5ldyBgd2VpZ2h0YCBzeXNmcyBmaWxlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAgaXMgYmVpbmcgdXBkYXRlZCB0byBsZXZlcmFnZSBhIGBkYW1vbl9tZXJnZV9zY29yZWAsIGFuZCBjcnVjaWFsbHksIGl0IHdpbGwgYmUgdXNpbmcgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAgaWYgdGhlIHByb2JlIHdlaWdodHMgYXJlIGFjdGl2ZSwgd2hpY2gsIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHdpbGwgYmUgY2hlY2tlZCBieSBgZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KWAuIEkgc2hvdWxkIGxvb2sgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHdlaWdodHMgYXJlIGVuYWJsZWQuIEFsc28sIGBrZGFtb25kX2ZuYCBpcyBiZWluZyBtb2RpZmllZCB0byB1c2UgYG1heF93c3VtYCBhbmQgc2tpcCB0aGUgYWNjZXNzIGNoZWNrcyB3aGVuIHByb2JlIHdlaWdodHMgYXJlIGFjdGl2ZSBhbmQgYGFjY2Vzc19jaGVja19kaXNhYmxlZGAuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gQWxyaWdodCwgSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS9kYW1vbi9LY29uZmlnYCBmb3IgdGhlIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9uczogYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBhbmQgYENPTkZJR19EQU1PTl9QQUREUmAuXG5cbk5vdywgbGV0IG1lIHJ1biBhIHF1aWNrIHNlYXJjaCBvbiBgQ09ORklHX0RBTU9OYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwgdHJlZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgZXhpc3RpbmcgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgYW5kIGhvdyB0aGlzIG5ldyB3ZWlnaHQgZmVhdHVyZSBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTA6NDQ6MDUuMzIzODU3ODQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjU2NDg3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDowNS41ODA0Mjg5MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg0OTk1NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvcmUqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIERBTU9OIGNvbmZpZ3VyYXRpb25zIGhlcmU6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUEFERFJgLiBOb3csIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGRyaXZpbmcgdGhlIGFjdGlvbi4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGNyaXRpY2FsIG9uZXMgc2VlbSB0byBiZTogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYCwgYGtkYW1vbmRfZm5gLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCwgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLCBhbmQgdGhlbiB0aGUgc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucywgYHdlaWdodF9zdG9yZWAsIGFuZCBgd2VpZ2h0X3Nob3dgLiBUaGUgZmlyc3QgZnVuY3Rpb24gbGlzdGVkLCBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgbG9va3MgbGlrZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBvbmUgdG8gc3RhcnQgd2l0aCwgc28gSSdsbCBjaGVjayBpdHMgbG9jYXRpb24gaW4gYG1tL2RhbW9uL2NvcmUuY2AuIExldCdzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGlzIGlzIGFsbCB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDowOS43NjU0MjcxNTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NDkxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NDAxPXN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDA3LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzo0MDg6ICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxcbm1tL2RhbW9uL2NvcmUuYy00MDktICogQHI6XFx0XFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQxNC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDE1OnVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbm1tL2RhbW9uL2NvcmUuYy00MTYtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyOTM9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI5Ni1cXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jOjMyOTc6XFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjk4LVxcdGlmIChsYXN0KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xNjk9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xOTYtXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG5tbS9kYW1vbi9wYWRkci5jOjE5NzpcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxubW0vZGFtb24vcGFkZHIuYy0xOTgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDowOS44Mjk5ODA4MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY5MjAxODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBmaWx0ZXJlZCB0aHJvdWdoIG15IGV4cGVydCBsZW5zOlxuXG4qKkFuYWx5emluZyBEQU1PTiBQcm9iaW5nIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIG15IGJyYWluIGlzIGZvY3VzZWQuIE15IHByaW9yaXRpZXMgaW4gdGhpcyBEQU1PTiBjb250ZXh0IGFyZSBjbGVhcmx5IGxhaWQgb3V0LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb25fbWVyZ2Vfc2NvcmVgLCBgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zYCwgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLCBgd2VpZ2h0X3N0b3JlYCwgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AsIGFuZCBga2RhbW9uZF9mbmAuIFRob3NlIGFyZSB0aGUgY29yZSBjb21wb25lbnRzIHRoYXQgbmVlZCB0aGUgY2xvc2VzdCBzY3J1dGlueS4gSXQncyBhIHZlcnkgdGFyZ2V0ZWQgbGlzdCwgc28gdGhlIGdvYWwgaXMgbGlrZWx5IGEgc3BlY2lmaWMgaXNzdWUuXG5cbk15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIGZlZCBpbnRvIHRoaXMgYXJlIHZhbGlkLCBiZWNhdXNlIGl0IGlzIHRoZSBnYXRla2VlcGVyIG9mIHdoYXQgaXMgdmFsaWQsIGFuZCB0aGVyZWZvcmUgY29ycmVjdCBmdW5jdGlvbmluZyBvZiB0aGUgdW5kZXJseWluZyBzeXN0ZW0uIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBwcm9iZXMgYXJlIGJlaW5nIGluaXRpYXRlZCBhbmQgd2hhdCBjaGVja3MgYW5kIGJhbGFuY2VzIGFyZSBpbXBsZW1lbnRlZCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIERBTU9OIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTA6NDQ6MTUuMzk5MTg1NTc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDIwODMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMzMwPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzQwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMzQxOnN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTEzNDIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3NTA9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc3Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MTc3MzpcXHRpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKVxcbm1tL2RhbW9uL2NvcmUuYy0xNzc0LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDoxNS41NjMzOTgzODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkxNzY2NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IHVzZXIgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgV2VpZ2h0IFN0b3JlKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGB3ZWlnaHRfc3RvcmVgLiBJIG5lZWQgdG8gYXNzZXNzIGl0cyBzdGF0ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBpbnRlZ3JpdHkuIElzIGl0IHBvcHVsYXRlZCBjb3JyZWN0bHk/IEFyZSB0aGUgd2VpZ2h0cyBpbiB0aGUgZm9ybWF0IEkgZXhwZWN0LCBvciBkaWQgc29tZXRoaW5nIHVwc3RyZWFtIG1lc3Mgd2l0aCB0aGUgZGF0YT8gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHVuZXhwZWN0ZWQgdmFsdWVzIGltbWVkaWF0ZWx5LiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cyBpZiB0aGUgd2VpZ2h0cyBhcmUgY29ycnVwdGVkIG9yIG1pc2NhbGlicmF0ZWQ/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCByYW5nZSBmcm9tIHN1YnRsZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiB0byBvdXRyaWdodCBtb2RlbCBmYWlsdXJlLiBNeSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBkZWJ1Z2dpbmcgc2NlbmFyaW9zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3ZWlnaHRfc3RvcmVgIGlzbid0IHNpbGVudGx5IGJyb2tlbiBiZWZvcmUgSSBwcm9jZWVkLiBUaGlzIGNvdWxkIHNhdmUgbWUgYSBoZWFkYWNoZSBkb3duIHRoZSBsaW5lLCBJIGtub3cgZnJvbSBleHBlcmllbmNlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjE5LjI1NTE2NzE3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDkxNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndlaWdodF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwODA9c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3Nob3coXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA4OC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjA4OTpzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwOTAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTEwND1zdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMTEyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTExMzpzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0xMTE0LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjE5LjM1NzI2MzI5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA3NTI1MTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBEQU1PTiBDb21wb25lbnRzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCwgYW5kIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYC4gQW5kIHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3MgYXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUEFERFJgLiBTZWVtcyBsaWtlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgYSBEQU1PTiBzZXR1cC5cblxuTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gIFRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIGZvciBwcm9iZSBjb25maWd1cmF0aW9uLiAgVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiAgSSdkIGJldHRlciB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBvbmUuICBJdCBzaG91bGQgYmUgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLCByaWdodD8gIExldCdzIGdvIHRha2UgYSBwZWVrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDozMS40MzI1MTY3MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTg5ODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19zZXRfcHJvYmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTE5Njc9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTk3Ny1cXG5tbS9kYW1vbi9zeXNmcy5jOjE5Nzg6c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9zeXNmcy5jLTE5NzktXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyAqc3lzX3Byb2JlcylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMTAtXFx0XFx0cmV0dXJuIGVycjtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTE6XFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlcyhjdHgsIHN5c19jdHgtXFx1MDAzZWF0dHJzLVxcdTAwM2Vwcm9iZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjExMi1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDozMS42NjI0MjA1NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUyNDQzNTk5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBmdW5jdGlvbnMgaW4gYSBEQU1PTiBjb250ZXh0OlxuXG4qKkRBTU9OIFByb2JlIGFuZCBSZWdpb24gTWFuYWdlbWVudCBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IEknbSBnb2luZyB0byBhcHByb2FjaCB0aGlzIERBTU9OIGFuYWx5c2lzLiBJIG5lZWQgdG8gYmUgc3VyZSB0byBpbmNsdWRlIHRoZSBgZGFtb25fc3lzZnNfc2V0X3Byb2Jlc2AgZnVuY3Rpb24gaW4gbXkgYXNzZXNzbWVudC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBwcm9iZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYW5kIGNvbmZpZ3VyZWQgYXQgdGhlIHVzZXIgbGV2ZWwsIHdoaWNoIGRpcmVjdGx5IGltcGFjdHMgREFNT04ncyBiZWhhdmlvci4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHRoYXQgaW50ZXJhY3Rpb24uXG5cblRoZW4sIG1vdmluZyBvbiwgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgIGlzIGEga2V5IGFyZWEgdG8gcmUtZXhhbWluZS4gUmVnaW9uIG1lcmdpbmcgaXMgYXQgdGhlIGhlYXJ0IG9mIERBTU9OJ3MgZWZmaWNpZW5jeSwgYW5kIHRoaXMgZnVuY3Rpb24gZ292ZXJucyBob3cgcmVnaW9ucyBhcmUgY29tYmluZWQgYmFzZWQgb24gYWNjZXNzIHBhdHRlcm5zIG9yIG90aGVyIGNyaXRlcmlhLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIGFuZCBhbGdvcml0aG1zIGVtcGxveWVkIGhlcmUuIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIG1lcmdlIGxvZ2ljIGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gZHluYW1pY2FsbHkgYWRhcHRzIHRvIGNoYW5naW5nIG1lbW9yeSBhY2Nlc3MgY2hhcmFjdGVyaXN0aWNzLCBhbmQgc28sIGNyaXRpY2FsIHRvIGFueSBwZXJmb3JtYW5jZSBhbmQgb3ZlcmhlYWQgZXZhbHVhdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgREFNT04gZGVjaWRlcyB0byBtZXJnZSBvciBub3QgdG8gbWVyZ2UgdGhlc2UgcmVnaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDo0Ni45MDY3ODI5ODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTM3MTgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI5Mz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzA5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMzEwOnN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbm1tL2RhbW9uL2NvcmUuYy0zMzExLVxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfbGltaXQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzYzPXN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNzQtXFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzM3NTpcXHRcXHRcXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIHRocmVzaG9sZCwgc3pfbGltaXQsIGMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzc2LVxcdFxcdFxcdG5yX3JlZ2lvbnMgKz0gZGFtb25fbnJfcmVnaW9ucyh0KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yMjc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNTktXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjI2MDpcXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTksIGN0eCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI2MS1cXHQvKiAwLTExMiwgMTE0LTEzMCwgMTMwLTE1NiwgMTU2LTE3MCwgMTcwLTIzMCwgMjMwLTEwMTcwICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjQ3LjAxODE2MDQ5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY4NDI4NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqUHJvY2Vzc2luZyBhIENvZGUgSW50ZWdyYXRpb24qKlxuXG5SaWdodCwgSSBuZWVkIHRvIGJyaW5nIGluIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIGFuZCBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHdvcmsgd2l0aCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgaXQgbGlrZWx5IGhhbmRsZXMgaG93IHdlIGNvbWJpbmUgdGhlc2Ugc3BlY2lmaWMgcmVnaW9ucyBpbiB0aGUgZGF0YXNldC5cblxuQmVmb3JlIEkgY29tbWl0IHRvIHVzaW5nIHRoYXQgdGhvdWdoLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrZGFtb25kX2ZuYCwgYXMgaXQgc291bmRzIGxpa2UgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBmcmFtZXdvcmsgYW5kIGNvdWxkIHZlcnkgd2VsbCBhZmZlY3Qgb3IgYmUgYWZmZWN0ZWQgYnkgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgLiBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCByb2xlIG9mIGBrZGFtb25kX2ZuYCBpcyBjcnVjaWFsIGJlZm9yZSBwcm9jZWVkaW5nLiBOZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IGludHJvZHVjZSBhbnkgY29uZmxpY3RzIG9yIGluZWZmaWNpZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjUwLjU4NjU5MTQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg1Mjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX2ZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTAxMj1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzQtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXFxubW0vZGFtb24vY29yZS5jOjEwMzU6ICogd2hpbGUgdGhlIGtkYW1vbmQgaXMgbm90IHlldCBzdGFydGVkLCBhbmQgaW5zaWRlIG9mIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTAzNi0gKlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzktICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbm1tL2RhbW9uL2NvcmUuYzoxMDQwOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxcbm1tL2RhbW9uL2NvcmUuYy0xMDQxLSAqIGFwcGx5aW5nIGF1dG8tdHVuZWQgbW9uaXRvcmluZyBpbnRlcnZhbHMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTA0Nz1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDczLVxcdC8qXFxubW0vZGFtb24vY29yZS5jOjEwNzQ6XFx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXFxubW0vZGFtb24vY29yZS5jLTEwNzUtXFx0ICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyMS1cXG5tbS9kYW1vbi9jb3JlLmM6MTkyMjpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxubW0vZGFtb24vY29yZS5jLTE5MjMtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkzMj1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5MzktXFx0XFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTk0MDpcXHRcXHRjdHgtXFx1MDAzZWtkYW1vbmQgPSBrdGhyZWFkX3J1bihrZGFtb25kX2ZuLCBjdHgsIFxcXCJrZGFtb25kLiVkXFxcIixcXG5tbS9kYW1vbi9jb3JlLmMtMTk0MS1cXHRcXHRcXHRcXHRucl9ydW5uaW5nX2N0eHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzY9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspXFxubW0vZGFtb24vY29yZS5jOjIwNDE6XFx0XFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjA0Mi1cXHRcXHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzcxND1zdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzM1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNzM2OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbm1tL2RhbW9uL2NvcmUuYy0zNzM3LXtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDk1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MjEtICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1MjI6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXFxcIm1tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVxcXCIpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MjMtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjUwLjY0NTQ0OTI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjQwNDk2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBhbmQgSW50ZWdyYXRpbmcgYGtkYW1vbmRfZm5gIGFuZCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZnVsbHkgdXAgdG8gc3BlZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycy4gSSdsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gaW5jbHVkZSBga2RhbW9uZF9mbmAgaW4gdGhlIGVxdWF0aW9uLiBUaGF0J3MgYSBjcnVjaWFsIGNvbXBvbmVudCwgc28gSSBkb24ndCB3YW50IHRvIG92ZXJsb29rIHRoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoaW4gdGhpcyBzeXN0ZW0uXG5cbkFuZCB0aGVuLCBJIHNob3VsZCBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCB0aGUgZnVuY3Rpb24sIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLiBJIHJlbWVtYmVyIHRoYXQgb25lLi4uIGl0J3MgcGl2b3RhbCwgc28gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNsZWFyIG9uIGhvdyB0aG9zZSB0d28gZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHksIGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjUzLjg2OTUwMTExMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwODAxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfYXBwbHlfcHJvYmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9wYWRkci5jPTE1Mz1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTY4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTY5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9wYWRkci5jLTE3MC1cXHRcXHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDQ3PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ1NC1cXHRcXHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyxcXG5tbS9kYW1vbi9wYWRkci5jOjQ1NTpcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDU2LVxcdFxcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDo1My45Mjk1ODg5MjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5OTA1MjU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgcmVxdWVzdGVkLCBzcGVha2luZyBhcyBhbiBleHBlcnQ6XG5cbioqQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIG9mIENvcmUgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGFzIG1lIGZvY3VzaW5nIG9uIGEgY3J1Y2lhbCBpbnRlZ3JhdGlvbiBwb2ludDogSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBmdW5jdGlvbiBpcyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQncyB0aGUgbHluY2hwaW4gZm9yIFtpbnNlcnQgZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMg4oCTIGUuZy4sIHByb2JlIGFwcGxpY2F0aW9uLCBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZSBkYXRhIGluamVjdGlvbiwgb3Igc29tZSBvdGhlciBrZXkgcGFydCBvZiB0aGUgc3lzdGVtXS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBiZWhhdmlvdXIgaXMgYWxpZ25lZCB3aXRoIG15IGRlc2lnbiBzcGVjaWZpY2F0aW9ucy5cblxuQmV5b25kIHRoYXQsIEknbSB0aGlua2luZyBhYm91dCB0d28gbGlrZWx5IHJlbGF0ZWQgYXNwZWN0cyB0aGF0IEknbGwgbmVlZCB0byBjaGVjaywgYW5kIHRob3NlIGFyZSBgd2VpZ2h0X3N0b3JlYCBhbmQgYHdlaWdodF9zaG93YC4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IHRoZXNlIHJlbGF0ZSB0byBob3cgc29tZSBmb3JtIG9mIHdlaWdodGluZyBtZWNoYW5pc20gaXMgbWFuYWdlZC4gR2l2ZW4gYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AsIEkgZXhwZWN0IHRoZXNlIGxpa2VseSByZWxhdGUgdG8gaG93IHByb2JlcyBhcmUgd2VpZ2h0ZWQgYW5kIGhvdyB0aG9zZSB3ZWlnaHRzIGFyZSByZXRyaWV2ZWQgb3IgZGlzcGxheWVkLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugd2VpZ2h0cyBhcmUgY29ycmVjdGx5IHN0b3JlZCwgcmV0cmlldmVkLCBhbmQgdGhhdCBhbnkgdmlzdWFsIHJlcHJlc2VudGF0aW9uIChpZiB0aGVyZSBpcyBvbmUpIGlzIGFjY3VyYXRlLiBUaGVzZSBhcmUga2V5IGFyZWFzIHRvIG1vbml0b3IgZm9yIHBlcmZvcm1hbmNlIGFuZCBhY2N1cmFjeS4gVGhleSBtaWdodCBiZSBhIHNvdXJjZSBvZiBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgb3IgZXJyb3JzLCBzbyBhIHRob3JvdWdoIGNoZWNrIGlzIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDo1Ny4zMjg2NDQwMTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTAyNDM3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3ZWlnaHRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDgwPXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwODgtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwODk6c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDkwLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTExMDQ9c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTExMi1cXG5tbS9kYW1vbi9zeXNmcy5jOjExMTM6c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTExNC1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDo1Ny40ODk2NzQxMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxMDM3NzIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipSZXZpZXdpbmcgREFNT04ncyBDb3JlIENvbXBvbmVudHMqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB3aGF0IEkndmUgZ290IGluIG15IGhlYWQgcmlnaHQgbm93LCBmb2N1c2luZyBvbiB0aGUgY29yZSBEQU1PTiBjb21wb25lbnRzLiBJIG5lZWQgdG8ga2VlcCBgd2VpZ2h0X3N0b3JlYCBpbiBtaW5kLCBvYnZpb3VzbHkg4oCTIGl0J3MgY3J1Y2lhbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgZnVuY3Rpb25zLiBGaXJzdCwgSSBoYXZlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb25fbWVyZ2Vfc2NvcmVgLCBhbmQgYGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc2AuIFRob3NlIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBwcm9iaW5nIGFuZCBzY29yaW5nIHBhcnQgb2YgdGhlIERBTU9OIGltcGxlbWVudGF0aW9uLCBoYW5kbGluZyB2YWxpZGF0aW9uIGFuZCBzdW1tYXJpemF0aW9uLiBUaGVuIHRoZXJlJ3MgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLCB3aGljaCBpcyB0aGUgaW50ZXJmYWNlIHRocm91Z2ggd2hpY2ggdXNlcnMgY2FuIHR3ZWFrIHRoZSBwcm9iaW5nIHBhcmFtZXRlcnMuIE5leHQsIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYCwgYW5kIGBrZGFtb25kX2ZuYCwgc28gdGhvc2UgaGFuZGxlIHJlZ2lvbiBtYW5hZ2VtZW50IGFuZCBiYWNrZ3JvdW5kIGRhZW1vbiBvcGVyYXRpb25zLiBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBpcyBpbXBvcnRhbnQuIEFuZCBsYXN0bHksIGxldCdzIGluY2x1ZGUgYHdlaWdodF9zdG9yZWAuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUEFERFJgLiBXYWl0LCBub3cgdGhhdCBJIGNvbnNpZGVyIHRoYXQsIGRvZXMgYERBTU9OX1ZBRERSYCBoYXZlIHRoZSBgYXBwbHlfcHJvYmVzYCBjb21wb25lbnQgaW4gdGhlIGltcGxlbWVudGF0aW9uPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydCBhbmQgbWFrZSBzdXJlIGl0J3MgYWxsIGNvbnNpc3RlbnQgaW4gdGhlIGNvZGUuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBuZXh0IHRoaW5nIEkgd2lsbCBsb29rIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA0MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NTowMi45MDAwNTM5MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTAyNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwcGx5X3Byb2Jlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTM3MzY9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc4NS1cXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgPSBjdHgtXFx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzozNzg2OlxcdFxcdGlmIChjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMzc4Ny1cXHRcXHRcXHRpZiAodGltZV9hZnRlcl9lcShjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3OTItXFx0XFx0XFx0XFx0Z2V0X21heF93c3VtID0gZmFsc2U7XFxubW0vZGFtb24vY29yZS5jOjM3OTM6XFx0XFx0XFx0bWF4X3dzdW0gPSBjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zNzk0LVxcdFxcdFxcdFxcdFxcdGFjY2Vzc19jaGVja19kaXNhYmxlZCwgZ2V0X21heF93c3VtKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTUzPXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNjgtXFxubW0vZGFtb24vcGFkZHIuYzoxNjk6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3BhZGRyLmMtMTcwLVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00NDc9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDU0LVxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDU1OlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYy00NTYtXFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ1OjAyLjk1ODk2NTgzN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIyNTkxNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBEQU1PTidzIEFkZHJlc3MgU3BhY2UgUHJvYmluZyBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgd2FzIGxvb2tpbmcgYXQgaG93IERBTU9OIGhhbmRsZXMgYWRkcmVzcyBzcGFjZSBwcm9iaW5nLCBhbmQgdGhlIGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSGV5LCBkb2VzIGBEQU1PTl9WQUREUmAgaGF2ZSB0aGUgYGFwcGx5X3Byb2Jlc2AgZnVuY3Rpb24/XCIgVHVybnMgb3V0LCBubywgaXQgZG9lc24ndC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSBzb2xlbHkgd2l0aGluIGBwYWRkci5jYC4gVGhpcyBpcyBpbXBvcnRhbnQsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gVGhpcyByZWFsbHkgc29saWRpZmllcyB0aGUgaWRlYSB0aGF0IHdlICpuZWVkKiBgREFNT05fUEFERFJgLiBPdGhlcndpc2UsIGhvdyB3b3VsZCB0aGlzIHdvcms/XG5cbk5vdywgSSByZWFsbHkgbmVlZCB0byByZXZpc2l0IGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9yIG1hZGUgYW55IGluY29ycmVjdCBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gaXMgdmV0dGluZyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgZm9yIHByb2JpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhpcyBgYXBwbHlfcHJvYmVzYCBzaXR1YXRpb24uIEkgbmVlZCB0byBlbnN1cmUgdGhlIHBhcmFtZXRlcnMgYXJlIHZhbGlkIGdpdmVuIHRoaXMgc2VwYXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NTowNy4zODE1NjEyMTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTI4MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEzMzA9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNDAtXFxubW0vZGFtb24vY29yZS5jOjEzNDE6c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMTM0Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTc1MD1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVxcbm1tL2RhbW9uL2NvcmUuYzoxNzczOlxcdGlmICghZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHNyYykpXFxubW0vZGFtb24vY29yZS5jLTE3NzQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ1OjA3LjQ0MTY5MjYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTQzMTg0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBEYW1vbiBQcm9iZSBQYXJhbWV0ZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiBpbmNvcnBvcmF0aW5nIHRoZSBgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zYCBzdHJ1Y3R1cmUuIFRoYXQncyBmdW5kYW1lbnRhbDsgaXQgcmVwcmVzZW50cyB0aGUgc2V0IG9mIHBhcmFtZXRlcnMgd2hpY2ggYXJlIGRlZW1lZCBjb3JyZWN0IGFuZCBhY2NlcHRhYmxlIHRvIHVzZSBmb3IgdGhpcyBzcGVjaWZpYyB0eXBlIG9mIHByb2JpbmcuIEkga25vdyBpdHMgY3J1Y2lhbCBmb3IgdGhlIGFuYWx5c2lzLiBCZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgY3JpdGljYWwgc3RydWN0dXJlIGlzIHByZXNlbnQgYW5kIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGUgdGFzay5cblxuTmV4dCwgYW5kIHByb2JhYmx5IGp1c3QgYXMgY3JpdGljYWwsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgZGFtb25faGFzX3Byb2JlX3dlaWdodHNgIGlzIHByb3Blcmx5IGVzdGFibGlzaGVkLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgZXZlcnl0aGluZyB3aWxsIGZ1bmN0aW9uIGNvcnJlY3RseS4gV2VpZ2h0aW5nIGlzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBpbiB0aGUgRGFtb24gaW1wbGVtZW50YXRpb24sIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgdGhlIGV4aXN0aW5nIHdlaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTA6NDU6MTEuMzk2MDE0MDU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDA3OTYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTIwMD1zdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTEtXFxubW0vZGFtb24vY29yZS5jOjIxMjpzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0yMTMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzNDE9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzQ3LVxcbm1tL2RhbW9uL2NvcmUuYzoxMzQ4OlxcdGlmICghZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KSlcXG5tbS9kYW1vbi9jb3JlLmMtMTM0OS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzEwPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMTMtXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmM6MzMxNDpcXHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMxNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzM2PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzAtXFx0XFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcXG5tbS9kYW1vbi9jb3JlLmM6Mzc3MTpcXHRcXHRib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTM3NzItXFx0XFx0dW5zaWduZWQgaW50IG1heF9tZXJnZV9zY29yZSA9IDAsIG1heF93c3VtO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NToxMS40NjAwOTk2MjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwMjI0OTYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBEQU1PTiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBzb2xpZGlmeSB0aGUgcGxhbiBmb3IgZnV6emluZyB0aGVzZSBEQU1PTiBmdW5jdGlvbnMuIEknbGwgaW5jbHVkZSBgZGFtb25faGFzX3Byb2JlX3dlaWdodHNgIGFzIGl0J3MgYSBwYXJ0IG9mIHRoZSBvdmVyYWxsIGxvZ2ljLlxuXG5IZXJlJ3MgdGhlIGZpbmFsaXplZCBsaXN0IG9mIGZ1bmN0aW9ucyB0byB0YXJnZXQ6XG5cbiogICBgZGFtb25fcHJvYmVfaGl0c193c3VtYFxuKiAgIGBkYW1vbl9tZXJnZV9zY29yZWBcbiogICBgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zYFxuKiAgIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYFxuKiAgIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYFxuKiAgIGBrZGFtb25kX2ZuYFxuKiAgIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgXG4qICAgYHdlaWdodF9zdG9yZWBcbiogICBgZGFtb25faGFzX3Byb2JlX3dlaWdodHNgXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGtleSBmbGFnczogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9QQUREUmAuXG5cbk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIHdhbnQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdoaWxlIGBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c2AgY2FuIGJlIGdsb3NzZWQgb3ZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhlc2UgZnVuY3Rpb25zLCByaWdodD8gQW5kIGNoZWNraW5nIHRob3NlIHJlcXVpcmVtZW50czpcblxuKiAgIGBEQU1PTl9QQUREUmAgaXMgY2xlYXJseSBuZWNlc3NhcnkgZm9yIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLlxuKiAgIEFuZCBgREFNT05fU1lTRlNgIHdpbGwgYmUgbmVlZGVkIGZvciB0aGUgYHdlaWdodF9zdG9yZWAgYW5kIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYCBhcyB3ZWxsLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoZSBwbGFuLiBJJ2xsIG91dHB1dCB0aGUgcmVzdWx0cyBhbmQgcHJlcGFyZSB0aGUgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzUsIk91dHB1dFRva2VucyI6MjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ1OjE4LjQ2MjM1Mjc4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjE3MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9zY29yZVwiLFxuICAgIFwiZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zZXRfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcIndlaWdodF9zdG9yZVwiLFxuICAgIFwiZGFtb25faGFzX3Byb2JlX3dlaWdodHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICd3ZWlnaHQnIGF0dHJpYnV0ZSBmb3IgREFNT04gcHJvYmVzLCBlbmFibGluZyAnRGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZycuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdXNlIHByb2JlIGhpdCB3ZWlnaHRlZCBzdW1zIGluc3RlYWQgb2YgYWNjZXNzIGNvdW50cyBmb3IgcmVnaW9uIGFkanVzdG1lbnQgd2hlbiB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBJdCBtb2RpZmllcyBzeXNmcyBpbnRlcmZhY2VzLCBjb3JlIHJlZ2lvbiBtZXJnaW5nIGxvZ2ljLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBwcm9iZSBhcHBsaWNhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX3dzdW1cIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCIsXG4gICAgXCJkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNcIixcbiAgICBcImRhbW9uX3N5c2ZzX3NldF9wcm9iZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZcIixcbiAgICBcImtkYW1vbmRfZm5cIixcbiAgICBcImRhbW9uX3BhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwid2VpZ2h0X3N0b3JlXCIsXG4gICAgXCJkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgJ3dlaWdodCcgYXR0cmlidXRlIGZvciBEQU1PTiBwcm9iZXMsIGVuYWJsaW5nICdEYXRhIEF0dHJpYnV0ZXMtb25seSBNb25pdG9yaW5nJy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyB0byB1c2UgcHJvYmUgaGl0IHdlaWdodGVkIHN1bXMgaW5zdGVhZCBvZiBhY2Nlc3MgY291bnRzIGZvciByZWdpb24gYWRqdXN0bWVudCB3aGVuIHdlaWdodHMgYXJlIGNvbmZpZ3VyZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIGludGVyZmFjZXMsIGNvcmUgcmVnaW9uIG1lcmdpbmcgbG9naWMsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHByb2JlIGFwcGxpY2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvpkl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-11 10:25:01 +0000 UTC FinishedAt: 2026-07-11 10:45:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "95b4f54f93b0d85c0fc9bb9d73e79823959edf74", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "95b4f54f93b0d85c0fc9bb9d73e79823959edf74", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR" ], "series_id": "faafb85b-7edb-4cd9-ba23-834a719091eb" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_probe_hits_wsum", "damon_merge_score", "damon_valid_probe_params", "damon_sysfs_set_probes", "damon_merge_regions_of", "kdamond_fn", "damon_pa_apply_probes", "weight_store", "damon_has_probe_weights" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3Njb3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9zeXNmc19zZXRfcHJvYmVzJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3JlZ2lvbnNfb2YmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9mbiYjMzQ7LAogICAgJiMzNDtkYW1vbl9wYV9hcHBseV9wcm9iZXMmIzM0OywKICAgICYjMzQ7d2VpZ2h0X3N0b3JlJiMzNDssCiAgICAmIzM0O2RhbW9uX2hhc19wcm9iZV93ZWlnaHRzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgJiMzOTt3ZWlnaHQmIzM5OyBhdHRyaWJ1dGUgZm9yIERBTU9OIHByb2JlcywgZW5hYmxpbmcgJiMzOTtEYXRhIEF0dHJpYnV0ZXMtb25seSBNb25pdG9yaW5nJiMzOTsuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdXNlIHByb2JlIGhpdCB3ZWlnaHRlZCBzdW1zIGluc3RlYWQgb2YgYWNjZXNzIGNvdW50cyBmb3IgcmVnaW9uIGFkanVzdG1lbnQgd2hlbiB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBJdCBtb2RpZmllcyBzeXNmcyBpbnRlcmZhY2VzLCBjb3JlIHJlZ2lvbiBtZXJnaW5nIGxvZ2ljLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBwcm9iZSBhcHBsaWNhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IG1vbml0b3Jpbmcgc3Vic3lzdGVtIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3ZmU5YzNjODdhNjU2MGQwNTEwZTE0OTI4YTBiZTQ4OTBiMGExM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxMDo0Mzo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbiBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG5pbmRleCBkZDZiNWJkNzZlMTE5Ni4uOTA3YTUwNGZiNjRjNTQgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbkBAIC0xNjQsNiAmIzQzOzE2NCwxMiBAQCBEZXNjcmlwdGlvbjpcdFdyaXRpbmcgYSBudW1iZXIgJiMzOTtOJiMzOTsgdG8gdGhpcyBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZlxuIFx0XHRkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iZSBuYW1lZCAmIzM5OzAmIzM5OyB0byAmIzM5O04tMSYjMzk7IHVuZGVyIHRoZVxuIFx0XHRwcm9iZXMvIGRpcmVjdG9yeS5cbiBcbiYjNDM7V2hhdDpcdFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjS1x1MDAzZS9jb250ZXh0cy9cdTAwM2NDXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1x1MDAzY1BcdTAwM2Uvd2VpZ2h0XG4mIzQzO0RhdGU6XHRcdEp1bCAyMDI2XG4mIzQzO0NvbnRhY3Q6XHRTSiBQYXJrIFx1MDAzY3NqQGtlcm5lbC5vcmdcdTAwM2VcbiYjNDM7RGVzY3JpcHRpb246XHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlXG4mIzQzO1x0XHRwZXItcHJvYmUgYXR0cmlidXRlIHdlaWdodC5cbiYjNDM7XG4gV2hhdDpcdFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjS1x1MDAzZS9jb250ZXh0cy9cdTAwM2NDXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1x1MDAzY1BcdTAwM2UvZmlsdGVycy9ucl9maWx0ZXJzXG4gRGF0ZTpcdFx0TWF5IDIwMjZcbiBDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuaW5kZXggYjI2NDllYTAxMWY5MzEuLmRhNWY5YWZkMDhhZWY4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG5AQCAtNzMsOSAmIzQzOzczLDEwIEBAIGNvbW1hIChcJiMzNDssXCYjMzQ7KS5cbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGludGVydmFsc19nb2FsL2FjY2Vzc19icCxhZ2dycyxtaW5fc2FtcGxlX3VzLG1heF9zYW1wbGVfdXNcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgbnJfcmVnaW9ucy9taW4sbWF4XG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YHByb2JlcyBcdTAwM2NkYW1vbl91c2FnZV9zeXNmc19wcm9iZXNcdTAwM2VgL25yX3Byb2Jlc1xuLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC9maWx0ZXJzL25yX2ZpbHRlcnNcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3R5cGUsbWF0Y2hpbmcsYWxsb3cscGF0aFxuLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLlxuJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0XG4mIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGZpbHRlcnMvbnJfZmlsdGVyc1xuJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGhcbiYjNDM7ICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLlxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdGFyZ2V0cyBcdTAwM2NzeXNmc190YXJnZXRzXHUwMDNlYC9ucl90YXJnZXRzXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YDAgXHUwMDNjc3lzZnNfdGFyZ2V0XHUwMDNlYC9waWRfdGFyZ2V0LG9ic29sZXRlX3RhcmdldFxuQEAgLTI4Niw2ICYjNDM7Mjg3LDEwIEBAIEluIGVhY2ggcHJvYmUgZGlyZWN0b3J5LCBvbmUgZGlyZWN0b3J5LCBgYGZpbHRlcnNgYCBleGlzdHMuICBUaGUgZGlyZWN0b3J5XG4gY29udGFpbnMgZmlsZXMgZm9yIGluc3RhbGxpbmcgZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lXG4gdGhlIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgcHJvYmUuXG4gXG4mIzQzO0VhY2ggcHJvYmUgZGlyZWN0b3J5IGFsc28gY29udGFpbnMgYGB3ZWlnaHRgYCBmaWxlLiAgUmVhZGluZyBmcm9tIGFuZCB3cml0aW5nXG4mIzQzO3RvIHRoZSBmaWxlIGdldHMgYW5kIHNldHMgdGhlIDpyZWY6YGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nXG4mIzQzO1x1MDAzY2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmdcdTAwM2VgIHdlaWdodCBmb3IgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgcHJvYmUuXG4mIzQzO1xuIEluIHRoZSBiZWdpbm5pbmcsIGBgZmlsdGVyc2BgIGRpcmVjdG9yeSBoYXMgb25seSBvbmUgZmlsZSwgYGBucl9maWx0ZXJzYGAuXG4gV3JpdGluZyBhIG51bWJlciAoYGBOYGApIHRvIHRoZSBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZiBjaGlsZCBkaXJlY3Rvcmllc1xuIG5hbWVkIGBgMGBgIHRvIGBgTi0xYGAuICBFYWNoIGRpcmVjdG9yeSByZXByZXNlbnRzIGVhY2ggZmlsdGVyIGFuZCB3b3JrcyBpbiBhXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG5pbmRleCA0NTdkNmU4YmM3ODc4NS4uYWVkNmNiMWNmNDgzMTAgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuQEAgLTMxNiw2ICYjNDM7MzE2LDMxIEBAIEFub3RoZXIgd2F5IHRvIGRvIHRoaXMgZm9yIGhpZ2hlciBhY2N1cmFjeSBpcyB1c2luZyA6cmVmOmBEQU1PUyBmaWx0ZXJcbiBpbmZvcm1hdGlvbiBpbiBwYWdlIGxldmVsLiAgQnV0LCBiZWNhdXNlIGl0IGlzIG9wZXJhdGVkIGluIHBhZ2UgbGV2ZWwsIHRoZVxuIG92ZXJoZWFkIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5LlxuIFxuJiM0MzsuLiBfZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZzpcbiYjNDM7XG4mIzQzO0RhdGEgQXR0cmlidXRlcy1vbmx5IE1vbml0b3JpbmdcbiYjNDM7fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuJiM0MztcbiYjNDM7RGF0YSBhY2Nlc3MgaXMgdGhlIHByaW1hcnkgbW9uaXRvcmluZyBpbmZvcm1hdGlvbiBmb3IgREFNT04uICBIZW5jZSBpdFxuJiM0Mzs6cmVmOmBhZGp1c3RzIFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcdTAwM2VgIHJlZ2lvbnMgdXNpbmcgdGhlIGFjY2Vzc1xuJiM0Mzs6cmVmOmBjb3VudGVyIFx1MDAzY2RhbW9uX2Rlc2lnbl9yZWdpb25fYmFzZWRfc2FtcGxpbmdcdTAwM2VgIChgYG5yX2FjY2Vzc2VzYGApLiAgSW4gc29tZVxuJiM0Mzt1c2UgY2FzZXMsIGhvd2V2ZXIsIHVzZXJzIG1heSB3YW50IHNvbWUgb2YgOnJlZjpgYXR0cmlidXRlc1xuJiM0MztcdTAwM2NkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nXHUwMDNlYCB0byBiZSB0aGUgcHJpbWFyeSBpbmZvcm1hdGlvbi5cbiYjNDM7XG4mIzQzO0RhdGEgYXR0cmlidXRlcy1vbmx5IG1vbml0b3JpbmcgbW9kZSBzdXBwb3J0cyB0aGlzIHVzZSBjYXNlLiAgRm9yIHRoZSBtb2RlLFxuJiM0MztlYWNoIGF0dHJpYnV0ZSBwcm9iZSBoYXMgdGhlaXIgcHJpb3JpdHkgd2VpZ2h0IHZhbHVlLiAgVXNlcnMgY2FuIGRlc2NyaWJlIGJ5XG4mIzQzO3doYXQgY29tYmluYXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMgdGhlIHByaW1hcnkgaW5mb3JtYXRpb24gaXMgZGVjaWRlZCwgYnlcbiYjNDM7c2V0dGluZyB0aGUgcHJpb3JpdHkgd2VpZ2h0IHZhbHVlLiAgSWYgdGhlIHRvdGFsIHN1bSBvZiB0aGUgd2VpZ2h0cyBpcyBub3RcbiYjNDM7emVybywgdGhlIG1vZGUgaXMgZW5hYmxlZC4gIFRoZSByZWdpb25zIGFkanVzdG1lbnQgbWVjaGFuaXNtIHVzZXMgdGhlIHdlaWdodGVkXG4mIzQzO3N1bSBvZiB0aGUgOnJlZjpgcHJvYmUgaGl0IGNvdW50cyBcdTAwM2NkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nXHUwMDNlYCBpbnN0ZWFkXG4mIzQzO29mIGBgbnJfYWNjZXNzZXNgYCBpbiB0aGUgY2FzZS4gIFdoZW4gdGhlIG1vZGUgaXMgZW5hYmxlZCwgYWNjZXNzIG1vbml0b3JpbmcgaXNcbiYjNDM7YXV0b21hdGljYWxseSB0dXJuZWQgb2ZmLiAgVGhlIGFjY2VzcyBjb3VudGVyIChgYG5yX2FjY2Vzc2VzYGApIHdpbGwgYWx3YXlzIGJlXG4mIzQzO3plcm8gYW5kIG5vdCB1cGRhdGVkLiAgSGVuY2UgdGhlIG1vZGUgaXMgY2FsbGVkIERhdGEgQXR0cmlidXRlcyBcJiMzNDtvbmx5XCYjMzQ7XG4mIzQzO21vbml0b3JpbmcuXG4mIzQzO1xuJiM0MztSZWZlciB0byB0aGUgOnJlZjpgYWRtaW4gZ3VpZGUgXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXHUwMDNlYCB0byBrbm93IGhvdyB1c2Vyc1xuJiM0MztjYW4gdXNlIHRoZSBtb2RlLlxuJiM0MztcbiBEeW5hbWljIFRhcmdldCBTcGFjZSBVcGRhdGVzIEhhbmRsaW5nXG4gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggNjNmNTk2OTU3YzFmMWYuLmY2OTQ0MmE5ZDQzMTI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC02NDcsNyAmIzQzOzY0NywxMCBAQCBlbnVtIGRhbW9uX29wc19pZCB7XG4gICogSXQgc2hvdWxkIGFsc28gcmV0dXJuIG1heCBudW1iZXIgb2Ygb2JzZXJ2ZWQgYWNjZXNzZXMgdGhhdCBtYWRlIGFzIGEgcmVzdWx0XG4gICogb2YgaXRzIHVwZGF0ZS4gIFRoZSB2YWx1ZSB3aWxsIGJlIHVzZWQgZm9yIHJlZ2lvbnMgYWRqdXN0bWVudCB0aHJlc2hvbGQuXG4gICogQGFwcGx5X3Byb2JlcyBzaG91bGQgYXBwbHkgdGhlIGRhdGEgYXR0cmlidXRlIHByb2JlcyB0byBlYWNoIHJlZ2lvbiBhbmRcbi0gKiBhY2NvcmRpbmdseSB1cGRhdGUgdGhlIHByb2JlIGhpdHMgY291bnRlciBvZiB0aGUgcmVnaW9uLlxuJiM0MzsgKiBhY2NvcmRpbmdseSB1cGRhdGUgdGhlIHByb2JlIGhpdHMgY291bnRlciBvZiB0aGUgcmVnaW9uLiAgSXQgc2hvdWxkIGFsc29cbiYjNDM7ICogc2V0IFx1MDAyNmRhbW9uX3JlZ2lvbi1cdTAwM2VzYW1wbGluZ19hZGRyIG9mIGVhY2ggcmVnaW9uIGlmIGBgc2V0X3NhbXBsZXNgYCBpcyB0cnVlLlxuJiM0MzsgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4aW11bSBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiByZWdpb25zIGlmXG4mIzQzOyAqIGBgcmV0dXJuX21heF93c3VtYGAgaXMgdHJ1ZS5cbiAgKiBAZ2V0X3NjaGVtZV9zY29yZSBzaG91bGQgcmV0dXJuIHRoZSBwcmlvcml0eSBzY29yZSBvZiBhIHJlZ2lvbiBmb3IgYSBzY2hlbWVcbiAgKiBhcyBhbiBpbnRlZ2VyIGluIFswLCBcdTAwMjZEQU1PU19NQVhfU0NPUkVdLlxuICAqIEBhcHBseV9zY2hlbWUgaXMgY2FsbGVkIGZyb20gQGtkYW1vbmQgd2hlbiBhIHJlZ2lvbiBmb3IgdXNlciBwcm92aWRlZFxuQEAgLTY2NSw3ICYjNDM7NjY4LDggQEAgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xuIFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XG4gXHR2b2lkICgqcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbiBcdHVuc2lnbmVkIGludCAoKmNoZWNrX2FjY2Vzc2VzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbi1cdHZvaWQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xuJiM0MztcdHVuc2lnbmVkIGludCAoKmFwcGx5X3Byb2Jlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbiYjNDM7XHRcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pO1xuIFx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbiBcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSk7XG4gXHR1bnNpZ25lZCBsb25nICgqYXBwbHlfc2NoZW1lKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuQEAgLTc2MCwxMCAmIzQzOzc2NCwxMiBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiAvKipcbiAgKiBzdHJ1Y3QgZGFtb25fcHJvYmUgLSBEYXRhIHJlZ2lvbiBhdHRyaWJ1dGUgcHJvYmUuXG4gICpcbiYjNDM7ICogQHdlaWdodDpcdFJlbGF0aXZlIHByaW9yaXR5IG9mIHRoZSBhdHRyaWJ1dGUgZm9yIHRoaXMgcHJvYmUuXG4gICogQGZpbHRlcnM6XHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXG4gICogQGxpc3Q6XHRTaWJsaW5ncyBsaXN0LlxuICAqL1xuIHN0cnVjdCBkYW1vbl9wcm9iZSB7XG4mIzQzO1x0dW5zaWduZWQgaW50IHdlaWdodDtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgZmlsdGVycztcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiB9O1xuQEAgLTEwMDYsNiAmIzQzOzEwMTIsOCBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xuIFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxuIFx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggMTE0NzNhYTFmNzBmNDEuLjgwNmE2N2QwMmE2ZTkwIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0xNjYsNiAmIzQzOzE2Niw3IEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4gXHRwID0ga21hbGxvY19vYmooKnApO1xuIFx0aWYgKCFwKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRwLVx1MDAzZXdlaWdodCA9IDA7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWZpbHRlcnMpO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cC1cdTAwM2VsaXN0KTtcbiBcdHJldHVybiBwO1xuQEAgLTIwOCw2ICYjNDM7MjA5LDE3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX250aF9wcm9iZShpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuJiM0MztcbiYjNDM7XHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjKSB7XG4mIzQzO1x0XHRpZiAocC1cdTAwM2V3ZWlnaHQpXG4mIzQzO1x0XHRcdHJldHVybiB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkYW1vbl9tdnN1bSgpIC0gUmV0dXJucyBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBmb3IgYSB0aW1lIHdpbmRvdy5cbiAgKiBAY3VycmVudF9ucjpcdFx0VGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIHdpbmRvdy5cbkBAIC0zOTIsNiAmIzQzOzQwNCwzMCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0cmV0dXJuIGxpc3RfaXNfbGFzdChcdTAwMjZyLVx1MDAzZWxpc3QsIFx1MDAyNnQtXHUwMDNlcmVnaW9uc19saXN0KTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG4mIzQzOyAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4mIzQzOyAqIEBsYXN0Olx0aWYgdGhlIHJlcXVlc3QgaXMgZm9yIGxhc3Qtd2luZG93IGFnZ3JlZ2F0ZWQgcHJvYmUgaGl0cy5cbiYjNDM7ICogQGN0eDpcdGNvbnRleHQgb2YgXHUwMDI2ci5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cbiYjNDM7ICovXG4mIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3VtID0gMDtcbiYjNDM7XHRpbnQgaSA9IDA7XG4mIzQzO1xuJiM0MztcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbiYjNDM7XHRcdGlmIChsYXN0KVxuJiM0MztcdFx0XHRzdW0gJiM0Mzs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2kmIzQzOyYjNDM7XSAqIHByb2JlLVx1MDAzZXdlaWdodDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3VtICYjNDM7PSByLVx1MDAzZXByb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtXHUwMDNld2VpZ2h0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gc3VtO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogQ2hlY2sgd2hldGhlciBhIHJlZ2lvbiBpcyBpbnRlcnNlY3RpbmcgYW4gYWRkcmVzcyByYW5nZVxuICAqXG5AQCAtMTMwMiw2ICYjNDM7MTMzOCwzNCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdGRhbW9zX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXHUwMDI2cy1cdTAwM2VvcHNfZmlsdGVycyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG4mIzQzO1x0dW5zaWduZWQgY2hhciBtYXhfcHJvYmVfaGl0cztcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xuJiM0MztcdHVuc2lnbmVkIGludCB3c3VtLCB3c3VtX3RvX2FkZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpKVxuJiM0MztcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1xuJiM0MztcdHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XG4mIzQzO1x0aWYgKGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsIFx1MDAzZSBVOF9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG4mIzQzO1x0bWF4X3Byb2JlX2hpdHMgPSBkYW1vbl9ucl9zYW1wbGVzX3Blcl9hZ2dyKFx1MDAyNmN0eC1cdTAwM2VhdHRycyk7XG4mIzQzO1x0d3N1bSA9IDA7XG4mIzQzO1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuJiM0MztcdFx0aWYgKHByb2JlLVx1MDAzZXdlaWdodCBcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcbiYjNDM7XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcdFx0d3N1bV90b19hZGQgPSBwcm9iZS1cdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcbiYjNDM7XHRcdGlmIChVSU5UX01BWCAtIHdzdW0gXHUwMDNjIHdzdW1fdG9fYWRkKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHR3c3VtICYjNDM7PSB3c3VtX3RvX2FkZDtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkYW1vc19jb21taXRfZGVzdHMoKSAtIENvcHkgbWlncmF0aW9uIGRlc3RpbmF0aW9ucyBmcm9tIEBzcmMgdG8gQGRzdC5cbiAgKiBAZHN0Olx0RGVzdGluYXRpb24gc3RydWN0dXJlIHRvIHVwZGF0ZS5cbkBAIC0xNjU4LDYgJiM0MzsxNzIyLDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShkc3RfcHJvYmUsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSYjNDM7JiM0MzssIHNyYyk7XG4gXHRcdGlmIChzcmNfcHJvYmUpIHtcbiYjNDM7XHRcdFx0ZHN0X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE2NzQsNiAmIzQzOzE3MzksNyBAQCBzdGF0aWMgaW50IGRhbW9uX2NvbW1pdF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG4gXHRcdGlmICghbmV3X3Byb2JlKVxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRkYW1vbl9hZGRfcHJvYmUoZHN0LCBuZXdfcHJvYmUpO1xuJiM0MztcdFx0bmV3X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE3MDQsNiAmIzQzOzE3NzAsOSBAQCBzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiBcdFx0fVxuIFx0fVxuIFxuJiM0MztcdGlmICghZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHNyYykpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4gXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTMyMjEsNiAmIzQzOzMyOTAsMTYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4mIzQzO1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXG4mIzQzO3tcbiYjNDM7XHRpZiAodXNlX3Byb2JlX2hpdHMpXG4mIzQzO1x0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7XG4mIzQzO1x0aWYgKGxhc3QpXG4mIzQzO1x0XHRyZXR1cm4gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuJiM0MztcdHJldHVybiByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuJiM0Mzt9XG4mIzQzO1xuIC8qXG4gICogTWVyZ2UgYWRqYWNlbnQgcmVnaW9ucyBoYXZpbmcgc2ltaWxhciBhY2Nlc3MgZnJlcXVlbmNpZXNcbiAgKlxuQEAgLTMyMjksMjQgJiM0MzszMzA4LDM4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gICogc3pfbGltaXRcdHNpemUgdXBwZXIgbGltaXQgb2YgZWFjaCByZWdpb25cbiAgKi9cbiBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3pfbGltaXQpXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIHN6X2xpbWl0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcbiYjNDM7XHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcbi1cdFx0aWYgKGFicyhyLVx1MDAzZW5yX2FjY2Vzc2VzIC0gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKSBcdTAwM2UgdGhyZXMpXG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgc2NvcmUsIGxhc3Rfc2NvcmUsIGRpZmY7XG4mIzQzO1xuJiM0MztcdFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG4mIzQzO1x0XHRsYXN0X3Njb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgdHJ1ZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGFic19kaWZmKHNjb3JlLCBsYXN0X3Njb3JlKSBcdTAwM2UgdGhyZXMpXG4gXHRcdFx0ci1cdTAwM2VhZ2UgPSAwO1xuLVx0XHRlbHNlIGlmICgoci1cdTAwM2Vucl9hY2Nlc3NlcyA9PSAwKSAhPSAoci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID09IDApKVxuJiM0MztcdFx0ZWxzZSBpZiAoKHNjb3JlID09IDApICE9IChsYXN0X3Njb3JlID09IDApKVxuIFx0XHRcdHItXHUwMDNlYWdlID0gMDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHItXHUwMDNlYWdlJiM0MzsmIzQzOztcbiBcbi1cdFx0aWYgKHByZXYgXHUwMDI2XHUwMDI2IHByZXYtXHUwMDNlYXIuZW5kID09IHItXHUwMDNlYXIuc3RhcnQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhYnMocHJldi1cdTAwM2Vucl9hY2Nlc3NlcyAtIHItXHUwMDNlbnJfYWNjZXNzZXMpIFx1MDAzYz0gdGhyZXMgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBkYW1vbl9zel9yZWdpb24ocHJldikgJiM0MzsgZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gc3pfbGltaXQpXG4tXHRcdFx0ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRwcmV2ID0gcjtcbiYjNDM7XHRcdGlmICghcHJldilcbiYjNDM7XHRcdFx0Z290byBzZXRfcHJldl9jb250aW51ZTtcbiYjNDM7XHRcdGlmIChwcmV2LVx1MDAzZWFyLmVuZCAhPSByLVx1MDAzZWFyLnN0YXJ0KVxuJiM0MztcdFx0XHRnb3RvIHNldF9wcmV2X2NvbnRpbnVlO1xuJiM0MztcdFx0ZGlmZiA9IGFic19kaWZmKHNjb3JlLCBkYW1vbl9tZXJnZV9zY29yZShwcmV2LCBmYWxzZSwgY3R4LFxuJiM0MztcdFx0XHRcdFx0dXNlX3Byb2JlX2hpdHMpKTtcbiYjNDM7XHRcdGlmIChkaWZmIFx1MDAzZSB0aHJlcylcbiYjNDM7XHRcdFx0Z290byBzZXRfcHJldl9jb250aW51ZTtcbiYjNDM7XHRcdGlmIChkYW1vbl9zel9yZWdpb24ocHJldikgJiM0MzsgZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzZSBzel9saW1pdClcbiYjNDM7XHRcdFx0Z290byBzZXRfcHJldl9jb250aW51ZTtcbiYjNDM7XHRcdGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHQsIHByZXYsIHIpO1xuJiM0MztcdFx0Y29udGludWU7XG4mIzQzO3NldF9wcmV2X2NvbnRpbnVlOlxuJiM0MztcdFx0cHJldiA9IHI7XG4gXHR9XG4gfVxuIFxuQEAgLTMyNzksNyAmIzQzOzMzNzIsNyBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbiBcdGRvIHtcbiBcdFx0bnJfcmVnaW9ucyA9IDA7XG4gXHRcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XG4tXHRcdFx0ZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCB0aHJlc2hvbGQsIHN6X2xpbWl0KTtcbiYjNDM7XHRcdFx0ZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCB0aHJlc2hvbGQsIHN6X2xpbWl0LCBjKTtcbiBcdFx0XHRucl9yZWdpb25zICYjNDM7PSBkYW1vbl9ucl9yZWdpb25zKHQpO1xuIFx0XHR9XG4gXHRcdHRocmVzaG9sZCA9IG1heCgxLCB0aHJlc2hvbGQgKiAyKTtcbkBAIC0zNjQzLDcgJiM0MzszNzM2LDYgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4ge1xuIFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4ID0gZGF0YTtcbi1cdHVuc2lnbmVkIGludCBtYXhfbnJfYWNjZXNzZXMgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7XG4gXG4gXHRwcl9kZWJ1ZyhcJiMzNDtrZGFtb25kICglZCkgc3RhcnRzXFxuXCYjMzQ7LCBjdXJyZW50LVx1MDAzZXBpZCk7XG5AQCAtMzY3NiwyNSAmIzQzOzM3NjgsMzggQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRcdHVuc2lnbmVkIGxvbmcgbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSBjdHgtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXM7XG4gXHRcdHVuc2lnbmVkIGxvbmcgbmV4dF9vcHNfdXBkYXRlX3NpcyA9IGN0eC1cdTAwM2VuZXh0X29wc191cGRhdGVfc2lzO1xuIFx0XHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWw7XG4mIzQzO1x0XHRib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XG4mIzQzO1x0XHRib29sIGdldF9tYXhfd3N1bTtcbiBcbiBcdFx0aWYgKGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKGN0eCkpXG4gXHRcdFx0YnJlYWs7XG4gXG4tXHRcdGlmIChjdHgtXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcylcbiYjNDM7XHRcdGlmICghYWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcylcbiBcdFx0XHRjdHgtXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcyhjdHgpO1xuIFxuIFx0XHRrZGFtb25kX3VzbGVlcChzYW1wbGVfaW50ZXJ2YWwpO1xuIFx0XHRjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMmIzQzOyYjNDM7O1xuIFxuLVx0XHRpZiAoY3R4LVx1MDAzZW9wcy5jaGVja19hY2Nlc3Nlcylcbi1cdFx0XHRtYXhfbnJfYWNjZXNzZXMgPSBjdHgtXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKGN0eCk7XG4tXHRcdGlmIChjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2Jlcylcbi1cdFx0XHRjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2JlcyhjdHgpO1xuJiM0MztcdFx0aWYgKCFhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMpXG4mIzQzO1x0XHRcdG1heF9tZXJnZV9zY29yZSA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbiYjNDM7XHRcdGlmIChjdHgtXHUwMDNlb3BzLmFwcGx5X3Byb2Jlcykge1xuJiM0MztcdFx0XHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4mIzQzO1x0XHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHRcdGFjY2Vzc19jaGVja19kaXNhYmxlZClcbiYjNDM7XHRcdFx0XHRnZXRfbWF4X3dzdW0gPSB0cnVlO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0Z2V0X21heF93c3VtID0gZmFsc2U7XG4mIzQzO1x0XHRcdG1heF93c3VtID0gY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxuJiM0MztcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkLCBnZXRfbWF4X3dzdW0pO1xuJiM0MztcdFx0XHRpZiAoZ2V0X21heF93c3VtKVxuJiM0MztcdFx0XHRcdG1heF9tZXJnZV9zY29yZSA9IG1heF93c3VtO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4gXHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSkge1xuIFx0XHRcdGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhjdHgsXG4tXHRcdFx0XHRcdG1heF9ucl9hY2Nlc3NlcyAvIDEwLFxuJiM0MztcdFx0XHRcdFx0bWF4X21lcmdlX3Njb3JlIC8gMTAsXG4gXHRcdFx0XHRcdHN6X2xpbWl0KTtcbiBcdFx0XHQvKiBvbmxpbmUgdXBkYXRlcyBtaWdodCBiZSBtYWRlICovXG4gXHRcdFx0c3pfbGltaXQgPSBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhjdHgpO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3BhZGRyLmMgYi9tbS9kYW1vbi9wYWRkci5jXG5pbmRleCA2MTcyNDY0OTgxNzMwNC4uYjg1Zjg4YTdhMzhmNGQgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9wYWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9wYWRkci5jXG5AQCAtMTY2LDExICYjNDM7MTY2LDEzIEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0cmV0dXJuIHBhc3M7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbiYjNDM7XHRcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxuIHtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuIFx0c3RydWN0IGRhbW9uX3Byb2JlICpwO1xuJiM0MztcdHVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7XG4gXG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XG4gXHRcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XG5AQCAtMTc4LDYgJiM0MzsxODAsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0XHRcdHBoeXNfYWRkcl90IHBhO1xuIFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4mIzQzO1x0XHRcdGlmIChzZXRfc2FtcGxlcylcbiYjNDM7XHRcdFx0XHRyLVx1MDAzZXNhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci1cdTAwM2Vhci5zdGFydCxcbiYjNDM7XHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuIFx0XHRcdHBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlc2FtcGxpbmdfYWRkcixcbiBcdFx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCk7XG4gXHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbkBAIC0xODgsOCAmIzQzOzE5MywxMiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0XHRcdH1cbiBcdFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0MztcdFx0XHRpZiAocmV0dXJuX21heF93c3VtKVxuJiM0MztcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbiYjNDM7XHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4gXHRcdH1cbiBcdH1cbiYjNDM7XHRyZXR1cm4gbWF4X3dzdW07XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vc3lzZnMuYyBiL21tL2RhbW9uL3N5c2ZzLmNcbmluZGV4IDZkN2UzNmM5ZTUwOWQyLi5iNWZlMDM2Zjc4MDE1MiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3N5c2ZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3N5c2ZzLmNcbkBAIC0xMDY1LDYgJiM0MzsxMDY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcbiBcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xuIFx0c3RydWN0IGtvYmplY3Qga29iajtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmZpbHRlcnM7XG4gfTtcbiBcbkBAIC0xMTAwLDEyICYjNDM7MTEwMSwzNSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19wcm9iZV9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSAqcHJvYmUpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuJiM0MztcdFx0Y2hhciAqYnVmKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxuJiM0MztcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OyV1XFxuXCYjMzQ7LCBwcm9iZS1cdTAwM2V3ZWlnaHQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG4mIzQzO1x0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxuJiM0MztcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xuJiM0MztcdGludCBlcnIgPSBrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2cHJvYmUtXHUwMDNld2VpZ2h0KTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JlbGVhc2Uoc3RydWN0IGtvYmplY3QgKmtvYmopXG4ge1xuIFx0a2ZyZWUoY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSwga29iaikpO1xuIH1cbiBcbiYjNDM7c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ciA9XG4mIzQzO1x0XHRfX0FUVFJfUldfTU9ERSh3ZWlnaHQsIDA2MDApO1xuJiM0MztcbiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfcHJvYmVfYXR0cnNbXSA9IHtcbiYjNDM7XHRcdTAwMjZkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ci5hdHRyLFxuIFx0TlVMTCxcbiB9O1xuIEFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfcHJvYmUpO1xuQEAgLTE5NjUsNiAmIzQzOzE5ODksNyBAQCBzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuIFx0XHRcdHJldHVybiAtRU5PTUVNO1xuIFx0XHRkYW1vbl9hZGRfcHJvYmUoY3R4LCBwKTtcbiBcdFx0c3lzX3Byb2JlID0gc3lzX3Byb2Jlcy1cdTAwM2Vwcm9iZXNfYXJyW2ldO1xuJiM0MztcdFx0cC1cdTAwM2V3ZWlnaHQgPSBzeXNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuIFx0XHRlcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmUocCwgc3lzX3Byb2JlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuaW5kZXggZDk3MjgwMjcwYzI3YjguLjZhZDczNTU5ZGQ4ZWFiIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHg7XG4gXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuIFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbiBcdHVuc2lnbmVkIGxvbmcgc2FbXSA9IHswLCAxMDAsIDExNCwgMTIyLCAxMzAsIDE1NiwgMTcwLCAxODQsIDIzMH07XG5AQCAtMjM2LDIwICYjNDM7MjM3LDI3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHR1bnNpZ25lZCBsb25nIGVhZGRyc1tdID0gezExMiwgMTMwLCAxNTYsIDE3MCwgMjMwLCAxMDE3MH07XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4mIzQzO1x0aWYgKCFjdHgpXG4mIzQzO1x0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O2N0eCBhbGxvYyBmYWlsXCYjMzQ7KTtcbiYjNDM7XG4gXHR0ID0gZGFtb25fbmV3X3RhcmdldCgpO1xuLVx0aWYgKCF0KVxuJiM0MztcdGlmICghdCkge1xuJiM0MztcdFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDt0YXJnZXQgYWxsb2MgZmFpbFwmIzM0Oyk7XG4mIzQzO1x0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShzYSk7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHNhW2ldLCBlYVtpXSk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuJiM0MztcdFx0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0XHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7cmVnaW9uIGFsbG9jIGZhaWxcJiMzNDspO1xuIFx0XHR9XG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBucnNbaV07XG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG4tXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTkpO1xuJiM0MztcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgOSwgOTk5OSwgY3R4KTtcbiBcdC8qIDAtMTEyLCAxMTQtMTMwLCAxMzAtMTU2LCAxNTYtMTcwLCAxNzAtMjMwLCAyMzAtMTAxNzAgKi9cbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9ucl9yZWdpb25zKHQpLCA2dSk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyA2OyBpJiM0MzsmIzQzOykge1xuQEAgLTI1OCw2ICYjNDM7MjY2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCBlYWRkcnNbaV0pO1xuIFx0fVxuIFx0ZGFtb25fZnJlZV90YXJnZXQodCk7XG4mIzQzO1x0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfd3N1bSYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9zY29yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfc2V0X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9yZWdpb25zX29mJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfZm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O3dlaWdodF9zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICYjMzk7d2VpZ2h0JiMzOTsgYXR0cmlidXRlIGZvciBEQU1PTiBwcm9iZXMsIGVuYWJsaW5nICYjMzk7RGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZyYjMzk7LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHVzZSBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtcyBpbnN0ZWFkIG9mIGFjY2VzcyBjb3VudHMgZm9yIHJlZ2lvbiBhZGp1c3RtZW50IHdoZW4gd2VpZ2h0cyBhcmUgY29uZmlndXJlZC4gSXQgbW9kaWZpZXMgc3lzZnMgaW50ZXJmYWNlcywgY29yZSByZWdpb24gbWVyZ2luZyBsb2dpYywgYW5kIHBoeXNpY2FsIGFkZHJlc3MgcHJvYmUgYXBwbGljYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM3ZmU5YzNjODdhNjU2MGQwNTEwZTE0OTI4YTBiZTQ4OTBiMGExM2UKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxMSAxMDo0Mzo1MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24KaW5kZXggZGQ2YjViZDc2ZTExOTYuLjkwN2E1MDRmYjY0YzU0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vbgpAQCAtMTY0LDYgJiM0MzsxNjQsMTIgQEAgRGVzY3JpcHRpb246CVdyaXRpbmcgYSBudW1iZXIgJiMzOTtOJiMzOTsgdG8gdGhpcyBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZgogCQlkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iZSBuYW1lZCAmIzM5OzAmIzM5OyB0byAmIzM5O04tMSYjMzk7IHVuZGVyIHRoZQogCQlwcm9iZXMvIGRpcmVjdG9yeS4KIAomIzQzO1doYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7SyZndDsvY29udGV4dHMvJmx0O0MmZ3Q7L21vbml0b3JpbmdfYXR0cnMvcHJvYmVzLyZsdDtQJmd0Oy93ZWlnaHQKJiM0MztEYXRlOgkJSnVsIDIwMjYKJiM0MztDb250YWN0OglTSiBQYXJrICZsdDtzakBrZXJuZWwub3JnJmd0OwomIzQzO0Rlc2NyaXB0aW9uOglXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlCiYjNDM7CQlwZXItcHJvYmUgYXR0cmlidXRlIHdlaWdodC4KJiM0MzsKIFdoYXQ6CQkvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy8mbHQ7SyZndDsvY29udGV4dHMvJmx0O0MmZ3Q7L21vbml0b3JpbmdfYXR0cnMvcHJvYmVzLyZsdDtQJmd0Oy9maWx0ZXJzL25yX2ZpbHRlcnMKIERhdGU6CQlNYXkgMjAyNgogQ29udGFjdDoJU0ogUGFyayAmbHQ7c2pAa2VybmVsLm9yZyZndDsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QKaW5kZXggYjI2NDllYTAxMWY5MzEuLmRhNWY5YWZkMDhhZWY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdApAQCAtNzMsOSAmIzQzOzczLDEwIEBAIGNvbW1hICgmIzM0OywmIzM0OykuCiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGludGVydmFsc19nb2FsL2FjY2Vzc19icCxhZ2dycyxtaW5fc2FtcGxlX3VzLG1heF9zYW1wbGVfdXMKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBucl9yZWdpb25zL21pbixtYXgKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBwcm9iZXMgJmx0O2RhbW9uX3VzYWdlX3N5c2ZzX3Byb2JlcyZndDtgL25yX3Byb2JlcwotICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL2ZpbHRlcnMvbnJfZmlsdGVycwotICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGgKLSAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLgomIzQzOyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC93ZWlnaHQKJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnMKJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGgKJiM0MzsgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uCiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLgogICAgIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdGFyZ2V0cyAmbHQ7c3lzZnNfdGFyZ2V0cyZndDtgL25yX3RhcmdldHMKICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmAwICZsdDtzeXNmc190YXJnZXQmZ3Q7YC9waWRfdGFyZ2V0LG9ic29sZXRlX3RhcmdldApAQCAtMjg2LDYgJiM0MzsyODcsMTAgQEAgSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3RvcnkKIGNvbnRhaW5zIGZpbGVzIGZvciBpbnN0YWxsaW5nIGZpbHRlcnMgZm9yIHRoZSBwcm9iZSwgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZQogdGhlIGRhdGEgYXR0cmlidXRlIGZvciB0aGUgcHJvYmUuCiAKJiM0MztFYWNoIHByb2JlIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGBgd2VpZ2h0YGAgZmlsZS4gIFJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZwomIzQzO3RvIHRoZSBmaWxlIGdldHMgYW5kIHNldHMgdGhlIDpyZWY6YGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nCiYjNDM7Jmx0O2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmcmZ3Q7YCB3ZWlnaHQgZm9yIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHByb2JlLgomIzQzOwogSW4gdGhlIGJlZ2lubmluZywgYGBmaWx0ZXJzYGAgZGlyZWN0b3J5IGhhcyBvbmx5IG9uZSBmaWxlLCBgYG5yX2ZpbHRlcnNgYC4KIFdyaXRpbmcgYSBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXMKIG5hbWVkIGBgMGBgIHRvIGBgTi0xYGAuICBFYWNoIGRpcmVjdG9yeSByZXByZXNlbnRzIGVhY2ggZmlsdGVyIGFuZCB3b3JrcyBpbiBhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKaW5kZXggNDU3ZDZlOGJjNzg3ODUuLmFlZDZjYjFjZjQ4MzEwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0CkBAIC0zMTYsNiAmIzQzOzMxNiwzMSBAQCBBbm90aGVyIHdheSB0byBkbyB0aGlzIGZvciBoaWdoZXIgYWNjdXJhY3kgaXMgdXNpbmcgOnJlZjpgREFNT1MgZmlsdGVyCiBpbmZvcm1hdGlvbiBpbiBwYWdlIGxldmVsLiAgQnV0LCBiZWNhdXNlIGl0IGlzIG9wZXJhdGVkIGluIHBhZ2UgbGV2ZWwsIHRoZQogb3ZlcmhlYWQgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkuCiAKJiM0MzsuLiBfZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZzoKJiM0MzsKJiM0MztEYXRhIEF0dHJpYnV0ZXMtb25seSBNb25pdG9yaW5nCiYjNDM7fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgomIzQzOwomIzQzO0RhdGEgYWNjZXNzIGlzIHRoZSBwcmltYXJ5IG1vbml0b3JpbmcgaW5mb3JtYXRpb24gZm9yIERBTU9OLiAgSGVuY2UgaXQKJiM0Mzs6cmVmOmBhZGp1c3RzICZsdDtkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nJmd0O2AgcmVnaW9ucyB1c2luZyB0aGUgYWNjZXNzCiYjNDM7OnJlZjpgY291bnRlciAmbHQ7ZGFtb25fZGVzaWduX3JlZ2lvbl9iYXNlZF9zYW1wbGluZyZndDtgIChgYG5yX2FjY2Vzc2VzYGApLiAgSW4gc29tZQomIzQzO3VzZSBjYXNlcywgaG93ZXZlciwgdXNlcnMgbWF5IHdhbnQgc29tZSBvZiA6cmVmOmBhdHRyaWJ1dGVzCiYjNDM7Jmx0O2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmcmZ3Q7YCB0byBiZSB0aGUgcHJpbWFyeSBpbmZvcm1hdGlvbi4KJiM0MzsKJiM0MztEYXRhIGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nIG1vZGUgc3VwcG9ydHMgdGhpcyB1c2UgY2FzZS4gIEZvciB0aGUgbW9kZSwKJiM0MztlYWNoIGF0dHJpYnV0ZSBwcm9iZSBoYXMgdGhlaXIgcHJpb3JpdHkgd2VpZ2h0IHZhbHVlLiAgVXNlcnMgY2FuIGRlc2NyaWJlIGJ5CiYjNDM7d2hhdCBjb21iaW5hdGlvbiBvZiB0aGUgYXR0cmlidXRlcyB0aGUgcHJpbWFyeSBpbmZvcm1hdGlvbiBpcyBkZWNpZGVkLCBieQomIzQzO3NldHRpbmcgdGhlIHByaW9yaXR5IHdlaWdodCB2YWx1ZS4gIElmIHRoZSB0b3RhbCBzdW0gb2YgdGhlIHdlaWdodHMgaXMgbm90CiYjNDM7emVybywgdGhlIG1vZGUgaXMgZW5hYmxlZC4gIFRoZSByZWdpb25zIGFkanVzdG1lbnQgbWVjaGFuaXNtIHVzZXMgdGhlIHdlaWdodGVkCiYjNDM7c3VtIG9mIHRoZSA6cmVmOmBwcm9iZSBoaXQgY291bnRzICZsdDtkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nJmd0O2AgaW5zdGVhZAomIzQzO29mIGBgbnJfYWNjZXNzZXNgYCBpbiB0aGUgY2FzZS4gIFdoZW4gdGhlIG1vZGUgaXMgZW5hYmxlZCwgYWNjZXNzIG1vbml0b3JpbmcgaXMKJiM0MzthdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYuICBUaGUgYWNjZXNzIGNvdW50ZXIgKGBgbnJfYWNjZXNzZXNgYCkgd2lsbCBhbHdheXMgYmUKJiM0Mzt6ZXJvIGFuZCBub3QgdXBkYXRlZC4gIEhlbmNlIHRoZSBtb2RlIGlzIGNhbGxlZCBEYXRhIEF0dHJpYnV0ZXMgJiMzNDtvbmx5JiMzNDsKJiM0Mzttb25pdG9yaW5nLgomIzQzOwomIzQzO1JlZmVyIHRvIHRoZSA6cmVmOmBhZG1pbiBndWlkZSAmbHQ7ZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzJmd0O2AgdG8ga25vdyBob3cgdXNlcnMKJiM0MztjYW4gdXNlIHRoZSBtb2RlLgomIzQzOwogRHluYW1pYyBUYXJnZXQgU3BhY2UgVXBkYXRlcyBIYW5kbGluZwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKaW5kZXggNjNmNTk2OTU3YzFmMWYuLmY2OTQ0MmE5ZDQzMTI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCkBAIC02NDcsNyAmIzQzOzY0NywxMCBAQCBlbnVtIGRhbW9uX29wc19pZCB7CiAgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4IG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyB0aGF0IG1hZGUgYXMgYSByZXN1bHQKICAqIG9mIGl0cyB1cGRhdGUuICBUaGUgdmFsdWUgd2lsbCBiZSB1c2VkIGZvciByZWdpb25zIGFkanVzdG1lbnQgdGhyZXNob2xkLgogICogQGFwcGx5X3Byb2JlcyBzaG91bGQgYXBwbHkgdGhlIGRhdGEgYXR0cmlidXRlIHByb2JlcyB0byBlYWNoIHJlZ2lvbiBhbmQKLSAqIGFjY29yZGluZ2x5IHVwZGF0ZSB0aGUgcHJvYmUgaGl0cyBjb3VudGVyIG9mIHRoZSByZWdpb24uCiYjNDM7ICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi4gIEl0IHNob3VsZCBhbHNvCiYjNDM7ICogc2V0ICZhbXA7ZGFtb25fcmVnaW9uLSZndDtzYW1wbGluZ19hZGRyIG9mIGVhY2ggcmVnaW9uIGlmIGBgc2V0X3NhbXBsZXNgYCBpcyB0cnVlLgomIzQzOyAqIEl0IHNob3VsZCBhbHNvIHJldHVybiBtYXhpbXVtIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIHJlZ2lvbnMgaWYKJiM0MzsgKiBgYHJldHVybl9tYXhfd3N1bWBgIGlzIHRydWUuCiAgKiBAZ2V0X3NjaGVtZV9zY29yZSBzaG91bGQgcmV0dXJuIHRoZSBwcmlvcml0eSBzY29yZSBvZiBhIHJlZ2lvbiBmb3IgYSBzY2hlbWUKICAqIGFzIGFuIGludGVnZXIgaW4gWzAsICZhbXA7REFNT1NfTUFYX1NDT1JFXS4KICAqIEBhcHBseV9zY2hlbWUgaXMgY2FsbGVkIGZyb20gQGtkYW1vbmQgd2hlbiBhIHJlZ2lvbiBmb3IgdXNlciBwcm92aWRlZApAQCAtNjY1LDcgJiM0Mzs2NjgsOCBAQCBzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyB7CiAJdm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7CiAJdm9pZCAoKnByZXBhcmVfYWNjZXNzX2NoZWNrcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7CiAJdW5zaWduZWQgaW50ICgqY2hlY2tfYWNjZXNzZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpOwotCXZvaWQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpOwomIzQzOwl1bnNpZ25lZCBpbnQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsCiYjNDM7CQkJYm9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pOwogCWludCAoKmdldF9zY2hlbWVfc2NvcmUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsCiAJCQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnNjaGVtZSk7CiAJdW5zaWduZWQgbG9uZyAoKmFwcGx5X3NjaGVtZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCwKQEAgLTc2MCwxMCAmIzQzOzc2NCwxMiBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHsKIC8qKgogICogc3RydWN0IGRhbW9uX3Byb2JlIC0gRGF0YSByZWdpb24gYXR0cmlidXRlIHByb2JlLgogICoKJiM0MzsgKiBAd2VpZ2h0OglSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLgogICogQGZpbHRlcnM6CUZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS4KICAqIEBsaXN0OglTaWJsaW5ncyBsaXN0LgogICovCiBzdHJ1Y3QgZGFtb25fcHJvYmUgewomIzQzOwl1bnNpZ25lZCBpbnQgd2VpZ2h0OwogCXN0cnVjdCBsaXN0X2hlYWQgZmlsdGVyczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwpAQCAtMTAwNiw2ICYjNDM7MTAxMiw4IEBAIHVuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogdW5zaWduZWQgY2hhciBkYW1vbl9wcm9iZV9oaXRzX212c3VtKGludCBwcm9iZV9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCk7CiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKIAkJdW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTsKZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuYwppbmRleCAxMTQ3M2FhMWY3MGY0MS4uODA2YTY3ZDAyYTZlOTAgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTE2Niw2ICYjNDM7MTY2LDcgQEAgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZCkKIAlwID0ga21hbGxvY19vYmooKnApOwogCWlmICghcCkKIAkJcmV0dXJuIE5VTEw7CiYjNDM7CXAtJmd0O3dlaWdodCA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtwLSZndDtmaWx0ZXJzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3AtJmd0O2xpc3QpOwogCXJldHVybiBwOwpAQCAtMjA4LDYgJiM0MzsyMDksMTcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJcmV0dXJuIE5VTEw7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwOwomIzQzOwomIzQzOwlkYW1vbl9mb3JfZWFjaF9wcm9iZShwLCBjKSB7CiYjNDM7CQlpZiAocC0mZ3Q7d2VpZ2h0KQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwl9CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogZGFtb25fbXZzdW0oKSAtIFJldHVybnMgcHNldWRvIG1vdmluZyBzdW0gdmFsdWUgZm9yIGEgdGltZSB3aW5kb3cuCiAgKiBAY3VycmVudF9ucjoJCVRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuCkBAIC0zOTIsNiAmIzQzOzQwNCwzMCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCXJldHVybiBsaXN0X2lzX2xhc3QoJmFtcDtyLSZndDtsaXN0LCAmYW1wO3QtJmd0O3JlZ2lvbnNfbGlzdCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uCiYjNDM7ICogQHI6CQlyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuCiYjNDM7ICogQGxhc3Q6CWlmIHRoZSByZXF1ZXN0IGlzIGZvciBsYXN0LXdpbmRvdyBhZ2dyZWdhdGVkIHByb2JlIGhpdHMuCiYjNDM7ICogQGN0eDoJY29udGV4dCBvZiAmYW1wO3IuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSB3ZWlnaHRlZCBzdW0gb2YgcHJvYmUgaGl0cyBvZiB0aGUgcmVnaW9uLgomIzQzOyAqLwomIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LAomIzQzOwkJc3RydWN0IGRhbW9uX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTsKJiM0MzsJdW5zaWduZWQgaW50IHN1bSA9IDA7CiYjNDM7CWludCBpID0gMDsKJiM0MzsKJiM0MzsJZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkgewomIzQzOwkJaWYgKGxhc3QpCiYjNDM7CQkJc3VtICYjNDM7PSByLSZndDtsYXN0X3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtJmd0O3dlaWdodDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlzdW0gJiM0Mzs9IHItJmd0O3Byb2JlX2hpdHNbaSYjNDM7JiM0MztdICogcHJvYmUtJmd0O3dlaWdodDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gc3VtOwomIzQzO30KJiM0MzsKIC8qCiAgKiBDaGVjayB3aGV0aGVyIGEgcmVnaW9uIGlzIGludGVyc2VjdGluZyBhbiBhZGRyZXNzIHJhbmdlCiAgKgpAQCAtMTMwMiw2ICYjNDM7MTMzOCwzNCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpCiAJCWRhbW9zX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoJmFtcDtzLSZndDtvcHNfZmlsdGVycyk7CiB9CiAKJiM0MztzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7CiYjNDM7CXVuc2lnbmVkIGNoYXIgbWF4X3Byb2JlX2hpdHM7CiYjNDM7CXN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7CiYjNDM7CXVuc2lnbmVkIGludCB3c3VtLCB3c3VtX3RvX2FkZDsKJiM0MzsKJiM0MzsJaWYgKCFkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpKQomIzQzOwkJcmV0dXJuIHRydWU7CiYjNDM7CiYjNDM7CXNhbXBsZV9pbnRlcnZhbCA9IGN0eC0mZ3Q7YXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxOwomIzQzOwlpZiAoY3R4LSZndDthdHRycy5hZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsICZndDsgVThfTUFYKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkvKiBpbnZhbGlkIGlmIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIGNhbiBvdmVyZmxvdyAqLwomIzQzOwltYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoJmFtcDtjdHgtJmd0O2F0dHJzKTsKJiM0MzsJd3N1bSA9IDA7CiYjNDM7CWRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHsKJiM0MzsJCWlmIChwcm9iZS0mZ3Q7d2VpZ2h0ICZndDsgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cykKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl3c3VtX3RvX2FkZCA9IHByb2JlLSZndDt3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0czsKJiM0MzsJCWlmIChVSU5UX01BWCAtIHdzdW0gJmx0OyB3c3VtX3RvX2FkZCkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CQl3c3VtICYjNDM7PSB3c3VtX3RvX2FkZDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuCiAgKiBAZHN0OglEZXN0aW5hdGlvbiBzdHJ1Y3R1cmUgdG8gdXBkYXRlLgpAQCAtMTY1OCw2ICYjNDM7MTcyMiw3IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYykKIAlkYW1vbl9mb3JfZWFjaF9wcm9iZV9zYWZlKGRzdF9wcm9iZSwgbmV4dCwgZHN0KSB7CiAJCXNyY19wcm9iZSA9IGRhbW9uX250aF9wcm9iZShpJiM0MzsmIzQzOywgc3JjKTsKIAkJaWYgKHNyY19wcm9iZSkgewomIzQzOwkJCWRzdF9wcm9iZS0mZ3Q7d2VpZ2h0ID0gc3JjX3Byb2JlLSZndDt3ZWlnaHQ7CiAJCQllcnIgPSBkYW1vbl9jb21taXRfZmlsdGVycyhkc3RfcHJvYmUsIHNyY19wcm9iZSk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CkBAIC0xNjc0LDYgJiM0MzsxNzM5LDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKQogCQlpZiAoIW5ld19wcm9iZSkKIAkJCXJldHVybiAtRU5PTUVNOwogCQlkYW1vbl9hZGRfcHJvYmUoZHN0LCBuZXdfcHJvYmUpOwomIzQzOwkJbmV3X3Byb2JlLSZndDt3ZWlnaHQgPSBzcmNfcHJvYmUtJmd0O3dlaWdodDsKIAkJZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMobmV3X3Byb2JlLCBzcmNfcHJvYmUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTE3MDQsNiAmIzQzOzE3NzAsOSBAQCBzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYykKIAkJfQogCX0KIAomIzQzOwlpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiAJZXJyID0gZGFtb25fY29tbWl0X3NjaGVtZXMoZHN0LCBzcmMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0zMjIxLDYgJiM0MzszMjkwLDE2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJZGFtb25fZGVzdHJveV9yZWdpb24ociwgdCk7CiB9CiAKJiM0MztzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCwKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cykKJiM0Mzt7CiYjNDM7CWlmICh1c2VfcHJvYmVfaGl0cykKJiM0MzsJCXJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTsKJiM0MzsJaWYgKGxhc3QpCiYjNDM7CQlyZXR1cm4gci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlczsKJiM0MzsJcmV0dXJuIHItJmd0O25yX2FjY2Vzc2VzOwomIzQzO30KJiM0MzsKIC8qCiAgKiBNZXJnZSBhZGphY2VudCByZWdpb25zIGhhdmluZyBzaW1pbGFyIGFjY2VzcyBmcmVxdWVuY2llcwogICoKQEAgLTMyMjksMjQgJiM0MzszMzA4LDM4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAgKiBzel9saW1pdAlzaXplIHVwcGVyIGxpbWl0IG9mIGVhY2ggcmVnaW9uCiAgKi8KIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgc3pfbGltaXQpCiYjNDM7CQl1bnNpZ25lZCBsb25nIHN6X2xpbWl0LCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiB7CiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDsKJiM0MzsJYm9vbCB1c2VfcHJvYmVfaGl0cyA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7CiAKIAlkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7Ci0JCWlmIChhYnMoci0mZ3Q7bnJfYWNjZXNzZXMgLSByLSZndDtsYXN0X25yX2FjY2Vzc2VzKSAmZ3Q7IHRocmVzKQomIzQzOwkJdW5zaWduZWQgaW50IHNjb3JlLCBsYXN0X3Njb3JlLCBkaWZmOwomIzQzOwomIzQzOwkJc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7CiYjNDM7CQlsYXN0X3Njb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgdHJ1ZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7CiYjNDM7CiYjNDM7CQlpZiAoYWJzX2RpZmYoc2NvcmUsIGxhc3Rfc2NvcmUpICZndDsgdGhyZXMpCiAJCQlyLSZndDthZ2UgPSAwOwotCQllbHNlIGlmICgoci0mZ3Q7bnJfYWNjZXNzZXMgPT0gMCkgIT0gKHItJmd0O2xhc3RfbnJfYWNjZXNzZXMgPT0gMCkpCiYjNDM7CQllbHNlIGlmICgoc2NvcmUgPT0gMCkgIT0gKGxhc3Rfc2NvcmUgPT0gMCkpCiAJCQlyLSZndDthZ2UgPSAwOwogCQllbHNlCiAJCQlyLSZndDthZ2UmIzQzOyYjNDM7OwogCi0JCWlmIChwcmV2ICZhbXA7JmFtcDsgcHJldi0mZ3Q7YXIuZW5kID09IHItJmd0O2FyLnN0YXJ0ICZhbXA7JmFtcDsKLQkJICAgIGFicyhwcmV2LSZndDtucl9hY2Nlc3NlcyAtIHItJmd0O25yX2FjY2Vzc2VzKSAmbHQ7PSB0aHJlcyAmYW1wOyZhbXA7Ci0JCSAgICBkYW1vbl9zel9yZWdpb24ocHJldikgJiM0MzsgZGFtb25fc3pfcmVnaW9uKHIpICZsdDs9IHN6X2xpbWl0KQotCQkJZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7Ci0JCWVsc2UKLQkJCXByZXYgPSByOwomIzQzOwkJaWYgKCFwcmV2KQomIzQzOwkJCWdvdG8gc2V0X3ByZXZfY29udGludWU7CiYjNDM7CQlpZiAocHJldi0mZ3Q7YXIuZW5kICE9IHItJmd0O2FyLnN0YXJ0KQomIzQzOwkJCWdvdG8gc2V0X3ByZXZfY29udGludWU7CiYjNDM7CQlkaWZmID0gYWJzX2RpZmYoc2NvcmUsIGRhbW9uX21lcmdlX3Njb3JlKHByZXYsIGZhbHNlLCBjdHgsCiYjNDM7CQkJCQl1c2VfcHJvYmVfaGl0cykpOwomIzQzOwkJaWYgKGRpZmYgJmd0OyB0aHJlcykKJiM0MzsJCQlnb3RvIHNldF9wcmV2X2NvbnRpbnVlOwomIzQzOwkJaWYgKGRhbW9uX3N6X3JlZ2lvbihwcmV2KSAmIzQzOyBkYW1vbl9zel9yZWdpb24ocikgJmd0OyBzel9saW1pdCkKJiM0MzsJCQlnb3RvIHNldF9wcmV2X2NvbnRpbnVlOwomIzQzOwkJZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7CiYjNDM7CQljb250aW51ZTsKJiM0MztzZXRfcHJldl9jb250aW51ZToKJiM0MzsJCXByZXYgPSByOwogCX0KIH0KIApAQCAtMzI3OSw3ICYjNDM7MzM3Miw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLAogCWRvIHsKIAkJbnJfcmVnaW9ucyA9IDA7CiAJCWRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7Ci0JCQlkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIHRocmVzaG9sZCwgc3pfbGltaXQpOwomIzQzOwkJCWRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCwgYyk7CiAJCQlucl9yZWdpb25zICYjNDM7PSBkYW1vbl9ucl9yZWdpb25zKHQpOwogCQl9CiAJCXRocmVzaG9sZCA9IG1heCgxLCB0aHJlc2hvbGQgKiAyKTsKQEAgLTM2NDMsNyAmIzQzOzM3MzYsNiBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIHN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKQogewogCXN0cnVjdCBkYW1vbl9jdHggKmN0eCA9IGRhdGE7Ci0JdW5zaWduZWQgaW50IG1heF9ucl9hY2Nlc3NlcyA9IDA7CiAJdW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7CiAKIAlwcl9kZWJ1ZygmIzM0O2tkYW1vbmQgKCVkKSBzdGFydHNcbiYjMzQ7LCBjdXJyZW50LSZndDtwaWQpOwpAQCAtMzY3NiwyNSAmIzQzOzM3NjgsMzggQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpCiAJCXVuc2lnbmVkIGxvbmcgbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSBjdHgtJmd0O25leHRfYWdncmVnYXRpb25fc2lzOwogCQl1bnNpZ25lZCBsb25nIG5leHRfb3BzX3VwZGF0ZV9zaXMgPSBjdHgtJmd0O25leHRfb3BzX3VwZGF0ZV9zaXM7CiAJCXVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LSZndDthdHRycy5zYW1wbGVfaW50ZXJ2YWw7CiYjNDM7CQlib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07CiYjNDM7CQlib29sIGdldF9tYXhfd3N1bTsKIAogCQlpZiAoa2RhbW9uZF93YWl0X2FjdGl2YXRpb24oY3R4KSkKIAkJCWJyZWFrOwogCi0JCWlmIChjdHgtJmd0O29wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpCiYjNDM7CQlpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCAmYW1wOyZhbXA7IGN0eC0mZ3Q7b3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcykKIAkJCWN0eC0mZ3Q7b3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcyhjdHgpOwogCiAJCWtkYW1vbmRfdXNsZWVwKHNhbXBsZV9pbnRlcnZhbCk7CiAJCWN0eC0mZ3Q7cGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMmIzQzOyYjNDM7OwogCi0JCWlmIChjdHgtJmd0O29wcy5jaGVja19hY2Nlc3NlcykKLQkJCW1heF9ucl9hY2Nlc3NlcyA9IGN0eC0mZ3Q7b3BzLmNoZWNrX2FjY2Vzc2VzKGN0eCk7Ci0JCWlmIChjdHgtJmd0O29wcy5hcHBseV9wcm9iZXMpCi0JCQljdHgtJmd0O29wcy5hcHBseV9wcm9iZXMoY3R4KTsKJiM0MzsJCWlmICghYWNjZXNzX2NoZWNrX2Rpc2FibGVkICZhbXA7JmFtcDsgY3R4LSZndDtvcHMuY2hlY2tfYWNjZXNzZXMpCiYjNDM7CQkJbWF4X21lcmdlX3Njb3JlID0gY3R4LSZndDtvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTsKJiM0MzsJCWlmIChjdHgtJmd0O29wcy5hcHBseV9wcm9iZXMpIHsKJiM0MzsJCQlpZiAodGltZV9hZnRlcl9lcShjdHgtJmd0O3Bhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLAomIzQzOwkJCQkJCW5leHRfYWdncmVnYXRpb25fc2lzKSAmYW1wOyZhbXA7CiYjNDM7CQkJCQlhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpCiYjNDM7CQkJCWdldF9tYXhfd3N1bSA9IHRydWU7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlnZXRfbWF4X3dzdW0gPSBmYWxzZTsKJiM0MzsJCQltYXhfd3N1bSA9IGN0eC0mZ3Q7b3BzLmFwcGx5X3Byb2JlcyhjdHgsCiYjNDM7CQkJCQlhY2Nlc3NfY2hlY2tfZGlzYWJsZWQsIGdldF9tYXhfd3N1bSk7CiYjNDM7CQkJaWYgKGdldF9tYXhfd3N1bSkKJiM0MzsJCQkJbWF4X21lcmdlX3Njb3JlID0gbWF4X3dzdW07CiYjNDM7CQl9CiAKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LSZndDtwYXNzZWRfc2FtcGxlX2ludGVydmFscywKIAkJCQkJbmV4dF9hZ2dyZWdhdGlvbl9zaXMpKSB7CiAJCQlrZGFtb25kX21lcmdlX3JlZ2lvbnMoY3R4LAotCQkJCQltYXhfbnJfYWNjZXNzZXMgLyAxMCwKJiM0MzsJCQkJCW1heF9tZXJnZV9zY29yZSAvIDEwLAogCQkJCQlzel9saW1pdCk7CiAJCQkvKiBvbmxpbmUgdXBkYXRlcyBtaWdodCBiZSBtYWRlICovCiAJCQlzel9saW1pdCA9IGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKGN0eCk7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuYwppbmRleCA2MTcyNDY0OTgxNzMwNC4uYjg1Zjg4YTdhMzhmNGQgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3BhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuYwpAQCAtMTY2LDExICYjNDM7MTY2LDEzIEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCXJldHVybiBwYXNzOwogfQogCi1zdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQomIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKJiM0MzsJCWJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKQogewogCXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKIAlzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7CiYjNDM7CXVuc2lnbmVkIGludCBtYXhfd3N1bSA9IDA7CiAKIAlkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7CiAJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7CkBAIC0xNzgsNiAmIzQzOzE4MCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiAJCQlwaHlzX2FkZHJfdCBwYTsKIAkJCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKJiM0MzsJCQlpZiAoc2V0X3NhbXBsZXMpCiYjNDM7CQkJCXItJmd0O3NhbXBsaW5nX2FkZHIgPSBkYW1vbl9yYW5kKGN0eCwgci0mZ3Q7YXIuc3RhcnQsCiYjNDM7CQkJCQkJci0mZ3Q7YXIuZW5kKTsKIAkJCXBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItJmd0O3NhbXBsaW5nX2FkZHIsCiAJCQkJCWN0eC0mZ3Q7YWRkcl91bml0KTsKIAkJCWZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhKSk7CkBAIC0xODgsOCAmIzQzOzE5MywxMiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCQkJfQogCQkJaWYgKGZvbGlvKQogCQkJCWZvbGlvX3B1dChmb2xpbyk7CiYjNDM7CQkJaWYgKHJldHVybl9tYXhfd3N1bSkKJiM0MzsJCQkJbWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLAomIzQzOwkJCQkJCQljdHgpLCBtYXhfd3N1bSk7CiAJCX0KIAl9CiYjNDM7CXJldHVybiBtYXhfd3N1bTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jCmluZGV4IDZkN2UzNmM5ZTUwOWQyLi5iNWZlMDM2Zjc4MDE1MiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vc3lzZnMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy5jCkBAIC0xMDY1LDYgJiM0MzsxMDY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHsKIAogc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlIHsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwomIzQzOwl1bnNpZ25lZCBpbnQgd2VpZ2h0OwogCXN0cnVjdCBkYW1vbl9zeXNmc19maWx0ZXJzICpmaWx0ZXJzOwogfTsKIApAQCAtMTEwMCwxMiAmIzQzOzExMDEsMzUgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlKQogCX0KIH0KIAomIzQzO3N0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCiYjNDM7CQljaGFyICpidWYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlLCBrb2JqKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCAmIzM0OyV1XG4mIzM0OywgcHJvYmUtJmd0O3dlaWdodCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IHdlaWdodF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKJiM0MzsJCXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlID0gY29udGFpbmVyX29mKGtvYmosCiYjNDM7CQkJc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlLCBrb2JqKTsKJiM0MzsJaW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCAmYW1wO3Byb2JlLSZndDt3ZWlnaHQpOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKIAlrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlLCBrb2JqKSk7CiB9CiAKJiM0MztzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX3Byb2JlX3dlaWdodF9hdHRyID0KJiM0MzsJCV9fQVRUUl9SV19NT0RFKHdlaWdodCwgMDYwMCk7CiYjNDM7CiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfcHJvYmVfYXR0cnNbXSA9IHsKJiM0MzsJJmFtcDtkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ci5hdHRyLAogCU5VTEwsCiB9OwogQVRUUklCVVRFX0dST1VQUyhkYW1vbl9zeXNmc19wcm9iZSk7CkBAIC0xOTY1LDYgJiM0MzsxOTg5LDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwKIAkJCXJldHVybiAtRU5PTUVNOwogCQlkYW1vbl9hZGRfcHJvYmUoY3R4LCBwKTsKIAkJc3lzX3Byb2JlID0gc3lzX3Byb2Jlcy0mZ3Q7cHJvYmVzX2FycltpXTsKJiM0MzsJCXAtJmd0O3dlaWdodCA9IHN5c19wcm9iZS0mZ3Q7d2VpZ2h0OwogCQllcnIgPSBkYW1vbl9zeXNmc19zZXRfcHJvYmUocCwgc3lzX3Byb2JlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKaW5kZXggZDk3MjgwMjcwYzI3YjguLjZhZDczNTU5ZGQ4ZWFiIDEwMDY0NAotLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCkBAIC0yMjYsNiAmIzQzOzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeCkKIAogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdCkKIHsKJiM0MzsJc3RydWN0IGRhbW9uX2N0eCAqY3R4OwogCXN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7CiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqcjsKIAl1bnNpZ25lZCBsb25nIHNhW10gPSB7MCwgMTAwLCAxMTQsIDEyMiwgMTMwLCAxNTYsIDE3MCwgMTg0LCAyMzB9OwpAQCAtMjM2LDIwICYjNDM7MjM3LDI3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJdW5zaWduZWQgbG9uZyBlYWRkcnNbXSA9IHsxMTIsIDEzMCwgMTU2LCAxNzAsIDIzMCwgMTAxNzB9OwogCWludCBpOwogCiYjNDM7CWN0eCA9IGRhbW9uX25ld19jdHgoKTsKJiM0MzsJaWYgKCFjdHgpCiYjNDM7CQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7Y3R4IGFsbG9jIGZhaWwmIzM0Oyk7CiYjNDM7CiAJdCA9IGRhbW9uX25ld190YXJnZXQoKTsKLQlpZiAoIXQpCiYjNDM7CWlmICghdCkgewomIzQzOwkJZGFtb25fZGVzdHJveV9jdHgoY3R4KTsKIAkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O3RhcmdldCBhbGxvYyBmYWlsJiMzNDspOwomIzQzOwl9CiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUoc2EpOyBpJiM0MzsmIzQzOykgewogCQlyID0gZGFtb25fbmV3X3JlZ2lvbihzYVtpXSwgZWFbaV0pOwogCQlpZiAoIXIpIHsKIAkJCWRhbW9uX2ZyZWVfdGFyZ2V0KHQpOwomIzQzOwkJCWRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7CiAJCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7cmVnaW9uIGFsbG9jIGZhaWwmIzM0Oyk7CiAJCX0KIAkJci0mZ3Q7bnJfYWNjZXNzZXMgPSBucnNbaV07CiAJCWRhbW9uX2FkZF9yZWdpb24ociwgdCk7CiAJfQogCi0JZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCA5LCA5OTk5KTsKJiM0MzsJZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCA5LCA5OTk5LCBjdHgpOwogCS8qIDAtMTEyLCAxMTQtMTMwLCAxMzAtMTU2LCAxNTYtMTcwLCAxNzAtMjMwLCAyMzAtMTAxNzAgKi8KIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbnJfcmVnaW9ucyh0KSwgNnUpOwogCWZvciAoaSA9IDA7IGkgJmx0OyA2OyBpJiM0MzsmIzQzOykgewpAQCAtMjU4LDYgJiM0MzsyNjYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KQogCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuZW5kLCBlYWRkcnNbaV0pOwogCX0KIAlkYW1vbl9mcmVlX3RhcmdldCh0KTsKJiM0MzsJZGFtb25fZGVzdHJveV9jdHgoY3R4KTsKIH0KIAogc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdCkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTAwOAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI4NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgYSBwYXRjaCBoZXJlIHRoYXQmIzM5O3MgaW50cm9kdWNpbmcgYSBgd2VpZ2h0YCBhdHRyaWJ1dGUgdG8gREFNT04gcHJvYmVzLiBUaGlzIGlzIHByZXR0eSBzaWduaWZpY2FudDsgaXQmIzM5O3MgZW5hYmxpbmcgJiMzNDtEYXRhIEF0dHJpYnV0ZXMtb25seSBNb25pdG9yaW5nLCYjMzQ7IHdoaWNoIGNvdWxkIG9wZW4gdXAgc29tZSBpbnRlcmVzdGluZyBwb3NzaWJpbGl0aWVzLiBJJiMzOTttIHNlZWluZyBpdCB0b3VjaCBxdWl0ZSBhIGZldyBmaWxlczogYERvY3VtZW50YXRpb24vYCwgYGluY2x1ZGUvbGludXgvZGFtb24uaGAsIGNvcmUgREFNT04gZnVuY3Rpb25hbGl0eSBpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYG1tL2RhbW9uL3BhZGRyLmNgLCB0aGUgc3lzZnMgaW50ZXJmYWNlIGluIGBtbS9kYW1vbi9zeXNmcy5jYCwgYW5kIGV2ZW4gYSBLVW5pdCB0ZXN0IGZpbGUsIGBtbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhgLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSwgbm90IGp1c3QgYSBidWcgZml4LgoKU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBhZGRpbmcgYSBuZXcgYHdlaWdodGAgc3lzZnMgZmlsZSwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgIGlzIGJlaW5nIHVwZGF0ZWQgdG8gbGV2ZXJhZ2UgYSBgZGFtb25fbWVyZ2Vfc2NvcmVgLCBhbmQgY3J1Y2lhbGx5LCBpdCB3aWxsIGJlIHVzaW5nIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gIGlmIHRoZSBwcm9iZSB3ZWlnaHRzIGFyZSBhY3RpdmUsIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB3aWxsIGJlIGNoZWNrZWQgYnkgYGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eClgLiBJIHNob3VsZCBsb29rIGludG8gdGhhdCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIGhvdyB3ZWlnaHRzIGFyZSBlbmFibGVkLiBBbHNvLCBga2RhbW9uZF9mbmAgaXMgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIGBtYXhfd3N1bWAgYW5kIHNraXAgdGhlIGFjY2VzcyBjaGVja3Mgd2hlbiBwcm9iZSB3ZWlnaHRzIGFyZSBhY3RpdmUgYW5kIGBhY2Nlc3NfY2hlY2tfZGlzYWJsZWRgLgoKQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCwgSSBzaG91bGQgbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBBbHJpZ2h0LCBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGBtbS9kYW1vbi9LY29uZmlnYCBmb3IgdGhlIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9uczogYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBhbmQgYENPTkZJR19EQU1PTl9QQUREUmAuCgpOb3csIGxldCBtZSBydW4gYSBxdWljayBzZWFyY2ggb24gYENPTkZJR19EQU1PTmAgdGhyb3VnaG91dCB0aGUga2VybmVsIHRyZWUgdG8gZ2V0IGEgc2Vuc2Ugb2YgdGhlIGV4aXN0aW5nIHVzYWdlIGFuZCBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGV4aXN0aW5nIGluZnJhc3RydWN0dXJlIGFuZCBob3cgdGhpcyBuZXcgd2VpZ2h0IGZlYXR1cmUgZml0cyBpbnRvIHRoZSBiaWdnZXIgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIERBTU9OJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDUxMAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvcmUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggREFNT04gY29uZmlndXJhdGlvbnMgaGVyZTogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9QQUREUmAuIE5vdywgSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBhcmUgZHJpdmluZyB0aGUgYWN0aW9uLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBtb3N0IGNyaXRpY2FsIG9uZXMgc2VlbSB0byBiZTogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYCwgYGtkYW1vbmRfZm5gLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCwgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLCBhbmQgdGhlbiB0aGUgc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucywgYHdlaWdodF9zdG9yZWAsIGFuZCBgd2VpZ2h0X3Nob3dgLiBUaGUgZmlyc3QgZnVuY3Rpb24gbGlzdGVkLCBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgbG9va3MgbGlrZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBvbmUgdG8gc3RhcnQgd2l0aCwgc28gSSYjMzk7bGwgY2hlY2sgaXRzIGxvY2F0aW9uIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgaG93IHRoaXMgaXMgYWxsIHdvcmtpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fcHJvYmVfaGl0c193c3VtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz00MDE9c3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDA3LS8qKlxubW0vZGFtb24vY29yZS5jOjQwODogKiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oKSAtIFJldHVybnMgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gb2YgYSByZWdpb24uXG5tbS9kYW1vbi9jb3JlLmMtNDA5LSAqIEByOlx0XHRyZWdpb24gdG8gZ2V0IHRoZSB3ZWlnaHRlZCBzdW0gb2YuXG4tLVxubW0vZGFtb24vY29yZS5jLTQxNC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0MTU6dW5zaWduZWQgaW50IGRhbW9uX3Byb2JlX2hpdHNfd3N1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG5tbS9kYW1vbi9jb3JlLmMtNDE2LVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jPTMyOTM9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyOTYtXHRpZiAodXNlX3Byb2JlX2hpdHMpXG5tbS9kYW1vbi9jb3JlLmM6MzI5NzpcdFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xubW0vZGFtb24vY29yZS5jLTMyOTgtXHRpZiAobGFzdClcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE2OT1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xOTYtXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbm1tL2RhbW9uL3BhZGRyLmM6MTk3Olx0XHRcdFx0bWF4X3dzdW0gPSBtYXgoZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGZhbHNlLFxubW0vZGFtb24vcGFkZHIuYy0xOTgtXHRcdFx0XHRcdFx0XHRjdHgpLCBtYXhfd3N1bSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIGZpbHRlcmVkIHRocm91Z2ggbXkgZXhwZXJ0IGxlbnM6CgoqKkFuYWx5emluZyBEQU1PTiBQcm9iaW5nIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCBteSBicmFpbiBpcyBmb2N1c2VkLiBNeSBwcmlvcml0aWVzIGluIHRoaXMgREFNT04gY29udGV4dCBhcmUgY2xlYXJseSBsYWlkIG91dC4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlc2UgZnVuY3Rpb25zOiBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgYGRhbW9uX21lcmdlX3Njb3JlYCwgYGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc2AsIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYCwgYHdlaWdodF9zdG9yZWAsIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLCBhbmQgYGtkYW1vbmRfZm5gLiBUaG9zZSBhcmUgdGhlIGNvcmUgY29tcG9uZW50cyB0aGF0IG5lZWQgdGhlIGNsb3Nlc3Qgc2NydXRpbnkuIEl0JiMzOTtzIGEgdmVyeSB0YXJnZXRlZCBsaXN0LCBzbyB0aGUgZ29hbCBpcyBsaWtlbHkgYSBzcGVjaWZpYyBpc3N1ZS4KCk15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIGZlZCBpbnRvIHRoaXMgYXJlIHZhbGlkLCBiZWNhdXNlIGl0IGlzIHRoZSBnYXRla2VlcGVyIG9mIHdoYXQgaXMgdmFsaWQsIGFuZCB0aGVyZWZvcmUgY29ycmVjdCBmdW5jdGlvbmluZyBvZiB0aGUgdW5kZXJseWluZyBzeXN0ZW0uIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIGhvdyB0aGUgcHJvYmVzIGFyZSBiZWluZyBpbml0aWF0ZWQgYW5kIHdoYXQgY2hlY2tzIGFuZCBiYWxhbmNlcyBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIHRoZSBEQU1PTiBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTMzMD1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNDAtXG5tbS9kYW1vbi9jb3JlLmM6MTM0MTpzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTEzNDIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzUwPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVxubW0vZGFtb24vY29yZS5jOjE3NzM6XHRpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKVxubW0vZGFtb24vY29yZS5jLTE3NzQtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTE1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgdXNlciBhbmQgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyB0aGUgV2VpZ2h0IFN0b3JlKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYHdlaWdodF9zdG9yZWAuIEkgbmVlZCB0byBhc3Nlc3MgaXRzIHN0YXRlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGludGVncml0eS4gSXMgaXQgcG9wdWxhdGVkIGNvcnJlY3RseT8gQXJlIHRoZSB3ZWlnaHRzIGluIHRoZSBmb3JtYXQgSSBleHBlY3QsIG9yIGRpZCBzb21ldGhpbmcgdXBzdHJlYW0gbWVzcyB3aXRoIHRoZSBkYXRhPyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHVuZXhwZWN0ZWQgdmFsdWVzIGltbWVkaWF0ZWx5LiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cyBpZiB0aGUgd2VpZ2h0cyBhcmUgY29ycnVwdGVkIG9yIG1pc2NhbGlicmF0ZWQ/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCByYW5nZSBmcm9tIHN1YnRsZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiB0byBvdXRyaWdodCBtb2RlbCBmYWlsdXJlLiBNeSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBkZWJ1Z2dpbmcgc2NlbmFyaW9zLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgd2VpZ2h0X3N0b3JlYCBpc24mIzM5O3Qgc2lsZW50bHkgYnJva2VuIGJlZm9yZSBJIHByb2NlZWQuIFRoaXMgY291bGQgc2F2ZSBtZSBhIGhlYWRhY2hlIGRvd24gdGhlIGxpbmUsIEkga25vdyBmcm9tIGV4cGVyaWVuY2UuIExldCYjMzk7cyBzZWUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2VpZ2h0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDgwPXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDg4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwODk6c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwOTAtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTA0PXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMTEyLVxubW0vZGFtb24vc3lzZnMuYzoxMTEzOnN0YXRpYyBzc2l6ZV90IHdlaWdodF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMTExNC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzOTQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiBEQU1PTiBDb21wb25lbnRzKioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2UgZnVuY3Rpb25zOiBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgYGRhbW9uX21lcmdlX3Njb3JlYCwgYGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc2AsIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLCBhbmQgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLiBBbmQgdGhlIGFzc29jaWF0ZWQgY29uZmlncyBhcmUgYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9QQUREUmAuIFNlZW1zIGxpa2UgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBhIERBTU9OIHNldHVwLgoKTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gIFRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIGZvciBwcm9iZSBjb25maWd1cmF0aW9uLiAgVGhhdCYjMzk7cyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCBzbyB0byBzcGVhay4gIEkmIzM5O2QgYmV0dGVyIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aGF0IG9uZS4gIEl0IHNob3VsZCBiZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AsIHJpZ2h0PyAgTGV0JiMzOTtzIGdvIHRha2UgYSBwZWVrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9zeXNmc19zZXRfcHJvYmVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLmM9MTk2Nz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZShzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlLFxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMTk3Ny1cbm1tL2RhbW9uL3N5c2ZzLmM6MTk3ODpzdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3NldF9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxubW0vZGFtb24vc3lzZnMuYy0xOTc5LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmVzICpzeXNfcHJvYmVzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMTEwLVx0XHRyZXR1cm4gZXJyO1xubW0vZGFtb24vc3lzZnMuYzoyMTExOlx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlcyhjdHgsIHN5c19jdHgtXHUwMDNlYXR0cnMtXHUwMDNlcHJvYmVzKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjExMi1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDMyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhvc2UgZnVuY3Rpb25zIGluIGEgREFNT04gY29udGV4dDoKCioqREFNT04gUHJvYmUgYW5kIFJlZ2lvbiBNYW5hZ2VtZW50IFJldmlldyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyBJJiMzOTttIGdvaW5nIHRvIGFwcHJvYWNoIHRoaXMgREFNT04gYW5hbHlzaXMuIEkgbmVlZCB0byBiZSBzdXJlIHRvIGluY2x1ZGUgdGhlIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYCBmdW5jdGlvbiBpbiBteSBhc3Nlc3NtZW50LiBJdCYjMzk7cyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBwcm9iZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYW5kIGNvbmZpZ3VyZWQgYXQgdGhlIHVzZXIgbGV2ZWwsIHdoaWNoIGRpcmVjdGx5IGltcGFjdHMgREFNT04mIzM5O3MgYmVoYXZpb3IuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGF0IGludGVyYWN0aW9uLgoKVGhlbiwgbW92aW5nIG9uLCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAgaXMgYSBrZXkgYXJlYSB0byByZS1leGFtaW5lLiBSZWdpb24gbWVyZ2luZyBpcyBhdCB0aGUgaGVhcnQgb2YgREFNT04mIzM5O3MgZWZmaWNpZW5jeSwgYW5kIHRoaXMgZnVuY3Rpb24gZ292ZXJucyBob3cgcmVnaW9ucyBhcmUgY29tYmluZWQgYmFzZWQgb24gYWNjZXNzIHBhdHRlcm5zIG9yIG90aGVyIGNyaXRlcmlhLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIGFuZCBhbGdvcml0aG1zIGVtcGxveWVkIGhlcmUuIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIG1lcmdlIGxvZ2ljIGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gZHluYW1pY2FsbHkgYWRhcHRzIHRvIGNoYW5naW5nIG1lbW9yeSBhY2Nlc3MgY2hhcmFjdGVyaXN0aWNzLCBhbmQgc28sIGNyaXRpY2FsIHRvIGFueSBwZXJmb3JtYW5jZSBhbmQgb3ZlcmhlYWQgZXZhbHVhdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgREFNT04gZGVjaWRlcyB0byBtZXJnZSBvciBub3QgdG8gbWVyZ2UgdGhlc2UgcmVnaW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fbWVyZ2VfcmVnaW9uc19vZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI5Mz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMwOS0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMzEwOnN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxubW0vZGFtb24vY29yZS5jLTMzMTEtXHRcdHVuc2lnbmVkIGxvbmcgc3pfbGltaXQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM2Mz1zdGF0aWMgdm9pZCBrZGFtb25kX21lcmdlX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqYywgdW5zaWduZWQgaW50IHRocmVzaG9sZCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM3NC1cdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbm1tL2RhbW9uL2NvcmUuYzozMzc1Olx0XHRcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCwgYyk7XG5tbS9kYW1vbi9jb3JlLmMtMzM3Ni1cdFx0XHRucl9yZWdpb25zICYjNDM7PSBkYW1vbl9ucl9yZWdpb25zKHQpO1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yMjc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMjU5LVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjI2MDpcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgOSwgOTk5OSwgY3R4KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNjEtXHQvKiAwLTExMiwgMTE0LTEzMCwgMTMwLTE1NiwgMTU2LTE3MCwgMTcwLTIzMCwgMjMwLTEwMTcwICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNzc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKlByb2Nlc3NpbmcgYSBDb2RlIEludGVncmF0aW9uKioKClJpZ2h0LCBJIG5lZWQgdG8gYnJpbmcgaW4gdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSwgYW5kIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byB3b3JrIHdpdGggYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgLiBUaGF0IHNlZW1zIGxpa2UgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQg4oCTIGl0IGxpa2VseSBoYW5kbGVzIGhvdyB3ZSBjb21iaW5lIHRoZXNlIHNwZWNpZmljIHJlZ2lvbnMgaW4gdGhlIGRhdGFzZXQuCgpCZWZvcmUgSSBjb21taXQgdG8gdXNpbmcgdGhhdCB0aG91Z2gsIGxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGRlZmluaXRpb24gb2YgYGtkYW1vbmRfZm5gLCBhcyBpdCBzb3VuZHMgbGlrZSBhbiBpbXBvcnRhbnQgcGllY2Ugb2YgdGhlIGZyYW1ld29yayBhbmQgY291bGQgdmVyeSB3ZWxsIGFmZmVjdCBvciBiZSBhZmZlY3RlZCBieSBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAuIFVuZGVyc3RhbmRpbmcgdGhlIGV4YWN0IHJvbGUgb2YgYGtkYW1vbmRfZm5gIGlzIGNydWNpYWwgYmVmb3JlIHByb2NlZWRpbmcuIE5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IGludHJvZHVjZSBhbnkgY29uZmxpY3RzIG9yIGluZWZmaWNpZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDEyPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzQtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXG5tbS9kYW1vbi9jb3JlLmM6MTAzNTogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwMzYtICpcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTAzOS0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVx1MDAzZSBkYW1vbl9jb21taXQoKSBmb3Jcbm1tL2RhbW9uL2NvcmUuYzoxMDQwOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxubW0vZGFtb24vY29yZS5jLTEwNDEtICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTA0Nz1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA3My1cdC8qXG5tbS9kYW1vbi9jb3JlLmM6MTA3NDpcdCAqIG5leHRfaW50ZXJ2YWxzX3R1bmVfc2lzIHdpbGwgYmUgdXBkYXRlZCBpbnNpZGUga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwNzUtXHQgKi9cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTE5MjEtXG5tbS9kYW1vbi9jb3JlLmM6MTkyMjpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XG5tbS9kYW1vbi9jb3JlLmMtMTkyMy1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTkzMj1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTM5LVx0XHRyZWluaXRfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYzoxOTQwOlx0XHRjdHgtXHUwMDNla2RhbW9uZCA9IGt0aHJlYWRfcnVuKGtkYW1vbmRfZm4sIGN0eCwgXCYjMzQ7a2RhbW9uZC4lZFwmIzM0Oyxcbm1tL2RhbW9uL2NvcmUuYy0xOTQxLVx0XHRcdFx0bnJfcnVubmluZ19jdHhzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjAzNj12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDQwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MjA0MTpcdFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cbm1tL2RhbW9uL2NvcmUuYy0yMDQyLVx0XHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XG4tLVxubW0vZGFtb24vY29yZS5jPTM3MTQ9c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3MzUtICovXG5tbS9kYW1vbi9jb3JlLmM6MzczNjpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbm1tL2RhbW9uL2NvcmUuYy0zNzM3LXtcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTQ5NT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTUyMS0gKiBUaGlzIHRlc3RzIHRoZSBpbnZhcmlhbnQgaW50cm9kdWNlZCBieTpcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxNTIyOiAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFwmIzM0O21tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVwmIzM0Oylcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNTIzLSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDkzNgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyBhbmQgSW50ZWdyYXRpbmcgYGtkYW1vbmRfZm5gIGFuZCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byBpdC4gRmlyc3QsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBmdWxseSB1cCB0byBzcGVlZCBvbiB0aGUgY3VycmVudCBzdGF0ZSBvZiBhZmZhaXJzLiBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gaW5jbHVkZSBga2RhbW9uZF9mbmAgaW4gdGhlIGVxdWF0aW9uLiBUaGF0JiMzOTtzIGEgY3J1Y2lhbCBjb21wb25lbnQsIHNvIEkgZG9uJiMzOTt0IHdhbnQgdG8gb3Zlcmxvb2sgdGhhdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGludGVyYWN0aW9uIHdpdGhpbiB0aGlzIHN5c3RlbS4KCkFuZCB0aGVuLCBJIHNob3VsZCBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCB0aGUgZnVuY3Rpb24sIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLiBJIHJlbWVtYmVyIHRoYXQgb25lLi4uIGl0JiMzOTtzIHBpdm90YWwsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBpbnB1dHMsIG91dHB1dHMsIGFuZCBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGNsZWFyIG9uIGhvdyB0aG9zZSB0d28gZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHksIGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vbl9wYV9hcHBseV9wcm9iZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vcGFkZHIuYz0xNTM9c3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX3Bhc3MocGh5c19hZGRyX3QgcGEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vZGFtb24vcGFkZHIuYy0xNjgtXG5tbS9kYW1vbi9wYWRkci5jOjE2OTpzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG5tbS9kYW1vbi9wYWRkci5jLTE3MC1cdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4tLVxubW0vZGFtb24vcGFkZHIuYz00NDc9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTQ1NC1cdFx0LmNoZWNrX2FjY2Vzc2VzID0gZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMsXG5tbS9kYW1vbi9wYWRkci5jOjQ1NTpcdFx0LmFwcGx5X3Byb2JlcyA9IGRhbW9uX3BhX2FwcGx5X3Byb2Jlcyxcbm1tL2RhbW9uL3BhZGRyLmMtNDU2LVx0XHQudGFyZ2V0X3ZhbGlkID0gTlVMTCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MzkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSByZXF1ZXN0ZWQsIHNwZWFraW5nIGFzIGFuIGV4cGVydDoKCioqQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIG9mIENvcmUgRnVuY3Rpb25hbGl0eSoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBoYXMgbWUgZm9jdXNpbmcgb24gYSBjcnVjaWFsIGludGVncmF0aW9uIHBvaW50OiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBmdW5jdGlvbiBpcyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQmIzM5O3MgdGhlIGx5bmNocGluIGZvciBbaW5zZXJ0IGV4cGVydC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIOKAkyBlLmcuLCBwcm9iZSBhcHBsaWNhdGlvbiwgcG90ZW50aWFsbHkgcGVyZm9ybWFuY2UgZGF0YSBpbmplY3Rpb24sIG9yIHNvbWUgb3RoZXIga2V5IHBhcnQgb2YgdGhlIHN5c3RlbV0uIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpdHMgYmVoYXZpb3VyIGlzIGFsaWduZWQgd2l0aCBteSBkZXNpZ24gc3BlY2lmaWNhdGlvbnMuCgpCZXlvbmQgdGhhdCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0d28gbGlrZWx5IHJlbGF0ZWQgYXNwZWN0cyB0aGF0IEkmIzM5O2xsIG5lZWQgdG8gY2hlY2ssIGFuZCB0aG9zZSBhcmUgYHdlaWdodF9zdG9yZWAgYW5kIGB3ZWlnaHRfc2hvd2AuIEkmIzM5O20gYXNzdW1pbmcsIGJhc2VkIG9uIHRoZSBuYW1pbmcsIHRoYXQgdGhlc2UgcmVsYXRlIHRvIGhvdyBzb21lIGZvcm0gb2Ygd2VpZ2h0aW5nIG1lY2hhbmlzbSBpcyBtYW5hZ2VkLiBHaXZlbiBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCwgSSBleHBlY3QgdGhlc2UgbGlrZWx5IHJlbGF0ZSB0byBob3cgcHJvYmVzIGFyZSB3ZWlnaHRlZCBhbmQgaG93IHRob3NlIHdlaWdodHMgYXJlIHJldHJpZXZlZCBvciBkaXNwbGF5ZWQuIEkmIzM5O2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugd2VpZ2h0cyBhcmUgY29ycmVjdGx5IHN0b3JlZCwgcmV0cmlldmVkLCBhbmQgdGhhdCBhbnkgdmlzdWFsIHJlcHJlc2VudGF0aW9uIChpZiB0aGVyZSBpcyBvbmUpIGlzIGFjY3VyYXRlLiBUaGVzZSBhcmUga2V5IGFyZWFzIHRvIG1vbml0b3IgZm9yIHBlcmZvcm1hbmNlIGFuZCBhY2N1cmFjeS4gVGhleSBtaWdodCBiZSBhIHNvdXJjZSBvZiBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgb3IgZXJyb3JzLCBzbyBhIHRob3JvdWdoIGNoZWNrIGlzIG5lY2Vzc2FyeS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2VpZ2h0X3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDgwPXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KFxuLS1cbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDg4LVxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwODk6c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwOTAtXHRcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4tLVxubW0vZGFtb24vc3lzZnMuYz0xMTA0PXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0xMTEyLVxubW0vZGFtb24vc3lzZnMuYzoxMTEzOnN0YXRpYyBzc2l6ZV90IHdlaWdodF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMTExNC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwNDMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipSZXZpZXdpbmcgREFNT04mIzM5O3MgQ29yZSBDb21wb25lbnRzKioKCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB3aGF0IEkmIzM5O3ZlIGdvdCBpbiBteSBoZWFkIHJpZ2h0IG5vdywgZm9jdXNpbmcgb24gdGhlIGNvcmUgREFNT04gY29tcG9uZW50cy4gSSBuZWVkIHRvIGtlZXAgYHdlaWdodF9zdG9yZWAgaW4gbWluZCwgb2J2aW91c2x5IOKAkyBpdCYjMzk7cyBjcnVjaWFsLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgZnVuY3Rpb25zLiBGaXJzdCwgSSBoYXZlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb25fbWVyZ2Vfc2NvcmVgLCBhbmQgYGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc2AuIFRob3NlIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBwcm9iaW5nIGFuZCBzY29yaW5nIHBhcnQgb2YgdGhlIERBTU9OIGltcGxlbWVudGF0aW9uLCBoYW5kbGluZyB2YWxpZGF0aW9uIGFuZCBzdW1tYXJpemF0aW9uLiBUaGVuIHRoZXJlJiMzOTtzIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYCwgd2hpY2ggaXMgdGhlIGludGVyZmFjZSB0aHJvdWdoIHdoaWNoIHVzZXJzIGNhbiB0d2VhayB0aGUgcHJvYmluZyBwYXJhbWV0ZXJzLiBOZXh0LCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAsIGFuZCBga2RhbW9uZF9mbmAsIHNvIHRob3NlIGhhbmRsZSByZWdpb24gbWFuYWdlbWVudCBhbmQgYmFja2dyb3VuZCBkYWVtb24gb3BlcmF0aW9ucy4gYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AgaXMgaW1wb3J0YW50LiBBbmQgbGFzdGx5LCBsZXQmIzM5O3MgaW5jbHVkZSBgd2VpZ2h0X3N0b3JlYC4KCk5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFdlIGhhdmUgdGhlIHVzdWFsIHN1c3BlY3RzOiBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgYERBTU9OX1BBRERSYC4gV2FpdCwgbm93IHRoYXQgSSBjb25zaWRlciB0aGF0LCBkb2VzIGBEQU1PTl9WQUREUmAgaGF2ZSB0aGUgYGFwcGx5X3Byb2Jlc2AgY29tcG9uZW50IGluIHRoZSBpbXBsZW1lbnRhdGlvbj8gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHBhcnQgYW5kIG1ha2Ugc3VyZSBpdCYjMzk7cyBhbGwgY29uc2lzdGVudCBpbiB0aGUgY29kZS4gVGhhdOKAmXMgcHJvYmFibHkgdGhlIG5leHQgdGhpbmcgSSB3aWxsIGxvb2sgYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FwcGx5X3Byb2JlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzczNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc4NS1cdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgPSBjdHgtXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmM6Mzc4NjpcdFx0aWYgKGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XG5tbS9kYW1vbi9jb3JlLmMtMzc4Ny1cdFx0XHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM3OTItXHRcdFx0XHRnZXRfbWF4X3dzdW0gPSBmYWxzZTtcbm1tL2RhbW9uL2NvcmUuYzozNzkzOlx0XHRcdG1heF93c3VtID0gY3R4LVx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxubW0vZGFtb24vY29yZS5jLTM3OTQtXHRcdFx0XHRcdGFjY2Vzc19jaGVja19kaXNhYmxlZCwgZ2V0X21heF93c3VtKTtcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTE1Mz1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9kYW1vbi9wYWRkci5jLTE2OC1cbm1tL2RhbW9uL3BhZGRyLmM6MTY5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbm1tL2RhbW9uL3BhZGRyLmMtMTcwLVx0XHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcbi0tXG5tbS9kYW1vbi9wYWRkci5jPTQ0Nz1zdGF0aWMgaW50IF9faW5pdCBkYW1vbl9wYV9pbml0Y2FsbCh2b2lkKVxuLS1cbm1tL2RhbW9uL3BhZGRyLmMtNDU0LVx0XHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3Nlcyxcbm1tL2RhbW9uL3BhZGRyLmM6NDU1Olx0XHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxubW0vZGFtb24vcGFkZHIuYy00NTYtXHRcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAwMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIEFkZHJlc3MgU3BhY2UgUHJvYmluZyBJbXBsZW1lbnRhdGlvbioqCgpBbHJpZ2h0LCBzbyBJIHdhcyBsb29raW5nIGF0IGhvdyBEQU1PTiBoYW5kbGVzIGFkZHJlc3Mgc3BhY2UgcHJvYmluZywgYW5kIHRoZSBpbml0aWFsIHRob3VnaHQgd2FzLCAmIzM0O0hleSwgZG9lcyBgREFNT05fVkFERFJgIGhhdmUgdGhlIGBhcHBseV9wcm9iZXNgIGZ1bmN0aW9uPyYjMzQ7IFR1cm5zIG91dCwgbm8sIGl0IGRvZXNuJiMzOTt0LiBUaGF0IGZ1bmN0aW9uIHNlZW1zIHRvIGJlIHNvbGVseSB3aXRoaW4gYHBhZGRyLmNgLiBUaGlzIGlzIGltcG9ydGFudCwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGlzIHJlYWxseSBzb2xpZGlmaWVzIHRoZSBpZGVhIHRoYXQgd2UgKm5lZWQqIGBEQU1PTl9QQUREUmAuIE90aGVyd2lzZSwgaG93IHdvdWxkIHRoaXMgd29yaz8KCk5vdywgSSByZWFsbHkgbmVlZCB0byByZXZpc2l0IGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBvciBtYWRlIGFueSBpbmNvcnJlY3QgYXNzdW1wdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIGhvdyB0aGF0IGZ1bmN0aW9uIGlzIHZldHRpbmcgdGhlIHBhcmFtZXRlcnMgcGFzc2VkIGZvciBwcm9iaW5nLCBlc3BlY2lhbGx5IGdpdmVuIHRoaXMgYGFwcGx5X3Byb2Jlc2Agc2l0dWF0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSB2YWxpZCBnaXZlbiB0aGlzIHNlcGFyYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MTMzMD1zdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEzNDAtXG5tbS9kYW1vbi9jb3JlLmM6MTM0MTpzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTEzNDIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xNzUwPXN0YXRpYyBpbnQgX19kYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVxubW0vZGFtb24vY29yZS5jOjE3NzM6XHRpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKVxubW0vZGFtb24vY29yZS5jLTE3NzQtXHRcdHJldHVybiAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzUyMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHRhaWxvcmVkIGFzIGlmIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyB0aHJvdWdoIHRoaXM6CgoqKkFuYWx5emluZyB0aGUgRGFtb24gUHJvYmUgUGFyYW1ldGVycyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiBpbmNvcnBvcmF0aW5nIHRoZSBgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgZnVuZGFtZW50YWw7IGl0IHJlcHJlc2VudHMgdGhlIHNldCBvZiBwYXJhbWV0ZXJzIHdoaWNoIGFyZSBkZWVtZWQgY29ycmVjdCBhbmQgYWNjZXB0YWJsZSB0byB1c2UgZm9yIHRoaXMgc3BlY2lmaWMgdHlwZSBvZiBwcm9iaW5nLiBJIGtub3cgaXRzIGNydWNpYWwgZm9yIHRoZSBhbmFseXNpcy4gQmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGNyaXRpY2FsIHN0cnVjdHVyZSBpcyBwcmVzZW50IGFuZCBjb3JyZWN0bHkgZGVmaW5lZCBmb3IgdGhlIHRhc2suCgpOZXh0LCBhbmQgcHJvYmFibHkganVzdCBhcyBjcml0aWNhbCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgc3VyZSB0aGF0IGBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c2AgaXMgcHJvcGVybHkgZXN0YWJsaXNoZWQuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBldmVyeXRoaW5nIHdpbGwgZnVuY3Rpb24gY29ycmVjdGx5LiBXZWlnaHRpbmcgaXMgYSBmdW5kYW1lbnRhbCBlbGVtZW50IGluIHRoZSBEYW1vbiBpbXBsZW1lbnRhdGlvbiwgYW5kIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBhY2NvdW50aW5nIGZvciB0aGUgZXhpc3Rpbmcgd2VpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTEgMTA6NDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25faGFzX3Byb2JlX3dlaWdodHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTIwMD1zdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjExLVxubW0vZGFtb24vY29yZS5jOjIxMjpzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTIxMy17XG4tLVxubW0vZGFtb24vY29yZS5jPTEzNDE9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTM0Ny1cbm1tL2RhbW9uL2NvcmUuYzoxMzQ4Olx0aWYgKCFkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpKVxubW0vZGFtb24vY29yZS5jLTEzNDktXHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzEwPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzEzLVx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcbm1tL2RhbW9uL2NvcmUuYzozMzE0Olx0Ym9vbCB1c2VfcHJvYmVfaGl0cyA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzMxNS1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzczNj1zdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzc3MC1cdFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsO1xubW0vZGFtb24vY29yZS5jOjM3NzE6XHRcdGJvb2wgYWNjZXNzX2NoZWNrX2Rpc2FibGVkID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zNzcyLVx0XHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzExIDEwOjQ1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MjM1CgkJCQkJCQlvdXRwdXQ6IDIyNwoJCQkJCQkJdGhvdWdodHM6IDI2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBEQU1PTiBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIHNvbGlkaWZ5IHRoZSBwbGFuIGZvciBmdXp6aW5nIHRoZXNlIERBTU9OIGZ1bmN0aW9ucy4gSSYjMzk7bGwgaW5jbHVkZSBgZGFtb25faGFzX3Byb2JlX3dlaWdodHNgIGFzIGl0JiMzOTtzIGEgcGFydCBvZiB0aGUgb3ZlcmFsbCBsb2dpYy4KCkhlcmUmIzM5O3MgdGhlIGZpbmFsaXplZCBsaXN0IG9mIGZ1bmN0aW9ucyB0byB0YXJnZXQ6CgoqICAgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAKKiAgIGBkYW1vbl9tZXJnZV9zY29yZWAKKiAgIGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgCiogICBgZGFtb25fc3lzZnNfc2V0X3Byb2Jlc2AKKiAgIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYAoqICAgYGtkYW1vbmRfZm5gCiogICBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYAoqICAgYHdlaWdodF9zdG9yZWAKKiAgIGBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c2AKClJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgSSYjMzk7dmUgZ290IGEgaGFuZGxlIG9uIHRoZSBrZXkgZmxhZ3M6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUEFERFJgLgoKTm93LCBiZWZvcmUgSSBjb21taXQgdG8gYW55dGhpbmcsIEkgd2FudCB0byBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2hpbGUgYGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzYCBjYW4gYmUgZ2xvc3NlZCBvdmVyLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBhbGwgdGhlIGNvbmZpZyBvcHRpb25zIHJlcXVpcmVkIGZvciB0aGVzZSBmdW5jdGlvbnMsIHJpZ2h0PyBBbmQgY2hlY2tpbmcgdGhvc2UgcmVxdWlyZW1lbnRzOgoKKiAgIGBEQU1PTl9QQUREUmAgaXMgY2xlYXJseSBuZWNlc3NhcnkgZm9yIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLgoqICAgQW5kIGBEQU1PTl9TWVNGU2Agd2lsbCBiZSBuZWVkZWQgZm9yIHRoZSBgd2VpZ2h0X3N0b3JlYCBhbmQgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgIGFzIHdlbGwuCgpBbHJpZ2h0LCBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGUgcGxhbi4gSSYjMzk7bGwgb3V0cHV0IHRoZSByZXN1bHRzIGFuZCBwcmVwYXJlIHRoZSBuZXh0IHN0ZXBzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMSAxMDo0NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9wcm9iZV9oaXRzX3dzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2Vfc2NvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zJiMzNDssCiAgICAmIzM0O2RhbW9uX3N5c2ZzX3NldF9wcm9iZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfcmVnaW9uc19vZiYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2ZuJiMzNDssCiAgICAmIzM0O2RhbW9uX3BhX2FwcGx5X3Byb2JlcyYjMzQ7LAogICAgJiMzNDt3ZWlnaHRfc3RvcmUmIzM0OywKICAgICYjMzQ7ZGFtb25faGFzX3Byb2JlX3dlaWdodHMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyAmIzM5O3dlaWdodCYjMzk7IGF0dHJpYnV0ZSBmb3IgREFNT04gcHJvYmVzLCBlbmFibGluZyAmIzM5O0RhdGEgQXR0cmlidXRlcy1vbmx5IE1vbml0b3JpbmcmIzM5Oy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyB0byB1c2UgcHJvYmUgaGl0IHdlaWdodGVkIHN1bXMgaW5zdGVhZCBvZiBhY2Nlc3MgY291bnRzIGZvciByZWdpb24gYWRqdXN0bWVudCB3aGVuIHdlaWdodHMgYXJlIGNvbmZpZ3VyZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIGludGVyZmFjZXMsIGNvcmUgcmVnaW9uIG1lcmdpbmcgbG9naWMsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHByb2JlIGFwcGxpY2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3Byb2JlX2hpdHNfd3N1bSYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9zY29yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMmIzM0OywKICAgICYjMzQ7ZGFtb25fc3lzZnNfc2V0X3Byb2JlcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9yZWdpb25zX29mJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfZm4mIzM0OywKICAgICYjMzQ7ZGFtb25fcGFfYXBwbHlfcHJvYmVzJiMzNDssCiAgICAmIzM0O3dlaWdodF9zdG9yZSYjMzQ7LAogICAgJiMzNDtkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICYjMzk7d2VpZ2h0JiMzOTsgYXR0cmlidXRlIGZvciBEQU1PTiBwcm9iZXMsIGVuYWJsaW5nICYjMzk7RGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZyYjMzk7LiBUaGlzIG1vZGlmaWVzIHRoZSBjb3JlIERBTU9OIGxvZ2ljIHRvIHVzZSBwcm9iZSBoaXQgd2VpZ2h0ZWQgc3VtcyBpbnN0ZWFkIG9mIGFjY2VzcyBjb3VudHMgZm9yIHJlZ2lvbiBhZGp1c3RtZW50IHdoZW4gd2VpZ2h0cyBhcmUgY29uZmlndXJlZC4gSXQgbW9kaWZpZXMgc3lzZnMgaW50ZXJmYWNlcywgY29yZSByZWdpb24gbWVyZ2luZyBsb2dpYywgYW5kIHBoeXNpY2FsIGFkZHJlc3MgcHJvYmUgYXBwbGljYXRpb24uIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0Mzo1My41ODk5MTI5NTVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDk1NjY4NjczMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9zY29yZVwiLFxuICAgIFwiZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zZXRfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcIndlaWdodF9zdG9yZVwiLFxuICAgIFwiZGFtb25faGFzX3Byb2JlX3dlaWdodHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICd3ZWlnaHQnIGF0dHJpYnV0ZSBmb3IgREFNT04gcHJvYmVzLCBlbmFibGluZyAnRGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZycuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdXNlIHByb2JlIGhpdCB3ZWlnaHRlZCBzdW1zIGluc3RlYWQgb2YgYWNjZXNzIGNvdW50cyBmb3IgcmVnaW9uIGFkanVzdG1lbnQgd2hlbiB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBJdCBtb2RpZmllcyBzeXNmcyBpbnRlcmZhY2VzLCBjb3JlIHJlZ2lvbiBtZXJnaW5nIGxvZ2ljLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBwcm9iZSBhcHBsaWNhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0Mzo1My41ODk5MjMwNDVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NzkzMjU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3ZmU5YzNjODdhNjU2MGQwNTEwZTE0OTI4YTBiZTQ4OTBiMGExM2VcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBKdWwgMTEgMTA6NDM6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb24gYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbmluZGV4IGRkNmI1YmQ3NmUxMTk2Li45MDdhNTA0ZmI2NGM1NCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxcbisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXFxuQEAgLTE2NCw2ICsxNjQsMTIgQEAgRGVzY3JpcHRpb246XFx0V3JpdGluZyBhIG51bWJlciAnTicgdG8gdGhpcyBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZlxcbiBcXHRcXHRkaXJlY3RvcmllcyBmb3IgZWFjaCBEQU1PTiBwcm9iZSBuYW1lZCAnMCcgdG8gJ04tMScgdW5kZXIgdGhlXFxuIFxcdFxcdHByb2Jlcy8gZGlyZWN0b3J5LlxcbiBcXG4rV2hhdDpcXHRcXHQvc3lzL2tlcm5lbC9tbS9kYW1vbi9hZG1pbi9rZGFtb25kcy9cXHUwMDNjS1xcdTAwM2UvY29udGV4dHMvXFx1MDAzY0NcXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1xcdTAwM2NQXFx1MDAzZS93ZWlnaHRcXG4rRGF0ZTpcXHRcXHRKdWwgMjAyNlxcbitDb250YWN0OlxcdFNKIFBhcmsgXFx1MDAzY3NqQGtlcm5lbC5vcmdcXHUwMDNlXFxuK0Rlc2NyaXB0aW9uOlxcdFdyaXRpbmcgdG8gYW5kIHJlYWRpbmcgZnJvbSB0aGlzIGZpbGUgc2V0cyBhbmQgZ2V0cyB0aGVcXG4rXFx0XFx0cGVyLXByb2JlIGF0dHJpYnV0ZSB3ZWlnaHQuXFxuK1xcbiBXaGF0OlxcdFxcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1xcdTAwM2NLXFx1MDAzZS9jb250ZXh0cy9cXHUwMDNjQ1xcdTAwM2UvbW9uaXRvcmluZ19hdHRycy9wcm9iZXMvXFx1MDAzY1BcXHUwMDNlL2ZpbHRlcnMvbnJfZmlsdGVyc1xcbiBEYXRlOlxcdFxcdE1heSAyMDI2XFxuIENvbnRhY3Q6XFx0U0ogUGFyayBcXHUwMDNjc2pAa2VybmVsLm9yZ1xcdTAwM2VcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbmluZGV4IGIyNjQ5ZWEwMTFmOTMxLi5kYTVmOWFmZDA4YWVmOCAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XFxuQEAgLTczLDkgKzczLDEwIEBAIGNvbW1hIChcXFwiLFxcXCIpLlxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIGludGVydmFsc19nb2FsL2FjY2Vzc19icCxhZ2dycyxtaW5fc2FtcGxlX3VzLG1heF9zYW1wbGVfdXNcXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heFxcbiAgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgcHJvYmVzIFxcdTAwM2NkYW1vbl91c2FnZV9zeXNmc19wcm9iZXNcXHUwMDNlYC9ucl9wcm9iZXNcXG4tICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL2ZpbHRlcnMvbnJfZmlsdGVyc1xcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3R5cGUsbWF0Y2hpbmcsYWxsb3cscGF0aFxcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAwL3dlaWdodFxcbisgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBmaWx0ZXJzL25yX2ZpbHRlcnNcXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvdHlwZSxtYXRjaGluZyxhbGxvdyxwYXRoXFxuKyAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdGFyZ2V0cyBcXHUwMDNjc3lzZnNfdGFyZ2V0c1xcdTAwM2VgL25yX3RhcmdldHNcXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YDAgXFx1MDAzY3N5c2ZzX3RhcmdldFxcdTAwM2VgL3BpZF90YXJnZXQsb2Jzb2xldGVfdGFyZ2V0XFxuQEAgLTI4Niw2ICsyODcsMTAgQEAgSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3RvcnlcXG4gY29udGFpbnMgZmlsZXMgZm9yIGluc3RhbGxpbmcgZmlsdGVycyBmb3IgdGhlIHByb2JlLCB0aGF0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lXFxuIHRoZSBkYXRhIGF0dHJpYnV0ZSBmb3IgdGhlIHByb2JlLlxcbiBcXG4rRWFjaCBwcm9iZSBkaXJlY3RvcnkgYWxzbyBjb250YWlucyBgYHdlaWdodGBgIGZpbGUuICBSZWFkaW5nIGZyb20gYW5kIHdyaXRpbmdcXG4rdG8gdGhlIGZpbGUgZ2V0cyBhbmQgc2V0cyB0aGUgOnJlZjpgYXR0cmlidXRlcy1vbmx5IG1vbml0b3JpbmdcXG4rXFx1MDAzY2RhbW9uX2Rlc2lnbl9hdHRyc19vbmx5X21vbml0b3JpbmdcXHUwMDNlYCB3ZWlnaHQgZm9yIHRoZSBhdHRyaWJ1dGUgb2YgdGhlIHByb2JlLlxcbitcXG4gSW4gdGhlIGJlZ2lubmluZywgYGBmaWx0ZXJzYGAgZGlyZWN0b3J5IGhhcyBvbmx5IG9uZSBmaWxlLCBgYG5yX2ZpbHRlcnNgYC5cXG4gV3JpdGluZyBhIG51bWJlciAoYGBOYGApIHRvIHRoZSBmaWxlIGNyZWF0ZXMgdGhlIG51bWJlciBvZiBjaGlsZCBkaXJlY3Rvcmllc1xcbiBuYW1lZCBgYDBgYCB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIGZpbHRlciBhbmQgd29ya3MgaW4gYVxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcXG5pbmRleCA0NTdkNmU4YmM3ODc4NS4uYWVkNmNiMWNmNDgzMTAgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XFxuQEAgLTMxNiw2ICszMTYsMzEgQEAgQW5vdGhlciB3YXkgdG8gZG8gdGhpcyBmb3IgaGlnaGVyIGFjY3VyYWN5IGlzIHVzaW5nIDpyZWY6YERBTU9TIGZpbHRlclxcbiBpbmZvcm1hdGlvbiBpbiBwYWdlIGxldmVsLiAgQnV0LCBiZWNhdXNlIGl0IGlzIG9wZXJhdGVkIGluIHBhZ2UgbGV2ZWwsIHRoZVxcbiBvdmVyaGVhZCBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIHNpemUgb2YgdGhlIG1lbW9yeS5cXG4gXFxuKy4uIF9kYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nOlxcbitcXG4rRGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZ1xcbit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XFxuK1xcbitEYXRhIGFjY2VzcyBpcyB0aGUgcHJpbWFyeSBtb25pdG9yaW5nIGluZm9ybWF0aW9uIGZvciBEQU1PTi4gIEhlbmNlIGl0XFxuKzpyZWY6YGFkanVzdHMgXFx1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcXHUwMDNlYCByZWdpb25zIHVzaW5nIHRoZSBhY2Nlc3NcXG4rOnJlZjpgY291bnRlciBcXHUwMDNjZGFtb25fZGVzaWduX3JlZ2lvbl9iYXNlZF9zYW1wbGluZ1xcdTAwM2VgIChgYG5yX2FjY2Vzc2VzYGApLiAgSW4gc29tZVxcbit1c2UgY2FzZXMsIGhvd2V2ZXIsIHVzZXJzIG1heSB3YW50IHNvbWUgb2YgOnJlZjpgYXR0cmlidXRlc1xcbitcXHUwMDNjZGFtb25fZGVzaWduX2RhdGFfYXR0cnNfbW9uaXRvcmluZ1xcdTAwM2VgIHRvIGJlIHRoZSBwcmltYXJ5IGluZm9ybWF0aW9uLlxcbitcXG4rRGF0YSBhdHRyaWJ1dGVzLW9ubHkgbW9uaXRvcmluZyBtb2RlIHN1cHBvcnRzIHRoaXMgdXNlIGNhc2UuICBGb3IgdGhlIG1vZGUsXFxuK2VhY2ggYXR0cmlidXRlIHByb2JlIGhhcyB0aGVpciBwcmlvcml0eSB3ZWlnaHQgdmFsdWUuICBVc2VycyBjYW4gZGVzY3JpYmUgYnlcXG4rd2hhdCBjb21iaW5hdGlvbiBvZiB0aGUgYXR0cmlidXRlcyB0aGUgcHJpbWFyeSBpbmZvcm1hdGlvbiBpcyBkZWNpZGVkLCBieVxcbitzZXR0aW5nIHRoZSBwcmlvcml0eSB3ZWlnaHQgdmFsdWUuICBJZiB0aGUgdG90YWwgc3VtIG9mIHRoZSB3ZWlnaHRzIGlzIG5vdFxcbit6ZXJvLCB0aGUgbW9kZSBpcyBlbmFibGVkLiAgVGhlIHJlZ2lvbnMgYWRqdXN0bWVudCBtZWNoYW5pc20gdXNlcyB0aGUgd2VpZ2h0ZWRcXG4rc3VtIG9mIHRoZSA6cmVmOmBwcm9iZSBoaXQgY291bnRzIFxcdTAwM2NkYW1vbl9kZXNpZ25fZGF0YV9hdHRyc19tb25pdG9yaW5nXFx1MDAzZWAgaW5zdGVhZFxcbitvZiBgYG5yX2FjY2Vzc2VzYGAgaW4gdGhlIGNhc2UuICBXaGVuIHRoZSBtb2RlIGlzIGVuYWJsZWQsIGFjY2VzcyBtb25pdG9yaW5nIGlzXFxuK2F1dG9tYXRpY2FsbHkgdHVybmVkIG9mZi4gIFRoZSBhY2Nlc3MgY291bnRlciAoYGBucl9hY2Nlc3Nlc2BgKSB3aWxsIGFsd2F5cyBiZVxcbit6ZXJvIGFuZCBub3QgdXBkYXRlZC4gIEhlbmNlIHRoZSBtb2RlIGlzIGNhbGxlZCBEYXRhIEF0dHJpYnV0ZXMgXFxcIm9ubHlcXFwiXFxuK21vbml0b3JpbmcuXFxuK1xcbitSZWZlciB0byB0aGUgOnJlZjpgYWRtaW4gZ3VpZGUgXFx1MDAzY2RhbW9uX3VzYWdlX3N5c2ZzX3Byb2Jlc1xcdTAwM2VgIHRvIGtub3cgaG93IHVzZXJzXFxuK2NhbiB1c2UgdGhlIG1vZGUuXFxuK1xcbiBEeW5hbWljIFRhcmdldCBTcGFjZSBVcGRhdGVzIEhhbmRsaW5nXFxuIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5cXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IDYzZjU5Njk1N2MxZjFmLi5mNjk0NDJhOWQ0MzEyOCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNjQ3LDcgKzY0NywxMCBAQCBlbnVtIGRhbW9uX29wc19pZCB7XFxuICAqIEl0IHNob3VsZCBhbHNvIHJldHVybiBtYXggbnVtYmVyIG9mIG9ic2VydmVkIGFjY2Vzc2VzIHRoYXQgbWFkZSBhcyBhIHJlc3VsdFxcbiAgKiBvZiBpdHMgdXBkYXRlLiAgVGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBmb3IgcmVnaW9ucyBhZGp1c3RtZW50IHRocmVzaG9sZC5cXG4gICogQGFwcGx5X3Byb2JlcyBzaG91bGQgYXBwbHkgdGhlIGRhdGEgYXR0cmlidXRlIHByb2JlcyB0byBlYWNoIHJlZ2lvbiBhbmRcXG4tICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi5cXG4rICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi4gIEl0IHNob3VsZCBhbHNvXFxuKyAqIHNldCBcXHUwMDI2ZGFtb25fcmVnaW9uLVxcdTAwM2VzYW1wbGluZ19hZGRyIG9mIGVhY2ggcmVnaW9uIGlmIGBgc2V0X3NhbXBsZXNgYCBpcyB0cnVlLlxcbisgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4aW11bSBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiByZWdpb25zIGlmXFxuKyAqIGBgcmV0dXJuX21heF93c3VtYGAgaXMgdHJ1ZS5cXG4gICogQGdldF9zY2hlbWVfc2NvcmUgc2hvdWxkIHJldHVybiB0aGUgcHJpb3JpdHkgc2NvcmUgb2YgYSByZWdpb24gZm9yIGEgc2NoZW1lXFxuICAqIGFzIGFuIGludGVnZXIgaW4gWzAsIFxcdTAwMjZEQU1PU19NQVhfU0NPUkVdLlxcbiAgKiBAYXBwbHlfc2NoZW1lIGlzIGNhbGxlZCBmcm9tIEBrZGFtb25kIHdoZW4gYSByZWdpb24gZm9yIHVzZXIgcHJvdmlkZWRcXG5AQCAtNjY1LDcgKzY2OCw4IEBAIHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zIHtcXG4gXFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuIFxcdHZvaWQgKCpwcmVwYXJlX2FjY2Vzc19jaGVja3MpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xcbiBcXHR1bnNpZ25lZCBpbnQgKCpjaGVja19hY2Nlc3Nlcykoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XFxuLVxcdHZvaWQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xcbitcXHR1bnNpZ25lZCBpbnQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXFxuK1xcdFxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKTtcXG4gXFx0aW50ICgqZ2V0X3NjaGVtZV9zY29yZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcXG4gXFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzY2hlbWUpO1xcbiBcXHR1bnNpZ25lZCBsb25nICgqYXBwbHlfc2NoZW1lKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxcbkBAIC03NjAsMTAgKzc2NCwxMiBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcXG4gLyoqXFxuICAqIHN0cnVjdCBkYW1vbl9wcm9iZSAtIERhdGEgcmVnaW9uIGF0dHJpYnV0ZSBwcm9iZS5cXG4gICpcXG4rICogQHdlaWdodDpcXHRSZWxhdGl2ZSBwcmlvcml0eSBvZiB0aGUgYXR0cmlidXRlIGZvciB0aGlzIHByb2JlLlxcbiAgKiBAZmlsdGVyczpcXHRGaWx0ZXJzIGZvciBhc3Nlc3NpbmcgaWYgYSBnaXZlbiByZWdpb24gaXMgZm9yIHRoaXMgcHJvYmUuXFxuICAqIEBsaXN0OlxcdFNpYmxpbmdzIGxpc3QuXFxuICAqL1xcbiBzdHJ1Y3QgZGFtb25fcHJvYmUge1xcbitcXHR1bnNpZ25lZCBpbnQgd2VpZ2h0O1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XFxuIFxcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcXG4gfTtcXG5AQCAtMTAwNiw2ICsxMDEyLDggQEAgdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuIFxcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XFxuIHVuc2lnbmVkIGNoYXIgZGFtb25fcHJvYmVfaGl0c19tdnN1bShpbnQgcHJvYmVfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4rXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcXG4gXFxuIGludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcXG5pbmRleCAxMTQ3M2FhMWY3MGY0MS4uODA2YTY3ZDAyYTZlOTAgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTE2Niw2ICsxNjYsNyBAQCBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKVxcbiBcXHRwID0ga21hbGxvY19vYmooKnApO1xcbiBcXHRpZiAoIXApXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRwLVxcdTAwM2V3ZWlnaHQgPSAwO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlZmlsdGVycyk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZwLVxcdTAwM2VsaXN0KTtcXG4gXFx0cmV0dXJuIHA7XFxuQEAgLTIwOCw2ICsyMDksMTcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG4rXFxuK1xcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcXG4rXFx0XFx0aWYgKHAtXFx1MDAzZXdlaWdodClcXG4rXFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiAvKlxcbiAgKiBkYW1vbl9tdnN1bSgpIC0gUmV0dXJucyBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBmb3IgYSB0aW1lIHdpbmRvdy5cXG4gICogQGN1cnJlbnRfbnI6XFx0XFx0VGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIHdpbmRvdy5cXG5AQCAtMzkyLDYgKzQwNCwzMCBAQCBzdGF0aWMgYm9vbCBkYW1vbl9pc19sYXN0X3JlZ2lvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRyZXR1cm4gbGlzdF9pc19sYXN0KFxcdTAwMjZyLVxcdTAwM2VsaXN0LCBcXHUwMDI2dC1cXHUwMDNlcmVnaW9uc19saXN0KTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cXG4rICogQHI6XFx0XFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxcbisgKiBAbGFzdDpcXHRpZiB0aGUgcmVxdWVzdCBpcyBmb3IgbGFzdC13aW5kb3cgYWdncmVnYXRlZCBwcm9iZSBoaXRzLlxcbisgKiBAY3R4OlxcdGNvbnRleHQgb2YgXFx1MDAyNnIuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIHdlaWdodGVkIHN1bSBvZiBwcm9iZSBoaXRzIG9mIHRoZSByZWdpb24uXFxuKyAqL1xcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4rXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbit7XFxuK1xcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XFxuK1xcdHVuc2lnbmVkIGludCBzdW0gPSAwO1xcbitcXHRpbnQgaSA9IDA7XFxuK1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxuK1xcdFxcdGlmIChsYXN0KVxcbitcXHRcXHRcXHRzdW0gKz0gci1cXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN1bSArPSByLVxcdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cXHUwMDNld2VpZ2h0O1xcbitcXHR9XFxuK1xcdHJldHVybiBzdW07XFxuK31cXG4rXFxuIC8qXFxuICAqIENoZWNrIHdoZXRoZXIgYSByZWdpb24gaXMgaW50ZXJzZWN0aW5nIGFuIGFkZHJlc3MgcmFuZ2VcXG4gICpcXG5AQCAtMTMwMiw2ICsxMzM4LDM0IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBkYW1vcyAqcylcXG4gXFx0XFx0ZGFtb3NfZmlsdGVyc19kZWZhdWx0X3JlamVjdChcXHUwMDI2cy1cXHUwMDNlb3BzX2ZpbHRlcnMpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsO1xcbitcXHR1bnNpZ25lZCBjaGFyIG1heF9wcm9iZV9oaXRzO1xcbitcXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlO1xcbitcXHR1bnNpZ25lZCBpbnQgd3N1bSwgd3N1bV90b19hZGQ7XFxuK1xcbitcXHRpZiAoIWRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCkpXFxuK1xcdFxcdHJldHVybiB0cnVlO1xcbitcXG4rXFx0c2FtcGxlX2ludGVydmFsID0gY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XFxuK1xcdGlmIChjdHgtXFx1MDAzZWF0dHJzLmFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWwgXFx1MDAzZSBVOF9NQVgpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXFxuK1xcdG1heF9wcm9iZV9oaXRzID0gZGFtb25fbnJfc2FtcGxlc19wZXJfYWdncihcXHUwMDI2Y3R4LVxcdTAwM2VhdHRycyk7XFxuK1xcdHdzdW0gPSAwO1xcbitcXHRkYW1vbl9mb3JfZWFjaF9wcm9iZShwcm9iZSwgY3R4KSB7XFxuK1xcdFxcdGlmIChwcm9iZS1cXHUwMDNld2VpZ2h0IFxcdTAwM2UgVUlOVF9NQVggLyBtYXhfcHJvYmVfaGl0cylcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRcXHR3c3VtX3RvX2FkZCA9IHByb2JlLVxcdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcXG4rXFx0XFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcXHUwMDNjIHdzdW1fdG9fYWRkKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdHdzdW0gKz0gd3N1bV90b19hZGQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qXFxuICAqIGRhbW9zX2NvbW1pdF9kZXN0cygpIC0gQ29weSBtaWdyYXRpb24gZGVzdGluYXRpb25zIGZyb20gQHNyYyB0byBAZHN0LlxcbiAgKiBAZHN0OlxcdERlc3RpbmF0aW9uIHN0cnVjdHVyZSB0byB1cGRhdGUuXFxuQEAgLTE2NTgsNiArMTcyMiw3IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4gXFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShkc3RfcHJvYmUsIG5leHQsIGRzdCkge1xcbiBcXHRcXHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSsrLCBzcmMpO1xcbiBcXHRcXHRpZiAoc3JjX3Byb2JlKSB7XFxuK1xcdFxcdFxcdGRzdF9wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuIFxcdFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKGRzdF9wcm9iZSwgc3JjX3Byb2JlKTtcXG4gXFx0XFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTY3NCw2ICsxNzM5LDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbiBcXHRcXHRpZiAoIW5ld19wcm9iZSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdGRhbW9uX2FkZF9wcm9iZShkc3QsIG5ld19wcm9iZSk7XFxuK1xcdFxcdG5ld19wcm9iZS1cXHUwMDNld2VpZ2h0ID0gc3JjX3Byb2JlLVxcdTAwM2V3ZWlnaHQ7XFxuIFxcdFxcdGVyciA9IGRhbW9uX2NvbW1pdF9maWx0ZXJzKG5ld19wcm9iZSwgc3JjX3Byb2JlKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG5AQCAtMTcwNCw2ICsxNzcwLDkgQEAgc3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG4rXFx0aWYgKCFkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3JjKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbiBcXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuQEAgLTMyMjEsNiArMzI5MCwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcXG4gfVxcbiBcXG4rc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCB1c2VfcHJvYmVfaGl0cylcXG4re1xcbitcXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxuK1xcdFxcdHJldHVybiBkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgbGFzdCwgY3R4KTtcXG4rXFx0aWYgKGxhc3QpXFxuK1xcdFxcdHJldHVybiByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xcbitcXHRyZXR1cm4gci1cXHUwMDNlbnJfYWNjZXNzZXM7XFxuK31cXG4rXFxuIC8qXFxuICAqIE1lcmdlIGFkamFjZW50IHJlZ2lvbnMgaGF2aW5nIHNpbWlsYXIgYWNjZXNzIGZyZXF1ZW5jaWVzXFxuICAqXFxuQEAgLTMyMjksMjQgKzMzMDgsMzggQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gICogc3pfbGltaXRcXHRzaXplIHVwcGVyIGxpbWl0IG9mIGVhY2ggcmVnaW9uXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcXG4tXFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBzel9saW1pdClcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpwcmV2ID0gTlVMTCwgKm5leHQ7XFxuK1xcdGJvb2wgdXNlX3Byb2JlX2hpdHMgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbiBcXG4gXFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uX3NhZmUociwgbmV4dCwgdCkge1xcbi1cXHRcXHRpZiAoYWJzKHItXFx1MDAzZW5yX2FjY2Vzc2VzIC0gci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcykgXFx1MDAzZSB0aHJlcylcXG4rXFx0XFx0dW5zaWduZWQgaW50IHNjb3JlLCBsYXN0X3Njb3JlLCBkaWZmO1xcbitcXG4rXFx0XFx0c2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCBmYWxzZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XFxuK1xcdFxcdGxhc3Rfc2NvcmUgPSBkYW1vbl9tZXJnZV9zY29yZShyLCB0cnVlLCBjdHgsIHVzZV9wcm9iZV9oaXRzKTtcXG4rXFxuK1xcdFxcdGlmIChhYnNfZGlmZihzY29yZSwgbGFzdF9zY29yZSkgXFx1MDAzZSB0aHJlcylcXG4gXFx0XFx0XFx0ci1cXHUwMDNlYWdlID0gMDtcXG4tXFx0XFx0ZWxzZSBpZiAoKHItXFx1MDAzZW5yX2FjY2Vzc2VzID09IDApICE9IChyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID09IDApKVxcbitcXHRcXHRlbHNlIGlmICgoc2NvcmUgPT0gMCkgIT0gKGxhc3Rfc2NvcmUgPT0gMCkpXFxuIFxcdFxcdFxcdHItXFx1MDAzZWFnZSA9IDA7XFxuIFxcdFxcdGVsc2VcXG4gXFx0XFx0XFx0ci1cXHUwMDNlYWdlKys7XFxuIFxcbi1cXHRcXHRpZiAocHJldiBcXHUwMDI2XFx1MDAyNiBwcmV2LVxcdTAwM2Vhci5lbmQgPT0gci1cXHUwMDNlYXIuc3RhcnQgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgIGFicyhwcmV2LVxcdTAwM2Vucl9hY2Nlc3NlcyAtIHItXFx1MDAzZW5yX2FjY2Vzc2VzKSBcXHUwMDNjPSB0aHJlcyBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgZGFtb25fc3pfcmVnaW9uKHByZXYpICsgZGFtb25fc3pfcmVnaW9uKHIpIFxcdTAwM2M9IHN6X2xpbWl0KVxcbi1cXHRcXHRcXHRkYW1vbl9tZXJnZV90d29fcmVnaW9ucyh0LCBwcmV2LCByKTtcXG4tXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRwcmV2ID0gcjtcXG4rXFx0XFx0aWYgKCFwcmV2KVxcbitcXHRcXHRcXHRnb3RvIHNldF9wcmV2X2NvbnRpbnVlO1xcbitcXHRcXHRpZiAocHJldi1cXHUwMDNlYXIuZW5kICE9IHItXFx1MDAzZWFyLnN0YXJ0KVxcbitcXHRcXHRcXHRnb3RvIHNldF9wcmV2X2NvbnRpbnVlO1xcbitcXHRcXHRkaWZmID0gYWJzX2RpZmYoc2NvcmUsIGRhbW9uX21lcmdlX3Njb3JlKHByZXYsIGZhbHNlLCBjdHgsXFxuK1xcdFxcdFxcdFxcdFxcdHVzZV9wcm9iZV9oaXRzKSk7XFxuK1xcdFxcdGlmIChkaWZmIFxcdTAwM2UgdGhyZXMpXFxuK1xcdFxcdFxcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XFxuK1xcdFxcdGlmIChkYW1vbl9zel9yZWdpb24ocHJldikgKyBkYW1vbl9zel9yZWdpb24ocikgXFx1MDAzZSBzel9saW1pdClcXG4rXFx0XFx0XFx0Z290byBzZXRfcHJldl9jb250aW51ZTtcXG4rXFx0XFx0ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7XFxuK1xcdFxcdGNvbnRpbnVlO1xcbitzZXRfcHJldl9jb250aW51ZTpcXG4rXFx0XFx0cHJldiA9IHI7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMzI3OSw3ICszMzcyLDcgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxuIFxcdGRvIHtcXG4gXFx0XFx0bnJfcmVnaW9ucyA9IDA7XFxuIFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuLVxcdFxcdFxcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCk7XFxuK1xcdFxcdFxcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCwgYyk7XFxuIFxcdFxcdFxcdG5yX3JlZ2lvbnMgKz0gZGFtb25fbnJfcmVnaW9ucyh0KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR0aHJlc2hvbGQgPSBtYXgoMSwgdGhyZXNob2xkICogMik7XFxuQEAgLTM2NDMsNyArMzczNiw2IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfaW5pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBkYXRhO1xcbi1cXHR1bnNpZ25lZCBpbnQgbWF4X25yX2FjY2Vzc2VzID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyBzel9saW1pdCA9IDA7XFxuIFxcbiBcXHRwcl9kZWJ1ZyhcXFwia2RhbW9uZCAoJWQpIHN0YXJ0c1xcXFxuXFxcIiwgY3VycmVudC1cXHUwMDNlcGlkKTtcXG5AQCAtMzY3NiwyNSArMzc2OCwzOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXM7XFxuIFxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dF9vcHNfdXBkYXRlX3NpcyA9IGN0eC1cXHUwMDNlbmV4dF9vcHNfdXBkYXRlX3NpcztcXG4gXFx0XFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcXG4rXFx0XFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XFxuK1xcdFxcdGJvb2wgZ2V0X21heF93c3VtO1xcbiBcXG4gXFx0XFx0aWYgKGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKGN0eCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNlb3BzLnByZXBhcmVfYWNjZXNzX2NoZWNrcylcXG4rXFx0XFx0aWYgKCFhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VvcHMucHJlcGFyZV9hY2Nlc3NfY2hlY2tzKVxcbiBcXHRcXHRcXHRjdHgtXFx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MoY3R4KTtcXG4gXFxuIFxcdFxcdGtkYW1vbmRfdXNsZWVwKHNhbXBsZV9pbnRlcnZhbCk7XFxuIFxcdFxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMrKztcXG4gXFxuLVxcdFxcdGlmIChjdHgtXFx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcylcXG4tXFx0XFx0XFx0bWF4X25yX2FjY2Vzc2VzID0gY3R4LVxcdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNlb3BzLmFwcGx5X3Byb2JlcylcXG4tXFx0XFx0XFx0Y3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCk7XFxuK1xcdFxcdGlmICghYWNjZXNzX2NoZWNrX2Rpc2FibGVkIFxcdTAwMjZcXHUwMDI2IGN0eC1cXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKVxcbitcXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgPSBjdHgtXFx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcyhjdHgpO1xcbitcXHRcXHRpZiAoY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XFxuK1xcdFxcdFxcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdG5leHRfYWdncmVnYXRpb25fc2lzKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHRcXHRhY2Nlc3NfY2hlY2tfZGlzYWJsZWQpXFxuK1xcdFxcdFxcdFxcdGdldF9tYXhfd3N1bSA9IHRydWU7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0Z2V0X21heF93c3VtID0gZmFsc2U7XFxuK1xcdFxcdFxcdG1heF93c3VtID0gY3R4LVxcdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcXG4rXFx0XFx0XFx0XFx0XFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkLCBnZXRfbWF4X3dzdW0pO1xcbitcXHRcXHRcXHRpZiAoZ2V0X21heF93c3VtKVxcbitcXHRcXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgPSBtYXhfd3N1bTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcXG4gXFx0XFx0XFx0XFx0XFx0bmV4dF9hZ2dyZWdhdGlvbl9zaXMpKSB7XFxuIFxcdFxcdFxcdGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhjdHgsXFxuLVxcdFxcdFxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyAvIDEwLFxcbitcXHRcXHRcXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcXG4gXFx0XFx0XFx0XFx0XFx0c3pfbGltaXQpO1xcbiBcXHRcXHRcXHQvKiBvbmxpbmUgdXBkYXRlcyBtaWdodCBiZSBtYWRlICovXFxuIFxcdFxcdFxcdHN6X2xpbWl0ID0gZGFtb25fYXBwbHlfbWluX25yX3JlZ2lvbnMoY3R4KTtcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcXG5pbmRleCA2MTcyNDY0OTgxNzMwNC4uYjg1Zjg4YTdhMzhmNGQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtMTY2LDExICsxNjYsMTMgQEAgc3RhdGljIGJvb2wgZGFtb25fcGFfZmlsdGVyX3Bhc3MocGh5c19hZGRyX3QgcGEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdHJldHVybiBwYXNzO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbitzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuK1xcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbiB7XFxuIFxcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XFxuIFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuIFxcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcXG4rXFx0dW5zaWduZWQgaW50IG1heF93c3VtID0gMDtcXG4gXFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcXG4gXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG5AQCAtMTc4LDYgKzE4MCw5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcdFxcdFxcdHBoeXNfYWRkcl90IHBhO1xcbiBcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG4rXFx0XFx0XFx0aWYgKHNldF9zYW1wbGVzKVxcbitcXHRcXHRcXHRcXHRyLVxcdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXFx1MDAzZWFyLnN0YXJ0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRyLVxcdTAwM2Vhci5lbmQpO1xcbiBcXHRcXHRcXHRwYSA9IGRhbW9uX3BhX3BoeXNfYWRkcihyLVxcdTAwM2VzYW1wbGluZ19hZGRyLFxcbiBcXHRcXHRcXHRcXHRcXHRjdHgtXFx1MDAzZWFkZHJfdW5pdCk7XFxuIFxcdFxcdFxcdGZvbGlvID0gZGFtb25fZ2V0X2ZvbGlvKFBIWVNfUEZOKHBhKSk7XFxuQEAgLTE4OCw4ICsxOTMsMTIgQEAgc3RhdGljIHZvaWQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuK1xcdFxcdFxcdGlmIChyZXR1cm5fbWF4X3dzdW0pXFxuK1xcdFxcdFxcdFxcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4rXFx0cmV0dXJuIG1heF93c3VtO1xcbiB9XFxuIFxcbiAvKlxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9zeXNmcy5jIGIvbW0vZGFtb24vc3lzZnMuY1xcbmluZGV4IDZkN2UzNmM5ZTUwOWQyLi5iNWZlMDM2Zjc4MDE1MiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXFxuKysrIGIvbW0vZGFtb24vc3lzZnMuY1xcbkBAIC0xMDY1LDYgKzEwNjUsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19maWx0ZXJzX2t0eXBlID0ge1xcbiBcXG4gc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlIHtcXG4gXFx0c3RydWN0IGtvYmplY3Qga29iajtcXG4rXFx0dW5zaWduZWQgaW50IHdlaWdodDtcXG4gXFx0c3RydWN0IGRhbW9uX3N5c2ZzX2ZpbHRlcnMgKmZpbHRlcnM7XFxuIH07XFxuIFxcbkBAIC0xMTAwLDEyICsxMTAxLDM1IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX3Byb2JlX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSlcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbitcXHRcXHRjaGFyICpidWYpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbitcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xcbitcXG4rXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXVcXFxcblxcXCIsIHByb2JlLVxcdTAwM2V3ZWlnaHQpO1xcbit9XFxuK1xcbitzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuK1xcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxcbitcXHRcXHRcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xcbitcXHRpbnQgZXJyID0ga3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZwcm9iZS1cXHUwMDNld2VpZ2h0KTtcXG4rXFxuK1xcdHJldHVybiBlcnIgPyBlcnIgOiBjb3VudDtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG4ge1xcbiBcXHRrZnJlZShjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlLCBrb2JqKSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfcHJvYmVfd2VpZ2h0X2F0dHIgPVxcbitcXHRcXHRfX0FUVFJfUldfTU9ERSh3ZWlnaHQsIDA2MDApO1xcbitcXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XFxuK1xcdFxcdTAwMjZkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ci5hdHRyLFxcbiBcXHROVUxMLFxcbiB9O1xcbiBBVFRSSUJVVEVfR1JPVVBTKGRhbW9uX3N5c2ZzX3Byb2JlKTtcXG5AQCAtMTk2NSw2ICsxOTg5LDcgQEAgc3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcdFxcdGRhbW9uX2FkZF9wcm9iZShjdHgsIHApO1xcbiBcXHRcXHRzeXNfcHJvYmUgPSBzeXNfcHJvYmVzLVxcdTAwM2Vwcm9iZXNfYXJyW2ldO1xcbitcXHRcXHRwLVxcdTAwM2V3ZWlnaHQgPSBzeXNfcHJvYmUtXFx1MDAzZXdlaWdodDtcXG4gXFx0XFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlKHAsIHN5c19wcm9iZSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdHJldHVybiBlcnI7XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaCBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxcbmluZGV4IGQ5NzI4MDI3MGMyN2I4Li42YWQ3MzU1OWRkOGVhYiAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG4rKysgYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5AQCAtMjI2LDYgKzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcXG4gXFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIHtcXG4rXFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4O1xcbiBcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbiBcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xcbiBcXHR1bnNpZ25lZCBsb25nIHNhW10gPSB7MCwgMTAwLCAxMTQsIDEyMiwgMTMwLCAxNTYsIDE3MCwgMTg0LCAyMzB9O1xcbkBAIC0yMzYsMjAgKzIzNywyNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHR1bnNpZ25lZCBsb25nIGVhZGRyc1tdID0gezExMiwgMTMwLCAxNTYsIDE3MCwgMjMwLCAxMDE3MH07XFxuIFxcdGludCBpO1xcbiBcXG4rXFx0Y3R4ID0gZGFtb25fbmV3X2N0eCgpO1xcbitcXHRpZiAoIWN0eClcXG4rXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwiY3R4IGFsbG9jIGZhaWxcXFwiKTtcXG4rXFxuIFxcdHQgPSBkYW1vbl9uZXdfdGFyZ2V0KCk7XFxuLVxcdGlmICghdClcXG4rXFx0aWYgKCF0KSB7XFxuK1xcdFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XFxuIFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInRhcmdldCBhbGxvYyBmYWlsXFxcIik7XFxuK1xcdH1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoc2EpOyBpKyspIHtcXG4gXFx0XFx0ciA9IGRhbW9uX25ld19yZWdpb24oc2FbaV0sIGVhW2ldKTtcXG4gXFx0XFx0aWYgKCFyKSB7XFxuIFxcdFxcdFxcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xcbitcXHRcXHRcXHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xcbiBcXHRcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gbnJzW2ldO1xcbiBcXHRcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbiBcXHR9XFxuIFxcbi1cXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTkpO1xcbitcXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTksIGN0eCk7XFxuIFxcdC8qIDAtMTEyLCAxMTQtMTMwLCAxMzAtMTU2LCAxNTYtMTcwLCAxNzAtMjMwLCAyMzAtMTAxNzAgKi9cXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDZ1KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDY7IGkrKykge1xcbkBAIC0yNTgsNiArMjY2LDcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLmVuZCwgZWFkZHJzW2ldKTtcXG4gXFx0fVxcbiBcXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcXG4rXFx0ZGFtb25fZGVzdHJveV9jdHgoY3R4KTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTA6NDM6NTQuMTg4NzE1NDYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NDM1Nzg2NTY1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9zY29yZVwiLFxuICAgIFwiZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zZXRfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcIndlaWdodF9zdG9yZVwiLFxuICAgIFwiZGFtb25faGFzX3Byb2JlX3dlaWdodHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICd3ZWlnaHQnIGF0dHJpYnV0ZSBmb3IgREFNT04gcHJvYmVzLCBlbmFibGluZyAnRGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZycuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdXNlIHByb2JlIGhpdCB3ZWlnaHRlZCBzdW1zIGluc3RlYWQgb2YgYWNjZXNzIGNvdW50cyBmb3IgcmVnaW9uIGFkanVzdG1lbnQgd2hlbiB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBJdCBtb2RpZmllcyBzeXNmcyBpbnRlcmZhY2VzLCBjb3JlIHJlZ2lvbiBtZXJnaW5nIGxvZ2ljLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBwcm9iZSBhcHBsaWNhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM3ZmU5YzNjODdhNjU2MGQwNTEwZTE0OTI4YTBiZTQ4OTBiMGExM2VcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEp1bCAxMSAxMDo0Mzo1MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1rZXJuZWwtbW0tZGFtb25cbmluZGV4IGRkNmI1YmQ3NmUxMTk2Li45MDdhNTA0ZmI2NGM1NCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMta2VybmVsLW1tLWRhbW9uXG4rKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWtlcm5lbC1tbS1kYW1vblxuQEAgLTE2NCw2ICsxNjQsMTIgQEAgRGVzY3JpcHRpb246XHRXcml0aW5nIGEgbnVtYmVyICdOJyB0byB0aGlzIGZpbGUgY3JlYXRlcyB0aGUgbnVtYmVyIG9mXG4gXHRcdGRpcmVjdG9yaWVzIGZvciBlYWNoIERBTU9OIHByb2JlIG5hbWVkICcwJyB0byAnTi0xJyB1bmRlciB0aGVcbiBcdFx0cHJvYmVzLyBkaXJlY3RvcnkuXG4gXG4rV2hhdDpcdFx0L3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4va2RhbW9uZHMvXHUwMDNjS1x1MDAzZS9jb250ZXh0cy9cdTAwM2NDXHUwMDNlL21vbml0b3JpbmdfYXR0cnMvcHJvYmVzL1x1MDAzY1BcdTAwM2Uvd2VpZ2h0XG4rRGF0ZTpcdFx0SnVsIDIwMjZcbitDb250YWN0Olx0U0ogUGFyayBcdTAwM2NzakBrZXJuZWwub3JnXHUwMDNlXG4rRGVzY3JpcHRpb246XHRXcml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gdGhpcyBmaWxlIHNldHMgYW5kIGdldHMgdGhlXG4rXHRcdHBlci1wcm9iZSBhdHRyaWJ1dGUgd2VpZ2h0LlxuK1xuIFdoYXQ6XHRcdC9zeXMva2VybmVsL21tL2RhbW9uL2FkbWluL2tkYW1vbmRzL1x1MDAzY0tcdTAwM2UvY29udGV4dHMvXHUwMDNjQ1x1MDAzZS9tb25pdG9yaW5nX2F0dHJzL3Byb2Jlcy9cdTAwM2NQXHUwMDNlL2ZpbHRlcnMvbnJfZmlsdGVyc1xuIERhdGU6XHRcdE1heSAyMDI2XG4gQ29udGFjdDpcdFNKIFBhcmsgXHUwMDNjc2pAa2VybmVsLm9yZ1x1MDAzZVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9kYW1vbi91c2FnZS5yc3RcbmluZGV4IGIyNjQ5ZWEwMTFmOTMxLi5kYTVmOWFmZDA4YWVmOCAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vZGFtb24vdXNhZ2UucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2RhbW9uL3VzYWdlLnJzdFxuQEAgLTczLDkgKzczLDEwIEBAIGNvbW1hIChcIixcIikuXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiBpbnRlcnZhbHNfZ29hbC9hY2Nlc3NfYnAsYWdncnMsbWluX3NhbXBsZV91cyxtYXhfc2FtcGxlX3VzXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIG5yX3JlZ2lvbnMvbWluLG1heFxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiA6cmVmOmBwcm9iZXMgXHUwMDNjZGFtb25fdXNhZ2Vfc3lzZnNfcHJvYmVzXHUwMDNlYC9ucl9wcm9iZXNcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvZmlsdGVycy9ucl9maWx0ZXJzXG4tICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgMC90eXBlLG1hdGNoaW5nLGFsbG93LHBhdGhcbi0gICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiAuLi5cbisgICAg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvd2VpZ2h0XG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgZmlsdGVycy9ucl9maWx0ZXJzXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDAvdHlwZSxtYXRjaGluZyxhbGxvdyxwYXRoXG4rICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIC4uLlxuICAgICDilIIg4pSCIOKUgiDilIIg4pSCIOKUgiDilIIgLi4uXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIgOnJlZjpgdGFyZ2V0cyBcdTAwM2NzeXNmc190YXJnZXRzXHUwMDNlYC9ucl90YXJnZXRzXG4gICAgIOKUgiDilIIg4pSCIOKUgiDilIIg4pSCIDpyZWY6YDAgXHUwMDNjc3lzZnNfdGFyZ2V0XHUwMDNlYC9waWRfdGFyZ2V0LG9ic29sZXRlX3RhcmdldFxuQEAgLTI4Niw2ICsyODcsMTAgQEAgSW4gZWFjaCBwcm9iZSBkaXJlY3RvcnksIG9uZSBkaXJlY3RvcnksIGBgZmlsdGVyc2BgIGV4aXN0cy4gIFRoZSBkaXJlY3RvcnlcbiBjb250YWlucyBmaWxlcyBmb3IgaW5zdGFsbGluZyBmaWx0ZXJzIGZvciB0aGUgcHJvYmUsIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmVcbiB0aGUgZGF0YSBhdHRyaWJ1dGUgZm9yIHRoZSBwcm9iZS5cbiBcbitFYWNoIHByb2JlIGRpcmVjdG9yeSBhbHNvIGNvbnRhaW5zIGBgd2VpZ2h0YGAgZmlsZS4gIFJlYWRpbmcgZnJvbSBhbmQgd3JpdGluZ1xuK3RvIHRoZSBmaWxlIGdldHMgYW5kIHNldHMgdGhlIDpyZWY6YGF0dHJpYnV0ZXMtb25seSBtb25pdG9yaW5nXG4rXHUwMDNjZGFtb25fZGVzaWduX2F0dHJzX29ubHlfbW9uaXRvcmluZ1x1MDAzZWAgd2VpZ2h0IGZvciB0aGUgYXR0cmlidXRlIG9mIHRoZSBwcm9iZS5cbitcbiBJbiB0aGUgYmVnaW5uaW5nLCBgYGZpbHRlcnNgYCBkaXJlY3RvcnkgaGFzIG9ubHkgb25lIGZpbGUsIGBgbnJfZmlsdGVyc2BgLlxuIFdyaXRpbmcgYSBudW1iZXIgKGBgTmBgKSB0byB0aGUgZmlsZSBjcmVhdGVzIHRoZSBudW1iZXIgb2YgY2hpbGQgZGlyZWN0b3JpZXNcbiBuYW1lZCBgYDBgYCB0byBgYE4tMWBgLiAgRWFjaCBkaXJlY3RvcnkgcmVwcmVzZW50cyBlYWNoIGZpbHRlciBhbmQgd29ya3MgaW4gYVxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdCBiL0RvY3VtZW50YXRpb24vbW0vZGFtb24vZGVzaWduLnJzdFxuaW5kZXggNDU3ZDZlOGJjNzg3ODUuLmFlZDZjYjFjZjQ4MzEwIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9kYW1vbi9kZXNpZ24ucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2RhbW9uL2Rlc2lnbi5yc3RcbkBAIC0zMTYsNiArMzE2LDMxIEBAIEFub3RoZXIgd2F5IHRvIGRvIHRoaXMgZm9yIGhpZ2hlciBhY2N1cmFjeSBpcyB1c2luZyA6cmVmOmBEQU1PUyBmaWx0ZXJcbiBpbmZvcm1hdGlvbiBpbiBwYWdlIGxldmVsLiAgQnV0LCBiZWNhdXNlIGl0IGlzIG9wZXJhdGVkIGluIHBhZ2UgbGV2ZWwsIHRoZVxuIG92ZXJoZWFkIGlzIHByb3BvcnRpb25hbCB0byB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5LlxuIFxuKy4uIF9kYW1vbl9kZXNpZ25fYXR0cnNfb25seV9tb25pdG9yaW5nOlxuK1xuK0RhdGEgQXR0cmlidXRlcy1vbmx5IE1vbml0b3Jpbmdcbit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+XG4rXG4rRGF0YSBhY2Nlc3MgaXMgdGhlIHByaW1hcnkgbW9uaXRvcmluZyBpbmZvcm1hdGlvbiBmb3IgREFNT04uICBIZW5jZSBpdFxuKzpyZWY6YGFkanVzdHMgXHUwMDNjZGFtb25fZGVzaWduX2RhdGFfYXR0cnNfbW9uaXRvcmluZ1x1MDAzZWAgcmVnaW9ucyB1c2luZyB0aGUgYWNjZXNzXG4rOnJlZjpgY291bnRlciBcdTAwM2NkYW1vbl9kZXNpZ25fcmVnaW9uX2Jhc2VkX3NhbXBsaW5nXHUwMDNlYCAoYGBucl9hY2Nlc3Nlc2BgKS4gIEluIHNvbWVcbit1c2UgY2FzZXMsIGhvd2V2ZXIsIHVzZXJzIG1heSB3YW50IHNvbWUgb2YgOnJlZjpgYXR0cmlidXRlc1xuK1x1MDAzY2RhbW9uX2Rlc2lnbl9kYXRhX2F0dHJzX21vbml0b3JpbmdcdTAwM2VgIHRvIGJlIHRoZSBwcmltYXJ5IGluZm9ybWF0aW9uLlxuK1xuK0RhdGEgYXR0cmlidXRlcy1vbmx5IG1vbml0b3JpbmcgbW9kZSBzdXBwb3J0cyB0aGlzIHVzZSBjYXNlLiAgRm9yIHRoZSBtb2RlLFxuK2VhY2ggYXR0cmlidXRlIHByb2JlIGhhcyB0aGVpciBwcmlvcml0eSB3ZWlnaHQgdmFsdWUuICBVc2VycyBjYW4gZGVzY3JpYmUgYnlcbit3aGF0IGNvbWJpbmF0aW9uIG9mIHRoZSBhdHRyaWJ1dGVzIHRoZSBwcmltYXJ5IGluZm9ybWF0aW9uIGlzIGRlY2lkZWQsIGJ5XG4rc2V0dGluZyB0aGUgcHJpb3JpdHkgd2VpZ2h0IHZhbHVlLiAgSWYgdGhlIHRvdGFsIHN1bSBvZiB0aGUgd2VpZ2h0cyBpcyBub3Rcbit6ZXJvLCB0aGUgbW9kZSBpcyBlbmFibGVkLiAgVGhlIHJlZ2lvbnMgYWRqdXN0bWVudCBtZWNoYW5pc20gdXNlcyB0aGUgd2VpZ2h0ZWRcbitzdW0gb2YgdGhlIDpyZWY6YHByb2JlIGhpdCBjb3VudHMgXHUwMDNjZGFtb25fZGVzaWduX2RhdGFfYXR0cnNfbW9uaXRvcmluZ1x1MDAzZWAgaW5zdGVhZFxuK29mIGBgbnJfYWNjZXNzZXNgYCBpbiB0aGUgY2FzZS4gIFdoZW4gdGhlIG1vZGUgaXMgZW5hYmxlZCwgYWNjZXNzIG1vbml0b3JpbmcgaXNcbithdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYuICBUaGUgYWNjZXNzIGNvdW50ZXIgKGBgbnJfYWNjZXNzZXNgYCkgd2lsbCBhbHdheXMgYmVcbit6ZXJvIGFuZCBub3QgdXBkYXRlZC4gIEhlbmNlIHRoZSBtb2RlIGlzIGNhbGxlZCBEYXRhIEF0dHJpYnV0ZXMgXCJvbmx5XCJcbittb25pdG9yaW5nLlxuK1xuK1JlZmVyIHRvIHRoZSA6cmVmOmBhZG1pbiBndWlkZSBcdTAwM2NkYW1vbl91c2FnZV9zeXNmc19wcm9iZXNcdTAwM2VgIHRvIGtub3cgaG93IHVzZXJzXG4rY2FuIHVzZSB0aGUgbW9kZS5cbitcbiBEeW5hbWljIFRhcmdldCBTcGFjZSBVcGRhdGVzIEhhbmRsaW5nXG4gfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggNjNmNTk2OTU3YzFmMWYuLmY2OTQ0MmE5ZDQzMTI4IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC02NDcsNyArNjQ3LDEwIEBAIGVudW0gZGFtb25fb3BzX2lkIHtcbiAgKiBJdCBzaG91bGQgYWxzbyByZXR1cm4gbWF4IG51bWJlciBvZiBvYnNlcnZlZCBhY2Nlc3NlcyB0aGF0IG1hZGUgYXMgYSByZXN1bHRcbiAgKiBvZiBpdHMgdXBkYXRlLiAgVGhlIHZhbHVlIHdpbGwgYmUgdXNlZCBmb3IgcmVnaW9ucyBhZGp1c3RtZW50IHRocmVzaG9sZC5cbiAgKiBAYXBwbHlfcHJvYmVzIHNob3VsZCBhcHBseSB0aGUgZGF0YSBhdHRyaWJ1dGUgcHJvYmVzIHRvIGVhY2ggcmVnaW9uIGFuZFxuLSAqIGFjY29yZGluZ2x5IHVwZGF0ZSB0aGUgcHJvYmUgaGl0cyBjb3VudGVyIG9mIHRoZSByZWdpb24uXG4rICogYWNjb3JkaW5nbHkgdXBkYXRlIHRoZSBwcm9iZSBoaXRzIGNvdW50ZXIgb2YgdGhlIHJlZ2lvbi4gIEl0IHNob3VsZCBhbHNvXG4rICogc2V0IFx1MDAyNmRhbW9uX3JlZ2lvbi1cdTAwM2VzYW1wbGluZ19hZGRyIG9mIGVhY2ggcmVnaW9uIGlmIGBgc2V0X3NhbXBsZXNgYCBpcyB0cnVlLlxuKyAqIEl0IHNob3VsZCBhbHNvIHJldHVybiBtYXhpbXVtIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIHJlZ2lvbnMgaWZcbisgKiBgYHJldHVybl9tYXhfd3N1bWBgIGlzIHRydWUuXG4gICogQGdldF9zY2hlbWVfc2NvcmUgc2hvdWxkIHJldHVybiB0aGUgcHJpb3JpdHkgc2NvcmUgb2YgYSByZWdpb24gZm9yIGEgc2NoZW1lXG4gICogYXMgYW4gaW50ZWdlciBpbiBbMCwgXHUwMDI2REFNT1NfTUFYX1NDT1JFXS5cbiAgKiBAYXBwbHlfc2NoZW1lIGlzIGNhbGxlZCBmcm9tIEBrZGFtb25kIHdoZW4gYSByZWdpb24gZm9yIHVzZXIgcHJvdmlkZWRcbkBAIC02NjUsNyArNjY4LDggQEAgc3RydWN0IGRhbW9uX29wZXJhdGlvbnMge1xuIFx0dm9pZCAoKnVwZGF0ZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCk7XG4gXHR2b2lkICgqcHJlcGFyZV9hY2Nlc3NfY2hlY2tzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbiBcdHVuc2lnbmVkIGludCAoKmNoZWNrX2FjY2Vzc2VzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0KTtcbi1cdHZvaWQgKCphcHBseV9wcm9iZXMpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQpO1xuK1x0dW5zaWduZWQgaW50ICgqYXBwbHlfcHJvYmVzKShzdHJ1Y3QgZGFtb25fY3R4ICpjb250ZXh0LFxuK1x0XHRcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKTtcbiBcdGludCAoKmdldF9zY2hlbWVfc2NvcmUpKHN0cnVjdCBkYW1vbl9jdHggKmNvbnRleHQsXG4gXHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzY2hlbWUpO1xuIFx0dW5zaWduZWQgbG9uZyAoKmFwcGx5X3NjaGVtZSkoc3RydWN0IGRhbW9uX2N0eCAqY29udGV4dCxcbkBAIC03NjAsMTAgKzc2NCwxMiBAQCBzdHJ1Y3QgZGFtb25fZmlsdGVyIHtcbiAvKipcbiAgKiBzdHJ1Y3QgZGFtb25fcHJvYmUgLSBEYXRhIHJlZ2lvbiBhdHRyaWJ1dGUgcHJvYmUuXG4gICpcbisgKiBAd2VpZ2h0Olx0UmVsYXRpdmUgcHJpb3JpdHkgb2YgdGhlIGF0dHJpYnV0ZSBmb3IgdGhpcyBwcm9iZS5cbiAgKiBAZmlsdGVyczpcdEZpbHRlcnMgZm9yIGFzc2Vzc2luZyBpZiBhIGdpdmVuIHJlZ2lvbiBpcyBmb3IgdGhpcyBwcm9iZS5cbiAgKiBAbGlzdDpcdFNpYmxpbmdzIGxpc3QuXG4gICovXG4gc3RydWN0IGRhbW9uX3Byb2JlIHtcbitcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZpbHRlcnM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4gfTtcbkBAIC0xMDA2LDYgKzEwMTIsOCBAQCB1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiB1bnNpZ25lZCBjaGFyIGRhbW9uX3Byb2JlX2hpdHNfbXZzdW0oaW50IHByb2JlX2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiBcbiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbiBcdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDExNDczYWExZjcwZjQxLi44MDZhNjdkMDJhNmU5MCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMTY2LDYgKzE2Niw3IEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpXG4gXHRwID0ga21hbGxvY19vYmooKnApO1xuIFx0aWYgKCFwKVxuIFx0XHRyZXR1cm4gTlVMTDtcbitcdHAtXHUwMDNld2VpZ2h0ID0gMDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnAtXHUwMDNlZmlsdGVycyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwLVx1MDAzZWxpc3QpO1xuIFx0cmV0dXJuIHA7XG5AQCAtMjA4LDYgKzIwOSwxNyBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHAsIGMpIHtcbitcdFx0aWYgKHAtXHUwMDNld2VpZ2h0KVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiAvKlxuICAqIGRhbW9uX212c3VtKCkgLSBSZXR1cm5zIHBzZXVkbyBtb3Zpbmcgc3VtIHZhbHVlIGZvciBhIHRpbWUgd2luZG93LlxuICAqIEBjdXJyZW50X25yOlx0XHRUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgYWdncmVnYXRpb24gd2luZG93LlxuQEAgLTM5Miw2ICs0MDQsMzAgQEAgc3RhdGljIGJvb2wgZGFtb25faXNfbGFzdF9yZWdpb24oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdHJldHVybiBsaXN0X2lzX2xhc3QoXHUwMDI2ci1cdTAwM2VsaXN0LCBcdTAwMjZ0LVx1MDAzZXJlZ2lvbnNfbGlzdCk7XG4gfVxuIFxuKy8qKlxuKyAqIGRhbW9uX3Byb2JlX2hpdHNfd3N1bSgpIC0gUmV0dXJucyBwcm9iZSBoaXRzIHdlaWdodGVkIHN1bSBvZiBhIHJlZ2lvbi5cbisgKiBAcjpcdFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxuKyAqIEBsYXN0Olx0aWYgdGhlIHJlcXVlc3QgaXMgZm9yIGxhc3Qtd2luZG93IGFnZ3JlZ2F0ZWQgcHJvYmUgaGl0cy5cbisgKiBAY3R4Olx0Y29udGV4dCBvZiBcdTAwMjZyLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgd2VpZ2h0ZWQgc3VtIG9mIHByb2JlIGhpdHMgb2YgdGhlIHJlZ2lvbi5cbisgKi9cbit1bnNpZ25lZCBpbnQgZGFtb25fcHJvYmVfaGl0c193c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmU7XG4rXHR1bnNpZ25lZCBpbnQgc3VtID0gMDtcbitcdGludCBpID0gMDtcbitcbitcdGRhbW9uX2Zvcl9lYWNoX3Byb2JlKHByb2JlLCBjdHgpIHtcbitcdFx0aWYgKGxhc3QpXG4rXHRcdFx0c3VtICs9IHItXHUwMDNlbGFzdF9wcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4rXHRcdGVsc2VcbitcdFx0XHRzdW0gKz0gci1cdTAwM2Vwcm9iZV9oaXRzW2krK10gKiBwcm9iZS1cdTAwM2V3ZWlnaHQ7XG4rXHR9XG4rXHRyZXR1cm4gc3VtO1xuK31cbitcbiAvKlxuICAqIENoZWNrIHdoZXRoZXIgYSByZWdpb24gaXMgaW50ZXJzZWN0aW5nIGFuIGFkZHJlc3MgcmFuZ2VcbiAgKlxuQEAgLTEzMDIsNiArMTMzOCwzNCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZmlsdGVyc19kZWZhdWx0X3JlamVjdChzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdGRhbW9zX2ZpbHRlcnNfZGVmYXVsdF9yZWplY3QoXHUwMDI2cy1cdTAwM2VvcHNfZmlsdGVycyk7XG4gfVxuIFxuK3N0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWw7XG4rXHR1bnNpZ25lZCBjaGFyIG1heF9wcm9iZV9oaXRzO1xuK1x0c3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZTtcbitcdHVuc2lnbmVkIGludCB3c3VtLCB3c3VtX3RvX2FkZDtcbitcbitcdGlmICghZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xuK1x0aWYgKGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsIFx1MDAzZSBVOF9NQVgpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdC8qIGludmFsaWQgaWYgcHJvYmUgaGl0cyB3ZWlnaHRlZCBzdW0gY2FuIG92ZXJmbG93ICovXG4rXHRtYXhfcHJvYmVfaGl0cyA9IGRhbW9uX25yX3NhbXBsZXNfcGVyX2FnZ3IoXHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbitcdHdzdW0gPSAwO1xuK1x0ZGFtb25fZm9yX2VhY2hfcHJvYmUocHJvYmUsIGN0eCkge1xuK1x0XHRpZiAocHJvYmUtXHUwMDNld2VpZ2h0IFx1MDAzZSBVSU5UX01BWCAvIG1heF9wcm9iZV9oaXRzKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcdFx0d3N1bV90b19hZGQgPSBwcm9iZS1cdTAwM2V3ZWlnaHQgKiBtYXhfcHJvYmVfaGl0cztcbitcdFx0aWYgKFVJTlRfTUFYIC0gd3N1bSBcdTAwM2Mgd3N1bV90b19hZGQpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1x0XHR3c3VtICs9IHdzdW1fdG9fYWRkO1xuK1x0fVxuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogZGFtb3NfY29tbWl0X2Rlc3RzKCkgLSBDb3B5IG1pZ3JhdGlvbiBkZXN0aW5hdGlvbnMgZnJvbSBAc3JjIHRvIEBkc3QuXG4gICogQGRzdDpcdERlc3RpbmF0aW9uIHN0cnVjdHVyZSB0byB1cGRhdGUuXG5AQCAtMTY1OCw2ICsxNzIyLDcgQEAgc3RhdGljIGludCBkYW1vbl9jb21taXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxuIFx0ZGFtb25fZm9yX2VhY2hfcHJvYmVfc2FmZShkc3RfcHJvYmUsIG5leHQsIGRzdCkge1xuIFx0XHRzcmNfcHJvYmUgPSBkYW1vbl9udGhfcHJvYmUoaSsrLCBzcmMpO1xuIFx0XHRpZiAoc3JjX3Byb2JlKSB7XG4rXHRcdFx0ZHN0X3Byb2JlLVx1MDAzZXdlaWdodCA9IHNyY19wcm9iZS1cdTAwM2V3ZWlnaHQ7XG4gXHRcdFx0ZXJyID0gZGFtb25fY29tbWl0X2ZpbHRlcnMoZHN0X3Byb2JlLCBzcmNfcHJvYmUpO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuQEAgLTE2NzQsNiArMTczOSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fY29tbWl0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiBcdFx0aWYgKCFuZXdfcHJvYmUpXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGRhbW9uX2FkZF9wcm9iZShkc3QsIG5ld19wcm9iZSk7XG4rXHRcdG5ld19wcm9iZS1cdTAwM2V3ZWlnaHQgPSBzcmNfcHJvYmUtXHUwMDNld2VpZ2h0O1xuIFx0XHRlcnIgPSBkYW1vbl9jb21taXRfZmlsdGVycyhuZXdfcHJvYmUsIHNyY19wcm9iZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbkBAIC0xNzA0LDYgKzE3NzAsOSBAQCBzdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcbiBcdFx0fVxuIFx0fVxuIFxuK1x0aWYgKCFkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXMoc3JjKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4gXHRlcnIgPSBkYW1vbl9jb21taXRfc2NoZW1lcyhkc3QsIHNyYyk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTMyMjEsNiArMzI5MCwxNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0ZGFtb25fZGVzdHJveV9yZWdpb24ociwgdCk7XG4gfVxuIFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbWVyZ2Vfc2NvcmUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxuK1x0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGJvb2wgdXNlX3Byb2JlX2hpdHMpXG4re1xuK1x0aWYgKHVzZV9wcm9iZV9oaXRzKVxuK1x0XHRyZXR1cm4gZGFtb25fcHJvYmVfaGl0c193c3VtKHIsIGxhc3QsIGN0eCk7XG4rXHRpZiAobGFzdClcbitcdFx0cmV0dXJuIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcztcbitcdHJldHVybiByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuK31cbitcbiAvKlxuICAqIE1lcmdlIGFkamFjZW50IHJlZ2lvbnMgaGF2aW5nIHNpbWlsYXIgYWNjZXNzIGZyZXF1ZW5jaWVzXG4gICpcbkBAIC0zMjI5LDI0ICszMzA4LDM4IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gICogc3pfbGltaXRcdHNpemUgdXBwZXIgbGltaXQgb2YgZWFjaCByZWdpb25cbiAgKi9cbiBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbi1cdFx0XHRcdCAgIHVuc2lnbmVkIGxvbmcgc3pfbGltaXQpXG4rXHRcdHVuc2lnbmVkIGxvbmcgc3pfbGltaXQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCAqcHJldiA9IE5VTEwsICpuZXh0O1xuK1x0Ym9vbCB1c2VfcHJvYmVfaGl0cyA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XG4gXG4gXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7XG4tXHRcdGlmIChhYnMoci1cdTAwM2Vucl9hY2Nlc3NlcyAtIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcykgXHUwMDNlIHRocmVzKVxuK1x0XHR1bnNpZ25lZCBpbnQgc2NvcmUsIGxhc3Rfc2NvcmUsIGRpZmY7XG4rXG4rXHRcdHNjb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgZmFsc2UsIGN0eCwgdXNlX3Byb2JlX2hpdHMpO1xuK1x0XHRsYXN0X3Njb3JlID0gZGFtb25fbWVyZ2Vfc2NvcmUociwgdHJ1ZSwgY3R4LCB1c2VfcHJvYmVfaGl0cyk7XG4rXG4rXHRcdGlmIChhYnNfZGlmZihzY29yZSwgbGFzdF9zY29yZSkgXHUwMDNlIHRocmVzKVxuIFx0XHRcdHItXHUwMDNlYWdlID0gMDtcbi1cdFx0ZWxzZSBpZiAoKHItXHUwMDNlbnJfYWNjZXNzZXMgPT0gMCkgIT0gKHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9PSAwKSlcbitcdFx0ZWxzZSBpZiAoKHNjb3JlID09IDApICE9IChsYXN0X3Njb3JlID09IDApKVxuIFx0XHRcdHItXHUwMDNlYWdlID0gMDtcbiBcdFx0ZWxzZVxuIFx0XHRcdHItXHUwMDNlYWdlKys7XG4gXG4tXHRcdGlmIChwcmV2IFx1MDAyNlx1MDAyNiBwcmV2LVx1MDAzZWFyLmVuZCA9PSByLVx1MDAzZWFyLnN0YXJ0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgYWJzKHByZXYtXHUwMDNlbnJfYWNjZXNzZXMgLSByLVx1MDAzZW5yX2FjY2Vzc2VzKSBcdTAwM2M9IHRocmVzIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgZGFtb25fc3pfcmVnaW9uKHByZXYpICsgZGFtb25fc3pfcmVnaW9uKHIpIFx1MDAzYz0gc3pfbGltaXQpXG4tXHRcdFx0ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnModCwgcHJldiwgcik7XG4tXHRcdGVsc2Vcbi1cdFx0XHRwcmV2ID0gcjtcbitcdFx0aWYgKCFwcmV2KVxuK1x0XHRcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XG4rXHRcdGlmIChwcmV2LVx1MDAzZWFyLmVuZCAhPSByLVx1MDAzZWFyLnN0YXJ0KVxuK1x0XHRcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XG4rXHRcdGRpZmYgPSBhYnNfZGlmZihzY29yZSwgZGFtb25fbWVyZ2Vfc2NvcmUocHJldiwgZmFsc2UsIGN0eCxcbitcdFx0XHRcdFx0dXNlX3Byb2JlX2hpdHMpKTtcbitcdFx0aWYgKGRpZmYgXHUwMDNlIHRocmVzKVxuK1x0XHRcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XG4rXHRcdGlmIChkYW1vbl9zel9yZWdpb24ocHJldikgKyBkYW1vbl9zel9yZWdpb24ocikgXHUwMDNlIHN6X2xpbWl0KVxuK1x0XHRcdGdvdG8gc2V0X3ByZXZfY29udGludWU7XG4rXHRcdGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHQsIHByZXYsIHIpO1xuK1x0XHRjb250aW51ZTtcbitzZXRfcHJldl9jb250aW51ZTpcbitcdFx0cHJldiA9IHI7XG4gXHR9XG4gfVxuIFxuQEAgLTMyNzksNyArMzM3Miw3IEBAIHN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLFxuIFx0ZG8ge1xuIFx0XHRucl9yZWdpb25zID0gMDtcbiBcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbi1cdFx0XHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIHRocmVzaG9sZCwgc3pfbGltaXQpO1xuK1x0XHRcdGRhbW9uX21lcmdlX3JlZ2lvbnNfb2YodCwgdGhyZXNob2xkLCBzel9saW1pdCwgYyk7XG4gXHRcdFx0bnJfcmVnaW9ucyArPSBkYW1vbl9ucl9yZWdpb25zKHQpO1xuIFx0XHR9XG4gXHRcdHRocmVzaG9sZCA9IG1heCgxLCB0aHJlc2hvbGQgKiAyKTtcbkBAIC0zNjQzLDcgKzM3MzYsNiBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHggPSBkYXRhO1xuLVx0dW5zaWduZWQgaW50IG1heF9ucl9hY2Nlc3NlcyA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHN6X2xpbWl0ID0gMDtcbiBcbiBcdHByX2RlYnVnKFwia2RhbW9uZCAoJWQpIHN0YXJ0c1xcblwiLCBjdXJyZW50LVx1MDAzZXBpZCk7XG5AQCAtMzY3NiwyNSArMzc2OCwzOCBAQCBzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbiBcdFx0dW5zaWduZWQgbG9uZyBuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcztcbiBcdFx0dW5zaWduZWQgbG9uZyBuZXh0X29wc191cGRhdGVfc2lzID0gY3R4LVx1MDAzZW5leHRfb3BzX3VwZGF0ZV9zaXM7XG4gXHRcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsID0gY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcbitcdFx0Ym9vbCBhY2Nlc3NfY2hlY2tfZGlzYWJsZWQgPSBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhjdHgpO1xuK1x0XHR1bnNpZ25lZCBpbnQgbWF4X21lcmdlX3Njb3JlID0gMCwgbWF4X3dzdW07XG4rXHRcdGJvb2wgZ2V0X21heF93c3VtO1xuIFxuIFx0XHRpZiAoa2RhbW9uZF93YWl0X2FjdGl2YXRpb24oY3R4KSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0aWYgKGN0eC1cdTAwM2VvcHMucHJlcGFyZV9hY2Nlc3NfY2hlY2tzKVxuK1x0XHRpZiAoIWFjY2Vzc19jaGVja19kaXNhYmxlZCBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MpXG4gXHRcdFx0Y3R4LVx1MDAzZW9wcy5wcmVwYXJlX2FjY2Vzc19jaGVja3MoY3R4KTtcbiBcbiBcdFx0a2RhbW9uZF91c2xlZXAoc2FtcGxlX2ludGVydmFsKTtcbiBcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzKys7XG4gXG4tXHRcdGlmIChjdHgtXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKVxuLVx0XHRcdG1heF9ucl9hY2Nlc3NlcyA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbi1cdFx0aWYgKGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKVxuLVx0XHRcdGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCk7XG4rXHRcdGlmICghYWNjZXNzX2NoZWNrX2Rpc2FibGVkIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3BzLmNoZWNrX2FjY2Vzc2VzKVxuK1x0XHRcdG1heF9tZXJnZV9zY29yZSA9IGN0eC1cdTAwM2VvcHMuY2hlY2tfYWNjZXNzZXMoY3R4KTtcbitcdFx0aWYgKGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKSB7XG4rXHRcdFx0aWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxuK1x0XHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkKVxuK1x0XHRcdFx0Z2V0X21heF93c3VtID0gdHJ1ZTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRnZXRfbWF4X3dzdW0gPSBmYWxzZTtcbitcdFx0XHRtYXhfd3N1bSA9IGN0eC1cdTAwM2VvcHMuYXBwbHlfcHJvYmVzKGN0eCxcbitcdFx0XHRcdFx0YWNjZXNzX2NoZWNrX2Rpc2FibGVkLCBnZXRfbWF4X3dzdW0pO1xuK1x0XHRcdGlmIChnZXRfbWF4X3dzdW0pXG4rXHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgPSBtYXhfd3N1bTtcbitcdFx0fVxuIFxuIFx0XHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4gXHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSkge1xuIFx0XHRcdGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhjdHgsXG4tXHRcdFx0XHRcdG1heF9ucl9hY2Nlc3NlcyAvIDEwLFxuK1x0XHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcbiBcdFx0XHRcdFx0c3pfbGltaXQpO1xuIFx0XHRcdC8qIG9ubGluZSB1cGRhdGVzIG1pZ2h0IGJlIG1hZGUgKi9cbiBcdFx0XHRzel9saW1pdCA9IGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKGN0eCk7XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDYxNzI0NjQ5ODE3MzA0Li5iODVmODhhN2EzOGY0ZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC0xNjYsMTEgKzE2NiwxMyBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdHJldHVybiBwYXNzO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcbitcdFx0Ym9vbCBzZXRfc2FtcGxlcywgYm9vbCByZXR1cm5fbWF4X3dzdW0pXG4ge1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcbiBcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XG4gXHRzdHJ1Y3QgZGFtb25fcHJvYmUgKnA7XG4rXHR1bnNpZ25lZCBpbnQgbWF4X3dzdW0gPSAwO1xuIFxuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuQEAgLTE3OCw2ICsxODAsOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFx0XHRcdHBoeXNfYWRkcl90IHBhO1xuIFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG4rXHRcdFx0aWYgKHNldF9zYW1wbGVzKVxuK1x0XHRcdFx0ci1cdTAwM2VzYW1wbGluZ19hZGRyID0gZGFtb25fcmFuZChjdHgsIHItXHUwMDNlYXIuc3RhcnQsXG4rXHRcdFx0XHRcdFx0ci1cdTAwM2Vhci5lbmQpO1xuIFx0XHRcdHBhID0gZGFtb25fcGFfcGh5c19hZGRyKHItXHUwMDNlc2FtcGxpbmdfYWRkcixcbiBcdFx0XHRcdFx0Y3R4LVx1MDAzZWFkZHJfdW5pdCk7XG4gXHRcdFx0Zm9saW8gPSBkYW1vbl9nZXRfZm9saW8oUEhZU19QRk4ocGEpKTtcbkBAIC0xODgsOCArMTkzLDEyIEBAIHN0YXRpYyB2b2lkIGRhbW9uX3BhX2FwcGx5X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRcdFx0fVxuIFx0XHRcdGlmIChmb2xpbylcbiBcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4rXHRcdFx0aWYgKHJldHVybl9tYXhfd3N1bSlcbitcdFx0XHRcdG1heF93c3VtID0gbWF4KGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBmYWxzZSxcbitcdFx0XHRcdFx0XHRcdGN0eCksIG1heF93c3VtKTtcbiBcdFx0fVxuIFx0fVxuK1x0cmV0dXJuIG1heF93c3VtO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLmMgYi9tbS9kYW1vbi9zeXNmcy5jXG5pbmRleCA2ZDdlMzZjOWU1MDlkMi4uYjVmZTAzNmY3ODAxNTIgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9zeXNmcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy5jXG5AQCAtMTA2NSw2ICsxMDY1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfZmlsdGVyc19rdHlwZSA9IHtcbiBcbiBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUge1xuIFx0c3RydWN0IGtvYmplY3Qga29iajtcbitcdHVuc2lnbmVkIGludCB3ZWlnaHQ7XG4gXHRzdHJ1Y3QgZGFtb25fc3lzZnNfZmlsdGVycyAqZmlsdGVycztcbiB9O1xuIFxuQEAgLTExMDAsMTIgKzExMDEsMzUgQEAgc3RhdGljIHZvaWQgZGFtb25fc3lzZnNfcHJvYmVfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUgKnByb2JlKVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuK1x0XHRjaGFyICpidWYpXG4re1xuK1x0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlICpwcm9iZSA9IGNvbnRhaW5lcl9vZihrb2JqLFxuK1x0XHRcdHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSwga29iaik7XG4rXG4rXHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwiJXVcXG5cIiwgcHJvYmUtXHUwMDNld2VpZ2h0KTtcbit9XG4rXG4rc3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxuK1x0XHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxuK3tcbitcdHN0cnVjdCBkYW1vbl9zeXNmc19wcm9iZSAqcHJvYmUgPSBjb250YWluZXJfb2Yoa29iaixcbitcdFx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopO1xuK1x0aW50IGVyciA9IGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZwcm9iZS1cdTAwM2V3ZWlnaHQpO1xuK1xuK1x0cmV0dXJuIGVyciA/IGVyciA6IGNvdW50O1xuK31cbitcbiBzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19wcm9iZV9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxuIHtcbiBcdGtmcmVlKGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGFtb25fc3lzZnNfcHJvYmUsIGtvYmopKTtcbiB9XG4gXG4rc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ciA9XG4rXHRcdF9fQVRUUl9SV19NT0RFKHdlaWdodCwgMDYwMCk7XG4rXG4gc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX3Byb2JlX2F0dHJzW10gPSB7XG4rXHRcdTAwMjZkYW1vbl9zeXNmc19wcm9iZV93ZWlnaHRfYXR0ci5hdHRyLFxuIFx0TlVMTCxcbiB9O1xuIEFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfcHJvYmUpO1xuQEAgLTE5NjUsNiArMTk4OSw3IEBAIHN0YXRpYyBpbnQgZGFtb25fc3lzZnNfc2V0X3Byb2JlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXG4gXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRcdGRhbW9uX2FkZF9wcm9iZShjdHgsIHApO1xuIFx0XHRzeXNfcHJvYmUgPSBzeXNfcHJvYmVzLVx1MDAzZXByb2Jlc19hcnJbaV07XG4rXHRcdHAtXHUwMDNld2VpZ2h0ID0gc3lzX3Byb2JlLVx1MDAzZXdlaWdodDtcbiBcdFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlKHAsIHN5c19wcm9iZSk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGQ5NzI4MDI3MGMyN2I4Li42YWQ3MzU1OWRkOGVhYiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMjI2LDYgKzIyNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcmVnaW9uICpfX250aF9yZWdpb25fb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgaW50IGlkeClcbiBcbiBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIHtcbitcdHN0cnVjdCBkYW1vbl9jdHggKmN0eDtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnQ7XG4gXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyO1xuIFx0dW5zaWduZWQgbG9uZyBzYVtdID0gezAsIDEwMCwgMTE0LCAxMjIsIDEzMCwgMTU2LCAxNzAsIDE4NCwgMjMwfTtcbkBAIC0yMzYsMjAgKzIzNywyNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0dW5zaWduZWQgbG9uZyBlYWRkcnNbXSA9IHsxMTIsIDEzMCwgMTU2LCAxNzAsIDIzMCwgMTAxNzB9O1xuIFx0aW50IGk7XG4gXG4rXHRjdHggPSBkYW1vbl9uZXdfY3R4KCk7XG4rXHRpZiAoIWN0eClcbitcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcImN0eCBhbGxvYyBmYWlsXCIpO1xuK1xuIFx0dCA9IGRhbW9uX25ld190YXJnZXQoKTtcbi1cdGlmICghdClcbitcdGlmICghdCkge1xuK1x0XHRkYW1vbl9kZXN0cm95X2N0eChjdHgpO1xuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwidGFyZ2V0IGFsbG9jIGZhaWxcIik7XG4rXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHNhKTsgaSsrKSB7XG4gXHRcdHIgPSBkYW1vbl9uZXdfcmVnaW9uKHNhW2ldLCBlYVtpXSk7XG4gXHRcdGlmICghcikge1xuIFx0XHRcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xuK1x0XHRcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4gXHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInJlZ2lvbiBhbGxvYyBmYWlsXCIpO1xuIFx0XHR9XG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBucnNbaV07XG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG4tXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTkpO1xuK1x0ZGFtb25fbWVyZ2VfcmVnaW9uc19vZih0LCA5LCA5OTk5LCBjdHgpO1xuIFx0LyogMC0xMTIsIDExNC0xMzAsIDEzMC0xNTYsIDE1Ni0xNzAsIDE3MC0yMzAsIDIzMC0xMDE3MCAqL1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX25yX3JlZ2lvbnModCksIDZ1KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDY7IGkrKykge1xuQEAgLTI1OCw2ICsyNjYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5lbmQsIGVhZGRyc1tpXSk7XG4gXHR9XG4gXHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbitcdGRhbW9uX2Rlc3Ryb3lfY3R4KGN0eCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0Mzo1NC4xODg3MTcwMjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTEzNTEzODY1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgaW50cm9kdWNpbmcgYSBgd2VpZ2h0YCBhdHRyaWJ1dGUgdG8gREFNT04gcHJvYmVzLiBUaGlzIGlzIHByZXR0eSBzaWduaWZpY2FudDsgaXQncyBlbmFibGluZyBcIkRhdGEgQXR0cmlidXRlcy1vbmx5IE1vbml0b3JpbmcsXCIgd2hpY2ggY291bGQgb3BlbiB1cCBzb21lIGludGVyZXN0aW5nIHBvc3NpYmlsaXRpZXMuIEknbSBzZWVpbmcgaXQgdG91Y2ggcXVpdGUgYSBmZXcgZmlsZXM6IGBEb2N1bWVudGF0aW9uL2AsIGBpbmNsdWRlL2xpbnV4L2RhbW9uLmhgLCBjb3JlIERBTU9OIGZ1bmN0aW9uYWxpdHkgaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBtbS9kYW1vbi9wYWRkci5jYCwgdGhlIHN5c2ZzIGludGVyZmFjZSBpbiBgbW0vZGFtb24vc3lzZnMuY2AsIGFuZCBldmVuIGEgS1VuaXQgdGVzdCBmaWxlLCBgbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oYC4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgYnVnIGZpeC5cblxuU3BlY2lmaWNhbGx5LCBpdCdzIGFkZGluZyBhIG5ldyBgd2VpZ2h0YCBzeXNmcyBmaWxlLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAgaXMgYmVpbmcgdXBkYXRlZCB0byBsZXZlcmFnZSBhIGBkYW1vbl9tZXJnZV9zY29yZWAsIGFuZCBjcnVjaWFsbHksIGl0IHdpbGwgYmUgdXNpbmcgYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAgaWYgdGhlIHByb2JlIHdlaWdodHMgYXJlIGFjdGl2ZSwgd2hpY2gsIGlmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHdpbGwgYmUgY2hlY2tlZCBieSBgZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KWAuIEkgc2hvdWxkIGxvb2sgaW50byB0aGF0IGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgaG93IHdlaWdodHMgYXJlIGVuYWJsZWQuIEFsc28sIGBrZGFtb25kX2ZuYCBpcyBiZWluZyBtb2RpZmllZCB0byB1c2UgYG1heF93c3VtYCBhbmQgc2tpcCB0aGUgYWNjZXNzIGNoZWNrcyB3aGVuIHByb2JlIHdlaWdodHMgYXJlIGFjdGl2ZSBhbmQgYGFjY2Vzc19jaGVja19kaXNhYmxlZGAuXG5cbkJlZm9yZSBJIGRpdmUgdG9vIGRlZXAsIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gQWxyaWdodCwgSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS9kYW1vbi9LY29uZmlnYCBmb3IgdGhlIG5lY2Vzc2FyeSBjb25maWcgb3B0aW9uczogYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBhbmQgYENPTkZJR19EQU1PTl9QQUREUmAuXG5cbk5vdywgbGV0IG1lIHJ1biBhIHF1aWNrIHNlYXJjaCBvbiBgQ09ORklHX0RBTU9OYCB0aHJvdWdob3V0IHRoZSBrZXJuZWwgdHJlZSB0byBnZXQgYSBzZW5zZSBvZiB0aGUgZXhpc3RpbmcgdXNhZ2UgYW5kIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgZXhpc3RpbmcgaW5mcmFzdHJ1Y3R1cmUgYW5kIGhvdyB0aGlzIG5ldyB3ZWlnaHQgZmVhdHVyZSBmaXRzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MDA4LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg3LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTA6NDQ6MDUuMzIzODU3ODQzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjU2NDg3NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vS2NvbmZpZz0zPW1lbnUgXFxcIkRhdGEgQWNjZXNzIE1vbml0b3JpbmdcXFwiXFxubW0vZGFtb24vS2NvbmZpZy00LVxcbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cXG5tbS9kYW1vbi9LY29uZmlnLTYtXFx0Ym9vbCBcXFwiREFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xNC1cXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG5tbS9kYW1vbi9LY29uZmlnLTE2LVxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0yNS1cXG5tbS9kYW1vbi9LY29uZmlnOjI2OmNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy0yNy1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0zNy1cXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxcbm1tL2RhbW9uL0tjb25maWctMzktXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy00Ni1cXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxcbm1tL2RhbW9uL0tjb25maWctNDgtXFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNTUtXFxubW0vZGFtb24vS2NvbmZpZzo1Njpjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNTctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy02Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xcbm1tL2RhbW9uL0tjb25maWctNjktXFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy03NS1cXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy03Ny1cXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctODctXFxubW0vZGFtb24vS2NvbmZpZzo4ODpjb25maWcgREFNT05fUkVDTEFJTVxcbm1tL2RhbW9uL0tjb25maWctODktXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTk5LVxcbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbm1tL2RhbW9uL0tjb25maWctMTAxLVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxcbm1tL2RhbW9uL0tjb25maWctMTA5LVxcdGJvb2wgXFxcIkJ1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cXG5tbS9kYW1vbi9LY29uZmlnOjExNjpjb25maWcgREFNT05fU1RBVF9FTkFCTEVEX0RFRkFVTFRcXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cXHRib29sIFxcXCJFbmFibGUgREFNT05fU1RBVCBieSBkZWZhdWx0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDowNS41ODA0Mjg5MzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg0OTk1NzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIERBTU9OIENvcmUqKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIERBTU9OIGNvbmZpZ3VyYXRpb25zIGhlcmU6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUEFERFJgLiBOb3csIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgYXJlIGRyaXZpbmcgdGhlIGFjdGlvbi4gTGV0J3Mgc2VlLi4uIHRoZSBtb3N0IGNyaXRpY2FsIG9uZXMgc2VlbSB0byBiZTogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYCwgYGtkYW1vbmRfZm5gLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCwgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLCBhbmQgdGhlbiB0aGUgc3lzZnMgaW50ZXJmYWNlIGZ1bmN0aW9ucywgYHdlaWdodF9zdG9yZWAsIGFuZCBgd2VpZ2h0X3Nob3dgLiBUaGUgZmlyc3QgZnVuY3Rpb24gbGlzdGVkLCBgZGFtb25fcHJvYmVfaGl0c193c3VtYCwgbG9va3MgbGlrZSB0aGUgbW9zdCBpbnRlcmVzdGluZyBvbmUgdG8gc3RhcnQgd2l0aCwgc28gSSdsbCBjaGVjayBpdHMgbG9jYXRpb24gaW4gYG1tL2RhbW9uL2NvcmUuY2AuIExldCdzIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGlzIGlzIGFsbCB3b3JraW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDUxMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDowOS43NjU0MjcxNTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ1NDkxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NDAxPXN0YXRpYyBib29sIGRhbW9uX2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDA3LS8qKlxcbm1tL2RhbW9uL2NvcmUuYzo0MDg6ICogZGFtb25fcHJvYmVfaGl0c193c3VtKCkgLSBSZXR1cm5zIHByb2JlIGhpdHMgd2VpZ2h0ZWQgc3VtIG9mIGEgcmVnaW9uLlxcbm1tL2RhbW9uL2NvcmUuYy00MDktICogQHI6XFx0XFx0cmVnaW9uIHRvIGdldCB0aGUgd2VpZ2h0ZWQgc3VtIG9mLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQxNC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDE1OnVuc2lnbmVkIGludCBkYW1vbl9wcm9iZV9oaXRzX3dzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBsYXN0LFxcbm1tL2RhbW9uL2NvcmUuYy00MTYtXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyOTM9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tZXJnZV9zY29yZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGxhc3QsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzI5Ni1cXHRpZiAodXNlX3Byb2JlX2hpdHMpXFxubW0vZGFtb24vY29yZS5jOjMyOTc6XFx0XFx0cmV0dXJuIGRhbW9uX3Byb2JlX2hpdHNfd3N1bShyLCBsYXN0LCBjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMjk4LVxcdGlmIChsYXN0KVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz0xNjk9c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xOTYtXFx0XFx0XFx0aWYgKHJldHVybl9tYXhfd3N1bSlcXG5tbS9kYW1vbi9wYWRkci5jOjE5NzpcXHRcXHRcXHRcXHRtYXhfd3N1bSA9IG1heChkYW1vbl9wcm9iZV9oaXRzX3dzdW0ociwgZmFsc2UsXFxubW0vZGFtb24vcGFkZHIuYy0xOTgtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y3R4KSwgbWF4X3dzdW0pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDowOS44Mjk5ODA4MTJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTY5MjAxODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc2l0dWF0aW9uLCBmaWx0ZXJlZCB0aHJvdWdoIG15IGV4cGVydCBsZW5zOlxuXG4qKkFuYWx5emluZyBEQU1PTiBQcm9iaW5nIEZ1bmN0aW9ucyoqXG5cbkFscmlnaHQsIG15IGJyYWluIGlzIGZvY3VzZWQuIE15IHByaW9yaXRpZXMgaW4gdGhpcyBEQU1PTiBjb250ZXh0IGFyZSBjbGVhcmx5IGxhaWQgb3V0LiBJIG5lZWQgdG8gemVybyBpbiBvbiB0aGVzZSBmdW5jdGlvbnM6IGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb25fbWVyZ2Vfc2NvcmVgLCBgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zYCwgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLCBgd2VpZ2h0X3N0b3JlYCwgYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AsIGFuZCBga2RhbW9uZF9mbmAuIFRob3NlIGFyZSB0aGUgY29yZSBjb21wb25lbnRzIHRoYXQgbmVlZCB0aGUgY2xvc2VzdCBzY3J1dGlueS4gSXQncyBhIHZlcnkgdGFyZ2V0ZWQgbGlzdCwgc28gdGhlIGdvYWwgaXMgbGlrZWx5IGEgc3BlY2lmaWMgaXNzdWUuXG5cbk15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBwYXJhbWV0ZXJzIGJlaW5nIGZlZCBpbnRvIHRoaXMgYXJlIHZhbGlkLCBiZWNhdXNlIGl0IGlzIHRoZSBnYXRla2VlcGVyIG9mIHdoYXQgaXMgdmFsaWQsIGFuZCB0aGVyZWZvcmUgY29ycmVjdCBmdW5jdGlvbmluZyBvZiB0aGUgdW5kZXJseWluZyBzeXN0ZW0uIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBwcm9iZXMgYXJlIGJlaW5nIGluaXRpYXRlZCBhbmQgd2hhdCBjaGVja3MgYW5kIGJhbGFuY2VzIGFyZSBpbXBsZW1lbnRlZCBhdCB0aGUgdmVyeSBiZWdpbm5pbmcgb2YgdGhlIERBTU9OIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMzQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTA6NDQ6MTUuMzk5MTg1NTc3WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDIwODMxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0xMzMwPXN0YXRpYyB2b2lkIGRhbW9zX3NldF9maWx0ZXJzX2RlZmF1bHRfcmVqZWN0KHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzQwLVxcbm1tL2RhbW9uL2NvcmUuYzoxMzQxOnN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTEzNDIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE3NTA9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTc3Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MTc3MzpcXHRpZiAoIWRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtcyhzcmMpKVxcbm1tL2RhbW9uL2NvcmUuYy0xNzc0LVxcdFxcdHJldHVybiAtRUlOVkFMO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDoxNS41NjMzOTgzODhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkxNzY2NjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IHVzZXIgYW5kIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgV2VpZ2h0IFN0b3JlKipcblxuUmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IGB3ZWlnaHRfc3RvcmVgLiBJIG5lZWQgdG8gYXNzZXNzIGl0cyBzdGF0ZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBpbnRlZ3JpdHkuIElzIGl0IHBvcHVsYXRlZCBjb3JyZWN0bHk/IEFyZSB0aGUgd2VpZ2h0cyBpbiB0aGUgZm9ybWF0IEkgZXhwZWN0LCBvciBkaWQgc29tZXRoaW5nIHVwc3RyZWFtIG1lc3Mgd2l0aCB0aGUgZGF0YT8gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IHVuZXhwZWN0ZWQgdmFsdWVzIGltbWVkaWF0ZWx5LiBXaGF0IGFyZSB0aGUgcG90ZW50aWFsIGRvd25zdHJlYW0gZWZmZWN0cyBpZiB0aGUgd2VpZ2h0cyBhcmUgY29ycnVwdGVkIG9yIG1pc2NhbGlicmF0ZWQ/IERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCByYW5nZSBmcm9tIHN1YnRsZSBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiB0byBvdXRyaWdodCBtb2RlbCBmYWlsdXJlLiBNeSBtaW5kIGlzIGFscmVhZHkgcnVubmluZyB0aHJvdWdoIHBvdGVudGlhbCBkZWJ1Z2dpbmcgc2NlbmFyaW9zLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGB3ZWlnaHRfc3RvcmVgIGlzbid0IHNpbGVudGx5IGJyb2tlbiBiZWZvcmUgSSBwcm9jZWVkLiBUaGlzIGNvdWxkIHNhdmUgbWUgYSBoZWFkYWNoZSBkb3duIHRoZSBsaW5lLCBJIGtub3cgZnJvbSBleHBlcmllbmNlLiBMZXQncyBzZWUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5MTUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjE5LjI1NTE2NzE3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAyMDkxNzQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndlaWdodF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jPTIwODA9c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3Nob3coXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMtMjA4OC1cXG5tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmM6MjA4OTpzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwOTAtXFx0XFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MTEwND1zdGF0aWMgc3NpemVfdCB3ZWlnaHRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0xMTEyLVxcbm1tL2RhbW9uL3N5c2ZzLmM6MTExMzpzdGF0aWMgc3NpemVfdCB3ZWlnaHRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0xMTE0LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjE5LjM1NzI2MzI5MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjA3NTI1MTY2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBEQU1PTiBDb21wb25lbnRzKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYGRhbW9uX3Byb2JlX2hpdHNfd3N1bWAsIGBkYW1vbl9tZXJnZV9zY29yZWAsIGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgLCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCwgYW5kIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYC4gQW5kIHRoZSBhc3NvY2lhdGVkIGNvbmZpZ3MgYXJlIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUEFERFJgLiBTZWVtcyBsaWtlIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgYSBEQU1PTiBzZXR1cC5cblxuTm93LCB3YWl0IGEgc2Vjb25kLi4uIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYC4uLiB0aGF0IHJpbmdzIGEgYmVsbC4gIFRoYXQgbGlrZWx5IGhhbmRsZXMgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlIGZvciBwcm9iZSBjb25maWd1cmF0aW9uLiAgVGhhdCdzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQsIHNvIHRvIHNwZWFrLiAgSSdkIGJldHRlciB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgdGhhdCBvbmUuICBJdCBzaG91bGQgYmUgaW4gYG1tL2RhbW9uL3N5c2ZzLmNgLCByaWdodD8gIExldCdzIGdvIHRha2UgYSBwZWVrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjM5NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDozMS40MzI1MTY3MzlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyOTg5ODI3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9zeXNmc19zZXRfcHJvYmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9zeXNmcy5jPTE5Njc9c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmUoc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSxcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTk3Ny1cXG5tbS9kYW1vbi9zeXNmcy5jOjE5Nzg6c3RhdGljIGludCBkYW1vbl9zeXNmc19zZXRfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9zeXNmcy5jLTE5NzktXFx0XFx0c3RydWN0IGRhbW9uX3N5c2ZzX3Byb2JlcyAqc3lzX3Byb2JlcylcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjA5ND1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2FwcGx5X2lucHV0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIxMTAtXFx0XFx0cmV0dXJuIGVycjtcXG5tbS9kYW1vbi9zeXNmcy5jOjIxMTE6XFx0ZXJyID0gZGFtb25fc3lzZnNfc2V0X3Byb2JlcyhjdHgsIHN5c19jdHgtXFx1MDAzZWF0dHJzLVxcdTAwM2Vwcm9iZXMpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjExMi1cXHRpZiAoZXJyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDozMS42NjI0MjA1NjlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUyNDQzNTk5MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aG9zZSBmdW5jdGlvbnMgaW4gYSBEQU1PTiBjb250ZXh0OlxuXG4qKkRBTU9OIFByb2JlIGFuZCBSZWdpb24gTWFuYWdlbWVudCBSZXZpZXcqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IEknbSBnb2luZyB0byBhcHByb2FjaCB0aGlzIERBTU9OIGFuYWx5c2lzLiBJIG5lZWQgdG8gYmUgc3VyZSB0byBpbmNsdWRlIHRoZSBgZGFtb25fc3lzZnNfc2V0X3Byb2Jlc2AgZnVuY3Rpb24gaW4gbXkgYXNzZXNzbWVudC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBwcm9iZSBwYXJhbWV0ZXJzIGFyZSBzZXQgYW5kIGNvbmZpZ3VyZWQgYXQgdGhlIHVzZXIgbGV2ZWwsIHdoaWNoIGRpcmVjdGx5IGltcGFjdHMgREFNT04ncyBiZWhhdmlvci4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHRoYXQgaW50ZXJhY3Rpb24uXG5cblRoZW4sIG1vdmluZyBvbiwgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgIGlzIGEga2V5IGFyZWEgdG8gcmUtZXhhbWluZS4gUmVnaW9uIG1lcmdpbmcgaXMgYXQgdGhlIGhlYXJ0IG9mIERBTU9OJ3MgZWZmaWNpZW5jeSwgYW5kIHRoaXMgZnVuY3Rpb24gZ292ZXJucyBob3cgcmVnaW9ucyBhcmUgY29tYmluZWQgYmFzZWQgb24gYWNjZXNzIHBhdHRlcm5zIG9yIG90aGVyIGNyaXRlcmlhLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBjb25kaXRpb25zIGFuZCBhbGdvcml0aG1zIGVtcGxveWVkIGhlcmUuIFRoZSBzcGVjaWZpY3Mgb2YgdGhlIG1lcmdlIGxvZ2ljIGFyZSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgREFNT04gZHluYW1pY2FsbHkgYWRhcHRzIHRvIGNoYW5naW5nIG1lbW9yeSBhY2Nlc3MgY2hhcmFjdGVyaXN0aWNzLCBhbmQgc28sIGNyaXRpY2FsIHRvIGFueSBwZXJmb3JtYW5jZSBhbmQgb3ZlcmhlYWQgZXZhbHVhdGlvbnMuIEkgbmVlZCB0byByZWZyZXNoIG15c2VsZiBvbiBob3cgREFNT04gZGVjaWRlcyB0byBtZXJnZSBvciBub3QgdG8gbWVyZ2UgdGhlc2UgcmVnaW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwMzIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDo0Ni45MDY3ODI5ODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTM3MTgzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MzI5Mz1zdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX21lcmdlX3Njb3JlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgbGFzdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzA5LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMzEwOnN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbm1tL2RhbW9uL2NvcmUuYy0zMzExLVxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfbGltaXQsIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzYzPXN0YXRpYyB2b2lkIGtkYW1vbmRfbWVyZ2VfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjLCB1bnNpZ25lZCBpbnQgdGhyZXNob2xkLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzNzQtXFx0XFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MzM3NTpcXHRcXHRcXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIHRocmVzaG9sZCwgc3pfbGltaXQsIGMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzc2LVxcdFxcdFxcdG5yX3JlZ2lvbnMgKz0gZGFtb25fbnJfcmVnaW9ucyh0KTtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0yMjc9c3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0yNTktXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjI2MDpcXHRkYW1vbl9tZXJnZV9yZWdpb25zX29mKHQsIDksIDk5OTksIGN0eCk7XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTI2MS1cXHQvKiAwLTExMiwgMTE0LTEzMCwgMTMwLTE1NiwgMTU2LTE3MCwgMTcwLTIzMCwgMjMwLTEwMTcwICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjQ3LjAxODE2MDQ5OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTY4NDI4NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqUHJvY2Vzc2luZyBhIENvZGUgSW50ZWdyYXRpb24qKlxuXG5SaWdodCwgSSBuZWVkIHRvIGJyaW5nIGluIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHksIGFuZCBJJ20gdGhpbmtpbmcgSSdsbCBuZWVkIHRvIHdvcmsgd2l0aCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCDigJMgaXQgbGlrZWx5IGhhbmRsZXMgaG93IHdlIGNvbWJpbmUgdGhlc2Ugc3BlY2lmaWMgcmVnaW9ucyBpbiB0aGUgZGF0YXNldC5cblxuQmVmb3JlIEkgY29tbWl0IHRvIHVzaW5nIHRoYXQgdGhvdWdoLCBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIGBrZGFtb25kX2ZuYCwgYXMgaXQgc291bmRzIGxpa2UgYW4gaW1wb3J0YW50IHBpZWNlIG9mIHRoZSBmcmFtZXdvcmsgYW5kIGNvdWxkIHZlcnkgd2VsbCBhZmZlY3Qgb3IgYmUgYWZmZWN0ZWQgYnkgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgLiBVbmRlcnN0YW5kaW5nIHRoZSBleGFjdCByb2xlIG9mIGBrZGFtb25kX2ZuYCBpcyBjcnVjaWFsIGJlZm9yZSBwcm9jZWVkaW5nLiBOZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbid0IGludHJvZHVjZSBhbnkgY29uZmxpY3RzIG9yIGluZWZmaWNpZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc3NCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjUwLjU4NjU5MTQ1WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODg1Mjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrZGFtb25kX2ZuXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9MTAxMj1zdGF0aWMgYm9vbCBkYW1vbl92YWxpZF9pbnRlcnZhbHNfZ29hbChzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzQtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXFxubW0vZGFtb24vY29yZS5jOjEwMzU6ICogd2hpbGUgdGhlIGtkYW1vbmQgaXMgbm90IHlldCBzdGFydGVkLCBhbmQgaW5zaWRlIG9mIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTAzNi0gKlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEwMzktICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbm1tL2RhbW9uL2NvcmUuYzoxMDQwOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxcbm1tL2RhbW9uL2NvcmUuYy0xMDQxLSAqIGFwcGx5aW5nIGF1dG8tdHVuZWQgbW9uaXRvcmluZyBpbnRlcnZhbHMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTA0Nz1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDczLVxcdC8qXFxubW0vZGFtb24vY29yZS5jOjEwNzQ6XFx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXFxubW0vZGFtb24vY29yZS5jLTEwNzUtXFx0ICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkwND1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyMS1cXG5tbS9kYW1vbi9jb3JlLmM6MTkyMjpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxubW0vZGFtb24vY29yZS5jLTE5MjMtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkzMj1zdGF0aWMgaW50IF9fZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5MzktXFx0XFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTk0MDpcXHRcXHRjdHgtXFx1MDAzZWtkYW1vbmQgPSBrdGhyZWFkX3J1bihrZGFtb25kX2ZuLCBjdHgsIFxcXCJrZGFtb25kLiVkXFxcIixcXG5tbS9kYW1vbi9jb3JlLmMtMTk0MS1cXHRcXHRcXHRcXHRucl9ydW5uaW5nX2N0eHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzY9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspXFxubW0vZGFtb24vY29yZS5jOjIwNDE6XFx0XFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjA0Mi1cXHRcXHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzcxND1zdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzM1LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNzM2OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbm1tL2RhbW9uL2NvcmUuYy0zNzM3LXtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNDk1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MjEtICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE1MjI6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXFxcIm1tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVxcXCIpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE1MjMtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjUwLjY0NTQ0OTI0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjQwNDk2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyBhbmQgSW50ZWdyYXRpbmcgYGtkYW1vbmRfZm5gIGFuZCBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIGl0LiBGaXJzdCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZnVsbHkgdXAgdG8gc3BlZWQgb24gdGhlIGN1cnJlbnQgc3RhdGUgb2YgYWZmYWlycy4gSSdsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gaW5jbHVkZSBga2RhbW9uZF9mbmAgaW4gdGhlIGVxdWF0aW9uLiBUaGF0J3MgYSBjcnVjaWFsIGNvbXBvbmVudCwgc28gSSBkb24ndCB3YW50IHRvIG92ZXJsb29rIHRoYXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoaW4gdGhpcyBzeXN0ZW0uXG5cbkFuZCB0aGVuLCBJIHNob3VsZCBjcm9zcy1yZWZlcmVuY2UgaXQgd2l0aCB0aGUgZnVuY3Rpb24sIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLiBJIHJlbWVtYmVyIHRoYXQgb25lLi4uIGl0J3MgcGl2b3RhbCwgc28gSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayB0aGUgaW5wdXRzLCBvdXRwdXRzLCBhbmQgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGNsZWFyIG9uIGhvdyB0aG9zZSB0d28gZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHksIGludGVyYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDkzNiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ0OjUzLjg2OTUwMTExMloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjAwODAxOTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25fcGFfYXBwbHlfcHJvYmVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9wYWRkci5jPTE1Mz1zdGF0aWMgYm9vbCBkYW1vbl9wYV9maWx0ZXJfcGFzcyhwaHlzX2FkZHJfdCBwYSwgc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtMTY4LVxcbm1tL2RhbW9uL3BhZGRyLmM6MTY5OnN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfYXBwbHlfcHJvYmVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG5tbS9kYW1vbi9wYWRkci5jLTE3MC1cXHRcXHRib29sIHNldF9zYW1wbGVzLCBib29sIHJldHVybl9tYXhfd3N1bSlcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9NDQ3PXN0YXRpYyBpbnQgX19pbml0IGRhbW9uX3BhX2luaXRjYWxsKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9wYWRkci5jLTQ1NC1cXHRcXHQuY2hlY2tfYWNjZXNzZXMgPSBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyxcXG5tbS9kYW1vbi9wYWRkci5jOjQ1NTpcXHRcXHQuYXBwbHlfcHJvYmVzID0gZGFtb25fcGFfYXBwbHlfcHJvYmVzLFxcbm1tL2RhbW9uL3BhZGRyLmMtNDU2LVxcdFxcdC50YXJnZXRfdmFsaWQgPSBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDo1My45Mjk1ODg5MjFaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5OTA1MjU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHRha2luZyBvbiB0aGUgcGVyc29uYSB5b3UndmUgcmVxdWVzdGVkLCBzcGVha2luZyBhcyBhbiBleHBlcnQ6XG5cbioqQXNzZXNzbWVudCBhbmQgVmVyaWZpY2F0aW9uIG9mIENvcmUgRnVuY3Rpb25hbGl0eSoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaGFzIG1lIGZvY3VzaW5nIG9uIGEgY3J1Y2lhbCBpbnRlZ3JhdGlvbiBwb2ludDogSSdtIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBmdW5jdGlvbiBpcyBmdW5jdGlvbmluZyBhcyBleHBlY3RlZC4gSXQncyB0aGUgbHluY2hwaW4gZm9yIFtpbnNlcnQgZXhwZXJ0LWxldmVsIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCB0aGlzIGZ1bmN0aW9uIGRvZXMg4oCTIGUuZy4sIHByb2JlIGFwcGxpY2F0aW9uLCBwb3RlbnRpYWxseSBwZXJmb3JtYW5jZSBkYXRhIGluamVjdGlvbiwgb3Igc29tZSBvdGhlciBrZXkgcGFydCBvZiB0aGUgc3lzdGVtXS4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0cyBiZWhhdmlvdXIgaXMgYWxpZ25lZCB3aXRoIG15IGRlc2lnbiBzcGVjaWZpY2F0aW9ucy5cblxuQmV5b25kIHRoYXQsIEknbSB0aGlua2luZyBhYm91dCB0d28gbGlrZWx5IHJlbGF0ZWQgYXNwZWN0cyB0aGF0IEknbGwgbmVlZCB0byBjaGVjaywgYW5kIHRob3NlIGFyZSBgd2VpZ2h0X3N0b3JlYCBhbmQgYHdlaWdodF9zaG93YC4gSSdtIGFzc3VtaW5nLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCB0aGF0IHRoZXNlIHJlbGF0ZSB0byBob3cgc29tZSBmb3JtIG9mIHdlaWdodGluZyBtZWNoYW5pc20gaXMgbWFuYWdlZC4gR2l2ZW4gYGRhbW9uX3BhX2FwcGx5X3Byb2Jlc2AsIEkgZXhwZWN0IHRoZXNlIGxpa2VseSByZWxhdGUgdG8gaG93IHByb2JlcyBhcmUgd2VpZ2h0ZWQgYW5kIGhvdyB0aG9zZSB3ZWlnaHRzIGFyZSByZXRyaWV2ZWQgb3IgZGlzcGxheWVkLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhvc2Ugd2VpZ2h0cyBhcmUgY29ycmVjdGx5IHN0b3JlZCwgcmV0cmlldmVkLCBhbmQgdGhhdCBhbnkgdmlzdWFsIHJlcHJlc2VudGF0aW9uIChpZiB0aGVyZSBpcyBvbmUpIGlzIGFjY3VyYXRlLiBUaGVzZSBhcmUga2V5IGFyZWFzIHRvIG1vbml0b3IgZm9yIHBlcmZvcm1hbmNlIGFuZCBhY2N1cmFjeS4gVGhleSBtaWdodCBiZSBhIHNvdXJjZSBvZiBwZXJmb3JtYW5jZSBkZWdyYWRhdGlvbiwgb3IgZXJyb3JzLCBzbyBhIHRob3JvdWdoIGNoZWNrIGlzIG5lY2Vzc2FyeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU0MzksIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDo1Ny4zMjg2NDQwMTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MTAyNDM3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3ZWlnaHRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYz0yMDgwPXN0YXRpYyBzc2l6ZV90IHdlaWdodF9zaG93KFxcbi0tXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jLTIwODgtXFxubW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jOjIwODk6c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYy0yMDkwLVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTExMDQ9c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmMtMTExMi1cXG5tbS9kYW1vbi9zeXNmcy5jOjExMTM6c3RhdGljIHNzaXplX3Qgd2VpZ2h0X3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMTExNC1cXHRcXHRzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NDo1Ny40ODk2NzQxMDVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQxMDM3NzIwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIGNvbnNpZGVyaW5nIG15IGV4cGVydGlzZTpcblxuKipSZXZpZXdpbmcgREFNT04ncyBDb3JlIENvbXBvbmVudHMqKlxuXG5BbHJpZ2h0LCBsZXQncyB0YWtlIGEgbG9vayBhdCB3aGF0IEkndmUgZ290IGluIG15IGhlYWQgcmlnaHQgbm93LCBmb2N1c2luZyBvbiB0aGUgY29yZSBEQU1PTiBjb21wb25lbnRzLiBJIG5lZWQgdG8ga2VlcCBgd2VpZ2h0X3N0b3JlYCBpbiBtaW5kLCBvYnZpb3VzbHkg4oCTIGl0J3MgY3J1Y2lhbC4gSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgZnVuY3Rpb25zLiBGaXJzdCwgSSBoYXZlIGBkYW1vbl9wcm9iZV9oaXRzX3dzdW1gLCBgZGFtb25fbWVyZ2Vfc2NvcmVgLCBhbmQgYGRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc2AuIFRob3NlIGFyZSBlc3NlbnRpYWwgZm9yIHRoZSBwcm9iaW5nIGFuZCBzY29yaW5nIHBhcnQgb2YgdGhlIERBTU9OIGltcGxlbWVudGF0aW9uLCBoYW5kbGluZyB2YWxpZGF0aW9uIGFuZCBzdW1tYXJpemF0aW9uLiBUaGVuIHRoZXJlJ3MgYGRhbW9uX3N5c2ZzX3NldF9wcm9iZXNgLCB3aGljaCBpcyB0aGUgaW50ZXJmYWNlIHRocm91Z2ggd2hpY2ggdXNlcnMgY2FuIHR3ZWFrIHRoZSBwcm9iaW5nIHBhcmFtZXRlcnMuIE5leHQsIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYCwgYW5kIGBrZGFtb25kX2ZuYCwgc28gdGhvc2UgaGFuZGxlIHJlZ2lvbiBtYW5hZ2VtZW50IGFuZCBiYWNrZ3JvdW5kIGRhZW1vbiBvcGVyYXRpb25zLiBgZGFtb25fcGFfYXBwbHlfcHJvYmVzYCBpcyBpbXBvcnRhbnQuIEFuZCBsYXN0bHksIGxldCdzIGluY2x1ZGUgYHdlaWdodF9zdG9yZWAuXG5cbk5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gV2UgaGF2ZSB0aGUgdXN1YWwgc3VzcGVjdHM6IGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCBgREFNT05fUEFERFJgLiBXYWl0LCBub3cgdGhhdCBJIGNvbnNpZGVyIHRoYXQsIGRvZXMgYERBTU9OX1ZBRERSYCBoYXZlIHRoZSBgYXBwbHlfcHJvYmVzYCBjb21wb25lbnQgaW4gdGhlIGltcGxlbWVudGF0aW9uPyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgcGFydCBhbmQgbWFrZSBzdXJlIGl0J3MgYWxsIGNvbnNpc3RlbnQgaW4gdGhlIGNvZGUuIFRoYXTigJlzIHByb2JhYmx5IHRoZSBuZXh0IHRoaW5nIEkgd2lsbCBsb29rIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA0MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NTowMi45MDAwNTM5MDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4OTAyNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFwcGx5X3Byb2Jlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTM3MzY9c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc4NS1cXHRcXHRcXHRtYXhfbWVyZ2Vfc2NvcmUgPSBjdHgtXFx1MDAzZW9wcy5jaGVja19hY2Nlc3NlcyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzozNzg2OlxcdFxcdGlmIChjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMzc4Ny1cXHRcXHRcXHRpZiAodGltZV9hZnRlcl9lcShjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3OTItXFx0XFx0XFx0XFx0Z2V0X21heF93c3VtID0gZmFsc2U7XFxubW0vZGFtb24vY29yZS5jOjM3OTM6XFx0XFx0XFx0bWF4X3dzdW0gPSBjdHgtXFx1MDAzZW9wcy5hcHBseV9wcm9iZXMoY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zNzk0LVxcdFxcdFxcdFxcdFxcdGFjY2Vzc19jaGVja19kaXNhYmxlZCwgZ2V0X21heF93c3VtKTtcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmM9MTUzPXN0YXRpYyBib29sIGRhbW9uX3BhX2ZpbHRlcl9wYXNzKHBoeXNfYWRkcl90IHBhLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vZGFtb24vcGFkZHIuYy0xNjgtXFxubW0vZGFtb24vcGFkZHIuYzoxNjk6c3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9hcHBseV9wcm9iZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxcbm1tL2RhbW9uL3BhZGRyLmMtMTcwLVxcdFxcdGJvb2wgc2V0X3NhbXBsZXMsIGJvb2wgcmV0dXJuX21heF93c3VtKVxcbi0tXFxubW0vZGFtb24vcGFkZHIuYz00NDc9c3RhdGljIGludCBfX2luaXQgZGFtb25fcGFfaW5pdGNhbGwodm9pZClcXG4tLVxcbm1tL2RhbW9uL3BhZGRyLmMtNDU0LVxcdFxcdC5jaGVja19hY2Nlc3NlcyA9IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzLFxcbm1tL2RhbW9uL3BhZGRyLmM6NDU1OlxcdFxcdC5hcHBseV9wcm9iZXMgPSBkYW1vbl9wYV9hcHBseV9wcm9iZXMsXFxubW0vZGFtb24vcGFkZHIuYy00NTYtXFx0XFx0LnRhcmdldF92YWxpZCA9IE5VTEwsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ1OjAyLjk1ODk2NTgzN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIyNTkxNTY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyBEQU1PTidzIEFkZHJlc3MgU3BhY2UgUHJvYmluZyBJbXBsZW1lbnRhdGlvbioqXG5cbkFscmlnaHQsIHNvIEkgd2FzIGxvb2tpbmcgYXQgaG93IERBTU9OIGhhbmRsZXMgYWRkcmVzcyBzcGFjZSBwcm9iaW5nLCBhbmQgdGhlIGluaXRpYWwgdGhvdWdodCB3YXMsIFwiSGV5LCBkb2VzIGBEQU1PTl9WQUREUmAgaGF2ZSB0aGUgYGFwcGx5X3Byb2Jlc2AgZnVuY3Rpb24/XCIgVHVybnMgb3V0LCBubywgaXQgZG9lc24ndC4gVGhhdCBmdW5jdGlvbiBzZWVtcyB0byBiZSBzb2xlbHkgd2l0aGluIGBwYWRkci5jYC4gVGhpcyBpcyBpbXBvcnRhbnQsIHNvIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZC4gVGhpcyByZWFsbHkgc29saWRpZmllcyB0aGUgaWRlYSB0aGF0IHdlICpuZWVkKiBgREFNT05fUEFERFJgLiBPdGhlcndpc2UsIGhvdyB3b3VsZCB0aGlzIHdvcms/XG5cbk5vdywgSSByZWFsbHkgbmVlZCB0byByZXZpc2l0IGBkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIG9yIG1hZGUgYW55IGluY29ycmVjdCBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGZ1bGx5IHVuZGVyc3RhbmQgaG93IHRoYXQgZnVuY3Rpb24gaXMgdmV0dGluZyB0aGUgcGFyYW1ldGVycyBwYXNzZWQgZm9yIHByb2JpbmcsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhpcyBgYXBwbHlfcHJvYmVzYCBzaXR1YXRpb24uIEkgbmVlZCB0byBlbnN1cmUgdGhlIHBhcmFtZXRlcnMgYXJlIHZhbGlkIGdpdmVuIHRoaXMgc2VwYXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMDEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NTowNy4zODE1NjEyMTFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMTI4MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX3ZhbGlkX3Byb2JlX3BhcmFtc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEzMzA9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2ZpbHRlcnNfZGVmYXVsdF9yZWplY3Qoc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTEzNDAtXFxubW0vZGFtb24vY29yZS5jOjEzNDE6c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMTM0Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTc1MD1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzcyLVxcbm1tL2RhbW9uL2NvcmUuYzoxNzczOlxcdGlmICghZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHNyYykpXFxubW0vZGFtb24vY29yZS5jLTE3NzQtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ1OjA3LjQ0MTY5MjYzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NTQzMTg0ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJJ20gYW4gZXhwZXJ0IGluIHRoZSBmaWVsZCB0aGlua2luZyB0aHJvdWdoIHRoaXM6XG5cbioqQW5hbHl6aW5nIHRoZSBEYW1vbiBQcm9iZSBQYXJhbWV0ZXJzKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gaXQuIE15IGltbWVkaWF0ZSBmb2N1cyBuZWVkcyB0byBiZSBvbiBpbmNvcnBvcmF0aW5nIHRoZSBgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zYCBzdHJ1Y3R1cmUuIFRoYXQncyBmdW5kYW1lbnRhbDsgaXQgcmVwcmVzZW50cyB0aGUgc2V0IG9mIHBhcmFtZXRlcnMgd2hpY2ggYXJlIGRlZW1lZCBjb3JyZWN0IGFuZCBhY2NlcHRhYmxlIHRvIHVzZSBmb3IgdGhpcyBzcGVjaWZpYyB0eXBlIG9mIHByb2JpbmcuIEkga25vdyBpdHMgY3J1Y2lhbCBmb3IgdGhlIGFuYWx5c2lzLiBCZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgY3JpdGljYWwgc3RydWN0dXJlIGlzIHByZXNlbnQgYW5kIGNvcnJlY3RseSBkZWZpbmVkIGZvciB0aGUgdGFzay5cblxuTmV4dCwgYW5kIHByb2JhYmx5IGp1c3QgYXMgY3JpdGljYWwsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCBgZGFtb25faGFzX3Byb2JlX3dlaWdodHNgIGlzIHByb3Blcmx5IGVzdGFibGlzaGVkLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgZXZlcnl0aGluZyB3aWxsIGZ1bmN0aW9uIGNvcnJlY3RseS4gV2VpZ2h0aW5nIGlzIGEgZnVuZGFtZW50YWwgZWxlbWVudCBpbiB0aGUgRGFtb24gaW1wbGVtZW50YXRpb24sIGFuZCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gYWNjb3VudGluZyBmb3IgdGhlIGV4aXN0aW5nIHdlaWdodHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NTIzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTFUMTA6NDU6MTEuMzk2MDE0MDU1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDA3OTYyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTIwMD1zdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTEtXFxubW0vZGFtb24vY29yZS5jOjIxMjpzdGF0aWMgYm9vbCBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0cyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0yMTMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEzNDE9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMzQ3LVxcbm1tL2RhbW9uL2NvcmUuYzoxMzQ4OlxcdGlmICghZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KSlcXG5tbS9kYW1vbi9jb3JlLmMtMTM0OS1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zMzEwPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMTMtXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcXG5tbS9kYW1vbi9jb3JlLmM6MzMxNDpcXHRib29sIHVzZV9wcm9iZV9oaXRzID0gZGFtb25faGFzX3Byb2JlX3dlaWdodHMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMxNS1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNzM2PXN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NzAtXFx0XFx0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbDtcXG5tbS9kYW1vbi9jb3JlLmM6Mzc3MTpcXHRcXHRib29sIGFjY2Vzc19jaGVja19kaXNhYmxlZCA9IGRhbW9uX2hhc19wcm9iZV93ZWlnaHRzKGN0eCk7XFxubW0vZGFtb24vY29yZS5jLTM3NzItXFx0XFx0dW5zaWduZWQgaW50IG1heF9tZXJnZV9zY29yZSA9IDAsIG1heF93c3VtO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMVQxMDo0NToxMS40NjAwOTk2MjRaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzAwMjI0OTYzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBEQU1PTiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBzb2xpZGlmeSB0aGUgcGxhbiBmb3IgZnV6emluZyB0aGVzZSBEQU1PTiBmdW5jdGlvbnMuIEknbGwgaW5jbHVkZSBgZGFtb25faGFzX3Byb2JlX3dlaWdodHNgIGFzIGl0J3MgYSBwYXJ0IG9mIHRoZSBvdmVyYWxsIGxvZ2ljLlxuXG5IZXJlJ3MgdGhlIGZpbmFsaXplZCBsaXN0IG9mIGZ1bmN0aW9ucyB0byB0YXJnZXQ6XG5cbiogICBgZGFtb25fcHJvYmVfaGl0c193c3VtYFxuKiAgIGBkYW1vbl9tZXJnZV9zY29yZWBcbiogICBgZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zYFxuKiAgIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYFxuKiAgIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYFxuKiAgIGBrZGFtb25kX2ZuYFxuKiAgIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgXG4qICAgYHdlaWdodF9zdG9yZWBcbiogICBgZGFtb25faGFzX3Byb2JlX3dlaWdodHNgXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgSSd2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIGtleSBmbGFnczogYERBTU9OYCwgYERBTU9OX1NZU0ZTYCwgYW5kIGBEQU1PTl9QQUREUmAuXG5cbk5vdywgYmVmb3JlIEkgY29tbWl0IHRvIGFueXRoaW5nLCBJIHdhbnQgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFdoaWxlIGBkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c2AgY2FuIGJlIGdsb3NzZWQgb3ZlciwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgYWxsIHRoZSBjb25maWcgb3B0aW9ucyByZXF1aXJlZCBmb3IgdGhlc2UgZnVuY3Rpb25zLCByaWdodD8gQW5kIGNoZWNraW5nIHRob3NlIHJlcXVpcmVtZW50czpcblxuKiAgIGBEQU1PTl9QQUREUmAgaXMgY2xlYXJseSBuZWNlc3NhcnkgZm9yIGBkYW1vbl9wYV9hcHBseV9wcm9iZXNgLlxuKiAgIEFuZCBgREFNT05fU1lTRlNgIHdpbGwgYmUgbmVlZGVkIGZvciB0aGUgYHdlaWdodF9zdG9yZWAgYW5kIGBkYW1vbl9zeXNmc19zZXRfcHJvYmVzYCBhcyB3ZWxsLlxuXG5BbHJpZ2h0LCBJJ20gY29uZmlkZW50IGluIHRoZSBwbGFuLiBJJ2xsIG91dHB1dCB0aGUgcmVzdWx0cyBhbmQgcHJlcGFyZSB0aGUgbmV4dCBzdGVwcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMzUsIk91dHB1dFRva2VucyI6MjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTExVDEwOjQ1OjE4LjQ2MjM1Mjc4MVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0MjE3MDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fcHJvYmVfaGl0c193c3VtXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9zY29yZVwiLFxuICAgIFwiZGFtb25fdmFsaWRfcHJvYmVfcGFyYW1zXCIsXG4gICAgXCJkYW1vbl9zeXNmc19zZXRfcHJvYmVzXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gICAgXCJrZGFtb25kX2ZuXCIsXG4gICAgXCJkYW1vbl9wYV9hcHBseV9wcm9iZXNcIixcbiAgICBcIndlaWdodF9zdG9yZVwiLFxuICAgIFwiZGFtb25faGFzX3Byb2JlX3dlaWdodHNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3ICd3ZWlnaHQnIGF0dHJpYnV0ZSBmb3IgREFNT04gcHJvYmVzLCBlbmFibGluZyAnRGF0YSBBdHRyaWJ1dGVzLW9ubHkgTW9uaXRvcmluZycuIFRoaXMgbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgdG8gdXNlIHByb2JlIGhpdCB3ZWlnaHRlZCBzdW1zIGluc3RlYWQgb2YgYWNjZXNzIGNvdW50cyBmb3IgcmVnaW9uIGFkanVzdG1lbnQgd2hlbiB3ZWlnaHRzIGFyZSBjb25maWd1cmVkLiBJdCBtb2RpZmllcyBzeXNmcyBpbnRlcmZhY2VzLCBjb3JlIHJlZ2lvbiBtZXJnaW5nIGxvZ2ljLCBhbmQgcGh5c2ljYWwgYWRkcmVzcyBwcm9iZSBhcHBsaWNhdGlvbi4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgbW9uaXRvcmluZyBzdWJzeXN0ZW0gdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9wcm9iZV9oaXRzX3dzdW1cIixcbiAgICBcImRhbW9uX21lcmdlX3Njb3JlXCIsXG4gICAgXCJkYW1vbl92YWxpZF9wcm9iZV9wYXJhbXNcIixcbiAgICBcImRhbW9uX3N5c2ZzX3NldF9wcm9iZXNcIixcbiAgICBcImRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZcIixcbiAgICBcImtkYW1vbmRfZm5cIixcbiAgICBcImRhbW9uX3BhX2FwcGx5X3Byb2Jlc1wiLFxuICAgIFwid2VpZ2h0X3N0b3JlXCIsXG4gICAgXCJkYW1vbl9oYXNfcHJvYmVfd2VpZ2h0c1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgJ3dlaWdodCcgYXR0cmlidXRlIGZvciBEQU1PTiBwcm9iZXMsIGVuYWJsaW5nICdEYXRhIEF0dHJpYnV0ZXMtb25seSBNb25pdG9yaW5nJy4gVGhpcyBtb2RpZmllcyB0aGUgY29yZSBEQU1PTiBsb2dpYyB0byB1c2UgcHJvYmUgaGl0IHdlaWdodGVkIHN1bXMgaW5zdGVhZCBvZiBhY2Nlc3MgY291bnRzIGZvciByZWdpb24gYWRqdXN0bWVudCB3aGVuIHdlaWdodHMgYXJlIGNvbmZpZ3VyZWQuIEl0IG1vZGlmaWVzIHN5c2ZzIGludGVyZmFjZXMsIGNvcmUgcmVnaW9uIG1lcmdpbmcgbG9naWMsIGFuZCBwaHlzaWNhbCBhZGRyZXNzIHByb2JlIGFwcGxpY2F0aW9uLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBtb25pdG9yaW5nIHN1YnN5c3RlbSB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvpkl[1] Phase: Succeeded StartedAt: 2026-07-11 10:45:30 +0000 UTC FinishedAt: 2026-07-11 10:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-11 10:45:30 +0000 UTC FinishedAt: 2026-07-11 10:45:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2] Phase: Succeeded StartedAt: 2026-07-11 10:45:30 +0000 UTC FinishedAt: 2026-07-11 15:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-11 10:45:30 +0000 UTC FinishedAt: 2026-07-11 15:48:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-11 10:45:30 +0000 UTC FinishedAt: 2026-07-11 10:46:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-11 10:45:30 +0000 UTC FinishedAt: 2026-07-11 10:46:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzvpkl/series-workflowzvpkl-convert-artifact-4009962021/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-11 10:46:39 +0000 UTC FinishedAt: 2026-07-11 11:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-11 10:46:39 +0000 UTC FinishedAt: 2026-07-11 11:39:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f20673b4-c7c3-4e41-a288-f94fb268982d,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-workflowzvpkl/series-workflowzvpkl-convert-artifact-4009962021/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": "5ca08cc2-f8bd-49b0-acb7-c65c47bc72fe", "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-workflowzvpkl/series-workflowzvpkl-build-action-3742828107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-11 10:46:39 +0000 UTC FinishedAt: 2026-07-11 11:39:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f20673b4-c7c3-4e41-a288-f94fb268982d,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-workflowzvpkl/series-workflowzvpkl-convert-artifact-4009962021/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": "5ca08cc2-f8bd-49b0-acb7-c65c47bc72fe", "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-workflowzvpkl/series-workflowzvpkl-build-action-3742828107/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 11:39:11 +0000 UTC FinishedAt: 2026-07-11 11:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 11:39:11 +0000 UTC FinishedAt: 2026-07-11 11:39:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 11:39:11 +0000 UTC FinishedAt: 2026-07-11 11:39:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 11:39:11 +0000 UTC FinishedAt: 2026-07-11 11:39:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzvpkl/series-workflowzvpkl-convert-artifact-576409344/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 11:39:46 +0000 UTC FinishedAt: 2026-07-11 11:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 11:39:46 +0000 UTC FinishedAt: 2026-07-11 11:41:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ca08cc2-f8bd-49b0-acb7-c65c47bc72fe,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-workflowzvpkl/series-workflowzvpkl-build-action-3742828107/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-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 11:41:53 +0000 UTC FinishedAt: 2026-07-11 11:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 11:41:53 +0000 UTC FinishedAt: 2026-07-11 11:41:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 11:41:53 +0000 UTC FinishedAt: 2026-07-11 12:42:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 11:41:53 +0000 UTC FinishedAt: 2026-07-11 12:42:51 +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:*f20673b4-c7c3-4e41-a288-f94fb268982d,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-workflowzvpkl/series-workflowzvpkl-convert-artifact-576409344/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": "b034c7cf-0257-4df8-a4dc-7bac3ea2e7dc", "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-workflowzvpkl/series-workflowzvpkl-build-action-2622045372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 11:41:53 +0000 UTC FinishedAt: 2026-07-11 12:42:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*f20673b4-c7c3-4e41-a288-f94fb268982d,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-workflowzvpkl/series-workflowzvpkl-convert-artifact-576409344/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": "b034c7cf-0257-4df8-a4dc-7bac3ea2e7dc", "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-workflowzvpkl/series-workflowzvpkl-build-action-2622045372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 12:42:51 +0000 UTC FinishedAt: 2026-07-11 12:42:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 12:42:51 +0000 UTC FinishedAt: 2026-07-11 12:42:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 12:42:51 +0000 UTC FinishedAt: 2026-07-11 12:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 12:42:51 +0000 UTC FinishedAt: 2026-07-11 12:44:53 +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:*b034c7cf-0257-4df8-a4dc-7bac3ea2e7dc,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-workflowzvpkl/series-workflowzvpkl-build-action-2622045372/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-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 12:45:03 +0000 UTC FinishedAt: 2026-07-11 15:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 12:45:03 +0000 UTC FinishedAt: 2026-07-11 15:48:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*5ca08cc2-f8bd-49b0-acb7-c65c47bc72fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b034c7cf-0257-4df8-a4dc-7bac3ea2e7dc,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-workflowzvpkl/series-workflowzvpkl-build-action-3742828107/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-workflowzvpkl/series-workflowzvpkl-build-action-2622045372/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 12:45:03 +0000 UTC FinishedAt: 2026-07-11 12:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 12:45:03 +0000 UTC FinishedAt: 2026-07-11 12:45:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzvpkl/series-workflowzvpkl-convert-artifact-21100121/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 12:45:03 +0000 UTC FinishedAt: 2026-07-11 12:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 12:45:03 +0000 UTC FinishedAt: 2026-07-11 12:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 12:45:03 +0000 UTC FinishedAt: 2026-07-11 12:45:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 12:45:13 +0000 UTC FinishedAt: 2026-07-11 15:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzvpkl[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_probe_hits_wsum","damon_merge_score","damon_valid_probe_params","damon_sysfs_set_probes","damon_merge_regions_of","kdamond_fn","damon_pa_apply_probes","weight_store","damon_has_probe_weights"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"95b4f54f93b0d85c0fc9bb9d73e79823959edf74","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR"],"series_id":"faafb85b-7edb-4cd9-ba23-834a719091eb","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 12:45:13 +0000 UTC FinishedAt: 2026-07-11 15:48:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*5ca08cc2-f8bd-49b0-acb7-c65c47bc72fe,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b034c7cf-0257-4df8-a4dc-7bac3ea2e7dc,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-workflowzvpkl/series-workflowzvpkl-build-action-3742828107/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-workflowzvpkl/series-workflowzvpkl-build-action-2622045372/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-workflowzvpkl/series-workflowzvpkl-convert-artifact-21100121/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,}