Name: series-workflownjcjz Phase: Succeeded StartedAt: 2026-06-30 05:50:09 +0000 UTC FinishedAt: 2026-06-30 10:20:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[0] Phase: Succeeded StartedAt: 2026-06-30 05:50:09 +0000 UTC FinishedAt: 2026-06-30 05:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 05:50:09 +0000 UTC FinishedAt: 2026-06-30 05:57:00 +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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "series_id": "eb48f907-ee29-4c62-8d0e-494af5f4b15b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_nr_accesses_mvsum", "damon_update_region_access_rate", "__damos_valid_target", "damos_apply_scheme", "damos_calc_eligible_bytes", "damos_adjust_quota", "damon_merge_two_regions", "damon_merge_regions_of", "damon_split_region_at", "__damon_pa_check_access", "__damon_va_check_access" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSYjMzQ7LAogICAgJiMzNDtfX2RhbW9zX3ZhbGlkX3RhcmdldCYjMzQ7LAogICAgJiMzNDtkYW1vc19hcHBseV9zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfcmVnaW9uc19vZiYjMzQ7LAogICAgJiMzNDtkYW1vbl9zcGxpdF9yZWdpb25fYXQmIzM0OywKICAgICYjMzQ7X19kYW1vbl9wYV9jaGVja19hY2Nlc3MmIzM0OywKICAgICYjMzQ7X19kYW1vbl92YV9jaGVja19hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBgbnJfYWNjZXNzZXNfYnBgIGZpZWxkIHdpdGggYSBwc2V1ZG8gbW92aW5nIHN1bSBjYWxjdWxhdGlvbiAoYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCkuIFRoaXMgYWZmZWN0cyBob3cgYWNjZXNzIGZyZXF1ZW5jaWVzIGFyZSBjYWxjdWxhdGVkLCBtZXJnZWQsIHNwbGl0LCBhbmQgZXZhbHVhdGVkIGZvciBzY2hlbWVzIGFjcm9zcyBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmRmYzA2NmRmMGVhNjZmMjEwYTQwYWE4NDc5YjhhMTQ0ZGFhNDk2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA1OjU1OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggY2ZiYmY4YmEyOGY2MzIuLjgwNWUwODlmZjRmMmY2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC00NSw4ICYjNDM7NDUsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XG4gICogQGFyOlx0XHRcdFRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSByZWdpb24uXG4gICogQHNhbXBsaW5nX2FkZHI6XHRBZGRyZXNzIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBuZXh0IGFjY2VzcyBjaGVjay5cbiAgKiBAbnJfYWNjZXNzZXM6XHRBY2Nlc3MgZnJlcXVlbmN5IG9mIHRoaXMgcmVnaW9uLlxuLSAqIEBucl9hY2Nlc3Nlc19icDpcdEBucl9hY2Nlc3NlcyBpbiBiYXNpcyBwb2ludCAoMC4wMSUpIHRoYXQgdXBkYXRlZCBmb3Jcbi0gKlx0XHRcdGVhY2ggc2FtcGxpbmcgaW50ZXJ2YWwuXG4gICogQHByb2JlX2hpdHM6XHRcdE51bWJlciBvZiBwcm9iZS1wb3NpdGl2ZSByZWdpb24gc2FtcGxlcy5cbiAgKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKiBAYWdlOlx0XHRBZ2Ugb2YgdGhpcyByZWdpb24uXG5AQCAtNTksMTMgJiM0Mzs1Nyw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBub3QgYmUgZG9uZSB3aXRoIGRpcmVjdCBhY2Nlc3MgYnV0IHdpdGggdGhlIGhlbHBlciBmdW5jdGlvbixcbiAgKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkuXG4gICpcbi0gKiBAbnJfYWNjZXNzZXNfYnAgaXMgYW5vdGhlciByZXByZXNlbnRhdGlvbiBvZiBAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnRcbi0gKiAoMSBpbiAxMCwwMDApIHRoYXQgdXBkYXRlZCBmb3IgZXZlcnkgXHUwMDI2ZGFtb25fYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsIGluIGFcbi0gKiBtYW5uZXIgc2ltaWxhciB0byBtb3Zpbmcgc3VtLiAgQnkgdGhlIGFsZ29yaXRobSwgdGhpcyB2YWx1ZSBiZWNvbWVzXG4tICogQG5yX2FjY2Vzc2VzICogMTAwMDAgZm9yIGV2ZXJ5IFx1MDAyNnN0cnVjdCBkYW1vbl9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsLiAgVGhpcyBjYW5cbi0gKiBiZSB1c2VkIHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGlzIHRvbyBodWdlIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdhaXRcbi0gKiBmb3IgaXQgYmVmb3JlIGdldHRpbmcgdGhlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMuXG4tICpcbiAgKiBAYWdlIGlzIGluaXRpYWxseSB6ZXJvLCBpbmNyZWFzZWQgZm9yIGVhY2ggYWdncmVnYXRpb24gaW50ZXJ2YWwsIGFuZCByZXNldFxuICAqIHRvIHplcm8gYWdhaW4gaWYgdGhlIGFjY2VzcyBmcmVxdWVuY3kgaXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLiAgSWYgdHdvXG4gICogcmVnaW9ucyBhcmUgbWVyZ2VkIGludG8gYSBuZXcgcmVnaW9uLCBib3RoIEBucl9hY2Nlc3NlcyBhbmQgQGFnZSBvZiB0aGUgbmV3XG5AQCAtNzUsNyAmIzQzOzY2LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhcjtcbiBcdHVuc2lnbmVkIGxvbmcgc2FtcGxpbmdfYWRkcjtcbiBcdHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlcztcbi1cdHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlc19icDtcbiBcdHVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcbkBAIC0xMDExLDExICYjNDM7MTAwMSwxMiBAQCBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKTtcbiB2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpO1xuIFxuIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4gXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG4gXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeik7XG4tdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQsXG4tXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xuJiM0Mzt2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCk7XG4gXG4gc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXG4gXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oXG5pbmRleCA3ODM4ODUzOGFjZjQ0Ni4uODg1MTcyN2FlMTYyN2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oXG5AQCAtNzgsOSAmIzQzOzc4LDExIEBAIFRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vc19iZWZvcmVfYXBwbHksXG4gXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY29udGV4dF9pZHgsIHVuc2lnbmVkIGludCBzY2hlbWVfaWR4LFxuIFx0XHR1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi1cdFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMsIGJvb2wgZG9fdHJhY2UpLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLCB1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyxcbiYjNDM7XHRcdGJvb2wgZG9fdHJhY2UpLFxuIFxuLVx0VFBfQVJHUyhjb250ZXh0X2lkeCwgc2NoZW1lX2lkeCwgdGFyZ2V0X2lkeCwgciwgbnJfcmVnaW9ucywgZG9fdHJhY2UpLFxuJiM0MztcdFRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX2FjY2Vzc2VzLFxuJiM0MztcdFx0bnJfcmVnaW9ucywgZG9fdHJhY2UpLFxuIFxuIFx0VFBfQ09ORElUSU9OKGRvX3RyYWNlKSxcbiBcbkBAIC0xMDEsNyAmIzQzOzEwMyw3IEBAIFRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vc19iZWZvcmVfYXBwbHksXG4gXHRcdF9fZW50cnktXHUwMDNldGFyZ2V0X2lkeCA9IHRhcmdldF9pZHg7XG4gXHRcdF9fZW50cnktXHUwMDNlc3RhcnQgPSByLVx1MDAzZWFyLnN0YXJ0O1xuIFx0XHRfX2VudHJ5LVx1MDAzZWVuZCA9IHItXHUwMDNlYXIuZW5kO1xuLVx0XHRfX2VudHJ5LVx1MDAzZW5yX2FjY2Vzc2VzID0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9hY2Nlc3NlcyA9IG5yX2FjY2Vzc2VzO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWFnZSA9IHItXHUwMDNlYWdlO1xuIFx0XHRfX2VudHJ5LVx1MDAzZW5yX3JlZ2lvbnMgPSBucl9yZWdpb25zO1xuIFx0KSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDAyNzI1MGU0M2M2NmYyLi5mNTJhODlmOWZkOTc3ZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjA4LDYgJiM0MzsyMDgsNzEgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIGRhbW9uX212c3VtKCkgLSBSZXR1cm5zIHBzZXVkbyBtb3Zpbmcgc3VtIHZhbHVlIGZvciBhIHRpbWUgd2luZG93LlxuJiM0MzsgKiBAY3VycmVudF9ucjpcdFx0VGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIHdpbmRvdy5cbiYjNDM7ICogQGxhc3RfbnI6XHRcdFRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiB3aW5kb3cuXG4mIzQzOyAqIEBsZWZ0X3dpbmRvd19icDpcdExlZnQgdGltZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhIHBzZXVkbyBtb3Zpbmcgc3VtIHZhbHVlIG9mIGEgY291bnRlciB0aGF0IGlzXG4mIzQzOyAqIGFnZ3JlZ2F0ZWQgZm9yIGVhY2ggdGltZSB3aW5kb3cuICBAY3VycmVudF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXJcbiYjNDM7ICogdGhhdCBhZ2dyZWdhdGVkIHNvIGZhciAobWF5YmUgbm90IHlldCBjb21wbGV0ZSksIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGVcbiYjNDM7ICogY3VycmVudCBhZ2dyZWdhdGlvbiB0aW1lIHdpbmRvdy4gIEBsYXN0X25yIGlzIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciB0aGF0XG4mIzQzOyAqIGhhcyBjb21wbGV0ZWx5IGFnZ3JlZ2F0ZWQgaW4gdGhlIGxhc3QgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuXG4mIzQzOyAqIEBsZWZ0X3dpbmRvd19icCByZXByZXNlbnRzIGhvdyBtdWNoIHRpbWUgaXMgbGVmdCBmb3IgdGhlIGN1cnJlbnQgYWdncmVnYXRpb25cbiYjNDM7ICogdGltZSB3aW5kb3cgaW4gYnAgKDEvMTAsMDAwKS4gIEZvciBleGFtcGxlLCB0aGUgYWdncmVnYXRpb24gdGltZSB3aW5kb3cgaXNcbiYjNDM7ICogZm9yIGV2ZXJ5IDEwIHNlY29uZHMgYW5kIDcgc2Vjb25kcyBoYXMgcGFzc2VkIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4mIzQzOyAqIGN1cnJlbnQgd2luZG93LCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIDMwMDAgKCgxMCAtIDcpIC8gMTAgKiAxMDAwMCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBsb2dpYyBhc3N1bWVzIHRoZSBhZ2dyZWdhdGlvbiBpbiB0aGUgbGFzdCBwaGFzZSB3YXMgbWFkZSBpbiBhIHNpbmdsZVxuJiM0MzsgKiBzcGVlZC4gIEJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uLCB0aGUgdmFsdWUgZnJvbSB0aGUgbGFzdCB3aW5kb3cgdGhhdCBuZWVkc1xuJiM0MzsgKiB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB2YWx1ZSBpcyBjYWxjdWxhdGVkIGFzIGEgcG9ydGlvbiBvZiB0aGUgbGFzdFxuJiM0MzsgKiB2YWx1ZSBiYXNlZCBvbiB0aGUgcmVtYWluaW5nIHRpbWUgd2luZG93LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGN1cnJlbnRfbnIgJiM0MzsgbXVsdF9mcmFjKGxhc3RfbnIsIGxlZnRfd2luZG93X2JwLCAxMDAwMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSgpIC0gUmV0dXJucyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuXG4mIzQzOyAqIEByOlx0XHRSZWdpb24gdG8gZ2V0IHRoZSBhY2Nlc3MgZnJlcXVlbmN5IG9mLlxuJiM0MzsgKiBAY3R4Olx0REFNT04gY29udGV4dCBvZiBAci5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZvciBob3cgbWFueSBzYW1wbGluZyBpdGVyYXRpb25zIGluIHRoZSBsYXN0XG4mIzQzOyAqIGFnZ3JlZ2F0aW9uIGludGVydmFsIChcdTAwMjZkYW1vbl9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsKSB0aGUgcmVnaW9uIHdhcyBmb3VuZCB0b1xuJiM0MzsgKiBiZSBhY2Nlc3NlZC4gIEhlbmNlIHRoZSB2YWx1ZSBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlbGF0aXZlIGFjY2Vzc1xuJiM0MzsgKiBmcmVxdWVuY3kgc2NvcmUgb2YgdGhlIHJlZ2lvbiAoQHIpLiAgVGhlIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYXMgYSBwc2V1ZG9cbiYjNDM7ICogbW92aW5nIHN1bSwgYW5kIGhlbmNlIGl0IGlzIG5vdCBhbiBleGFjdCB2YWx1ZSBidXQganVzdCBhIGJlc3QtZWZmb3J0XG4mIzQzOyAqIHJlYXNvbmFibGUgZXN0aW1hdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgcHNldWRvIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cbiYjNDM7ICovXG4mIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwsIGFnZ3JfaW50ZXJ2YWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XG4mIzQzO1xuJiM0MztcdHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XG4mIzQzO1x0YWdncl9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID8gOiAxO1xuJiM0MztcdHdpbmRvd19sZW4gPSBhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsO1xuJiM0MztcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcbiYjNDM7XHRcdFx0XHRjdHgtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMpKVxuJiM0MztcdFx0bGVmdF93aW5kb3cgPSAwO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxlZnRfd2luZG93ID0gY3R4LVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIC1cbiYjNDM7XHRcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xuJiM0MztcdGxlZnRfd2luZG93X2JwID0gbXVsdF9mcmFjKGxlZnRfd2luZG93LCAxMDAwMCwgd2luZG93X2xlbik7XG4mIzQzO1xuJiM0MztcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcbiYjNDM7XHRcdHJldHVybiByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZW5yX2FjY2Vzc2VzLCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXG4mIzQzO1x0XHRcdGxlZnRfd2luZG93X2JwKTtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxuIHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbkBAIC0yMzcsNyAmIzQzOzMwMiw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRyZWdpb24tXHUwMDNlYXIuc3RhcnQgPSBzdGFydDtcbiBcdHJlZ2lvbi1cdTAwM2Vhci5lbmQgPSBlbmQ7XG4gXHRyZWdpb24tXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xuLVx0cmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KVxuIFx0XHRyZWdpb24tXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyZWdpb24tXHUwMDNlbGlzdCk7XG5AQCAtODA5LDIyICYjNDM7ODczLDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXG4gXHRcdGJvb2wgYWdncmVnYXRpbmcpXG4ge1xuLVx0aWYgKCFhZ2dyZWdhdGluZykge1xuJiM0MztcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXG4mIzQzO1x0XHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuJiM0MztcdGlmICghYWdncmVnYXRpbmcpXG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxuIFx0XHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuLVx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwO1xuLVx0fSBlbHNlIHtcbiYjNDM7XHRlbHNlXG4gXHRcdC8qXG4gXHRcdCAqIGlmIHRoaXMgaXMgY2FsbGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIGFnZ3JlZ2F0aW9uLCByZXNldFxuIFx0XHQgKiB0aGUgYWdncmVnYXRpb25zIHdlIG1hZGUgc28gZmFyIGZvciB0aGlzIGFnZ3JlZ2F0aW9uXG4gXHRcdCAqIGludGVydmFsLiAgSW4gb3RoZXIgd29yZHMsIG1ha2UgdGhlIHN0YXR1cyBsaWtlXG4gXHRcdCAqIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpIGlzIGNhbGxlZC5cbiBcdFx0ICovXG4tXHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXG4tXHRcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbi1cdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwO1xuIFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcbi1cdH1cbiBcdHItXHUwMDNlYWdlID0gZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnMoci1cdTAwM2VhZ2UsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiB9XG4gXG5AQCAtMTkzNSwzNiAmIzQzOzE5OTYsNiBAQCBpbnQgZGFtb3Nfd2FsayhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vc193YWxrX2NvbnRyb2wgKmNvbnRyb2wpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBXYXJuIGFuZCBmaXggY29ycnVwdGVkIC1cdTAwM2Vucl9hY2Nlc3Nlc1tfYnBdIGZvciBpbnZlc3RpZ2F0aW9ucyBhbmQgcHJldmVudGluZ1xuLSAqIHRoZSBwcm9ibGVtIGJlaW5nIHByb3BhZ2F0ZWQuXG4tICovXG4tc3RhdGljIHZvaWQgZGFtb25fd2Fybl9maXhfbnJfYWNjZXNzZXNfY29ycnVwdGlvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuLXtcbi1cdGlmIChyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID09IHItXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMClcbi1cdFx0cmV0dXJuO1xuLVx0V0FSTl9PTkNFKHRydWUsIFwmIzM0O2ludmFsaWQgbnJfYWNjZXNzZXNfYnAgYXQgcmVzZXQ6ICV1ICV1XFxuXCYjMzQ7LFxuLVx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHItXHUwMDNlbnJfYWNjZXNzZXMpO1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMDtcbi19XG4tXG4tI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLXtcbi1cdFdBUk5fT05DRShyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwICE9IHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwLFxuLVx0XHRcdFwmIzM0O25yX2FjY2Vzc2VzX2JwICV1IGxhc3RfbnJfYWNjZXNzZXMgJXUgc2lzICVsdSAlbHVcXG5cJiMzNDssXG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLFxuLVx0XHRcdGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIGMtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMpO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4te1xuLX1cbi0jZW5kaWZcbi1cbi1cbiAvKlxuICAqIFJlc2V0IHRoZSBhZ2dyZWdhdGVkIG1vbml0b3JpbmcgcmVzdWx0cyAoJiMzOTtucl9hY2Nlc3NlcyYjMzk7IG9mIGVhY2ggcmVnaW9uKS5cbiAgKi9cbkBAIC0xOTg5LDEyICYjNDM7MjAyMCwxMCBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcbiBcdFx0XHR0cmFjZV9kYW1vbl9hZ2dyZWdhdGVkKHRpLCByLCBkYW1vbl9ucl9yZWdpb25zKHQpKTtcbiBcdFx0XHR0cmFjZV9kYW1vbl9yZWdpb25fYWdncmVnYXRlZCh0aSwgcixcbiBcdFx0XHRcdFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgbnJfcHJvYmVzKTtcbi1cdFx0XHRkYW1vbl93YXJuX2ZpeF9ucl9hY2Nlc3Nlc19jb3JydXB0aW9uKHIpO1xuIFx0XHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXM7XG4gXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XG4gXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspXG4gXHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xuLVx0XHRcdGRhbW9uX3ZlcmlmeV9yZXNldF9hZ2dyZWdhdGVkKHIsIGMpO1xuIFx0XHR9XG4gXHRcdHRpJiM0MzsmIzQzOztcbiBcdH1cbkBAIC0yMDYxLDEwICYjNDM7MjA5MCwxMSBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuIFx0ZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNm5ld19hdHRycyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcbiYjNDM7c3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN6O1xuLVx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzID0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpO1xuIFxuIFx0c3ogPSBkYW1vbl9zel9yZWdpb24ocik7XG4gXHRyZXR1cm4gcy1cdTAwM2VwYXR0ZXJuLm1pbl9zel9yZWdpb24gXHUwMDNjPSBzeiBcdTAwMjZcdTAwMjZcbkBAIC0yMDkwLDcgJiM0MzsyMTIwLDcgQEAgc3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4gc3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdHN0cnVjdCBkYW1vcyAqcylcbiB7XG4tXHRib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMpO1xuJiM0MztcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYyk7XG4gXG4gXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTIzNzQsNyAmIzQzOzI0MDQsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XHRcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cbiBcdHVuc2lnbmVkIGludCBzaWR4ID0gMDtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpdGVyO1x0LyogdGFyZ2V0cyBpdGVyYXRvciAqL1xuLVx0dW5zaWduZWQgaW50IHRpZHggPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xuIFx0Ym9vbCBkb190cmFjZSA9IGZhbHNlO1xuIFxuIFx0LyogZ2V0IGluZGljZXMgZm9yIHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseSgpICovXG5AQCAtMjM4OSw2ICYjNDM7MjQxOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0dGlkeCYjNDM7JiM0Mzs7XG4gXHRcdH1cbiYjNDM7XHRcdG5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7XG4gXHRcdGRvX3RyYWNlID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0yNDA0LDcgJiM0MzsyNDM1LDcgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXHUwMDI2YmVnaW4pO1xuLVx0XHR0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoY2lkeCwgc2lkeCwgdGlkeCwgcixcbiYjNDM7XHRcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcbiBcdFx0XHRcdGRhbW9uX25yX3JlZ2lvbnModCksIGRvX3RyYWNlKTtcbiBcdFx0c3pfYXBwbGllZCA9IGMtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZShjLCB0LCByLCBzLFxuIFx0XHRcdFx0XHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xuQEAgLTI2NzYsNyAmIzQzOzI3MDcsNyBAQCBzdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuIFx0XHRcdHBoeXNfYWRkcl90IGFkZHIsIGVuZF9hZGRyO1xuIFxuLVx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXG4mIzQzO1x0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHQvKiBDb252ZXJ0IGZyb20gY29yZSBhZGRyZXNzIHVuaXRzIHRvIHBoeXNpY2FsIGJ5dGVzICovXG5AQCAtMjk2NSw3ICYjNDM7Mjk5Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXG4mIzQzO1x0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMzA2OSw3ICYjNDM7MzEwMCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXG4gXHRsLVx1MDAzZW5yX2FjY2Vzc2VzID0gKGwtXHUwMDNlbnJfYWNjZXNzZXMgKiBzel9sICYjNDM7IHItXHUwMDNlbnJfYWNjZXNzZXMgKiBzel9yKSAvXG4gXHRcdFx0KHN6X2wgJiM0Mzsgc3pfcik7XG4tXHRsLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gbC1cdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwO1xuIFx0bC1cdTAwM2VhZ2UgPSAobC1cdTAwM2VhZ2UgKiBzel9sICYjNDM7IHItXHUwMDNlYWdlICogc3pfcikgLyAoc3pfbCAmIzQzOyBzel9yKTtcbiBcdGwtXHUwMDNlYXIuZW5kID0gci1cdTAwM2Vhci5lbmQ7XG4gXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbkBAIC0zMDgwLDIwICYjNDM7MzExMCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuLXtcbi1cdFdBUk5fT05DRShyLVx1MDAzZW5yX2FjY2Vzc2VzICE9IHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgLyAxMDAwMCxcbi1cdFx0XHRcJiMzNDtucl9hY2Nlc3NlcyAoJXUpICE9IG5yX2FjY2Vzc2VzX2JwICgldSlcXG5cJiMzNDssXG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlcywgci1cdTAwM2Vucl9hY2Nlc3Nlc19icCk7XG4tfVxuLSNlbHNlXG4tc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi17XG4tfVxuLSNlbmRpZlxuLVxuLVxuIC8qXG4gICogTWVyZ2UgYWRqYWNlbnQgcmVnaW9ucyBoYXZpbmcgc2ltaWxhciBhY2Nlc3MgZnJlcXVlbmNpZXNcbiAgKlxuQEAgLTMxMDcsNyAmIzQzOzMxMjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbiBcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpwcmV2ID0gTlVMTCwgKm5leHQ7XG4gXG4gXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7XG4tXHRcdGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHIpO1xuIFx0XHRpZiAoYWJzKHItXHUwMDNlbnJfYWNjZXNzZXMgLSByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpIFx1MDAzZSB0aHJlcylcbiBcdFx0XHRyLVx1MDAzZWFnZSA9IDA7XG4gXHRcdGVsc2UgaWYgKChyLVx1MDAzZW5yX2FjY2Vzc2VzID09IDApICE9IChyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPT0gMCkpXG5AQCAtMzE5Niw3ICYjNDM7MzIxMSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFxuIFx0bmV3LVx1MDAzZWFnZSA9IHItXHUwMDNlYWdlO1xuIFx0bmV3LVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XG4tXHRuZXctXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSByLVx1MDAzZW5yX2FjY2Vzc2VzX2JwO1xuIFx0bmV3LVx1MDAzZW5yX2FjY2Vzc2VzID0gci1cdTAwM2Vucl9hY2Nlc3NlcztcbiBcdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xuIFx0bWVtY3B5KG5ldy1cdTAwM2Vwcm9iZV9oaXRzLCByLVx1MDAzZXByb2JlX2hpdHMsIHNpemVvZihyLVx1MDAzZXByb2JlX2hpdHMpKTtcbkBAIC0zNTcxLDggJiM0MzszNTg1LDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRcdFx0XHQgKiBhZ2dyZWdhdGlvbiwgYW5kIG1ha2UgYWdncmVnYXRpb25cbiBcdFx0XHRcdCAqIGluZm9ybWF0aW9uIHJlc2V0IGZvciBhbGwgcmVnaW9ucy4gIFRoZW4sXG4gXHRcdFx0XHQgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbFxuLVx0XHRcdFx0ICogd2lsbCBtYWtlIHRoZSByZWdpb24gaW5mb3JtYXRpb24gaW52YWxpZCxcbi1cdFx0XHRcdCAqIHBhcnRpY3VsYXJseSBmb3IgLVx1MDAzZW5yX2FjY2Vzc2VzX2JwLlxuJiM0MztcdFx0XHRcdCAqIHdpbGwgbWFrZSB0aGUgcmVnaW9uIGluZm9ybWF0aW9uIGludmFsaWQuXG4gXHRcdFx0XHQgKlxuIFx0XHRcdFx0ICogUmVzZXQgLVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIHRvIGF2b2lkIHRoYXQuXG4gXHRcdFx0XHQgKiBJdCB3aWxsIGFueXdheSBjb3JyZWN0bHkgdXBkYXRlZCBhZnRlciB0aGlzXG5AQCAtMzcxMSw3MiAmIzQzOzM3MjQsMTggQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFx1MDAyNmFkZHJfcmFuZ2UsIDEsIG1pbl9yZWdpb25fc3opO1xuIH1cbiBcbi0vKlxuLSAqIGRhbW9uX21vdmluZ19zdW0oKSAtIENhbGN1bGF0ZSBhbiBpbmZlcnJlZCBtb3Zpbmcgc3VtIHZhbHVlLlxuLSAqIEBtdnN1bTpcdEluZmVycmVkIHN1bSBvZiB0aGUgbGFzdCBAbGVuX3dpbmRvdyB2YWx1ZXMuXG4tICogQG5vbXZzdW06XHROb24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCBkaXNjcmV0ZSBAbGVuX3dpbmRvdyB3aW5kb3cgdmFsdWVzLlxuLSAqIEBsZW5fd2luZG93Olx0VGhlIG51bWJlciBvZiBsYXN0IHZhbHVlcyB0byB0YWtlIGNhcmUgb2YuXG4tICogQG5ld192YWx1ZTpcdE5ldyB2YWx1ZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHBzZXVkbyBtb3Zpbmcgc3VtLlxuLSAqXG4tICogTW92aW5nIHN1bSAobW92aW5nIGF2ZXJhZ2UgKiB3aW5kb3cgc2l6ZSkgaXMgZ29vZCBmb3IgaGFuZGxpbmcgbm9pc2UsIGJ1dFxuLSAqIHRoZSBjb3N0IG9mIGtlZXBpbmcgcGFzdCB2YWx1ZXMgY2FuIGJlIGhpZ2ggZm9yIGFyYml0cmFyeSB3aW5kb3cgc2l6ZS4gIFRoaXNcbi0gKiBmdW5jdGlvbiBpbXBsZW1lbnRzIGEgbGlnaHR3ZWlnaHQgcHNldWRvIG1vdmluZyBzdW0gZnVuY3Rpb24gdGhhdCBkb2VzbiYjMzk7dFxuLSAqIGtlZXAgdGhlIHBhc3Qgd2luZG93IHZhbHVlcy5cbi0gKlxuLSAqIEl0IHNpbXBseSBhc3N1bWVzIHRoZXJlIHdhcyBubyBub2lzZSBpbiB0aGUgcGFzdCwgYW5kIGdldCB0aGUgbm8tbm9pc2Vcbi0gKiBhc3N1bWVkIHBhc3QgdmFsdWUgdG8gZHJvcCBmcm9tIEBub212c3VtIGFuZCBAbGVuX3dpbmRvdy4gIEBub212c3VtIGlzIGFcbi0gKiBub24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCB3aW5kb3cuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIHdlXG4tICogaGF2ZSAyNSB2YWx1ZXMsIEBub212c3VtIGlzIHRoZSBzdW0gb2YgdGhlIDExdGggdG8gMjB0aCB2YWx1ZXMgb2YgdGhlIDI1XG4tICogdmFsdWVzLiAgSGVuY2UsIHRoaXMgZnVuY3Rpb24gc2ltcGx5IGRyb3BzIEBub212c3VtIC8gQGxlbl93aW5kb3cgZnJvbVxuLSAqIGdpdmVuIEBtdnN1bSBhbmQgYWRkIEBuZXdfdmFsdWUuXG4tICpcbi0gKiBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIEBub212c3VtIGlzIDUwLCB0aGUgbGFzdCAxMCB2YWx1ZXMgZm9yXG4tICogdGhlIGxhc3Qgd2luZG93IGNvdWxkIGJlIHZhcnksIGUuZy4sIDAsIDEwLCAwLCAxMCwgMCwgMTAsIDAsIDAsIDAsIDIwLiAgRm9yXG4tICogY2FsY3VsYXRpbmcgbmV4dCBtb3Zpbmcgc3VtIHdpdGggYSBuZXcgdmFsdWUsIHdlIHNob3VsZCBkcm9wIDAgZnJvbSA1MCBhbmRcbi0gKiBhZGQgdGhlIG5ldyB2YWx1ZS4gIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyBpdCBnb3QgdmFsdWUgNSBmb3IgZWFjaFxuLSAqIG9mIHRoZSBsYXN0IHRlbiB0aW1lcy4gIEJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uLCB3aGVuIHRoZSBuZXh0IHZhbHVlIGlzXG4tICogbWVhc3VyZWQsIGl0IGRyb3BzIHRoZSBhc3N1bWVkIHBhc3QgdmFsdWUsIDUgZnJvbSB0aGUgY3VycmVudCBzdW0sIGFuZCBhZGRcbi0gKiB0aGUgbmV3IHZhbHVlIHRvIGdldCB0aGUgdXBkYXRlZCBwc2VkdW8tbW92aW5nIGF2ZXJhZ2UuXG4tICpcbi0gKiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBjb3VsZCBoYXZlIGVycm9ycywgYnV0IHRoZSBlcnJvcnMgd2lsbCBiZSBkaXNhcHBlYXJlZFxuLSAqIGZvciBldmVyeSBAbGVuX3dpbmRvdyBhbGlnbmVkIGNhbGxzLiAgRm9yIGV4YW1wbGUsIGlmIEBsZW5fd2luZG93IGlzIDEwLCB0aGVcbi0gKiBwc2V1ZG8gbW92aW5nIHN1bSB3aXRoIDExdGggdmFsdWUgdG8gMTl0aCB2YWx1ZSB3b3VsZCBoYXZlIGFuIGVycm9yLiAgQnV0XG4tICogdGhlIHN1bSB3aXRoIDIwdGggdmFsdWUgd2lsbCBub3QgaGF2ZSB0aGUgZXJyb3IuXG4tICpcbi0gKiBSZXR1cm46IFBzZXVkby1tb3ZpbmcgYXZlcmFnZSBhZnRlciBnZXR0aW5nIHRoZSBAbmV3X3ZhbHVlLlxuLSAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbW92aW5nX3N1bSh1bnNpZ25lZCBpbnQgbXZzdW0sIHVuc2lnbmVkIGludCBub212c3VtLFxuLVx0XHR1bnNpZ25lZCBpbnQgbGVuX3dpbmRvdywgdW5zaWduZWQgaW50IG5ld192YWx1ZSlcbi17XG4tXHRyZXR1cm4gbXZzdW0gLSBub212c3VtIC8gbGVuX3dpbmRvdyAmIzQzOyBuZXdfdmFsdWU7XG4tfVxuLVxuIC8qKlxuICAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKSAtIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24uXG4gICogQHI6XHRcdFRoZSBEQU1PTiByZWdpb24gdG8gdXBkYXRlIGZvciBpdHMgYWNjZXNzIGNoZWNrIHJlc3VsdC5cbiAgKiBAYWNjZXNzZWQ6XHRXaGV0aGVyIHRoZSByZWdpb24gaGFzIGFjY2Vzc2VkIGR1cmluZyBsYXN0IHNhbXBsaW5nIGludGVydmFsLlxuLSAqIEBhdHRyczpcdFRoZSBkYW1vbl9hdHRycyBvZiB0aGUgREFNT04gY29udGV4dC5cbiAgKlxuICAqIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24gd2l0aCB0aGUgcmVnaW9uJiMzOTtzIGxhc3Qgc2FtcGxpbmcgaW50ZXJ2YWxcbiAgKiBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxuICAqXG4gICogVXN1YWxseSB0aGlzIHdpbGwgYmUgY2FsbGVkIGJ5IFx1MDAyNmRhbW9uX29wZXJhdGlvbnMtXHUwMDNlY2hlY2tfYWNjZXNzZXMgY2FsbGJhY2suXG4gICovXG4tdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQsXG4tXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4mIzQzO3ZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsZW5fd2luZG93ID0gMTtcbi1cbi1cdC8qXG4tXHQgKiBzYW1wbGVfaW50ZXJ2YWwgY2FuIGJlIHplcm8sIGJ1dCBjYW5ub3QgYmUgbGFyZ2VyIHRoYW5cbi1cdCAqIGFnZ3JfaW50ZXJ2YWwsIG93aW5nIHRvIHZhbGlkYXRpb24gb2YgZGFtb25fc2V0X2F0dHJzKCkuXG4tXHQgKi9cbi1cdGlmIChhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXG4tXHRcdGxlbl93aW5kb3cgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpO1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGRhbW9uX21vdmluZ19zdW0oci1cdTAwM2Vucl9hY2Nlc3Nlc19icCxcbi1cdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgKiAxMDAwMCwgbGVuX3dpbmRvdyxcbi1cdFx0XHRhY2Nlc3NlZCA/IDEwMDAwIDogMCk7XG4tXG4gXHRpZiAoYWNjZXNzZWQpXG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMmIzQzOyYjNDM7O1xuIH1cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggNWMyZGE0NWY5ODhjZjkuLjYxNzI0NjQ5ODE3MzA0IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyLCB1bnNpZ25lZCBsb25nICpmb2xpb19zeilcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycywgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcbiB7XG4gXHRzdGF0aWMgcGh5c19hZGRyX3QgbGFzdF9hZGRyO1xuIFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9mb2xpb19zeiA9IFBBR0VfU0laRTtcbkBAIC05MSwxMiAmIzQzOzkxLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHQvKiBJZiB0aGUgcmVnaW9uIGlzIGluIHRoZSBsYXN0IGNoZWNrZWQgcGFnZSwgcmV1c2UgdGhlIHJlc3VsdCAqL1xuIFx0aWYgKEFMSUdOX0RPV04obGFzdF9hZGRyLCBsYXN0X2ZvbGlvX3N6KSA9PVxuIFx0XHRcdFx0QUxJR05fRE9XTihzYW1wbGluZ19hZGRyLCBsYXN0X2ZvbGlvX3N6KSkge1xuLVx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbiYjNDM7XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl9wYV95b3VuZyhzYW1wbGluZ19hZGRyLCBcdTAwMjZsYXN0X2ZvbGlvX3N6KTtcbi1cdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xuJiM0MztcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXG4gXHRsYXN0X2FkZHIgPSBzYW1wbGluZ19hZGRyO1xuIH1cbkBAIC0xMDksOCAmIzQzOzEwOSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFxuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKFxuLVx0XHRcdFx0XHRyLCBcdTAwMjZjdHgtXHUwMDNlYXR0cnMsIGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xuJiM0MztcdFx0XHRfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhyLCBjdHgtXHUwMDNlYWRkcl91bml0KTtcbiBcdFx0XHRtYXhfbnJfYWNjZXNzZXMgPSBtYXgoci1cdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggNDFmOTNhMTgyM2JmMTMuLmRiZjJiMDUxNWQ1ODI5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0xNTcsNyAmIzQzOzE1Nyw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uIHtcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcbi1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uKVxuJiM0MztcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xuIFxuQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdHN5c2ZzX3JlZ2lvbi1cdTAwM2Vrb2JqID0gKHN0cnVjdCBrb2JqZWN0KXt9O1xuIFx0c3lzZnNfcmVnaW9uLVx1MDAzZWFyID0gcmVnaW9uLVx1MDAzZWFyO1xuLVx0c3lzZnNfcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzID0gcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzX2JwIC8gMTAwMDA7XG4mIzQzO1x0c3lzZnNfcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ocmVnaW9uLCBjdHgpO1xuIFx0c3lzZnNfcmVnaW9uLVx1MDAzZWFnZSA9IHJlZ2lvbi1cdTAwM2VhZ2U7XG4gXHRzeXNmc19yZWdpb24tXHUwMDNlcHJvYmVzID0gTlVMTDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN5c2ZzX3JlZ2lvbi1cdTAwM2VsaXN0KTtcbkBAIC0zMTIyLDcgJiM0MzszMTIyLDcgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuIFx0aWYgKHRvdGFsX2J5dGVzX29ubHkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJlZ2lvbiA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2Mocik7XG4mIzQzO1x0cmVnaW9uID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhyLCBjdHgpO1xuIFx0aWYgKCFyZWdpb24pXG4gXHRcdHJldHVybjtcbiBcdHJlZ2lvbi1cdTAwM2Vzel9maWx0ZXJfcGFzc2VkID0gc3pfZmlsdGVyX3Bhc3NlZDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5mMWZhZWJiNmZmOTkzZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTE0LDcgJiM0MzsxMTQsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsXCYjMzQ7KTtcbiBcdFx0XHR9XG4gXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IGFjY2Vzc2VzW2l0XVtpcl07XG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGFjY2Vzc2VzW2l0XVtpcl0gKiAxMDAwMDtcbiBcdFx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuIFx0XHR9XG4gXHRcdGl0JiM0MzsmIzQzOztcbkBAIC0xNTEsNyAmIzQzOzE1MCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4gXHR9XG4tXHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gNDIwMDAwO1xuIFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDQyO1xuIFx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gMTU7XG4gXHRyLVx1MDAzZWFnZSA9IDEwO1xuQEAgLTE2NCw3ICYjNDM7MTYyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctXHUwMDNlYXIuc3RhcnQsIDI1dWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJfbmV3LVx1MDAzZWFyLmVuZCwgMTAwdWwpO1xuIFxuLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHJfbmV3LVx1MDAzZW5yX2FjY2Vzc2VzX2JwKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2Vucl9hY2Nlc3Nlcyk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbkBAIC0xODcsNyAmIzQzOzE4NCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4gXHR9XG4gXHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XG4tXHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMTAwMDAwO1xuIFx0ci1cdTAwM2VhZ2UgPSA5O1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbiBcdHIyID0gZGFtb25fbmV3X3JlZ2lvbigxMDAsIDMwMCk7XG5AQCAtMTk2LDcgJiM0MzsxOTIsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2Vjb25kIHJlZ2lvbiBhbGxvYyBmYWlsXCYjMzQ7KTtcbiBcdH1cbiBcdHIyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMjA7XG4tXHRyMi1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDIwMDAwMDtcbiBcdHIyLVx1MDAzZWFnZSA9IDIxO1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyMiwgdCk7XG4gXG5AQCAtMjA0LDcgJiM0MzsxOTksNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgMHVsKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLmVuZCwgMzAwdWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXMsIDE2dSk7XG4tXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3Nlc19icCwgMTYwMDAwdSk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VhZ2UsIDE3dSk7XG4gXG4gXHRpID0gMDtcbkBAIC0yNTIsNyAmIzQzOzI0Niw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4gXHRcdH1cbiBcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IG5yc1tpXTtcbi1cdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IG5yc1tpXSAqIDEwMDAwO1xuIFx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuIFx0fVxuIFxuQEAgLTU1Miw3ICYjNDM7NTQ1LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsXCYjMzQ7KTtcbiBcbiBcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAxNTtcbi1cdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSAxNTAwMDA7XG4gXHRyLVx1MDAzZWFnZSA9IDIwO1xuIFxuIFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG5AQCAtNjA0LDE4ICYjNDM7NTk2LDI3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21vdmluZ19zdW0oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X212c3VtKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXZzdW0gPSA1MDAwMCwgbm9tdnN1bSA9IDUwMDAwLCBsZW5fd2luZG93ID0gMTA7XG4tXHR1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlc1tdID0gezEwMDAwLCAwLCAxMDAwMCwgMCwgMCwgMCwgMTAwMDAsIDAsIDAsIDB9O1xuLVx0dW5zaWduZWQgaW50IGV4cGVjdHNbXSA9IHs1NTAwMCwgNTAwMDAsIDU1MDAwLCA1MDAwMCwgNDUwMDAsIDQwMDAwLFxuLVx0XHQ0NTAwMCwgNDAwMDAsIDM1MDAwLCAzMDAwMH07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbnB1dF9leHBlY3RzW10gPSB7XG4mIzQzO1x0XHQvKiBjdXJyZW50IHZhbHVlLCBsYXN0IHZhbHVlLCByZW1haW5pbmcgd2luZG93IChicCkgKi9cbiYjNDM7XHRcdDAsIDQ5LCAxMDAwMCwgNDksXHQvKiAwICYjNDM7IDQ5ICogMSAqL1xuJiM0MztcdFx0MywgMTAsIDcwMDAsIDEwLFx0LyogMyAmIzQzOyAxMCAqIDAuNyAqL1xuJiM0MztcdFx0MywgMTAsIDUwMDAsIDgsXHRcdC8qIDMgJiM0MzsgMTAgKiAwLjUgKi9cbiYjNDM7XHRcdDMyLCAxMDAsIDEwMDAsIDQyLFx0LyogMzIgJiM0MzsgMTAwICogMC4xICovXG4mIzQzO1x0XHQ0MiwgNDksIDAsIDQyLFx0XHQvKiA0MiAmIzQzOyA0OSAqIDAgKi9cbiYjNDM7XHR9O1xuJiM0MztcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShuZXdfdmFsdWVzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0bXZzdW0gPSBkYW1vbl9tb3Zpbmdfc3VtKG12c3VtLCBub212c3VtLCBsZW5fd2luZG93LFxuLVx0XHRcdFx0bmV3X3ZhbHVlc1tpXSk7XG4tXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBtdnN1bSwgZXhwZWN0c1tpXSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShpbnB1dF9leHBlY3RzKTsgaSAmIzQzOz0gNCkge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X25yID0gaW5wdXRfZXhwZWN0c1tpXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9uciA9IGlucHV0X2V4cGVjdHNbaSAmIzQzOyAxXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbGVmdF93aW5kb3dfYnAgPSBpbnB1dF9leHBlY3RzW2kgJiM0MzsgMl07XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGV4cGVjdCA9IGlucHV0X2V4cGVjdHNbaSAmIzQzOyAzXTtcbiYjNDM7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbXZzdW0oY3VycmVudF9uciwgbGFzdF9ucixcbiYjNDM7XHRcdFx0XHRcdGxlZnRfd2luZG93X2JwKSwgZXhwZWN0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMTQ2OSw3ICYjNDM7MTQ3MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSxcbi1cdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tb3Zpbmdfc3VtKSxcbiYjNDM7XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMpLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBlNzNlYzFjZTAxNmU1Yi4uMjA1OGRiOWMwMWQ1MmYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNDkzLDI3ICYjNDM7NDkzLDI2IEBAIHN0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gICogclx0dGhlIHJlZ2lvbiB0byBiZSBjaGVja2VkXG4gICovXG4gc3RhdGljIHZvaWQgX19kYW1vbl92YV9jaGVja19hY2Nlc3Moc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIHNhbWVfdGFyZ2V0LFxuLVx0XHRcdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIHNhbWVfdGFyZ2V0KVxuIHtcbiBcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfYWRkcjtcbiBcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfZm9saW9fc3ogPSBQQUdFX1NJWkU7XG4gXHRzdGF0aWMgYm9vbCBsYXN0X2FjY2Vzc2VkO1xuIFxuIFx0aWYgKCFtbSkge1xuLVx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlLCBhdHRycyk7XG4mIzQzO1x0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0LyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi9cbiBcdGlmIChzYW1lX3RhcmdldCBcdTAwMjZcdTAwMjYgKEFMSUdOX0RPV04obGFzdF9hZGRyLCBsYXN0X2ZvbGlvX3N6KSA9PVxuIFx0XHRcdFx0QUxJR05fRE9XTihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSkge1xuLVx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbiYjNDM7XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cdTAwM2VzYW1wbGluZ19hZGRyLCBcdTAwMjZsYXN0X2ZvbGlvX3N6KTtcbi1cdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xuJiM0MztcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXG4gXHRsYXN0X2FkZHIgPSByLVx1MDAzZXNhbXBsaW5nX2FkZHI7XG4gfVxuQEAgLTUzMCw4ICYjNDM7NTI5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuIFx0XHRzYW1lX3RhcmdldCA9IGZhbHNlO1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKG1tLCByLCBzYW1lX3RhcmdldCxcbi1cdFx0XHRcdFx0XHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbiYjNDM7XHRcdFx0X19kYW1vbl92YV9jaGVja19hY2Nlc3MobW0sIHIsIHNhbWVfdGFyZ2V0KTtcbiBcdFx0XHRtYXhfbnJfYWNjZXNzZXMgPSBtYXgoci1cdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcbiBcdFx0XHRzYW1lX3RhcmdldCA9IHRydWU7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuaW5kZXggOTcyOTQ4ZTYyMTVmMWQuLjQ5NDJhZmRmNDZjZDQ0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIGRlZiByZWdpb25fdG9fZGljdChyZWdpb24pOlxuICAgICAgICAgWyYjMzk7YXImIzM5OywgYWRkcl9yYW5nZV90b19kaWN0XSxcbiAgICAgICAgIFsmIzM5O3NhbXBsaW5nX2FkZHImIzM5OywgaW50XSxcbiAgICAgICAgIFsmIzM5O25yX2FjY2Vzc2VzJiMzOTssIGludF0sXG4tICAgICAgICBbJiMzOTtucl9hY2Nlc3Nlc19icCYjMzk7LCBpbnRdLFxuICAgICAgICAgWyYjMzk7YWdlJiMzOTssIGludF0sXG4gICAgICAgICBdKVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSYjMzQ7LAogICAgJiMzNDtfX2RhbW9zX3ZhbGlkX3RhcmdldCYjMzQ7LAogICAgJiMzNDtkYW1vc19hcHBseV9zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfcmVnaW9uc19vZiYjMzQ7LAogICAgJiMzNDtkYW1vbl9zcGxpdF9yZWdpb25fYXQmIzM0OywKICAgICYjMzQ7X19kYW1vbl9wYV9jaGVja19hY2Nlc3MmIzM0OywKICAgICYjMzQ7X19kYW1vbl92YV9jaGVja19hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBgbnJfYWNjZXNzZXNfYnBgIGZpZWxkIHdpdGggYSBwc2V1ZG8gbW92aW5nIHN1bSBjYWxjdWxhdGlvbiAoYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCkuIFRoaXMgYWZmZWN0cyBob3cgYWNjZXNzIGZyZXF1ZW5jaWVzIGFyZSBjYWxjdWxhdGVkLCBtZXJnZWQsIHNwbGl0LCBhbmQgZXZhbHVhdGVkIGZvciBzY2hlbWVzIGFjcm9zcyBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZGZjMDY2ZGYwZWE2NmYyMTBhNDBhYTg0NzliOGExNDRkYWE0OTY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMDU6NTU6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKaW5kZXggY2ZiYmY4YmEyOGY2MzIuLjgwNWUwODlmZjRmMmY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCkBAIC00NSw4ICYjNDM7NDUsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7CiAgKiBAYXI6CQkJVGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIHJlZ2lvbi4KICAqIEBzYW1wbGluZ19hZGRyOglBZGRyZXNzIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBuZXh0IGFjY2VzcyBjaGVjay4KICAqIEBucl9hY2Nlc3NlczoJQWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi4KLSAqIEBucl9hY2Nlc3Nlc19icDoJQG5yX2FjY2Vzc2VzIGluIGJhc2lzIHBvaW50ICgwLjAxJSkgdGhhdCB1cGRhdGVkIGZvcgotICoJCQllYWNoIHNhbXBsaW5nIGludGVydmFsLgogICogQHByb2JlX2hpdHM6CQlOdW1iZXIgb2YgcHJvYmUtcG9zaXRpdmUgcmVnaW9uIHNhbXBsZXMuCiAgKiBAbGlzdDoJCUxpc3QgaGVhZCBmb3Igc2libGluZ3MuCiAgKiBAYWdlOgkJQWdlIG9mIHRoaXMgcmVnaW9uLgpAQCAtNTksMTMgJiM0Mzs1Nyw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHsKICAqIG5vdCBiZSBkb25lIHdpdGggZGlyZWN0IGFjY2VzcyBidXQgd2l0aCB0aGUgaGVscGVyIGZ1bmN0aW9uLAogICogZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSgpLgogICoKLSAqIEBucl9hY2Nlc3Nlc19icCBpcyBhbm90aGVyIHJlcHJlc2VudGF0aW9uIG9mIEBucl9hY2Nlc3NlcyBpbiBiYXNpcyBwb2ludAotICogKDEgaW4gMTAsMDAwKSB0aGF0IHVwZGF0ZWQgZm9yIGV2ZXJ5ICZhbXA7ZGFtb25fYXR0cnMtJmd0O3NhbXBsZV9pbnRlcnZhbCBpbiBhCi0gKiBtYW5uZXIgc2ltaWxhciB0byBtb3Zpbmcgc3VtLiAgQnkgdGhlIGFsZ29yaXRobSwgdGhpcyB2YWx1ZSBiZWNvbWVzCi0gKiBAbnJfYWNjZXNzZXMgKiAxMDAwMCBmb3IgZXZlcnkgJmFtcDtzdHJ1Y3QgZGFtb25fYXR0cnMtJmd0O2FnZ3JfaW50ZXJ2YWwuICBUaGlzIGNhbgotICogYmUgdXNlZCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBpcyB0b28gaHVnZSBhbmQgdGhlcmVmb3JlIGNhbm5vdCB3YWl0Ci0gKiBmb3IgaXQgYmVmb3JlIGdldHRpbmcgdGhlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMuCi0gKgogICogQGFnZSBpcyBpbml0aWFsbHkgemVybywgaW5jcmVhc2VkIGZvciBlYWNoIGFnZ3JlZ2F0aW9uIGludGVydmFsLCBhbmQgcmVzZXQKICAqIHRvIHplcm8gYWdhaW4gaWYgdGhlIGFjY2VzcyBmcmVxdWVuY3kgaXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLiAgSWYgdHdvCiAgKiByZWdpb25zIGFyZSBtZXJnZWQgaW50byBhIG5ldyByZWdpb24sIGJvdGggQG5yX2FjY2Vzc2VzIGFuZCBAYWdlIG9mIHRoZSBuZXcKQEAgLTc1LDcgJiM0Mzs2Niw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gewogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFyOwogCXVuc2lnbmVkIGxvbmcgc2FtcGxpbmdfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7Ci0JdW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzX2JwOwogCXVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKQEAgLTEwMTEsMTEgJiM0MzsxMDAxLDEyIEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpOwogdm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKTsKIAogc3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKIAkJdW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTsKLXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLAotCQlzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTsKJiM0Mzt2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCk7CiAKIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX25ld19maWx0ZXIoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlLAogCQlib29sIG1hdGNoaW5nLCBib29sIGFsbG93KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oCmluZGV4IDc4Mzg4NTM4YWNmNDQ2Li44ODUxNzI3YWUxNjI3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oCkBAIC03OCw5ICYjNDM7NzgsMTEgQEAgVFJBQ0VfRVZFTlRfQ09ORElUSU9OKGRhbW9zX2JlZm9yZV9hcHBseSwKIAogCVRQX1BST1RPKHVuc2lnbmVkIGludCBjb250ZXh0X2lkeCwgdW5zaWduZWQgaW50IHNjaGVtZV9pZHgsCiAJCXVuc2lnbmVkIGludCB0YXJnZXRfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAotCQl1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucywgYm9vbCBkb190cmFjZSksCiYjNDM7CQl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHVuc2lnbmVkIGludCBucl9yZWdpb25zLAomIzQzOwkJYm9vbCBkb190cmFjZSksCiAKLQlUUF9BUkdTKGNvbnRleHRfaWR4LCBzY2hlbWVfaWR4LCB0YXJnZXRfaWR4LCByLCBucl9yZWdpb25zLCBkb190cmFjZSksCiYjNDM7CVRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX2FjY2Vzc2VzLAomIzQzOwkJbnJfcmVnaW9ucywgZG9fdHJhY2UpLAogCiAJVFBfQ09ORElUSU9OKGRvX3RyYWNlKSwKIApAQCAtMTAxLDcgJiM0MzsxMDMsNyBAQCBUUkFDRV9FVkVOVF9DT05ESVRJT04oZGFtb3NfYmVmb3JlX2FwcGx5LAogCQlfX2VudHJ5LSZndDt0YXJnZXRfaWR4ID0gdGFyZ2V0X2lkeDsKIAkJX19lbnRyeS0mZ3Q7c3RhcnQgPSByLSZndDthci5zdGFydDsKIAkJX19lbnRyeS0mZ3Q7ZW5kID0gci0mZ3Q7YXIuZW5kOwotCQlfX2VudHJ5LSZndDtucl9hY2Nlc3NlcyA9IHItJmd0O25yX2FjY2Vzc2VzX2JwIC8gMTAwMDA7CiYjNDM7CQlfX2VudHJ5LSZndDtucl9hY2Nlc3NlcyA9IG5yX2FjY2Vzc2VzOwogCQlfX2VudHJ5LSZndDthZ2UgPSByLSZndDthZ2U7CiAJCV9fZW50cnktJmd0O25yX3JlZ2lvbnMgPSBucl9yZWdpb25zOwogCSksCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggMDI3MjUwZTQzYzY2ZjIuLmY1MmE4OWY5ZmQ5NzdkIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0yMDgsNiAmIzQzOzIwOCw3MSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzOy8qCiYjNDM7ICogZGFtb25fbXZzdW0oKSAtIFJldHVybnMgcHNldWRvIG1vdmluZyBzdW0gdmFsdWUgZm9yIGEgdGltZSB3aW5kb3cuCiYjNDM7ICogQGN1cnJlbnRfbnI6CQlUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgYWdncmVnYXRpb24gd2luZG93LgomIzQzOyAqIEBsYXN0X25yOgkJVGhlIHZhbHVlIG9mIHRoZSBsYXN0IGFnZ3JlZ2F0aW9uIHdpbmRvdy4KJiM0MzsgKiBAbGVmdF93aW5kb3dfYnA6CUxlZnQgdGltZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBvZiBhIGNvdW50ZXIgdGhhdCBpcwomIzQzOyAqIGFnZ3JlZ2F0ZWQgZm9yIGVhY2ggdGltZSB3aW5kb3cuICBAY3VycmVudF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIKJiM0MzsgKiB0aGF0IGFnZ3JlZ2F0ZWQgc28gZmFyIChtYXliZSBub3QgeWV0IGNvbXBsZXRlKSwgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQomIzQzOyAqIGN1cnJlbnQgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuICBAbGFzdF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgdGhhdAomIzQzOyAqIGhhcyBjb21wbGV0ZWx5IGFnZ3JlZ2F0ZWQgaW4gdGhlIGxhc3QgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuCiYjNDM7ICogQGxlZnRfd2luZG93X2JwIHJlcHJlc2VudHMgaG93IG11Y2ggdGltZSBpcyBsZWZ0IGZvciB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbgomIzQzOyAqIHRpbWUgd2luZG93IGluIGJwICgxLzEwLDAwMCkuICBGb3IgZXhhbXBsZSwgdGhlIGFnZ3JlZ2F0aW9uIHRpbWUgd2luZG93IGlzCiYjNDM7ICogZm9yIGV2ZXJ5IDEwIHNlY29uZHMgYW5kIDcgc2Vjb25kcyBoYXMgcGFzc2VkIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlCiYjNDM7ICogY3VycmVudCB3aW5kb3csIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgMzAwMCAoKDEwIC0gNykgLyAxMCAqIDEwMDAwKS4KJiM0MzsgKgomIzQzOyAqIFRoZSBsb2dpYyBhc3N1bWVzIHRoZSBhZ2dyZWdhdGlvbiBpbiB0aGUgbGFzdCBwaGFzZSB3YXMgbWFkZSBpbiBhIHNpbmdsZQomIzQzOyAqIHNwZWVkLiAgQmFzZWQgb24gdGhlIGFzc3VtcHRpb24sIHRoZSB2YWx1ZSBmcm9tIHRoZSBsYXN0IHdpbmRvdyB0aGF0IG5lZWRzCiYjNDM7ICogdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBvcnRpb24gb2YgdGhlIGxhc3QKJiM0MzsgKiB2YWx1ZSBiYXNlZCBvbiB0aGUgcmVtYWluaW5nIHRpbWUgd2luZG93LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9uciwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbGFzdF9uciwgdW5zaWduZWQgbG9uZyBsZWZ0X3dpbmRvd19icCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdXJyZW50X25yICYjNDM7IG11bHRfZnJhYyhsYXN0X25yLCBsZWZ0X3dpbmRvd19icCwgMTAwMDApOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSgpIC0gUmV0dXJucyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuCiYjNDM7ICogQHI6CQlSZWdpb24gdG8gZ2V0IHRoZSBhY2Nlc3MgZnJlcXVlbmN5IG9mLgomIzQzOyAqIEBjdHg6CURBTU9OIGNvbnRleHQgb2YgQHIuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZm9yIGhvdyBtYW55IHNhbXBsaW5nIGl0ZXJhdGlvbnMgaW4gdGhlIGxhc3QKJiM0MzsgKiBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAoJmFtcDtkYW1vbl9hdHRycy0mZ3Q7YWdncl9pbnRlcnZhbCkgdGhlIHJlZ2lvbiB3YXMgZm91bmQgdG8KJiM0MzsgKiBiZSBhY2Nlc3NlZC4gIEhlbmNlIHRoZSB2YWx1ZSBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlbGF0aXZlIGFjY2VzcwomIzQzOyAqIGZyZXF1ZW5jeSBzY29yZSBvZiB0aGUgcmVnaW9uIChAcikuICBUaGUgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBzZXVkbwomIzQzOyAqIG1vdmluZyBzdW0sIGFuZCBoZW5jZSBpdCBpcyBub3QgYW4gZXhhY3QgdmFsdWUgYnV0IGp1c3QgYSBiZXN0LWVmZm9ydAomIzQzOyAqIHJlYXNvbmFibGUgZXN0aW1hdGlvbi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIHBzZXVkbyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuCiYjNDM7ICovCiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCwgYWdncl9pbnRlcnZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7CiYjNDM7CiYjNDM7CXNhbXBsZV9pbnRlcnZhbCA9IGN0eC0mZ3Q7YXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxOwomIzQzOwlhZ2dyX2ludGVydmFsID0gY3R4LSZndDthdHRycy5hZ2dyX2ludGVydmFsID8gOiAxOwomIzQzOwl3aW5kb3dfbGVuID0gYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbDsKJiM0MzsJaWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LSZndDtwYXNzZWRfc2FtcGxlX2ludGVydmFscywKJiM0MzsJCQkJY3R4LSZndDtuZXh0X2FnZ3JlZ2F0aW9uX3NpcykpCiYjNDM7CQlsZWZ0X3dpbmRvdyA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCWxlZnRfd2luZG93ID0gY3R4LSZndDtuZXh0X2FnZ3JlZ2F0aW9uX3NpcyAtCiYjNDM7CQkJY3R4LSZndDtwYXNzZWRfc2FtcGxlX2ludGVydmFsczsKJiM0MzsJbGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTsKJiM0MzsKJiM0MzsJaWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKQomIzQzOwkJcmV0dXJuIHItJmd0O2xhc3RfbnJfYWNjZXNzZXM7CiYjNDM7CiYjNDM7CXJldHVybiBkYW1vbl9tdnN1bShyLSZndDtucl9hY2Nlc3Nlcywgci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlcywKJiM0MzsJCQlsZWZ0X3dpbmRvd19icCk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFkKIHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtMjM3LDcgJiM0MzszMDIsNiBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogCXJlZ2lvbi0mZ3Q7YXIuc3RhcnQgPSBzdGFydDsKIAlyZWdpb24tJmd0O2FyLmVuZCA9IGVuZDsKIAlyZWdpb24tJmd0O25yX2FjY2Vzc2VzID0gMDsKLQlyZWdpb24tJmd0O25yX2FjY2Vzc2VzX2JwID0gMDsKIAlmb3IgKGkgPSAwOyBpICZsdDsgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspCiAJCXJlZ2lvbi0mZ3Q7cHJvYmVfaGl0c1tpXSA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtyZWdpb24tJmd0O2xpc3QpOwpAQCAtODA5LDIyICYjNDM7ODczLDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQlzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsCiAJCWJvb2wgYWdncmVnYXRpbmcpCiB7Ci0JaWYgKCFhZ2dyZWdhdGluZykgewomIzQzOwlyLSZndDtsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycygKJiM0MzsJCQlyLSZndDtsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7CiYjNDM7CWlmICghYWdncmVnYXRpbmcpCiAJCXItJmd0O25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycygKIAkJCQlyLSZndDtucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpOwotCQlyLSZndDtucl9hY2Nlc3Nlc19icCA9IHItJmd0O25yX2FjY2Vzc2VzICogMTAwMDA7Ci0JfSBlbHNlIHsKJiM0MzsJZWxzZQogCQkvKgogCQkgKiBpZiB0aGlzIGlzIGNhbGxlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBhZ2dyZWdhdGlvbiwgcmVzZXQKIAkJICogdGhlIGFnZ3JlZ2F0aW9ucyB3ZSBtYWRlIHNvIGZhciBmb3IgdGhpcyBhZ2dyZWdhdGlvbgogCQkgKiBpbnRlcnZhbC4gIEluIG90aGVyIHdvcmRzLCBtYWtlIHRoZSBzdGF0dXMgbGlrZQogCQkgKiBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoKSBpcyBjYWxsZWQuCiAJCSAqLwotCQlyLSZndDtsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycygKLQkJCQlyLSZndDtsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7Ci0JCXItJmd0O25yX2FjY2Vzc2VzX2JwID0gci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwOwogCQlyLSZndDtucl9hY2Nlc3NlcyA9IDA7Ci0JfQogCXItJmd0O2FnZSA9IGRhbW9uX2FnZV9mb3JfbmV3X2F0dHJzKHItJmd0O2FnZSwgb2xkX2F0dHJzLCBuZXdfYXR0cnMpOwogfQogCkBAIC0xOTM1LDM2ICYjNDM7MTk5Niw2IEBAIGludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbCkKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFdhcm4gYW5kIGZpeCBjb3JydXB0ZWQgLSZndDtucl9hY2Nlc3Nlc1tfYnBdIGZvciBpbnZlc3RpZ2F0aW9ucyBhbmQgcHJldmVudGluZwotICogdGhlIHByb2JsZW0gYmVpbmcgcHJvcGFnYXRlZC4KLSAqLwotc3RhdGljIHZvaWQgZGFtb25fd2Fybl9maXhfbnJfYWNjZXNzZXNfY29ycnVwdGlvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKQotewotCWlmIChyLSZndDtucl9hY2Nlc3Nlc19icCA9PSByLSZndDtucl9hY2Nlc3NlcyAqIDEwMDAwKQotCQlyZXR1cm47Ci0JV0FSTl9PTkNFKHRydWUsICYjMzQ7aW52YWxpZCBucl9hY2Nlc3Nlc19icCBhdCByZXNldDogJXUgJXVcbiYjMzQ7LAotCQkJci0mZ3Q7bnJfYWNjZXNzZXNfYnAsIHItJmd0O25yX2FjY2Vzc2VzKTsKLQlyLSZndDtucl9hY2Nlc3Nlc19icCA9IHItJmd0O25yX2FjY2Vzc2VzICogMTAwMDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZCi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAotCQlzdHJ1Y3QgZGFtb25fY3R4ICpjKQotewotCVdBUk5fT05DRShyLSZndDtucl9hY2Nlc3Nlc19icCAhPSByLSZndDtsYXN0X25yX2FjY2Vzc2VzICogMTAwMDAsCi0JCQkmIzM0O25yX2FjY2Vzc2VzX2JwICV1IGxhc3RfbnJfYWNjZXNzZXMgJXUgc2lzICVsdSAlbHVcbiYjMzQ7LAotCQkJci0mZ3Q7bnJfYWNjZXNzZXNfYnAsIHItJmd0O2xhc3RfbnJfYWNjZXNzZXMsCi0JCQljLSZndDtwYXNzZWRfc2FtcGxlX2ludGVydmFscywgYy0mZ3Q7bmV4dF9hZ2dyZWdhdGlvbl9zaXMpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCi0JCXN0cnVjdCBkYW1vbl9jdHggKmMpCi17Ci19Ci0jZW5kaWYKLQotCiAvKgogICogUmVzZXQgdGhlIGFnZ3JlZ2F0ZWQgbW9uaXRvcmluZyByZXN1bHRzICgmIzM5O25yX2FjY2Vzc2VzJiMzOTsgb2YgZWFjaCByZWdpb24pLgogICovCkBAIC0xOTg5LDEyICYjNDM7MjAyMCwxMCBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYykKIAkJCXRyYWNlX2RhbW9uX2FnZ3JlZ2F0ZWQodGksIHIsIGRhbW9uX25yX3JlZ2lvbnModCkpOwogCQkJdHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWQodGksIHIsCiAJCQkJCWRhbW9uX25yX3JlZ2lvbnModCksIG5yX3Byb2Jlcyk7Ci0JCQlkYW1vbl93YXJuX2ZpeF9ucl9hY2Nlc3Nlc19jb3JydXB0aW9uKHIpOwogCQkJci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlcyA9IHItJmd0O25yX2FjY2Vzc2VzOwogCQkJci0mZ3Q7bnJfYWNjZXNzZXMgPSAwOwogCQkJZm9yIChpID0gMDsgaSAmbHQ7IERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KQogCQkJCXItJmd0O3Byb2JlX2hpdHNbaV0gPSAwOwotCQkJZGFtb25fdmVyaWZ5X3Jlc2V0X2FnZ3JlZ2F0ZWQociwgYyk7CiAJCX0KIAkJdGkmIzQzOyYjNDM7OwogCX0KQEAgLTIwNjEsMTAgJiM0MzsyMDkwLDExIEBAIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpCiAJZGFtb25fc2V0X2F0dHJzKGMsICZhbXA7bmV3X2F0dHJzKTsKIH0KIAotc3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKQomIzQzO3N0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcywKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmMpCiB7CiAJdW5zaWduZWQgbG9uZyBzejsKLQl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMgPSByLSZndDtucl9hY2Nlc3Nlc19icCAvIDEwMDAwOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyLCBjKTsKIAogCXN6ID0gZGFtb25fc3pfcmVnaW9uKHIpOwogCXJldHVybiBzLSZndDtwYXR0ZXJuLm1pbl9zel9yZWdpb24gJmx0Oz0gc3ogJmFtcDsmYW1wOwpAQCAtMjA5MCw3ICYjNDM7MjEyMCw3IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKQogc3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vcyAqcykKIHsKLQlib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMpOwomIzQzOwlib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpOwogCiAJaWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldCgmYW1wO3MtJmd0O3F1b3RhKSB8fCAhYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpCiAJCXJldHVybiByZXQ7CkBAIC0yMzc0LDcgJiM0MzsyNDA0LDcgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJc3RydWN0IGRhbW9zICpzaXRlcjsJCS8qIHNjaGVtZXMgaXRlcmF0b3IgKi8KIAl1bnNpZ25lZCBpbnQgc2lkeCA9IDA7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7CS8qIHRhcmdldHMgaXRlcmF0b3IgKi8KLQl1bnNpZ25lZCBpbnQgdGlkeCA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwOwogCWJvb2wgZG9fdHJhY2UgPSBmYWxzZTsKIAogCS8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqLwpAQCAtMjM4OSw2ICYjNDM7MjQxOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogCQkJCWJyZWFrOwogCQkJdGlkeCYjNDM7JiM0Mzs7CiAJCX0KJiM0MzsJCW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7CiAJCWRvX3RyYWNlID0gdHJ1ZTsKIAl9CiAKQEAgLTI0MDQsNyAmIzQzOzI0MzUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJaWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSkKIAkJCXJldHVybjsKIAkJa3RpbWVfZ2V0X2NvYXJzZV90czY0KCZhbXA7YmVnaW4pOwotCQl0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoY2lkeCwgc2lkeCwgdGlkeCwgciwKJiM0MzsJCXRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcywKIAkJCQlkYW1vbl9ucl9yZWdpb25zKHQpLCBkb190cmFjZSk7CiAJCXN6X2FwcGxpZWQgPSBjLSZndDtvcHMuYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMsCiAJCQkJJmFtcDtzel9vcHNfZmlsdGVyX3Bhc3NlZCk7CkBAIC0yNjc2LDcgJiM0MzsyNzA3LDcgQEAgc3RhdGljIHBoeXNfYWRkcl90IGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHsKIAkJCXBoeXNfYWRkcl90IGFkZHIsIGVuZF9hZGRyOwogCi0JCQlpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMpKQomIzQzOwkJCWlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIENvbnZlcnQgZnJvbSBjb3JlIGFkZHJlc3MgdW5pdHMgdG8gcGh5c2ljYWwgYnl0ZXMgKi8KQEAgLTI5NjUsNyAmIzQzOzI5OTYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKQogCQkJKERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7CiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKIAkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHsKLQkJCWlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpCiYjNDM7CQkJaWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSkKIAkJCQljb250aW51ZTsKIAkJCWlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpCiAJCQkJY29udGludWU7CkBAIC0zMDY5LDcgJiM0MzszMTAwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAogCWwtJmd0O25yX2FjY2Vzc2VzID0gKGwtJmd0O25yX2FjY2Vzc2VzICogc3pfbCAmIzQzOyByLSZndDtucl9hY2Nlc3NlcyAqIHN6X3IpIC8KIAkJCShzel9sICYjNDM7IHN6X3IpOwotCWwtJmd0O25yX2FjY2Vzc2VzX2JwID0gbC0mZ3Q7bnJfYWNjZXNzZXMgKiAxMDAwMDsKIAlsLSZndDthZ2UgPSAobC0mZ3Q7YWdlICogc3pfbCAmIzQzOyByLSZndDthZ2UgKiBzel9yKSAvIChzel9sICYjNDM7IHN6X3IpOwogCWwtJmd0O2FyLmVuZCA9IHItJmd0O2FyLmVuZDsKIAkvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi8KQEAgLTMwODAsMjAgJiM0MzszMTEwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAlkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTsKIH0KIAotI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFkKLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpCi17Ci0JV0FSTl9PTkNFKHItJmd0O25yX2FjY2Vzc2VzICE9IHItJmd0O25yX2FjY2Vzc2VzX2JwIC8gMTAwMDAsCi0JCQkmIzM0O25yX2FjY2Vzc2VzICgldSkgIT0gbnJfYWNjZXNzZXNfYnAgKCV1KVxuJiMzNDssCi0JCQlyLSZndDtucl9hY2Nlc3Nlcywgci0mZ3Q7bnJfYWNjZXNzZXNfYnApOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpCi17Ci19Ci0jZW5kaWYKLQotCiAvKgogICogTWVyZ2UgYWRqYWNlbnQgcmVnaW9ucyBoYXZpbmcgc2ltaWxhciBhY2Nlc3MgZnJlcXVlbmNpZXMKICAqCkBAIC0zMTA3LDcgJiM0MzszMTIzLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsCiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDsKIAogCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHsKLQkJZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yocik7CiAJCWlmIChhYnMoci0mZ3Q7bnJfYWNjZXNzZXMgLSByLSZndDtsYXN0X25yX2FjY2Vzc2VzKSAmZ3Q7IHRocmVzKQogCQkJci0mZ3Q7YWdlID0gMDsKIAkJZWxzZSBpZiAoKHItJmd0O25yX2FjY2Vzc2VzID09IDApICE9IChyLSZndDtsYXN0X25yX2FjY2Vzc2VzID09IDApKQpAQCAtMzE5Niw3ICYjNDM7MzIxMSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogCiAJbmV3LSZndDthZ2UgPSByLSZndDthZ2U7CiAJbmV3LSZndDtsYXN0X25yX2FjY2Vzc2VzID0gci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlczsKLQluZXctJmd0O25yX2FjY2Vzc2VzX2JwID0gci0mZ3Q7bnJfYWNjZXNzZXNfYnA7CiAJbmV3LSZndDtucl9hY2Nlc3NlcyA9IHItJmd0O25yX2FjY2Vzc2VzOwogCS8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqLwogCW1lbWNweShuZXctJmd0O3Byb2JlX2hpdHMsIHItJmd0O3Byb2JlX2hpdHMsIHNpemVvZihyLSZndDtwcm9iZV9oaXRzKSk7CkBAIC0zNTcxLDggJiM0MzszNTg1LDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpCiAJCQkJICogYWdncmVnYXRpb24sIGFuZCBtYWtlIGFnZ3JlZ2F0aW9uCiAJCQkJICogaW5mb3JtYXRpb24gcmVzZXQgZm9yIGFsbCByZWdpb25zLiAgVGhlbiwKIAkJCQkgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbAotCQkJCSAqIHdpbGwgbWFrZSB0aGUgcmVnaW9uIGluZm9ybWF0aW9uIGludmFsaWQsCi0JCQkJICogcGFydGljdWxhcmx5IGZvciAtJmd0O25yX2FjY2Vzc2VzX2JwLgomIzQzOwkJCQkgKiB3aWxsIG1ha2UgdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpbnZhbGlkLgogCQkJCSAqCiAJCQkJICogUmVzZXQgLSZndDtuZXh0X2FnZ3JlZ2F0aW9uX3NpcyB0byBhdm9pZCB0aGF0LgogCQkJCSAqIEl0IHdpbGwgYW55d2F5IGNvcnJlY3RseSB1cGRhdGVkIGFmdGVyIHRoaXMKQEAgLTM3MTEsNzIgJiM0MzszNzI0LDE4IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAlyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgJmFtcDthZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTsKIH0KIAotLyoKLSAqIGRhbW9uX21vdmluZ19zdW0oKSAtIENhbGN1bGF0ZSBhbiBpbmZlcnJlZCBtb3Zpbmcgc3VtIHZhbHVlLgotICogQG12c3VtOglJbmZlcnJlZCBzdW0gb2YgdGhlIGxhc3QgQGxlbl93aW5kb3cgdmFsdWVzLgotICogQG5vbXZzdW06CU5vbi1tb3Zpbmcgc3VtIG9mIHRoZSBsYXN0IGRpc2NyZXRlIEBsZW5fd2luZG93IHdpbmRvdyB2YWx1ZXMuCi0gKiBAbGVuX3dpbmRvdzoJVGhlIG51bWJlciBvZiBsYXN0IHZhbHVlcyB0byB0YWtlIGNhcmUgb2YuCi0gKiBAbmV3X3ZhbHVlOglOZXcgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwc2V1ZG8gbW92aW5nIHN1bS4KLSAqCi0gKiBNb3Zpbmcgc3VtIChtb3ZpbmcgYXZlcmFnZSAqIHdpbmRvdyBzaXplKSBpcyBnb29kIGZvciBoYW5kbGluZyBub2lzZSwgYnV0Ci0gKiB0aGUgY29zdCBvZiBrZWVwaW5nIHBhc3QgdmFsdWVzIGNhbiBiZSBoaWdoIGZvciBhcmJpdHJhcnkgd2luZG93IHNpemUuICBUaGlzCi0gKiBmdW5jdGlvbiBpbXBsZW1lbnRzIGEgbGlnaHR3ZWlnaHQgcHNldWRvIG1vdmluZyBzdW0gZnVuY3Rpb24gdGhhdCBkb2VzbiYjMzk7dAotICoga2VlcCB0aGUgcGFzdCB3aW5kb3cgdmFsdWVzLgotICoKLSAqIEl0IHNpbXBseSBhc3N1bWVzIHRoZXJlIHdhcyBubyBub2lzZSBpbiB0aGUgcGFzdCwgYW5kIGdldCB0aGUgbm8tbm9pc2UKLSAqIGFzc3VtZWQgcGFzdCB2YWx1ZSB0byBkcm9wIGZyb20gQG5vbXZzdW0gYW5kIEBsZW5fd2luZG93LiAgQG5vbXZzdW0gaXMgYQotICogbm9uLW1vdmluZyBzdW0gb2YgdGhlIGxhc3Qgd2luZG93LiAgRm9yIGV4YW1wbGUsIGlmIEBsZW5fd2luZG93IGlzIDEwIGFuZCB3ZQotICogaGF2ZSAyNSB2YWx1ZXMsIEBub212c3VtIGlzIHRoZSBzdW0gb2YgdGhlIDExdGggdG8gMjB0aCB2YWx1ZXMgb2YgdGhlIDI1Ci0gKiB2YWx1ZXMuICBIZW5jZSwgdGhpcyBmdW5jdGlvbiBzaW1wbHkgZHJvcHMgQG5vbXZzdW0gLyBAbGVuX3dpbmRvdyBmcm9tCi0gKiBnaXZlbiBAbXZzdW0gYW5kIGFkZCBAbmV3X3ZhbHVlLgotICoKLSAqIEZvciBleGFtcGxlLCBpZiBAbGVuX3dpbmRvdyBpcyAxMCBhbmQgQG5vbXZzdW0gaXMgNTAsIHRoZSBsYXN0IDEwIHZhbHVlcyBmb3IKLSAqIHRoZSBsYXN0IHdpbmRvdyBjb3VsZCBiZSB2YXJ5LCBlLmcuLCAwLCAxMCwgMCwgMTAsIDAsIDEwLCAwLCAwLCAwLCAyMC4gIEZvcgotICogY2FsY3VsYXRpbmcgbmV4dCBtb3Zpbmcgc3VtIHdpdGggYSBuZXcgdmFsdWUsIHdlIHNob3VsZCBkcm9wIDAgZnJvbSA1MCBhbmQKLSAqIGFkZCB0aGUgbmV3IHZhbHVlLiAgSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIGl0IGdvdCB2YWx1ZSA1IGZvciBlYWNoCi0gKiBvZiB0aGUgbGFzdCB0ZW4gdGltZXMuICBCYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiwgd2hlbiB0aGUgbmV4dCB2YWx1ZSBpcwotICogbWVhc3VyZWQsIGl0IGRyb3BzIHRoZSBhc3N1bWVkIHBhc3QgdmFsdWUsIDUgZnJvbSB0aGUgY3VycmVudCBzdW0sIGFuZCBhZGQKLSAqIHRoZSBuZXcgdmFsdWUgdG8gZ2V0IHRoZSB1cGRhdGVkIHBzZWR1by1tb3ZpbmcgYXZlcmFnZS4KLSAqCi0gKiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBjb3VsZCBoYXZlIGVycm9ycywgYnV0IHRoZSBlcnJvcnMgd2lsbCBiZSBkaXNhcHBlYXJlZAotICogZm9yIGV2ZXJ5IEBsZW5fd2luZG93IGFsaWduZWQgY2FsbHMuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAsIHRoZQotICogcHNldWRvIG1vdmluZyBzdW0gd2l0aCAxMXRoIHZhbHVlIHRvIDE5dGggdmFsdWUgd291bGQgaGF2ZSBhbiBlcnJvci4gIEJ1dAotICogdGhlIHN1bSB3aXRoIDIwdGggdmFsdWUgd2lsbCBub3QgaGF2ZSB0aGUgZXJyb3IuCi0gKgotICogUmV0dXJuOiBQc2V1ZG8tbW92aW5nIGF2ZXJhZ2UgYWZ0ZXIgZ2V0dGluZyB0aGUgQG5ld192YWx1ZS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tb3Zpbmdfc3VtKHVuc2lnbmVkIGludCBtdnN1bSwgdW5zaWduZWQgaW50IG5vbXZzdW0sCi0JCXVuc2lnbmVkIGludCBsZW5fd2luZG93LCB1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlKQotewotCXJldHVybiBtdnN1bSAtIG5vbXZzdW0gLyBsZW5fd2luZG93ICYjNDM7IG5ld192YWx1ZTsKLX0KLQogLyoqCiAgKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkgLSBVcGRhdGUgdGhlIGFjY2VzcyByYXRlIG9mIGEgcmVnaW9uLgogICogQHI6CQlUaGUgREFNT04gcmVnaW9uIHRvIHVwZGF0ZSBmb3IgaXRzIGFjY2VzcyBjaGVjayByZXN1bHQuCiAgKiBAYWNjZXNzZWQ6CVdoZXRoZXIgdGhlIHJlZ2lvbiBoYXMgYWNjZXNzZWQgZHVyaW5nIGxhc3Qgc2FtcGxpbmcgaW50ZXJ2YWwuCi0gKiBAYXR0cnM6CVRoZSBkYW1vbl9hdHRycyBvZiB0aGUgREFNT04gY29udGV4dC4KICAqCiAgKiBVcGRhdGUgdGhlIGFjY2VzcyByYXRlIG9mIGEgcmVnaW9uIHdpdGggdGhlIHJlZ2lvbiYjMzk7cyBsYXN0IHNhbXBsaW5nIGludGVydmFsCiAgKiBhY2Nlc3MgY2hlY2sgcmVzdWx0LgogICoKICAqIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGNhbGxlZCBieSAmYW1wO2RhbW9uX29wZXJhdGlvbnMtJmd0O2NoZWNrX2FjY2Vzc2VzIGNhbGxiYWNrLgogICovCi12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCwKLQkJc3RydWN0IGRhbW9uX2F0dHJzICphdHRycykKJiM0Mzt2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCkKIHsKLQl1bnNpZ25lZCBpbnQgbGVuX3dpbmRvdyA9IDE7Ci0KLQkvKgotCSAqIHNhbXBsZV9pbnRlcnZhbCBjYW4gYmUgemVybywgYnV0IGNhbm5vdCBiZSBsYXJnZXIgdGhhbgotCSAqIGFnZ3JfaW50ZXJ2YWwsIG93aW5nIHRvIHZhbGlkYXRpb24gb2YgZGFtb25fc2V0X2F0dHJzKCkuCi0JICovCi0JaWYgKGF0dHJzLSZndDtzYW1wbGVfaW50ZXJ2YWwpCi0JCWxlbl93aW5kb3cgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpOwotCXItJmd0O25yX2FjY2Vzc2VzX2JwID0gZGFtb25fbW92aW5nX3N1bShyLSZndDtucl9hY2Nlc3Nlc19icCwKLQkJCXItJmd0O2xhc3RfbnJfYWNjZXNzZXMgKiAxMDAwMCwgbGVuX3dpbmRvdywKLQkJCWFjY2Vzc2VkID8gMTAwMDAgOiAwKTsKLQogCWlmIChhY2Nlc3NlZCkKIAkJci0mZ3Q7bnJfYWNjZXNzZXMmIzQzOyYjNDM7OwogfQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggNWMyZGE0NWY5ODhjZjkuLjYxNzI0NjQ5ODE3MzA0IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyLCB1bnNpZ25lZCBsb25nICpmb2xpb19zeikKIH0KIAogc3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKLQkJc3RydWN0IGRhbW9uX2F0dHJzICphdHRycywgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCkKIHsKIAlzdGF0aWMgcGh5c19hZGRyX3QgbGFzdF9hZGRyOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfZm9saW9fc3ogPSBQQUdFX1NJWkU7CkBAIC05MSwxMiAmIzQzOzkxLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJLyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi8KIAlpZiAoQUxJR05fRE9XTihsYXN0X2FkZHIsIGxhc3RfZm9saW9fc3opID09CiAJCQkJQUxJR05fRE9XTihzYW1wbGluZ19hZGRyLCBsYXN0X2ZvbGlvX3N6KSkgewotCQlkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTsKJiM0MzsJCWRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7CiAJCXJldHVybjsKIAl9CiAKIAlsYXN0X2FjY2Vzc2VkID0gZGFtb25fcGFfeW91bmcoc2FtcGxpbmdfYWRkciwgJmFtcDtsYXN0X2ZvbGlvX3N6KTsKLQlkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTsKJiM0MzsJZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkKTsKIAogCWxhc3RfYWRkciA9IHNhbXBsaW5nX2FkZHI7CiB9CkBAIC0xMDksOCAmIzQzOzEwOSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkgewogCQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewotCQkJX19kYW1vbl9wYV9jaGVja19hY2Nlc3MoCi0JCQkJCXIsICZhbXA7Y3R4LSZndDthdHRycywgY3R4LSZndDthZGRyX3VuaXQpOwomIzQzOwkJCV9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHIsIGN0eC0mZ3Q7YWRkcl91bml0KTsKIAkJCW1heF9ucl9hY2Nlc3NlcyA9IG1heChyLSZndDtucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwppbmRleCA0MWY5M2ExODIzYmYxMy4uZGJmMmIwNTE1ZDU4MjkgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKQEAgLTE1Nyw3ICYjNDM7MTU3LDcgQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gewogfTsKIAogc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKAotCQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24pCiYjNDM7CQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqc3lzZnNfcmVnaW9uID0ga21hbGxvY19vYmooKnN5c2ZzX3JlZ2lvbik7CiAKQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKAogCQlyZXR1cm4gTlVMTDsKIAlzeXNmc19yZWdpb24tJmd0O2tvYmogPSAoc3RydWN0IGtvYmplY3Qpe307CiAJc3lzZnNfcmVnaW9uLSZndDthciA9IHJlZ2lvbi0mZ3Q7YXI7Ci0Jc3lzZnNfcmVnaW9uLSZndDtucl9hY2Nlc3NlcyA9IHJlZ2lvbi0mZ3Q7bnJfYWNjZXNzZXNfYnAgLyAxMDAwMDsKJiM0MzsJc3lzZnNfcmVnaW9uLSZndDtucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHJlZ2lvbiwgY3R4KTsKIAlzeXNmc19yZWdpb24tJmd0O2FnZSA9IHJlZ2lvbi0mZ3Q7YWdlOwogCXN5c2ZzX3JlZ2lvbi0mZ3Q7cHJvYmVzID0gTlVMTDsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3N5c2ZzX3JlZ2lvbi0mZ3Q7bGlzdCk7CkBAIC0zMTIyLDcgJiM0MzszMTIyLDcgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLAogCWlmICh0b3RhbF9ieXRlc19vbmx5KQogCQlyZXR1cm47CiAKLQlyZWdpb24gPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKHIpOwomIzQzOwlyZWdpb24gPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKHIsIGN0eCk7CiAJaWYgKCFyZWdpb24pCiAJCXJldHVybjsKIAlyZWdpb24tJmd0O3N6X2ZpbHRlcl9wYXNzZWQgPSBzel9maWx0ZXJfcGFzc2VkOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5mMWZhZWJiNmZmOTkzZiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMTE0LDcgJiM0MzsxMTQsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsJiMzNDspOwogCQkJfQogCQkJci0mZ3Q7bnJfYWNjZXNzZXMgPSBhY2Nlc3Nlc1tpdF1baXJdOwotCQkJci0mZ3Q7bnJfYWNjZXNzZXNfYnAgPSBhY2Nlc3Nlc1tpdF1baXJdICogMTAwMDA7CiAJCQlkYW1vbl9hZGRfcmVnaW9uKHIsIHQpOwogCQl9CiAJCWl0JiM0MzsmIzQzOzsKQEAgLTE1MSw3ICYjNDM7MTUwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCWRhbW9uX2ZyZWVfdGFyZ2V0KHQpOwogCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7cmVnaW9uIGFsbG9jIGZhaWwmIzM0Oyk7CiAJfQotCXItJmd0O25yX2FjY2Vzc2VzX2JwID0gNDIwMDAwOwogCXItJmd0O25yX2FjY2Vzc2VzID0gNDI7CiAJci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlcyA9IDE1OwogCXItJmd0O2FnZSA9IDEwOwpAQCAtMTY0LDcgJiM0MzsxNjIsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2F0KHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctJmd0O2FyLnN0YXJ0LCAyNXVsKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctJmd0O2FyLmVuZCwgMTAwdWwpOwogCi0JS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O25yX2FjY2Vzc2VzX2JwLCByX25ldy0mZ3Q7bnJfYWNjZXNzZXNfYnApOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDtucl9hY2Nlc3Nlcywgcl9uZXctJmd0O25yX2FjY2Vzc2VzKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7bGFzdF9ucl9hY2Nlc3Nlcywgcl9uZXctJmd0O2xhc3RfbnJfYWNjZXNzZXMpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDthZ2UsIHJfbmV3LSZndDthZ2UpOwpAQCAtMTg3LDcgJiM0MzsxODQsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCWt1bml0X3NraXAodGVzdCwgJiMzNDtyZWdpb24gYWxsb2MgZmFpbCYjMzQ7KTsKIAl9CiAJci0mZ3Q7bnJfYWNjZXNzZXMgPSAxMDsKLQlyLSZndDtucl9hY2Nlc3Nlc19icCA9IDEwMDAwMDsKIAlyLSZndDthZ2UgPSA5OwogCWRhbW9uX2FkZF9yZWdpb24ociwgdCk7CiAJcjIgPSBkYW1vbl9uZXdfcmVnaW9uKDEwMCwgMzAwKTsKQEAgLTE5Niw3ICYjNDM7MTkyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KQogCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7c2Vjb25kIHJlZ2lvbiBhbGxvYyBmYWlsJiMzNDspOwogCX0KIAlyMi0mZ3Q7bnJfYWNjZXNzZXMgPSAyMDsKLQlyMi0mZ3Q7bnJfYWNjZXNzZXNfYnAgPSAyMDAwMDA7CiAJcjItJmd0O2FnZSA9IDIxOwogCWRhbW9uX2FkZF9yZWdpb24ocjIsIHQpOwogCkBAIC0yMDQsNyAmIzQzOzE5OSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuc3RhcnQsIDB1bCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLmVuZCwgMzAwdWwpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDtucl9hY2Nlc3NlcywgMTZ1KTsKLQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7bnJfYWNjZXNzZXNfYnAsIDE2MDAwMHUpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDthZ2UsIDE3dSk7CiAKIAlpID0gMDsKQEAgLTI1Miw3ICYjNDM7MjQ2LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkJCWt1bml0X3NraXAodGVzdCwgJiMzNDtyZWdpb24gYWxsb2MgZmFpbCYjMzQ7KTsKIAkJfQogCQlyLSZndDtucl9hY2Nlc3NlcyA9IG5yc1tpXTsKLQkJci0mZ3Q7bnJfYWNjZXNzZXNfYnAgPSBucnNbaV0gKiAxMDAwMDsKIAkJZGFtb25fYWRkX3JlZ2lvbihyLCB0KTsKIAl9CiAKQEAgLTU1Miw3ICYjNDM7NTQ1LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KQogCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7cmVnaW9uIGFsbG9jIGZhaWwmIzM0Oyk7CiAKIAlyLSZndDtucl9hY2Nlc3NlcyA9IDE1OwotCXItJmd0O25yX2FjY2Vzc2VzX2JwID0gMTUwMDAwOwogCXItJmd0O2FnZSA9IDIwOwogCiAJbmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7CkBAIC02MDQsMTggJiM0Mzs1OTYsMjcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwogfQogCi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21vdmluZ19zdW0oc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbXZzdW0oc3RydWN0IGt1bml0ICp0ZXN0KQogewotCXVuc2lnbmVkIGludCBtdnN1bSA9IDUwMDAwLCBub212c3VtID0gNTAwMDAsIGxlbl93aW5kb3cgPSAxMDsKLQl1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlc1tdID0gezEwMDAwLCAwLCAxMDAwMCwgMCwgMCwgMCwgMTAwMDAsIDAsIDAsIDB9OwotCXVuc2lnbmVkIGludCBleHBlY3RzW10gPSB7NTUwMDAsIDUwMDAwLCA1NTAwMCwgNTAwMDAsIDQ1MDAwLCA0MDAwMCwKLQkJNDUwMDAsIDQwMDAwLCAzNTAwMCwgMzAwMDB9OwomIzQzOwl1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHsKJiM0MzsJCS8qIGN1cnJlbnQgdmFsdWUsIGxhc3QgdmFsdWUsIHJlbWFpbmluZyB3aW5kb3cgKGJwKSAqLwomIzQzOwkJMCwgNDksIDEwMDAwLCA0OSwJLyogMCAmIzQzOyA0OSAqIDEgKi8KJiM0MzsJCTMsIDEwLCA3MDAwLCAxMCwJLyogMyAmIzQzOyAxMCAqIDAuNyAqLwomIzQzOwkJMywgMTAsIDUwMDAsIDgsCQkvKiAzICYjNDM7IDEwICogMC41ICovCiYjNDM7CQkzMiwgMTAwLCAxMDAwLCA0MiwJLyogMzIgJiM0MzsgMTAwICogMC4xICovCiYjNDM7CQk0MiwgNDksIDAsIDQyLAkJLyogNDIgJiM0MzsgNDkgKiAwICovCiYjNDM7CX07CiYjNDM7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShuZXdfdmFsdWVzKTsgaSYjNDM7JiM0MzspIHsKLQkJbXZzdW0gPSBkYW1vbl9tb3Zpbmdfc3VtKG12c3VtLCBub212c3VtLCBsZW5fd2luZG93LAotCQkJCW5ld192YWx1ZXNbaV0pOwotCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbXZzdW0sIGV4cGVjdHNbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShpbnB1dF9leHBlY3RzKTsgaSAmIzQzOz0gNCkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBjdXJyZW50X25yID0gaW5wdXRfZXhwZWN0c1tpXTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbGFzdF9uciA9IGlucHV0X2V4cGVjdHNbaSAmIzQzOyAxXTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbGVmdF93aW5kb3dfYnAgPSBpbnB1dF9leHBlY3RzW2kgJiM0MzsgMl07CiYjNDM7CQl1bnNpZ25lZCBsb25nIGV4cGVjdCA9IGlucHV0X2V4cGVjdHNbaSAmIzQzOyAzXTsKJiM0MzsKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9tdnN1bShjdXJyZW50X25yLCBsYXN0X25yLAomIzQzOwkJCQkJbGVmdF93aW5kb3dfYnApLCBleHBlY3QpOwogCX0KIH0KIApAQCAtMTQ2OSw3ICYjNDM7MTQ3MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSwKLQlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbW92aW5nX3N1bSksCiYjNDM7CUtVTklUX0NBU0UoZGFtb25fdGVzdF9tdnN1bSksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLAogCUtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbCksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksCmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCBlNzNlYzFjZTAxNmU1Yi4uMjA1OGRiOWMwMWQ1MmYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtNDkzLDI3ICYjNDM7NDkzLDI2IEBAIHN0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAgKiByCXRoZSByZWdpb24gdG8gYmUgY2hlY2tlZAogICovCiBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIHNhbWVfdGFyZ2V0LAotCQkJCXN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpCiYjNDM7CQkJCXN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgc2FtZV90YXJnZXQpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfZm9saW9fc3ogPSBQQUdFX1NJWkU7CiAJc3RhdGljIGJvb2wgbGFzdF9hY2Nlc3NlZDsKIAogCWlmICghbW0pIHsKLQkJZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBmYWxzZSwgYXR0cnMpOwomIzQzOwkJZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBmYWxzZSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBJZiB0aGUgcmVnaW9uIGlzIGluIHRoZSBsYXN0IGNoZWNrZWQgcGFnZSwgcmV1c2UgdGhlIHJlc3VsdCAqLwogCWlmIChzYW1lX3RhcmdldCAmYW1wOyZhbXA7IChBTElHTl9ET1dOKGxhc3RfYWRkciwgbGFzdF9mb2xpb19zeikgPT0KIAkJCQlBTElHTl9ET1dOKHItJmd0O3NhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSkgewotCQlkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTsKJiM0MzsJCWRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7CiAJCXJldHVybjsKIAl9CiAKIAlsYXN0X2FjY2Vzc2VkID0gZGFtb25fdmFfeW91bmcobW0sIHItJmd0O3NhbXBsaW5nX2FkZHIsICZhbXA7bGFzdF9mb2xpb19zeik7Ci0JZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkLCBhdHRycyk7CiYjNDM7CWRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7CiAKIAlsYXN0X2FkZHIgPSByLSZndDtzYW1wbGluZ19hZGRyOwogfQpAQCAtNTMwLDggJiM0Mzs1MjksNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAkJbW0gPSBkYW1vbl9nZXRfbW0odCk7CiAJCXNhbWVfdGFyZ2V0ID0gZmFsc2U7CiAJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7Ci0JCQlfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhtbSwgciwgc2FtZV90YXJnZXQsCi0JCQkJCSZhbXA7Y3R4LSZndDthdHRycyk7CiYjNDM7CQkJX19kYW1vbl92YV9jaGVja19hY2Nlc3MobW0sIHIsIHNhbWVfdGFyZ2V0KTsKIAkJCW1heF9ucl9hY2Nlc3NlcyA9IG1heChyLSZndDtucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTsKIAkJCXNhbWVfdGFyZ2V0ID0gdHJ1ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkKaW5kZXggOTcyOTQ4ZTYyMTVmMWQuLjQ5NDJhZmRmNDZjZDQ0IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkKQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIGRlZiByZWdpb25fdG9fZGljdChyZWdpb24pOgogICAgICAgICBbJiMzOTthciYjMzk7LCBhZGRyX3JhbmdlX3RvX2RpY3RdLAogICAgICAgICBbJiMzOTtzYW1wbGluZ19hZGRyJiMzOTssIGludF0sCiAgICAgICAgIFsmIzM5O25yX2FjY2Vzc2VzJiMzOTssIGludF0sCi0gICAgICAgIFsmIzM5O25yX2FjY2Vzc2VzX2JwJiMzOTssIGludF0sCiAgICAgICAgIFsmIzM5O2FnZSYjMzk7LCBpbnRdLAogICAgICAgICBdKQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIEFuYWx5c2lzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBEQU1PTiBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgYG5yX2FjY2Vzc2VzX2JwYCBmcm9tIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSgpYCBmdW5jdGlvbiwgd2hpY2ggY2FsY3VsYXRlcyBhIHBzZXVkbyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIGEgc3RyYWlnaHRmb3J3YXJkIGNvdW50IGFuZCB0cnlpbmcgYSBtb3JlIG51YW5jZWQgYWNjZXNzIHJhdGUgcmVwcmVzZW50YXRpb24uIFRoaXMgbmV3IGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHRoZSBtb2RpZmljYXRpb24gb2YgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgIGFuZCBgX19kYW1vc192YWxpZF90YXJnZXRgIHRvIHV0aWxpemUgdGhpcyBsb2dpYywgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4KClNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgYWNyb3NzIHNldmVyYWwgZmlsZXMgKGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGBtbS9kYW1vbi92YWRkci5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2ApLCBpdCYjMzk7cyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBkaXJlY3RseSBhbHRlcnMgREFNT04mIzM5O3MgZXhlY3V0aW9uIGZsb3cuIEFuZCBjb25zaWRlcmluZyB0aGF0IERBTU9OIGNhbiBtb25pdG9yIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3NlcywgdGhpcyBtYWtlcyBpdCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIGl0JiMzOTtzIGRlZmluaXRlbHkgV29ydGhGdXp6aW5nLgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24uIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbmV3IGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5OgoKKiAgIGBkYW1vbl9tdnN1bWAKKiAgIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWAKCkFuZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCB3aGljaCBhbHNvIHdhcnJhbnQgY2xvc2UgYXR0ZW50aW9uOgoKKiAgIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYAoqICAgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YAoqICAgYGRhbW9zX2FwcGx5X3NjaGVtZWAKKiAgIGBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzYAoqICAgYGRhbW9zX2FkanVzdF9xdW90YWAKKiAgIGBkYW1vbl9tZXJnZV90d29fcmVnaW9uc2AKKiAgIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYAoqICAgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGAKKiAgIGBrZGFtb25kX2ZuYAoqICAgYF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzYAoqICAgYF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzYAoKTmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMsIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgREFNT04gdG8gc2VlIGhvdyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGR1cmluZyBmdXp6aW5nLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBEQU1PTmAgd2l0aGluIGBtbS9kYW1vbi9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODQ4CgkJCQkJCQlvdXRwdXQ6IDI3MAoJCQkJCQkJdGhvdWdodHM6IDY5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgZGlmZi4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMsIEkgbmVlZCB0byBlbmFibGUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIE1ha2VzIHNlbnNlLgoKTm93LCB0aGUgZm9jdXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBjcml0aWNhbCBmb3IgZnV6emluZy4gSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBmdW5jdGlvbnMgdGhhdCBzZWVtIGxpa2UgZ29vZCB0YXJnZXRzOiBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBfX2RhbW9zX3ZhbGlkX3RhcmdldGAsIGBkYW1vc19hcHBseV9zY2hlbWVgLCBgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlc2AsIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNgLCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAsIGBkYW1vbl9zcGxpdF9yZWdpb25fYXRgLCBgX19kYW1vbl9wYV9jaGVja19hY2Nlc3NgLCBhbmQgYF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzYC4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSB2aXNpYmlsaXR5IG9mIGBkYW1vbl9tdnN1bWAgYmVjYXVzZSBpdCBsb29rcyByZWxhdGVkIHRvIHRoZSBhY2Nlc3Mgc3VtbWFyaWVzLCBhbmQgd2hldGhlciBpdCYjMzk7cyBzdGF0aWMgb3IgZXhwb3J0ZWQgaW1wYWN0cyBteSBmdXp6aW5nIGFwcHJvYWNoLiBBaCwgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCBTeXprYWxsZXIgY2FuIHNvbWV0aW1lcyByZWFjaCBzdGF0aWMgZnVuY3Rpb25zIGlmIHJlYWNoYWJsZSB0aHJvdWdoIGFub3RoZXIgbWV0aG9kLCBidXQgZm9yIG5vdyBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWAgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBuZXcgZnVuY3Rpb24sIEkmIzM5O2xsIHByaW9yaXRpemUgaXQgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgcmVmaW5lIHRoZSBsaXN0LiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGVzZSBhcyB0aGUgRm9jdXNTeW1ib2xzLCBzaW5jZSB0aGVzZSBhcmUgbGlrZWx5IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgYW5kIGRhdGEgcHJvY2Vzc2luZyBmdW5jdGlvbnMgZm9yIERBTU9OOgoKKiAgIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWAKKiAgIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYAoqICAgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YAoqICAgYGRhbW9zX2FwcGx5X3NjaGVtZWAKKiAgIGBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzYAoqICAgYGRhbW9zX2FkanVzdF9xdW90YWAKKiAgIGBkYW1vbl9tZXJnZV90d29fcmVnaW9uc2AKKiAgIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYAoqICAgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGAKKiAgIGBfX2RhbW9uX3BhX2NoZWNrX2FjY2Vzc2AKKiAgIGBfX2RhbW9uX3ZhX2NoZWNrX2FjY2Vzc2AKCkFscmlnaHQsIHRoYXQgY292ZXJzIHRoZSBlc3NlbnRpYWxzLiBJJiMzOTtsbCBwcm9jZWVkIHdpdGggdGhlICYjMzQ7c2V0LXJlc3VsdHMmIzM0OyBjYWxsLCBnaXZlbiB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25yX2FjY2Vzc2VzX212c3VtJiMzNDssCiAgICAmIzM0O2RhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUmIzM0OywKICAgICYjMzQ7X19kYW1vc192YWxpZF90YXJnZXQmIzM0OywKICAgICYjMzQ7ZGFtb3NfYXBwbHlfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMmIzM0OywKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3R3b19yZWdpb25zJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3JlZ2lvbnNfb2YmIzM0OywKICAgICYjMzQ7ZGFtb25fc3BsaXRfcmVnaW9uX2F0JiMzNDssCiAgICAmIzM0O19fZGFtb25fcGFfY2hlY2tfYWNjZXNzJiMzNDssCiAgICAmIzM0O19fZGFtb25fdmFfY2hlY2tfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtIGJ5IHJlcGxhY2luZyB0aGUgYG5yX2FjY2Vzc2VzX2JwYCBmaWVsZCB3aXRoIGEgcHNldWRvIG1vdmluZyBzdW0gY2FsY3VsYXRpb24gKGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWApLiBUaGlzIGFmZmVjdHMgaG93IGFjY2VzcyBmcmVxdWVuY2llcyBhcmUgY2FsY3VsYXRlZCwgbWVyZ2VkLCBzcGxpdCwgYW5kIGV2YWx1YXRlZCBmb3Igc2NoZW1lcyBhY3Jvc3MgYm90aCBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIG1vbml0b3JpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSYjMzQ7LAogICAgJiMzNDtkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlJiMzNDssCiAgICAmIzM0O19fZGFtb3NfdmFsaWRfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2RhbW9zX2FwcGx5X3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV90d29fcmVnaW9ucyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9yZWdpb25zX29mJiMzNDssCiAgICAmIzM0O2RhbW9uX3NwbGl0X3JlZ2lvbl9hdCYjMzQ7LAogICAgJiMzNDtfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSBieSByZXBsYWNpbmcgdGhlIGBucl9hY2Nlc3Nlc19icGAgZmllbGQgd2l0aCBhIHBzZXVkbyBtb3Zpbmcgc3VtIGNhbGN1bGF0aW9uIChgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gKS4gVGhpcyBhZmZlY3RzIGhvdyBhY2Nlc3MgZnJlcXVlbmNpZXMgYXJlIGNhbGN1bGF0ZWQsIG1lcmdlZCwgc3BsaXQsIGFuZCBldmFsdWF0ZWQgZm9yIHNjaGVtZXMgYWNyb3NzIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNTo1NToyNi4xMDU3NDM3NjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ1NzcwMTgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25yX2FjY2Vzc2VzX212c3VtXCIsXG4gICAgXCJkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlXCIsXG4gICAgXCJfX2RhbW9zX3ZhbGlkX3RhcmdldFwiLFxuICAgIFwiZGFtb3NfYXBwbHlfc2NoZW1lXCIsXG4gICAgXCJkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzXCIsXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgICBcImRhbW9uX21lcmdlX3R3b19yZWdpb25zXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gICAgXCJkYW1vbl9zcGxpdF9yZWdpb25fYXRcIixcbiAgICBcIl9fZGFtb25fcGFfY2hlY2tfYWNjZXNzXCIsXG4gICAgXCJfX2RhbW9uX3ZhX2NoZWNrX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtIGJ5IHJlcGxhY2luZyB0aGUgYG5yX2FjY2Vzc2VzX2JwYCBmaWVsZCB3aXRoIGEgcHNldWRvIG1vdmluZyBzdW0gY2FsY3VsYXRpb24gKGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWApLiBUaGlzIGFmZmVjdHMgaG93IGFjY2VzcyBmcmVxdWVuY2llcyBhcmUgY2FsY3VsYXRlZCwgbWVyZ2VkLCBzcGxpdCwgYW5kIGV2YWx1YXRlZCBmb3Igc2NoZW1lcyBhY3Jvc3MgYm90aCBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIG1vbml0b3JpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTU6MjYuMTA1NzUwOTk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc5MjA0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZGZjMDY2ZGYwZWE2NmYyMTBhNDBhYTg0NzliOGExNDRkYWE0OTY2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDA1OjU1OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IGNmYmJmOGJhMjhmNjMyLi44MDVlMDg5ZmY0ZjJmNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNDUsOCArNDUsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuICAqIEBhcjpcXHRcXHRcXHRUaGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgcmVnaW9uLlxcbiAgKiBAc2FtcGxpbmdfYWRkcjpcXHRBZGRyZXNzIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBuZXh0IGFjY2VzcyBjaGVjay5cXG4gICogQG5yX2FjY2Vzc2VzOlxcdEFjY2VzcyBmcmVxdWVuY3kgb2YgdGhpcyByZWdpb24uXFxuLSAqIEBucl9hY2Nlc3Nlc19icDpcXHRAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnQgKDAuMDElKSB0aGF0IHVwZGF0ZWQgZm9yXFxuLSAqXFx0XFx0XFx0ZWFjaCBzYW1wbGluZyBpbnRlcnZhbC5cXG4gICogQHByb2JlX2hpdHM6XFx0XFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxcbiAgKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAYWdlOlxcdFxcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cXG5AQCAtNTksMTMgKzU3LDYgQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xcbiAgKiBub3QgYmUgZG9uZSB3aXRoIGRpcmVjdCBhY2Nlc3MgYnV0IHdpdGggdGhlIGhlbHBlciBmdW5jdGlvbixcXG4gICogZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSgpLlxcbiAgKlxcbi0gKiBAbnJfYWNjZXNzZXNfYnAgaXMgYW5vdGhlciByZXByZXNlbnRhdGlvbiBvZiBAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnRcXG4tICogKDEgaW4gMTAsMDAwKSB0aGF0IHVwZGF0ZWQgZm9yIGV2ZXJ5IFxcdTAwMjZkYW1vbl9hdHRycy1cXHUwMDNlc2FtcGxlX2ludGVydmFsIGluIGFcXG4tICogbWFubmVyIHNpbWlsYXIgdG8gbW92aW5nIHN1bS4gIEJ5IHRoZSBhbGdvcml0aG0sIHRoaXMgdmFsdWUgYmVjb21lc1xcbi0gKiBAbnJfYWNjZXNzZXMgKiAxMDAwMCBmb3IgZXZlcnkgXFx1MDAyNnN0cnVjdCBkYW1vbl9hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbC4gIFRoaXMgY2FuXFxuLSAqIGJlIHVzZWQgd2hlbiB0aGUgYWdncmVnYXRpb24gaW50ZXJ2YWwgaXMgdG9vIGh1Z2UgYW5kIHRoZXJlZm9yZSBjYW5ub3Qgd2FpdFxcbi0gKiBmb3IgaXQgYmVmb3JlIGdldHRpbmcgdGhlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMuXFxuLSAqXFxuICAqIEBhZ2UgaXMgaW5pdGlhbGx5IHplcm8sIGluY3JlYXNlZCBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCwgYW5kIHJlc2V0XFxuICAqIHRvIHplcm8gYWdhaW4gaWYgdGhlIGFjY2VzcyBmcmVxdWVuY3kgaXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLiAgSWYgdHdvXFxuICAqIHJlZ2lvbnMgYXJlIG1lcmdlZCBpbnRvIGEgbmV3IHJlZ2lvbiwgYm90aCBAbnJfYWNjZXNzZXMgYW5kIEBhZ2Ugb2YgdGhlIG5ld1xcbkBAIC03NSw3ICs2Niw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlc19icDtcXG4gXFx0dW5zaWduZWQgY2hhciBwcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIFxcbkBAIC0xMDExLDExICsxMDAxLDEyIEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpO1xcbiB2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpO1xcbiBcXG4gc3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuK3Vuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbiBcXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeik7XFxuLXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbi1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcXG4rdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpO1xcbiBcXG4gc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXFxuIFxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxcbmluZGV4IDc4Mzg4NTM4YWNmNDQ2Li44ODUxNzI3YWUxNjI3YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxcbkBAIC03OCw5ICs3OCwxMSBAQCBUUkFDRV9FVkVOVF9DT05ESVRJT04oZGFtb3NfYmVmb3JlX2FwcGx5LFxcbiBcXG4gXFx0VFBfUFJPVE8odW5zaWduZWQgaW50IGNvbnRleHRfaWR4LCB1bnNpZ25lZCBpbnQgc2NoZW1lX2lkeCxcXG4gXFx0XFx0dW5zaWduZWQgaW50IHRhcmdldF9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLVxcdFxcdHVuc2lnbmVkIGludCBucl9yZWdpb25zLCBib29sIGRvX3RyYWNlKSxcXG4rXFx0XFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLCB1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyxcXG4rXFx0XFx0Ym9vbCBkb190cmFjZSksXFxuIFxcbi1cXHRUUF9BUkdTKGNvbnRleHRfaWR4LCBzY2hlbWVfaWR4LCB0YXJnZXRfaWR4LCByLCBucl9yZWdpb25zLCBkb190cmFjZSksXFxuK1xcdFRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX2FjY2Vzc2VzLFxcbitcXHRcXHRucl9yZWdpb25zLCBkb190cmFjZSksXFxuIFxcbiBcXHRUUF9DT05ESVRJT04oZG9fdHJhY2UpLFxcbiBcXG5AQCAtMTAxLDcgKzEwMyw3IEBAIFRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vc19iZWZvcmVfYXBwbHksXFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZXRhcmdldF9pZHggPSB0YXJnZXRfaWR4O1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VzdGFydCA9IHItXFx1MDAzZWFyLnN0YXJ0O1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VlbmQgPSByLVxcdTAwM2Vhci5lbmQ7XFxuLVxcdFxcdF9fZW50cnktXFx1MDAzZW5yX2FjY2Vzc2VzID0gci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgLyAxMDAwMDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfYWNjZXNzZXMgPSBucl9hY2Nlc3NlcztcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlYWdlID0gci1cXHUwMDNlYWdlO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vucl9yZWdpb25zID0gbnJfcmVnaW9ucztcXG4gXFx0KSxcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggMDI3MjUwZTQzYzY2ZjIuLmY1MmE4OWY5ZmQ5NzdkIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0yMDgsNiArMjA4LDcxIEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX250aF9wcm9iZShpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rLypcXG4rICogZGFtb25fbXZzdW0oKSAtIFJldHVybnMgcHNldWRvIG1vdmluZyBzdW0gdmFsdWUgZm9yIGEgdGltZSB3aW5kb3cuXFxuKyAqIEBjdXJyZW50X25yOlxcdFxcdFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXFxuKyAqIEBsYXN0X25yOlxcdFxcdFRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiB3aW5kb3cuXFxuKyAqIEBsZWZ0X3dpbmRvd19icDpcXHRMZWZ0IHRpbWUgb2YgdGhlIGN1cnJlbnQgYWdncmVnYXRpb24gd2luZG93LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBvZiBhIGNvdW50ZXIgdGhhdCBpc1xcbisgKiBhZ2dyZWdhdGVkIGZvciBlYWNoIHRpbWUgd2luZG93LiAgQGN1cnJlbnRfbnIgaXMgdGhlIHZhbHVlIG9mIHRoZSBjb3VudGVyXFxuKyAqIHRoYXQgYWdncmVnYXRlZCBzbyBmYXIgKG1heWJlIG5vdCB5ZXQgY29tcGxldGUpLCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlXFxuKyAqIGN1cnJlbnQgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuICBAbGFzdF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgdGhhdFxcbisgKiBoYXMgY29tcGxldGVseSBhZ2dyZWdhdGVkIGluIHRoZSBsYXN0IGFnZ3JlZ2F0aW9uIHRpbWUgd2luZG93LlxcbisgKiBAbGVmdF93aW5kb3dfYnAgcmVwcmVzZW50cyBob3cgbXVjaCB0aW1lIGlzIGxlZnQgZm9yIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uXFxuKyAqIHRpbWUgd2luZG93IGluIGJwICgxLzEwLDAwMCkuICBGb3IgZXhhbXBsZSwgdGhlIGFnZ3JlZ2F0aW9uIHRpbWUgd2luZG93IGlzXFxuKyAqIGZvciBldmVyeSAxMCBzZWNvbmRzIGFuZCA3IHNlY29uZHMgaGFzIHBhc3NlZCBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZVxcbisgKiBjdXJyZW50IHdpbmRvdywgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSAzMDAwICgoMTAgLSA3KSAvIDEwICogMTAwMDApLlxcbisgKlxcbisgKiBUaGUgbG9naWMgYXNzdW1lcyB0aGUgYWdncmVnYXRpb24gaW4gdGhlIGxhc3QgcGhhc2Ugd2FzIG1hZGUgaW4gYSBzaW5nbGVcXG4rICogc3BlZWQuICBCYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiwgdGhlIHZhbHVlIGZyb20gdGhlIGxhc3Qgd2luZG93IHRoYXQgbmVlZHNcXG4rICogdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBvcnRpb24gb2YgdGhlIGxhc3RcXG4rICogdmFsdWUgYmFzZWQgb24gdGhlIHJlbWFpbmluZyB0aW1lIHdpbmRvdy5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9ucixcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxcbit7XFxuK1xcdHJldHVybiBjdXJyZW50X25yICsgbXVsdF9mcmFjKGxhc3RfbnIsIGxlZnRfd2luZG93X2JwLCAxMDAwMCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSgpIC0gUmV0dXJucyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuXFxuKyAqIEByOlxcdFxcdFJlZ2lvbiB0byBnZXQgdGhlIGFjY2VzcyBmcmVxdWVuY3kgb2YuXFxuKyAqIEBjdHg6XFx0REFNT04gY29udGV4dCBvZiBAci5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZvciBob3cgbWFueSBzYW1wbGluZyBpdGVyYXRpb25zIGluIHRoZSBsYXN0XFxuKyAqIGFnZ3JlZ2F0aW9uIGludGVydmFsIChcXHUwMDI2ZGFtb25fYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwpIHRoZSByZWdpb24gd2FzIGZvdW5kIHRvXFxuKyAqIGJlIGFjY2Vzc2VkLiAgSGVuY2UgdGhlIHZhbHVlIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgcmVsYXRpdmUgYWNjZXNzXFxuKyAqIGZyZXF1ZW5jeSBzY29yZSBvZiB0aGUgcmVnaW9uIChAcikuICBUaGUgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBzZXVkb1xcbisgKiBtb3Zpbmcgc3VtLCBhbmQgaGVuY2UgaXQgaXMgbm90IGFuIGV4YWN0IHZhbHVlIGJ1dCBqdXN0IGEgYmVzdC1lZmZvcnRcXG4rICogcmVhc29uYWJsZSBlc3RpbWF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46IHRoZSBwc2V1ZG8gbW92aW5nIHN1bSBhY2Nlc3MgZnJlcXVlbmN5IHNjb3JlLlxcbisgKi9cXG4rdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCwgYWdncl9pbnRlcnZhbDtcXG4rXFx0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XFxuK1xcbitcXHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4rXFx0YWdncl9pbnRlcnZhbCA9IGN0eC1cXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA/IDogMTtcXG4rXFx0d2luZG93X2xlbiA9IGFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XFxuK1xcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXFxuK1xcdFxcdFxcdFxcdGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMpKVxcbitcXHRcXHRsZWZ0X3dpbmRvdyA9IDA7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bGVmdF93aW5kb3cgPSBjdHgtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIC1cXG4rXFx0XFx0XFx0Y3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscztcXG4rXFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcXG4rXFxuK1xcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcXG4rXFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XFxuK1xcbitcXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cXHUwMDNlbnJfYWNjZXNzZXMsIHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXFxuK1xcdFxcdFxcdGxlZnRfd2luZG93X2JwKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG4gc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHtcXG5AQCAtMjM3LDcgKzMwMiw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIFxcdHJlZ2lvbi1cXHUwMDNlYXIuc3RhcnQgPSBzdGFydDtcXG4gXFx0cmVnaW9uLVxcdTAwM2Vhci5lbmQgPSBlbmQ7XFxuIFxcdHJlZ2lvbi1cXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xcbi1cXHRyZWdpb24tXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMDtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcXG4gXFx0XFx0cmVnaW9uLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbGlzdCk7XFxuQEAgLTgwOSwyMiArODczLDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXFxuIFxcdFxcdGJvb2wgYWdncmVnYXRpbmcpXFxuIHtcXG4tXFx0aWYgKCFhZ2dyZWdhdGluZykge1xcbitcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcXG4rXFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbitcXHRpZiAoIWFnZ3JlZ2F0aW5nKVxcbiBcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXFxuIFxcdFxcdFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XFxuLVxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gci1cXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMDtcXG4tXFx0fSBlbHNlIHtcXG4rXFx0ZWxzZVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBpZiB0aGlzIGlzIGNhbGxlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBhZ2dyZWdhdGlvbiwgcmVzZXRcXG4gXFx0XFx0ICogdGhlIGFnZ3JlZ2F0aW9ucyB3ZSBtYWRlIHNvIGZhciBmb3IgdGhpcyBhZ2dyZWdhdGlvblxcbiBcXHRcXHQgKiBpbnRlcnZhbC4gIEluIG90aGVyIHdvcmRzLCBtYWtlIHRoZSBzdGF0dXMgbGlrZVxcbiBcXHRcXHQgKiBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoKSBpcyBjYWxsZWQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcXG4tXFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbi1cXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgKiAxMDAwMDtcXG4gXFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xcbi1cXHR9XFxuIFxcdHItXFx1MDAzZWFnZSA9IGRhbW9uX2FnZV9mb3JfbmV3X2F0dHJzKHItXFx1MDAzZWFnZSwgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbiB9XFxuIFxcbkBAIC0xOTM1LDM2ICsxOTk2LDYgQEAgaW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tLypcXG4tICogV2FybiBhbmQgZml4IGNvcnJ1cHRlZCAtXFx1MDAzZW5yX2FjY2Vzc2VzW19icF0gZm9yIGludmVzdGlnYXRpb25zIGFuZCBwcmV2ZW50aW5nXFxuLSAqIHRoZSBwcm9ibGVtIGJlaW5nIHByb3BhZ2F0ZWQuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBkYW1vbl93YXJuX2ZpeF9ucl9hY2Nlc3Nlc19jb3JydXB0aW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuLXtcXG4tXFx0aWYgKHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID09IHItXFx1MDAzZW5yX2FjY2Vzc2VzICogMTAwMDApXFxuLVxcdFxcdHJldHVybjtcXG4tXFx0V0FSTl9PTkNFKHRydWUsIFxcXCJpbnZhbGlkIG5yX2FjY2Vzc2VzX2JwIGF0IHJlc2V0OiAldSAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHItXFx1MDAzZW5yX2FjY2Vzc2VzKTtcXG4tXFx0ci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSByLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwO1xcbi19XFxuLVxcbi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi17XFxuLVxcdFdBUk5fT05DRShyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCAhPSByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzICogMTAwMDAsXFxuLVxcdFxcdFxcdFxcXCJucl9hY2Nlc3Nlc19icCAldSBsYXN0X25yX2FjY2Vzc2VzICV1IHNpcyAlbHUgJWx1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCwgci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyxcXG4tXFx0XFx0XFx0Yy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIGMtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKTtcXG4tfVxcbi0jZWxzZVxcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi17XFxuLX1cXG4tI2VuZGlmXFxuLVxcbi1cXG4gLypcXG4gICogUmVzZXQgdGhlIGFnZ3JlZ2F0ZWQgbW9uaXRvcmluZyByZXN1bHRzICgnbnJfYWNjZXNzZXMnIG9mIGVhY2ggcmVnaW9uKS5cXG4gICovXFxuQEAgLTE5ODksMTIgKzIwMjAsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuIFxcdFxcdFxcdHRyYWNlX2RhbW9uX2FnZ3JlZ2F0ZWQodGksIHIsIGRhbW9uX25yX3JlZ2lvbnModCkpO1xcbiBcXHRcXHRcXHR0cmFjZV9kYW1vbl9yZWdpb25fYWdncmVnYXRlZCh0aSwgcixcXG4gXFx0XFx0XFx0XFx0XFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgbnJfcHJvYmVzKTtcXG4tXFx0XFx0XFx0ZGFtb25fd2Fybl9maXhfbnJfYWNjZXNzZXNfY29ycnVwdGlvbihyKTtcXG4gXFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IHItXFx1MDAzZW5yX2FjY2Vzc2VzO1xcbiBcXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XFxuIFxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspXFxuIFxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbi1cXHRcXHRcXHRkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChyLCBjKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR0aSsrO1xcbiBcXHR9XFxuQEAgLTIwNjEsMTAgKzIwOTAsMTEgQEAgc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4gXFx0ZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZuZXdfYXR0cnMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuK3N0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4rXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqYylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6O1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMgPSByLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwO1xcbitcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyLCBjKTtcXG4gXFxuIFxcdHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbiBcXHRyZXR1cm4gcy1cXHUwMDNlcGF0dGVybi5taW5fc3pfcmVnaW9uIFxcdTAwM2M9IHN6IFxcdTAwMjZcXHUwMDI2XFxuQEAgLTIwOTAsNyArMjEyMCw3IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbiBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbiB7XFxuLVxcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcyk7XFxuK1xcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYyk7XFxuIFxcbiBcXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFxcdTAwMjZzLVxcdTAwM2VxdW90YSkgfHwgIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC0yMzc0LDcgKzI0MDQsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0c3RydWN0IGRhbW9zICpzaXRlcjtcXHRcXHQvKiBzY2hlbWVzIGl0ZXJhdG9yICovXFxuIFxcdHVuc2lnbmVkIGludCBzaWR4ID0gMDtcXG4gXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XFx0LyogdGFyZ2V0cyBpdGVyYXRvciAqL1xcbi1cXHR1bnNpZ25lZCBpbnQgdGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xcbiBcXHRib29sIGRvX3RyYWNlID0gZmFsc2U7XFxuIFxcbiBcXHQvKiBnZXQgaW5kaWNlcyBmb3IgdHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KCkgKi9cXG5AQCAtMjM4OSw2ICsyNDE5LDcgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR0aWR4Kys7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyLCBjKTtcXG4gXFx0XFx0ZG9fdHJhY2UgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC0yNDA0LDcgKzI0MzUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXFx1MDAyNmJlZ2luKTtcXG4tXFx0XFx0dHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KGNpZHgsIHNpZHgsIHRpZHgsIHIsXFxuK1xcdFxcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcXG4gXFx0XFx0XFx0XFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgZG9fdHJhY2UpO1xcbiBcXHRcXHRzel9hcHBsaWVkID0gYy1cXHUwMDNlb3BzLmFwcGx5X3NjaGVtZShjLCB0LCByLCBzLFxcbiBcXHRcXHRcXHRcXHRcXHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbkBAIC0yNjc2LDcgKzI3MDcsNyBAQCBzdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbiBcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbiBcXHRcXHRcXHRwaHlzX2FkZHJfdCBhZGRyLCBlbmRfYWRkcjtcXG4gXFxuLVxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXFxuK1xcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0LyogQ29udmVydCBmcm9tIGNvcmUgYWRkcmVzcyB1bml0cyB0byBwaHlzaWNhbCBieXRlcyAqL1xcbkBAIC0yOTY1LDcgKzI5OTYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbiBcXHRcXHRcXHQoREFNT1NfTUFYX1NDT1JFICsgMSkpO1xcbiBcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbiBcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbi1cXHRcXHRcXHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMpKVxcbitcXHRcXHRcXHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTMwNjksNyArMzEwMCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcbiBcXHRsLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IChsLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIHN6X2wgKyByLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIHN6X3IpIC9cXG4gXFx0XFx0XFx0KHN6X2wgKyBzel9yKTtcXG4tXFx0bC1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBsLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwO1xcbiBcXHRsLVxcdTAwM2VhZ2UgPSAobC1cXHUwMDNlYWdlICogc3pfbCArIHItXFx1MDAzZWFnZSAqIHN6X3IpIC8gKHN6X2wgKyBzel9yKTtcXG4gXFx0bC1cXHUwMDNlYXIuZW5kID0gci1cXHUwMDNlYXIuZW5kO1xcbiBcXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cXG5AQCAtMzA4MCwyMCArMzExMCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi17XFxuLVxcdFdBUk5fT05DRShyLVxcdTAwM2Vucl9hY2Nlc3NlcyAhPSByLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwLFxcbi1cXHRcXHRcXHRcXFwibnJfYWNjZXNzZXMgKCV1KSAhPSBucl9hY2Nlc3Nlc19icCAoJXUpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlcywgci1cXHUwMDNlbnJfYWNjZXNzZXNfYnApO1xcbi19XFxuLSNlbHNlXFxuLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuLXtcXG4tfVxcbi0jZW5kaWZcXG4tXFxuLVxcbiAvKlxcbiAgKiBNZXJnZSBhZGphY2VudCByZWdpb25zIGhhdmluZyBzaW1pbGFyIGFjY2VzcyBmcmVxdWVuY2llc1xcbiAgKlxcbkBAIC0zMTA3LDcgKzMxMjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcXG4gXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcXG4gXFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcXG4tXFx0XFx0ZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yocik7XFxuIFxcdFxcdGlmIChhYnMoci1cXHUwMDNlbnJfYWNjZXNzZXMgLSByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzKSBcXHUwMDNlIHRocmVzKVxcbiBcXHRcXHRcXHRyLVxcdTAwM2VhZ2UgPSAwO1xcbiBcXHRcXHRlbHNlIGlmICgoci1cXHUwMDNlbnJfYWNjZXNzZXMgPT0gMCkgIT0gKHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPT0gMCkpXFxuQEAgLTMxOTYsNyArMzIxMSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXG4gXFx0bmV3LVxcdTAwM2VhZ2UgPSByLVxcdTAwM2VhZ2U7XFxuIFxcdG5ldy1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XFxuLVxcdG5ldy1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSByLVxcdTAwM2Vucl9hY2Nlc3Nlc19icDtcXG4gXFx0bmV3LVxcdTAwM2Vucl9hY2Nlc3NlcyA9IHItXFx1MDAzZW5yX2FjY2Vzc2VzO1xcbiBcXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cXG4gXFx0bWVtY3B5KG5ldy1cXHUwMDNlcHJvYmVfaGl0cywgci1cXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXFx1MDAzZXByb2JlX2hpdHMpKTtcXG5AQCAtMzU3MSw4ICszNTg1LDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuIFxcdFxcdFxcdFxcdCAqIGFnZ3JlZ2F0aW9uLCBhbmQgbWFrZSBhZ2dyZWdhdGlvblxcbiBcXHRcXHRcXHRcXHQgKiBpbmZvcm1hdGlvbiByZXNldCBmb3IgYWxsIHJlZ2lvbnMuICBUaGVuLFxcbiBcXHRcXHRcXHRcXHQgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbFxcbi1cXHRcXHRcXHRcXHQgKiB3aWxsIG1ha2UgdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpbnZhbGlkLFxcbi1cXHRcXHRcXHRcXHQgKiBwYXJ0aWN1bGFybHkgZm9yIC1cXHUwMDNlbnJfYWNjZXNzZXNfYnAuXFxuK1xcdFxcdFxcdFxcdCAqIHdpbGwgbWFrZSB0aGUgcmVnaW9uIGluZm9ybWF0aW9uIGludmFsaWQuXFxuIFxcdFxcdFxcdFxcdCAqXFxuIFxcdFxcdFxcdFxcdCAqIFJlc2V0IC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgdG8gYXZvaWQgdGhhdC5cXG4gXFx0XFx0XFx0XFx0ICogSXQgd2lsbCBhbnl3YXkgY29ycmVjdGx5IHVwZGF0ZWQgYWZ0ZXIgdGhpc1xcbkBAIC0zNzExLDcyICszNzI0LDE4IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG4gfVxcbiBcXG4tLypcXG4tICogZGFtb25fbW92aW5nX3N1bSgpIC0gQ2FsY3VsYXRlIGFuIGluZmVycmVkIG1vdmluZyBzdW0gdmFsdWUuXFxuLSAqIEBtdnN1bTpcXHRJbmZlcnJlZCBzdW0gb2YgdGhlIGxhc3QgQGxlbl93aW5kb3cgdmFsdWVzLlxcbi0gKiBAbm9tdnN1bTpcXHROb24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCBkaXNjcmV0ZSBAbGVuX3dpbmRvdyB3aW5kb3cgdmFsdWVzLlxcbi0gKiBAbGVuX3dpbmRvdzpcXHRUaGUgbnVtYmVyIG9mIGxhc3QgdmFsdWVzIHRvIHRha2UgY2FyZSBvZi5cXG4tICogQG5ld192YWx1ZTpcXHROZXcgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwc2V1ZG8gbW92aW5nIHN1bS5cXG4tICpcXG4tICogTW92aW5nIHN1bSAobW92aW5nIGF2ZXJhZ2UgKiB3aW5kb3cgc2l6ZSkgaXMgZ29vZCBmb3IgaGFuZGxpbmcgbm9pc2UsIGJ1dFxcbi0gKiB0aGUgY29zdCBvZiBrZWVwaW5nIHBhc3QgdmFsdWVzIGNhbiBiZSBoaWdoIGZvciBhcmJpdHJhcnkgd2luZG93IHNpemUuICBUaGlzXFxuLSAqIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBsaWdodHdlaWdodCBwc2V1ZG8gbW92aW5nIHN1bSBmdW5jdGlvbiB0aGF0IGRvZXNuJ3RcXG4tICoga2VlcCB0aGUgcGFzdCB3aW5kb3cgdmFsdWVzLlxcbi0gKlxcbi0gKiBJdCBzaW1wbHkgYXNzdW1lcyB0aGVyZSB3YXMgbm8gbm9pc2UgaW4gdGhlIHBhc3QsIGFuZCBnZXQgdGhlIG5vLW5vaXNlXFxuLSAqIGFzc3VtZWQgcGFzdCB2YWx1ZSB0byBkcm9wIGZyb20gQG5vbXZzdW0gYW5kIEBsZW5fd2luZG93LiAgQG5vbXZzdW0gaXMgYVxcbi0gKiBub24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCB3aW5kb3cuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIHdlXFxuLSAqIGhhdmUgMjUgdmFsdWVzLCBAbm9tdnN1bSBpcyB0aGUgc3VtIG9mIHRoZSAxMXRoIHRvIDIwdGggdmFsdWVzIG9mIHRoZSAyNVxcbi0gKiB2YWx1ZXMuICBIZW5jZSwgdGhpcyBmdW5jdGlvbiBzaW1wbHkgZHJvcHMgQG5vbXZzdW0gLyBAbGVuX3dpbmRvdyBmcm9tXFxuLSAqIGdpdmVuIEBtdnN1bSBhbmQgYWRkIEBuZXdfdmFsdWUuXFxuLSAqXFxuLSAqIEZvciBleGFtcGxlLCBpZiBAbGVuX3dpbmRvdyBpcyAxMCBhbmQgQG5vbXZzdW0gaXMgNTAsIHRoZSBsYXN0IDEwIHZhbHVlcyBmb3JcXG4tICogdGhlIGxhc3Qgd2luZG93IGNvdWxkIGJlIHZhcnksIGUuZy4sIDAsIDEwLCAwLCAxMCwgMCwgMTAsIDAsIDAsIDAsIDIwLiAgRm9yXFxuLSAqIGNhbGN1bGF0aW5nIG5leHQgbW92aW5nIHN1bSB3aXRoIGEgbmV3IHZhbHVlLCB3ZSBzaG91bGQgZHJvcCAwIGZyb20gNTAgYW5kXFxuLSAqIGFkZCB0aGUgbmV3IHZhbHVlLiAgSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIGl0IGdvdCB2YWx1ZSA1IGZvciBlYWNoXFxuLSAqIG9mIHRoZSBsYXN0IHRlbiB0aW1lcy4gIEJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uLCB3aGVuIHRoZSBuZXh0IHZhbHVlIGlzXFxuLSAqIG1lYXN1cmVkLCBpdCBkcm9wcyB0aGUgYXNzdW1lZCBwYXN0IHZhbHVlLCA1IGZyb20gdGhlIGN1cnJlbnQgc3VtLCBhbmQgYWRkXFxuLSAqIHRoZSBuZXcgdmFsdWUgdG8gZ2V0IHRoZSB1cGRhdGVkIHBzZWR1by1tb3ZpbmcgYXZlcmFnZS5cXG4tICpcXG4tICogVGhpcyBtZWFucyB0aGUgdmFsdWUgY291bGQgaGF2ZSBlcnJvcnMsIGJ1dCB0aGUgZXJyb3JzIHdpbGwgYmUgZGlzYXBwZWFyZWRcXG4tICogZm9yIGV2ZXJ5IEBsZW5fd2luZG93IGFsaWduZWQgY2FsbHMuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAsIHRoZVxcbi0gKiBwc2V1ZG8gbW92aW5nIHN1bSB3aXRoIDExdGggdmFsdWUgdG8gMTl0aCB2YWx1ZSB3b3VsZCBoYXZlIGFuIGVycm9yLiAgQnV0XFxuLSAqIHRoZSBzdW0gd2l0aCAyMHRoIHZhbHVlIHdpbGwgbm90IGhhdmUgdGhlIGVycm9yLlxcbi0gKlxcbi0gKiBSZXR1cm46IFBzZXVkby1tb3ZpbmcgYXZlcmFnZSBhZnRlciBnZXR0aW5nIHRoZSBAbmV3X3ZhbHVlLlxcbi0gKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tb3Zpbmdfc3VtKHVuc2lnbmVkIGludCBtdnN1bSwgdW5zaWduZWQgaW50IG5vbXZzdW0sXFxuLVxcdFxcdHVuc2lnbmVkIGludCBsZW5fd2luZG93LCB1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlKVxcbi17XFxuLVxcdHJldHVybiBtdnN1bSAtIG5vbXZzdW0gLyBsZW5fd2luZG93ICsgbmV3X3ZhbHVlO1xcbi19XFxuLVxcbiAvKipcXG4gICogZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSgpIC0gVXBkYXRlIHRoZSBhY2Nlc3MgcmF0ZSBvZiBhIHJlZ2lvbi5cXG4gICogQHI6XFx0XFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxcbiAgKiBAYWNjZXNzZWQ6XFx0V2hldGhlciB0aGUgcmVnaW9uIGhhcyBhY2Nlc3NlZCBkdXJpbmcgbGFzdCBzYW1wbGluZyBpbnRlcnZhbC5cXG4tICogQGF0dHJzOlxcdFRoZSBkYW1vbl9hdHRycyBvZiB0aGUgREFNT04gY29udGV4dC5cXG4gICpcXG4gICogVXBkYXRlIHRoZSBhY2Nlc3MgcmF0ZSBvZiBhIHJlZ2lvbiB3aXRoIHRoZSByZWdpb24ncyBsYXN0IHNhbXBsaW5nIGludGVydmFsXFxuICAqIGFjY2VzcyBjaGVjayByZXN1bHQuXFxuICAqXFxuICAqIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGNhbGxlZCBieSBcXHUwMDI2ZGFtb25fb3BlcmF0aW9ucy1cXHUwMDNlY2hlY2tfYWNjZXNzZXMgY2FsbGJhY2suXFxuICAqL1xcbi12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcXG4tXFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4rdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IGxlbl93aW5kb3cgPSAxO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogc2FtcGxlX2ludGVydmFsIGNhbiBiZSB6ZXJvLCBidXQgY2Fubm90IGJlIGxhcmdlciB0aGFuXFxuLVxcdCAqIGFnZ3JfaW50ZXJ2YWwsIG93aW5nIHRvIHZhbGlkYXRpb24gb2YgZGFtb25fc2V0X2F0dHJzKCkuXFxuLVxcdCAqL1xcbi1cXHRpZiAoYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbClcXG4tXFx0XFx0bGVuX3dpbmRvdyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycyk7XFxuLVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gZGFtb25fbW92aW5nX3N1bShyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCxcXG4tXFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwLCBsZW5fd2luZG93LFxcbi1cXHRcXHRcXHRhY2Nlc3NlZCA/IDEwMDAwIDogMCk7XFxuLVxcbiBcXHRpZiAoYWNjZXNzZWQpXFxuIFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzKys7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcXG5pbmRleCA1YzJkYTQ1Zjk4OGNmOS4uNjE3MjQ2NDk4MTczMDQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyAqZm9saW9fc3opXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4ge1xcbiBcXHRzdGF0aWMgcGh5c19hZGRyX3QgbGFzdF9hZGRyO1xcbiBcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2ZvbGlvX3N6ID0gUEFHRV9TSVpFO1xcbkBAIC05MSwxMiArOTEsMTIgQEAgc3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0LyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi9cXG4gXFx0aWYgKEFMSUdOX0RPV04obGFzdF9hZGRyLCBsYXN0X2ZvbGlvX3N6KSA9PVxcbiBcXHRcXHRcXHRcXHRBTElHTl9ET1dOKHNhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSB7XFxuLVxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbitcXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl9wYV95b3VuZyhzYW1wbGluZ19hZGRyLCBcXHUwMDI2bGFzdF9mb2xpb19zeik7XFxuLVxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbitcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQpO1xcbiBcXG4gXFx0bGFzdF9hZGRyID0gc2FtcGxpbmdfYWRkcjtcXG4gfVxcbkBAIC0xMDksOCArMTA5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcbiBcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuIFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxuLVxcdFxcdFxcdF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKFxcbi1cXHRcXHRcXHRcXHRcXHRyLCBcXHUwMDI2Y3R4LVxcdTAwM2VhdHRycywgY3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbitcXHRcXHRcXHRfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhyLCBjdHgtXFx1MDAzZWFkZHJfdW5pdCk7XFxuIFxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVxcdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbmluZGV4IDQxZjkzYTE4MjNiZjEzLi5kYmYyYjA1MTVkNTgyOSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcXG4rKysgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcXG5AQCAtMTU3LDcgKzE1Nyw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uIHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcXG4tXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uKVxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqc3lzZnNfcmVnaW9uID0ga21hbGxvY19vYmooKnN5c2ZzX3JlZ2lvbik7XFxuIFxcbkBAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2Vrb2JqID0gKHN0cnVjdCBrb2JqZWN0KXt9O1xcbiBcXHRzeXNmc19yZWdpb24tXFx1MDAzZWFyID0gcmVnaW9uLVxcdTAwM2VhcjtcXG4tXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IHJlZ2lvbi1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgLyAxMDAwMDtcXG4rXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHJlZ2lvbiwgY3R4KTtcXG4gXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2VhZ2UgPSByZWdpb24tXFx1MDAzZWFnZTtcXG4gXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2Vwcm9iZXMgPSBOVUxMO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3lzZnNfcmVnaW9uLVxcdTAwM2VsaXN0KTtcXG5AQCAtMzEyMiw3ICszMTIyLDcgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbiBcXHRpZiAodG90YWxfYnl0ZXNfb25seSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cmVnaW9uID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhyKTtcXG4rXFx0cmVnaW9uID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhyLCBjdHgpO1xcbiBcXHRpZiAoIXJlZ2lvbilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRyZWdpb24tXFx1MDAzZXN6X2ZpbHRlcl9wYXNzZWQgPSBzel9maWx0ZXJfcGFzc2VkO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCBmY2Y3YzdmYWRiNWZlNS4uZjFmYWViYjZmZjk5M2YgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuQEAgLTExNCw3ICsxMTQsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSBhY2Nlc3Nlc1tpdF1baXJdO1xcbi1cXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGFjY2Vzc2VzW2l0XVtpcl0gKiAxMDAwMDtcXG4gXFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpdCsrO1xcbkBAIC0xNTEsNyArMTUwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbiBcXHR9XFxuLVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gNDIwMDAwO1xcbiBcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDQyO1xcbiBcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gMTU7XFxuIFxcdHItXFx1MDAzZWFnZSA9IDEwO1xcbkBAIC0xNjQsNyArMTYyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByX25ldy1cXHUwMDNlYXIuc3RhcnQsIDI1dWwpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctXFx1MDAzZWFyLmVuZCwgMTAwdWwpO1xcbiBcXG4tXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwLCByX25ldy1cXHUwMDNlbnJfYWNjZXNzZXNfYnApO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIHJfbmV3LVxcdTAwM2Vucl9hY2Nlc3Nlcyk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcyk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIHJfbmV3LVxcdTAwM2VhZ2UpO1xcbkBAIC0xODcsNyArMTg0LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbiBcXHR9XFxuIFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XFxuLVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMTAwMDAwO1xcbiBcXHRyLVxcdTAwM2VhZ2UgPSA5O1xcbiBcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbiBcXHRyMiA9IGRhbW9uX25ld19yZWdpb24oMTAwLCAzMDApO1xcbkBAIC0xOTYsNyArMTkyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzZWNvbmQgcmVnaW9uIGFsbG9jIGZhaWxcXFwiKTtcXG4gXFx0fVxcbiBcXHRyMi1cXHUwMDNlbnJfYWNjZXNzZXMgPSAyMDtcXG4tXFx0cjItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMjAwMDAwO1xcbiBcXHRyMi1cXHUwMDNlYWdlID0gMjE7XFxuIFxcdGRhbW9uX2FkZF9yZWdpb24ocjIsIHQpO1xcbiBcXG5AQCAtMjA0LDcgKzE5OSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCAwdWwpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYXIuZW5kLCAzMDB1bCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTZ1KTtcXG4tXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwLCAxNjAwMDB1KTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFnZSwgMTd1KTtcXG4gXFxuIFxcdGkgPSAwO1xcbkBAIC0yNTIsNyArMjQ2LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwicmVnaW9uIGFsbG9jIGZhaWxcXFwiKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IG5yc1tpXTtcXG4tXFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBucnNbaV0gKiAxMDAwMDtcXG4gXFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG4gXFx0fVxcbiBcXG5AQCAtNTUyLDcgKzU0NSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwicmVnaW9uIGFsbG9jIGZhaWxcXFwiKTtcXG4gXFxuIFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMTU7XFxuLVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMTUwMDAwO1xcbiBcXHRyLVxcdTAwM2VhZ2UgPSAyMDtcXG4gXFxuIFxcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xcbkBAIC02MDQsMTggKzU5NiwyNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21vdmluZ19zdW0oc3RydWN0IGt1bml0ICp0ZXN0KVxcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X212c3VtKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgbXZzdW0gPSA1MDAwMCwgbm9tdnN1bSA9IDUwMDAwLCBsZW5fd2luZG93ID0gMTA7XFxuLVxcdHVuc2lnbmVkIGludCBuZXdfdmFsdWVzW10gPSB7MTAwMDAsIDAsIDEwMDAwLCAwLCAwLCAwLCAxMDAwMCwgMCwgMCwgMH07XFxuLVxcdHVuc2lnbmVkIGludCBleHBlY3RzW10gPSB7NTUwMDAsIDUwMDAwLCA1NTAwMCwgNTAwMDAsIDQ1MDAwLCA0MDAwMCxcXG4tXFx0XFx0NDUwMDAsIDQwMDAwLCAzNTAwMCwgMzAwMDB9O1xcbitcXHR1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHtcXG4rXFx0XFx0LyogY3VycmVudCB2YWx1ZSwgbGFzdCB2YWx1ZSwgcmVtYWluaW5nIHdpbmRvdyAoYnApICovXFxuK1xcdFxcdDAsIDQ5LCAxMDAwMCwgNDksXFx0LyogMCArIDQ5ICogMSAqL1xcbitcXHRcXHQzLCAxMCwgNzAwMCwgMTAsXFx0LyogMyArIDEwICogMC43ICovXFxuK1xcdFxcdDMsIDEwLCA1MDAwLCA4LFxcdFxcdC8qIDMgKyAxMCAqIDAuNSAqL1xcbitcXHRcXHQzMiwgMTAwLCAxMDAwLCA0MixcXHQvKiAzMiArIDEwMCAqIDAuMSAqL1xcbitcXHRcXHQ0MiwgNDksIDAsIDQyLFxcdFxcdC8qIDQyICsgNDkgKiAwICovXFxuK1xcdH07XFxuK1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5ld192YWx1ZXMpOyBpKyspIHtcXG4tXFx0XFx0bXZzdW0gPSBkYW1vbl9tb3Zpbmdfc3VtKG12c3VtLCBub212c3VtLCBsZW5fd2luZG93LFxcbi1cXHRcXHRcXHRcXHRuZXdfdmFsdWVzW2ldKTtcXG4tXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG12c3VtLCBleHBlY3RzW2ldKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoaW5wdXRfZXhwZWN0cyk7IGkgKz0gNCkge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfbnIgPSBpbnB1dF9leHBlY3RzW2ldO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfbnIgPSBpbnB1dF9leHBlY3RzW2kgKyAxXTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBsZWZ0X3dpbmRvd19icCA9IGlucHV0X2V4cGVjdHNbaSArIDJdO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGV4cGVjdCA9IGlucHV0X2V4cGVjdHNbaSArIDNdO1xcbitcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX212c3VtKGN1cnJlbnRfbnIsIGxhc3RfbnIsXFxuK1xcdFxcdFxcdFxcdFxcdGxlZnRfd2luZG93X2JwKSwgZXhwZWN0KTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0xNDY5LDcgKzE0NzAsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXFxuLVxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tb3Zpbmdfc3VtKSxcXG4rXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X212c3VtKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzKSxcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5pbmRleCBlNzNlYzFjZTAxNmU1Yi4uMjA1OGRiOWMwMWQ1MmYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtNDkzLDI3ICs0OTMsMjYgQEAgc3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gICogclxcdHRoZSByZWdpb24gdG8gYmUgY2hlY2tlZFxcbiAgKi9cXG4gc3RhdGljIHZvaWQgX19kYW1vbl92YV9jaGVja19hY2Nlc3Moc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgc2FtZV90YXJnZXQsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgc2FtZV90YXJnZXQpXFxuIHtcXG4gXFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyO1xcbiBcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2ZvbGlvX3N6ID0gUEFHRV9TSVpFO1xcbiBcXHRzdGF0aWMgYm9vbCBsYXN0X2FjY2Vzc2VkO1xcbiBcXG4gXFx0aWYgKCFtbSkge1xcbi1cXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlLCBhdHRycyk7XFxuK1xcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgZmFsc2UpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdC8qIElmIHRoZSByZWdpb24gaXMgaW4gdGhlIGxhc3QgY2hlY2tlZCBwYWdlLCByZXVzZSB0aGUgcmVzdWx0ICovXFxuIFxcdGlmIChzYW1lX3RhcmdldCBcXHUwMDI2XFx1MDAyNiAoQUxJR05fRE9XTihsYXN0X2FkZHIsIGxhc3RfZm9saW9fc3opID09XFxuIFxcdFxcdFxcdFxcdEFMSUdOX0RPV04oci1cXHUwMDNlc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpKSB7XFxuLVxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbitcXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkciwgXFx1MDAyNmxhc3RfZm9saW9fc3opO1xcbi1cXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcXG4rXFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkKTtcXG4gXFxuIFxcdGxhc3RfYWRkciA9IHItXFx1MDAzZXNhbXBsaW5nX2FkZHI7XFxuIH1cXG5AQCAtNTMwLDggKzUyOSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRcXHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcXG4gXFx0XFx0c2FtZV90YXJnZXQgPSBmYWxzZTtcXG4gXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4tXFx0XFx0XFx0X19kYW1vbl92YV9jaGVja19hY2Nlc3MobW0sIHIsIHNhbWVfdGFyZ2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y3R4LVxcdTAwM2VhdHRycyk7XFxuK1xcdFxcdFxcdF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKG1tLCByLCBzYW1lX3RhcmdldCk7XFxuIFxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVxcdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcXG4gXFx0XFx0XFx0c2FtZV90YXJnZXQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XFxuaW5kZXggOTcyOTQ4ZTYyMTVmMWQuLjQ5NDJhZmRmNDZjZDQ0IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XFxuQEAgLTU5LDcgKzU5LDYgQEAgZGVmIHJlZ2lvbl90b19kaWN0KHJlZ2lvbik6XFxuICAgICAgICAgWydhcicsIGFkZHJfcmFuZ2VfdG9fZGljdF0sXFxuICAgICAgICAgWydzYW1wbGluZ19hZGRyJywgaW50XSxcXG4gICAgICAgICBbJ25yX2FjY2Vzc2VzJywgaW50XSxcXG4tICAgICAgICBbJ25yX2FjY2Vzc2VzX2JwJywgaW50XSxcXG4gICAgICAgICBbJ2FnZScsIGludF0sXFxuICAgICAgICAgXSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA1OjU1OjI2LjUyNDQ4ODM5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwMzg5NDM4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bVwiLFxuICAgIFwiZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZVwiLFxuICAgIFwiX19kYW1vc192YWxpZF90YXJnZXRcIixcbiAgICBcImRhbW9zX2FwcGx5X3NjaGVtZVwiLFxuICAgIFwiZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlc1wiLFxuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJkYW1vbl9tZXJnZV90d29fcmVnaW9uc1wiLFxuICAgIFwiZGFtb25fbWVyZ2VfcmVnaW9uc19vZlwiLFxuICAgIFwiZGFtb25fc3BsaXRfcmVnaW9uX2F0XCIsXG4gICAgXCJfX2RhbW9uX3BhX2NoZWNrX2FjY2Vzc1wiLFxuICAgIFwiX19kYW1vbl92YV9jaGVja19hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSBieSByZXBsYWNpbmcgdGhlIGBucl9hY2Nlc3Nlc19icGAgZmllbGQgd2l0aCBhIHBzZXVkbyBtb3Zpbmcgc3VtIGNhbGN1bGF0aW9uIChgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gKS4gVGhpcyBhZmZlY3RzIGhvdyBhY2Nlc3MgZnJlcXVlbmNpZXMgYXJlIGNhbGN1bGF0ZWQsIG1lcmdlZCwgc3BsaXQsIGFuZCBldmFsdWF0ZWQgZm9yIHNjaGVtZXMgYWNyb3NzIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmRmYzA2NmRmMGVhNjZmMjEwYTQwYWE4NDc5YjhhMTQ0ZGFhNDk2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA1OjU1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCBjZmJiZjhiYTI4ZjYzMi4uODA1ZTA4OWZmNGYyZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTQ1LDggKzQ1LDYgQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuICAqIEBhcjpcdFx0XHRUaGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgcmVnaW9uLlxuICAqIEBzYW1wbGluZ19hZGRyOlx0QWRkcmVzcyBvZiB0aGUgc2FtcGxlIGZvciB0aGUgbmV4dCBhY2Nlc3MgY2hlY2suXG4gICogQG5yX2FjY2Vzc2VzOlx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cbi0gKiBAbnJfYWNjZXNzZXNfYnA6XHRAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnQgKDAuMDElKSB0aGF0IHVwZGF0ZWQgZm9yXG4tICpcdFx0XHRlYWNoIHNhbXBsaW5nIGludGVydmFsLlxuICAqIEBwcm9iZV9oaXRzOlx0XHROdW1iZXIgb2YgcHJvYmUtcG9zaXRpdmUgcmVnaW9uIHNhbXBsZXMuXG4gICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICogQGFnZTpcdFx0QWdlIG9mIHRoaXMgcmVnaW9uLlxuQEAgLTU5LDEzICs1Nyw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBub3QgYmUgZG9uZSB3aXRoIGRpcmVjdCBhY2Nlc3MgYnV0IHdpdGggdGhlIGhlbHBlciBmdW5jdGlvbixcbiAgKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkuXG4gICpcbi0gKiBAbnJfYWNjZXNzZXNfYnAgaXMgYW5vdGhlciByZXByZXNlbnRhdGlvbiBvZiBAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnRcbi0gKiAoMSBpbiAxMCwwMDApIHRoYXQgdXBkYXRlZCBmb3IgZXZlcnkgXHUwMDI2ZGFtb25fYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsIGluIGFcbi0gKiBtYW5uZXIgc2ltaWxhciB0byBtb3Zpbmcgc3VtLiAgQnkgdGhlIGFsZ29yaXRobSwgdGhpcyB2YWx1ZSBiZWNvbWVzXG4tICogQG5yX2FjY2Vzc2VzICogMTAwMDAgZm9yIGV2ZXJ5IFx1MDAyNnN0cnVjdCBkYW1vbl9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsLiAgVGhpcyBjYW5cbi0gKiBiZSB1c2VkIHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGlzIHRvbyBodWdlIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdhaXRcbi0gKiBmb3IgaXQgYmVmb3JlIGdldHRpbmcgdGhlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMuXG4tICpcbiAgKiBAYWdlIGlzIGluaXRpYWxseSB6ZXJvLCBpbmNyZWFzZWQgZm9yIGVhY2ggYWdncmVnYXRpb24gaW50ZXJ2YWwsIGFuZCByZXNldFxuICAqIHRvIHplcm8gYWdhaW4gaWYgdGhlIGFjY2VzcyBmcmVxdWVuY3kgaXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLiAgSWYgdHdvXG4gICogcmVnaW9ucyBhcmUgbWVyZ2VkIGludG8gYSBuZXcgcmVnaW9uLCBib3RoIEBucl9hY2Nlc3NlcyBhbmQgQGFnZSBvZiB0aGUgbmV3XG5AQCAtNzUsNyArNjYsNiBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFyO1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xuIFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzO1xuLVx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzX2JwO1xuIFx0dW5zaWduZWQgY2hhciBwcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFxuQEAgLTEwMTEsMTEgKzEwMDEsMTIgQEAgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZCk7XG4gdm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKTtcbiBcbiBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbit1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiBcbiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbiBcdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTtcbi12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbi1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycyk7XG4rdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpO1xuIFxuIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX25ld19maWx0ZXIoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlLFxuIFx0XHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxuaW5kZXggNzgzODg1MzhhY2Y0NDYuLjg4NTE3MjdhZTE2MjdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxuQEAgLTc4LDkgKzc4LDExIEBAIFRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vc19iZWZvcmVfYXBwbHksXG4gXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY29udGV4dF9pZHgsIHVuc2lnbmVkIGludCBzY2hlbWVfaWR4LFxuIFx0XHR1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi1cdFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMsIGJvb2wgZG9fdHJhY2UpLFxuK1x0XHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHVuc2lnbmVkIGludCBucl9yZWdpb25zLFxuK1x0XHRib29sIGRvX3RyYWNlKSxcbiBcbi1cdFRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX3JlZ2lvbnMsIGRvX3RyYWNlKSxcbitcdFRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX2FjY2Vzc2VzLFxuK1x0XHRucl9yZWdpb25zLCBkb190cmFjZSksXG4gXG4gXHRUUF9DT05ESVRJT04oZG9fdHJhY2UpLFxuIFxuQEAgLTEwMSw3ICsxMDMsNyBAQCBUUkFDRV9FVkVOVF9DT05ESVRJT04oZGFtb3NfYmVmb3JlX2FwcGx5LFxuIFx0XHRfX2VudHJ5LVx1MDAzZXRhcmdldF9pZHggPSB0YXJnZXRfaWR4O1xuIFx0XHRfX2VudHJ5LVx1MDAzZXN0YXJ0ID0gci1cdTAwM2Vhci5zdGFydDtcbiBcdFx0X19lbnRyeS1cdTAwM2VlbmQgPSByLVx1MDAzZWFyLmVuZDtcbi1cdFx0X19lbnRyeS1cdTAwM2Vucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgLyAxMDAwMDtcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9hY2Nlc3NlcyA9IG5yX2FjY2Vzc2VzO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWFnZSA9IHItXHUwMDNlYWdlO1xuIFx0XHRfX2VudHJ5LVx1MDAzZW5yX3JlZ2lvbnMgPSBucl9yZWdpb25zO1xuIFx0KSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDAyNzI1MGU0M2M2NmYyLi5mNTJhODlmOWZkOTc3ZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjA4LDYgKzIwOCw3MSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbisvKlxuKyAqIGRhbW9uX212c3VtKCkgLSBSZXR1cm5zIHBzZXVkbyBtb3Zpbmcgc3VtIHZhbHVlIGZvciBhIHRpbWUgd2luZG93LlxuKyAqIEBjdXJyZW50X25yOlx0XHRUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgYWdncmVnYXRpb24gd2luZG93LlxuKyAqIEBsYXN0X25yOlx0XHRUaGUgdmFsdWUgb2YgdGhlIGxhc3QgYWdncmVnYXRpb24gd2luZG93LlxuKyAqIEBsZWZ0X3dpbmRvd19icDpcdExlZnQgdGltZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBvZiBhIGNvdW50ZXIgdGhhdCBpc1xuKyAqIGFnZ3JlZ2F0ZWQgZm9yIGVhY2ggdGltZSB3aW5kb3cuICBAY3VycmVudF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXJcbisgKiB0aGF0IGFnZ3JlZ2F0ZWQgc28gZmFyIChtYXliZSBub3QgeWV0IGNvbXBsZXRlKSwgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZVxuKyAqIGN1cnJlbnQgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuICBAbGFzdF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgdGhhdFxuKyAqIGhhcyBjb21wbGV0ZWx5IGFnZ3JlZ2F0ZWQgaW4gdGhlIGxhc3QgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuXG4rICogQGxlZnRfd2luZG93X2JwIHJlcHJlc2VudHMgaG93IG11Y2ggdGltZSBpcyBsZWZ0IGZvciB0aGUgY3VycmVudCBhZ2dyZWdhdGlvblxuKyAqIHRpbWUgd2luZG93IGluIGJwICgxLzEwLDAwMCkuICBGb3IgZXhhbXBsZSwgdGhlIGFnZ3JlZ2F0aW9uIHRpbWUgd2luZG93IGlzXG4rICogZm9yIGV2ZXJ5IDEwIHNlY29uZHMgYW5kIDcgc2Vjb25kcyBoYXMgcGFzc2VkIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4rICogY3VycmVudCB3aW5kb3csIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgMzAwMCAoKDEwIC0gNykgLyAxMCAqIDEwMDAwKS5cbisgKlxuKyAqIFRoZSBsb2dpYyBhc3N1bWVzIHRoZSBhZ2dyZWdhdGlvbiBpbiB0aGUgbGFzdCBwaGFzZSB3YXMgbWFkZSBpbiBhIHNpbmdsZVxuKyAqIHNwZWVkLiAgQmFzZWQgb24gdGhlIGFzc3VtcHRpb24sIHRoZSB2YWx1ZSBmcm9tIHRoZSBsYXN0IHdpbmRvdyB0aGF0IG5lZWRzXG4rICogdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBvcnRpb24gb2YgdGhlIGxhc3RcbisgKiB2YWx1ZSBiYXNlZCBvbiB0aGUgcmVtYWluaW5nIHRpbWUgd2luZG93LlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9ucixcbitcdFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxuK3tcbitcdHJldHVybiBjdXJyZW50X25yICsgbXVsdF9mcmFjKGxhc3RfbnIsIGxlZnRfd2luZG93X2JwLCAxMDAwMCk7XG4rfVxuK1xuKy8qKlxuKyAqIGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKCkgLSBSZXR1cm5zIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cbisgKiBAcjpcdFx0UmVnaW9uIHRvIGdldCB0aGUgYWNjZXNzIGZyZXF1ZW5jeSBvZi5cbisgKiBAY3R4Olx0REFNT04gY29udGV4dCBvZiBAci5cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBmb3IgaG93IG1hbnkgc2FtcGxpbmcgaXRlcmF0aW9ucyBpbiB0aGUgbGFzdFxuKyAqIGFnZ3JlZ2F0aW9uIGludGVydmFsIChcdTAwMjZkYW1vbl9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsKSB0aGUgcmVnaW9uIHdhcyBmb3VuZCB0b1xuKyAqIGJlIGFjY2Vzc2VkLiAgSGVuY2UgdGhlIHZhbHVlIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgcmVsYXRpdmUgYWNjZXNzXG4rICogZnJlcXVlbmN5IHNjb3JlIG9mIHRoZSByZWdpb24gKEByKS4gIFRoZSB2YWx1ZSBpcyBjYWxjdWxhdGVkIGFzIGEgcHNldWRvXG4rICogbW92aW5nIHN1bSwgYW5kIGhlbmNlIGl0IGlzIG5vdCBhbiBleGFjdCB2YWx1ZSBidXQganVzdCBhIGJlc3QtZWZmb3J0XG4rICogcmVhc29uYWJsZSBlc3RpbWF0aW9uLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgcHNldWRvIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cbisgKi9cbit1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsLCBhZ2dyX2ludGVydmFsO1xuK1x0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XG4rXG4rXHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xuK1x0YWdncl9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID8gOiAxO1xuK1x0d2luZG93X2xlbiA9IGFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XG4rXHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4rXHRcdFx0XHRjdHgtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMpKVxuK1x0XHRsZWZ0X3dpbmRvdyA9IDA7XG4rXHRlbHNlXG4rXHRcdGxlZnRfd2luZG93ID0gY3R4LVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIC1cbitcdFx0XHRjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHM7XG4rXHRsZWZ0X3dpbmRvd19icCA9IG11bHRfZnJhYyhsZWZ0X3dpbmRvdywgMTAwMDAsIHdpbmRvd19sZW4pO1xuK1xuK1x0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxuK1x0XHRyZXR1cm4gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuK1xuK1x0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlbnJfYWNjZXNzZXMsIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyxcbitcdFx0XHRsZWZ0X3dpbmRvd19icCk7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4gc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4ge1xuQEAgLTIzNyw3ICszMDIsNiBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0cmVnaW9uLVx1MDAzZWFyLnN0YXJ0ID0gc3RhcnQ7XG4gXHRyZWdpb24tXHUwMDNlYXIuZW5kID0gZW5kO1xuIFx0cmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcbi1cdHJlZ2lvbi1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDA7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspXG4gXHRcdHJlZ2lvbi1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJlZ2lvbi1cdTAwM2VsaXN0KTtcbkBAIC04MDksMjIgKzg3MywxOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuIFx0XHRib29sIGFnZ3JlZ2F0aW5nKVxuIHtcbi1cdGlmICghYWdncmVnYXRpbmcpIHtcbitcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXG4rXHRcdFx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XG4rXHRpZiAoIWFnZ3JlZ2F0aW5nKVxuIFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcbiBcdFx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbi1cdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMDtcbi1cdH0gZWxzZSB7XG4rXHRlbHNlXG4gXHRcdC8qXG4gXHRcdCAqIGlmIHRoaXMgaXMgY2FsbGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIGFnZ3JlZ2F0aW9uLCByZXNldFxuIFx0XHQgKiB0aGUgYWdncmVnYXRpb25zIHdlIG1hZGUgc28gZmFyIGZvciB0aGlzIGFnZ3JlZ2F0aW9uXG4gXHRcdCAqIGludGVydmFsLiAgSW4gb3RoZXIgd29yZHMsIG1ha2UgdGhlIHN0YXR1cyBsaWtlXG4gXHRcdCAqIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpIGlzIGNhbGxlZC5cbiBcdFx0ICovXG4tXHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXG4tXHRcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbi1cdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwO1xuIFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcbi1cdH1cbiBcdHItXHUwMDNlYWdlID0gZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnMoci1cdTAwM2VhZ2UsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiB9XG4gXG5AQCAtMTkzNSwzNiArMTk5Niw2IEBAIGludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKlxuLSAqIFdhcm4gYW5kIGZpeCBjb3JydXB0ZWQgLVx1MDAzZW5yX2FjY2Vzc2VzW19icF0gZm9yIGludmVzdGlnYXRpb25zIGFuZCBwcmV2ZW50aW5nXG4tICogdGhlIHByb2JsZW0gYmVpbmcgcHJvcGFnYXRlZC5cbi0gKi9cbi1zdGF0aWMgdm9pZCBkYW1vbl93YXJuX2ZpeF9ucl9hY2Nlc3Nlc19jb3JydXB0aW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4te1xuLVx0aWYgKHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgPT0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwKVxuLVx0XHRyZXR1cm47XG4tXHRXQVJOX09OQ0UodHJ1ZSwgXCJpbnZhbGlkIG5yX2FjY2Vzc2VzX2JwIGF0IHJlc2V0OiAldSAldVxcblwiLFxuLVx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHItXHUwMDNlbnJfYWNjZXNzZXMpO1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMDtcbi19XG4tXG4tI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLXtcbi1cdFdBUk5fT05DRShyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwICE9IHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwLFxuLVx0XHRcdFwibnJfYWNjZXNzZXNfYnAgJXUgbGFzdF9ucl9hY2Nlc3NlcyAldSBzaXMgJWx1ICVsdVxcblwiLFxuLVx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcyxcbi1cdFx0XHRjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBjLVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKTtcbi19XG4tI2Vsc2Vcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLXtcbi19XG4tI2VuZGlmXG4tXG4tXG4gLypcbiAgKiBSZXNldCB0aGUgYWdncmVnYXRlZCBtb25pdG9yaW5nIHJlc3VsdHMgKCducl9hY2Nlc3Nlcycgb2YgZWFjaCByZWdpb24pLlxuICAqL1xuQEAgLTE5ODksMTIgKzIwMjAsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4gXHRcdFx0dHJhY2VfZGFtb25fYWdncmVnYXRlZCh0aSwgciwgZGFtb25fbnJfcmVnaW9ucyh0KSk7XG4gXHRcdFx0dHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWQodGksIHIsXG4gXHRcdFx0XHRcdGRhbW9uX25yX3JlZ2lvbnModCksIG5yX3Byb2Jlcyk7XG4tXHRcdFx0ZGFtb25fd2Fybl9maXhfbnJfYWNjZXNzZXNfY29ycnVwdGlvbihyKTtcbiBcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuIFx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcbiBcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG4tXHRcdFx0ZGFtb25fdmVyaWZ5X3Jlc2V0X2FnZ3JlZ2F0ZWQociwgYyk7XG4gXHRcdH1cbiBcdFx0dGkrKztcbiBcdH1cbkBAIC0yMDYxLDEwICsyMDkwLDExIEBAIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4gXHRkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2bmV3X2F0dHJzKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuK3N0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN6O1xuLVx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzID0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwO1xuK1x0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7XG4gXG4gXHRzeiA9IGRhbW9uX3N6X3JlZ2lvbihyKTtcbiBcdHJldHVybiBzLVx1MDAzZXBhdHRlcm4ubWluX3N6X3JlZ2lvbiBcdTAwM2M9IHN6IFx1MDAyNlx1MDAyNlxuQEAgLTIwOTAsNyArMjEyMCw3IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuIHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4ge1xuLVx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzKTtcbitcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYyk7XG4gXG4gXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTIzNzQsNyArMjQwNCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0c3RydWN0IGRhbW9zICpzaXRlcjtcdFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xuIFx0dW5zaWduZWQgaW50IHNpZHggPSAwO1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XHQvKiB0YXJnZXRzIGl0ZXJhdG9yICovXG4tXHR1bnNpZ25lZCBpbnQgdGlkeCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdGlkeCA9IDAsIG5yX2FjY2Vzc2VzID0gMDtcbiBcdGJvb2wgZG9fdHJhY2UgPSBmYWxzZTtcbiBcbiBcdC8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqL1xuQEAgLTIzODksNiArMjQxOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0dGlkeCsrO1xuIFx0XHR9XG4rXHRcdG5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7XG4gXHRcdGRvX3RyYWNlID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0yNDA0LDcgKzI0MzUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbiBcdFx0XHRyZXR1cm47XG4gXHRcdGt0aW1lX2dldF9jb2Fyc2VfdHM2NChcdTAwMjZiZWdpbik7XG4tXHRcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLFxuK1x0XHR0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoY2lkeCwgc2lkeCwgdGlkeCwgciwgbnJfYWNjZXNzZXMsXG4gXHRcdFx0XHRkYW1vbl9ucl9yZWdpb25zKHQpLCBkb190cmFjZSk7XG4gXHRcdHN6X2FwcGxpZWQgPSBjLVx1MDAzZW9wcy5hcHBseV9zY2hlbWUoYywgdCwgciwgcyxcbiBcdFx0XHRcdFx1MDAyNnN6X29wc19maWx0ZXJfcGFzc2VkKTtcbkBAIC0yNjc2LDcgKzI3MDcsNyBAQCBzdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuIFx0XHRcdHBoeXNfYWRkcl90IGFkZHIsIGVuZF9hZGRyO1xuIFxuLVx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXG4rXHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdC8qIENvbnZlcnQgZnJvbSBjb3JlIGFkZHJlc3MgdW5pdHMgdG8gcGh5c2ljYWwgYnl0ZXMgKi9cbkBAIC0yOTY1LDcgKzI5OTYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXG4rXHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0zMDY5LDcgKzMxMDAsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFxuIFx0bC1cdTAwM2Vucl9hY2Nlc3NlcyA9IChsLVx1MDAzZW5yX2FjY2Vzc2VzICogc3pfbCArIHItXHUwMDNlbnJfYWNjZXNzZXMgKiBzel9yKSAvXG4gXHRcdFx0KHN6X2wgKyBzel9yKTtcbi1cdGwtXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBsLVx1MDAzZW5yX2FjY2Vzc2VzICogMTAwMDA7XG4gXHRsLVx1MDAzZWFnZSA9IChsLVx1MDAzZWFnZSAqIHN6X2wgKyByLVx1MDAzZWFnZSAqIHN6X3IpIC8gKHN6X2wgKyBzel9yKTtcbiBcdGwtXHUwMDNlYXIuZW5kID0gci1cdTAwM2Vhci5lbmQ7XG4gXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbkBAIC0zMDgwLDIwICszMTEwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxuLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4te1xuLVx0V0FSTl9PTkNFKHItXHUwMDNlbnJfYWNjZXNzZXMgIT0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwLFxuLVx0XHRcdFwibnJfYWNjZXNzZXMgKCV1KSAhPSBucl9hY2Nlc3Nlc19icCAoJXUpXFxuXCIsXG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlcywgci1cdTAwM2Vucl9hY2Nlc3Nlc19icCk7XG4tfVxuLSNlbHNlXG4tc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi17XG4tfVxuLSNlbmRpZlxuLVxuLVxuIC8qXG4gICogTWVyZ2UgYWRqYWNlbnQgcmVnaW9ucyBoYXZpbmcgc2ltaWxhciBhY2Nlc3MgZnJlcXVlbmNpZXNcbiAgKlxuQEAgLTMxMDcsNyArMzEyMyw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxuIFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcbi1cdFx0ZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yocik7XG4gXHRcdGlmIChhYnMoci1cdTAwM2Vucl9hY2Nlc3NlcyAtIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcykgXHUwMDNlIHRocmVzKVxuIFx0XHRcdHItXHUwMDNlYWdlID0gMDtcbiBcdFx0ZWxzZSBpZiAoKHItXHUwMDNlbnJfYWNjZXNzZXMgPT0gMCkgIT0gKHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9PSAwKSlcbkBAIC0zMTk2LDcgKzMyMTEsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcbiBcdG5ldy1cdTAwM2VhZ2UgPSByLVx1MDAzZWFnZTtcbiBcdG5ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuLVx0bmV3LVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icDtcbiBcdG5ldy1cdTAwM2Vucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXM7XG4gXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbiBcdG1lbWNweShuZXctXHUwMDNlcHJvYmVfaGl0cywgci1cdTAwM2Vwcm9iZV9oaXRzLCBzaXplb2Yoci1cdTAwM2Vwcm9iZV9oaXRzKSk7XG5AQCAtMzU3MSw4ICszNTg1LDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRcdFx0XHQgKiBhZ2dyZWdhdGlvbiwgYW5kIG1ha2UgYWdncmVnYXRpb25cbiBcdFx0XHRcdCAqIGluZm9ybWF0aW9uIHJlc2V0IGZvciBhbGwgcmVnaW9ucy4gIFRoZW4sXG4gXHRcdFx0XHQgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbFxuLVx0XHRcdFx0ICogd2lsbCBtYWtlIHRoZSByZWdpb24gaW5mb3JtYXRpb24gaW52YWxpZCxcbi1cdFx0XHRcdCAqIHBhcnRpY3VsYXJseSBmb3IgLVx1MDAzZW5yX2FjY2Vzc2VzX2JwLlxuK1x0XHRcdFx0ICogd2lsbCBtYWtlIHRoZSByZWdpb24gaW5mb3JtYXRpb24gaW52YWxpZC5cbiBcdFx0XHRcdCAqXG4gXHRcdFx0XHQgKiBSZXNldCAtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgdG8gYXZvaWQgdGhhdC5cbiBcdFx0XHRcdCAqIEl0IHdpbGwgYW55d2F5IGNvcnJlY3RseSB1cGRhdGVkIGFmdGVyIHRoaXNcbkBAIC0zNzExLDcyICszNzI0LDE4IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdHJldHVybiBkYW1vbl9zZXRfcmVnaW9ucyh0LCBcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcbiB9XG4gXG4tLypcbi0gKiBkYW1vbl9tb3Zpbmdfc3VtKCkgLSBDYWxjdWxhdGUgYW4gaW5mZXJyZWQgbW92aW5nIHN1bSB2YWx1ZS5cbi0gKiBAbXZzdW06XHRJbmZlcnJlZCBzdW0gb2YgdGhlIGxhc3QgQGxlbl93aW5kb3cgdmFsdWVzLlxuLSAqIEBub212c3VtOlx0Tm9uLW1vdmluZyBzdW0gb2YgdGhlIGxhc3QgZGlzY3JldGUgQGxlbl93aW5kb3cgd2luZG93IHZhbHVlcy5cbi0gKiBAbGVuX3dpbmRvdzpcdFRoZSBudW1iZXIgb2YgbGFzdCB2YWx1ZXMgdG8gdGFrZSBjYXJlIG9mLlxuLSAqIEBuZXdfdmFsdWU6XHROZXcgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwc2V1ZG8gbW92aW5nIHN1bS5cbi0gKlxuLSAqIE1vdmluZyBzdW0gKG1vdmluZyBhdmVyYWdlICogd2luZG93IHNpemUpIGlzIGdvb2QgZm9yIGhhbmRsaW5nIG5vaXNlLCBidXRcbi0gKiB0aGUgY29zdCBvZiBrZWVwaW5nIHBhc3QgdmFsdWVzIGNhbiBiZSBoaWdoIGZvciBhcmJpdHJhcnkgd2luZG93IHNpemUuICBUaGlzXG4tICogZnVuY3Rpb24gaW1wbGVtZW50cyBhIGxpZ2h0d2VpZ2h0IHBzZXVkbyBtb3Zpbmcgc3VtIGZ1bmN0aW9uIHRoYXQgZG9lc24ndFxuLSAqIGtlZXAgdGhlIHBhc3Qgd2luZG93IHZhbHVlcy5cbi0gKlxuLSAqIEl0IHNpbXBseSBhc3N1bWVzIHRoZXJlIHdhcyBubyBub2lzZSBpbiB0aGUgcGFzdCwgYW5kIGdldCB0aGUgbm8tbm9pc2Vcbi0gKiBhc3N1bWVkIHBhc3QgdmFsdWUgdG8gZHJvcCBmcm9tIEBub212c3VtIGFuZCBAbGVuX3dpbmRvdy4gIEBub212c3VtIGlzIGFcbi0gKiBub24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCB3aW5kb3cuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIHdlXG4tICogaGF2ZSAyNSB2YWx1ZXMsIEBub212c3VtIGlzIHRoZSBzdW0gb2YgdGhlIDExdGggdG8gMjB0aCB2YWx1ZXMgb2YgdGhlIDI1XG4tICogdmFsdWVzLiAgSGVuY2UsIHRoaXMgZnVuY3Rpb24gc2ltcGx5IGRyb3BzIEBub212c3VtIC8gQGxlbl93aW5kb3cgZnJvbVxuLSAqIGdpdmVuIEBtdnN1bSBhbmQgYWRkIEBuZXdfdmFsdWUuXG4tICpcbi0gKiBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIEBub212c3VtIGlzIDUwLCB0aGUgbGFzdCAxMCB2YWx1ZXMgZm9yXG4tICogdGhlIGxhc3Qgd2luZG93IGNvdWxkIGJlIHZhcnksIGUuZy4sIDAsIDEwLCAwLCAxMCwgMCwgMTAsIDAsIDAsIDAsIDIwLiAgRm9yXG4tICogY2FsY3VsYXRpbmcgbmV4dCBtb3Zpbmcgc3VtIHdpdGggYSBuZXcgdmFsdWUsIHdlIHNob3VsZCBkcm9wIDAgZnJvbSA1MCBhbmRcbi0gKiBhZGQgdGhlIG5ldyB2YWx1ZS4gIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyBpdCBnb3QgdmFsdWUgNSBmb3IgZWFjaFxuLSAqIG9mIHRoZSBsYXN0IHRlbiB0aW1lcy4gIEJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uLCB3aGVuIHRoZSBuZXh0IHZhbHVlIGlzXG4tICogbWVhc3VyZWQsIGl0IGRyb3BzIHRoZSBhc3N1bWVkIHBhc3QgdmFsdWUsIDUgZnJvbSB0aGUgY3VycmVudCBzdW0sIGFuZCBhZGRcbi0gKiB0aGUgbmV3IHZhbHVlIHRvIGdldCB0aGUgdXBkYXRlZCBwc2VkdW8tbW92aW5nIGF2ZXJhZ2UuXG4tICpcbi0gKiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBjb3VsZCBoYXZlIGVycm9ycywgYnV0IHRoZSBlcnJvcnMgd2lsbCBiZSBkaXNhcHBlYXJlZFxuLSAqIGZvciBldmVyeSBAbGVuX3dpbmRvdyBhbGlnbmVkIGNhbGxzLiAgRm9yIGV4YW1wbGUsIGlmIEBsZW5fd2luZG93IGlzIDEwLCB0aGVcbi0gKiBwc2V1ZG8gbW92aW5nIHN1bSB3aXRoIDExdGggdmFsdWUgdG8gMTl0aCB2YWx1ZSB3b3VsZCBoYXZlIGFuIGVycm9yLiAgQnV0XG4tICogdGhlIHN1bSB3aXRoIDIwdGggdmFsdWUgd2lsbCBub3QgaGF2ZSB0aGUgZXJyb3IuXG4tICpcbi0gKiBSZXR1cm46IFBzZXVkby1tb3ZpbmcgYXZlcmFnZSBhZnRlciBnZXR0aW5nIHRoZSBAbmV3X3ZhbHVlLlxuLSAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbW92aW5nX3N1bSh1bnNpZ25lZCBpbnQgbXZzdW0sIHVuc2lnbmVkIGludCBub212c3VtLFxuLVx0XHR1bnNpZ25lZCBpbnQgbGVuX3dpbmRvdywgdW5zaWduZWQgaW50IG5ld192YWx1ZSlcbi17XG4tXHRyZXR1cm4gbXZzdW0gLSBub212c3VtIC8gbGVuX3dpbmRvdyArIG5ld192YWx1ZTtcbi19XG4tXG4gLyoqXG4gICogZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSgpIC0gVXBkYXRlIHRoZSBhY2Nlc3MgcmF0ZSBvZiBhIHJlZ2lvbi5cbiAgKiBAcjpcdFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxuICAqIEBhY2Nlc3NlZDpcdFdoZXRoZXIgdGhlIHJlZ2lvbiBoYXMgYWNjZXNzZWQgZHVyaW5nIGxhc3Qgc2FtcGxpbmcgaW50ZXJ2YWwuXG4tICogQGF0dHJzOlx0VGhlIGRhbW9uX2F0dHJzIG9mIHRoZSBEQU1PTiBjb250ZXh0LlxuICAqXG4gICogVXBkYXRlIHRoZSBhY2Nlc3MgcmF0ZSBvZiBhIHJlZ2lvbiB3aXRoIHRoZSByZWdpb24ncyBsYXN0IHNhbXBsaW5nIGludGVydmFsXG4gICogYWNjZXNzIGNoZWNrIHJlc3VsdC5cbiAgKlxuICAqIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGNhbGxlZCBieSBcdTAwMjZkYW1vbl9vcGVyYXRpb25zLVx1MDAzZWNoZWNrX2FjY2Vzc2VzIGNhbGxiYWNrLlxuICAqL1xuLXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxuLVx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuK3ZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsZW5fd2luZG93ID0gMTtcbi1cbi1cdC8qXG4tXHQgKiBzYW1wbGVfaW50ZXJ2YWwgY2FuIGJlIHplcm8sIGJ1dCBjYW5ub3QgYmUgbGFyZ2VyIHRoYW5cbi1cdCAqIGFnZ3JfaW50ZXJ2YWwsIG93aW5nIHRvIHZhbGlkYXRpb24gb2YgZGFtb25fc2V0X2F0dHJzKCkuXG4tXHQgKi9cbi1cdGlmIChhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXG4tXHRcdGxlbl93aW5kb3cgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpO1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGRhbW9uX21vdmluZ19zdW0oci1cdTAwM2Vucl9hY2Nlc3Nlc19icCxcbi1cdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgKiAxMDAwMCwgbGVuX3dpbmRvdyxcbi1cdFx0XHRhY2Nlc3NlZCA/IDEwMDAwIDogMCk7XG4tXG4gXHRpZiAoYWNjZXNzZWQpXG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMrKztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVjMmRhNDVmOTg4Y2Y5Li42MTcyNDY0OTgxNzMwNCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyLCB1bnNpZ25lZCBsb25nICpmb2xpb19zeilcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycywgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuIHtcbiBcdHN0YXRpYyBwaHlzX2FkZHJfdCBsYXN0X2FkZHI7XG4gXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2ZvbGlvX3N6ID0gUEFHRV9TSVpFO1xuQEAgLTkxLDEyICs5MSwxMiBAQCBzdGF0aWMgdm9pZCBfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0LyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi9cbiBcdGlmIChBTElHTl9ET1dOKGxhc3RfYWRkciwgbGFzdF9mb2xpb19zeikgPT1cbiBcdFx0XHRcdEFMSUdOX0RPV04oc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpIHtcbi1cdFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkLCBhdHRycyk7XG4rXHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl9wYV95b3VuZyhzYW1wbGluZ19hZGRyLCBcdTAwMjZsYXN0X2ZvbGlvX3N6KTtcbi1cdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xuK1x0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkKTtcbiBcbiBcdGxhc3RfYWRkciA9IHNhbXBsaW5nX2FkZHI7XG4gfVxuQEAgLTEwOSw4ICsxMDksNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbiBcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbi1cdFx0XHRfX2RhbW9uX3BhX2NoZWNrX2FjY2Vzcyhcbi1cdFx0XHRcdFx0ciwgXHUwMDI2Y3R4LVx1MDAzZWF0dHJzLCBjdHgtXHUwMDNlYWRkcl91bml0KTtcbitcdFx0XHRfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhyLCBjdHgtXHUwMDNlYWRkcl91bml0KTtcbiBcdFx0XHRtYXhfbnJfYWNjZXNzZXMgPSBtYXgoci1cdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggNDFmOTNhMTgyM2JmMTMuLmRiZjJiMDUxNWQ1ODI5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0xNTcsNyArMTU3LDcgQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24ge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxuLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24pXG4rXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpzeXNmc19yZWdpb24gPSBrbWFsbG9jX29iaigqc3lzZnNfcmVnaW9uKTtcbiBcbkBAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdHN5c2ZzX3JlZ2lvbi1cdTAwM2Vrb2JqID0gKHN0cnVjdCBrb2JqZWN0KXt9O1xuIFx0c3lzZnNfcmVnaW9uLVx1MDAzZWFyID0gcmVnaW9uLVx1MDAzZWFyO1xuLVx0c3lzZnNfcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzID0gcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzX2JwIC8gMTAwMDA7XG4rXHRzeXNmc19yZWdpb24tXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyZWdpb24sIGN0eCk7XG4gXHRzeXNmc19yZWdpb24tXHUwMDNlYWdlID0gcmVnaW9uLVx1MDAzZWFnZTtcbiBcdHN5c2ZzX3JlZ2lvbi1cdTAwM2Vwcm9iZXMgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3lzZnNfcmVnaW9uLVx1MDAzZWxpc3QpO1xuQEAgLTMxMjIsNyArMzEyMiw3IEBAIHZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbiBcdGlmICh0b3RhbF9ieXRlc19vbmx5KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRyZWdpb24gPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKHIpO1xuK1x0cmVnaW9uID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhyLCBjdHgpO1xuIFx0aWYgKCFyZWdpb24pXG4gXHRcdHJldHVybjtcbiBcdHJlZ2lvbi1cdTAwM2Vzel9maWx0ZXJfcGFzc2VkID0gc3pfZmlsdGVyX3Bhc3NlZDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5mMWZhZWJiNmZmOTkzZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTE0LDcgKzExNCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYWdncmVnYXRlKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0XHRcdGt1bml0X3NraXAodGVzdCwgXCJyZWdpb24gYWxsb2MgZmFpbFwiKTtcbiBcdFx0XHR9XG4gXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IGFjY2Vzc2VzW2l0XVtpcl07XG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGFjY2Vzc2VzW2l0XVtpcl0gKiAxMDAwMDtcbiBcdFx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuIFx0XHR9XG4gXHRcdGl0Kys7XG5AQCAtMTUxLDcgKzE1MCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInJlZ2lvbiBhbGxvYyBmYWlsXCIpO1xuIFx0fVxuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDQyMDAwMDtcbiBcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSA0MjtcbiBcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IDE1O1xuIFx0ci1cdTAwM2VhZ2UgPSAxMDtcbkBAIC0xNjQsNyArMTYyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctXHUwMDNlYXIuc3RhcnQsIDI1dWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJfbmV3LVx1MDAzZWFyLmVuZCwgMTAwdWwpO1xuIFxuLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHJfbmV3LVx1MDAzZW5yX2FjY2Vzc2VzX2JwKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2Vucl9hY2Nlc3Nlcyk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbkBAIC0xODcsNyArMTg0LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwicmVnaW9uIGFsbG9jIGZhaWxcIik7XG4gXHR9XG4gXHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XG4tXHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMTAwMDAwO1xuIFx0ci1cdTAwM2VhZ2UgPSA5O1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbiBcdHIyID0gZGFtb25fbmV3X3JlZ2lvbigxMDAsIDMwMCk7XG5AQCAtMTk2LDcgKzE5Miw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInNlY29uZCByZWdpb24gYWxsb2MgZmFpbFwiKTtcbiBcdH1cbiBcdHIyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMjA7XG4tXHRyMi1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDIwMDAwMDtcbiBcdHIyLVx1MDAzZWFnZSA9IDIxO1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyMiwgdCk7XG4gXG5AQCAtMjA0LDcgKzE5OSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCAwdWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCAzMDB1bCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTZ1KTtcbi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzX2JwLCAxNjAwMDB1KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMTd1KTtcbiBcbiBcdGkgPSAwO1xuQEAgLTI1Miw3ICsyNDYsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdGt1bml0X3NraXAodGVzdCwgXCJyZWdpb24gYWxsb2MgZmFpbFwiKTtcbiBcdFx0fVxuIFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gbnJzW2ldO1xuLVx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gbnJzW2ldICogMTAwMDA7XG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG5AQCAtNTUyLDcgKzU0NSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInJlZ2lvbiBhbGxvYyBmYWlsXCIpO1xuIFxuIFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDE1O1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDE1MDAwMDtcbiBcdHItXHUwMDNlYWdlID0gMjA7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbkBAIC02MDQsMTggKzU5NiwyNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tb3Zpbmdfc3VtKHN0cnVjdCBrdW5pdCAqdGVzdClcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X212c3VtKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXZzdW0gPSA1MDAwMCwgbm9tdnN1bSA9IDUwMDAwLCBsZW5fd2luZG93ID0gMTA7XG4tXHR1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlc1tdID0gezEwMDAwLCAwLCAxMDAwMCwgMCwgMCwgMCwgMTAwMDAsIDAsIDAsIDB9O1xuLVx0dW5zaWduZWQgaW50IGV4cGVjdHNbXSA9IHs1NTAwMCwgNTAwMDAsIDU1MDAwLCA1MDAwMCwgNDUwMDAsIDQwMDAwLFxuLVx0XHQ0NTAwMCwgNDAwMDAsIDM1MDAwLCAzMDAwMH07XG4rXHR1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHtcbitcdFx0LyogY3VycmVudCB2YWx1ZSwgbGFzdCB2YWx1ZSwgcmVtYWluaW5nIHdpbmRvdyAoYnApICovXG4rXHRcdDAsIDQ5LCAxMDAwMCwgNDksXHQvKiAwICsgNDkgKiAxICovXG4rXHRcdDMsIDEwLCA3MDAwLCAxMCxcdC8qIDMgKyAxMCAqIDAuNyAqL1xuK1x0XHQzLCAxMCwgNTAwMCwgOCxcdFx0LyogMyArIDEwICogMC41ICovXG4rXHRcdDMyLCAxMDAsIDEwMDAsIDQyLFx0LyogMzIgKyAxMDAgKiAwLjEgKi9cbitcdFx0NDIsIDQ5LCAwLCA0MixcdFx0LyogNDIgKyA0OSAqIDAgKi9cbitcdH07XG4rXG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobmV3X3ZhbHVlcyk7IGkrKykge1xuLVx0XHRtdnN1bSA9IGRhbW9uX21vdmluZ19zdW0obXZzdW0sIG5vbXZzdW0sIGxlbl93aW5kb3csXG4tXHRcdFx0XHRuZXdfdmFsdWVzW2ldKTtcbi1cdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG12c3VtLCBleHBlY3RzW2ldKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaW5wdXRfZXhwZWN0cyk7IGkgKz0gNCkge1xuK1x0XHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfbnIgPSBpbnB1dF9leHBlY3RzW2ldO1xuK1x0XHR1bnNpZ25lZCBsb25nIGxhc3RfbnIgPSBpbnB1dF9leHBlY3RzW2kgKyAxXTtcbitcdFx0dW5zaWduZWQgbG9uZyBsZWZ0X3dpbmRvd19icCA9IGlucHV0X2V4cGVjdHNbaSArIDJdO1xuK1x0XHR1bnNpZ25lZCBsb25nIGV4cGVjdCA9IGlucHV0X2V4cGVjdHNbaSArIDNdO1xuK1xuK1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbXZzdW0oY3VycmVudF9uciwgbGFzdF9ucixcbitcdFx0XHRcdFx0bGVmdF93aW5kb3dfYnApLCBleHBlY3QpO1xuIFx0fVxuIH1cbiBcbkBAIC0xNDY5LDcgKzE0NzAsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXG4tXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbW92aW5nX3N1bSksXG4rXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMpLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBlNzNlYzFjZTAxNmU1Yi4uMjA1OGRiOWMwMWQ1MmYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNDkzLDI3ICs0OTMsMjYgQEAgc3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiAgKiByXHR0aGUgcmVnaW9uIHRvIGJlIGNoZWNrZWRcbiAgKi9cbiBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgc2FtZV90YXJnZXQsXG4tXHRcdFx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuK1x0XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBzYW1lX3RhcmdldClcbiB7XG4gXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2FkZHI7XG4gXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2ZvbGlvX3N6ID0gUEFHRV9TSVpFO1xuIFx0c3RhdGljIGJvb2wgbGFzdF9hY2Nlc3NlZDtcbiBcbiBcdGlmICghbW0pIHtcbi1cdFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBmYWxzZSwgYXR0cnMpO1xuK1x0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0LyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi9cbiBcdGlmIChzYW1lX3RhcmdldCBcdTAwMjZcdTAwMjYgKEFMSUdOX0RPV04obGFzdF9hZGRyLCBsYXN0X2ZvbGlvX3N6KSA9PVxuIFx0XHRcdFx0QUxJR05fRE9XTihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSkge1xuLVx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbitcdFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0bGFzdF9hY2Nlc3NlZCA9IGRhbW9uX3ZhX3lvdW5nKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIsIFx1MDAyNmxhc3RfZm9saW9fc3opO1xuLVx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkLCBhdHRycyk7XG4rXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQpO1xuIFxuIFx0bGFzdF9hZGRyID0gci1cdTAwM2VzYW1wbGluZ19hZGRyO1xuIH1cbkBAIC01MzAsOCArNTI5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuIFx0XHRzYW1lX3RhcmdldCA9IGZhbHNlO1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKG1tLCByLCBzYW1lX3RhcmdldCxcbi1cdFx0XHRcdFx0XHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbitcdFx0XHRfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhtbSwgciwgc2FtZV90YXJnZXQpO1xuIFx0XHRcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVx1MDAzZW5yX2FjY2Vzc2VzLCBtYXhfbnJfYWNjZXNzZXMpO1xuIFx0XHRcdHNhbWVfdGFyZ2V0ID0gdHJ1ZTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG5pbmRleCA5NzI5NDhlNjIxNWYxZC4uNDk0MmFmZGY0NmNkNDQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG5AQCAtNTksNyArNTksNiBAQCBkZWYgcmVnaW9uX3RvX2RpY3QocmVnaW9uKTpcbiAgICAgICAgIFsnYXInLCBhZGRyX3JhbmdlX3RvX2RpY3RdLFxuICAgICAgICAgWydzYW1wbGluZ19hZGRyJywgaW50XSxcbiAgICAgICAgIFsnbnJfYWNjZXNzZXMnLCBpbnRdLFxuLSAgICAgICAgWyducl9hY2Nlc3Nlc19icCcsIGludF0sXG4gICAgICAgICBbJ2FnZScsIGludF0sXG4gICAgICAgICBdKVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTU6MjYuNTI0NDkxMTE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2NTY5NDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQYXRjaCBBbmFseXNpcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIERBTU9OIHN1YnN5c3RlbSBpbiB0aGUgTGludXgga2VybmVsLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiBgbnJfYWNjZXNzZXNfYnBgIGZyb20gYHN0cnVjdCBkYW1vbl9yZWdpb25gIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKClgIGZ1bmN0aW9uLCB3aGljaCBjYWxjdWxhdGVzIGEgcHNldWRvIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS4gRXNzZW50aWFsbHksIHRoZXkncmUgbW92aW5nIGF3YXkgZnJvbSBhIHN0cmFpZ2h0Zm9yd2FyZCBjb3VudCBhbmQgdHJ5aW5nIGEgbW9yZSBudWFuY2VkIGFjY2VzcyByYXRlIHJlcHJlc2VudGF0aW9uLiBUaGlzIG5ldyBmdW5jdGlvbiwgYWxvbmcgd2l0aCB0aGUgbW9kaWZpY2F0aW9uIG9mIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCBhbmQgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YCB0byB1dGlsaXplIHRoaXMgbG9naWMsIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuXG5cblNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgYWNyb3NzIHNldmVyYWwgZmlsZXMgKGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGBtbS9kYW1vbi92YWRkci5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2ApLCBpdCdzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGRpcmVjdGx5IGFsdGVycyBEQU1PTidzIGV4ZWN1dGlvbiBmbG93LiBBbmQgY29uc2lkZXJpbmcgdGhhdCBEQU1PTiBjYW4gbW9uaXRvciB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMsIHRoaXMgbWFrZXMgaXQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCBpdCdzIGRlZmluaXRlbHkgV29ydGhGdXp6aW5nLlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbi4gSSB0aGluayBJJ2xsIHN0YXJ0IHdpdGggdGhlIG5ldyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseTpcblxuKiAgIGBkYW1vbl9tdnN1bWBcbiogICBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gXG5cbkFuZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCB3aGljaCBhbHNvIHdhcnJhbnQgY2xvc2UgYXR0ZW50aW9uOlxuXG4qICAgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgXG4qICAgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YFxuKiAgIGBkYW1vc19hcHBseV9zY2hlbWVgXG4qICAgYGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNgXG4qICAgYGRhbW9zX2FkanVzdF9xdW90YWBcbiogICBgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNgXG4qICAgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgXG4qICAgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGBcbiogICBga2RhbW9uZF9mbmBcbiogICBgX19kYW1vbl9wYV9jaGVja19hY2Nlc3NgXG4qICAgYF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzYFxuXG5OZXh0IHN0ZXAgaXMgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucywgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBEQU1PTiB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgZHVyaW5nIGZ1enppbmcuIEknbGwgc2VhcmNoIGZvciBgREFNT05gIHdpdGhpbiBgbW0vZGFtb24vS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTUyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTU6MzQuNzkwMTg5MDM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjMwMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTU6MzQuODUxODI0MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU2OTAzODYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhlIGRpZmYuIEl0J3MgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMsIEkgbmVlZCB0byBlbmFibGUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIE1ha2VzIHNlbnNlLlxuXG5Ob3csIHRoZSBmb2N1cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBtb3N0IGNyaXRpY2FsIGZvciBmdXp6aW5nLiBJJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBsaWtlIGdvb2QgdGFyZ2V0czogYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCwgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgLCBgX19kYW1vc192YWxpZF90YXJnZXRgLCBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNgLCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYGRhbW9uX21lcmdlX3R3b19yZWdpb25zYCwgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgLCBgZGFtb25fc3BsaXRfcmVnaW9uX2F0YCwgYF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzYCwgYW5kIGBfX2RhbW9uX3ZhX2NoZWNrX2FjY2Vzc2AuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYGRhbW9uX212c3VtYCBiZWNhdXNlIGl0IGxvb2tzIHJlbGF0ZWQgdG8gdGhlIGFjY2VzcyBzdW1tYXJpZXMsIGFuZCB3aGV0aGVyIGl0J3Mgc3RhdGljIG9yIGV4cG9ydGVkIGltcGFjdHMgbXkgZnV6emluZyBhcHByb2FjaC4gQWgsIGl0J3Mgc3RhdGljIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCBTeXprYWxsZXIgY2FuIHNvbWV0aW1lcyByZWFjaCBzdGF0aWMgZnVuY3Rpb25zIGlmIHJlYWNoYWJsZSB0aHJvdWdoIGFub3RoZXIgbWV0aG9kLCBidXQgZm9yIG5vdyBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWAgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBuZXcgZnVuY3Rpb24sIEknbGwgcHJpb3JpdGl6ZSBpdCBmb3IgZnV6emluZy5cblxuTGV0J3MgcmVmaW5lIHRoZSBsaXN0LiBJJ20gZ29pbmcgdG8gc2V0IHRoZXNlIGFzIHRoZSBGb2N1c1N5bWJvbHMsIHNpbmNlIHRoZXNlIGFyZSBsaWtlbHkgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBmb3IgREFNT046XG5cbiogICBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gXG4qICAgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgXG4qICAgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YFxuKiAgIGBkYW1vc19hcHBseV9zY2hlbWVgXG4qICAgYGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNgXG4qICAgYGRhbW9zX2FkanVzdF9xdW90YWBcbiogICBgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNgXG4qICAgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgXG4qICAgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGBcbiogICBgX19kYW1vbl9wYV9jaGVja19hY2Nlc3NgXG4qICAgYF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzYFxuXG5BbHJpZ2h0LCB0aGF0IGNvdmVycyB0aGUgZXNzZW50aWFscy4gSSdsbCBwcm9jZWVkIHdpdGggdGhlIFwic2V0LXJlc3VsdHNcIiBjYWxsLCBnaXZlbiB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg0OCwiT3V0cHV0VG9rZW5zIjoyNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTY6MjIuNDIwODY2MDI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1NTk2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1cIixcbiAgICBcImRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVcIixcbiAgICBcIl9fZGFtb3NfdmFsaWRfdGFyZ2V0XCIsXG4gICAgXCJkYW1vc19hcHBseV9zY2hlbWVcIixcbiAgICBcImRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwiZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNcIixcbiAgICBcImRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZcIixcbiAgICBcImRhbW9uX3NwbGl0X3JlZ2lvbl9hdFwiLFxuICAgIFwiX19kYW1vbl9wYV9jaGVja19hY2Nlc3NcIixcbiAgICBcIl9fZGFtb25fdmFfY2hlY2tfYWNjZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBgbnJfYWNjZXNzZXNfYnBgIGZpZWxkIHdpdGggYSBwc2V1ZG8gbW92aW5nIHN1bSBjYWxjdWxhdGlvbiAoYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCkuIFRoaXMgYWZmZWN0cyBob3cgYWNjZXNzIGZyZXF1ZW5jaWVzIGFyZSBjYWxjdWxhdGVkLCBtZXJnZWQsIHNwbGl0LCBhbmQgZXZhbHVhdGVkIGZvciBzY2hlbWVzIGFjcm9zcyBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1cIixcbiAgICBcImRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVcIixcbiAgICBcIl9fZGFtb3NfdmFsaWRfdGFyZ2V0XCIsXG4gICAgXCJkYW1vc19hcHBseV9zY2hlbWVcIixcbiAgICBcImRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwiZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNcIixcbiAgICBcImRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZcIixcbiAgICBcImRhbW9uX3NwbGl0X3JlZ2lvbl9hdFwiLFxuICAgIFwiX19kYW1vbl9wYV9jaGVja19hY2Nlc3NcIixcbiAgICBcIl9fZGFtb25fdmFfY2hlY2tfYWNjZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBgbnJfYWNjZXNzZXNfYnBgIGZpZWxkIHdpdGggYSBwc2V1ZG8gbW92aW5nIHN1bSBjYWxjdWxhdGlvbiAoYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCkuIFRoaXMgYWZmZWN0cyBob3cgYWNjZXNzIGZyZXF1ZW5jaWVzIGFyZSBjYWxjdWxhdGVkLCBtZXJnZWQsIHNwbGl0LCBhbmQgZXZhbHVhdGVkIGZvciBzY2hlbWVzIGFjcm9zcyBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownjcjz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 05:50:09 +0000 UTC FinishedAt: 2026-06-30 05:56:24 +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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "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": "88cefc306c43b58d9bb65c9e96e284306710d961", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_VADDR", "DAMON_PADDR", "DAMON_SYSFS" ], "series_id": "eb48f907-ee29-4c62-8d0e-494af5f4b15b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_nr_accesses_mvsum", "damon_update_region_access_rate", "__damos_valid_target", "damos_apply_scheme", "damos_calc_eligible_bytes", "damos_adjust_quota", "damon_merge_two_regions", "damon_merge_regions_of", "damon_split_region_at", "__damon_pa_check_access", "__damon_va_check_access" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSYjMzQ7LAogICAgJiMzNDtfX2RhbW9zX3ZhbGlkX3RhcmdldCYjMzQ7LAogICAgJiMzNDtkYW1vc19hcHBseV9zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfcmVnaW9uc19vZiYjMzQ7LAogICAgJiMzNDtkYW1vbl9zcGxpdF9yZWdpb25fYXQmIzM0OywKICAgICYjMzQ7X19kYW1vbl9wYV9jaGVja19hY2Nlc3MmIzM0OywKICAgICYjMzQ7X19kYW1vbl92YV9jaGVja19hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBgbnJfYWNjZXNzZXNfYnBgIGZpZWxkIHdpdGggYSBwc2V1ZG8gbW92aW5nIHN1bSBjYWxjdWxhdGlvbiAoYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCkuIFRoaXMgYWZmZWN0cyBob3cgYWNjZXNzIGZyZXF1ZW5jaWVzIGFyZSBjYWxjdWxhdGVkLCBtZXJnZWQsIHNwbGl0LCBhbmQgZXZhbHVhdGVkIGZvciBzY2hlbWVzIGFjcm9zcyBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmRmYzA2NmRmMGVhNjZmMjEwYTQwYWE4NDc5YjhhMTQ0ZGFhNDk2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA1OjU1OjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuaW5kZXggY2ZiYmY4YmEyOGY2MzIuLjgwNWUwODlmZjRmMmY2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbkBAIC00NSw4ICYjNDM7NDUsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XG4gICogQGFyOlx0XHRcdFRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSByZWdpb24uXG4gICogQHNhbXBsaW5nX2FkZHI6XHRBZGRyZXNzIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBuZXh0IGFjY2VzcyBjaGVjay5cbiAgKiBAbnJfYWNjZXNzZXM6XHRBY2Nlc3MgZnJlcXVlbmN5IG9mIHRoaXMgcmVnaW9uLlxuLSAqIEBucl9hY2Nlc3Nlc19icDpcdEBucl9hY2Nlc3NlcyBpbiBiYXNpcyBwb2ludCAoMC4wMSUpIHRoYXQgdXBkYXRlZCBmb3Jcbi0gKlx0XHRcdGVhY2ggc2FtcGxpbmcgaW50ZXJ2YWwuXG4gICogQHByb2JlX2hpdHM6XHRcdE51bWJlciBvZiBwcm9iZS1wb3NpdGl2ZSByZWdpb24gc2FtcGxlcy5cbiAgKiBAbGlzdDpcdFx0TGlzdCBoZWFkIGZvciBzaWJsaW5ncy5cbiAgKiBAYWdlOlx0XHRBZ2Ugb2YgdGhpcyByZWdpb24uXG5AQCAtNTksMTMgJiM0Mzs1Nyw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBub3QgYmUgZG9uZSB3aXRoIGRpcmVjdCBhY2Nlc3MgYnV0IHdpdGggdGhlIGhlbHBlciBmdW5jdGlvbixcbiAgKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkuXG4gICpcbi0gKiBAbnJfYWNjZXNzZXNfYnAgaXMgYW5vdGhlciByZXByZXNlbnRhdGlvbiBvZiBAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnRcbi0gKiAoMSBpbiAxMCwwMDApIHRoYXQgdXBkYXRlZCBmb3IgZXZlcnkgXHUwMDI2ZGFtb25fYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsIGluIGFcbi0gKiBtYW5uZXIgc2ltaWxhciB0byBtb3Zpbmcgc3VtLiAgQnkgdGhlIGFsZ29yaXRobSwgdGhpcyB2YWx1ZSBiZWNvbWVzXG4tICogQG5yX2FjY2Vzc2VzICogMTAwMDAgZm9yIGV2ZXJ5IFx1MDAyNnN0cnVjdCBkYW1vbl9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsLiAgVGhpcyBjYW5cbi0gKiBiZSB1c2VkIHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGlzIHRvbyBodWdlIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdhaXRcbi0gKiBmb3IgaXQgYmVmb3JlIGdldHRpbmcgdGhlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMuXG4tICpcbiAgKiBAYWdlIGlzIGluaXRpYWxseSB6ZXJvLCBpbmNyZWFzZWQgZm9yIGVhY2ggYWdncmVnYXRpb24gaW50ZXJ2YWwsIGFuZCByZXNldFxuICAqIHRvIHplcm8gYWdhaW4gaWYgdGhlIGFjY2VzcyBmcmVxdWVuY3kgaXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLiAgSWYgdHdvXG4gICogcmVnaW9ucyBhcmUgbWVyZ2VkIGludG8gYSBuZXcgcmVnaW9uLCBib3RoIEBucl9hY2Nlc3NlcyBhbmQgQGFnZSBvZiB0aGUgbmV3XG5AQCAtNzUsNyAmIzQzOzY2LDYgQEAgc3RydWN0IGRhbW9uX3JlZ2lvbiB7XG4gXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhcjtcbiBcdHVuc2lnbmVkIGxvbmcgc2FtcGxpbmdfYWRkcjtcbiBcdHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlcztcbi1cdHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlc19icDtcbiBcdHVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiBcbkBAIC0xMDExLDExICYjNDM7MTAwMSwxMiBAQCBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX25ld19wcm9iZSh2b2lkKTtcbiB2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpO1xuIFxuIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpO1xuJiM0Mzt1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiYjNDM7XHRcdHN0cnVjdCBkYW1vbl9jdHggKmN0eCk7XG4gXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG4gXHRcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeik7XG4tdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQsXG4tXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpO1xuJiM0Mzt2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCk7XG4gXG4gc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXG4gXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oXG5pbmRleCA3ODM4ODUzOGFjZjQ0Ni4uODg1MTcyN2FlMTYyN2EgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oXG5AQCAtNzgsOSAmIzQzOzc4LDExIEBAIFRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vc19iZWZvcmVfYXBwbHksXG4gXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY29udGV4dF9pZHgsIHVuc2lnbmVkIGludCBzY2hlbWVfaWR4LFxuIFx0XHR1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi1cdFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMsIGJvb2wgZG9fdHJhY2UpLFxuJiM0MztcdFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLCB1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyxcbiYjNDM7XHRcdGJvb2wgZG9fdHJhY2UpLFxuIFxuLVx0VFBfQVJHUyhjb250ZXh0X2lkeCwgc2NoZW1lX2lkeCwgdGFyZ2V0X2lkeCwgciwgbnJfcmVnaW9ucywgZG9fdHJhY2UpLFxuJiM0MztcdFRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX2FjY2Vzc2VzLFxuJiM0MztcdFx0bnJfcmVnaW9ucywgZG9fdHJhY2UpLFxuIFxuIFx0VFBfQ09ORElUSU9OKGRvX3RyYWNlKSxcbiBcbkBAIC0xMDEsNyAmIzQzOzEwMyw3IEBAIFRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vc19iZWZvcmVfYXBwbHksXG4gXHRcdF9fZW50cnktXHUwMDNldGFyZ2V0X2lkeCA9IHRhcmdldF9pZHg7XG4gXHRcdF9fZW50cnktXHUwMDNlc3RhcnQgPSByLVx1MDAzZWFyLnN0YXJ0O1xuIFx0XHRfX2VudHJ5LVx1MDAzZWVuZCA9IHItXHUwMDNlYXIuZW5kO1xuLVx0XHRfX2VudHJ5LVx1MDAzZW5yX2FjY2Vzc2VzID0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwO1xuJiM0MztcdFx0X19lbnRyeS1cdTAwM2Vucl9hY2Nlc3NlcyA9IG5yX2FjY2Vzc2VzO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWFnZSA9IHItXHUwMDNlYWdlO1xuIFx0XHRfX2VudHJ5LVx1MDAzZW5yX3JlZ2lvbnMgPSBucl9yZWdpb25zO1xuIFx0KSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDAyNzI1MGU0M2M2NmYyLi5mNTJhODlmOWZkOTc3ZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjA4LDYgJiM0MzsyMDgsNzEgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbnRoX3Byb2JlKGludCBuLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIGRhbW9uX212c3VtKCkgLSBSZXR1cm5zIHBzZXVkbyBtb3Zpbmcgc3VtIHZhbHVlIGZvciBhIHRpbWUgd2luZG93LlxuJiM0MzsgKiBAY3VycmVudF9ucjpcdFx0VGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uIHdpbmRvdy5cbiYjNDM7ICogQGxhc3RfbnI6XHRcdFRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiB3aW5kb3cuXG4mIzQzOyAqIEBsZWZ0X3dpbmRvd19icDpcdExlZnQgdGltZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXG4mIzQzOyAqXG4mIzQzOyAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhIHBzZXVkbyBtb3Zpbmcgc3VtIHZhbHVlIG9mIGEgY291bnRlciB0aGF0IGlzXG4mIzQzOyAqIGFnZ3JlZ2F0ZWQgZm9yIGVhY2ggdGltZSB3aW5kb3cuICBAY3VycmVudF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXJcbiYjNDM7ICogdGhhdCBhZ2dyZWdhdGVkIHNvIGZhciAobWF5YmUgbm90IHlldCBjb21wbGV0ZSksIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGVcbiYjNDM7ICogY3VycmVudCBhZ2dyZWdhdGlvbiB0aW1lIHdpbmRvdy4gIEBsYXN0X25yIGlzIHRoZSB2YWx1ZSBvZiB0aGUgY291bnRlciB0aGF0XG4mIzQzOyAqIGhhcyBjb21wbGV0ZWx5IGFnZ3JlZ2F0ZWQgaW4gdGhlIGxhc3QgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuXG4mIzQzOyAqIEBsZWZ0X3dpbmRvd19icCByZXByZXNlbnRzIGhvdyBtdWNoIHRpbWUgaXMgbGVmdCBmb3IgdGhlIGN1cnJlbnQgYWdncmVnYXRpb25cbiYjNDM7ICogdGltZSB3aW5kb3cgaW4gYnAgKDEvMTAsMDAwKS4gIEZvciBleGFtcGxlLCB0aGUgYWdncmVnYXRpb24gdGltZSB3aW5kb3cgaXNcbiYjNDM7ICogZm9yIGV2ZXJ5IDEwIHNlY29uZHMgYW5kIDcgc2Vjb25kcyBoYXMgcGFzc2VkIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4mIzQzOyAqIGN1cnJlbnQgd2luZG93LCB0aGlzIHBhcmFtZXRlciB3aWxsIGJlIDMwMDAgKCgxMCAtIDcpIC8gMTAgKiAxMDAwMCkuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBsb2dpYyBhc3N1bWVzIHRoZSBhZ2dyZWdhdGlvbiBpbiB0aGUgbGFzdCBwaGFzZSB3YXMgbWFkZSBpbiBhIHNpbmdsZVxuJiM0MzsgKiBzcGVlZC4gIEJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uLCB0aGUgdmFsdWUgZnJvbSB0aGUgbGFzdCB3aW5kb3cgdGhhdCBuZWVkc1xuJiM0MzsgKiB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB2YWx1ZSBpcyBjYWxjdWxhdGVkIGFzIGEgcG9ydGlvbiBvZiB0aGUgbGFzdFxuJiM0MzsgKiB2YWx1ZSBiYXNlZCBvbiB0aGUgcmVtYWluaW5nIHRpbWUgd2luZG93LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fbXZzdW0odW5zaWduZWQgbG9uZyBjdXJyZW50X25yLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGN1cnJlbnRfbnIgJiM0MzsgbXVsdF9mcmFjKGxhc3RfbnIsIGxlZnRfd2luZG93X2JwLCAxMDAwMCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSgpIC0gUmV0dXJucyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuXG4mIzQzOyAqIEByOlx0XHRSZWdpb24gdG8gZ2V0IHRoZSBhY2Nlc3MgZnJlcXVlbmN5IG9mLlxuJiM0MzsgKiBAY3R4Olx0REFNT04gY29udGV4dCBvZiBAci5cbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZvciBob3cgbWFueSBzYW1wbGluZyBpdGVyYXRpb25zIGluIHRoZSBsYXN0XG4mIzQzOyAqIGFnZ3JlZ2F0aW9uIGludGVydmFsIChcdTAwMjZkYW1vbl9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsKSB0aGUgcmVnaW9uIHdhcyBmb3VuZCB0b1xuJiM0MzsgKiBiZSBhY2Nlc3NlZC4gIEhlbmNlIHRoZSB2YWx1ZSBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlbGF0aXZlIGFjY2Vzc1xuJiM0MzsgKiBmcmVxdWVuY3kgc2NvcmUgb2YgdGhlIHJlZ2lvbiAoQHIpLiAgVGhlIHZhbHVlIGlzIGNhbGN1bGF0ZWQgYXMgYSBwc2V1ZG9cbiYjNDM7ICogbW92aW5nIHN1bSwgYW5kIGhlbmNlIGl0IGlzIG5vdCBhbiBleGFjdCB2YWx1ZSBidXQganVzdCBhIGJlc3QtZWZmb3J0XG4mIzQzOyAqIHJlYXNvbmFibGUgZXN0aW1hdGlvbi5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgcHNldWRvIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cbiYjNDM7ICovXG4mIzQzO3Vuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzYW1wbGVfaW50ZXJ2YWwsIGFnZ3JfaW50ZXJ2YWw7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XG4mIzQzO1xuJiM0MztcdHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwgPyA6IDE7XG4mIzQzO1x0YWdncl9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID8gOiAxO1xuJiM0MztcdHdpbmRvd19sZW4gPSBhZ2dyX2ludGVydmFsIC8gc2FtcGxlX2ludGVydmFsO1xuJiM0MztcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyxcbiYjNDM7XHRcdFx0XHRjdHgtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMpKVxuJiM0MztcdFx0bGVmdF93aW5kb3cgPSAwO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGxlZnRfd2luZG93ID0gY3R4LVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIC1cbiYjNDM7XHRcdFx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzO1xuJiM0MztcdGxlZnRfd2luZG93X2JwID0gbXVsdF9mcmFjKGxlZnRfd2luZG93LCAxMDAwMCwgd2luZG93X2xlbik7XG4mIzQzO1xuJiM0MztcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcbiYjNDM7XHRcdHJldHVybiByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkYW1vbl9tdnN1bShyLVx1MDAzZW5yX2FjY2Vzc2VzLCByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXG4mIzQzO1x0XHRcdGxlZnRfd2luZG93X2JwKTtcbiYjNDM7fVxuJiM0MztcbiAjaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxuIHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIHtcbkBAIC0yMzcsNyAmIzQzOzMwMiw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4gXHRyZWdpb24tXHUwMDNlYXIuc3RhcnQgPSBzdGFydDtcbiBcdHJlZ2lvbi1cdTAwM2Vhci5lbmQgPSBlbmQ7XG4gXHRyZWdpb24tXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xuLVx0cmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KVxuIFx0XHRyZWdpb24tXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZyZWdpb24tXHUwMDNlbGlzdCk7XG5AQCAtODA5LDIyICYjNDM7ODczLDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXG4gXHRcdGJvb2wgYWdncmVnYXRpbmcpXG4ge1xuLVx0aWYgKCFhZ2dyZWdhdGluZykge1xuJiM0MztcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXG4mIzQzO1x0XHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuJiM0MztcdGlmICghYWdncmVnYXRpbmcpXG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19mb3JfbmV3X2F0dHJzKFxuIFx0XHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xuLVx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwO1xuLVx0fSBlbHNlIHtcbiYjNDM7XHRlbHNlXG4gXHRcdC8qXG4gXHRcdCAqIGlmIHRoaXMgaXMgY2FsbGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIGFnZ3JlZ2F0aW9uLCByZXNldFxuIFx0XHQgKiB0aGUgYWdncmVnYXRpb25zIHdlIG1hZGUgc28gZmFyIGZvciB0aGlzIGFnZ3JlZ2F0aW9uXG4gXHRcdCAqIGludGVydmFsLiAgSW4gb3RoZXIgd29yZHMsIG1ha2UgdGhlIHN0YXR1cyBsaWtlXG4gXHRcdCAqIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpIGlzIGNhbGxlZC5cbiBcdFx0ICovXG4tXHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXG4tXHRcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbi1cdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwO1xuIFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcbi1cdH1cbiBcdHItXHUwMDNlYWdlID0gZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnMoci1cdTAwM2VhZ2UsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiB9XG4gXG5AQCAtMTkzNSwzNiAmIzQzOzE5OTYsNiBAQCBpbnQgZGFtb3Nfd2FsayhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vc193YWxrX2NvbnRyb2wgKmNvbnRyb2wpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLypcbi0gKiBXYXJuIGFuZCBmaXggY29ycnVwdGVkIC1cdTAwM2Vucl9hY2Nlc3Nlc1tfYnBdIGZvciBpbnZlc3RpZ2F0aW9ucyBhbmQgcHJldmVudGluZ1xuLSAqIHRoZSBwcm9ibGVtIGJlaW5nIHByb3BhZ2F0ZWQuXG4tICovXG4tc3RhdGljIHZvaWQgZGFtb25fd2Fybl9maXhfbnJfYWNjZXNzZXNfY29ycnVwdGlvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuLXtcbi1cdGlmIChyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID09IHItXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMClcbi1cdFx0cmV0dXJuO1xuLVx0V0FSTl9PTkNFKHRydWUsIFwmIzM0O2ludmFsaWQgbnJfYWNjZXNzZXNfYnAgYXQgcmVzZXQ6ICV1ICV1XFxuXCYjMzQ7LFxuLVx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHItXHUwMDNlbnJfYWNjZXNzZXMpO1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMDtcbi19XG4tXG4tI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLXtcbi1cdFdBUk5fT05DRShyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwICE9IHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwLFxuLVx0XHRcdFwmIzM0O25yX2FjY2Vzc2VzX2JwICV1IGxhc3RfbnJfYWNjZXNzZXMgJXUgc2lzICVsdSAlbHVcXG5cJiMzNDssXG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLFxuLVx0XHRcdGMtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIGMtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMpO1xuLX1cbi0jZWxzZVxuLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4tXHRcdHN0cnVjdCBkYW1vbl9jdHggKmMpXG4te1xuLX1cbi0jZW5kaWZcbi1cbi1cbiAvKlxuICAqIFJlc2V0IHRoZSBhZ2dyZWdhdGVkIG1vbml0b3JpbmcgcmVzdWx0cyAoJiMzOTtucl9hY2Nlc3NlcyYjMzk7IG9mIGVhY2ggcmVnaW9uKS5cbiAgKi9cbkBAIC0xOTg5LDEyICYjNDM7MjAyMCwxMCBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYylcbiBcdFx0XHR0cmFjZV9kYW1vbl9hZ2dyZWdhdGVkKHRpLCByLCBkYW1vbl9ucl9yZWdpb25zKHQpKTtcbiBcdFx0XHR0cmFjZV9kYW1vbl9yZWdpb25fYWdncmVnYXRlZCh0aSwgcixcbiBcdFx0XHRcdFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgbnJfcHJvYmVzKTtcbi1cdFx0XHRkYW1vbl93YXJuX2ZpeF9ucl9hY2Nlc3Nlc19jb3JydXB0aW9uKHIpO1xuIFx0XHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXM7XG4gXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XG4gXHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspXG4gXHRcdFx0XHRyLVx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xuLVx0XHRcdGRhbW9uX3ZlcmlmeV9yZXNldF9hZ2dyZWdhdGVkKHIsIGMpO1xuIFx0XHR9XG4gXHRcdHRpJiM0MzsmIzQzOztcbiBcdH1cbkBAIC0yMDYxLDEwICYjNDM7MjA5MCwxMSBAQCBzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuIFx0ZGFtb25fc2V0X2F0dHJzKGMsIFx1MDAyNm5ld19hdHRycyk7XG4gfVxuIFxuLXN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcbiYjNDM7c3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzLFxuJiM0MztcdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN6O1xuLVx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzID0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHIsIGMpO1xuIFxuIFx0c3ogPSBkYW1vbl9zel9yZWdpb24ocik7XG4gXHRyZXR1cm4gcy1cdTAwM2VwYXR0ZXJuLm1pbl9zel9yZWdpb24gXHUwMDNjPSBzeiBcdTAwMjZcdTAwMjZcbkBAIC0yMDkwLDcgJiM0MzsyMTIwLDcgQEAgc3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4gc3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHRcdHN0cnVjdCBkYW1vcyAqcylcbiB7XG4tXHRib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMpO1xuJiM0MztcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYyk7XG4gXG4gXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTIzNzQsNyAmIzQzOzI0MDQsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XHRcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cbiBcdHVuc2lnbmVkIGludCBzaWR4ID0gMDtcbiBcdHN0cnVjdCBkYW1vbl90YXJnZXQgKnRpdGVyO1x0LyogdGFyZ2V0cyBpdGVyYXRvciAqL1xuLVx0dW5zaWduZWQgaW50IHRpZHggPSAwO1xuJiM0MztcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xuIFx0Ym9vbCBkb190cmFjZSA9IGZhbHNlO1xuIFxuIFx0LyogZ2V0IGluZGljZXMgZm9yIHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseSgpICovXG5AQCAtMjM4OSw2ICYjNDM7MjQxOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0dGlkeCYjNDM7JiM0Mzs7XG4gXHRcdH1cbiYjNDM7XHRcdG5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7XG4gXHRcdGRvX3RyYWNlID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0yNDA0LDcgJiM0MzsyNDM1LDcgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXG4gXHRcdFx0cmV0dXJuO1xuIFx0XHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXHUwMDI2YmVnaW4pO1xuLVx0XHR0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoY2lkeCwgc2lkeCwgdGlkeCwgcixcbiYjNDM7XHRcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcbiBcdFx0XHRcdGRhbW9uX25yX3JlZ2lvbnModCksIGRvX3RyYWNlKTtcbiBcdFx0c3pfYXBwbGllZCA9IGMtXHUwMDNlb3BzLmFwcGx5X3NjaGVtZShjLCB0LCByLCBzLFxuIFx0XHRcdFx0XHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xuQEAgLTI2NzYsNyAmIzQzOzI3MDcsNyBAQCBzdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuIFx0XHRcdHBoeXNfYWRkcl90IGFkZHIsIGVuZF9hZGRyO1xuIFxuLVx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXG4mIzQzO1x0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHQvKiBDb252ZXJ0IGZyb20gY29yZSBhZGRyZXNzIHVuaXRzIHRvIHBoeXNpY2FsIGJ5dGVzICovXG5AQCAtMjk2NSw3ICYjNDM7Mjk5Niw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4gXHRcdFx0KERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7XG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXG4mIzQzO1x0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRpZiAoZGFtb3NfY29yZV9maWx0ZXJfb3V0KGMsIHQsIHIsIHMpKVxuIFx0XHRcdFx0Y29udGludWU7XG5AQCAtMzA2OSw3ICYjNDM7MzEwMCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXG4gXHRsLVx1MDAzZW5yX2FjY2Vzc2VzID0gKGwtXHUwMDNlbnJfYWNjZXNzZXMgKiBzel9sICYjNDM7IHItXHUwMDNlbnJfYWNjZXNzZXMgKiBzel9yKSAvXG4gXHRcdFx0KHN6X2wgJiM0Mzsgc3pfcik7XG4tXHRsLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gbC1cdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwO1xuIFx0bC1cdTAwM2VhZ2UgPSAobC1cdTAwM2VhZ2UgKiBzel9sICYjNDM7IHItXHUwMDNlYWdlICogc3pfcikgLyAoc3pfbCAmIzQzOyBzel9yKTtcbiBcdGwtXHUwMDNlYXIuZW5kID0gci1cdTAwM2Vhci5lbmQ7XG4gXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbkBAIC0zMDgwLDIwICYjNDM7MzExMCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4gXHRkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxuLXtcbi1cdFdBUk5fT05DRShyLVx1MDAzZW5yX2FjY2Vzc2VzICE9IHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgLyAxMDAwMCxcbi1cdFx0XHRcJiMzNDtucl9hY2Nlc3NlcyAoJXUpICE9IG5yX2FjY2Vzc2VzX2JwICgldSlcXG5cJiMzNDssXG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlcywgci1cdTAwM2Vucl9hY2Nlc3Nlc19icCk7XG4tfVxuLSNlbHNlXG4tc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi17XG4tfVxuLSNlbmRpZlxuLVxuLVxuIC8qXG4gICogTWVyZ2UgYWRqYWNlbnQgcmVnaW9ucyBoYXZpbmcgc2ltaWxhciBhY2Nlc3MgZnJlcXVlbmNpZXNcbiAgKlxuQEAgLTMxMDcsNyAmIzQzOzMxMjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcbiBcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsICpwcmV2ID0gTlVMTCwgKm5leHQ7XG4gXG4gXHRkYW1vbl9mb3JfZWFjaF9yZWdpb25fc2FmZShyLCBuZXh0LCB0KSB7XG4tXHRcdGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHIpO1xuIFx0XHRpZiAoYWJzKHItXHUwMDNlbnJfYWNjZXNzZXMgLSByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMpIFx1MDAzZSB0aHJlcylcbiBcdFx0XHRyLVx1MDAzZWFnZSA9IDA7XG4gXHRcdGVsc2UgaWYgKChyLVx1MDAzZW5yX2FjY2Vzc2VzID09IDApICE9IChyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPT0gMCkpXG5AQCAtMzE5Niw3ICYjNDM7MzIxMSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFxuIFx0bmV3LVx1MDAzZWFnZSA9IHItXHUwMDNlYWdlO1xuIFx0bmV3LVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSByLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XG4tXHRuZXctXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSByLVx1MDAzZW5yX2FjY2Vzc2VzX2JwO1xuIFx0bmV3LVx1MDAzZW5yX2FjY2Vzc2VzID0gci1cdTAwM2Vucl9hY2Nlc3NlcztcbiBcdC8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqL1xuIFx0bWVtY3B5KG5ldy1cdTAwM2Vwcm9iZV9oaXRzLCByLVx1MDAzZXByb2JlX2hpdHMsIHNpemVvZihyLVx1MDAzZXByb2JlX2hpdHMpKTtcbkBAIC0zNTcxLDggJiM0MzszNTg1LDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRcdFx0XHQgKiBhZ2dyZWdhdGlvbiwgYW5kIG1ha2UgYWdncmVnYXRpb25cbiBcdFx0XHRcdCAqIGluZm9ybWF0aW9uIHJlc2V0IGZvciBhbGwgcmVnaW9ucy4gIFRoZW4sXG4gXHRcdFx0XHQgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbFxuLVx0XHRcdFx0ICogd2lsbCBtYWtlIHRoZSByZWdpb24gaW5mb3JtYXRpb24gaW52YWxpZCxcbi1cdFx0XHRcdCAqIHBhcnRpY3VsYXJseSBmb3IgLVx1MDAzZW5yX2FjY2Vzc2VzX2JwLlxuJiM0MztcdFx0XHRcdCAqIHdpbGwgbWFrZSB0aGUgcmVnaW9uIGluZm9ybWF0aW9uIGludmFsaWQuXG4gXHRcdFx0XHQgKlxuIFx0XHRcdFx0ICogUmVzZXQgLVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIHRvIGF2b2lkIHRoYXQuXG4gXHRcdFx0XHQgKiBJdCB3aWxsIGFueXdheSBjb3JyZWN0bHkgdXBkYXRlZCBhZnRlciB0aGlzXG5AQCAtMzcxMSw3MiAmIzQzOzM3MjQsMTggQEAgaW50IGRhbW9uX3NldF9yZWdpb25fc3lzdGVtX3JhbXNfZGVmYXVsdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFx1MDAyNmFkZHJfcmFuZ2UsIDEsIG1pbl9yZWdpb25fc3opO1xuIH1cbiBcbi0vKlxuLSAqIGRhbW9uX21vdmluZ19zdW0oKSAtIENhbGN1bGF0ZSBhbiBpbmZlcnJlZCBtb3Zpbmcgc3VtIHZhbHVlLlxuLSAqIEBtdnN1bTpcdEluZmVycmVkIHN1bSBvZiB0aGUgbGFzdCBAbGVuX3dpbmRvdyB2YWx1ZXMuXG4tICogQG5vbXZzdW06XHROb24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCBkaXNjcmV0ZSBAbGVuX3dpbmRvdyB3aW5kb3cgdmFsdWVzLlxuLSAqIEBsZW5fd2luZG93Olx0VGhlIG51bWJlciBvZiBsYXN0IHZhbHVlcyB0byB0YWtlIGNhcmUgb2YuXG4tICogQG5ld192YWx1ZTpcdE5ldyB2YWx1ZSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHBzZXVkbyBtb3Zpbmcgc3VtLlxuLSAqXG4tICogTW92aW5nIHN1bSAobW92aW5nIGF2ZXJhZ2UgKiB3aW5kb3cgc2l6ZSkgaXMgZ29vZCBmb3IgaGFuZGxpbmcgbm9pc2UsIGJ1dFxuLSAqIHRoZSBjb3N0IG9mIGtlZXBpbmcgcGFzdCB2YWx1ZXMgY2FuIGJlIGhpZ2ggZm9yIGFyYml0cmFyeSB3aW5kb3cgc2l6ZS4gIFRoaXNcbi0gKiBmdW5jdGlvbiBpbXBsZW1lbnRzIGEgbGlnaHR3ZWlnaHQgcHNldWRvIG1vdmluZyBzdW0gZnVuY3Rpb24gdGhhdCBkb2VzbiYjMzk7dFxuLSAqIGtlZXAgdGhlIHBhc3Qgd2luZG93IHZhbHVlcy5cbi0gKlxuLSAqIEl0IHNpbXBseSBhc3N1bWVzIHRoZXJlIHdhcyBubyBub2lzZSBpbiB0aGUgcGFzdCwgYW5kIGdldCB0aGUgbm8tbm9pc2Vcbi0gKiBhc3N1bWVkIHBhc3QgdmFsdWUgdG8gZHJvcCBmcm9tIEBub212c3VtIGFuZCBAbGVuX3dpbmRvdy4gIEBub212c3VtIGlzIGFcbi0gKiBub24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCB3aW5kb3cuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIHdlXG4tICogaGF2ZSAyNSB2YWx1ZXMsIEBub212c3VtIGlzIHRoZSBzdW0gb2YgdGhlIDExdGggdG8gMjB0aCB2YWx1ZXMgb2YgdGhlIDI1XG4tICogdmFsdWVzLiAgSGVuY2UsIHRoaXMgZnVuY3Rpb24gc2ltcGx5IGRyb3BzIEBub212c3VtIC8gQGxlbl93aW5kb3cgZnJvbVxuLSAqIGdpdmVuIEBtdnN1bSBhbmQgYWRkIEBuZXdfdmFsdWUuXG4tICpcbi0gKiBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIEBub212c3VtIGlzIDUwLCB0aGUgbGFzdCAxMCB2YWx1ZXMgZm9yXG4tICogdGhlIGxhc3Qgd2luZG93IGNvdWxkIGJlIHZhcnksIGUuZy4sIDAsIDEwLCAwLCAxMCwgMCwgMTAsIDAsIDAsIDAsIDIwLiAgRm9yXG4tICogY2FsY3VsYXRpbmcgbmV4dCBtb3Zpbmcgc3VtIHdpdGggYSBuZXcgdmFsdWUsIHdlIHNob3VsZCBkcm9wIDAgZnJvbSA1MCBhbmRcbi0gKiBhZGQgdGhlIG5ldyB2YWx1ZS4gIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyBpdCBnb3QgdmFsdWUgNSBmb3IgZWFjaFxuLSAqIG9mIHRoZSBsYXN0IHRlbiB0aW1lcy4gIEJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uLCB3aGVuIHRoZSBuZXh0IHZhbHVlIGlzXG4tICogbWVhc3VyZWQsIGl0IGRyb3BzIHRoZSBhc3N1bWVkIHBhc3QgdmFsdWUsIDUgZnJvbSB0aGUgY3VycmVudCBzdW0sIGFuZCBhZGRcbi0gKiB0aGUgbmV3IHZhbHVlIHRvIGdldCB0aGUgdXBkYXRlZCBwc2VkdW8tbW92aW5nIGF2ZXJhZ2UuXG4tICpcbi0gKiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBjb3VsZCBoYXZlIGVycm9ycywgYnV0IHRoZSBlcnJvcnMgd2lsbCBiZSBkaXNhcHBlYXJlZFxuLSAqIGZvciBldmVyeSBAbGVuX3dpbmRvdyBhbGlnbmVkIGNhbGxzLiAgRm9yIGV4YW1wbGUsIGlmIEBsZW5fd2luZG93IGlzIDEwLCB0aGVcbi0gKiBwc2V1ZG8gbW92aW5nIHN1bSB3aXRoIDExdGggdmFsdWUgdG8gMTl0aCB2YWx1ZSB3b3VsZCBoYXZlIGFuIGVycm9yLiAgQnV0XG4tICogdGhlIHN1bSB3aXRoIDIwdGggdmFsdWUgd2lsbCBub3QgaGF2ZSB0aGUgZXJyb3IuXG4tICpcbi0gKiBSZXR1cm46IFBzZXVkby1tb3ZpbmcgYXZlcmFnZSBhZnRlciBnZXR0aW5nIHRoZSBAbmV3X3ZhbHVlLlxuLSAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbW92aW5nX3N1bSh1bnNpZ25lZCBpbnQgbXZzdW0sIHVuc2lnbmVkIGludCBub212c3VtLFxuLVx0XHR1bnNpZ25lZCBpbnQgbGVuX3dpbmRvdywgdW5zaWduZWQgaW50IG5ld192YWx1ZSlcbi17XG4tXHRyZXR1cm4gbXZzdW0gLSBub212c3VtIC8gbGVuX3dpbmRvdyAmIzQzOyBuZXdfdmFsdWU7XG4tfVxuLVxuIC8qKlxuICAqIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoKSAtIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24uXG4gICogQHI6XHRcdFRoZSBEQU1PTiByZWdpb24gdG8gdXBkYXRlIGZvciBpdHMgYWNjZXNzIGNoZWNrIHJlc3VsdC5cbiAgKiBAYWNjZXNzZWQ6XHRXaGV0aGVyIHRoZSByZWdpb24gaGFzIGFjY2Vzc2VkIGR1cmluZyBsYXN0IHNhbXBsaW5nIGludGVydmFsLlxuLSAqIEBhdHRyczpcdFRoZSBkYW1vbl9hdHRycyBvZiB0aGUgREFNT04gY29udGV4dC5cbiAgKlxuICAqIFVwZGF0ZSB0aGUgYWNjZXNzIHJhdGUgb2YgYSByZWdpb24gd2l0aCB0aGUgcmVnaW9uJiMzOTtzIGxhc3Qgc2FtcGxpbmcgaW50ZXJ2YWxcbiAgKiBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxuICAqXG4gICogVXN1YWxseSB0aGlzIHdpbGwgYmUgY2FsbGVkIGJ5IFx1MDAyNmRhbW9uX29wZXJhdGlvbnMtXHUwMDNlY2hlY2tfYWNjZXNzZXMgY2FsbGJhY2suXG4gICovXG4tdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQsXG4tXHRcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4mIzQzO3ZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsZW5fd2luZG93ID0gMTtcbi1cbi1cdC8qXG4tXHQgKiBzYW1wbGVfaW50ZXJ2YWwgY2FuIGJlIHplcm8sIGJ1dCBjYW5ub3QgYmUgbGFyZ2VyIHRoYW5cbi1cdCAqIGFnZ3JfaW50ZXJ2YWwsIG93aW5nIHRvIHZhbGlkYXRpb24gb2YgZGFtb25fc2V0X2F0dHJzKCkuXG4tXHQgKi9cbi1cdGlmIChhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXG4tXHRcdGxlbl93aW5kb3cgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpO1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGRhbW9uX21vdmluZ19zdW0oci1cdTAwM2Vucl9hY2Nlc3Nlc19icCxcbi1cdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgKiAxMDAwMCwgbGVuX3dpbmRvdyxcbi1cdFx0XHRhY2Nlc3NlZCA/IDEwMDAwIDogMCk7XG4tXG4gXHRpZiAoYWNjZXNzZWQpXG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMmIzQzOyYjNDM7O1xuIH1cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9wYWRkci5jIGIvbW0vZGFtb24vcGFkZHIuY1xuaW5kZXggNWMyZGE0NWY5ODhjZjkuLjYxNzI0NjQ5ODE3MzA0IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vcGFkZHIuY1xuQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyLCB1bnNpZ25lZCBsb25nICpmb2xpb19zeilcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycywgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcbiB7XG4gXHRzdGF0aWMgcGh5c19hZGRyX3QgbGFzdF9hZGRyO1xuIFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9mb2xpb19zeiA9IFBBR0VfU0laRTtcbkBAIC05MSwxMiAmIzQzOzkxLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4gXHQvKiBJZiB0aGUgcmVnaW9uIGlzIGluIHRoZSBsYXN0IGNoZWNrZWQgcGFnZSwgcmV1c2UgdGhlIHJlc3VsdCAqL1xuIFx0aWYgKEFMSUdOX0RPV04obGFzdF9hZGRyLCBsYXN0X2ZvbGlvX3N6KSA9PVxuIFx0XHRcdFx0QUxJR05fRE9XTihzYW1wbGluZ19hZGRyLCBsYXN0X2ZvbGlvX3N6KSkge1xuLVx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbiYjNDM7XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl9wYV95b3VuZyhzYW1wbGluZ19hZGRyLCBcdTAwMjZsYXN0X2ZvbGlvX3N6KTtcbi1cdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xuJiM0MztcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXG4gXHRsYXN0X2FkZHIgPSBzYW1wbGluZ19hZGRyO1xuIH1cbkBAIC0xMDksOCAmIzQzOzEwOSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIFxuIFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkge1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKFxuLVx0XHRcdFx0XHRyLCBcdTAwMjZjdHgtXHUwMDNlYXR0cnMsIGN0eC1cdTAwM2VhZGRyX3VuaXQpO1xuJiM0MztcdFx0XHRfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhyLCBjdHgtXHUwMDNlYWRkcl91bml0KTtcbiBcdFx0XHRtYXhfbnJfYWNjZXNzZXMgPSBtYXgoci1cdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggNDFmOTNhMTgyM2JmMTMuLmRiZjJiMDUxNWQ1ODI5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0xNTcsNyAmIzQzOzE1Nyw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uIHtcbiB9O1xuIFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcbi1cdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uKVxuJiM0MztcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uLCBzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4ge1xuIFx0c3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gKnN5c2ZzX3JlZ2lvbiA9IGttYWxsb2Nfb2JqKCpzeXNmc19yZWdpb24pO1xuIFxuQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdHN5c2ZzX3JlZ2lvbi1cdTAwM2Vrb2JqID0gKHN0cnVjdCBrb2JqZWN0KXt9O1xuIFx0c3lzZnNfcmVnaW9uLVx1MDAzZWFyID0gcmVnaW9uLVx1MDAzZWFyO1xuLVx0c3lzZnNfcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzID0gcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzX2JwIC8gMTAwMDA7XG4mIzQzO1x0c3lzZnNfcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ocmVnaW9uLCBjdHgpO1xuIFx0c3lzZnNfcmVnaW9uLVx1MDAzZWFnZSA9IHJlZ2lvbi1cdTAwM2VhZ2U7XG4gXHRzeXNmc19yZWdpb24tXHUwMDNlcHJvYmVzID0gTlVMTDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN5c2ZzX3JlZ2lvbi1cdTAwM2VsaXN0KTtcbkBAIC0zMTIyLDcgJiM0MzszMTIyLDcgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxuIFx0aWYgKHRvdGFsX2J5dGVzX29ubHkpXG4gXHRcdHJldHVybjtcbiBcbi1cdHJlZ2lvbiA9IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb25fYWxsb2Mocik7XG4mIzQzO1x0cmVnaW9uID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhyLCBjdHgpO1xuIFx0aWYgKCFyZWdpb24pXG4gXHRcdHJldHVybjtcbiBcdHJlZ2lvbi1cdTAwM2Vzel9maWx0ZXJfcGFzc2VkID0gc3pfZmlsdGVyX3Bhc3NlZDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5mMWZhZWJiNmZmOTkzZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTE0LDcgJiM0MzsxMTQsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsXCYjMzQ7KTtcbiBcdFx0XHR9XG4gXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IGFjY2Vzc2VzW2l0XVtpcl07XG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGFjY2Vzc2VzW2l0XVtpcl0gKiAxMDAwMDtcbiBcdFx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuIFx0XHR9XG4gXHRcdGl0JiM0MzsmIzQzOztcbkBAIC0xNTEsNyAmIzQzOzE1MCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4gXHR9XG4tXHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gNDIwMDAwO1xuIFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDQyO1xuIFx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gMTU7XG4gXHRyLVx1MDAzZWFnZSA9IDEwO1xuQEAgLTE2NCw3ICYjNDM7MTYyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctXHUwMDNlYXIuc3RhcnQsIDI1dWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJfbmV3LVx1MDAzZWFyLmVuZCwgMTAwdWwpO1xuIFxuLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHJfbmV3LVx1MDAzZW5yX2FjY2Vzc2VzX2JwKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2Vucl9hY2Nlc3Nlcyk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbkBAIC0xODcsNyAmIzQzOzE4NCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4gXHR9XG4gXHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XG4tXHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMTAwMDAwO1xuIFx0ci1cdTAwM2VhZ2UgPSA5O1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbiBcdHIyID0gZGFtb25fbmV3X3JlZ2lvbigxMDAsIDMwMCk7XG5AQCAtMTk2LDcgJiM0MzsxOTIsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdGt1bml0X3NraXAodGVzdCwgXCYjMzQ7c2Vjb25kIHJlZ2lvbiBhbGxvYyBmYWlsXCYjMzQ7KTtcbiBcdH1cbiBcdHIyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMjA7XG4tXHRyMi1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDIwMDAwMDtcbiBcdHIyLVx1MDAzZWFnZSA9IDIxO1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyMiwgdCk7XG4gXG5AQCAtMjA0LDcgJiM0MzsxOTksNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vhci5zdGFydCwgMHVsKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLmVuZCwgMzAwdWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXMsIDE2dSk7XG4tXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3Nlc19icCwgMTYwMDAwdSk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VhZ2UsIDE3dSk7XG4gXG4gXHRpID0gMDtcbkBAIC0yNTIsNyAmIzQzOzI0Niw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtyZWdpb24gYWxsb2MgZmFpbFwmIzM0Oyk7XG4gXHRcdH1cbiBcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IG5yc1tpXTtcbi1cdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IG5yc1tpXSAqIDEwMDAwO1xuIFx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuIFx0fVxuIFxuQEAgLTU1Miw3ICYjNDM7NTQ1LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsXCYjMzQ7KTtcbiBcbiBcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAxNTtcbi1cdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSAxNTAwMDA7XG4gXHRyLVx1MDAzZWFnZSA9IDIwO1xuIFxuIFx0bmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7XG5AQCAtNjA0LDE4ICYjNDM7NTk2LDI3IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21vdmluZ19zdW0oc3RydWN0IGt1bml0ICp0ZXN0KVxuJiM0MztzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X212c3VtKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXZzdW0gPSA1MDAwMCwgbm9tdnN1bSA9IDUwMDAwLCBsZW5fd2luZG93ID0gMTA7XG4tXHR1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlc1tdID0gezEwMDAwLCAwLCAxMDAwMCwgMCwgMCwgMCwgMTAwMDAsIDAsIDAsIDB9O1xuLVx0dW5zaWduZWQgaW50IGV4cGVjdHNbXSA9IHs1NTAwMCwgNTAwMDAsIDU1MDAwLCA1MDAwMCwgNDUwMDAsIDQwMDAwLFxuLVx0XHQ0NTAwMCwgNDAwMDAsIDM1MDAwLCAzMDAwMH07XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBpbnB1dF9leHBlY3RzW10gPSB7XG4mIzQzO1x0XHQvKiBjdXJyZW50IHZhbHVlLCBsYXN0IHZhbHVlLCByZW1haW5pbmcgd2luZG93IChicCkgKi9cbiYjNDM7XHRcdDAsIDQ5LCAxMDAwMCwgNDksXHQvKiAwICYjNDM7IDQ5ICogMSAqL1xuJiM0MztcdFx0MywgMTAsIDcwMDAsIDEwLFx0LyogMyAmIzQzOyAxMCAqIDAuNyAqL1xuJiM0MztcdFx0MywgMTAsIDUwMDAsIDgsXHRcdC8qIDMgJiM0MzsgMTAgKiAwLjUgKi9cbiYjNDM7XHRcdDMyLCAxMDAsIDEwMDAsIDQyLFx0LyogMzIgJiM0MzsgMTAwICogMC4xICovXG4mIzQzO1x0XHQ0MiwgNDksIDAsIDQyLFx0XHQvKiA0MiAmIzQzOyA0OSAqIDAgKi9cbiYjNDM7XHR9O1xuJiM0MztcbiBcdGludCBpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShuZXdfdmFsdWVzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0bXZzdW0gPSBkYW1vbl9tb3Zpbmdfc3VtKG12c3VtLCBub212c3VtLCBsZW5fd2luZG93LFxuLVx0XHRcdFx0bmV3X3ZhbHVlc1tpXSk7XG4tXHRcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCBtdnN1bSwgZXhwZWN0c1tpXSk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShpbnB1dF9leHBlY3RzKTsgaSAmIzQzOz0gNCkge1xuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBjdXJyZW50X25yID0gaW5wdXRfZXhwZWN0c1tpXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9uciA9IGlucHV0X2V4cGVjdHNbaSAmIzQzOyAxXTtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgbGVmdF93aW5kb3dfYnAgPSBpbnB1dF9leHBlY3RzW2kgJiM0MzsgMl07XG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGV4cGVjdCA9IGlucHV0X2V4cGVjdHNbaSAmIzQzOyAzXTtcbiYjNDM7XG4mIzQzO1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbXZzdW0oY3VycmVudF9uciwgbGFzdF9ucixcbiYjNDM7XHRcdFx0XHRcdGxlZnRfd2luZG93X2JwKSwgZXhwZWN0KTtcbiBcdH1cbiB9XG4gXG5AQCAtMTQ2OSw3ICYjNDM7MTQ3MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7XG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdCksXG4gXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSxcbi1cdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tb3Zpbmdfc3VtKSxcbiYjNDM7XHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMpLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBlNzNlYzFjZTAxNmU1Yi4uMjA1OGRiOWMwMWQ1MmYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNDkzLDI3ICYjNDM7NDkzLDI2IEBAIHN0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gICogclx0dGhlIHJlZ2lvbiB0byBiZSBjaGVja2VkXG4gICovXG4gc3RhdGljIHZvaWQgX19kYW1vbl92YV9jaGVja19hY2Nlc3Moc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIHNhbWVfdGFyZ2V0LFxuLVx0XHRcdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbiYjNDM7XHRcdFx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIHNhbWVfdGFyZ2V0KVxuIHtcbiBcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfYWRkcjtcbiBcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfZm9saW9fc3ogPSBQQUdFX1NJWkU7XG4gXHRzdGF0aWMgYm9vbCBsYXN0X2FjY2Vzc2VkO1xuIFxuIFx0aWYgKCFtbSkge1xuLVx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlLCBhdHRycyk7XG4mIzQzO1x0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0LyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi9cbiBcdGlmIChzYW1lX3RhcmdldCBcdTAwMjZcdTAwMjYgKEFMSUdOX0RPV04obGFzdF9hZGRyLCBsYXN0X2ZvbGlvX3N6KSA9PVxuIFx0XHRcdFx0QUxJR05fRE9XTihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSkge1xuLVx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbiYjNDM7XHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cdTAwM2VzYW1wbGluZ19hZGRyLCBcdTAwMjZsYXN0X2ZvbGlvX3N6KTtcbi1cdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xuJiM0MztcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXG4gXHRsYXN0X2FkZHIgPSByLVx1MDAzZXNhbXBsaW5nX2FkZHI7XG4gfVxuQEAgLTUzMCw4ICYjNDM7NTI5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuIFx0XHRzYW1lX3RhcmdldCA9IGZhbHNlO1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKG1tLCByLCBzYW1lX3RhcmdldCxcbi1cdFx0XHRcdFx0XHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbiYjNDM7XHRcdFx0X19kYW1vbl92YV9jaGVja19hY2Nlc3MobW0sIHIsIHNhbWVfdGFyZ2V0KTtcbiBcdFx0XHRtYXhfbnJfYWNjZXNzZXMgPSBtYXgoci1cdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcbiBcdFx0XHRzYW1lX3RhcmdldCA9IHRydWU7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuaW5kZXggOTcyOTQ4ZTYyMTVmMWQuLjQ5NDJhZmRmNDZjZDQ0IDEwMDc1NVxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weVxuQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIGRlZiByZWdpb25fdG9fZGljdChyZWdpb24pOlxuICAgICAgICAgWyYjMzk7YXImIzM5OywgYWRkcl9yYW5nZV90b19kaWN0XSxcbiAgICAgICAgIFsmIzM5O3NhbXBsaW5nX2FkZHImIzM5OywgaW50XSxcbiAgICAgICAgIFsmIzM5O25yX2FjY2Vzc2VzJiMzOTssIGludF0sXG4tICAgICAgICBbJiMzOTtucl9hY2Nlc3Nlc19icCYjMzk7LCBpbnRdLFxuICAgICAgICAgWyYjMzk7YWdlJiMzOTssIGludF0sXG4gICAgICAgICBdKVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0mIzM0OywKICAgICYjMzQ7ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSYjMzQ7LAogICAgJiMzNDtfX2RhbW9zX3ZhbGlkX3RhcmdldCYjMzQ7LAogICAgJiMzNDtkYW1vc19hcHBseV9zY2hlbWUmIzM0OywKICAgICYjMzQ7ZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMmIzM0OywKICAgICYjMzQ7ZGFtb25fbWVyZ2VfcmVnaW9uc19vZiYjMzQ7LAogICAgJiMzNDtkYW1vbl9zcGxpdF9yZWdpb25fYXQmIzM0OywKICAgICYjMzQ7X19kYW1vbl9wYV9jaGVja19hY2Nlc3MmIzM0OywKICAgICYjMzQ7X19kYW1vbl92YV9jaGVja19hY2Nlc3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBgbnJfYWNjZXNzZXNfYnBgIGZpZWxkIHdpdGggYSBwc2V1ZG8gbW92aW5nIHN1bSBjYWxjdWxhdGlvbiAoYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCkuIFRoaXMgYWZmZWN0cyBob3cgYWNjZXNzIGZyZXF1ZW5jaWVzIGFyZSBjYWxjdWxhdGVkLCBtZXJnZWQsIHNwbGl0LCBhbmQgZXZhbHVhdGVkIGZvciBzY2hlbWVzIGFjcm9zcyBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2ZGZjMDY2ZGYwZWE2NmYyMTBhNDBhYTg0NzliOGExNDRkYWE0OTY2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMDU6NTU6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmggYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKaW5kZXggY2ZiYmY4YmEyOGY2MzIuLjgwNWUwODlmZjRmMmY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9kYW1vbi5oCkBAIC00NSw4ICYjNDM7NDUsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7CiAgKiBAYXI6CQkJVGhlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIHJlZ2lvbi4KICAqIEBzYW1wbGluZ19hZGRyOglBZGRyZXNzIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBuZXh0IGFjY2VzcyBjaGVjay4KICAqIEBucl9hY2Nlc3NlczoJQWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi4KLSAqIEBucl9hY2Nlc3Nlc19icDoJQG5yX2FjY2Vzc2VzIGluIGJhc2lzIHBvaW50ICgwLjAxJSkgdGhhdCB1cGRhdGVkIGZvcgotICoJCQllYWNoIHNhbXBsaW5nIGludGVydmFsLgogICogQHByb2JlX2hpdHM6CQlOdW1iZXIgb2YgcHJvYmUtcG9zaXRpdmUgcmVnaW9uIHNhbXBsZXMuCiAgKiBAbGlzdDoJCUxpc3QgaGVhZCBmb3Igc2libGluZ3MuCiAgKiBAYWdlOgkJQWdlIG9mIHRoaXMgcmVnaW9uLgpAQCAtNTksMTMgJiM0Mzs1Nyw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHsKICAqIG5vdCBiZSBkb25lIHdpdGggZGlyZWN0IGFjY2VzcyBidXQgd2l0aCB0aGUgaGVscGVyIGZ1bmN0aW9uLAogICogZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSgpLgogICoKLSAqIEBucl9hY2Nlc3Nlc19icCBpcyBhbm90aGVyIHJlcHJlc2VudGF0aW9uIG9mIEBucl9hY2Nlc3NlcyBpbiBiYXNpcyBwb2ludAotICogKDEgaW4gMTAsMDAwKSB0aGF0IHVwZGF0ZWQgZm9yIGV2ZXJ5ICZhbXA7ZGFtb25fYXR0cnMtJmd0O3NhbXBsZV9pbnRlcnZhbCBpbiBhCi0gKiBtYW5uZXIgc2ltaWxhciB0byBtb3Zpbmcgc3VtLiAgQnkgdGhlIGFsZ29yaXRobSwgdGhpcyB2YWx1ZSBiZWNvbWVzCi0gKiBAbnJfYWNjZXNzZXMgKiAxMDAwMCBmb3IgZXZlcnkgJmFtcDtzdHJ1Y3QgZGFtb25fYXR0cnMtJmd0O2FnZ3JfaW50ZXJ2YWwuICBUaGlzIGNhbgotICogYmUgdXNlZCB3aGVuIHRoZSBhZ2dyZWdhdGlvbiBpbnRlcnZhbCBpcyB0b28gaHVnZSBhbmQgdGhlcmVmb3JlIGNhbm5vdCB3YWl0Ci0gKiBmb3IgaXQgYmVmb3JlIGdldHRpbmcgdGhlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMuCi0gKgogICogQGFnZSBpcyBpbml0aWFsbHkgemVybywgaW5jcmVhc2VkIGZvciBlYWNoIGFnZ3JlZ2F0aW9uIGludGVydmFsLCBhbmQgcmVzZXQKICAqIHRvIHplcm8gYWdhaW4gaWYgdGhlIGFjY2VzcyBmcmVxdWVuY3kgaXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLiAgSWYgdHdvCiAgKiByZWdpb25zIGFyZSBtZXJnZWQgaW50byBhIG5ldyByZWdpb24sIGJvdGggQG5yX2FjY2Vzc2VzIGFuZCBAYWdlIG9mIHRoZSBuZXcKQEAgLTc1LDcgJiM0Mzs2Niw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gewogCXN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFyOwogCXVuc2lnbmVkIGxvbmcgc2FtcGxpbmdfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7Ci0JdW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzX2JwOwogCXVuc2lnbmVkIGNoYXIgcHJvYmVfaGl0c1tEQU1PTl9NQVhfUFJPQkVTXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAKQEAgLTEwMTEsMTEgJiM0MzsxMDAxLDEyIEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpOwogdm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKTsKIAogc3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7CiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpOwogCiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcywKIAkJdW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTsKLXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLAotCQlzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTsKJiM0Mzt2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCk7CiAKIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX25ld19maWx0ZXIoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlLAogCQlib29sIG1hdGNoaW5nLCBib29sIGFsbG93KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2RhbW9uLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oCmluZGV4IDc4Mzg4NTM4YWNmNDQ2Li44ODUxNzI3YWUxNjI3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oCkBAIC03OCw5ICYjNDM7NzgsMTEgQEAgVFJBQ0VfRVZFTlRfQ09ORElUSU9OKGRhbW9zX2JlZm9yZV9hcHBseSwKIAogCVRQX1BST1RPKHVuc2lnbmVkIGludCBjb250ZXh0X2lkeCwgdW5zaWduZWQgaW50IHNjaGVtZV9pZHgsCiAJCXVuc2lnbmVkIGludCB0YXJnZXRfaWR4LCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAotCQl1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucywgYm9vbCBkb190cmFjZSksCiYjNDM7CQl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHVuc2lnbmVkIGludCBucl9yZWdpb25zLAomIzQzOwkJYm9vbCBkb190cmFjZSksCiAKLQlUUF9BUkdTKGNvbnRleHRfaWR4LCBzY2hlbWVfaWR4LCB0YXJnZXRfaWR4LCByLCBucl9yZWdpb25zLCBkb190cmFjZSksCiYjNDM7CVRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX2FjY2Vzc2VzLAomIzQzOwkJbnJfcmVnaW9ucywgZG9fdHJhY2UpLAogCiAJVFBfQ09ORElUSU9OKGRvX3RyYWNlKSwKIApAQCAtMTAxLDcgJiM0MzsxMDMsNyBAQCBUUkFDRV9FVkVOVF9DT05ESVRJT04oZGFtb3NfYmVmb3JlX2FwcGx5LAogCQlfX2VudHJ5LSZndDt0YXJnZXRfaWR4ID0gdGFyZ2V0X2lkeDsKIAkJX19lbnRyeS0mZ3Q7c3RhcnQgPSByLSZndDthci5zdGFydDsKIAkJX19lbnRyeS0mZ3Q7ZW5kID0gci0mZ3Q7YXIuZW5kOwotCQlfX2VudHJ5LSZndDtucl9hY2Nlc3NlcyA9IHItJmd0O25yX2FjY2Vzc2VzX2JwIC8gMTAwMDA7CiYjNDM7CQlfX2VudHJ5LSZndDtucl9hY2Nlc3NlcyA9IG5yX2FjY2Vzc2VzOwogCQlfX2VudHJ5LSZndDthZ2UgPSByLSZndDthZ2U7CiAJCV9fZW50cnktJmd0O25yX3JlZ2lvbnMgPSBucl9yZWdpb25zOwogCSksCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggMDI3MjUwZTQzYzY2ZjIuLmY1MmE4OWY5ZmQ5NzdkIDEwMDY0NAotLS0gYS9tbS9kYW1vbi9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vY29yZS5jCkBAIC0yMDgsNiAmIzQzOzIwOCw3MSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzOy8qCiYjNDM7ICogZGFtb25fbXZzdW0oKSAtIFJldHVybnMgcHNldWRvIG1vdmluZyBzdW0gdmFsdWUgZm9yIGEgdGltZSB3aW5kb3cuCiYjNDM7ICogQGN1cnJlbnRfbnI6CQlUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgYWdncmVnYXRpb24gd2luZG93LgomIzQzOyAqIEBsYXN0X25yOgkJVGhlIHZhbHVlIG9mIHRoZSBsYXN0IGFnZ3JlZ2F0aW9uIHdpbmRvdy4KJiM0MzsgKiBAbGVmdF93aW5kb3dfYnA6CUxlZnQgdGltZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBvZiBhIGNvdW50ZXIgdGhhdCBpcwomIzQzOyAqIGFnZ3JlZ2F0ZWQgZm9yIGVhY2ggdGltZSB3aW5kb3cuICBAY3VycmVudF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIKJiM0MzsgKiB0aGF0IGFnZ3JlZ2F0ZWQgc28gZmFyIChtYXliZSBub3QgeWV0IGNvbXBsZXRlKSwgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQomIzQzOyAqIGN1cnJlbnQgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuICBAbGFzdF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgdGhhdAomIzQzOyAqIGhhcyBjb21wbGV0ZWx5IGFnZ3JlZ2F0ZWQgaW4gdGhlIGxhc3QgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuCiYjNDM7ICogQGxlZnRfd2luZG93X2JwIHJlcHJlc2VudHMgaG93IG11Y2ggdGltZSBpcyBsZWZ0IGZvciB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbgomIzQzOyAqIHRpbWUgd2luZG93IGluIGJwICgxLzEwLDAwMCkuICBGb3IgZXhhbXBsZSwgdGhlIGFnZ3JlZ2F0aW9uIHRpbWUgd2luZG93IGlzCiYjNDM7ICogZm9yIGV2ZXJ5IDEwIHNlY29uZHMgYW5kIDcgc2Vjb25kcyBoYXMgcGFzc2VkIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlCiYjNDM7ICogY3VycmVudCB3aW5kb3csIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgMzAwMCAoKDEwIC0gNykgLyAxMCAqIDEwMDAwKS4KJiM0MzsgKgomIzQzOyAqIFRoZSBsb2dpYyBhc3N1bWVzIHRoZSBhZ2dyZWdhdGlvbiBpbiB0aGUgbGFzdCBwaGFzZSB3YXMgbWFkZSBpbiBhIHNpbmdsZQomIzQzOyAqIHNwZWVkLiAgQmFzZWQgb24gdGhlIGFzc3VtcHRpb24sIHRoZSB2YWx1ZSBmcm9tIHRoZSBsYXN0IHdpbmRvdyB0aGF0IG5lZWRzCiYjNDM7ICogdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBvcnRpb24gb2YgdGhlIGxhc3QKJiM0MzsgKiB2YWx1ZSBiYXNlZCBvbiB0aGUgcmVtYWluaW5nIHRpbWUgd2luZG93LgomIzQzOyAqLwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9uciwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbGFzdF9uciwgdW5zaWduZWQgbG9uZyBsZWZ0X3dpbmRvd19icCkKJiM0Mzt7CiYjNDM7CXJldHVybiBjdXJyZW50X25yICYjNDM7IG11bHRfZnJhYyhsYXN0X25yLCBsZWZ0X3dpbmRvd19icCwgMTAwMDApOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSgpIC0gUmV0dXJucyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuCiYjNDM7ICogQHI6CQlSZWdpb24gdG8gZ2V0IHRoZSBhY2Nlc3MgZnJlcXVlbmN5IG9mLgomIzQzOyAqIEBjdHg6CURBTU9OIGNvbnRleHQgb2YgQHIuCiYjNDM7ICoKJiM0MzsgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgZm9yIGhvdyBtYW55IHNhbXBsaW5nIGl0ZXJhdGlvbnMgaW4gdGhlIGxhc3QKJiM0MzsgKiBhZ2dyZWdhdGlvbiBpbnRlcnZhbCAoJmFtcDtkYW1vbl9hdHRycy0mZ3Q7YWdncl9pbnRlcnZhbCkgdGhlIHJlZ2lvbiB3YXMgZm91bmQgdG8KJiM0MzsgKiBiZSBhY2Nlc3NlZC4gIEhlbmNlIHRoZSB2YWx1ZSBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlbGF0aXZlIGFjY2VzcwomIzQzOyAqIGZyZXF1ZW5jeSBzY29yZSBvZiB0aGUgcmVnaW9uIChAcikuICBUaGUgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBzZXVkbwomIzQzOyAqIG1vdmluZyBzdW0sIGFuZCBoZW5jZSBpdCBpcyBub3QgYW4gZXhhY3QgdmFsdWUgYnV0IGp1c3QgYSBiZXN0LWVmZm9ydAomIzQzOyAqIHJlYXNvbmFibGUgZXN0aW1hdGlvbi4KJiM0MzsgKgomIzQzOyAqIFJldHVybjogdGhlIHBzZXVkbyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuCiYjNDM7ICovCiYjNDM7dW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiYjNDM7CQlzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCwgYWdncl9pbnRlcnZhbDsKJiM0MzsJdW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7CiYjNDM7CiYjNDM7CXNhbXBsZV9pbnRlcnZhbCA9IGN0eC0mZ3Q7YXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxOwomIzQzOwlhZ2dyX2ludGVydmFsID0gY3R4LSZndDthdHRycy5hZ2dyX2ludGVydmFsID8gOiAxOwomIzQzOwl3aW5kb3dfbGVuID0gYWdncl9pbnRlcnZhbCAvIHNhbXBsZV9pbnRlcnZhbDsKJiM0MzsJaWYgKHRpbWVfYWZ0ZXJfZXEoY3R4LSZndDtwYXNzZWRfc2FtcGxlX2ludGVydmFscywKJiM0MzsJCQkJY3R4LSZndDtuZXh0X2FnZ3JlZ2F0aW9uX3NpcykpCiYjNDM7CQlsZWZ0X3dpbmRvdyA9IDA7CiYjNDM7CWVsc2UKJiM0MzsJCWxlZnRfd2luZG93ID0gY3R4LSZndDtuZXh0X2FnZ3JlZ2F0aW9uX3NpcyAtCiYjNDM7CQkJY3R4LSZndDtwYXNzZWRfc2FtcGxlX2ludGVydmFsczsKJiM0MzsJbGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTsKJiM0MzsKJiM0MzsJaWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKQomIzQzOwkJcmV0dXJuIHItJmd0O2xhc3RfbnJfYWNjZXNzZXM7CiYjNDM7CiYjNDM7CXJldHVybiBkYW1vbl9tdnN1bShyLSZndDtucl9hY2Nlc3Nlcywgci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlcywKJiM0MzsJCQlsZWZ0X3dpbmRvd19icCk7CiYjNDM7fQomIzQzOwogI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFkKIHN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogewpAQCAtMjM3LDcgJiM0MzszMDIsNiBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQogCXJlZ2lvbi0mZ3Q7YXIuc3RhcnQgPSBzdGFydDsKIAlyZWdpb24tJmd0O2FyLmVuZCA9IGVuZDsKIAlyZWdpb24tJmd0O25yX2FjY2Vzc2VzID0gMDsKLQlyZWdpb24tJmd0O25yX2FjY2Vzc2VzX2JwID0gMDsKIAlmb3IgKGkgPSAwOyBpICZsdDsgREFNT05fTUFYX1BST0JFUzsgaSYjNDM7JiM0MzspCiAJCXJlZ2lvbi0mZ3Q7cHJvYmVfaGl0c1tpXSA9IDA7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtyZWdpb24tJmd0O2xpc3QpOwpAQCAtODA5LDIyICYjNDM7ODczLDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAogCQlzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsCiAJCWJvb2wgYWdncmVnYXRpbmcpCiB7Ci0JaWYgKCFhZ2dyZWdhdGluZykgewomIzQzOwlyLSZndDtsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycygKJiM0MzsJCQlyLSZndDtsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7CiYjNDM7CWlmICghYWdncmVnYXRpbmcpCiAJCXItJmd0O25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycygKIAkJCQlyLSZndDtucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpOwotCQlyLSZndDtucl9hY2Nlc3Nlc19icCA9IHItJmd0O25yX2FjY2Vzc2VzICogMTAwMDA7Ci0JfSBlbHNlIHsKJiM0MzsJZWxzZQogCQkvKgogCQkgKiBpZiB0aGlzIGlzIGNhbGxlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBhZ2dyZWdhdGlvbiwgcmVzZXQKIAkJICogdGhlIGFnZ3JlZ2F0aW9ucyB3ZSBtYWRlIHNvIGZhciBmb3IgdGhpcyBhZ2dyZWdhdGlvbgogCQkgKiBpbnRlcnZhbC4gIEluIG90aGVyIHdvcmRzLCBtYWtlIHRoZSBzdGF0dXMgbGlrZQogCQkgKiBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoKSBpcyBjYWxsZWQuCiAJCSAqLwotCQlyLSZndDtsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycygKLQkJCQlyLSZndDtsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7Ci0JCXItJmd0O25yX2FjY2Vzc2VzX2JwID0gci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwOwogCQlyLSZndDtucl9hY2Nlc3NlcyA9IDA7Ci0JfQogCXItJmd0O2FnZSA9IGRhbW9uX2FnZV9mb3JfbmV3X2F0dHJzKHItJmd0O2FnZSwgb2xkX2F0dHJzLCBuZXdfYXR0cnMpOwogfQogCkBAIC0xOTM1LDM2ICYjNDM7MTk5Niw2IEBAIGludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbCkKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFdhcm4gYW5kIGZpeCBjb3JydXB0ZWQgLSZndDtucl9hY2Nlc3Nlc1tfYnBdIGZvciBpbnZlc3RpZ2F0aW9ucyBhbmQgcHJldmVudGluZwotICogdGhlIHByb2JsZW0gYmVpbmcgcHJvcGFnYXRlZC4KLSAqLwotc3RhdGljIHZvaWQgZGFtb25fd2Fybl9maXhfbnJfYWNjZXNzZXNfY29ycnVwdGlvbihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKQotewotCWlmIChyLSZndDtucl9hY2Nlc3Nlc19icCA9PSByLSZndDtucl9hY2Nlc3NlcyAqIDEwMDAwKQotCQlyZXR1cm47Ci0JV0FSTl9PTkNFKHRydWUsICYjMzQ7aW52YWxpZCBucl9hY2Nlc3Nlc19icCBhdCByZXNldDogJXUgJXVcbiYjMzQ7LAotCQkJci0mZ3Q7bnJfYWNjZXNzZXNfYnAsIHItJmd0O25yX2FjY2Vzc2VzKTsKLQlyLSZndDtucl9hY2Nlc3Nlc19icCA9IHItJmd0O25yX2FjY2Vzc2VzICogMTAwMDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZCi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLAotCQlzdHJ1Y3QgZGFtb25fY3R4ICpjKQotewotCVdBUk5fT05DRShyLSZndDtucl9hY2Nlc3Nlc19icCAhPSByLSZndDtsYXN0X25yX2FjY2Vzc2VzICogMTAwMDAsCi0JCQkmIzM0O25yX2FjY2Vzc2VzX2JwICV1IGxhc3RfbnJfYWNjZXNzZXMgJXUgc2lzICVsdSAlbHVcbiYjMzQ7LAotCQkJci0mZ3Q7bnJfYWNjZXNzZXNfYnAsIHItJmd0O2xhc3RfbnJfYWNjZXNzZXMsCi0JCQljLSZndDtwYXNzZWRfc2FtcGxlX2ludGVydmFscywgYy0mZ3Q7bmV4dF9hZ2dyZWdhdGlvbl9zaXMpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCi0JCXN0cnVjdCBkYW1vbl9jdHggKmMpCi17Ci19Ci0jZW5kaWYKLQotCiAvKgogICogUmVzZXQgdGhlIGFnZ3JlZ2F0ZWQgbW9uaXRvcmluZyByZXN1bHRzICgmIzM5O25yX2FjY2Vzc2VzJiMzOTsgb2YgZWFjaCByZWdpb24pLgogICovCkBAIC0xOTg5LDEyICYjNDM7MjAyMCwxMCBAQCBzdGF0aWMgdm9pZCBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoc3RydWN0IGRhbW9uX2N0eCAqYykKIAkJCXRyYWNlX2RhbW9uX2FnZ3JlZ2F0ZWQodGksIHIsIGRhbW9uX25yX3JlZ2lvbnModCkpOwogCQkJdHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWQodGksIHIsCiAJCQkJCWRhbW9uX25yX3JlZ2lvbnModCksIG5yX3Byb2Jlcyk7Ci0JCQlkYW1vbl93YXJuX2ZpeF9ucl9hY2Nlc3Nlc19jb3JydXB0aW9uKHIpOwogCQkJci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlcyA9IHItJmd0O25yX2FjY2Vzc2VzOwogCQkJci0mZ3Q7bnJfYWNjZXNzZXMgPSAwOwogCQkJZm9yIChpID0gMDsgaSAmbHQ7IERBTU9OX01BWF9QUk9CRVM7IGkmIzQzOyYjNDM7KQogCQkJCXItJmd0O3Byb2JlX2hpdHNbaV0gPSAwOwotCQkJZGFtb25fdmVyaWZ5X3Jlc2V0X2FnZ3JlZ2F0ZWQociwgYyk7CiAJCX0KIAkJdGkmIzQzOyYjNDM7OwogCX0KQEAgLTIwNjEsMTAgJiM0MzsyMDkwLDExIEBAIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpCiAJZGFtb25fc2V0X2F0dHJzKGMsICZhbXA7bmV3X2F0dHJzKTsKIH0KIAotc3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKQomIzQzO3N0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcywKJiM0MzsJCXN0cnVjdCBkYW1vbl9jdHggKmMpCiB7CiAJdW5zaWduZWQgbG9uZyBzejsKLQl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMgPSByLSZndDtucl9hY2Nlc3Nlc19icCAvIDEwMDAwOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyLCBjKTsKIAogCXN6ID0gZGFtb25fc3pfcmVnaW9uKHIpOwogCXJldHVybiBzLSZndDtwYXR0ZXJuLm1pbl9zel9yZWdpb24gJmx0Oz0gc3ogJmFtcDsmYW1wOwpAQCAtMjA5MCw3ICYjNDM7MjEyMCw3IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKQogc3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJCXN0cnVjdCBkYW1vcyAqcykKIHsKLQlib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMpOwomIzQzOwlib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpOwogCiAJaWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldCgmYW1wO3MtJmd0O3F1b3RhKSB8fCAhYy0mZ3Q7b3BzLmdldF9zY2hlbWVfc2NvcmUpCiAJCXJldHVybiByZXQ7CkBAIC0yMzc0LDcgJiM0MzsyNDA0LDcgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsCiAJc3RydWN0IGRhbW9zICpzaXRlcjsJCS8qIHNjaGVtZXMgaXRlcmF0b3IgKi8KIAl1bnNpZ25lZCBpbnQgc2lkeCA9IDA7CiAJc3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7CS8qIHRhcmdldHMgaXRlcmF0b3IgKi8KLQl1bnNpZ25lZCBpbnQgdGlkeCA9IDA7CiYjNDM7CXVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwOwogCWJvb2wgZG9fdHJhY2UgPSBmYWxzZTsKIAogCS8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqLwpAQCAtMjM4OSw2ICYjNDM7MjQxOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogCQkJCWJyZWFrOwogCQkJdGlkeCYjNDM7JiM0Mzs7CiAJCX0KJiM0MzsJCW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7CiAJCWRvX3RyYWNlID0gdHJ1ZTsKIAl9CiAKQEAgLTI0MDQsNyAmIzQzOzI0MzUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAkJaWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSkKIAkJCXJldHVybjsKIAkJa3RpbWVfZ2V0X2NvYXJzZV90czY0KCZhbXA7YmVnaW4pOwotCQl0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoY2lkeCwgc2lkeCwgdGlkeCwgciwKJiM0MzsJCXRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcywKIAkJCQlkYW1vbl9ucl9yZWdpb25zKHQpLCBkb190cmFjZSk7CiAJCXN6X2FwcGxpZWQgPSBjLSZndDtvcHMuYXBwbHlfc2NoZW1lKGMsIHQsIHIsIHMsCiAJCQkJJmFtcDtzel9vcHNfZmlsdGVyX3Bhc3NlZCk7CkBAIC0yNjc2LDcgJiM0MzsyNzA3LDcgQEAgc3RhdGljIHBoeXNfYWRkcl90IGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMoc3RydWN0IGRhbW9uX2N0eCAqYywKIAkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHsKIAkJCXBoeXNfYWRkcl90IGFkZHIsIGVuZF9hZGRyOwogCi0JCQlpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMpKQomIzQzOwkJCWlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpCiAJCQkJY29udGludWU7CiAKIAkJCS8qIENvbnZlcnQgZnJvbSBjb3JlIGFkZHJlc3MgdW5pdHMgdG8gcGh5c2ljYWwgYnl0ZXMgKi8KQEAgLTI5NjUsNyAmIzQzOzI5OTYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKQogCQkJKERBTU9TX01BWF9TQ09SRSAmIzQzOyAxKSk7CiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHsKIAkJZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHsKLQkJCWlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpCiYjNDM7CQkJaWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSkKIAkJCQljb250aW51ZTsKIAkJCWlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpCiAJCQkJY29udGludWU7CkBAIC0zMDY5LDcgJiM0MzszMTAwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAogCWwtJmd0O25yX2FjY2Vzc2VzID0gKGwtJmd0O25yX2FjY2Vzc2VzICogc3pfbCAmIzQzOyByLSZndDtucl9hY2Nlc3NlcyAqIHN6X3IpIC8KIAkJCShzel9sICYjNDM7IHN6X3IpOwotCWwtJmd0O25yX2FjY2Vzc2VzX2JwID0gbC0mZ3Q7bnJfYWNjZXNzZXMgKiAxMDAwMDsKIAlsLSZndDthZ2UgPSAobC0mZ3Q7YWdlICogc3pfbCAmIzQzOyByLSZndDthZ2UgKiBzel9yKSAvIChzel9sICYjNDM7IHN6X3IpOwogCWwtJmd0O2FyLmVuZCA9IHItJmd0O2FyLmVuZDsKIAkvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi8KQEAgLTMwODAsMjAgJiM0MzszMTEwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAlkYW1vbl9kZXN0cm95X3JlZ2lvbihyLCB0KTsKIH0KIAotI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFkKLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpCi17Ci0JV0FSTl9PTkNFKHItJmd0O25yX2FjY2Vzc2VzICE9IHItJmd0O25yX2FjY2Vzc2VzX2JwIC8gMTAwMDAsCi0JCQkmIzM0O25yX2FjY2Vzc2VzICgldSkgIT0gbnJfYWNjZXNzZXNfYnAgKCV1KVxuJiMzNDssCi0JCQlyLSZndDtucl9hY2Nlc3Nlcywgci0mZ3Q7bnJfYWNjZXNzZXNfYnApOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpCi17Ci19Ci0jZW5kaWYKLQotCiAvKgogICogTWVyZ2UgYWRqYWNlbnQgcmVnaW9ucyBoYXZpbmcgc2ltaWxhciBhY2Nlc3MgZnJlcXVlbmNpZXMKICAqCkBAIC0zMTA3LDcgJiM0MzszMTIzLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsCiAJc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDsKIAogCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHsKLQkJZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yocik7CiAJCWlmIChhYnMoci0mZ3Q7bnJfYWNjZXNzZXMgLSByLSZndDtsYXN0X25yX2FjY2Vzc2VzKSAmZ3Q7IHRocmVzKQogCQkJci0mZ3Q7YWdlID0gMDsKIAkJZWxzZSBpZiAoKHItJmd0O25yX2FjY2Vzc2VzID09IDApICE9IChyLSZndDtsYXN0X25yX2FjY2Vzc2VzID09IDApKQpAQCAtMzE5Niw3ICYjNDM7MzIxMSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LAogCiAJbmV3LSZndDthZ2UgPSByLSZndDthZ2U7CiAJbmV3LSZndDtsYXN0X25yX2FjY2Vzc2VzID0gci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlczsKLQluZXctJmd0O25yX2FjY2Vzc2VzX2JwID0gci0mZ3Q7bnJfYWNjZXNzZXNfYnA7CiAJbmV3LSZndDtucl9hY2Nlc3NlcyA9IHItJmd0O25yX2FjY2Vzc2VzOwogCS8qIHRvZG86IGRvIHRoaXMgZm9yIG9ubHkgaW5zdGFsbGVkIHByb2JlcyAqLwogCW1lbWNweShuZXctJmd0O3Byb2JlX2hpdHMsIHItJmd0O3Byb2JlX2hpdHMsIHNpemVvZihyLSZndDtwcm9iZV9oaXRzKSk7CkBAIC0zNTcxLDggJiM0MzszNTg1LDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpCiAJCQkJICogYWdncmVnYXRpb24sIGFuZCBtYWtlIGFnZ3JlZ2F0aW9uCiAJCQkJICogaW5mb3JtYXRpb24gcmVzZXQgZm9yIGFsbCByZWdpb25zLiAgVGhlbiwKIAkJCQkgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbAotCQkJCSAqIHdpbGwgbWFrZSB0aGUgcmVnaW9uIGluZm9ybWF0aW9uIGludmFsaWQsCi0JCQkJICogcGFydGljdWxhcmx5IGZvciAtJmd0O25yX2FjY2Vzc2VzX2JwLgomIzQzOwkJCQkgKiB3aWxsIG1ha2UgdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpbnZhbGlkLgogCQkJCSAqCiAJCQkJICogUmVzZXQgLSZndDtuZXh0X2FnZ3JlZ2F0aW9uX3NpcyB0byBhdm9pZCB0aGF0LgogCQkJCSAqIEl0IHdpbGwgYW55d2F5IGNvcnJlY3RseSB1cGRhdGVkIGFmdGVyIHRoaXMKQEAgLTM3MTEsNzIgJiM0MzszNzI0LDE4IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwKIAlyZXR1cm4gZGFtb25fc2V0X3JlZ2lvbnModCwgJmFtcDthZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTsKIH0KIAotLyoKLSAqIGRhbW9uX21vdmluZ19zdW0oKSAtIENhbGN1bGF0ZSBhbiBpbmZlcnJlZCBtb3Zpbmcgc3VtIHZhbHVlLgotICogQG12c3VtOglJbmZlcnJlZCBzdW0gb2YgdGhlIGxhc3QgQGxlbl93aW5kb3cgdmFsdWVzLgotICogQG5vbXZzdW06CU5vbi1tb3Zpbmcgc3VtIG9mIHRoZSBsYXN0IGRpc2NyZXRlIEBsZW5fd2luZG93IHdpbmRvdyB2YWx1ZXMuCi0gKiBAbGVuX3dpbmRvdzoJVGhlIG51bWJlciBvZiBsYXN0IHZhbHVlcyB0byB0YWtlIGNhcmUgb2YuCi0gKiBAbmV3X3ZhbHVlOglOZXcgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwc2V1ZG8gbW92aW5nIHN1bS4KLSAqCi0gKiBNb3Zpbmcgc3VtIChtb3ZpbmcgYXZlcmFnZSAqIHdpbmRvdyBzaXplKSBpcyBnb29kIGZvciBoYW5kbGluZyBub2lzZSwgYnV0Ci0gKiB0aGUgY29zdCBvZiBrZWVwaW5nIHBhc3QgdmFsdWVzIGNhbiBiZSBoaWdoIGZvciBhcmJpdHJhcnkgd2luZG93IHNpemUuICBUaGlzCi0gKiBmdW5jdGlvbiBpbXBsZW1lbnRzIGEgbGlnaHR3ZWlnaHQgcHNldWRvIG1vdmluZyBzdW0gZnVuY3Rpb24gdGhhdCBkb2VzbiYjMzk7dAotICoga2VlcCB0aGUgcGFzdCB3aW5kb3cgdmFsdWVzLgotICoKLSAqIEl0IHNpbXBseSBhc3N1bWVzIHRoZXJlIHdhcyBubyBub2lzZSBpbiB0aGUgcGFzdCwgYW5kIGdldCB0aGUgbm8tbm9pc2UKLSAqIGFzc3VtZWQgcGFzdCB2YWx1ZSB0byBkcm9wIGZyb20gQG5vbXZzdW0gYW5kIEBsZW5fd2luZG93LiAgQG5vbXZzdW0gaXMgYQotICogbm9uLW1vdmluZyBzdW0gb2YgdGhlIGxhc3Qgd2luZG93LiAgRm9yIGV4YW1wbGUsIGlmIEBsZW5fd2luZG93IGlzIDEwIGFuZCB3ZQotICogaGF2ZSAyNSB2YWx1ZXMsIEBub212c3VtIGlzIHRoZSBzdW0gb2YgdGhlIDExdGggdG8gMjB0aCB2YWx1ZXMgb2YgdGhlIDI1Ci0gKiB2YWx1ZXMuICBIZW5jZSwgdGhpcyBmdW5jdGlvbiBzaW1wbHkgZHJvcHMgQG5vbXZzdW0gLyBAbGVuX3dpbmRvdyBmcm9tCi0gKiBnaXZlbiBAbXZzdW0gYW5kIGFkZCBAbmV3X3ZhbHVlLgotICoKLSAqIEZvciBleGFtcGxlLCBpZiBAbGVuX3dpbmRvdyBpcyAxMCBhbmQgQG5vbXZzdW0gaXMgNTAsIHRoZSBsYXN0IDEwIHZhbHVlcyBmb3IKLSAqIHRoZSBsYXN0IHdpbmRvdyBjb3VsZCBiZSB2YXJ5LCBlLmcuLCAwLCAxMCwgMCwgMTAsIDAsIDEwLCAwLCAwLCAwLCAyMC4gIEZvcgotICogY2FsY3VsYXRpbmcgbmV4dCBtb3Zpbmcgc3VtIHdpdGggYSBuZXcgdmFsdWUsIHdlIHNob3VsZCBkcm9wIDAgZnJvbSA1MCBhbmQKLSAqIGFkZCB0aGUgbmV3IHZhbHVlLiAgSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIGl0IGdvdCB2YWx1ZSA1IGZvciBlYWNoCi0gKiBvZiB0aGUgbGFzdCB0ZW4gdGltZXMuICBCYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiwgd2hlbiB0aGUgbmV4dCB2YWx1ZSBpcwotICogbWVhc3VyZWQsIGl0IGRyb3BzIHRoZSBhc3N1bWVkIHBhc3QgdmFsdWUsIDUgZnJvbSB0aGUgY3VycmVudCBzdW0sIGFuZCBhZGQKLSAqIHRoZSBuZXcgdmFsdWUgdG8gZ2V0IHRoZSB1cGRhdGVkIHBzZWR1by1tb3ZpbmcgYXZlcmFnZS4KLSAqCi0gKiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBjb3VsZCBoYXZlIGVycm9ycywgYnV0IHRoZSBlcnJvcnMgd2lsbCBiZSBkaXNhcHBlYXJlZAotICogZm9yIGV2ZXJ5IEBsZW5fd2luZG93IGFsaWduZWQgY2FsbHMuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAsIHRoZQotICogcHNldWRvIG1vdmluZyBzdW0gd2l0aCAxMXRoIHZhbHVlIHRvIDE5dGggdmFsdWUgd291bGQgaGF2ZSBhbiBlcnJvci4gIEJ1dAotICogdGhlIHN1bSB3aXRoIDIwdGggdmFsdWUgd2lsbCBub3QgaGF2ZSB0aGUgZXJyb3IuCi0gKgotICogUmV0dXJuOiBQc2V1ZG8tbW92aW5nIGF2ZXJhZ2UgYWZ0ZXIgZ2V0dGluZyB0aGUgQG5ld192YWx1ZS4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tb3Zpbmdfc3VtKHVuc2lnbmVkIGludCBtdnN1bSwgdW5zaWduZWQgaW50IG5vbXZzdW0sCi0JCXVuc2lnbmVkIGludCBsZW5fd2luZG93LCB1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlKQotewotCXJldHVybiBtdnN1bSAtIG5vbXZzdW0gLyBsZW5fd2luZG93ICYjNDM7IG5ld192YWx1ZTsKLX0KLQogLyoqCiAgKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkgLSBVcGRhdGUgdGhlIGFjY2VzcyByYXRlIG9mIGEgcmVnaW9uLgogICogQHI6CQlUaGUgREFNT04gcmVnaW9uIHRvIHVwZGF0ZSBmb3IgaXRzIGFjY2VzcyBjaGVjayByZXN1bHQuCiAgKiBAYWNjZXNzZWQ6CVdoZXRoZXIgdGhlIHJlZ2lvbiBoYXMgYWNjZXNzZWQgZHVyaW5nIGxhc3Qgc2FtcGxpbmcgaW50ZXJ2YWwuCi0gKiBAYXR0cnM6CVRoZSBkYW1vbl9hdHRycyBvZiB0aGUgREFNT04gY29udGV4dC4KICAqCiAgKiBVcGRhdGUgdGhlIGFjY2VzcyByYXRlIG9mIGEgcmVnaW9uIHdpdGggdGhlIHJlZ2lvbiYjMzk7cyBsYXN0IHNhbXBsaW5nIGludGVydmFsCiAgKiBhY2Nlc3MgY2hlY2sgcmVzdWx0LgogICoKICAqIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGNhbGxlZCBieSAmYW1wO2RhbW9uX29wZXJhdGlvbnMtJmd0O2NoZWNrX2FjY2Vzc2VzIGNhbGxiYWNrLgogICovCi12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCwKLQkJc3RydWN0IGRhbW9uX2F0dHJzICphdHRycykKJiM0Mzt2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCkKIHsKLQl1bnNpZ25lZCBpbnQgbGVuX3dpbmRvdyA9IDE7Ci0KLQkvKgotCSAqIHNhbXBsZV9pbnRlcnZhbCBjYW4gYmUgemVybywgYnV0IGNhbm5vdCBiZSBsYXJnZXIgdGhhbgotCSAqIGFnZ3JfaW50ZXJ2YWwsIG93aW5nIHRvIHZhbGlkYXRpb24gb2YgZGFtb25fc2V0X2F0dHJzKCkuCi0JICovCi0JaWYgKGF0dHJzLSZndDtzYW1wbGVfaW50ZXJ2YWwpCi0JCWxlbl93aW5kb3cgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpOwotCXItJmd0O25yX2FjY2Vzc2VzX2JwID0gZGFtb25fbW92aW5nX3N1bShyLSZndDtucl9hY2Nlc3Nlc19icCwKLQkJCXItJmd0O2xhc3RfbnJfYWNjZXNzZXMgKiAxMDAwMCwgbGVuX3dpbmRvdywKLQkJCWFjY2Vzc2VkID8gMTAwMDAgOiAwKTsKLQogCWlmIChhY2Nlc3NlZCkKIAkJci0mZ3Q7bnJfYWNjZXNzZXMmIzQzOyYjNDM7OwogfQpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmMKaW5kZXggNWMyZGE0NWY5ODhjZjkuLjYxNzI0NjQ5ODE3MzA0IDEwMDY0NAotLS0gYS9tbS9kYW1vbi9wYWRkci5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3BhZGRyLmMKQEAgLTgwLDcgJiM0Mzs4MCw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyLCB1bnNpZ25lZCBsb25nICpmb2xpb19zeikKIH0KIAogc3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwKLQkJc3RydWN0IGRhbW9uX2F0dHJzICphdHRycywgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpCiYjNDM7CQl1bnNpZ25lZCBsb25nIGFkZHJfdW5pdCkKIHsKIAlzdGF0aWMgcGh5c19hZGRyX3QgbGFzdF9hZGRyOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfZm9saW9fc3ogPSBQQUdFX1NJWkU7CkBAIC05MSwxMiAmIzQzOzkxLDEyIEBAIHN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsCiAJLyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi8KIAlpZiAoQUxJR05fRE9XTihsYXN0X2FkZHIsIGxhc3RfZm9saW9fc3opID09CiAJCQkJQUxJR05fRE9XTihzYW1wbGluZ19hZGRyLCBsYXN0X2ZvbGlvX3N6KSkgewotCQlkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTsKJiM0MzsJCWRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7CiAJCXJldHVybjsKIAl9CiAKIAlsYXN0X2FjY2Vzc2VkID0gZGFtb25fcGFfeW91bmcoc2FtcGxpbmdfYWRkciwgJmFtcDtsYXN0X2ZvbGlvX3N6KTsKLQlkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTsKJiM0MzsJZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkKTsKIAogCWxhc3RfYWRkciA9IHNhbXBsaW5nX2FkZHI7CiB9CkBAIC0xMDksOCAmIzQzOzEwOSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fcGFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KQogCiAJZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGN0eCkgewogCQlkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkgewotCQkJX19kYW1vbl9wYV9jaGVja19hY2Nlc3MoCi0JCQkJCXIsICZhbXA7Y3R4LSZndDthdHRycywgY3R4LSZndDthZGRyX3VuaXQpOwomIzQzOwkJCV9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHIsIGN0eC0mZ3Q7YWRkcl91bml0KTsKIAkJCW1heF9ucl9hY2Nlc3NlcyA9IG1heChyLSZndDtucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwppbmRleCA0MWY5M2ExODIzYmYxMy4uZGJmMmIwNTE1ZDU4MjkgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmMKQEAgLTE1Nyw3ICYjNDM7MTU3LDcgQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24gewogfTsKIAogc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKAotCQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24pCiYjNDM7CQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIHsKIAlzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqc3lzZnNfcmVnaW9uID0ga21hbGxvY19vYmooKnN5c2ZzX3JlZ2lvbik7CiAKQEAgLTE2NSw3ICYjNDM7MTY1LDcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKAogCQlyZXR1cm4gTlVMTDsKIAlzeXNmc19yZWdpb24tJmd0O2tvYmogPSAoc3RydWN0IGtvYmplY3Qpe307CiAJc3lzZnNfcmVnaW9uLSZndDthciA9IHJlZ2lvbi0mZ3Q7YXI7Ci0Jc3lzZnNfcmVnaW9uLSZndDtucl9hY2Nlc3NlcyA9IHJlZ2lvbi0mZ3Q7bnJfYWNjZXNzZXNfYnAgLyAxMDAwMDsKJiM0MzsJc3lzZnNfcmVnaW9uLSZndDtucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHJlZ2lvbiwgY3R4KTsKIAlzeXNmc19yZWdpb24tJmd0O2FnZSA9IHJlZ2lvbi0mZ3Q7YWdlOwogCXN5c2ZzX3JlZ2lvbi0mZ3Q7cHJvYmVzID0gTlVMTDsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3N5c2ZzX3JlZ2lvbi0mZ3Q7bGlzdCk7CkBAIC0zMTIyLDcgJiM0MzszMTIyLDcgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLAogCWlmICh0b3RhbF9ieXRlc19vbmx5KQogCQlyZXR1cm47CiAKLQlyZWdpb24gPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKHIpOwomIzQzOwlyZWdpb24gPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKHIsIGN0eCk7CiAJaWYgKCFyZWdpb24pCiAJCXJldHVybjsKIAlyZWdpb24tJmd0O3N6X2ZpbHRlcl9wYXNzZWQgPSBzel9maWx0ZXJfcGFzc2VkOwpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5mMWZhZWJiNmZmOTkzZiAxMDA2NDQKLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaApAQCAtMTE0LDcgJiM0MzsxMTQsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCQkJa3VuaXRfc2tpcCh0ZXN0LCAmIzM0O3JlZ2lvbiBhbGxvYyBmYWlsJiMzNDspOwogCQkJfQogCQkJci0mZ3Q7bnJfYWNjZXNzZXMgPSBhY2Nlc3Nlc1tpdF1baXJdOwotCQkJci0mZ3Q7bnJfYWNjZXNzZXNfYnAgPSBhY2Nlc3Nlc1tpdF1baXJdICogMTAwMDA7CiAJCQlkYW1vbl9hZGRfcmVnaW9uKHIsIHQpOwogCQl9CiAJCWl0JiM0MzsmIzQzOzsKQEAgLTE1MSw3ICYjNDM7MTUwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCWRhbW9uX2ZyZWVfdGFyZ2V0KHQpOwogCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7cmVnaW9uIGFsbG9jIGZhaWwmIzM0Oyk7CiAJfQotCXItJmd0O25yX2FjY2Vzc2VzX2JwID0gNDIwMDAwOwogCXItJmd0O25yX2FjY2Vzc2VzID0gNDI7CiAJci0mZ3Q7bGFzdF9ucl9hY2Nlc3NlcyA9IDE1OwogCXItJmd0O2FnZSA9IDEwOwpAQCAtMTY0LDcgJiM0MzsxNjIsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2F0KHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctJmd0O2FyLnN0YXJ0LCAyNXVsKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctJmd0O2FyLmVuZCwgMTAwdWwpOwogCi0JS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O25yX2FjY2Vzc2VzX2JwLCByX25ldy0mZ3Q7bnJfYWNjZXNzZXNfYnApOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDtucl9hY2Nlc3Nlcywgcl9uZXctJmd0O25yX2FjY2Vzc2VzKTsKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7bGFzdF9ucl9hY2Nlc3Nlcywgcl9uZXctJmd0O2xhc3RfbnJfYWNjZXNzZXMpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDthZ2UsIHJfbmV3LSZndDthZ2UpOwpAQCAtMTg3LDcgJiM0MzsxODQsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3R3byhzdHJ1Y3Qga3VuaXQgKnRlc3QpCiAJCWt1bml0X3NraXAodGVzdCwgJiMzNDtyZWdpb24gYWxsb2MgZmFpbCYjMzQ7KTsKIAl9CiAJci0mZ3Q7bnJfYWNjZXNzZXMgPSAxMDsKLQlyLSZndDtucl9hY2Nlc3Nlc19icCA9IDEwMDAwMDsKIAlyLSZndDthZ2UgPSA5OwogCWRhbW9uX2FkZF9yZWdpb24ociwgdCk7CiAJcjIgPSBkYW1vbl9uZXdfcmVnaW9uKDEwMCwgMzAwKTsKQEAgLTE5Niw3ICYjNDM7MTkyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KQogCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7c2Vjb25kIHJlZ2lvbiBhbGxvYyBmYWlsJiMzNDspOwogCX0KIAlyMi0mZ3Q7bnJfYWNjZXNzZXMgPSAyMDsKLQlyMi0mZ3Q7bnJfYWNjZXNzZXNfYnAgPSAyMDAwMDA7CiAJcjItJmd0O2FnZSA9IDIxOwogCWRhbW9uX2FkZF9yZWdpb24ocjIsIHQpOwogCkBAIC0yMDQsNyAmIzQzOzE5OSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7YXIuc3RhcnQsIDB1bCk7CiAJS1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItJmd0O2FyLmVuZCwgMzAwdWwpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDtucl9hY2Nlc3NlcywgMTZ1KTsKLQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci0mZ3Q7bnJfYWNjZXNzZXNfYnAsIDE2MDAwMHUpOwogCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLSZndDthZ2UsIDE3dSk7CiAKIAlpID0gMDsKQEAgLTI1Miw3ICYjNDM7MjQ2LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdCkKIAkJCWt1bml0X3NraXAodGVzdCwgJiMzNDtyZWdpb24gYWxsb2MgZmFpbCYjMzQ7KTsKIAkJfQogCQlyLSZndDtucl9hY2Nlc3NlcyA9IG5yc1tpXTsKLQkJci0mZ3Q7bnJfYWNjZXNzZXNfYnAgPSBucnNbaV0gKiAxMDAwMDsKIAkJZGFtb25fYWRkX3JlZ2lvbihyLCB0KTsKIAl9CiAKQEAgLTU1Miw3ICYjNDM7NTQ1LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGt1bml0ICp0ZXN0KQogCQlrdW5pdF9za2lwKHRlc3QsICYjMzQ7cmVnaW9uIGFsbG9jIGZhaWwmIzM0Oyk7CiAKIAlyLSZndDtucl9hY2Nlc3NlcyA9IDE1OwotCXItJmd0O25yX2FjY2Vzc2VzX2JwID0gMTUwMDAwOwogCXItJmd0O2FnZSA9IDIwOwogCiAJbmV3X2F0dHJzID0gKHN0cnVjdCBkYW1vbl9hdHRycyl7CkBAIC02MDQsMTggJiM0Mzs1OTYsMjcgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zZXRfYXR0cnMoc3RydWN0IGt1bml0ICp0ZXN0KQogCWRhbW9uX2Rlc3Ryb3lfY3R4KGMpOwogfQogCi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21vdmluZ19zdW0oc3RydWN0IGt1bml0ICp0ZXN0KQomIzQzO3N0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbXZzdW0oc3RydWN0IGt1bml0ICp0ZXN0KQogewotCXVuc2lnbmVkIGludCBtdnN1bSA9IDUwMDAwLCBub212c3VtID0gNTAwMDAsIGxlbl93aW5kb3cgPSAxMDsKLQl1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlc1tdID0gezEwMDAwLCAwLCAxMDAwMCwgMCwgMCwgMCwgMTAwMDAsIDAsIDAsIDB9OwotCXVuc2lnbmVkIGludCBleHBlY3RzW10gPSB7NTUwMDAsIDUwMDAwLCA1NTAwMCwgNTAwMDAsIDQ1MDAwLCA0MDAwMCwKLQkJNDUwMDAsIDQwMDAwLCAzNTAwMCwgMzAwMDB9OwomIzQzOwl1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHsKJiM0MzsJCS8qIGN1cnJlbnQgdmFsdWUsIGxhc3QgdmFsdWUsIHJlbWFpbmluZyB3aW5kb3cgKGJwKSAqLwomIzQzOwkJMCwgNDksIDEwMDAwLCA0OSwJLyogMCAmIzQzOyA0OSAqIDEgKi8KJiM0MzsJCTMsIDEwLCA3MDAwLCAxMCwJLyogMyAmIzQzOyAxMCAqIDAuNyAqLwomIzQzOwkJMywgMTAsIDUwMDAsIDgsCQkvKiAzICYjNDM7IDEwICogMC41ICovCiYjNDM7CQkzMiwgMTAwLCAxMDAwLCA0MiwJLyogMzIgJiM0MzsgMTAwICogMC4xICovCiYjNDM7CQk0MiwgNDksIDAsIDQyLAkJLyogNDIgJiM0MzsgNDkgKiAwICovCiYjNDM7CX07CiYjNDM7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShuZXdfdmFsdWVzKTsgaSYjNDM7JiM0MzspIHsKLQkJbXZzdW0gPSBkYW1vbl9tb3Zpbmdfc3VtKG12c3VtLCBub212c3VtLCBsZW5fd2luZG93LAotCQkJCW5ld192YWx1ZXNbaV0pOwotCQlLVU5JVF9FWFBFQ1RfRVEodGVzdCwgbXZzdW0sIGV4cGVjdHNbaV0pOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShpbnB1dF9leHBlY3RzKTsgaSAmIzQzOz0gNCkgewomIzQzOwkJdW5zaWduZWQgbG9uZyBjdXJyZW50X25yID0gaW5wdXRfZXhwZWN0c1tpXTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbGFzdF9uciA9IGlucHV0X2V4cGVjdHNbaSAmIzQzOyAxXTsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgbGVmdF93aW5kb3dfYnAgPSBpbnB1dF9leHBlY3RzW2kgJiM0MzsgMl07CiYjNDM7CQl1bnNpZ25lZCBsb25nIGV4cGVjdCA9IGlucHV0X2V4cGVjdHNbaSAmIzQzOyAzXTsKJiM0MzsKJiM0MzsJCUtVTklUX0VYUEVDVF9FUSh0ZXN0LCBkYW1vbl9tdnN1bShjdXJyZW50X25yLCBsYXN0X25yLAomIzQzOwkJCQkJbGVmdF93aW5kb3dfYnApLCBleHBlY3QpOwogCX0KIH0KIApAQCAtMTQ2OSw3ICYjNDM7MTQ3MCw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3VuaXRfY2FzZSBkYW1vbl90ZXN0X2Nhc2VzW10gPSB7CiAJS1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSwKIAlLVU5JVF9DQVNFKGRhbW9uX3Rlc3Rfc2V0X2F0dHJzKSwKLQlLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbW92aW5nX3N1bSksCiYjNDM7CUtVTklUX0NBU0UoZGFtb25fdGVzdF9tdnN1bSksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLAogCUtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbCksCiAJS1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FscyksCmRpZmYgLS1naXQgYS9tbS9kYW1vbi92YWRkci5jIGIvbW0vZGFtb24vdmFkZHIuYwppbmRleCBlNzNlYzFjZTAxNmU1Yi4uMjA1OGRiOWMwMWQ1MmYgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL3ZhZGRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZGFtb24vdmFkZHIuYwpAQCAtNDkzLDI3ICYjNDM7NDkzLDI2IEBAIHN0YXRpYyBib29sIGRhbW9uX3ZhX3lvdW5nKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAgKiByCXRoZSByZWdpb24gdG8gYmUgY2hlY2tlZAogICovCiBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQlzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIHNhbWVfdGFyZ2V0LAotCQkJCXN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpCiYjNDM7CQkJCXN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgc2FtZV90YXJnZXQpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfZm9saW9fc3ogPSBQQUdFX1NJWkU7CiAJc3RhdGljIGJvb2wgbGFzdF9hY2Nlc3NlZDsKIAogCWlmICghbW0pIHsKLQkJZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBmYWxzZSwgYXR0cnMpOwomIzQzOwkJZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBmYWxzZSk7CiAJCXJldHVybjsKIAl9CiAKIAkvKiBJZiB0aGUgcmVnaW9uIGlzIGluIHRoZSBsYXN0IGNoZWNrZWQgcGFnZSwgcmV1c2UgdGhlIHJlc3VsdCAqLwogCWlmIChzYW1lX3RhcmdldCAmYW1wOyZhbXA7IChBTElHTl9ET1dOKGxhc3RfYWRkciwgbGFzdF9mb2xpb19zeikgPT0KIAkJCQlBTElHTl9ET1dOKHItJmd0O3NhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSkgewotCQlkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTsKJiM0MzsJCWRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7CiAJCXJldHVybjsKIAl9CiAKIAlsYXN0X2FjY2Vzc2VkID0gZGFtb25fdmFfeW91bmcobW0sIHItJmd0O3NhbXBsaW5nX2FkZHIsICZhbXA7bGFzdF9mb2xpb19zeik7Ci0JZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkLCBhdHRycyk7CiYjNDM7CWRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7CiAKIAlsYXN0X2FkZHIgPSByLSZndDtzYW1wbGluZ19hZGRyOwogfQpAQCAtNTMwLDggJiM0Mzs1MjksNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3ZhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCkKIAkJbW0gPSBkYW1vbl9nZXRfbW0odCk7CiAJCXNhbWVfdGFyZ2V0ID0gZmFsc2U7CiAJCWRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7Ci0JCQlfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhtbSwgciwgc2FtZV90YXJnZXQsCi0JCQkJCSZhbXA7Y3R4LSZndDthdHRycyk7CiYjNDM7CQkJX19kYW1vbl92YV9jaGVja19hY2Nlc3MobW0sIHIsIHNhbWVfdGFyZ2V0KTsKIAkJCW1heF9ucl9hY2Nlc3NlcyA9IG1heChyLSZndDtucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTsKIAkJCXNhbWVfdGFyZ2V0ID0gdHJ1ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvZGFtb24vZHJnbl9kdW1wX2RhbW9uX3N0YXR1cy5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkKaW5kZXggOTcyOTQ4ZTYyMTVmMWQuLjQ5NDJhZmRmNDZjZDQ0IDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkKQEAgLTU5LDcgJiM0Mzs1OSw2IEBAIGRlZiByZWdpb25fdG9fZGljdChyZWdpb24pOgogICAgICAgICBbJiMzOTthciYjMzk7LCBhZGRyX3JhbmdlX3RvX2RpY3RdLAogICAgICAgICBbJiMzOTtzYW1wbGluZ19hZGRyJiMzOTssIGludF0sCiAgICAgICAgIFsmIzM5O25yX2FjY2Vzc2VzJiMzOTssIGludF0sCi0gICAgICAgIFsmIzM5O25yX2FjY2Vzc2VzX2JwJiMzOTssIGludF0sCiAgICAgICAgIFsmIzM5O2FnZSYjMzk7LCBpbnRdLAogICAgICAgICBdKQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTUyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIFBhdGNoIEFuYWx5c2lzIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIHRoZSBEQU1PTiBzdWJzeXN0ZW0gaW4gdGhlIExpbnV4IGtlcm5lbC4gVGhlIGtleSBjaGFuZ2UgaXMgdGhlIHJlbW92YWwgb2YgYG5yX2FjY2Vzc2VzX2JwYCBmcm9tIGBzdHJ1Y3QgZGFtb25fcmVnaW9uYCBhbmQgdGhlIGludHJvZHVjdGlvbiBvZiB0aGlzIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSgpYCBmdW5jdGlvbiwgd2hpY2ggY2FsY3VsYXRlcyBhIHBzZXVkbyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuIEVzc2VudGlhbGx5LCB0aGV5JiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIGEgc3RyYWlnaHRmb3J3YXJkIGNvdW50IGFuZCB0cnlpbmcgYSBtb3JlIG51YW5jZWQgYWNjZXNzIHJhdGUgcmVwcmVzZW50YXRpb24uIFRoaXMgbmV3IGZ1bmN0aW9uLCBhbG9uZyB3aXRoIHRoZSBtb2RpZmljYXRpb24gb2YgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgIGFuZCBgX19kYW1vc192YWxpZF90YXJnZXRgIHRvIHV0aWxpemUgdGhpcyBsb2dpYywgaXMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZS4KClNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgYWNyb3NzIHNldmVyYWwgZmlsZXMgKGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGBtbS9kYW1vbi92YWRkci5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2ApLCBpdCYjMzk7cyBmdW5jdGlvbmFsIGNvZGUgdGhhdCBkaXJlY3RseSBhbHRlcnMgREFNT04mIzM5O3MgZXhlY3V0aW9uIGZsb3cuIEFuZCBjb25zaWRlcmluZyB0aGF0IERBTU9OIGNhbiBtb25pdG9yIHZpcnR1YWwgYW5kIHBoeXNpY2FsIGFkZHJlc3NlcywgdGhpcyBtYWtlcyBpdCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGVyZWZvcmUsIGl0JiMzOTtzIGRlZmluaXRlbHkgV29ydGhGdXp6aW5nLgoKTm93LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGZ1bmN0aW9ucyB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24uIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgd2l0aCB0aGUgbmV3IGZ1bmN0aW9ucywgc3BlY2lmaWNhbGx5OgoKKiAgIGBkYW1vbl9tdnN1bWAKKiAgIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWAKCkFuZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCB3aGljaCBhbHNvIHdhcnJhbnQgY2xvc2UgYXR0ZW50aW9uOgoKKiAgIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYAoqICAgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YAoqICAgYGRhbW9zX2FwcGx5X3NjaGVtZWAKKiAgIGBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzYAoqICAgYGRhbW9zX2FkanVzdF9xdW90YWAKKiAgIGBkYW1vbl9tZXJnZV90d29fcmVnaW9uc2AKKiAgIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYAoqICAgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGAKKiAgIGBrZGFtb25kX2ZuYAoqICAgYF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzYAoqICAgYF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzYAoKTmV4dCBzdGVwIGlzIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMsIEkgbmVlZCB0byBrbm93IHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBmb3IgREFNT04gdG8gc2VlIGhvdyB0byBlbmFibGUgdGhpcyBmdW5jdGlvbmFsaXR5IGR1cmluZyBmdXp6aW5nLiBJJiMzOTtsbCBzZWFyY2ggZm9yIGBEQU1PTmAgd2l0aGluIGBtbS9kYW1vbi9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAwNTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODQ4CgkJCQkJCQlvdXRwdXQ6IDI3MAoJCQkJCQkJdGhvdWdodHM6IDY5NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBhdCB0aGUgZGlmZi4gSXQmIzM5O3MgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMsIEkgbmVlZCB0byBlbmFibGUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIE1ha2VzIHNlbnNlLgoKTm93LCB0aGUgZm9jdXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBjcml0aWNhbCBmb3IgZnV6emluZy4gSSYjMzk7dmUgaWRlbnRpZmllZCBzZXZlcmFsIGtleSBmdW5jdGlvbnMgdGhhdCBzZWVtIGxpa2UgZ29vZCB0YXJnZXRzOiBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gLCBgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZWAsIGBfX2RhbW9zX3ZhbGlkX3RhcmdldGAsIGBkYW1vc19hcHBseV9zY2hlbWVgLCBgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlc2AsIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNgLCBgZGFtb25fbWVyZ2VfcmVnaW9uc19vZmAsIGBkYW1vbl9zcGxpdF9yZWdpb25fYXRgLCBgX19kYW1vbl9wYV9jaGVja19hY2Nlc3NgLCBhbmQgYF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzYC4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nIHRoZSB2aXNpYmlsaXR5IG9mIGBkYW1vbl9tdnN1bWAgYmVjYXVzZSBpdCBsb29rcyByZWxhdGVkIHRvIHRoZSBhY2Nlc3Mgc3VtbWFyaWVzLCBhbmQgd2hldGhlciBpdCYjMzk7cyBzdGF0aWMgb3IgZXhwb3J0ZWQgaW1wYWN0cyBteSBmdXp6aW5nIGFwcHJvYWNoLiBBaCwgaXQmIzM5O3Mgc3RhdGljIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCBTeXprYWxsZXIgY2FuIHNvbWV0aW1lcyByZWFjaCBzdGF0aWMgZnVuY3Rpb25zIGlmIHJlYWNoYWJsZSB0aHJvdWdoIGFub3RoZXIgbWV0aG9kLCBidXQgZm9yIG5vdyBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWAgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBuZXcgZnVuY3Rpb24sIEkmIzM5O2xsIHByaW9yaXRpemUgaXQgZm9yIGZ1enppbmcuCgpMZXQmIzM5O3MgcmVmaW5lIHRoZSBsaXN0LiBJJiMzOTttIGdvaW5nIHRvIHNldCB0aGVzZSBhcyB0aGUgRm9jdXNTeW1ib2xzLCBzaW5jZSB0aGVzZSBhcmUgbGlrZWx5IHRoZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgYW5kIGRhdGEgcHJvY2Vzc2luZyBmdW5jdGlvbnMgZm9yIERBTU9OOgoKKiAgIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWAKKiAgIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYAoqICAgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YAoqICAgYGRhbW9zX2FwcGx5X3NjaGVtZWAKKiAgIGBkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzYAoqICAgYGRhbW9zX2FkanVzdF9xdW90YWAKKiAgIGBkYW1vbl9tZXJnZV90d29fcmVnaW9uc2AKKiAgIGBkYW1vbl9tZXJnZV9yZWdpb25zX29mYAoqICAgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGAKKiAgIGBfX2RhbW9uX3BhX2NoZWNrX2FjY2Vzc2AKKiAgIGBfX2RhbW9uX3ZhX2NoZWNrX2FjY2Vzc2AKCkFscmlnaHQsIHRoYXQgY292ZXJzIHRoZSBlc3NlbnRpYWxzLiBJJiMzOTtsbCBwcm9jZWVkIHdpdGggdGhlICYjMzQ7c2V0LXJlc3VsdHMmIzM0OyBjYWxsLCBnaXZlbiB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDA1OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX25yX2FjY2Vzc2VzX212c3VtJiMzNDssCiAgICAmIzM0O2RhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUmIzM0OywKICAgICYjMzQ7X19kYW1vc192YWxpZF90YXJnZXQmIzM0OywKICAgICYjMzQ7ZGFtb3NfYXBwbHlfc2NoZW1lJiMzNDssCiAgICAmIzM0O2RhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXMmIzM0OywKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3R3b19yZWdpb25zJiMzNDssCiAgICAmIzM0O2RhbW9uX21lcmdlX3JlZ2lvbnNfb2YmIzM0OywKICAgICYjMzQ7ZGFtb25fc3BsaXRfcmVnaW9uX2F0JiMzNDssCiAgICAmIzM0O19fZGFtb25fcGFfY2hlY2tfYWNjZXNzJiMzNDssCiAgICAmIzM0O19fZGFtb25fdmFfY2hlY2tfYWNjZXNzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtIGJ5IHJlcGxhY2luZyB0aGUgYG5yX2FjY2Vzc2VzX2JwYCBmaWVsZCB3aXRoIGEgcHNldWRvIG1vdmluZyBzdW0gY2FsY3VsYXRpb24gKGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWApLiBUaGlzIGFmZmVjdHMgaG93IGFjY2VzcyBmcmVxdWVuY2llcyBhcmUgY2FsY3VsYXRlZCwgbWVyZ2VkLCBzcGxpdCwgYW5kIGV2YWx1YXRlZCBmb3Igc2NoZW1lcyBhY3Jvc3MgYm90aCBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIG1vbml0b3JpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSYjMzQ7LAogICAgJiMzNDtkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlJiMzNDssCiAgICAmIzM0O19fZGFtb3NfdmFsaWRfdGFyZ2V0JiMzNDssCiAgICAmIzM0O2RhbW9zX2FwcGx5X3NjaGVtZSYjMzQ7LAogICAgJiMzNDtkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV90d29fcmVnaW9ucyYjMzQ7LAogICAgJiMzNDtkYW1vbl9tZXJnZV9yZWdpb25zX29mJiMzNDssCiAgICAmIzM0O2RhbW9uX3NwbGl0X3JlZ2lvbl9hdCYjMzQ7LAogICAgJiMzNDtfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyYjMzQ7LAogICAgJiMzNDtfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSBieSByZXBsYWNpbmcgdGhlIGBucl9hY2Nlc3Nlc19icGAgZmllbGQgd2l0aCBhIHBzZXVkbyBtb3Zpbmcgc3VtIGNhbGN1bGF0aW9uIChgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gKS4gVGhpcyBhZmZlY3RzIGhvdyBhY2Nlc3MgZnJlcXVlbmNpZXMgYXJlIGNhbGN1bGF0ZWQsIG1lcmdlZCwgc3BsaXQsIGFuZCBldmFsdWF0ZWQgZm9yIHNjaGVtZXMgYWNyb3NzIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0zMFQwNTo1NToyNi4xMDU3NDM3NjlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NjQ1NzcwMTgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX25yX2FjY2Vzc2VzX212c3VtXCIsXG4gICAgXCJkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlXCIsXG4gICAgXCJfX2RhbW9zX3ZhbGlkX3RhcmdldFwiLFxuICAgIFwiZGFtb3NfYXBwbHlfc2NoZW1lXCIsXG4gICAgXCJkYW1vc19jYWxjX2VsaWdpYmxlX2J5dGVzXCIsXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgICBcImRhbW9uX21lcmdlX3R3b19yZWdpb25zXCIsXG4gICAgXCJkYW1vbl9tZXJnZV9yZWdpb25zX29mXCIsXG4gICAgXCJkYW1vbl9zcGxpdF9yZWdpb25fYXRcIixcbiAgICBcIl9fZGFtb25fcGFfY2hlY2tfYWNjZXNzXCIsXG4gICAgXCJfX2RhbW9uX3ZhX2NoZWNrX2FjY2Vzc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTU9OaXRvcikgc3Vic3lzdGVtIGJ5IHJlcGxhY2luZyB0aGUgYG5yX2FjY2Vzc2VzX2JwYCBmaWVsZCB3aXRoIGEgcHNldWRvIG1vdmluZyBzdW0gY2FsY3VsYXRpb24gKGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWApLiBUaGlzIGFmZmVjdHMgaG93IGFjY2VzcyBmcmVxdWVuY2llcyBhcmUgY2FsY3VsYXRlZCwgbWVyZ2VkLCBzcGxpdCwgYW5kIGV2YWx1YXRlZCBmb3Igc2NoZW1lcyBhY3Jvc3MgYm90aCBwaHlzaWNhbCBhbmQgdmlydHVhbCBhZGRyZXNzIG1vbml0b3JpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgdGhhdCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTU6MjYuMTA1NzUwOTk5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTc5MjA0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2ZGZjMDY2ZGYwZWE2NmYyMTBhNDBhYTg0NzliOGExNDRkYWE0OTY2XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDA1OjU1OjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGFtb24uaCBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxcbmluZGV4IGNmYmJmOGJhMjhmNjMyLi44MDVlMDg5ZmY0ZjJmNiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcXG5AQCAtNDUsOCArNDUsNiBAQCBzdHJ1Y3QgZGFtb25fc2l6ZV9yYW5nZSB7XFxuICAqIEBhcjpcXHRcXHRcXHRUaGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgcmVnaW9uLlxcbiAgKiBAc2FtcGxpbmdfYWRkcjpcXHRBZGRyZXNzIG9mIHRoZSBzYW1wbGUgZm9yIHRoZSBuZXh0IGFjY2VzcyBjaGVjay5cXG4gICogQG5yX2FjY2Vzc2VzOlxcdEFjY2VzcyBmcmVxdWVuY3kgb2YgdGhpcyByZWdpb24uXFxuLSAqIEBucl9hY2Nlc3Nlc19icDpcXHRAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnQgKDAuMDElKSB0aGF0IHVwZGF0ZWQgZm9yXFxuLSAqXFx0XFx0XFx0ZWFjaCBzYW1wbGluZyBpbnRlcnZhbC5cXG4gICogQHByb2JlX2hpdHM6XFx0XFx0TnVtYmVyIG9mIHByb2JlLXBvc2l0aXZlIHJlZ2lvbiBzYW1wbGVzLlxcbiAgKiBAbGlzdDpcXHRcXHRMaXN0IGhlYWQgZm9yIHNpYmxpbmdzLlxcbiAgKiBAYWdlOlxcdFxcdEFnZSBvZiB0aGlzIHJlZ2lvbi5cXG5AQCAtNTksMTMgKzU3LDYgQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xcbiAgKiBub3QgYmUgZG9uZSB3aXRoIGRpcmVjdCBhY2Nlc3MgYnV0IHdpdGggdGhlIGhlbHBlciBmdW5jdGlvbixcXG4gICogZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSgpLlxcbiAgKlxcbi0gKiBAbnJfYWNjZXNzZXNfYnAgaXMgYW5vdGhlciByZXByZXNlbnRhdGlvbiBvZiBAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnRcXG4tICogKDEgaW4gMTAsMDAwKSB0aGF0IHVwZGF0ZWQgZm9yIGV2ZXJ5IFxcdTAwMjZkYW1vbl9hdHRycy1cXHUwMDNlc2FtcGxlX2ludGVydmFsIGluIGFcXG4tICogbWFubmVyIHNpbWlsYXIgdG8gbW92aW5nIHN1bS4gIEJ5IHRoZSBhbGdvcml0aG0sIHRoaXMgdmFsdWUgYmVjb21lc1xcbi0gKiBAbnJfYWNjZXNzZXMgKiAxMDAwMCBmb3IgZXZlcnkgXFx1MDAyNnN0cnVjdCBkYW1vbl9hdHRycy1cXHUwMDNlYWdncl9pbnRlcnZhbC4gIFRoaXMgY2FuXFxuLSAqIGJlIHVzZWQgd2hlbiB0aGUgYWdncmVnYXRpb24gaW50ZXJ2YWwgaXMgdG9vIGh1Z2UgYW5kIHRoZXJlZm9yZSBjYW5ub3Qgd2FpdFxcbi0gKiBmb3IgaXQgYmVmb3JlIGdldHRpbmcgdGhlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMuXFxuLSAqXFxuICAqIEBhZ2UgaXMgaW5pdGlhbGx5IHplcm8sIGluY3JlYXNlZCBmb3IgZWFjaCBhZ2dyZWdhdGlvbiBpbnRlcnZhbCwgYW5kIHJlc2V0XFxuICAqIHRvIHplcm8gYWdhaW4gaWYgdGhlIGFjY2VzcyBmcmVxdWVuY3kgaXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLiAgSWYgdHdvXFxuICAqIHJlZ2lvbnMgYXJlIG1lcmdlZCBpbnRvIGEgbmV3IHJlZ2lvbiwgYm90aCBAbnJfYWNjZXNzZXMgYW5kIEBhZ2Ugb2YgdGhlIG5ld1xcbkBAIC03NSw3ICs2Niw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSBhcjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xcbiBcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXM7XFxuLVxcdHVuc2lnbmVkIGludCBucl9hY2Nlc3Nlc19icDtcXG4gXFx0dW5zaWduZWQgY2hhciBwcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuIFxcbkBAIC0xMDExLDExICsxMDAxLDEyIEBAIHN0cnVjdCBkYW1vbl9wcm9iZSAqZGFtb25fbmV3X3Byb2JlKHZvaWQpO1xcbiB2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpO1xcbiBcXG4gc3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7XFxuK3Vuc2lnbmVkIGludCBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpO1xcbiBcXG4gaW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBucl9yYW5nZXMsIHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeik7XFxuLXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxcbi1cXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKTtcXG4rdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpO1xcbiBcXG4gc3RydWN0IGRhbW9zX2ZpbHRlciAqZGFtb3NfbmV3X2ZpbHRlcihlbnVtIGRhbW9zX2ZpbHRlcl90eXBlIHR5cGUsXFxuIFxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxcbmluZGV4IDc4Mzg4NTM4YWNmNDQ2Li44ODUxNzI3YWUxNjI3YSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oXFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxcbkBAIC03OCw5ICs3OCwxMSBAQCBUUkFDRV9FVkVOVF9DT05ESVRJT04oZGFtb3NfYmVmb3JlX2FwcGx5LFxcbiBcXG4gXFx0VFBfUFJPVE8odW5zaWduZWQgaW50IGNvbnRleHRfaWR4LCB1bnNpZ25lZCBpbnQgc2NoZW1lX2lkeCxcXG4gXFx0XFx0dW5zaWduZWQgaW50IHRhcmdldF9pZHgsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLVxcdFxcdHVuc2lnbmVkIGludCBucl9yZWdpb25zLCBib29sIGRvX3RyYWNlKSxcXG4rXFx0XFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzLCB1bnNpZ25lZCBpbnQgbnJfcmVnaW9ucyxcXG4rXFx0XFx0Ym9vbCBkb190cmFjZSksXFxuIFxcbi1cXHRUUF9BUkdTKGNvbnRleHRfaWR4LCBzY2hlbWVfaWR4LCB0YXJnZXRfaWR4LCByLCBucl9yZWdpb25zLCBkb190cmFjZSksXFxuK1xcdFRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX2FjY2Vzc2VzLFxcbitcXHRcXHRucl9yZWdpb25zLCBkb190cmFjZSksXFxuIFxcbiBcXHRUUF9DT05ESVRJT04oZG9fdHJhY2UpLFxcbiBcXG5AQCAtMTAxLDcgKzEwMyw3IEBAIFRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vc19iZWZvcmVfYXBwbHksXFxuIFxcdFxcdF9fZW50cnktXFx1MDAzZXRhcmdldF9pZHggPSB0YXJnZXRfaWR4O1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VzdGFydCA9IHItXFx1MDAzZWFyLnN0YXJ0O1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2VlbmQgPSByLVxcdTAwM2Vhci5lbmQ7XFxuLVxcdFxcdF9fZW50cnktXFx1MDAzZW5yX2FjY2Vzc2VzID0gci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgLyAxMDAwMDtcXG4rXFx0XFx0X19lbnRyeS1cXHUwMDNlbnJfYWNjZXNzZXMgPSBucl9hY2Nlc3NlcztcXG4gXFx0XFx0X19lbnRyeS1cXHUwMDNlYWdlID0gci1cXHUwMDNlYWdlO1xcbiBcXHRcXHRfX2VudHJ5LVxcdTAwM2Vucl9yZWdpb25zID0gbnJfcmVnaW9ucztcXG4gXFx0KSxcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXFxuaW5kZXggMDI3MjUwZTQzYzY2ZjIuLmY1MmE4OWY5ZmQ5NzdkIDEwMDY0NFxcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xcbkBAIC0yMDgsNiArMjA4LDcxIEBAIHN0YXRpYyBzdHJ1Y3QgZGFtb25fcHJvYmUgKmRhbW9uX250aF9wcm9iZShpbnQgbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4rLypcXG4rICogZGFtb25fbXZzdW0oKSAtIFJldHVybnMgcHNldWRvIG1vdmluZyBzdW0gdmFsdWUgZm9yIGEgdGltZSB3aW5kb3cuXFxuKyAqIEBjdXJyZW50X25yOlxcdFxcdFRoZSB2YWx1ZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXFxuKyAqIEBsYXN0X25yOlxcdFxcdFRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiB3aW5kb3cuXFxuKyAqIEBsZWZ0X3dpbmRvd19icDpcXHRMZWZ0IHRpbWUgb2YgdGhlIGN1cnJlbnQgYWdncmVnYXRpb24gd2luZG93LlxcbisgKlxcbisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBvZiBhIGNvdW50ZXIgdGhhdCBpc1xcbisgKiBhZ2dyZWdhdGVkIGZvciBlYWNoIHRpbWUgd2luZG93LiAgQGN1cnJlbnRfbnIgaXMgdGhlIHZhbHVlIG9mIHRoZSBjb3VudGVyXFxuKyAqIHRoYXQgYWdncmVnYXRlZCBzbyBmYXIgKG1heWJlIG5vdCB5ZXQgY29tcGxldGUpLCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlXFxuKyAqIGN1cnJlbnQgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuICBAbGFzdF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgdGhhdFxcbisgKiBoYXMgY29tcGxldGVseSBhZ2dyZWdhdGVkIGluIHRoZSBsYXN0IGFnZ3JlZ2F0aW9uIHRpbWUgd2luZG93LlxcbisgKiBAbGVmdF93aW5kb3dfYnAgcmVwcmVzZW50cyBob3cgbXVjaCB0aW1lIGlzIGxlZnQgZm9yIHRoZSBjdXJyZW50IGFnZ3JlZ2F0aW9uXFxuKyAqIHRpbWUgd2luZG93IGluIGJwICgxLzEwLDAwMCkuICBGb3IgZXhhbXBsZSwgdGhlIGFnZ3JlZ2F0aW9uIHRpbWUgd2luZG93IGlzXFxuKyAqIGZvciBldmVyeSAxMCBzZWNvbmRzIGFuZCA3IHNlY29uZHMgaGFzIHBhc3NlZCBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZVxcbisgKiBjdXJyZW50IHdpbmRvdywgdGhpcyBwYXJhbWV0ZXIgd2lsbCBiZSAzMDAwICgoMTAgLSA3KSAvIDEwICogMTAwMDApLlxcbisgKlxcbisgKiBUaGUgbG9naWMgYXNzdW1lcyB0aGUgYWdncmVnYXRpb24gaW4gdGhlIGxhc3QgcGhhc2Ugd2FzIG1hZGUgaW4gYSBzaW5nbGVcXG4rICogc3BlZWQuICBCYXNlZCBvbiB0aGUgYXNzdW1wdGlvbiwgdGhlIHZhbHVlIGZyb20gdGhlIGxhc3Qgd2luZG93IHRoYXQgbmVlZHNcXG4rICogdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBvcnRpb24gb2YgdGhlIGxhc3RcXG4rICogdmFsdWUgYmFzZWQgb24gdGhlIHJlbWFpbmluZyB0aW1lIHdpbmRvdy5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9ucixcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxcbit7XFxuK1xcdHJldHVybiBjdXJyZW50X25yICsgbXVsdF9mcmFjKGxhc3RfbnIsIGxlZnRfd2luZG93X2JwLCAxMDAwMCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bSgpIC0gUmV0dXJucyBtb3Zpbmcgc3VtIGFjY2VzcyBmcmVxdWVuY3kgc2NvcmUuXFxuKyAqIEByOlxcdFxcdFJlZ2lvbiB0byBnZXQgdGhlIGFjY2VzcyBmcmVxdWVuY3kgb2YuXFxuKyAqIEBjdHg6XFx0REFNT04gY29udGV4dCBvZiBAci5cXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGZvciBob3cgbWFueSBzYW1wbGluZyBpdGVyYXRpb25zIGluIHRoZSBsYXN0XFxuKyAqIGFnZ3JlZ2F0aW9uIGludGVydmFsIChcXHUwMDI2ZGFtb25fYXR0cnMtXFx1MDAzZWFnZ3JfaW50ZXJ2YWwpIHRoZSByZWdpb24gd2FzIGZvdW5kIHRvXFxuKyAqIGJlIGFjY2Vzc2VkLiAgSGVuY2UgdGhlIHZhbHVlIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgcmVsYXRpdmUgYWNjZXNzXFxuKyAqIGZyZXF1ZW5jeSBzY29yZSBvZiB0aGUgcmVnaW9uIChAcikuICBUaGUgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBzZXVkb1xcbisgKiBtb3Zpbmcgc3VtLCBhbmQgaGVuY2UgaXQgaXMgbm90IGFuIGV4YWN0IHZhbHVlIGJ1dCBqdXN0IGEgYmVzdC1lZmZvcnRcXG4rICogcmVhc29uYWJsZSBlc3RpbWF0aW9uLlxcbisgKlxcbisgKiBSZXR1cm46IHRoZSBwc2V1ZG8gbW92aW5nIHN1bSBhY2Nlc3MgZnJlcXVlbmN5IHNjb3JlLlxcbisgKi9cXG4rdW5zaWduZWQgaW50IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuK1xcdFxcdHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHNhbXBsZV9pbnRlcnZhbCwgYWdncl9pbnRlcnZhbDtcXG4rXFx0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XFxuK1xcbitcXHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXFx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/IDogMTtcXG4rXFx0YWdncl9pbnRlcnZhbCA9IGN0eC1cXHUwMDNlYXR0cnMuYWdncl9pbnRlcnZhbCA/IDogMTtcXG4rXFx0d2luZG93X2xlbiA9IGFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XFxuK1xcdGlmICh0aW1lX2FmdGVyX2VxKGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXFxuK1xcdFxcdFxcdFxcdGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMpKVxcbitcXHRcXHRsZWZ0X3dpbmRvdyA9IDA7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bGVmdF93aW5kb3cgPSBjdHgtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIC1cXG4rXFx0XFx0XFx0Y3R4LVxcdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscztcXG4rXFx0bGVmdF93aW5kb3dfYnAgPSBtdWx0X2ZyYWMobGVmdF93aW5kb3csIDEwMDAwLCB3aW5kb3dfbGVuKTtcXG4rXFxuK1xcdGlmIChsZWZ0X3dpbmRvd19icCA9PSAxMDAwMClcXG4rXFx0XFx0cmV0dXJuIHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XFxuK1xcbitcXHRyZXR1cm4gZGFtb25fbXZzdW0oci1cXHUwMDNlbnJfYWNjZXNzZXMsIHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsXFxuK1xcdFxcdFxcdGxlZnRfd2luZG93X2JwKTtcXG4rfVxcbitcXG4gI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcXG4gc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIHtcXG5AQCAtMjM3LDcgKzMwMiw2IEBAIHN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxuIFxcdHJlZ2lvbi1cXHUwMDNlYXIuc3RhcnQgPSBzdGFydDtcXG4gXFx0cmVnaW9uLVxcdTAwM2Vhci5lbmQgPSBlbmQ7XFxuIFxcdHJlZ2lvbi1cXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xcbi1cXHRyZWdpb24tXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMDtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcXG4gXFx0XFx0cmVnaW9uLVxcdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnJlZ2lvbi1cXHUwMDNlbGlzdCk7XFxuQEAgLTgwOSwyMiArODczLDE5IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3VwZGF0ZV9tb25pdG9yaW5nX3Jlc3VsdChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbiBcXHRcXHRzdHJ1Y3QgZGFtb25fYXR0cnMgKm9sZF9hdHRycywgc3RydWN0IGRhbW9uX2F0dHJzICpuZXdfYXR0cnMsXFxuIFxcdFxcdGJvb2wgYWdncmVnYXRpbmcpXFxuIHtcXG4tXFx0aWYgKCFhZ2dyZWdhdGluZykge1xcbitcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcXG4rXFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbitcXHRpZiAoIWFnZ3JlZ2F0aW5nKVxcbiBcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXFxuIFxcdFxcdFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XFxuLVxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gci1cXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMDtcXG4tXFx0fSBlbHNlIHtcXG4rXFx0ZWxzZVxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBpZiB0aGlzIGlzIGNhbGxlZCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBhZ2dyZWdhdGlvbiwgcmVzZXRcXG4gXFx0XFx0ICogdGhlIGFnZ3JlZ2F0aW9ucyB3ZSBtYWRlIHNvIGZhciBmb3IgdGhpcyBhZ2dyZWdhdGlvblxcbiBcXHRcXHQgKiBpbnRlcnZhbC4gIEluIG90aGVyIHdvcmRzLCBtYWtlIHRoZSBzdGF0dXMgbGlrZVxcbiBcXHRcXHQgKiBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoKSBpcyBjYWxsZWQuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcXG4tXFx0XFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcywgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbi1cXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgKiAxMDAwMDtcXG4gXFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xcbi1cXHR9XFxuIFxcdHItXFx1MDAzZWFnZSA9IGRhbW9uX2FnZV9mb3JfbmV3X2F0dHJzKHItXFx1MDAzZWFnZSwgb2xkX2F0dHJzLCBuZXdfYXR0cnMpO1xcbiB9XFxuIFxcbkBAIC0xOTM1LDM2ICsxOTk2LDYgQEAgaW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4tLypcXG4tICogV2FybiBhbmQgZml4IGNvcnJ1cHRlZCAtXFx1MDAzZW5yX2FjY2Vzc2VzW19icF0gZm9yIGludmVzdGlnYXRpb25zIGFuZCBwcmV2ZW50aW5nXFxuLSAqIHRoZSBwcm9ibGVtIGJlaW5nIHByb3BhZ2F0ZWQuXFxuLSAqL1xcbi1zdGF0aWMgdm9pZCBkYW1vbl93YXJuX2ZpeF9ucl9hY2Nlc3Nlc19jb3JydXB0aW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuLXtcXG4tXFx0aWYgKHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID09IHItXFx1MDAzZW5yX2FjY2Vzc2VzICogMTAwMDApXFxuLVxcdFxcdHJldHVybjtcXG4tXFx0V0FSTl9PTkNFKHRydWUsIFxcXCJpbnZhbGlkIG5yX2FjY2Vzc2VzX2JwIGF0IHJlc2V0OiAldSAldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHItXFx1MDAzZW5yX2FjY2Vzc2VzKTtcXG4tXFx0ci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSByLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwO1xcbi19XFxuLVxcbi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi17XFxuLVxcdFdBUk5fT05DRShyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCAhPSByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzICogMTAwMDAsXFxuLVxcdFxcdFxcdFxcXCJucl9hY2Nlc3Nlc19icCAldSBsYXN0X25yX2FjY2Vzc2VzICV1IHNpcyAlbHUgJWx1XFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCwgci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyxcXG4tXFx0XFx0XFx0Yy1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsIGMtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKTtcXG4tfVxcbi0jZWxzZVxcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbi1cXHRcXHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi17XFxuLX1cXG4tI2VuZGlmXFxuLVxcbi1cXG4gLypcXG4gICogUmVzZXQgdGhlIGFnZ3JlZ2F0ZWQgbW9uaXRvcmluZyByZXN1bHRzICgnbnJfYWNjZXNzZXMnIG9mIGVhY2ggcmVnaW9uKS5cXG4gICovXFxuQEAgLTE5ODksMTIgKzIwMjAsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuIFxcdFxcdFxcdHRyYWNlX2RhbW9uX2FnZ3JlZ2F0ZWQodGksIHIsIGRhbW9uX25yX3JlZ2lvbnModCkpO1xcbiBcXHRcXHRcXHR0cmFjZV9kYW1vbl9yZWdpb25fYWdncmVnYXRlZCh0aSwgcixcXG4gXFx0XFx0XFx0XFx0XFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgbnJfcHJvYmVzKTtcXG4tXFx0XFx0XFx0ZGFtb25fd2Fybl9maXhfbnJfYWNjZXNzZXNfY29ycnVwdGlvbihyKTtcXG4gXFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IHItXFx1MDAzZW5yX2FjY2Vzc2VzO1xcbiBcXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDA7XFxuIFxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspXFxuIFxcdFxcdFxcdFxcdHItXFx1MDAzZXByb2JlX2hpdHNbaV0gPSAwO1xcbi1cXHRcXHRcXHRkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChyLCBjKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHR0aSsrO1xcbiBcXHR9XFxuQEAgLTIwNjEsMTAgKzIwOTAsMTEgQEAgc3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG4gXFx0ZGFtb25fc2V0X2F0dHJzKGMsIFxcdTAwMjZuZXdfYXR0cnMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuK3N0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4rXFx0XFx0c3RydWN0IGRhbW9uX2N0eCAqYylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIHN6O1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMgPSByLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwO1xcbitcXHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyLCBjKTtcXG4gXFxuIFxcdHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbiBcXHRyZXR1cm4gcy1cXHUwMDNlcGF0dGVybi5taW5fc3pfcmVnaW9uIFxcdTAwM2M9IHN6IFxcdTAwMjZcXHUwMDI2XFxuQEAgLTIwOTAsNyArMjEyMCw3IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxcbiBzdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbiB7XFxuLVxcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcyk7XFxuK1xcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYyk7XFxuIFxcbiBcXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFxcdTAwMjZzLVxcdTAwM2VxdW90YSkgfHwgIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC0yMzc0LDcgKzI0MDQsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0c3RydWN0IGRhbW9zICpzaXRlcjtcXHRcXHQvKiBzY2hlbWVzIGl0ZXJhdG9yICovXFxuIFxcdHVuc2lnbmVkIGludCBzaWR4ID0gMDtcXG4gXFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XFx0LyogdGFyZ2V0cyBpdGVyYXRvciAqL1xcbi1cXHR1bnNpZ25lZCBpbnQgdGlkeCA9IDA7XFxuK1xcdHVuc2lnbmVkIGludCB0aWR4ID0gMCwgbnJfYWNjZXNzZXMgPSAwO1xcbiBcXHRib29sIGRvX3RyYWNlID0gZmFsc2U7XFxuIFxcbiBcXHQvKiBnZXQgaW5kaWNlcyBmb3IgdHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KCkgKi9cXG5AQCAtMjM4OSw2ICsyNDE5LDcgQEAgc3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHR0aWR4Kys7XFxuIFxcdFxcdH1cXG4rXFx0XFx0bnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyLCBjKTtcXG4gXFx0XFx0ZG9fdHJhY2UgPSB0cnVlO1xcbiBcXHR9XFxuIFxcbkBAIC0yNDA0LDcgKzI0MzUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4gXFx0XFx0XFx0cmV0dXJuO1xcbiBcXHRcXHRrdGltZV9nZXRfY29hcnNlX3RzNjQoXFx1MDAyNmJlZ2luKTtcXG4tXFx0XFx0dHJhY2VfZGFtb3NfYmVmb3JlX2FwcGx5KGNpZHgsIHNpZHgsIHRpZHgsIHIsXFxuK1xcdFxcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLCBucl9hY2Nlc3NlcyxcXG4gXFx0XFx0XFx0XFx0ZGFtb25fbnJfcmVnaW9ucyh0KSwgZG9fdHJhY2UpO1xcbiBcXHRcXHRzel9hcHBsaWVkID0gYy1cXHUwMDNlb3BzLmFwcGx5X3NjaGVtZShjLCB0LCByLCBzLFxcbiBcXHRcXHRcXHRcXHRcXHUwMDI2c3pfb3BzX2ZpbHRlcl9wYXNzZWQpO1xcbkBAIC0yNjc2LDcgKzI3MDcsNyBAQCBzdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbiBcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbiBcXHRcXHRcXHRwaHlzX2FkZHJfdCBhZGRyLCBlbmRfYWRkcjtcXG4gXFxuLVxcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXFxuK1xcdFxcdFxcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYykpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0XFx0LyogQ29udmVydCBmcm9tIGNvcmUgYWRkcmVzcyB1bml0cyB0byBwaHlzaWNhbCBieXRlcyAqL1xcbkBAIC0yOTY1LDcgKzI5OTYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbiBcXHRcXHRcXHQoREFNT1NfTUFYX1NDT1JFICsgMSkpO1xcbiBcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xcbiBcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbi1cXHRcXHRcXHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMpKVxcbitcXHRcXHRcXHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuQEAgLTMwNjksNyArMzEwMCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcbiBcXHRsLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IChsLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIHN6X2wgKyByLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIHN6X3IpIC9cXG4gXFx0XFx0XFx0KHN6X2wgKyBzel9yKTtcXG4tXFx0bC1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBsLVxcdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwO1xcbiBcXHRsLVxcdTAwM2VhZ2UgPSAobC1cXHUwMDNlYWdlICogc3pfbCArIHItXFx1MDAzZWFnZSAqIHN6X3IpIC8gKHN6X2wgKyBzel9yKTtcXG4gXFx0bC1cXHUwMDNlYXIuZW5kID0gci1cXHUwMDNlYXIuZW5kO1xcbiBcXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cXG5AQCAtMzA4MCwyMCArMzExMCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3R3b19yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuIFxcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fcmVnaW9uICpyKVxcbi17XFxuLVxcdFdBUk5fT05DRShyLVxcdTAwM2Vucl9hY2Nlc3NlcyAhPSByLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwLFxcbi1cXHRcXHRcXHRcXFwibnJfYWNjZXNzZXMgKCV1KSAhPSBucl9hY2Nlc3Nlc19icCAoJXUpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlcywgci1cXHUwMDNlbnJfYWNjZXNzZXNfYnApO1xcbi19XFxuLSNlbHNlXFxuLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXFxuLXtcXG4tfVxcbi0jZW5kaWZcXG4tXFxuLVxcbiAvKlxcbiAgKiBNZXJnZSBhZGphY2VudCByZWdpb25zIGhhdmluZyBzaW1pbGFyIGFjY2VzcyBmcmVxdWVuY2llc1xcbiAgKlxcbkBAIC0zMTA3LDcgKzMxMjMsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHVuc2lnbmVkIGludCB0aHJlcyxcXG4gXFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcXG4gXFxuIFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcXG4tXFx0XFx0ZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yocik7XFxuIFxcdFxcdGlmIChhYnMoci1cXHUwMDNlbnJfYWNjZXNzZXMgLSByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzKSBcXHUwMDNlIHRocmVzKVxcbiBcXHRcXHRcXHRyLVxcdTAwM2VhZ2UgPSAwO1xcbiBcXHRcXHRlbHNlIGlmICgoci1cXHUwMDNlbnJfYWNjZXNzZXMgPT0gMCkgIT0gKHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPT0gMCkpXFxuQEAgLTMxOTYsNyArMzIxMSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3NwbGl0X3JlZ2lvbl9hdChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbiBcXG4gXFx0bmV3LVxcdTAwM2VhZ2UgPSByLVxcdTAwM2VhZ2U7XFxuIFxcdG5ldy1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IHItXFx1MDAzZWxhc3RfbnJfYWNjZXNzZXM7XFxuLVxcdG5ldy1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSByLVxcdTAwM2Vucl9hY2Nlc3Nlc19icDtcXG4gXFx0bmV3LVxcdTAwM2Vucl9hY2Nlc3NlcyA9IHItXFx1MDAzZW5yX2FjY2Vzc2VzO1xcbiBcXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cXG4gXFx0bWVtY3B5KG5ldy1cXHUwMDNlcHJvYmVfaGl0cywgci1cXHUwMDNlcHJvYmVfaGl0cywgc2l6ZW9mKHItXFx1MDAzZXByb2JlX2hpdHMpKTtcXG5AQCAtMzU3MSw4ICszNTg1LDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXFxuIFxcdFxcdFxcdFxcdCAqIGFnZ3JlZ2F0aW9uLCBhbmQgbWFrZSBhZ2dyZWdhdGlvblxcbiBcXHRcXHRcXHRcXHQgKiBpbmZvcm1hdGlvbiByZXNldCBmb3IgYWxsIHJlZ2lvbnMuICBUaGVuLFxcbiBcXHRcXHRcXHRcXHQgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbFxcbi1cXHRcXHRcXHRcXHQgKiB3aWxsIG1ha2UgdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpbnZhbGlkLFxcbi1cXHRcXHRcXHRcXHQgKiBwYXJ0aWN1bGFybHkgZm9yIC1cXHUwMDNlbnJfYWNjZXNzZXNfYnAuXFxuK1xcdFxcdFxcdFxcdCAqIHdpbGwgbWFrZSB0aGUgcmVnaW9uIGluZm9ybWF0aW9uIGludmFsaWQuXFxuIFxcdFxcdFxcdFxcdCAqXFxuIFxcdFxcdFxcdFxcdCAqIFJlc2V0IC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgdG8gYXZvaWQgdGhhdC5cXG4gXFx0XFx0XFx0XFx0ICogSXQgd2lsbCBhbnl3YXkgY29ycmVjdGx5IHVwZGF0ZWQgYWZ0ZXIgdGhpc1xcbkBAIC0zNzExLDcyICszNzI0LDE4IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4gXFx0cmV0dXJuIGRhbW9uX3NldF9yZWdpb25zKHQsIFxcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcXG4gfVxcbiBcXG4tLypcXG4tICogZGFtb25fbW92aW5nX3N1bSgpIC0gQ2FsY3VsYXRlIGFuIGluZmVycmVkIG1vdmluZyBzdW0gdmFsdWUuXFxuLSAqIEBtdnN1bTpcXHRJbmZlcnJlZCBzdW0gb2YgdGhlIGxhc3QgQGxlbl93aW5kb3cgdmFsdWVzLlxcbi0gKiBAbm9tdnN1bTpcXHROb24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCBkaXNjcmV0ZSBAbGVuX3dpbmRvdyB3aW5kb3cgdmFsdWVzLlxcbi0gKiBAbGVuX3dpbmRvdzpcXHRUaGUgbnVtYmVyIG9mIGxhc3QgdmFsdWVzIHRvIHRha2UgY2FyZSBvZi5cXG4tICogQG5ld192YWx1ZTpcXHROZXcgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwc2V1ZG8gbW92aW5nIHN1bS5cXG4tICpcXG4tICogTW92aW5nIHN1bSAobW92aW5nIGF2ZXJhZ2UgKiB3aW5kb3cgc2l6ZSkgaXMgZ29vZCBmb3IgaGFuZGxpbmcgbm9pc2UsIGJ1dFxcbi0gKiB0aGUgY29zdCBvZiBrZWVwaW5nIHBhc3QgdmFsdWVzIGNhbiBiZSBoaWdoIGZvciBhcmJpdHJhcnkgd2luZG93IHNpemUuICBUaGlzXFxuLSAqIGZ1bmN0aW9uIGltcGxlbWVudHMgYSBsaWdodHdlaWdodCBwc2V1ZG8gbW92aW5nIHN1bSBmdW5jdGlvbiB0aGF0IGRvZXNuJ3RcXG4tICoga2VlcCB0aGUgcGFzdCB3aW5kb3cgdmFsdWVzLlxcbi0gKlxcbi0gKiBJdCBzaW1wbHkgYXNzdW1lcyB0aGVyZSB3YXMgbm8gbm9pc2UgaW4gdGhlIHBhc3QsIGFuZCBnZXQgdGhlIG5vLW5vaXNlXFxuLSAqIGFzc3VtZWQgcGFzdCB2YWx1ZSB0byBkcm9wIGZyb20gQG5vbXZzdW0gYW5kIEBsZW5fd2luZG93LiAgQG5vbXZzdW0gaXMgYVxcbi0gKiBub24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCB3aW5kb3cuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIHdlXFxuLSAqIGhhdmUgMjUgdmFsdWVzLCBAbm9tdnN1bSBpcyB0aGUgc3VtIG9mIHRoZSAxMXRoIHRvIDIwdGggdmFsdWVzIG9mIHRoZSAyNVxcbi0gKiB2YWx1ZXMuICBIZW5jZSwgdGhpcyBmdW5jdGlvbiBzaW1wbHkgZHJvcHMgQG5vbXZzdW0gLyBAbGVuX3dpbmRvdyBmcm9tXFxuLSAqIGdpdmVuIEBtdnN1bSBhbmQgYWRkIEBuZXdfdmFsdWUuXFxuLSAqXFxuLSAqIEZvciBleGFtcGxlLCBpZiBAbGVuX3dpbmRvdyBpcyAxMCBhbmQgQG5vbXZzdW0gaXMgNTAsIHRoZSBsYXN0IDEwIHZhbHVlcyBmb3JcXG4tICogdGhlIGxhc3Qgd2luZG93IGNvdWxkIGJlIHZhcnksIGUuZy4sIDAsIDEwLCAwLCAxMCwgMCwgMTAsIDAsIDAsIDAsIDIwLiAgRm9yXFxuLSAqIGNhbGN1bGF0aW5nIG5leHQgbW92aW5nIHN1bSB3aXRoIGEgbmV3IHZhbHVlLCB3ZSBzaG91bGQgZHJvcCAwIGZyb20gNTAgYW5kXFxuLSAqIGFkZCB0aGUgbmV3IHZhbHVlLiAgSG93ZXZlciwgdGhpcyBmdW5jdGlvbiBhc3N1bWVzIGl0IGdvdCB2YWx1ZSA1IGZvciBlYWNoXFxuLSAqIG9mIHRoZSBsYXN0IHRlbiB0aW1lcy4gIEJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uLCB3aGVuIHRoZSBuZXh0IHZhbHVlIGlzXFxuLSAqIG1lYXN1cmVkLCBpdCBkcm9wcyB0aGUgYXNzdW1lZCBwYXN0IHZhbHVlLCA1IGZyb20gdGhlIGN1cnJlbnQgc3VtLCBhbmQgYWRkXFxuLSAqIHRoZSBuZXcgdmFsdWUgdG8gZ2V0IHRoZSB1cGRhdGVkIHBzZWR1by1tb3ZpbmcgYXZlcmFnZS5cXG4tICpcXG4tICogVGhpcyBtZWFucyB0aGUgdmFsdWUgY291bGQgaGF2ZSBlcnJvcnMsIGJ1dCB0aGUgZXJyb3JzIHdpbGwgYmUgZGlzYXBwZWFyZWRcXG4tICogZm9yIGV2ZXJ5IEBsZW5fd2luZG93IGFsaWduZWQgY2FsbHMuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAsIHRoZVxcbi0gKiBwc2V1ZG8gbW92aW5nIHN1bSB3aXRoIDExdGggdmFsdWUgdG8gMTl0aCB2YWx1ZSB3b3VsZCBoYXZlIGFuIGVycm9yLiAgQnV0XFxuLSAqIHRoZSBzdW0gd2l0aCAyMHRoIHZhbHVlIHdpbGwgbm90IGhhdmUgdGhlIGVycm9yLlxcbi0gKlxcbi0gKiBSZXR1cm46IFBzZXVkby1tb3ZpbmcgYXZlcmFnZSBhZnRlciBnZXR0aW5nIHRoZSBAbmV3X3ZhbHVlLlxcbi0gKi9cXG4tc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9tb3Zpbmdfc3VtKHVuc2lnbmVkIGludCBtdnN1bSwgdW5zaWduZWQgaW50IG5vbXZzdW0sXFxuLVxcdFxcdHVuc2lnbmVkIGludCBsZW5fd2luZG93LCB1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlKVxcbi17XFxuLVxcdHJldHVybiBtdnN1bSAtIG5vbXZzdW0gLyBsZW5fd2luZG93ICsgbmV3X3ZhbHVlO1xcbi19XFxuLVxcbiAvKipcXG4gICogZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSgpIC0gVXBkYXRlIHRoZSBhY2Nlc3MgcmF0ZSBvZiBhIHJlZ2lvbi5cXG4gICogQHI6XFx0XFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxcbiAgKiBAYWNjZXNzZWQ6XFx0V2hldGhlciB0aGUgcmVnaW9uIGhhcyBhY2Nlc3NlZCBkdXJpbmcgbGFzdCBzYW1wbGluZyBpbnRlcnZhbC5cXG4tICogQGF0dHJzOlxcdFRoZSBkYW1vbl9hdHRycyBvZiB0aGUgREFNT04gY29udGV4dC5cXG4gICpcXG4gICogVXBkYXRlIHRoZSBhY2Nlc3MgcmF0ZSBvZiBhIHJlZ2lvbiB3aXRoIHRoZSByZWdpb24ncyBsYXN0IHNhbXBsaW5nIGludGVydmFsXFxuICAqIGFjY2VzcyBjaGVjayByZXN1bHQuXFxuICAqXFxuICAqIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGNhbGxlZCBieSBcXHUwMDI2ZGFtb25fb3BlcmF0aW9ucy1cXHUwMDNlY2hlY2tfYWNjZXNzZXMgY2FsbGJhY2suXFxuICAqL1xcbi12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcXG4tXFx0XFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4rdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IGxlbl93aW5kb3cgPSAxO1xcbi1cXG4tXFx0LypcXG4tXFx0ICogc2FtcGxlX2ludGVydmFsIGNhbiBiZSB6ZXJvLCBidXQgY2Fubm90IGJlIGxhcmdlciB0aGFuXFxuLVxcdCAqIGFnZ3JfaW50ZXJ2YWwsIG93aW5nIHRvIHZhbGlkYXRpb24gb2YgZGFtb25fc2V0X2F0dHJzKCkuXFxuLVxcdCAqL1xcbi1cXHRpZiAoYXR0cnMtXFx1MDAzZXNhbXBsZV9pbnRlcnZhbClcXG4tXFx0XFx0bGVuX3dpbmRvdyA9IGRhbW9uX21heF9ucl9hY2Nlc3NlcyhhdHRycyk7XFxuLVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gZGFtb25fbW92aW5nX3N1bShyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCxcXG4tXFx0XFx0XFx0ci1cXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwLCBsZW5fd2luZG93LFxcbi1cXHRcXHRcXHRhY2Nlc3NlZCA/IDEwMDAwIDogMCk7XFxuLVxcbiBcXHRpZiAoYWNjZXNzZWQpXFxuIFxcdFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzKys7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcXG5pbmRleCA1YzJkYTQ1Zjk4OGNmOS4uNjE3MjQ2NDk4MTczMDQgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vcGFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcXG5AQCAtODAsNyArODAsNyBAQCBzdGF0aWMgYm9vbCBkYW1vbl9wYV95b3VuZyhwaHlzX2FkZHJfdCBwYWRkciwgdW5zaWduZWQgbG9uZyAqZm9saW9fc3opXFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLVxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMsIHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJfdW5pdClcXG4ge1xcbiBcXHRzdGF0aWMgcGh5c19hZGRyX3QgbGFzdF9hZGRyO1xcbiBcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2ZvbGlvX3N6ID0gUEFHRV9TSVpFO1xcbkBAIC05MSwxMiArOTEsMTIgQEAgc3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcXG4gXFx0LyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi9cXG4gXFx0aWYgKEFMSUdOX0RPV04obGFzdF9hZGRyLCBsYXN0X2ZvbGlvX3N6KSA9PVxcbiBcXHRcXHRcXHRcXHRBTElHTl9ET1dOKHNhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSB7XFxuLVxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbitcXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl9wYV95b3VuZyhzYW1wbGluZ19hZGRyLCBcXHUwMDI2bGFzdF9mb2xpb19zeik7XFxuLVxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbitcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQpO1xcbiBcXG4gXFx0bGFzdF9hZGRyID0gc2FtcGxpbmdfYWRkcjtcXG4gfVxcbkBAIC0xMDksOCArMTA5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl9wYV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuIFxcbiBcXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgY3R4KSB7XFxuIFxcdFxcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbihyLCB0KSB7XFxuLVxcdFxcdFxcdF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzKFxcbi1cXHRcXHRcXHRcXHRcXHRyLCBcXHUwMDI2Y3R4LVxcdTAwM2VhdHRycywgY3R4LVxcdTAwM2VhZGRyX3VuaXQpO1xcbitcXHRcXHRcXHRfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhyLCBjdHgtXFx1MDAzZWFkZHJfdW5pdCk7XFxuIFxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVxcdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xcbmluZGV4IDQxZjkzYTE4MjNiZjEzLi5kYmYyYjA1MTVkNTgyOSAxMDA2NDRcXG4tLS0gYS9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcXG4rKysgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcXG5AQCAtMTU3LDcgKzE1Nyw3IEBAIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uIHtcXG4gfTtcXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhcXG4tXFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcmVnaW9uKVxcbitcXHRcXHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4ge1xcbiBcXHRzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbiAqc3lzZnNfcmVnaW9uID0ga21hbGxvY19vYmooKnN5c2ZzX3JlZ2lvbik7XFxuIFxcbkBAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2Vrb2JqID0gKHN0cnVjdCBrb2JqZWN0KXt9O1xcbiBcXHRzeXNmc19yZWdpb24tXFx1MDAzZWFyID0gcmVnaW9uLVxcdTAwM2VhcjtcXG4tXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IHJlZ2lvbi1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgLyAxMDAwMDtcXG4rXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKHJlZ2lvbiwgY3R4KTtcXG4gXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2VhZ2UgPSByZWdpb24tXFx1MDAzZWFnZTtcXG4gXFx0c3lzZnNfcmVnaW9uLVxcdTAwM2Vwcm9iZXMgPSBOVUxMO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3lzZnNfcmVnaW9uLVxcdTAwM2VsaXN0KTtcXG5AQCAtMzEyMiw3ICszMTIyLDcgQEAgdm9pZCBkYW1vc19zeXNmc19wb3B1bGF0ZV9yZWdpb25fZGlyKHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVzICpzeXNmc19zY2hlbWVzLFxcbiBcXHRpZiAodG90YWxfYnl0ZXNfb25seSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0cmVnaW9uID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhyKTtcXG4rXFx0cmVnaW9uID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhyLCBjdHgpO1xcbiBcXHRpZiAoIXJlZ2lvbilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHRyZWdpb24tXFx1MDAzZXN6X2ZpbHRlcl9wYXNzZWQgPSBzel9maWx0ZXJfcGFzc2VkO1xcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcXG5pbmRleCBmY2Y3YzdmYWRiNWZlNS4uZjFmYWViYjZmZjk5M2YgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXFxuQEAgLTExNCw3ICsxMTQsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdFxcdFxcdGt1bml0X3NraXAodGVzdCwgXFxcInJlZ2lvbiBhbGxvYyBmYWlsXFxcIik7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXMgPSBhY2Nlc3Nlc1tpdF1baXJdO1xcbi1cXHRcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGFjY2Vzc2VzW2l0XVtpcl0gKiAxMDAwMDtcXG4gXFx0XFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpdCsrO1xcbkBAIC0xNTEsNyArMTUwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdFxcdGRhbW9uX2ZyZWVfdGFyZ2V0KHQpO1xcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbiBcXHR9XFxuLVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gNDIwMDAwO1xcbiBcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IDQyO1xcbiBcXHRyLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gMTU7XFxuIFxcdHItXFx1MDAzZWFnZSA9IDEwO1xcbkBAIC0xNjQsNyArMTYyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByX25ldy1cXHUwMDNlYXIuc3RhcnQsIDI1dWwpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctXFx1MDAzZWFyLmVuZCwgMTAwdWwpO1xcbiBcXG4tXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwLCByX25ldy1cXHUwMDNlbnJfYWNjZXNzZXNfYnApO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlbnJfYWNjZXNzZXMsIHJfbmV3LVxcdTAwM2Vucl9hY2Nlc3Nlcyk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcyk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2VhZ2UsIHJfbmV3LVxcdTAwM2VhZ2UpO1xcbkBAIC0xODcsNyArMTg0LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJyZWdpb24gYWxsb2MgZmFpbFxcXCIpO1xcbiBcXHR9XFxuIFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XFxuLVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMTAwMDAwO1xcbiBcXHRyLVxcdTAwM2VhZ2UgPSA5O1xcbiBcXHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xcbiBcXHRyMiA9IGRhbW9uX25ld19yZWdpb24oMTAwLCAzMDApO1xcbkBAIC0xOTYsNyArMTkyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxcbiBcXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJzZWNvbmQgcmVnaW9uIGFsbG9jIGZhaWxcXFwiKTtcXG4gXFx0fVxcbiBcXHRyMi1cXHUwMDNlbnJfYWNjZXNzZXMgPSAyMDtcXG4tXFx0cjItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMjAwMDAwO1xcbiBcXHRyMi1cXHUwMDNlYWdlID0gMjE7XFxuIFxcdGRhbW9uX2FkZF9yZWdpb24ocjIsIHQpO1xcbiBcXG5AQCAtMjA0LDcgKzE5OSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFyLnN0YXJ0LCAwdWwpO1xcbiBcXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cXHUwMDNlYXIuZW5kLCAzMDB1bCk7XFxuIFxcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVxcdTAwM2Vucl9hY2Nlc3NlcywgMTZ1KTtcXG4tXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwLCAxNjAwMDB1KTtcXG4gXFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXFx1MDAzZWFnZSwgMTd1KTtcXG4gXFxuIFxcdGkgPSAwO1xcbkBAIC0yNTIsNyArMjQ2LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwicmVnaW9uIGFsbG9jIGZhaWxcXFwiKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRyLVxcdTAwM2Vucl9hY2Nlc3NlcyA9IG5yc1tpXTtcXG4tXFx0XFx0ci1cXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBucnNbaV0gKiAxMDAwMDtcXG4gXFx0XFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcXG4gXFx0fVxcbiBcXG5AQCAtNTUyLDcgKzU0NSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4gXFx0XFx0a3VuaXRfc2tpcCh0ZXN0LCBcXFwicmVnaW9uIGFsbG9jIGZhaWxcXFwiKTtcXG4gXFxuIFxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzID0gMTU7XFxuLVxcdHItXFx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMTUwMDAwO1xcbiBcXHRyLVxcdTAwM2VhZ2UgPSAyMDtcXG4gXFxuIFxcdG5ld19hdHRycyA9IChzdHJ1Y3QgZGFtb25fYXR0cnMpe1xcbkBAIC02MDQsMTggKzU5NiwyNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuIFxcdGRhbW9uX2Rlc3Ryb3lfY3R4KGMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21vdmluZ19zdW0oc3RydWN0IGt1bml0ICp0ZXN0KVxcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X212c3VtKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgbXZzdW0gPSA1MDAwMCwgbm9tdnN1bSA9IDUwMDAwLCBsZW5fd2luZG93ID0gMTA7XFxuLVxcdHVuc2lnbmVkIGludCBuZXdfdmFsdWVzW10gPSB7MTAwMDAsIDAsIDEwMDAwLCAwLCAwLCAwLCAxMDAwMCwgMCwgMCwgMH07XFxuLVxcdHVuc2lnbmVkIGludCBleHBlY3RzW10gPSB7NTUwMDAsIDUwMDAwLCA1NTAwMCwgNTAwMDAsIDQ1MDAwLCA0MDAwMCxcXG4tXFx0XFx0NDUwMDAsIDQwMDAwLCAzNTAwMCwgMzAwMDB9O1xcbitcXHR1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHtcXG4rXFx0XFx0LyogY3VycmVudCB2YWx1ZSwgbGFzdCB2YWx1ZSwgcmVtYWluaW5nIHdpbmRvdyAoYnApICovXFxuK1xcdFxcdDAsIDQ5LCAxMDAwMCwgNDksXFx0LyogMCArIDQ5ICogMSAqL1xcbitcXHRcXHQzLCAxMCwgNzAwMCwgMTAsXFx0LyogMyArIDEwICogMC43ICovXFxuK1xcdFxcdDMsIDEwLCA1MDAwLCA4LFxcdFxcdC8qIDMgKyAxMCAqIDAuNSAqL1xcbitcXHRcXHQzMiwgMTAwLCAxMDAwLCA0MixcXHQvKiAzMiArIDEwMCAqIDAuMSAqL1xcbitcXHRcXHQ0MiwgNDksIDAsIDQyLFxcdFxcdC8qIDQyICsgNDkgKiAwICovXFxuK1xcdH07XFxuK1xcbiBcXHRpbnQgaTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKG5ld192YWx1ZXMpOyBpKyspIHtcXG4tXFx0XFx0bXZzdW0gPSBkYW1vbl9tb3Zpbmdfc3VtKG12c3VtLCBub212c3VtLCBsZW5fd2luZG93LFxcbi1cXHRcXHRcXHRcXHRuZXdfdmFsdWVzW2ldKTtcXG4tXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG12c3VtLCBleHBlY3RzW2ldKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUoaW5wdXRfZXhwZWN0cyk7IGkgKz0gNCkge1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfbnIgPSBpbnB1dF9leHBlY3RzW2ldO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3RfbnIgPSBpbnB1dF9leHBlY3RzW2kgKyAxXTtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBsZWZ0X3dpbmRvd19icCA9IGlucHV0X2V4cGVjdHNbaSArIDJdO1xcbitcXHRcXHR1bnNpZ25lZCBsb25nIGV4cGVjdCA9IGlucHV0X2V4cGVjdHNbaSArIDNdO1xcbitcXG4rXFx0XFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIGRhbW9uX212c3VtKGN1cnJlbnRfbnIsIGxhc3RfbnIsXFxuK1xcdFxcdFxcdFxcdFxcdGxlZnRfd2luZG93X2JwKSwgZXhwZWN0KTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0xNDY5LDcgKzE0NzAsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbnJfYWNjZXNzZXNfdG9fYWNjZXNzZXNfYnApLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXFxuLVxcdEtVTklUX0NBU0UoZGFtb25fdGVzdF9tb3Zpbmdfc3VtKSxcXG4rXFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X212c3VtKSxcXG4gXFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWwpLFxcbiBcXHRLVU5JVF9DQVNFKGRhbW9zX3Rlc3RfY29tbWl0X3F1b3RhX2dvYWxzKSxcXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vdmFkZHIuYyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5pbmRleCBlNzNlYzFjZTAxNmU1Yi4uMjA1OGRiOWMwMWQ1MmYgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vdmFkZHIuY1xcbisrKyBiL21tL2RhbW9uL3ZhZGRyLmNcXG5AQCAtNDkzLDI3ICs0OTMsMjYgQEAgc3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gICogclxcdHRoZSByZWdpb24gdG8gYmUgY2hlY2tlZFxcbiAgKi9cXG4gc3RhdGljIHZvaWQgX19kYW1vbl92YV9jaGVja19hY2Nlc3Moc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgc2FtZV90YXJnZXQsXFxuLVxcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgc2FtZV90YXJnZXQpXFxuIHtcXG4gXFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyO1xcbiBcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2ZvbGlvX3N6ID0gUEFHRV9TSVpFO1xcbiBcXHRzdGF0aWMgYm9vbCBsYXN0X2FjY2Vzc2VkO1xcbiBcXG4gXFx0aWYgKCFtbSkge1xcbi1cXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlLCBhdHRycyk7XFxuK1xcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgZmFsc2UpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdC8qIElmIHRoZSByZWdpb24gaXMgaW4gdGhlIGxhc3QgY2hlY2tlZCBwYWdlLCByZXVzZSB0aGUgcmVzdWx0ICovXFxuIFxcdGlmIChzYW1lX3RhcmdldCBcXHUwMDI2XFx1MDAyNiAoQUxJR05fRE9XTihsYXN0X2FkZHIsIGxhc3RfZm9saW9fc3opID09XFxuIFxcdFxcdFxcdFxcdEFMSUdOX0RPV04oci1cXHUwMDNlc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpKSB7XFxuLVxcdFxcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xcbitcXHRcXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl92YV95b3VuZyhtbSwgci1cXHUwMDNlc2FtcGxpbmdfYWRkciwgXFx1MDAyNmxhc3RfZm9saW9fc3opO1xcbi1cXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcXG4rXFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkKTtcXG4gXFxuIFxcdGxhc3RfYWRkciA9IHItXFx1MDAzZXNhbXBsaW5nX2FkZHI7XFxuIH1cXG5AQCAtNTMwLDggKzUyOSw3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fdmFfY2hlY2tfYWNjZXNzZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbiBcXHRcXHRtbSA9IGRhbW9uX2dldF9tbSh0KTtcXG4gXFx0XFx0c2FtZV90YXJnZXQgPSBmYWxzZTtcXG4gXFx0XFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcXG4tXFx0XFx0XFx0X19kYW1vbl92YV9jaGVja19hY2Nlc3MobW0sIHIsIHNhbWVfdGFyZ2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHUwMDI2Y3R4LVxcdTAwM2VhdHRycyk7XFxuK1xcdFxcdFxcdF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKG1tLCByLCBzYW1lX3RhcmdldCk7XFxuIFxcdFxcdFxcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVxcdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcXG4gXFx0XFx0XFx0c2FtZV90YXJnZXQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XFxuaW5kZXggOTcyOTQ4ZTYyMTVmMWQuLjQ5NDJhZmRmNDZjZDQ0IDEwMDc1NVxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHlcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XFxuQEAgLTU5LDcgKzU5LDYgQEAgZGVmIHJlZ2lvbl90b19kaWN0KHJlZ2lvbik6XFxuICAgICAgICAgWydhcicsIGFkZHJfcmFuZ2VfdG9fZGljdF0sXFxuICAgICAgICAgWydzYW1wbGluZ19hZGRyJywgaW50XSxcXG4gICAgICAgICBbJ25yX2FjY2Vzc2VzJywgaW50XSxcXG4tICAgICAgICBbJ25yX2FjY2Vzc2VzX2JwJywgaW50XSxcXG4gICAgICAgICBbJ2FnZScsIGludF0sXFxuICAgICAgICAgXSlcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDA1OjU1OjI2LjUyNDQ4ODM5OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwMzg5NDM4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fU1lTRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bVwiLFxuICAgIFwiZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZVwiLFxuICAgIFwiX19kYW1vc192YWxpZF90YXJnZXRcIixcbiAgICBcImRhbW9zX2FwcGx5X3NjaGVtZVwiLFxuICAgIFwiZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlc1wiLFxuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJkYW1vbl9tZXJnZV90d29fcmVnaW9uc1wiLFxuICAgIFwiZGFtb25fbWVyZ2VfcmVnaW9uc19vZlwiLFxuICAgIFwiZGFtb25fc3BsaXRfcmVnaW9uX2F0XCIsXG4gICAgXCJfX2RhbW9uX3BhX2NoZWNrX2FjY2Vzc1wiLFxuICAgIFwiX19kYW1vbl92YV9jaGVja19hY2Nlc3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBvZiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1PTml0b3IpIHN1YnN5c3RlbSBieSByZXBsYWNpbmcgdGhlIGBucl9hY2Nlc3Nlc19icGAgZmllbGQgd2l0aCBhIHBzZXVkbyBtb3Zpbmcgc3VtIGNhbGN1bGF0aW9uIChgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gKS4gVGhpcyBhZmZlY3RzIGhvdyBhY2Nlc3MgZnJlcXVlbmNpZXMgYXJlIGNhbGN1bGF0ZWQsIG1lcmdlZCwgc3BsaXQsIGFuZCBldmFsdWF0ZWQgZm9yIHNjaGVtZXMgYWNyb3NzIGJvdGggcGh5c2ljYWwgYW5kIHZpcnR1YWwgYWRkcmVzcyBtb25pdG9yaW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIHRoYXQgY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmRmYzA2NmRmMGVhNjZmMjEwYTQwYWE4NDc5YjhhMTQ0ZGFhNDk2NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDMwIDA1OjU1OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kYW1vbi5oIGIvaW5jbHVkZS9saW51eC9kYW1vbi5oXG5pbmRleCBjZmJiZjhiYTI4ZjYzMi4uODA1ZTA4OWZmNGYyZjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2RhbW9uLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZGFtb24uaFxuQEAgLTQ1LDggKzQ1LDYgQEAgc3RydWN0IGRhbW9uX3NpemVfcmFuZ2Uge1xuICAqIEBhcjpcdFx0XHRUaGUgYWRkcmVzcyByYW5nZSBvZiB0aGUgcmVnaW9uLlxuICAqIEBzYW1wbGluZ19hZGRyOlx0QWRkcmVzcyBvZiB0aGUgc2FtcGxlIGZvciB0aGUgbmV4dCBhY2Nlc3MgY2hlY2suXG4gICogQG5yX2FjY2Vzc2VzOlx0QWNjZXNzIGZyZXF1ZW5jeSBvZiB0aGlzIHJlZ2lvbi5cbi0gKiBAbnJfYWNjZXNzZXNfYnA6XHRAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnQgKDAuMDElKSB0aGF0IHVwZGF0ZWQgZm9yXG4tICpcdFx0XHRlYWNoIHNhbXBsaW5nIGludGVydmFsLlxuICAqIEBwcm9iZV9oaXRzOlx0XHROdW1iZXIgb2YgcHJvYmUtcG9zaXRpdmUgcmVnaW9uIHNhbXBsZXMuXG4gICogQGxpc3Q6XHRcdExpc3QgaGVhZCBmb3Igc2libGluZ3MuXG4gICogQGFnZTpcdFx0QWdlIG9mIHRoaXMgcmVnaW9uLlxuQEAgLTU5LDEzICs1Nyw2IEBAIHN0cnVjdCBkYW1vbl9zaXplX3JhbmdlIHtcbiAgKiBub3QgYmUgZG9uZSB3aXRoIGRpcmVjdCBhY2Nlc3MgYnV0IHdpdGggdGhlIGhlbHBlciBmdW5jdGlvbixcbiAgKiBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKCkuXG4gICpcbi0gKiBAbnJfYWNjZXNzZXNfYnAgaXMgYW5vdGhlciByZXByZXNlbnRhdGlvbiBvZiBAbnJfYWNjZXNzZXMgaW4gYmFzaXMgcG9pbnRcbi0gKiAoMSBpbiAxMCwwMDApIHRoYXQgdXBkYXRlZCBmb3IgZXZlcnkgXHUwMDI2ZGFtb25fYXR0cnMtXHUwMDNlc2FtcGxlX2ludGVydmFsIGluIGFcbi0gKiBtYW5uZXIgc2ltaWxhciB0byBtb3Zpbmcgc3VtLiAgQnkgdGhlIGFsZ29yaXRobSwgdGhpcyB2YWx1ZSBiZWNvbWVzXG4tICogQG5yX2FjY2Vzc2VzICogMTAwMDAgZm9yIGV2ZXJ5IFx1MDAyNnN0cnVjdCBkYW1vbl9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsLiAgVGhpcyBjYW5cbi0gKiBiZSB1c2VkIHdoZW4gdGhlIGFnZ3JlZ2F0aW9uIGludGVydmFsIGlzIHRvbyBodWdlIGFuZCB0aGVyZWZvcmUgY2Fubm90IHdhaXRcbi0gKiBmb3IgaXQgYmVmb3JlIGdldHRpbmcgdGhlIGFjY2VzcyBtb25pdG9yaW5nIHJlc3VsdHMuXG4tICpcbiAgKiBAYWdlIGlzIGluaXRpYWxseSB6ZXJvLCBpbmNyZWFzZWQgZm9yIGVhY2ggYWdncmVnYXRpb24gaW50ZXJ2YWwsIGFuZCByZXNldFxuICAqIHRvIHplcm8gYWdhaW4gaWYgdGhlIGFjY2VzcyBmcmVxdWVuY3kgaXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLiAgSWYgdHdvXG4gICogcmVnaW9ucyBhcmUgbWVyZ2VkIGludG8gYSBuZXcgcmVnaW9uLCBib3RoIEBucl9hY2Nlc3NlcyBhbmQgQGFnZSBvZiB0aGUgbmV3XG5AQCAtNzUsNyArNjYsNiBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uIHtcbiBcdHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlIGFyO1xuIFx0dW5zaWduZWQgbG9uZyBzYW1wbGluZ19hZGRyO1xuIFx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzO1xuLVx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzX2JwO1xuIFx0dW5zaWduZWQgY2hhciBwcm9iZV9oaXRzW0RBTU9OX01BWF9QUk9CRVNdO1xuIFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xuIFxuQEAgLTEwMTEsMTEgKzEwMDEsMTIgQEAgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZCk7XG4gdm9pZCBkYW1vbl9hZGRfcHJvYmUoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnByb2JlKTtcbiBcbiBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTtcbit1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KTtcbiBcbiBpbnQgZGFtb25fc2V0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2FkZHJfcmFuZ2UgKnJhbmdlcyxcbiBcdFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KTtcbi12b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZCxcbi1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycyk7XG4rdm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpO1xuIFxuIHN0cnVjdCBkYW1vc19maWx0ZXIgKmRhbW9zX25ld19maWx0ZXIoZW51bSBkYW1vc19maWx0ZXJfdHlwZSB0eXBlLFxuIFx0XHRib29sIG1hdGNoaW5nLCBib29sIGFsbG93KTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9kYW1vbi5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxuaW5kZXggNzgzODg1MzhhY2Y0NDYuLjg4NTE3MjdhZTE2MjdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxuKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZGFtb24uaFxuQEAgLTc4LDkgKzc4LDExIEBAIFRSQUNFX0VWRU5UX0NPTkRJVElPTihkYW1vc19iZWZvcmVfYXBwbHksXG4gXG4gXHRUUF9QUk9UTyh1bnNpZ25lZCBpbnQgY29udGV4dF9pZHgsIHVuc2lnbmVkIGludCBzY2hlbWVfaWR4LFxuIFx0XHR1bnNpZ25lZCBpbnQgdGFyZ2V0X2lkeCwgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi1cdFx0dW5zaWduZWQgaW50IG5yX3JlZ2lvbnMsIGJvb2wgZG9fdHJhY2UpLFxuK1x0XHR1bnNpZ25lZCBpbnQgbnJfYWNjZXNzZXMsIHVuc2lnbmVkIGludCBucl9yZWdpb25zLFxuK1x0XHRib29sIGRvX3RyYWNlKSxcbiBcbi1cdFRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX3JlZ2lvbnMsIGRvX3RyYWNlKSxcbitcdFRQX0FSR1MoY29udGV4dF9pZHgsIHNjaGVtZV9pZHgsIHRhcmdldF9pZHgsIHIsIG5yX2FjY2Vzc2VzLFxuK1x0XHRucl9yZWdpb25zLCBkb190cmFjZSksXG4gXG4gXHRUUF9DT05ESVRJT04oZG9fdHJhY2UpLFxuIFxuQEAgLTEwMSw3ICsxMDMsNyBAQCBUUkFDRV9FVkVOVF9DT05ESVRJT04oZGFtb3NfYmVmb3JlX2FwcGx5LFxuIFx0XHRfX2VudHJ5LVx1MDAzZXRhcmdldF9pZHggPSB0YXJnZXRfaWR4O1xuIFx0XHRfX2VudHJ5LVx1MDAzZXN0YXJ0ID0gci1cdTAwM2Vhci5zdGFydDtcbiBcdFx0X19lbnRyeS1cdTAwM2VlbmQgPSByLVx1MDAzZWFyLmVuZDtcbi1cdFx0X19lbnRyeS1cdTAwM2Vucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgLyAxMDAwMDtcbitcdFx0X19lbnRyeS1cdTAwM2Vucl9hY2Nlc3NlcyA9IG5yX2FjY2Vzc2VzO1xuIFx0XHRfX2VudHJ5LVx1MDAzZWFnZSA9IHItXHUwMDNlYWdlO1xuIFx0XHRfX2VudHJ5LVx1MDAzZW5yX3JlZ2lvbnMgPSBucl9yZWdpb25zO1xuIFx0KSxcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDAyNzI1MGU0M2M2NmYyLi5mNTJhODlmOWZkOTc3ZCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMjA4LDYgKzIwOCw3MSBAQCBzdGF0aWMgc3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9udGhfcHJvYmUoaW50IG4sIHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcdHJldHVybiBOVUxMO1xuIH1cbiBcbisvKlxuKyAqIGRhbW9uX212c3VtKCkgLSBSZXR1cm5zIHBzZXVkbyBtb3Zpbmcgc3VtIHZhbHVlIGZvciBhIHRpbWUgd2luZG93LlxuKyAqIEBjdXJyZW50X25yOlx0XHRUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgYWdncmVnYXRpb24gd2luZG93LlxuKyAqIEBsYXN0X25yOlx0XHRUaGUgdmFsdWUgb2YgdGhlIGxhc3QgYWdncmVnYXRpb24gd2luZG93LlxuKyAqIEBsZWZ0X3dpbmRvd19icDpcdExlZnQgdGltZSBvZiB0aGUgY3VycmVudCBhZ2dyZWdhdGlvbiB3aW5kb3cuXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgYSBwc2V1ZG8gbW92aW5nIHN1bSB2YWx1ZSBvZiBhIGNvdW50ZXIgdGhhdCBpc1xuKyAqIGFnZ3JlZ2F0ZWQgZm9yIGVhY2ggdGltZSB3aW5kb3cuICBAY3VycmVudF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXJcbisgKiB0aGF0IGFnZ3JlZ2F0ZWQgc28gZmFyIChtYXliZSBub3QgeWV0IGNvbXBsZXRlKSwgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZVxuKyAqIGN1cnJlbnQgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuICBAbGFzdF9uciBpcyB0aGUgdmFsdWUgb2YgdGhlIGNvdW50ZXIgdGhhdFxuKyAqIGhhcyBjb21wbGV0ZWx5IGFnZ3JlZ2F0ZWQgaW4gdGhlIGxhc3QgYWdncmVnYXRpb24gdGltZSB3aW5kb3cuXG4rICogQGxlZnRfd2luZG93X2JwIHJlcHJlc2VudHMgaG93IG11Y2ggdGltZSBpcyBsZWZ0IGZvciB0aGUgY3VycmVudCBhZ2dyZWdhdGlvblxuKyAqIHRpbWUgd2luZG93IGluIGJwICgxLzEwLDAwMCkuICBGb3IgZXhhbXBsZSwgdGhlIGFnZ3JlZ2F0aW9uIHRpbWUgd2luZG93IGlzXG4rICogZm9yIGV2ZXJ5IDEwIHNlY29uZHMgYW5kIDcgc2Vjb25kcyBoYXMgcGFzc2VkIHNpbmNlIHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4rICogY3VycmVudCB3aW5kb3csIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgMzAwMCAoKDEwIC0gNykgLyAxMCAqIDEwMDAwKS5cbisgKlxuKyAqIFRoZSBsb2dpYyBhc3N1bWVzIHRoZSBhZ2dyZWdhdGlvbiBpbiB0aGUgbGFzdCBwaGFzZSB3YXMgbWFkZSBpbiBhIHNpbmdsZVxuKyAqIHNwZWVkLiAgQmFzZWQgb24gdGhlIGFzc3VtcHRpb24sIHRoZSB2YWx1ZSBmcm9tIHRoZSBsYXN0IHdpbmRvdyB0aGF0IG5lZWRzXG4rICogdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBhIHBvcnRpb24gb2YgdGhlIGxhc3RcbisgKiB2YWx1ZSBiYXNlZCBvbiB0aGUgcmVtYWluaW5nIHRpbWUgd2luZG93LlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX212c3VtKHVuc2lnbmVkIGxvbmcgY3VycmVudF9ucixcbitcdFx0dW5zaWduZWQgbG9uZyBsYXN0X25yLCB1bnNpZ25lZCBsb25nIGxlZnRfd2luZG93X2JwKVxuK3tcbitcdHJldHVybiBjdXJyZW50X25yICsgbXVsdF9mcmFjKGxhc3RfbnIsIGxlZnRfd2luZG93X2JwLCAxMDAwMCk7XG4rfVxuK1xuKy8qKlxuKyAqIGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKCkgLSBSZXR1cm5zIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cbisgKiBAcjpcdFx0UmVnaW9uIHRvIGdldCB0aGUgYWNjZXNzIGZyZXF1ZW5jeSBvZi5cbisgKiBAY3R4Olx0REFNT04gY29udGV4dCBvZiBAci5cbisgKlxuKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBmb3IgaG93IG1hbnkgc2FtcGxpbmcgaXRlcmF0aW9ucyBpbiB0aGUgbGFzdFxuKyAqIGFnZ3JlZ2F0aW9uIGludGVydmFsIChcdTAwMjZkYW1vbl9hdHRycy1cdTAwM2VhZ2dyX2ludGVydmFsKSB0aGUgcmVnaW9uIHdhcyBmb3VuZCB0b1xuKyAqIGJlIGFjY2Vzc2VkLiAgSGVuY2UgdGhlIHZhbHVlIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgcmVsYXRpdmUgYWNjZXNzXG4rICogZnJlcXVlbmN5IHNjb3JlIG9mIHRoZSByZWdpb24gKEByKS4gIFRoZSB2YWx1ZSBpcyBjYWxjdWxhdGVkIGFzIGEgcHNldWRvXG4rICogbW92aW5nIHN1bSwgYW5kIGhlbmNlIGl0IGlzIG5vdCBhbiBleGFjdCB2YWx1ZSBidXQganVzdCBhIGJlc3QtZWZmb3J0XG4rICogcmVhc29uYWJsZSBlc3RpbWF0aW9uLlxuKyAqXG4rICogUmV0dXJuOiB0aGUgcHNldWRvIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS5cbisgKi9cbit1bnNpZ25lZCBpbnQgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0oc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgc2FtcGxlX2ludGVydmFsLCBhZ2dyX2ludGVydmFsO1xuK1x0dW5zaWduZWQgbG9uZyB3aW5kb3dfbGVuLCBsZWZ0X3dpbmRvdywgbGVmdF93aW5kb3dfYnA7XG4rXG4rXHRzYW1wbGVfaW50ZXJ2YWwgPSBjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID8gOiAxO1xuK1x0YWdncl9pbnRlcnZhbCA9IGN0eC1cdTAwM2VhdHRycy5hZ2dyX2ludGVydmFsID8gOiAxO1xuK1x0d2luZG93X2xlbiA9IGFnZ3JfaW50ZXJ2YWwgLyBzYW1wbGVfaW50ZXJ2YWw7XG4rXHRpZiAodGltZV9hZnRlcl9lcShjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMsXG4rXHRcdFx0XHRjdHgtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMpKVxuK1x0XHRsZWZ0X3dpbmRvdyA9IDA7XG4rXHRlbHNlXG4rXHRcdGxlZnRfd2luZG93ID0gY3R4LVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIC1cbitcdFx0XHRjdHgtXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHM7XG4rXHRsZWZ0X3dpbmRvd19icCA9IG11bHRfZnJhYyhsZWZ0X3dpbmRvdywgMTAwMDAsIHdpbmRvd19sZW4pO1xuK1xuK1x0aWYgKGxlZnRfd2luZG93X2JwID09IDEwMDAwKVxuK1x0XHRyZXR1cm4gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuK1xuK1x0cmV0dXJuIGRhbW9uX212c3VtKHItXHUwMDNlbnJfYWNjZXNzZXMsIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyxcbitcdFx0XHRsZWZ0X3dpbmRvd19icCk7XG4rfVxuK1xuICNpZmRlZiBDT05GSUdfREFNT05fREVCVUdfU0FOSVRZXG4gc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4ge1xuQEAgLTIzNyw3ICszMDIsNiBAQCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpkYW1vbl9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxuIFx0cmVnaW9uLVx1MDAzZWFyLnN0YXJ0ID0gc3RhcnQ7XG4gXHRyZWdpb24tXHUwMDNlYXIuZW5kID0gZW5kO1xuIFx0cmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcbi1cdHJlZ2lvbi1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDA7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBEQU1PTl9NQVhfUFJPQkVTOyBpKyspXG4gXHRcdHJlZ2lvbi1cdTAwM2Vwcm9iZV9oaXRzW2ldID0gMDtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnJlZ2lvbi1cdTAwM2VsaXN0KTtcbkBAIC04MDksMjIgKzg3MywxOSBAQCBzdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbiBcdFx0c3RydWN0IGRhbW9uX2F0dHJzICpvbGRfYXR0cnMsIHN0cnVjdCBkYW1vbl9hdHRycyAqbmV3X2F0dHJzLFxuIFx0XHRib29sIGFnZ3JlZ2F0aW5nKVxuIHtcbi1cdGlmICghYWdncmVnYXRpbmcpIHtcbitcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXG4rXHRcdFx0ci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCBvbGRfYXR0cnMsIG5ld19hdHRycyk7XG4rXHRpZiAoIWFnZ3JlZ2F0aW5nKVxuIFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfZm9yX25ld19hdHRycyhcbiBcdFx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbi1cdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMDtcbi1cdH0gZWxzZSB7XG4rXHRlbHNlXG4gXHRcdC8qXG4gXHRcdCAqIGlmIHRoaXMgaXMgY2FsbGVkIGluIHRoZSBtaWRkbGUgb2YgdGhlIGFnZ3JlZ2F0aW9uLCByZXNldFxuIFx0XHQgKiB0aGUgYWdncmVnYXRpb25zIHdlIG1hZGUgc28gZmFyIGZvciB0aGlzIGFnZ3JlZ2F0aW9uXG4gXHRcdCAqIGludGVydmFsLiAgSW4gb3RoZXIgd29yZHMsIG1ha2UgdGhlIHN0YXR1cyBsaWtlXG4gXHRcdCAqIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpIGlzIGNhbGxlZC5cbiBcdFx0ICovXG4tXHRcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IGRhbW9uX25yX2FjY2Vzc2VzX2Zvcl9uZXdfYXR0cnMoXG4tXHRcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbi1cdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwO1xuIFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMDtcbi1cdH1cbiBcdHItXHUwMDNlYWdlID0gZGFtb25fYWdlX2Zvcl9uZXdfYXR0cnMoci1cdTAwM2VhZ2UsIG9sZF9hdHRycywgbmV3X2F0dHJzKTtcbiB9XG4gXG5AQCAtMTkzNSwzNiArMTk5Niw2IEBAIGludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcbiBcdHJldHVybiAwO1xuIH1cbiBcbi0vKlxuLSAqIFdhcm4gYW5kIGZpeCBjb3JydXB0ZWQgLVx1MDAzZW5yX2FjY2Vzc2VzW19icF0gZm9yIGludmVzdGlnYXRpb25zIGFuZCBwcmV2ZW50aW5nXG4tICogdGhlIHByb2JsZW0gYmVpbmcgcHJvcGFnYXRlZC5cbi0gKi9cbi1zdGF0aWMgdm9pZCBkYW1vbl93YXJuX2ZpeF9ucl9hY2Nlc3Nlc19jb3JydXB0aW9uKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4te1xuLVx0aWYgKHItXHUwMDNlbnJfYWNjZXNzZXNfYnAgPT0gci1cdTAwM2Vucl9hY2Nlc3NlcyAqIDEwMDAwKVxuLVx0XHRyZXR1cm47XG4tXHRXQVJOX09OQ0UodHJ1ZSwgXCJpbnZhbGlkIG5yX2FjY2Vzc2VzX2JwIGF0IHJlc2V0OiAldSAldVxcblwiLFxuLVx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHItXHUwMDNlbnJfYWNjZXNzZXMpO1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IHItXHUwMDNlbnJfYWNjZXNzZXMgKiAxMDAwMDtcbi19XG4tXG4tI2lmZGVmIENPTkZJR19EQU1PTl9ERUJVR19TQU5JVFlcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLXtcbi1cdFdBUk5fT05DRShyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwICE9IHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyAqIDEwMDAwLFxuLVx0XHRcdFwibnJfYWNjZXNzZXNfYnAgJXUgbGFzdF9ucl9hY2Nlc3NlcyAldSBzaXMgJWx1ICVsdVxcblwiLFxuLVx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3Nlcyxcbi1cdFx0XHRjLVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzLCBjLVx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzKTtcbi19XG4tI2Vsc2Vcbi1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLVx0XHRzdHJ1Y3QgZGFtb25fY3R4ICpjKVxuLXtcbi19XG4tI2VuZGlmXG4tXG4tXG4gLypcbiAgKiBSZXNldCB0aGUgYWdncmVnYXRlZCBtb25pdG9yaW5nIHJlc3VsdHMgKCducl9hY2Nlc3Nlcycgb2YgZWFjaCByZWdpb24pLlxuICAqL1xuQEAgLTE5ODksMTIgKzIwMjAsMTAgQEAgc3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4gXHRcdFx0dHJhY2VfZGFtb25fYWdncmVnYXRlZCh0aSwgciwgZGFtb25fbnJfcmVnaW9ucyh0KSk7XG4gXHRcdFx0dHJhY2VfZGFtb25fcmVnaW9uX2FnZ3JlZ2F0ZWQodGksIHIsXG4gXHRcdFx0XHRcdGRhbW9uX25yX3JlZ2lvbnModCksIG5yX3Byb2Jlcyk7XG4tXHRcdFx0ZGFtb25fd2Fybl9maXhfbnJfYWNjZXNzZXNfY29ycnVwdGlvbihyKTtcbiBcdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgPSByLVx1MDAzZW5yX2FjY2Vzc2VzO1xuIFx0XHRcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSAwO1xuIFx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIERBTU9OX01BWF9QUk9CRVM7IGkrKylcbiBcdFx0XHRcdHItXHUwMDNlcHJvYmVfaGl0c1tpXSA9IDA7XG4tXHRcdFx0ZGFtb25fdmVyaWZ5X3Jlc2V0X2FnZ3JlZ2F0ZWQociwgYyk7XG4gXHRcdH1cbiBcdFx0dGkrKztcbiBcdH1cbkBAIC0yMDYxLDEwICsyMDkwLDExIEBAIHN0YXRpYyBub2lubGluZV9mb3Jfc3RhY2sgdm9pZCBrZGFtb25kX3R1bmVfaW50ZXJ2YWxzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4gXHRkYW1vbl9zZXRfYXR0cnMoYywgXHUwMDI2bmV3X2F0dHJzKTtcbiB9XG4gXG4tc3RhdGljIGJvb2wgX19kYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuK3N0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbitcdFx0c3RydWN0IGRhbW9uX2N0eCAqYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIHN6O1xuLVx0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzID0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwO1xuK1x0dW5zaWduZWQgaW50IG5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7XG4gXG4gXHRzeiA9IGRhbW9uX3N6X3JlZ2lvbihyKTtcbiBcdHJldHVybiBzLVx1MDAzZXBhdHRlcm4ubWluX3N6X3JlZ2lvbiBcdTAwM2M9IHN6IFx1MDAyNlx1MDAyNlxuQEAgLTIwOTAsNyArMjEyMCw3IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuIHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4ge1xuLVx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzKTtcbitcdGJvb2wgcmV0ID0gX19kYW1vc192YWxpZF90YXJnZXQociwgcywgYyk7XG4gXG4gXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTIzNzQsNyArMjQwNCw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0c3RydWN0IGRhbW9zICpzaXRlcjtcdFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xuIFx0dW5zaWduZWQgaW50IHNpZHggPSAwO1xuIFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdGl0ZXI7XHQvKiB0YXJnZXRzIGl0ZXJhdG9yICovXG4tXHR1bnNpZ25lZCBpbnQgdGlkeCA9IDA7XG4rXHR1bnNpZ25lZCBpbnQgdGlkeCA9IDAsIG5yX2FjY2Vzc2VzID0gMDtcbiBcdGJvb2wgZG9fdHJhY2UgPSBmYWxzZTtcbiBcbiBcdC8qIGdldCBpbmRpY2VzIGZvciB0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoKSAqL1xuQEAgLTIzODksNiArMjQxOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0dGlkeCsrO1xuIFx0XHR9XG4rXHRcdG5yX2FjY2Vzc2VzID0gZGFtb25fbnJfYWNjZXNzZXNfbXZzdW0ociwgYyk7XG4gXHRcdGRvX3RyYWNlID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0yNDA0LDcgKzI0MzUsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbiBcdFx0XHRyZXR1cm47XG4gXHRcdGt0aW1lX2dldF9jb2Fyc2VfdHM2NChcdTAwMjZiZWdpbik7XG4tXHRcdHRyYWNlX2RhbW9zX2JlZm9yZV9hcHBseShjaWR4LCBzaWR4LCB0aWR4LCByLFxuK1x0XHR0cmFjZV9kYW1vc19iZWZvcmVfYXBwbHkoY2lkeCwgc2lkeCwgdGlkeCwgciwgbnJfYWNjZXNzZXMsXG4gXHRcdFx0XHRkYW1vbl9ucl9yZWdpb25zKHQpLCBkb190cmFjZSk7XG4gXHRcdHN6X2FwcGxpZWQgPSBjLVx1MDAzZW9wcy5hcHBseV9zY2hlbWUoYywgdCwgciwgcyxcbiBcdFx0XHRcdFx1MDAyNnN6X29wc19maWx0ZXJfcGFzc2VkKTtcbkBAIC0yNjc2LDcgKzI3MDcsNyBAQCBzdGF0aWMgcGh5c19hZGRyX3QgZGFtb3NfY2FsY19lbGlnaWJsZV9ieXRlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjLFxuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuIFx0XHRcdHBoeXNfYWRkcl90IGFkZHIsIGVuZF9hZGRyO1xuIFxuLVx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXG4rXHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdC8qIENvbnZlcnQgZnJvbSBjb3JlIGFkZHJlc3MgdW5pdHMgdG8gcGh5c2ljYWwgYnl0ZXMgKi9cbkBAIC0yOTY1LDcgKzI5OTYsNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdChEQU1PU19NQVhfU0NPUkUgKyAxKSk7XG4gXHRkYW1vbl9mb3JfZWFjaF90YXJnZXQodCwgYykge1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdGlmICghX19kYW1vc192YWxpZF90YXJnZXQociwgcykpXG4rXHRcdFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdGlmIChkYW1vc19jb3JlX2ZpbHRlcl9vdXQoYywgdCwgciwgcykpXG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0zMDY5LDcgKzMxMDAsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9tZXJnZV90d29fcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuIFxuIFx0bC1cdTAwM2Vucl9hY2Nlc3NlcyA9IChsLVx1MDAzZW5yX2FjY2Vzc2VzICogc3pfbCArIHItXHUwMDNlbnJfYWNjZXNzZXMgKiBzel9yKSAvXG4gXHRcdFx0KHN6X2wgKyBzel9yKTtcbi1cdGwtXHUwMDNlbnJfYWNjZXNzZXNfYnAgPSBsLVx1MDAzZW5yX2FjY2Vzc2VzICogMTAwMDA7XG4gXHRsLVx1MDAzZWFnZSA9IChsLVx1MDAzZWFnZSAqIHN6X2wgKyByLVx1MDAzZWFnZSAqIHN6X3IpIC8gKHN6X2wgKyBzel9yKTtcbiBcdGwtXHUwMDNlYXIuZW5kID0gci1cdTAwM2Vhci5lbmQ7XG4gXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbkBAIC0zMDgwLDIwICszMTEwLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnMoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdGRhbW9uX2Rlc3Ryb3lfcmVnaW9uKHIsIHQpO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX0RBTU9OX0RFQlVHX1NBTklUWVxuLXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9tZXJnZV9yZWdpb25zX29mKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIpXG4te1xuLVx0V0FSTl9PTkNFKHItXHUwMDNlbnJfYWNjZXNzZXMgIT0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icCAvIDEwMDAwLFxuLVx0XHRcdFwibnJfYWNjZXNzZXMgKCV1KSAhPSBucl9hY2Nlc3Nlc19icCAoJXUpXFxuXCIsXG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlcywgci1cdTAwM2Vucl9hY2Nlc3Nlc19icCk7XG4tfVxuLSNlbHNlXG4tc3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcilcbi17XG4tfVxuLSNlbmRpZlxuLVxuLVxuIC8qXG4gICogTWVyZ2UgYWRqYWNlbnQgcmVnaW9ucyBoYXZpbmcgc2ltaWxhciBhY2Nlc3MgZnJlcXVlbmNpZXNcbiAgKlxuQEAgLTMxMDcsNyArMzEyMyw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxuIFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgKnByZXYgPSBOVUxMLCAqbmV4dDtcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3JlZ2lvbl9zYWZlKHIsIG5leHQsIHQpIHtcbi1cdFx0ZGFtb25fdmVyaWZ5X21lcmdlX3JlZ2lvbnNfb2Yocik7XG4gXHRcdGlmIChhYnMoci1cdTAwM2Vucl9hY2Nlc3NlcyAtIHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcykgXHUwMDNlIHRocmVzKVxuIFx0XHRcdHItXHUwMDNlYWdlID0gMDtcbiBcdFx0ZWxzZSBpZiAoKHItXHUwMDNlbnJfYWNjZXNzZXMgPT0gMCkgIT0gKHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9PSAwKSlcbkBAIC0zMTk2LDcgKzMyMTEsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9yZWdpb25fYXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcbiBcdG5ldy1cdTAwM2VhZ2UgPSByLVx1MDAzZWFnZTtcbiBcdG5ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzID0gci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzO1xuLVx0bmV3LVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gci1cdTAwM2Vucl9hY2Nlc3Nlc19icDtcbiBcdG5ldy1cdTAwM2Vucl9hY2Nlc3NlcyA9IHItXHUwMDNlbnJfYWNjZXNzZXM7XG4gXHQvKiB0b2RvOiBkbyB0aGlzIGZvciBvbmx5IGluc3RhbGxlZCBwcm9iZXMgKi9cbiBcdG1lbWNweShuZXctXHUwMDNlcHJvYmVfaGl0cywgci1cdTAwM2Vwcm9iZV9oaXRzLCBzaXplb2Yoci1cdTAwM2Vwcm9iZV9oaXRzKSk7XG5AQCAtMzU3MSw4ICszNTg1LDcgQEAgc3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpXG4gXHRcdFx0XHQgKiBhZ2dyZWdhdGlvbiwgYW5kIG1ha2UgYWdncmVnYXRpb25cbiBcdFx0XHRcdCAqIGluZm9ybWF0aW9uIHJlc2V0IGZvciBhbGwgcmVnaW9ucy4gIFRoZW4sXG4gXHRcdFx0XHQgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbFxuLVx0XHRcdFx0ICogd2lsbCBtYWtlIHRoZSByZWdpb24gaW5mb3JtYXRpb24gaW52YWxpZCxcbi1cdFx0XHRcdCAqIHBhcnRpY3VsYXJseSBmb3IgLVx1MDAzZW5yX2FjY2Vzc2VzX2JwLlxuK1x0XHRcdFx0ICogd2lsbCBtYWtlIHRoZSByZWdpb24gaW5mb3JtYXRpb24gaW52YWxpZC5cbiBcdFx0XHRcdCAqXG4gXHRcdFx0XHQgKiBSZXNldCAtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgdG8gYXZvaWQgdGhhdC5cbiBcdFx0XHRcdCAqIEl0IHdpbGwgYW55d2F5IGNvcnJlY3RseSB1cGRhdGVkIGFmdGVyIHRoaXNcbkBAIC0zNzExLDcyICszNzI0LDE4IEBAIGludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbiBcdHJldHVybiBkYW1vbl9zZXRfcmVnaW9ucyh0LCBcdTAwMjZhZGRyX3JhbmdlLCAxLCBtaW5fcmVnaW9uX3N6KTtcbiB9XG4gXG4tLypcbi0gKiBkYW1vbl9tb3Zpbmdfc3VtKCkgLSBDYWxjdWxhdGUgYW4gaW5mZXJyZWQgbW92aW5nIHN1bSB2YWx1ZS5cbi0gKiBAbXZzdW06XHRJbmZlcnJlZCBzdW0gb2YgdGhlIGxhc3QgQGxlbl93aW5kb3cgdmFsdWVzLlxuLSAqIEBub212c3VtOlx0Tm9uLW1vdmluZyBzdW0gb2YgdGhlIGxhc3QgZGlzY3JldGUgQGxlbl93aW5kb3cgd2luZG93IHZhbHVlcy5cbi0gKiBAbGVuX3dpbmRvdzpcdFRoZSBudW1iZXIgb2YgbGFzdCB2YWx1ZXMgdG8gdGFrZSBjYXJlIG9mLlxuLSAqIEBuZXdfdmFsdWU6XHROZXcgdmFsdWUgdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwc2V1ZG8gbW92aW5nIHN1bS5cbi0gKlxuLSAqIE1vdmluZyBzdW0gKG1vdmluZyBhdmVyYWdlICogd2luZG93IHNpemUpIGlzIGdvb2QgZm9yIGhhbmRsaW5nIG5vaXNlLCBidXRcbi0gKiB0aGUgY29zdCBvZiBrZWVwaW5nIHBhc3QgdmFsdWVzIGNhbiBiZSBoaWdoIGZvciBhcmJpdHJhcnkgd2luZG93IHNpemUuICBUaGlzXG4tICogZnVuY3Rpb24gaW1wbGVtZW50cyBhIGxpZ2h0d2VpZ2h0IHBzZXVkbyBtb3Zpbmcgc3VtIGZ1bmN0aW9uIHRoYXQgZG9lc24ndFxuLSAqIGtlZXAgdGhlIHBhc3Qgd2luZG93IHZhbHVlcy5cbi0gKlxuLSAqIEl0IHNpbXBseSBhc3N1bWVzIHRoZXJlIHdhcyBubyBub2lzZSBpbiB0aGUgcGFzdCwgYW5kIGdldCB0aGUgbm8tbm9pc2Vcbi0gKiBhc3N1bWVkIHBhc3QgdmFsdWUgdG8gZHJvcCBmcm9tIEBub212c3VtIGFuZCBAbGVuX3dpbmRvdy4gIEBub212c3VtIGlzIGFcbi0gKiBub24tbW92aW5nIHN1bSBvZiB0aGUgbGFzdCB3aW5kb3cuICBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIHdlXG4tICogaGF2ZSAyNSB2YWx1ZXMsIEBub212c3VtIGlzIHRoZSBzdW0gb2YgdGhlIDExdGggdG8gMjB0aCB2YWx1ZXMgb2YgdGhlIDI1XG4tICogdmFsdWVzLiAgSGVuY2UsIHRoaXMgZnVuY3Rpb24gc2ltcGx5IGRyb3BzIEBub212c3VtIC8gQGxlbl93aW5kb3cgZnJvbVxuLSAqIGdpdmVuIEBtdnN1bSBhbmQgYWRkIEBuZXdfdmFsdWUuXG4tICpcbi0gKiBGb3IgZXhhbXBsZSwgaWYgQGxlbl93aW5kb3cgaXMgMTAgYW5kIEBub212c3VtIGlzIDUwLCB0aGUgbGFzdCAxMCB2YWx1ZXMgZm9yXG4tICogdGhlIGxhc3Qgd2luZG93IGNvdWxkIGJlIHZhcnksIGUuZy4sIDAsIDEwLCAwLCAxMCwgMCwgMTAsIDAsIDAsIDAsIDIwLiAgRm9yXG4tICogY2FsY3VsYXRpbmcgbmV4dCBtb3Zpbmcgc3VtIHdpdGggYSBuZXcgdmFsdWUsIHdlIHNob3VsZCBkcm9wIDAgZnJvbSA1MCBhbmRcbi0gKiBhZGQgdGhlIG5ldyB2YWx1ZS4gIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyBpdCBnb3QgdmFsdWUgNSBmb3IgZWFjaFxuLSAqIG9mIHRoZSBsYXN0IHRlbiB0aW1lcy4gIEJhc2VkIG9uIHRoZSBhc3N1bXB0aW9uLCB3aGVuIHRoZSBuZXh0IHZhbHVlIGlzXG4tICogbWVhc3VyZWQsIGl0IGRyb3BzIHRoZSBhc3N1bWVkIHBhc3QgdmFsdWUsIDUgZnJvbSB0aGUgY3VycmVudCBzdW0sIGFuZCBhZGRcbi0gKiB0aGUgbmV3IHZhbHVlIHRvIGdldCB0aGUgdXBkYXRlZCBwc2VkdW8tbW92aW5nIGF2ZXJhZ2UuXG4tICpcbi0gKiBUaGlzIG1lYW5zIHRoZSB2YWx1ZSBjb3VsZCBoYXZlIGVycm9ycywgYnV0IHRoZSBlcnJvcnMgd2lsbCBiZSBkaXNhcHBlYXJlZFxuLSAqIGZvciBldmVyeSBAbGVuX3dpbmRvdyBhbGlnbmVkIGNhbGxzLiAgRm9yIGV4YW1wbGUsIGlmIEBsZW5fd2luZG93IGlzIDEwLCB0aGVcbi0gKiBwc2V1ZG8gbW92aW5nIHN1bSB3aXRoIDExdGggdmFsdWUgdG8gMTl0aCB2YWx1ZSB3b3VsZCBoYXZlIGFuIGVycm9yLiAgQnV0XG4tICogdGhlIHN1bSB3aXRoIDIwdGggdmFsdWUgd2lsbCBub3QgaGF2ZSB0aGUgZXJyb3IuXG4tICpcbi0gKiBSZXR1cm46IFBzZXVkby1tb3ZpbmcgYXZlcmFnZSBhZnRlciBnZXR0aW5nIHRoZSBAbmV3X3ZhbHVlLlxuLSAqL1xuLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGFtb25fbW92aW5nX3N1bSh1bnNpZ25lZCBpbnQgbXZzdW0sIHVuc2lnbmVkIGludCBub212c3VtLFxuLVx0XHR1bnNpZ25lZCBpbnQgbGVuX3dpbmRvdywgdW5zaWduZWQgaW50IG5ld192YWx1ZSlcbi17XG4tXHRyZXR1cm4gbXZzdW0gLSBub212c3VtIC8gbGVuX3dpbmRvdyArIG5ld192YWx1ZTtcbi19XG4tXG4gLyoqXG4gICogZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZSgpIC0gVXBkYXRlIHRoZSBhY2Nlc3MgcmF0ZSBvZiBhIHJlZ2lvbi5cbiAgKiBAcjpcdFx0VGhlIERBTU9OIHJlZ2lvbiB0byB1cGRhdGUgZm9yIGl0cyBhY2Nlc3MgY2hlY2sgcmVzdWx0LlxuICAqIEBhY2Nlc3NlZDpcdFdoZXRoZXIgdGhlIHJlZ2lvbiBoYXMgYWNjZXNzZWQgZHVyaW5nIGxhc3Qgc2FtcGxpbmcgaW50ZXJ2YWwuXG4tICogQGF0dHJzOlx0VGhlIGRhbW9uX2F0dHJzIG9mIHRoZSBEQU1PTiBjb250ZXh0LlxuICAqXG4gICogVXBkYXRlIHRoZSBhY2Nlc3MgcmF0ZSBvZiBhIHJlZ2lvbiB3aXRoIHRoZSByZWdpb24ncyBsYXN0IHNhbXBsaW5nIGludGVydmFsXG4gICogYWNjZXNzIGNoZWNrIHJlc3VsdC5cbiAgKlxuICAqIFVzdWFsbHkgdGhpcyB3aWxsIGJlIGNhbGxlZCBieSBcdTAwMjZkYW1vbl9vcGVyYXRpb25zLVx1MDAzZWNoZWNrX2FjY2Vzc2VzIGNhbGxiYWNrLlxuICAqL1xuLXZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkLFxuLVx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuK3ZvaWQgZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBib29sIGFjY2Vzc2VkKVxuIHtcbi1cdHVuc2lnbmVkIGludCBsZW5fd2luZG93ID0gMTtcbi1cbi1cdC8qXG4tXHQgKiBzYW1wbGVfaW50ZXJ2YWwgY2FuIGJlIHplcm8sIGJ1dCBjYW5ub3QgYmUgbGFyZ2VyIHRoYW5cbi1cdCAqIGFnZ3JfaW50ZXJ2YWwsIG93aW5nIHRvIHZhbGlkYXRpb24gb2YgZGFtb25fc2V0X2F0dHJzKCkuXG4tXHQgKi9cbi1cdGlmIChhdHRycy1cdTAwM2VzYW1wbGVfaW50ZXJ2YWwpXG4tXHRcdGxlbl93aW5kb3cgPSBkYW1vbl9tYXhfbnJfYWNjZXNzZXMoYXR0cnMpO1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGRhbW9uX21vdmluZ19zdW0oci1cdTAwM2Vucl9hY2Nlc3Nlc19icCxcbi1cdFx0XHRyLVx1MDAzZWxhc3RfbnJfYWNjZXNzZXMgKiAxMDAwMCwgbGVuX3dpbmRvdyxcbi1cdFx0XHRhY2Nlc3NlZCA/IDEwMDAwIDogMCk7XG4tXG4gXHRpZiAoYWNjZXNzZWQpXG4gXHRcdHItXHUwMDNlbnJfYWNjZXNzZXMrKztcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vcGFkZHIuYyBiL21tL2RhbW9uL3BhZGRyLmNcbmluZGV4IDVjMmRhNDVmOTg4Y2Y5Li42MTcyNDY0OTgxNzMwNCAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3BhZGRyLmNcbisrKyBiL21tL2RhbW9uL3BhZGRyLmNcbkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBib29sIGRhbW9uX3BhX3lvdW5nKHBoeXNfYWRkcl90IHBhZGRyLCB1bnNpZ25lZCBsb25nICpmb2xpb19zeilcbiB9XG4gXG4gc3RhdGljIHZvaWQgX19kYW1vbl9wYV9jaGVja19hY2Nlc3Moc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi1cdFx0c3RydWN0IGRhbW9uX2F0dHJzICphdHRycywgdW5zaWduZWQgbG9uZyBhZGRyX3VuaXQpXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcl91bml0KVxuIHtcbiBcdHN0YXRpYyBwaHlzX2FkZHJfdCBsYXN0X2FkZHI7XG4gXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2ZvbGlvX3N6ID0gUEFHRV9TSVpFO1xuQEAgLTkxLDEyICs5MSwxMiBAQCBzdGF0aWMgdm9pZCBfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuIFx0LyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi9cbiBcdGlmIChBTElHTl9ET1dOKGxhc3RfYWRkciwgbGFzdF9mb2xpb19zeikgPT1cbiBcdFx0XHRcdEFMSUdOX0RPV04oc2FtcGxpbmdfYWRkciwgbGFzdF9mb2xpb19zeikpIHtcbi1cdFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkLCBhdHRycyk7XG4rXHRcdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdGxhc3RfYWNjZXNzZWQgPSBkYW1vbl9wYV95b3VuZyhzYW1wbGluZ19hZGRyLCBcdTAwMjZsYXN0X2ZvbGlvX3N6KTtcbi1cdGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUociwgbGFzdF9hY2Nlc3NlZCwgYXR0cnMpO1xuK1x0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkKTtcbiBcbiBcdGxhc3RfYWRkciA9IHNhbXBsaW5nX2FkZHI7XG4gfVxuQEAgLTEwOSw4ICsxMDksNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGRhbW9uX3BhX2NoZWNrX2FjY2Vzc2VzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbiBcbiBcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjdHgpIHtcbiBcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbi1cdFx0XHRfX2RhbW9uX3BhX2NoZWNrX2FjY2Vzcyhcbi1cdFx0XHRcdFx0ciwgXHUwMDI2Y3R4LVx1MDAzZWF0dHJzLCBjdHgtXHUwMDNlYWRkcl91bml0KTtcbitcdFx0XHRfX2RhbW9uX3BhX2NoZWNrX2FjY2VzcyhyLCBjdHgtXHUwMDNlYWRkcl91bml0KTtcbiBcdFx0XHRtYXhfbnJfYWNjZXNzZXMgPSBtYXgoci1cdTAwM2Vucl9hY2Nlc3NlcywgbWF4X25yX2FjY2Vzc2VzKTtcbiBcdFx0fVxuIFx0fVxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuYyBiL21tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY1xuaW5kZXggNDFmOTNhMTgyM2JmMTMuLmRiZjJiMDUxNWQ1ODI5IDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vc3lzZnMtc2NoZW1lcy5jXG4rKysgYi9tbS9kYW1vbi9zeXNmcy1zY2hlbWVzLmNcbkBAIC0xNTcsNyArMTU3LDcgQEAgc3RydWN0IGRhbW9uX3N5c2ZzX3NjaGVtZV9yZWdpb24ge1xuIH07XG4gXG4gc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxuLVx0XHRzdHJ1Y3QgZGFtb25fcmVnaW9uICpyZWdpb24pXG4rXHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnJlZ2lvbiwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuIHtcbiBcdHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpzeXNmc19yZWdpb24gPSBrbWFsbG9jX29iaigqc3lzZnNfcmVnaW9uKTtcbiBcbkBAIC0xNjUsNyArMTY1LDcgQEAgc3RhdGljIHN0cnVjdCBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uICpkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKFxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdHN5c2ZzX3JlZ2lvbi1cdTAwM2Vrb2JqID0gKHN0cnVjdCBrb2JqZWN0KXt9O1xuIFx0c3lzZnNfcmVnaW9uLVx1MDAzZWFyID0gcmVnaW9uLVx1MDAzZWFyO1xuLVx0c3lzZnNfcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzID0gcmVnaW9uLVx1MDAzZW5yX2FjY2Vzc2VzX2JwIC8gMTAwMDA7XG4rXHRzeXNmc19yZWdpb24tXHUwMDNlbnJfYWNjZXNzZXMgPSBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bShyZWdpb24sIGN0eCk7XG4gXHRzeXNmc19yZWdpb24tXHUwMDNlYWdlID0gcmVnaW9uLVx1MDAzZWFnZTtcbiBcdHN5c2ZzX3JlZ2lvbi1cdTAwM2Vwcm9iZXMgPSBOVUxMO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3lzZnNfcmVnaW9uLVx1MDAzZWxpc3QpO1xuQEAgLTMxMjIsNyArMzEyMiw3IEBAIHZvaWQgZGFtb3Nfc3lzZnNfcG9wdWxhdGVfcmVnaW9uX2RpcihzdHJ1Y3QgZGFtb25fc3lzZnNfc2NoZW1lcyAqc3lzZnNfc2NoZW1lcyxcbiBcdGlmICh0b3RhbF9ieXRlc19vbmx5KVxuIFx0XHRyZXR1cm47XG4gXG4tXHRyZWdpb24gPSBkYW1vbl9zeXNmc19zY2hlbWVfcmVnaW9uX2FsbG9jKHIpO1xuK1x0cmVnaW9uID0gZGFtb25fc3lzZnNfc2NoZW1lX3JlZ2lvbl9hbGxvYyhyLCBjdHgpO1xuIFx0aWYgKCFyZWdpb24pXG4gXHRcdHJldHVybjtcbiBcdHJlZ2lvbi1cdTAwM2Vzel9maWx0ZXJfcGFzc2VkID0gc3pfZmlsdGVyX3Bhc3NlZDtcbmRpZmYgLS1naXQgYS9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmggYi9tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmhcbmluZGV4IGZjZjdjN2ZhZGI1ZmU1Li5mMWZhZWJiNmZmOTkzZiAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaFxuKysrIGIvbW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oXG5AQCAtMTE0LDcgKzExNCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfYWdncmVnYXRlKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0XHRcdGt1bml0X3NraXAodGVzdCwgXCJyZWdpb24gYWxsb2MgZmFpbFwiKTtcbiBcdFx0XHR9XG4gXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IGFjY2Vzc2VzW2l0XVtpcl07XG4tXHRcdFx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IGFjY2Vzc2VzW2l0XVtpcl0gKiAxMDAwMDtcbiBcdFx0XHRkYW1vbl9hZGRfcmVnaW9uKHIsIHQpO1xuIFx0XHR9XG4gXHRcdGl0Kys7XG5AQCAtMTUxLDcgKzE1MCw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3Rfc3BsaXRfYXQoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRkYW1vbl9mcmVlX3RhcmdldCh0KTtcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInJlZ2lvbiBhbGxvYyBmYWlsXCIpO1xuIFx0fVxuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDQyMDAwMDtcbiBcdHItXHUwMDNlbnJfYWNjZXNzZXMgPSA0MjtcbiBcdHItXHUwMDNlbGFzdF9ucl9hY2Nlc3NlcyA9IDE1O1xuIFx0ci1cdTAwM2VhZ2UgPSAxMDtcbkBAIC0xNjQsNyArMTYyLDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9zcGxpdF9hdChzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgcl9uZXctXHUwMDNlYXIuc3RhcnQsIDI1dWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHJfbmV3LVx1MDAzZWFyLmVuZCwgMTAwdWwpO1xuIFxuLVx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlbnJfYWNjZXNzZXNfYnAsIHJfbmV3LVx1MDAzZW5yX2FjY2Vzc2VzX2JwKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2Vucl9hY2Nlc3Nlcyk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzLCByX25ldy1cdTAwM2VsYXN0X25yX2FjY2Vzc2VzKTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgcl9uZXctXHUwMDNlYWdlKTtcbkBAIC0xODcsNyArMTg0LDYgQEAgc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tZXJnZV90d28oc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRrdW5pdF9za2lwKHRlc3QsIFwicmVnaW9uIGFsbG9jIGZhaWxcIik7XG4gXHR9XG4gXHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMTA7XG4tXHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gMTAwMDAwO1xuIFx0ci1cdTAwM2VhZ2UgPSA5O1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyLCB0KTtcbiBcdHIyID0gZGFtb25fbmV3X3JlZ2lvbigxMDAsIDMwMCk7XG5AQCAtMTk2LDcgKzE5Miw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInNlY29uZCByZWdpb24gYWxsb2MgZmFpbFwiKTtcbiBcdH1cbiBcdHIyLVx1MDAzZW5yX2FjY2Vzc2VzID0gMjA7XG4tXHRyMi1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDIwMDAwMDtcbiBcdHIyLVx1MDAzZWFnZSA9IDIxO1xuIFx0ZGFtb25fYWRkX3JlZ2lvbihyMiwgdCk7XG4gXG5AQCAtMjA0LDcgKzE5OSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfbWVyZ2VfdHdvKHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFyLnN0YXJ0LCAwdWwpO1xuIFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIHItXHUwMDNlYXIuZW5kLCAzMDB1bCk7XG4gXHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgci1cdTAwM2Vucl9hY2Nlc3NlcywgMTZ1KTtcbi1cdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZW5yX2FjY2Vzc2VzX2JwLCAxNjAwMDB1KTtcbiBcdEtVTklUX0VYUEVDVF9FUSh0ZXN0LCByLVx1MDAzZWFnZSwgMTd1KTtcbiBcbiBcdGkgPSAwO1xuQEAgLTI1Miw3ICsyNDYsNiBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuIFx0XHRcdGt1bml0X3NraXAodGVzdCwgXCJyZWdpb24gYWxsb2MgZmFpbFwiKTtcbiBcdFx0fVxuIFx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzID0gbnJzW2ldO1xuLVx0XHRyLVx1MDAzZW5yX2FjY2Vzc2VzX2JwID0gbnJzW2ldICogMTAwMDA7XG4gXHRcdGRhbW9uX2FkZF9yZWdpb24ociwgdCk7XG4gXHR9XG4gXG5AQCAtNTUyLDcgKzU0NSw2IEBAIHN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBrdW5pdCAqdGVzdClcbiBcdFx0a3VuaXRfc2tpcCh0ZXN0LCBcInJlZ2lvbiBhbGxvYyBmYWlsXCIpO1xuIFxuIFx0ci1cdTAwM2Vucl9hY2Nlc3NlcyA9IDE1O1xuLVx0ci1cdTAwM2Vucl9hY2Nlc3Nlc19icCA9IDE1MDAwMDtcbiBcdHItXHUwMDNlYWdlID0gMjA7XG4gXG4gXHRuZXdfYXR0cnMgPSAoc3RydWN0IGRhbW9uX2F0dHJzKXtcbkBAIC02MDQsMTggKzU5NiwyNyBAQCBzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NldF9hdHRycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4gXHRkYW1vbl9kZXN0cm95X2N0eChjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgZGFtb25fdGVzdF9tb3Zpbmdfc3VtKHN0cnVjdCBrdW5pdCAqdGVzdClcbitzdGF0aWMgdm9pZCBkYW1vbl90ZXN0X212c3VtKHN0cnVjdCBrdW5pdCAqdGVzdClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbXZzdW0gPSA1MDAwMCwgbm9tdnN1bSA9IDUwMDAwLCBsZW5fd2luZG93ID0gMTA7XG4tXHR1bnNpZ25lZCBpbnQgbmV3X3ZhbHVlc1tdID0gezEwMDAwLCAwLCAxMDAwMCwgMCwgMCwgMCwgMTAwMDAsIDAsIDAsIDB9O1xuLVx0dW5zaWduZWQgaW50IGV4cGVjdHNbXSA9IHs1NTAwMCwgNTAwMDAsIDU1MDAwLCA1MDAwMCwgNDUwMDAsIDQwMDAwLFxuLVx0XHQ0NTAwMCwgNDAwMDAsIDM1MDAwLCAzMDAwMH07XG4rXHR1bnNpZ25lZCBsb25nIGlucHV0X2V4cGVjdHNbXSA9IHtcbitcdFx0LyogY3VycmVudCB2YWx1ZSwgbGFzdCB2YWx1ZSwgcmVtYWluaW5nIHdpbmRvdyAoYnApICovXG4rXHRcdDAsIDQ5LCAxMDAwMCwgNDksXHQvKiAwICsgNDkgKiAxICovXG4rXHRcdDMsIDEwLCA3MDAwLCAxMCxcdC8qIDMgKyAxMCAqIDAuNyAqL1xuK1x0XHQzLCAxMCwgNTAwMCwgOCxcdFx0LyogMyArIDEwICogMC41ICovXG4rXHRcdDMyLCAxMDAsIDEwMDAsIDQyLFx0LyogMzIgKyAxMDAgKiAwLjEgKi9cbitcdFx0NDIsIDQ5LCAwLCA0MixcdFx0LyogNDIgKyA0OSAqIDAgKi9cbitcdH07XG4rXG4gXHRpbnQgaTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobmV3X3ZhbHVlcyk7IGkrKykge1xuLVx0XHRtdnN1bSA9IGRhbW9uX21vdmluZ19zdW0obXZzdW0sIG5vbXZzdW0sIGxlbl93aW5kb3csXG4tXHRcdFx0XHRuZXdfdmFsdWVzW2ldKTtcbi1cdFx0S1VOSVRfRVhQRUNUX0VRKHRlc3QsIG12c3VtLCBleHBlY3RzW2ldKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUoaW5wdXRfZXhwZWN0cyk7IGkgKz0gNCkge1xuK1x0XHR1bnNpZ25lZCBsb25nIGN1cnJlbnRfbnIgPSBpbnB1dF9leHBlY3RzW2ldO1xuK1x0XHR1bnNpZ25lZCBsb25nIGxhc3RfbnIgPSBpbnB1dF9leHBlY3RzW2kgKyAxXTtcbitcdFx0dW5zaWduZWQgbG9uZyBsZWZ0X3dpbmRvd19icCA9IGlucHV0X2V4cGVjdHNbaSArIDJdO1xuK1x0XHR1bnNpZ25lZCBsb25nIGV4cGVjdCA9IGlucHV0X2V4cGVjdHNbaSArIDNdO1xuK1xuK1x0XHRLVU5JVF9FWFBFQ1RfRVEodGVzdCwgZGFtb25fbXZzdW0oY3VycmVudF9uciwgbGFzdF9ucixcbitcdFx0XHRcdFx0bGVmdF93aW5kb3dfYnApLCBleHBlY3QpO1xuIFx0fVxuIH1cbiBcbkBAIC0xNDY5LDcgKzE0NzAsNyBAQCBzdGF0aWMgc3RydWN0IGt1bml0X2Nhc2UgZGFtb25fdGVzdF9jYXNlc1tdID0ge1xuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X25yX2FjY2Vzc2VzX3RvX2FjY2Vzc2VzX2JwKSxcbiBcdEtVTklUX0NBU0UoZGFtb25fdGVzdF91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQpLFxuIFx0S1VOSVRfQ0FTRShkYW1vbl90ZXN0X3NldF9hdHRycyksXG4tXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbW92aW5nX3N1bSksXG4rXHRLVU5JVF9DQVNFKGRhbW9uX3Rlc3RfbXZzdW0pLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X25ld19maWx0ZXIpLFxuIFx0S1VOSVRfQ0FTRShkYW1vc190ZXN0X2NvbW1pdF9xdW90YV9nb2FsKSxcbiBcdEtVTklUX0NBU0UoZGFtb3NfdGVzdF9jb21taXRfcXVvdGFfZ29hbHMpLFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL3ZhZGRyLmMgYi9tbS9kYW1vbi92YWRkci5jXG5pbmRleCBlNzNlYzFjZTAxNmU1Yi4uMjA1OGRiOWMwMWQ1MmYgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi92YWRkci5jXG4rKysgYi9tbS9kYW1vbi92YWRkci5jXG5AQCAtNDkzLDI3ICs0OTMsMjYgQEAgc3RhdGljIGJvb2wgZGFtb25fdmFfeW91bmcoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiAgKiByXHR0aGUgcmVnaW9uIHRvIGJlIGNoZWNrZWRcbiAgKi9cbiBzdGF0aWMgdm9pZCBfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi1cdFx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgc2FtZV90YXJnZXQsXG4tXHRcdFx0XHRzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuK1x0XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBzYW1lX3RhcmdldClcbiB7XG4gXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2FkZHI7XG4gXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X2ZvbGlvX3N6ID0gUEFHRV9TSVpFO1xuIFx0c3RhdGljIGJvb2wgbGFzdF9hY2Nlc3NlZDtcbiBcbiBcdGlmICghbW0pIHtcbi1cdFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBmYWxzZSwgYXR0cnMpO1xuK1x0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGZhbHNlKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0LyogSWYgdGhlIHJlZ2lvbiBpcyBpbiB0aGUgbGFzdCBjaGVja2VkIHBhZ2UsIHJldXNlIHRoZSByZXN1bHQgKi9cbiBcdGlmIChzYW1lX3RhcmdldCBcdTAwMjZcdTAwMjYgKEFMSUdOX0RPV04obGFzdF9hZGRyLCBsYXN0X2ZvbGlvX3N6KSA9PVxuIFx0XHRcdFx0QUxJR05fRE9XTihyLVx1MDAzZXNhbXBsaW5nX2FkZHIsIGxhc3RfZm9saW9fc3opKSkge1xuLVx0XHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQsIGF0dHJzKTtcbitcdFx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0bGFzdF9hY2Nlc3NlZCA9IGRhbW9uX3ZhX3lvdW5nKG1tLCByLVx1MDAzZXNhbXBsaW5nX2FkZHIsIFx1MDAyNmxhc3RfZm9saW9fc3opO1xuLVx0ZGFtb25fdXBkYXRlX3JlZ2lvbl9hY2Nlc3NfcmF0ZShyLCBsYXN0X2FjY2Vzc2VkLCBhdHRycyk7XG4rXHRkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHIsIGxhc3RfYWNjZXNzZWQpO1xuIFxuIFx0bGFzdF9hZGRyID0gci1cdTAwM2VzYW1wbGluZ19hZGRyO1xuIH1cbkBAIC01MzAsOCArNTI5LDcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBkYW1vbl92YV9jaGVja19hY2Nlc3NlcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4gXHRcdG1tID0gZGFtb25fZ2V0X21tKHQpO1xuIFx0XHRzYW1lX3RhcmdldCA9IGZhbHNlO1xuIFx0XHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xuLVx0XHRcdF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzKG1tLCByLCBzYW1lX3RhcmdldCxcbi1cdFx0XHRcdFx0XHUwMDI2Y3R4LVx1MDAzZWF0dHJzKTtcbitcdFx0XHRfX2RhbW9uX3ZhX2NoZWNrX2FjY2VzcyhtbSwgciwgc2FtZV90YXJnZXQpO1xuIFx0XHRcdG1heF9ucl9hY2Nlc3NlcyA9IG1heChyLVx1MDAzZW5yX2FjY2Vzc2VzLCBtYXhfbnJfYWNjZXNzZXMpO1xuIFx0XHRcdHNhbWVfdGFyZ2V0ID0gdHJ1ZTtcbiBcdFx0fVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2RhbW9uL2RyZ25fZHVtcF9kYW1vbl9zdGF0dXMucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG5pbmRleCA5NzI5NDhlNjIxNWYxZC4uNDk0MmFmZGY0NmNkNDQgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9kYW1vbi9kcmduX2R1bXBfZGFtb25fc3RhdHVzLnB5XG5AQCAtNTksNyArNTksNiBAQCBkZWYgcmVnaW9uX3RvX2RpY3QocmVnaW9uKTpcbiAgICAgICAgIFsnYXInLCBhZGRyX3JhbmdlX3RvX2RpY3RdLFxuICAgICAgICAgWydzYW1wbGluZ19hZGRyJywgaW50XSxcbiAgICAgICAgIFsnbnJfYWNjZXNzZXMnLCBpbnRdLFxuLSAgICAgICAgWyducl9hY2Nlc3Nlc19icCcsIGludF0sXG4gICAgICAgICBbJ2FnZScsIGludF0sXG4gICAgICAgICBdKVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTU6MjYuNTI0NDkxMTE4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2NTY5NDgzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBQYXRjaCBBbmFseXNpcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgdGhlIERBTU9OIHN1YnN5c3RlbSBpbiB0aGUgTGludXgga2VybmVsLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgcmVtb3ZhbCBvZiBgbnJfYWNjZXNzZXNfYnBgIGZyb20gYHN0cnVjdCBkYW1vbl9yZWdpb25gIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIHRoaXMgYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtKClgIGZ1bmN0aW9uLCB3aGljaCBjYWxjdWxhdGVzIGEgcHNldWRvIG1vdmluZyBzdW0gYWNjZXNzIGZyZXF1ZW5jeSBzY29yZS4gRXNzZW50aWFsbHksIHRoZXkncmUgbW92aW5nIGF3YXkgZnJvbSBhIHN0cmFpZ2h0Zm9yd2FyZCBjb3VudCBhbmQgdHJ5aW5nIGEgbW9yZSBudWFuY2VkIGFjY2VzcyByYXRlIHJlcHJlc2VudGF0aW9uLiBUaGlzIG5ldyBmdW5jdGlvbiwgYWxvbmcgd2l0aCB0aGUgbW9kaWZpY2F0aW9uIG9mIGBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlYCBhbmQgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YCB0byB1dGlsaXplIHRoaXMgbG9naWMsIGlzIHRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UuXG5cblNpbmNlIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgREFNT04gbG9naWMgYWNyb3NzIHNldmVyYWwgZmlsZXMgKGBtbS9kYW1vbi9jb3JlLmNgLCBgbW0vZGFtb24vcGFkZHIuY2AsIGBtbS9kYW1vbi92YWRkci5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2ApLCBpdCdzIGZ1bmN0aW9uYWwgY29kZSB0aGF0IGRpcmVjdGx5IGFsdGVycyBEQU1PTidzIGV4ZWN1dGlvbiBmbG93LiBBbmQgY29uc2lkZXJpbmcgdGhhdCBEQU1PTiBjYW4gbW9uaXRvciB2aXJ0dWFsIGFuZCBwaHlzaWNhbCBhZGRyZXNzZXMsIHRoaXMgbWFrZXMgaXQgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlcmVmb3JlLCBpdCdzIGRlZmluaXRlbHkgV29ydGhGdXp6aW5nLlxuXG5Ob3csIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgZnVuY3Rpb25zIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbi4gSSB0aGluayBJJ2xsIHN0YXJ0IHdpdGggdGhlIG5ldyBmdW5jdGlvbnMsIHNwZWNpZmljYWxseTpcblxuKiAgIGBkYW1vbl9tdnN1bWBcbiogICBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gXG5cbkFuZCB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zLCB3aGljaCBhbHNvIHdhcnJhbnQgY2xvc2UgYXR0ZW50aW9uOlxuXG4qICAgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgXG4qICAgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YFxuKiAgIGBkYW1vc19hcHBseV9zY2hlbWVgXG4qICAgYGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNgXG4qICAgYGRhbW9zX2FkanVzdF9xdW90YWBcbiogICBgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNgXG4qICAgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgXG4qICAgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGBcbiogICBga2RhbW9uZF9mbmBcbiogICBgX19kYW1vbl9wYV9jaGVja19hY2Nlc3NgXG4qICAgYF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzYFxuXG5OZXh0IHN0ZXAgaXMgdG8gY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucywgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzIGZvciBEQU1PTiB0byBzZWUgaG93IHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkgZHVyaW5nIGZ1enppbmcuIEknbGwgc2VhcmNoIGZvciBgREFNT05gIHdpdGhpbiBgbW0vZGFtb24vS2NvbmZpZ2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMTUyLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTU6MzQuNzkwMTg5MDM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjMwMDU0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vbi9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTU6MzQuODUxODI0MjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzU2OTAzODYxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSd2ZSBsb29rZWQgYXQgdGhlIGRpZmYuIEl0J3MgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AsIGBtbS9kYW1vbi9wYWRkci5jYCwgYG1tL2RhbW9uL3N5c2ZzLXNjaGVtZXMuY2AsIGFuZCBgbW0vZGFtb24vdmFkZHIuY2AuIEdpdmVuIHRoZXNlIG1vZGlmaWNhdGlvbnMsIEkgbmVlZCB0byBlbmFibGUgYERBTU9OYCwgYERBTU9OX1ZBRERSYCwgYERBTU9OX1BBRERSYCwgYW5kIGBEQU1PTl9TWVNGU2AgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIE1ha2VzIHNlbnNlLlxuXG5Ob3csIHRoZSBmb2N1cy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb25zIGFyZSBtb3N0IGNyaXRpY2FsIGZvciBmdXp6aW5nLiBJJ3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb25zIHRoYXQgc2VlbSBsaWtlIGdvb2QgdGFyZ2V0czogYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCwgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgLCBgX19kYW1vc192YWxpZF90YXJnZXRgLCBgZGFtb3NfYXBwbHlfc2NoZW1lYCwgYGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNgLCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYGRhbW9uX21lcmdlX3R3b19yZWdpb25zYCwgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgLCBgZGFtb25fc3BsaXRfcmVnaW9uX2F0YCwgYF9fZGFtb25fcGFfY2hlY2tfYWNjZXNzYCwgYW5kIGBfX2RhbW9uX3ZhX2NoZWNrX2FjY2Vzc2AuXG5cbkknbSBkb3VibGUtY2hlY2tpbmcgdGhlIHZpc2liaWxpdHkgb2YgYGRhbW9uX212c3VtYCBiZWNhdXNlIGl0IGxvb2tzIHJlbGF0ZWQgdG8gdGhlIGFjY2VzcyBzdW1tYXJpZXMsIGFuZCB3aGV0aGVyIGl0J3Mgc3RhdGljIG9yIGV4cG9ydGVkIGltcGFjdHMgbXkgZnV6emluZyBhcHByb2FjaC4gQWgsIGl0J3Mgc3RhdGljIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSG1tLCBTeXprYWxsZXIgY2FuIHNvbWV0aW1lcyByZWFjaCBzdGF0aWMgZnVuY3Rpb25zIGlmIHJlYWNoYWJsZSB0aHJvdWdoIGFub3RoZXIgbWV0aG9kLCBidXQgZm9yIG5vdyBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gIHdpbGwgYmUgdGhlIGZ1bmN0aW9uIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuIGBkYW1vbl9ucl9hY2Nlc3Nlc19tdnN1bWAgbG9va3MgbGlrZSB0aGUgcHJpbWFyeSBuZXcgZnVuY3Rpb24sIEknbGwgcHJpb3JpdGl6ZSBpdCBmb3IgZnV6emluZy5cblxuTGV0J3MgcmVmaW5lIHRoZSBsaXN0LiBJJ20gZ29pbmcgdG8gc2V0IHRoZXNlIGFzIHRoZSBGb2N1c1N5bWJvbHMsIHNpbmNlIHRoZXNlIGFyZSBsaWtlbHkgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBhbmQgZGF0YSBwcm9jZXNzaW5nIGZ1bmN0aW9ucyBmb3IgREFNT046XG5cbiogICBgZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1gXG4qICAgYGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVgXG4qICAgYF9fZGFtb3NfdmFsaWRfdGFyZ2V0YFxuKiAgIGBkYW1vc19hcHBseV9zY2hlbWVgXG4qICAgYGRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNgXG4qICAgYGRhbW9zX2FkanVzdF9xdW90YWBcbiogICBgZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNgXG4qICAgYGRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZgXG4qICAgYGRhbW9uX3NwbGl0X3JlZ2lvbl9hdGBcbiogICBgX19kYW1vbl9wYV9jaGVja19hY2Nlc3NgXG4qICAgYF9fZGFtb25fdmFfY2hlY2tfYWNjZXNzYFxuXG5BbHJpZ2h0LCB0aGF0IGNvdmVycyB0aGUgZXNzZW50aWFscy4gSSdsbCBwcm9jZWVkIHdpdGggdGhlIFwic2V0LXJlc3VsdHNcIiBjYWxsLCBnaXZlbiB0aGVzZSBjb25maWd1cmF0aW9ucyBhbmQgZm9jdXMgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzg0OCwiT3V0cHV0VG9rZW5zIjoyNzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMDU6NTY6MjIuNDIwODY2MDI0WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDI1NTk2MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1cIixcbiAgICBcImRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVcIixcbiAgICBcIl9fZGFtb3NfdmFsaWRfdGFyZ2V0XCIsXG4gICAgXCJkYW1vc19hcHBseV9zY2hlbWVcIixcbiAgICBcImRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwiZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNcIixcbiAgICBcImRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZcIixcbiAgICBcImRhbW9uX3NwbGl0X3JlZ2lvbl9hdFwiLFxuICAgIFwiX19kYW1vbl9wYV9jaGVja19hY2Nlc3NcIixcbiAgICBcIl9fZGFtb25fdmFfY2hlY2tfYWNjZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBgbnJfYWNjZXNzZXNfYnBgIGZpZWxkIHdpdGggYSBwc2V1ZG8gbW92aW5nIHN1bSBjYWxjdWxhdGlvbiAoYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCkuIFRoaXMgYWZmZWN0cyBob3cgYWNjZXNzIGZyZXF1ZW5jaWVzIGFyZSBjYWxjdWxhdGVkLCBtZXJnZWQsIHNwbGl0LCBhbmQgZXZhbHVhdGVkIGZvciBzY2hlbWVzIGFjcm9zcyBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIixcbiAgICBcIkRBTU9OX1NZU0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb25fbnJfYWNjZXNzZXNfbXZzdW1cIixcbiAgICBcImRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGVcIixcbiAgICBcIl9fZGFtb3NfdmFsaWRfdGFyZ2V0XCIsXG4gICAgXCJkYW1vc19hcHBseV9zY2hlbWVcIixcbiAgICBcImRhbW9zX2NhbGNfZWxpZ2libGVfYnl0ZXNcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwiZGFtb25fbWVyZ2VfdHdvX3JlZ2lvbnNcIixcbiAgICBcImRhbW9uX21lcmdlX3JlZ2lvbnNfb2ZcIixcbiAgICBcImRhbW9uX3NwbGl0X3JlZ2lvbl9hdFwiLFxuICAgIFwiX19kYW1vbl9wYV9jaGVja19hY2Nlc3NcIixcbiAgICBcIl9fZGFtb25fdmFfY2hlY2tfYWNjZXNzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgb2YgdGhlIERBTU9OIChEYXRhIEFjY2VzcyBNT05pdG9yKSBzdWJzeXN0ZW0gYnkgcmVwbGFjaW5nIHRoZSBgbnJfYWNjZXNzZXNfYnBgIGZpZWxkIHdpdGggYSBwc2V1ZG8gbW92aW5nIHN1bSBjYWxjdWxhdGlvbiAoYGRhbW9uX25yX2FjY2Vzc2VzX212c3VtYCkuIFRoaXMgYWZmZWN0cyBob3cgYWNjZXNzIGZyZXF1ZW5jaWVzIGFyZSBjYWxjdWxhdGVkLCBtZXJnZWQsIHNwbGl0LCBhbmQgZXZhbHVhdGVkIGZvciBzY2hlbWVzIGFjcm9zcyBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3MgbW9uaXRvcmluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyB0aGF0IGNhbiBiZSByZWFjaGVkIGFuZCB0ZXN0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflownjcjz[1] Phase: Succeeded StartedAt: 2026-06-30 05:57:00 +0000 UTC FinishedAt: 2026-06-30 05:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 05:57:00 +0000 UTC FinishedAt: 2026-06-30 05:57:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2] Phase: Succeeded StartedAt: 2026-06-30 05:57:00 +0000 UTC FinishedAt: 2026-06-30 10:20:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 05:57:00 +0000 UTC FinishedAt: 2026-06-30 10:20:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 05:57:00 +0000 UTC FinishedAt: 2026-06-30 05:57:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 05:57:00 +0000 UTC FinishedAt: 2026-06-30 05:57:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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-workflownjcjz/series-workflownjcjz-convert-artifact-900739194/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 05:57:23 +0000 UTC FinishedAt: 2026-06-30 06:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 05:57:23 +0000 UTC FinishedAt: 2026-06-30 06:37:18 +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:*e8b8197b-938a-481f-bd91-c60320f2525c,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-workflownjcjz/series-workflownjcjz-convert-artifact-900739194/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": "fb5d4a02-0e87-4271-b923-2c2032bf4d75", "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-workflownjcjz/series-workflownjcjz-build-action-3235512616/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 05:57:23 +0000 UTC FinishedAt: 2026-06-30 06:37:14 +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:*e8b8197b-938a-481f-bd91-c60320f2525c,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-workflownjcjz/series-workflownjcjz-convert-artifact-900739194/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": "fb5d4a02-0e87-4271-b923-2c2032bf4d75", "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-workflownjcjz/series-workflownjcjz-build-action-3235512616/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:37:18 +0000 UTC FinishedAt: 2026-06-30 06:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:37:18 +0000 UTC FinishedAt: 2026-06-30 06:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:37:18 +0000 UTC FinishedAt: 2026-06-30 06:37:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:37:18 +0000 UTC FinishedAt: 2026-06-30 06:37:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-workflownjcjz/series-workflownjcjz-convert-artifact-3575693781/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:37:28 +0000 UTC FinishedAt: 2026-06-30 06:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:37:28 +0000 UTC FinishedAt: 2026-06-30 06:39:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb5d4a02-0e87-4271-b923-2c2032bf4d75,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-workflownjcjz/series-workflownjcjz-build-action-3235512616/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-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:39:49 +0000 UTC FinishedAt: 2026-06-30 06:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:39:49 +0000 UTC FinishedAt: 2026-06-30 06:39:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:39:49 +0000 UTC FinishedAt: 2026-06-30 07:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:39:49 +0000 UTC FinishedAt: 2026-06-30 07:15: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:*e8b8197b-938a-481f-bd91-c60320f2525c,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-workflownjcjz/series-workflownjcjz-convert-artifact-3575693781/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": "63e174f7-81cc-487d-acd7-a25fe8bda5ee", "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-workflownjcjz/series-workflownjcjz-build-action-856810337/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 06:39:49 +0000 UTC FinishedAt: 2026-06-30 07:15:41 +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:*e8b8197b-938a-481f-bd91-c60320f2525c,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-workflownjcjz/series-workflownjcjz-convert-artifact-3575693781/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": "63e174f7-81cc-487d-acd7-a25fe8bda5ee", "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-workflownjcjz/series-workflownjcjz-build-action-856810337/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:15:51 +0000 UTC FinishedAt: 2026-06-30 07:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:15:51 +0000 UTC FinishedAt: 2026-06-30 07:15:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:15:51 +0000 UTC FinishedAt: 2026-06-30 07:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:15:51 +0000 UTC FinishedAt: 2026-06-30 07:17:44 +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:*63e174f7-81cc-487d-acd7-a25fe8bda5ee,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-workflownjcjz/series-workflownjcjz-build-action-856810337/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-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:17:54 +0000 UTC FinishedAt: 2026-06-30 10:20:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:17:54 +0000 UTC FinishedAt: 2026-06-30 10:20:21 +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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"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:*fb5d4a02-0e87-4271-b923-2c2032bf4d75,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*63e174f7-81cc-487d-acd7-a25fe8bda5ee,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-workflownjcjz/series-workflownjcjz-build-action-3235512616/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-workflownjcjz/series-workflownjcjz-build-action-856810337/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:17:54 +0000 UTC FinishedAt: 2026-06-30 07:18:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:17:54 +0000 UTC FinishedAt: 2026-06-30 07:18:02 +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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"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-workflownjcjz/series-workflownjcjz-convert-artifact-1714148538/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:17:54 +0000 UTC FinishedAt: 2026-06-30 07:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:17:54 +0000 UTC FinishedAt: 2026-06-30 07:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:17:54 +0000 UTC FinishedAt: 2026-06-30 07:17:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:18:14 +0000 UTC FinishedAt: 2026-06-30 10:20:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflownjcjz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"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_nr_accesses_mvsum","damon_update_region_access_rate","__damos_valid_target","damos_apply_scheme","damos_calc_eligible_bytes","damos_adjust_quota","damon_merge_two_regions","damon_merge_regions_of","damon_split_region_at","__damon_pa_check_access","__damon_va_check_access"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"88cefc306c43b58d9bb65c9e96e284306710d961","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_VADDR","DAMON_PADDR","DAMON_SYSFS"],"series_id":"eb48f907-ee29-4c62-8d0e-494af5f4b15b","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-06-30 07:18:14 +0000 UTC FinishedAt: 2026-06-30 10:20:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*fb5d4a02-0e87-4271-b923-2c2032bf4d75,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*63e174f7-81cc-487d-acd7-a25fe8bda5ee,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-workflownjcjz/series-workflownjcjz-build-action-3235512616/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-workflownjcjz/series-workflownjcjz-build-action-856810337/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-workflownjcjz/series-workflownjcjz-convert-artifact-1714148538/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,}