Name: series-workflow8k2hh Phase: Running StartedAt: 2026-08-31 19:45:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8k2hh[0] Phase: Running StartedAt: 2026-08-31 19:45:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8k2hh[0].run-triage Phase: Running StartedAt: 2026-08-31 19:45:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8k2hh[0].run-triage(0) Phase: Running StartedAt: 2026-08-31 19:45:14 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV", "BATMAN_ADV_BATMAN_V", "BATMAN_ADV_BLA", "BATMAN_ADV_DAT", "BATMAN_ADV_MCAST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "1bb784eb6e38fd73143f021608e4ef3095d0c0d7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BATMAN_ADV", "BATMAN_ADV_BATMAN_V", "BATMAN_ADV_BLA", "BATMAN_ADV_DAT", "BATMAN_ADV_MCAST" ], "series_id": "87089db3-e1af-4807-ba8f-7fad9c1c4fb0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "batadv_tt_local_add", "batadv_tt_local_remove", "batadv_transtable_search", "batadv_is_my_client", "batadv_tt_global_is_isolated", "batadv_tt_global_client_is_roaming", "batadv_tt_local_client_is_roaming" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjMxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JBVE1BTl9BRFYmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9CQVRNQU5fViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JMQSYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0RBVCYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX01DQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YmF0YWR2X3R0X2xvY2FsX2FkZCYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlJiMzNDssCiAgICAmIzM0O2JhdGFkdl90cmFuc3RhYmxlX3NlYXJjaCYjMzQ7LAogICAgJiMzNDtiYXRhZHZfaXNfbXlfY2xpZW50JiMzNDssCiAgICAmIzM0O2JhdGFkdl90dF9nbG9iYWxfaXNfaXNvbGF0ZWQmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R0X2dsb2JhbF9jbGllbnRfaXNfcm9hbWluZyYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHRfbG9jYWxfY2xpZW50X2lzX3JvYW1pbmcmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgb2Ygc2V2ZXJhbCBjbGVhbnVwcyBhbmQgYnVnZml4ZXMgaW4gYmF0bWFuLWFkdjpcbjEuIEFsaWdubWVudCBhbm5vdGF0aW9uczogQWRkcyBgX19hbGlnbmVkKDIpYCB0byB2YXJpb3VzIE1BQyBhZGRyZXNzIGJ5dGUgYXJyYXlzIChgdTggYWRkcltFVEhfQUxFTl1gLCBgdTggb3JpZ1tFVEhfQUxFTl1gLCBldGMuKSB0byBlbnN1cmUgMi1ieXRlIGFsaWdubWVudCBmb3Igb3BlcmF0aW9ucyBsaWtlIGBldGhlcl9hZGRyX2NvcHkoKWAuXG4yLiBDb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpbXByb3ZlbWVudHM6IEludHJvZHVjZXMgYGZsYWdzX2xvY2tgIHNwaW5sb2NrIHRvIGBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeWAgdG8gcHJvdGVjdCBjb25jdXJyZW50IHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzIChgY29tbW9uLVx1MDAzZWZsYWdzYCkgYW5kIHJvYW1pbmcgdGltZXN0YW1wcyAoYHJvYW1fYXRgKS5cbjMuIExvZ2ljIFx1MDAyNiBuYW1pbmcgZml4ZXM6IEZpeGVzIG5laWdoYm9yIGNvbXBhcmlzb24gbG9naWMgaW4gYGJhdGFkdl92X25laWdoX2lzX3NvYigpYCBhbmQgcmVuYW1lcyBwYXJhbWV0ZXJzIGZvciBjbGFyaXR5IGluIGBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpYC5cbjQuIERlYnVnIG91dHB1dCBmaXg6IENvcnJlY3RzIGZpZWxkIGFjY2VzcyBpbiBkZWJ1ZyBwcmludGluZyBmb3IgZW5jYXBzdWxhdGVkIERBVCBwYWNrZXRzLlxuNS4gSGFzaCB0YWJsZSBsb29rdXAgYWNjdXJhY3k6IEludHJvZHVjZXMgYGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KClgIHRvIG1hdGNoIGV4YWN0IHBvaW50ZXIgaWRlbnRpdGllcyBkdXJpbmcgYGJhdGFkdl9oYXNoX3JlbW92ZSgpYC5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIE5ldGxpbmsgZHVtcCBoYW5kbGVycyAoYGJhdGFkdl9kYXRfY2FjaGVfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfZ2xvYmFsX2R1bXBfc3ViZW50cnlgKSBvbmx5IHNlcmlhbGl6ZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXJzIGFuZCBNQUMgYWRkcmVzc2VzLiBDb25jdXJyZW5jeSwgbGlmZXRpbWUsIGFuZCBib3VuZGFyeSBjaGVja3MgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgYnVnIGZpeGVzIGluIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgbWVzaCBwcm90b2NvbCBzdWJzeXN0ZW0gKG5ldC9iYXRtYW4tYWR2LykuIEtleSBjaGFuZ2VzIGluY2x1ZGUgYWRkaW5nIHNwaW5sb2NrIHByb3RlY3Rpb24gKGZsYWdzX2xvY2spIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgYW5kIG11dGF0aW5nIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzLCBmaXhpbmcgZXhhY3Qgb2JqZWN0IHJlbW92YWwgZnJvbSBoYXNoIGJ1Y2tldHMgKGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KSwgY29ycmVjdGluZyB0aGUgQi5BLlQuTS5BLk4uIFYgbmVpZ2hib3IgY29tcGFyaXNvbiBjYWxjdWxhdGlvbiBsb2dpYyBpbiBiYXRhZHZfdl9uZWlnaF9pc19zb2IoKSwgYW5kIGFkZGluZyAyLWJ5dGUgYWxpZ25tZW50IGF0dHJpYnV0ZXMgdG8gTUFDIGFkZHJlc3MgYnVmZmVycy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIGV4ZWN1dGlvbiBmbG93cyBhbmQgc3RhdGUgaGFuZGxpbmcgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY0N2VhM2Y5YTc2OTE4YTk5MjM3Y2U3MzFkN2NmNmU4NTc3NWQwMDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDozMTo1MiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcbmluZGV4IDUzZmJkYmJlOGY0ZjcuLjNmZTA5YjRjMzA0NjMgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uY1xuQEAgLTI0MjQsMjUgJiM0MzsyNDI0LDI2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2l2X29nbV9uZWlnaF9jbXAoc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsXG4gLyoqXG4gICogYmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2IoKSAtIGNoZWNrIGlmIG5laWdoMSBpcyBzaW1pbGFybHkgZ29vZCBvciBiZXR0ZXJcbiAgKiAgdGhhbiBuZWlnaDIgZnJvbSB0aGUgbWV0cmljIHByb3NwZWN0aXZlXG4tICogQG5laWdoMTogdGhlIGZpcnN0IG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvblxuLSAqIEBpZl9vdXRnb2luZzE6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIGZpcnN0IG5laWdoYm9yXG4tICogQG5laWdoMjogdGhlIHNlY29uZCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cbi0gKiBAaWZfb3V0Z29pbmcyOiBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIHRoZSBzZWNvbmQgbmVpZ2hib3JcbiYjNDM7ICogQGNhbmRpZGF0ZTogdGhlIGZpcnN0IG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvblxuJiM0MzsgKiBAaWZfb3V0Z29pbmdfY2FuZDogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgQGNhbmRpZGF0ZSBuZWlnaGJvclxuJiM0MzsgKiBAcmVmZXJlbmNlOiB0aGUgc2Vjb25kIG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvblxuJiM0MzsgKiBAaWZfb3V0Z29pbmdfcmVmOiBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIHRoZSBAcmVmZXJlbmNlIG5laWdoYm9yXG4gICpcbi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIG1ldHJpYyB2aWEgbmVpZ2gxIGlzIGVxdWFsbHkgZ29vZCBvciBiZXR0ZXIgdGhhblxuLSAqIHRoZSBtZXRyaWMgdmlhIG5laWdoMiwgZmFsc2Ugb3RoZXJ3aXNlLlxuJiM0MzsgKiBSZXR1cm46IHRydWUgaWYgdGhlIG1ldHJpYyB2aWEgQGNhbmRpZGF0ZSBpcyBlcXVhbGx5IGdvb2Qgb3IgYmV0dGVyIHRoYW5cbiYjNDM7ICogdGhlIG1ldHJpYyB2aWEgQHJlZmVyZW5jZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAqL1xuIHN0YXRpYyBib29sXG4tYmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsXG4tXHRcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzEsXG4tXHRcdFx0ICAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDIsXG4tXHRcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzIpXG4mIzQzO2JhdGFkdl9pdl9vZ21fbmVpZ2hfaXNfc29iKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqY2FuZGlkYXRlLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nX2NhbmQsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLFxuJiM0MztcdFx0XHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nX3JlZilcbiB7XG4gXHRib29sIHJldDtcbiBcdGludCBkaWZmO1xuIFxuLVx0cmV0ID0gYmF0YWR2X2l2X29nbV9uZWlnaF9kaWZmKG5laWdoMSwgaWZfb3V0Z29pbmcxLCBuZWlnaDIsXG4tXHRcdFx0XHQgICAgICAgaWZfb3V0Z29pbmcyLCBcdTAwMjZkaWZmKTtcbiYjNDM7XHRyZXQgPSBiYXRhZHZfaXZfb2dtX25laWdoX2RpZmYoY2FuZGlkYXRlLCBpZl9vdXRnb2luZ19jYW5kLFxuJiM0MztcdFx0XHRcdCAgICAgICByZWZlcmVuY2UsIGlmX291dGdvaW5nX3JlZixcbiYjNDM7XHRcdFx0XHQgICAgICAgXHUwMDI2ZGlmZik7XG4gXHRpZiAoIXJldClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF92LmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdi5jXG5pbmRleCAwYzI3NDQ3Y2Y2ODg5Li41OTY4ODliMzUyMmQwIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X3YuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvYmF0X3YuY1xuQEAgLTUxNCw0MCAmIzQzOzUxNCw0MCBAQCBzdGF0aWMgaW50IGJhdGFkdl92X25laWdoX2NtcChzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSxcbiAvKipcbiAgKiBiYXRhZHZfdl9uZWlnaF9pc19zb2IoKSAtIGNoZWNrIHdoZXRoZXIgdHdvIEIuQS5ULk0uQS5OLiBWIG5laWdoYm91cnMgaGF2ZVxuICAqICBhIHNpbWlsYXIgb3IgYmV0dGVyIHRocm91Z2hwdXRcbi0gKiBAbmVpZ2gxOiBmaXJzdCBuZWlnaGJvdXIgdG8gY29tcGFyZVxuLSAqIEBpZl9vdXRnb2luZzE6IG91dGdvaW5nIGludGVyZmFjZSB0byB1c2UgZm9yIEBuZWlnaDFcbi0gKiBAbmVpZ2gyOiBzZWNvbmQgbmVpZ2hib3VyIHRvIGNvbXBhcmVcbi0gKiBAaWZfb3V0Z29pbmcyOiBvdXRnb2luZyBpbnRlcmZhY2UgdG8gdXNlIGZvciBAbmVpZ2gyXG4mIzQzOyAqIEBjYW5kaWRhdGU6IHRoZSBmaXJzdCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cbiYjNDM7ICogQGlmX291dGdvaW5nX2NhbmQ6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEBjYW5kaWRhdGUgbmVpZ2hib3JcbiYjNDM7ICogQHJlZmVyZW5jZTogdGhlIHNlY29uZCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cbiYjNDM7ICogQGlmX291dGdvaW5nX3JlZjogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgQHJlZmVyZW5jZSBuZWlnaGJvclxuICAqXG4tICogUmV0dXJuOiB0cnVlIGlmIHRoZSB0aHJvdWdocHV0IG9mIEBuZWlnaDIgaXMgYXQgbGVhc3QgMy80IG9mIHRoZVxuLSAqICBAbmVpZ2gxIHRocm91Z2hwdXRcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSB0aHJvdWdocHV0IG9mIEBjYW5kaWRhdGUgaXMgbW9yZSB0aGFuIDMvNCBvZiB0aGVcbiYjNDM7ICogIEByZWZlcmVuY2UgdGhyb3VnaHB1dFxuICAqL1xuLXN0YXRpYyBib29sIGJhdGFkdl92X25laWdoX2lzX3NvYihzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSxcbi1cdFx0XHRcdCAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzEsXG4tXHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gyLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMilcbiYjNDM7c3RhdGljIGJvb2wgYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqY2FuZGlkYXRlLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpyZWZlcmVuY2UsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nX3JlZilcbiB7XG4tXHRzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyAqaWZpbmZvMTtcbi1cdHN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm8yO1xuJiM0MztcdHN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm9fY2FuZDtcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyAqaWZpbmZvX3JlZjtcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXHR1MzIgdGhyZXNob2xkO1xuIFxuLVx0aWZpbmZvMSA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KG5laWdoMSwgaWZfb3V0Z29pbmcxKTtcbi1cdGlmICghaWZpbmZvMSlcbiYjNDM7XHRpZmluZm9fY2FuZCA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KGNhbmRpZGF0ZSwgaWZfb3V0Z29pbmdfY2FuZCk7XG4mIzQzO1x0aWYgKCFpZmluZm9fY2FuZClcbiBcdFx0Z290byBlcnJfaWZpbmZvMTtcbiBcbi1cdGlmaW5mbzIgPSBiYXRhZHZfbmVpZ2hfaWZpbmZvX2dldChuZWlnaDIsIGlmX291dGdvaW5nMik7XG4tXHRpZiAoIWlmaW5mbzIpXG4mIzQzO1x0aWZpbmZvX3JlZiA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KHJlZmVyZW5jZSwgaWZfb3V0Z29pbmdfcmVmKTtcbiYjNDM7XHRpZiAoIWlmaW5mb19yZWYpXG4gXHRcdGdvdG8gZXJyX2lmaW5mbzI7XG4gXG4tXHR0aHJlc2hvbGQgPSBpZmluZm8xLVx1MDAzZWJhdF92LnRocm91Z2hwdXQgLyA0O1xuLVx0dGhyZXNob2xkID0gaWZpbmZvMS1cdTAwM2ViYXRfdi50aHJvdWdocHV0IC0gdGhyZXNob2xkO1xuJiM0MztcdHRocmVzaG9sZCA9IGlmaW5mb19yZWYtXHUwMDNlYmF0X3YudGhyb3VnaHB1dCAvIDQ7XG4mIzQzO1x0dGhyZXNob2xkID0gaWZpbmZvX3JlZi1cdTAwM2ViYXRfdi50aHJvdWdocHV0IC0gdGhyZXNob2xkO1xuIFxuLVx0cmV0ID0gaWZpbmZvMi1cdTAwM2ViYXRfdi50aHJvdWdocHV0IFx1MDAzZSB0aHJlc2hvbGQ7XG4mIzQzO1x0cmV0ID0gaWZpbmZvX2NhbmQtXHUwMDNlYmF0X3YudGhyb3VnaHB1dCBcdTAwM2UgdGhyZXNob2xkO1xuIFxuLVx0YmF0YWR2X25laWdoX2lmaW5mb19wdXQoaWZpbmZvMik7XG4mIzQzO1x0YmF0YWR2X25laWdoX2lmaW5mb19wdXQoaWZpbmZvX3JlZik7XG4gZXJyX2lmaW5mbzI6XG4tXHRiYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm8xKTtcbiYjNDM7XHRiYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm9fY2FuZCk7XG4gZXJyX2lmaW5mbzE6XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYyBiL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXG5pbmRleCBmNjM1ZGE0YjhjYTY1Li5hZDZhYjRhNTA2NThmIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXG5AQCAtNjYzLDcgJiM0Mzs2NjMsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfcmVxdWVzdChzdHJ1Y3QgYmF0YWR2X2JsYV9iYWNrYm9uZV9ndyAqYmFja2JvbmVfZ3cpXG4gc3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2Fubm91bmNlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3ICpiYWNrYm9uZV9ndylcbiB7XG4tXHR1OCBtYWNbRVRIX0FMRU5dO1xuJiM0MztcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFx0X19iZTE2IGNyYztcbiBcbiBcdG1lbWNweShtYWMsIGJhdGFkdl9hbm5vdW5jZV9tYWMsIDQpO1xuQEAgLTE1ODIsNyAmIzQzOzE1ODIsOSBAQCBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJhdGFkdl9iYWNrYm9uZV9oYXNoX2xvY2tfY2xhc3Nfa2V5O1xuICAqL1xuIGludCBiYXRhZHZfYmxhX2luaXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbiB7XG4tXHR1OCBjbGFpbV9kZXN0W0VUSF9BTEVOXSA9IHsweGZmLCAweDQzLCAweDA1LCAweDAwLCAweDAwLCAweDAwfTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgdTggY2xhaW1fZGVzdFtFVEhfQUxFTl0gX19hbGlnbmVkKDIpID0ge1xuJiM0MztcdFx0MHhmZiwgMHg0MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMFxuJiM0MztcdH07XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWY7XG4gXHR1bnNpZ25lZCBsb25nIGVudHJ5dGltZTtcbiBcdHUxNiBjcmM7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuY1xuaW5kZXggMDExY2ZkYzQ3ZmFiNC4uYTRiZTViMmE4N2Q3YSAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuY1xuQEAgLTU0OCw3ICYjNDM7NTQ4LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2RiZ19hcnAoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfREFULCBiYXRfcHJpdiwgXCYjMzQ7KiB0eXBlOiBVbmtub3duICgldSkhXFxuXCYjMzQ7LFxuLVx0XHRcdFx0ICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtXHUwMDNldS5wYWNrZXRfdHlwZSk7XG4mIzQzO1x0XHRcdFx0ICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtXHUwMDNlc3VidHlwZSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJBVEFEVl9CQ0FTVDpcbkBAIC05NDAsNyAmIzQzOzk0MCw3IEBAIGJhdGFkdl9kYXRfY2FjaGVfZHVtcF9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLFxuIFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG4gXHRcdFx0ICAgIHN0cnVjdCBiYXRhZHZfZGF0X2VudHJ5ICpkYXRfZW50cnkpXG4ge1xuLVx0dTggbWFjW0VUSF9BTEVOXTtcbiYjNDM7XHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdHU2NCB1NjRfbWFjO1xuIFx0aW50IG1zZWNzO1xuIFx0dm9pZCAqaGRyO1xuQEAgLTEyMzYsMTAgJiM0MzsxMjM2LDEwIEBAIGJvb2wgYmF0YWR2X2RhdF9zbm9vcF9vdXRnb2luZ19hcnBfcmVxdWVzdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlID0gYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZTtcbiBcdHN0cnVjdCBiYXRhZHZfZGF0X2VudHJ5ICpkYXRfZW50cnkgPSBOVUxMO1xuJiM0MztcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9uZXc7XG4gXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuLVx0dTggbWFjW0VUSF9BTEVOXTtcbiBcdGludCBoZHJfc2l6ZSA9IDA7XG4gXHRfX2JlMzIgaXBfZHN0O1xuIFx0X19iZTMyIGlwX3NyYztcbkBAIC0xMzQ0LDEwICYjNDM7MTM0NCwxMCBAQCBib29sIGJhdGFkdl9kYXRfc25vb3BfaW5jb21pbmdfYXJwX3JlcXVlc3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9zaXplKVxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfZGF0X2VudHJ5ICpkYXRfZW50cnkgPSBOVUxMO1xuJiM0MztcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9uZXc7XG4gXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuLVx0dTggbWFjW0VUSF9BTEVOXTtcbiBcdF9fYmUzMiBpcF9zcmM7XG4gXHRfX2JlMzIgaXBfZHN0O1xuIFx0dTY0IHU2NF9tYWM7XG5AQCAtMTQ3NCw5ICYjNDM7MTQ3NCw5IEBAIGJvb2wgYmF0YWR2X2RhdF9zbm9vcF9pbmNvbWluZ19hcnBfcmVwbHkoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdFx0IHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X2RhdF9lbnRyeSAqZGF0X2VudHJ5ID0gTlVMTDtcbiYjNDM7XHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdGJvb2wgZHJvcHBlZCA9IGZhbHNlO1xuIFx0dW5zaWduZWQgc2hvcnQgdmlkO1xuLVx0dTggbWFjW0VUSF9BTEVOXTtcbiBcdF9fYmUzMiBpcF9zcmM7XG4gXHRfX2JlMzIgaXBfZHN0O1xuIFx0dTY0IHU2NF9tYWM7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbmluZGV4IGUyMDIwODhjZjFmZDQuLjYzYWYyMTk1NGNmOTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG5AQCAtMTQxLDkgJiM0MzsxNDEsOSBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJhdGFkdl9pbnRlcmZhY2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0dTggb2xkX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4gXHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xuLVx0dTggb2xkX2FkZHJbRVRIX0FMRU5dO1xuIFxuIFx0aWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItXHUwMDNlc2FfZGF0YSkpXG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbkBAIC0yMTMsMTMgJiM0MzsyMTMsMTggQEAgc3RhdGljIHZvaWQgYmF0YWR2X2ludGVyZmFjZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBuZXRkZXZfdHhfdCBiYXRhZHZfaW50ZXJmYWNlX3R4KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4ge1xuLVx0c3RhdGljIGNvbnN0IHU4IGVjdHBfYWRkcltFVEhfQUxFTl0gPSB7MHhDRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07XG4tXHRzdGF0aWMgY29uc3QgdTggc3RwX2FkZHJbRVRIX0FMRU5dID0gezB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDB9O1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG1lc2hfaWZhY2UpO1xuIFx0ZW51bSBiYXRhZHZfZGhjcF9yZWNpcGllbnQgZGhjcF9yY3AgPSBCQVRBRFZfREhDUF9OTztcbiBcdGVudW0gYmF0YWR2X2ZvcndfbW9kZSBmb3J3X21vZGUgPSBCQVRBRFZfRk9SV19CQ0FTVDtcbiYjNDM7XHRzdGF0aWMgY29uc3QgdTggZWN0cF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMikgPSB7XG4mIzQzO1x0XHQweENGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXG4mIzQzO1x0fTtcbiYjNDM7XHRzdGF0aWMgY29uc3QgdTggc3RwX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKSA9IHtcbiYjNDM7XHRcdDB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDBcbiYjNDM7XHR9O1xuIFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDtcbiBcdHN0cnVjdCBiYXRhZHZfYmNhc3RfcGFja2V0ICpiY2FzdF9wYWNrZXQ7XG4mIzQzO1x0dTggY2hhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRpbnQgbmV0d29ya19vZmZzZXQgPSBFVEhfSExFTjtcbiBcdHVuc2lnbmVkIGludCBoZWFkZXJfbGVuID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgYnJkX2RlbGF5ID0gMDtcbkBAIC0yMjksNyAmIzQzOzIzNCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBiYXRhZHZfaW50ZXJmYWNlX3R4KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRzdHJ1Y3QgZXRoaGRyICpldGhoZHI7XG4gXHRib29sIGRvX2JjYXN0ID0gZmFsc2U7XG4gXHR1OCAqZHN0X2hpbnQgPSBOVUxMO1xuLVx0dTggY2hhZGRyW0VUSF9BTEVOXTtcbiBcdHVuc2lnbmVkIHNob3J0IHZpZDtcbiBcdGJvb2wgY2xpZW50X2FkZGVkO1xuIFx0X19iZTE2IHByb3RvO1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jIGIvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmNcbmluZGV4IDgyZmQ1MjdiNjFjMDIuLjIyZGQyOGQ1ZTFhYmMgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmNcbkBAIC0zNjgsOSAmIzQzOzM2OCw5IEBAIGJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgc3RydWN0IGhsaXN0X2hlYWQgKm1jYXN0X2xpc3QsXG4gXHRcdFx0XHQgc3RydWN0IGJhdGFkdl9tY2FzdF9tbGFfZmxhZ3MgKmZsYWdzKVxuIHtcbiYjNDM7XHR1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgKm5ldztcbiBcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldjtcbi1cdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dO1xuIFx0c3RydWN0IGlwX21jX2xpc3QgKnBtYztcbiBcdGludCByZXQgPSAwO1xuIFxuQEAgLTQzNSw5ICYjNDM7NDM1LDkgQEAgYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjYoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCBzdHJ1Y3QgaGxpc3RfaGVhZCAqbWNhc3RfbGlzdCxcbiBcdFx0XHRcdCBzdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyAqZmxhZ3MpXG4ge1xuJiM0MztcdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdHN0cnVjdCBiYXRhZHZfaHdfYWRkciAqbmV3O1xuIFx0c3RydWN0IGluZXQ2X2RldiAqaW42X2Rldjtcbi1cdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dO1xuIFx0c3RydWN0IGlmbWNhZGRyNiAqcG1jNjtcbiBcdGludCByZXQgPSAwO1xuIFxuQEAgLTU4NywxMCAmIzQzOzU4NywxMCBAQCBzdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9tbGFfYnJpZGdlX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWNhc3RfbWxhX2ZsYWdzICpmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGJyaWRnZV9tY2FzdF9saXN0ID0gTElTVF9IRUFEX0lOSVQoYnJpZGdlX21jYXN0X2xpc3QpO1xuJiM0MztcdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdHU4IHR2bHZfZmxhZ3MgPSBmbGFncy1cdTAwM2V0dmx2X2ZsYWdzO1xuIFx0c3RydWN0IGJyX2lwX2xpc3QgKmJyX2lwX2VudHJ5O1xuIFx0c3RydWN0IGJhdGFkdl9od19hZGRyICpuZXc7XG4tXHR1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXTtcbiBcdHN0cnVjdCBicl9pcF9saXN0ICp0bXA7XG4gXHRpbnQgcmV0O1xuIFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMgYi9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jXG5pbmRleCA2OGY3OTg1MzAzMmVkLi40NGE4Y2Y4OTM4MmM2IDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY1xuQEAgLTEzLDYgJiM0MzsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FjaGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG5AQCAtOTUsNiAmIzQzOzk2LDI2IEBAIHN0YXRpYyBib29sIGJhdGFkdl9jb21wYXJlX3R0KGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCBjb25zdCB2b2lkICpkYXRhMilcbiBcdHJldHVybiAodHQxLVx1MDAzZXZpZCA9PSB0dDItXHUwMDNldmlkKSBcdTAwMjZcdTAwMjYgYmF0YWR2X2NvbXBhcmVfZXRoKGRhdGExLCBkYXRhMik7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogYmF0YWR2X2NvbXBhcmVfdHRfZW50cnkoKSAtIGNoZWNrIGlmIGEgaGFzaCBub2RlIGlzIGEgc3BlY2lmaWMgVFQgZW50cnlcbiYjNDM7ICogQG5vZGU6IHRoZSBsaXN0IGVsZW1lbnQgcG9pbnRlciBvZiB0aGUgVFQgZW50cnkgc3RvcmVkIGluIHRoZSBidWNrZXRcbiYjNDM7ICogQGRhdGEyOiBwb2ludGVyIHRvIHRoZSB0dF9jb21tb25fZW50cnkgd2hpY2ggaXMgbG9va2VkIGZvclxuJiM0MzsgKlxuJiM0MzsgKiBVbmxpa2UgYmF0YWR2X2NvbXBhcmVfdHQoKSwgdGhpcyBvbmx5IG1hdGNoZXMgdGhlIHZlcnkgb2JqZWN0IHdoaWNoIGlzXG4mIzQzOyAqIHBhc3NlZCBhcyBAZGF0YTIgYW5kIG5vdCBqdXN0IGFueSBlbnRyeSBmb3IgdGhlIHNhbWUgVFQgY2xpZW50LiBJdCBpcyBtZWFudFxuJiM0MzsgKiBmb3IgYmF0YWR2X2hhc2hfcmVtb3ZlKCkgY2FsbGVycyB3aGljaCBtdXN0IG5vdCB1bmxpbmsgYW4gZW50cnkgdGhleSBkaWQgbm90XG4mIzQzOyAqIGxvb2sgdXAgdGhlbXNlbHZlcy5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBub2RlIGJlbG9uZ3MgdG8gQGRhdGEyLCBmYWxzZSBvdGhlcndpc2VcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlLFxuJiM0MztcdFx0XHRcdCAgICBjb25zdCB2b2lkICpkYXRhMilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dCA9IGRhdGEyO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbm9kZSA9PSBcdTAwMjZ0dC1cdTAwM2VoYXNoX2VudHJ5O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIGJhdGFkdl9jaG9vc2VfdHQoKSAtIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHR0IGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlXG4gICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHR0X2NvbW1vbl9lbnRyeSBvYmplY3QgdG8gbWFwXG5AQCAtMzEyLDYgJiM0MzszMzMsMTAgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfbW9kKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gICogIGdpdmVuIHZpZFxuICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEB2aWQ6IHRoZSBWTEFOIGlkZW50aWZpZXJcbiYjNDM7ICpcbiYjNDM7ICogSXQgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHJlbW92aW5nIHRoZSBORVcgZmxhZyBvZiBhXG4mIzQzOyAqIGJhdGFkdl90dF9sb2NhbF9lbnRyeSB3aGlsZSBpdCBpcyBzdGlsbCBwYXJ0IG9mIHRoZSBiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLlxuJiM0MzsgKiBJdCBtdXN0IHRoZXJlZm9yZSBiZSBjaGVja2VkIHVuZGVyIHRoZSBzcGVjaWZpYyBsaXN0X2xvY2tzW2ldLlxuICAqL1xuIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9zaXplX2luYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBzaG9ydCB2aWQpXG5AQCAtMzI0LDYgJiM0MzszNDksMTEgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfaW5jKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gICogIGdpdmVuIHZpZFxuICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEB2aWQ6IHRoZSBWTEFOIGlkZW50aWZpZXJcbiYjNDM7ICpcbiYjNDM7ICogSXQgbXVzdCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIGJhdGFkdl90dF9sb2NhbF9lbnRyeSB3aXRob3V0IE5FVyBmbGFnXG4mIzQzOyAqIHdhcyByZW1vdmVkIGZyb20gYmF0X3ByaXYtXHUwMDNldHQubG9jYWxfaGFzaCAodW5kZXIgdGhlIHNwZWNpZmljXG4mIzQzOyAqIGxpc3RfbG9ja3NbaV0pIG9yIHdoZW4gaXQgaXMgZW5zdXJlZCB0aGF0IGl0IGlzIG5vdCBhY2Nlc3NpYmxlXG4mIzQzOyAqIGluIHRoaXMgbGlzdC5cbiAgKi9cbiBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9kZWMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuQEAgLTQxMyw2ICYjNDM7NDQzLDIyIEBAIGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnlfcHV0KHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpvcmlnX2VudHJ5KVxuIFx0a3JlZl9wdXQoXHUwMDI2b3JpZ19lbnRyeS1cdTAwM2VyZWZjb3VudCwgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeV9yZWxlYXNlKTtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBiYXRhZHZfdHRfZmxhZ3NfZ2V0KCkgLSBnZXQgYSBzbmFwc2hvdCBvZiB0aGUgZmxhZ3Mgb2YgYSBUVCBlbnRyeVxuJiM0MzsgKiBAY29tbW9uOiB0dCBsb2NhbCBcdTAwMjYgdHQgZ2xvYmFsIGNvbW1vbiBkYXRhXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogdGhlIGZsYWdzIG9mIHRoZSBUVCBlbnRyeSBhcyBvYnNlcnZlZCB1bmRlciBpdHMgZmxhZ3NfbG9jay5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1MTYgYmF0YWR2X3R0X2ZsYWdzX2dldChzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IGZsYWdzO1xuJiM0MztcbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNmNvbW1vbi1cdTAwM2VmbGFnc19sb2NrKVxuJiM0MztcdFx0ZmxhZ3MgPSBjb21tb24tXHUwMDNlZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmbGFncztcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBiYXRhZHZfdHRfbG9jYWxfZXZlbnQoKSAtIHN0b3JlIGEgbG9jYWwgVFQgZXZlbnQgKEFERC9ERUwpXG4gICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG5AQCAtNDI1LDIzICYjNDM7NDcxLDI1IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9ldmVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICpjb21tb24gPSBcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb247XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICp0dF9jaGFuZ2Vfbm9kZTtcbi1cdHU4IGZsYWdzID0gY29tbW9uLVx1MDAzZWZsYWdzIHwgZXZlbnRfZmxhZ3M7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICplbnRyeTtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKnNhZmU7XG4gXHRib29sIGRlbF9vcF9yZXF1ZXN0ZWQ7XG4gXHRib29sIGRlbF9vcF9lbnRyeTtcbiBcdHNpemVfdCBjaGFuZ2VzO1xuJiM0MztcdHU4IGZsYWdzO1xuIFxuIFx0dHRfY2hhbmdlX25vZGUgPSBrbWVtX2NhY2hlX2FsbG9jKGJhdGFkdl90dF9jaGFuZ2VfY2FjaGUsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKCF0dF9jaGFuZ2Vfbm9kZSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dHRfY2hhbmdlX25vZGUtXHUwMDNlY2hhbmdlLmZsYWdzID0gZmxhZ3M7XG4gXHRtZW1zZXQodHRfY2hhbmdlX25vZGUtXHUwMDNlY2hhbmdlLnJlc2VydmVkLCAwLFxuIFx0ICAgICAgIHNpemVvZih0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UucmVzZXJ2ZWQpKTtcbiBcdGV0aGVyX2FkZHJfY29weSh0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UuYWRkciwgY29tbW9uLVx1MDAzZWFkZHIpO1xuIFx0dHRfY2hhbmdlX25vZGUtXHUwMDNlY2hhbmdlLnZpZCA9IGh0b25zKGNvbW1vbi1cdTAwM2V2aWQpO1xuIFxuJiM0MztcdGZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pIHwgZXZlbnRfZmxhZ3M7XG4mIzQzO1xuJiM0MztcdHR0X2NoYW5nZV9ub2RlLVx1MDAzZWNoYW5nZS5mbGFncyA9IGZsYWdzO1xuIFx0ZGVsX29wX3JlcXVlc3RlZCA9IGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX0RFTDtcbiBcbiBcdC8qIGNoZWNrIGZvciBBREQmIzQzO0RFTCwgREVMJiM0MztBREQsIEFERCYjNDM7QUREIG9yIERFTCYjNDM7REVMIGV2ZW50cyAqL1xuQEAgLTU3NSw3ICYjNDM7NjIzLDYgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwsXG4gXHRcdFx0XHQgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4ge1xuLVx0c3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X3JlbW92ZWRfZW50cnk7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdHRfcmVtb3ZlZF9ub2RlO1xuIFxuIFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbkBAIC01ODMsMTggJiM0Mzs2MzAsNjcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdCAgIHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uYWRkcixcbiBcdFx0ICAgYmF0YWR2X3ByaW50X3ZpZCh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLnZpZCksIG1lc3NhZ2UpO1xuIFxuJiM0MztcdC8qIHJlbW92ZSBleGFjdGx5IHRoaXMgb2JqZWN0IHdoZW4gc3RpbGwgcHJlc2VudCBpbiBoYXNoICovXG4gXHR0dF9yZW1vdmVkX25vZGUgPSBiYXRhZHZfaGFzaF9yZW1vdmUoYmF0X3ByaXYtXHUwMDNldHQuZ2xvYmFsX2hhc2gsXG4tXHRcdFx0XHRcdCAgICAgYmF0YWR2X2NvbXBhcmVfdHQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5LFxuIFx0XHRcdFx0XHQgICAgIGJhdGFkdl9jaG9vc2VfdHQsXG4gXHRcdFx0XHRcdCAgICAgXHUwMDI2dHRfZ2xvYmFsLVx1MDAzZWNvbW1vbik7XG4gXHRpZiAoIXR0X3JlbW92ZWRfbm9kZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogZHJvcCByZWZlcmVuY2Ugb2YgcmVtb3ZlIGhhc2ggZW50cnkgKi9cbi1cdHR0X3JlbW92ZWRfZW50cnkgPSBobGlzdF9lbnRyeSh0dF9yZW1vdmVkX25vZGUsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnksXG4tXHRcdFx0XHQgICAgICAgY29tbW9uLmhhc2hfZW50cnkpO1xuLVx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfcmVtb3ZlZF9lbnRyeSk7XG4mIzQzO1x0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJhdGFkdl90dF9sb2NhbF9hZGRfcm9hbSgpIC0gaGFuZGxlIHJvYW1lZCBjbGllbnRzIGR1cmluZyBiYXRhZHZfdHRfbG9jYWxfYWRkKClcbiYjNDM7ICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4mIzQzOyAqIEB0dF9nbG9iYWw6IHRoZSBnbG9iYWwgVFQgZW50cnlcbiYjNDM7ICogQHJvYW1lZF9iYWNrOiB3aGV0aGVyIEB0dF9nbG9iYWwgcm9hbWVkIGJhY2tcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9hZGRfcm9hbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbCxcbiYjNDM7XHRcdFx0XHQgICAgIGJvb2wgcm9hbWVkX2JhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqb3JpZ19lbnRyeTtcbiYjNDM7XHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0dF9nbG9iYWwpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIENoZWNrIHdoZXRoZXIgaXQgaXMgYSByb2FtaW5nLCBidXQgZG9uJiMzOTt0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nXG4mIzQzO1x0ICogcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWRcbiYjNDM7XHQgKi9cbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNnR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jaykge1xuJiM0MztcdFx0aWYgKHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSlcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdGlmICghcm9hbWVkX2JhY2spIHtcbiYjNDM7XHRcdFx0LyogVGhlIGdsb2JhbCBlbnRyeSBoYXMgdG8gYmUgbWFya2VkIGFzIFJPQU1JTkcgYW5kIGhhcyB0byBiZVxuJiM0MztcdFx0XHQgKiBrZXB0IGZvciBjb25zaXN0ZW5jeSBwdXJwb3NlLlxuJiM0MztcdFx0XHQgKlxuJiM0MztcdFx0XHQgKiBiYXRhZHZfdHRfZ2xvYmFsX3RvX3B1cmdlKCkgZXZhbHVhdGVzIHJvYW1fYXQgYXMgc29vbiBhcyBpdFxuJiM0MztcdFx0XHQgKiBvYnNlcnZlcyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0sIHNvIHRoZSB0aW1lb3V0IGhhcyB0byBiZVxuJiM0MztcdFx0XHQgKiBzdGFtcGVkIGJlZm9yZSB0aGUgZmxhZyBpcyBwdWJsaXNoZWQuIE90aGVyd2lzZSB0aGUgZW50cnkgY2FuXG4mIzQzO1x0XHRcdCAqIGJlIGRlbGV0ZWQgcmlnaHQgYXdheSBhcyBcJiMzNDtSb2FtaW5nIHRpbWVvdXRcJiMzNDsuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR0dF9nbG9iYWwtXHUwMDNlcm9hbV9hdCA9IGppZmZpZXM7XG4mIzQzO1x0XHRcdHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGhlc2Ugbm9kZSBhcmUgcHJvYmFibHkgZ29pbmcgdG8gdXBkYXRlIHRoZWlyIHR0IHRhYmxlICovXG4mIzQzO1x0aGVhZCA9IFx1MDAyNnR0X2dsb2JhbC1cdTAwM2VvcmlnX2xpc3Q7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX2VudHJ5LCBoZWFkLCBsaXN0KSB7XG4mIzQzO1x0XHRiYXRhZHZfc2VuZF9yb2FtX2FkdihiYXRfcHJpdiwgdHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5hZGRyLFxuJiM0MztcdFx0XHRcdCAgICAgdHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi52aWQsXG4mIzQzO1x0XHRcdFx0ICAgICBvcmlnX2VudHJ5LVx1MDAzZW9yaWdfbm9kZSk7XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRpZiAocm9hbWVkX2JhY2spXG4mIzQzO1x0XHRiYXRhZHZfdHRfZ2xvYmFsX2ZyZWUoYmF0X3ByaXYsIHR0X2dsb2JhbCwgXCYjMzQ7Um9hbWluZyBjYW5jZWxlZFwmIzM0Oyk7XG4gfVxuIFxuIC8qKlxuQEAgLTYxNSwyMCAmIzQzOzcxMSwxOSBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwgPSBOVUxMO1xuLVx0c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWdfZW50cnk7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQobWVzaF9pZmFjZSk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqaW5fZGV2ID0gTlVMTDtcbiBcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4gXHRib29sIHJvYW1lZF9iYWNrID0gZmFsc2U7XG4gXHRib29sIGlpZl9pc193aWZpID0gZmFsc2U7XG4tXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbiBcdGludCBwYWNrZXRfc2l6ZV9tYXg7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuIFx0dTggcmVtb3RlX2ZsYWdzO1xuIFx0aW50IGhhc2hfYWRkZWQ7XG4gXHRpbnQgdGFibGVfc2l6ZTtcbiBcdHUzMiBtYXRjaF9tYXJrO1xuJiM0MztcdGJvb2wgbW9kaWZpZWQ7XG4gXG4gXHRpZiAoaWZpbmRleCAhPSBCQVRBRFZfTlVMTF9JRklOREVYKVxuIFx0XHRpbl9kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgaWZpbmRleCk7XG5AQCAtNjQ2LDYgJiM0Mzs3NDEsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxuIFxuIFx0aWYgKHR0X2xvY2FsKSB7XG4gXHRcdHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiBcdFx0aWYgKHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB7XG4gXHRcdFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbiBcdFx0XHRcdCAgIFwmIzM0O1JlLWFkZGluZyBwZW5kaW5nIGNsaWVudCAlcE0gKHZpZDogJWQpXFxuXCYjMzQ7LFxuQEAgLTY1Niw2ICYjNDM7NzUzLDggQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbiBcdFx0XHQgKiBmbGFnIGNhbiBiZSByZXNldCBsaWtlIGl0IHdhcyBuZXZlciBlbnF1ZXVlZFxuIFx0XHRcdCAqL1xuIFx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiYjNDM7XG4gXHRcdFx0Z290byBhZGRfZXZlbnQ7XG4gXHRcdH1cbiBcbkBAIC02NzEsNiAmIzQzOzc3MCw4IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4gXHRcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbiBcdFx0XHRyb2FtZWRfYmFjayA9IHRydWU7XG4gXHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiYjNDM7XG4gXHRcdGdvdG8gY2hlY2tfcm9hbWluZztcbiBcdH1cbiBcbkBAIC03MDYsMTggJiM0Mzs4MDcsMjEgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbiBcdFx0ICAgKHU4KWF0b21pY19yZWFkKFx1MDAyNmJhdF9wcml2LVx1MDAzZXR0LnZuKSk7XG4gXG4gXHRldGhlcl9hZGRyX2NvcHkodHRfbG9jYWwtXHUwMDNlY29tbW9uLmFkZHIsIGFkZHIpO1xuJiM0MztcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi52aWQgPSB2aWQ7XG4mIzQzO1x0a3JlZl9pbml0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4mIzQzO1x0dHRfbG9jYWwtXHUwMDNlbGFzdF9zZWVuID0gamlmZmllcztcbiYjNDM7XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW47XG4mIzQzO1x0dHRfbG9jYWwtXHUwMDNldmxhbiA9IHZsYW47XG4mIzQzO1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuIFx0LyogVGhlIGxvY2FsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgTkVXIHRvIGF2b2lkIHRvIHNlbmQgaXQgaW5cbiBcdCAqIGEgZnVsbCB0YWJsZSByZXNwb25zZSBnb2luZyBvdXQgYmVmb3JlIHRoZSBuZXh0IHR0dm4gaW5jcmVtZW50XG4gXHQgKiAoY29uc2lzdGVuY3kgY2hlY2spXG4gXHQgKi9cbiBcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyA9IEJBVEFEVl9UVF9DTElFTlRfTkVXO1xuLVx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLnZpZCA9IHZpZDtcbiBcdGlmIChpaWZfaXNfd2lmaSlcbiBcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfV0lGSTtcbi1cdGtyZWZfaW5pdChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuLVx0dHRfbG9jYWwtXHUwMDNlbGFzdF9zZWVuID0gamlmZmllcztcbi1cdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5hZGRlZF9hdCA9IHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2Vlbjtcbi1cdHR0X2xvY2FsLVx1MDAzZXZsYW4gPSB2bGFuO1xuIFxuIFx0LyogdGhlIGJhdG1hbiBpbnRlcmZhY2UgbWFjIGFuZCBtdWx0aWNhc3QgYWRkcmVzc2VzIHNob3VsZCBuZXZlciBiZVxuIFx0ICogcHVyZ2VkXG5AQCAtNzI1LDYgJiM0Mzs4MjksNyBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxuIFx0aWYgKGJhdGFkdl9jb21wYXJlX2V0aChhZGRyLCBtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyKSB8fFxuIFx0ICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuIFx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFO1xuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiBcbiBcdGtyZWZfZ2V0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4gXHRoYXNoX2FkZGVkID0gYmF0YWR2X2hhc2hfYWRkKGJhdF9wcml2LVx1MDAzZXR0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LFxuQEAgLTc0MSwzMSAmIzQzOzg0Niw5IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4gXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpO1xuIFxuIGNoZWNrX3JvYW1pbmc6XG4tXHQvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgcm9hbWluZywgYnV0IGRvbiYjMzk7dCBkbyBhbnl0aGluZyBpZiB0aGUgcm9hbWluZ1xuLVx0ICogcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWRcbi1cdCAqL1xuLVx0aWYgKHR0X2dsb2JhbCBcdTAwMjZcdTAwMjYgISh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKSB7XG4tXHRcdC8qIFRoZXNlIG5vZGUgYXJlIHByb2JhYmx5IGdvaW5nIHRvIHVwZGF0ZSB0aGVpciB0dCB0YWJsZSAqL1xuLVx0XHRoZWFkID0gXHUwMDI2dHRfZ2xvYmFsLVx1MDAzZW9yaWdfbGlzdDtcbi1cdFx0cmN1X3JlYWRfbG9jaygpO1xuLVx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uob3JpZ19lbnRyeSwgaGVhZCwgbGlzdCkge1xuLVx0XHRcdGJhdGFkdl9zZW5kX3JvYW1fYWR2KGJhdF9wcml2LCB0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmFkZHIsXG4tXHRcdFx0XHRcdCAgICAgdHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi52aWQsXG4tXHRcdFx0XHRcdCAgICAgb3JpZ19lbnRyeS1cdTAwM2VvcmlnX25vZGUpO1xuLVx0XHR9XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0XHRpZiAocm9hbWVkX2JhY2spIHtcbi1cdFx0XHRiYXRhZHZfdHRfZ2xvYmFsX2ZyZWUoYmF0X3ByaXYsIHR0X2dsb2JhbCxcbi1cdFx0XHRcdFx0ICAgICAgXCYjMzQ7Um9hbWluZyBjYW5jZWxlZFwmIzM0Oyk7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0LyogVGhlIGdsb2JhbCBlbnRyeSBoYXMgdG8gYmUgbWFya2VkIGFzIFJPQU1JTkcgYW5kXG4tXHRcdFx0ICogaGFzIHRvIGJlIGtlcHQgZm9yIGNvbnNpc3RlbmN5IHB1cnBvc2Vcbi1cdFx0XHQgKi9cbi1cdFx0XHR0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbi1cdFx0XHR0dF9nbG9iYWwtXHUwMDNlcm9hbV9hdCA9IGppZmZpZXM7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRiYXRhZHZfdHRfbG9jYWxfYWRkX3JvYW0oYmF0X3ByaXYsIHR0X2dsb2JhbCwgcm9hbWVkX2JhY2spO1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4gXHQvKiBzdG9yZSB0aGUgY3VycmVudCByZW1vdGUgZmxhZ3MgYmVmb3JlIGFsdGVyaW5nIHRoZW0uIFRoaXMgaGVscHNcbiBcdCAqIHVuZGVyc3RhbmRpbmcgaXMgZmxhZ3MgYXJlIGNoYW5naW5nIG9yIG5vdFxuIFx0ICovXG5AQCAtNzg3LDEwICYjNDM7ODcwLDEzIEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4gXHRlbHNlXG4gXHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX0lTT0xBO1xuIFxuJiM0MztcdG1vZGlmaWVkID0gcmVtb3RlX2ZsYWdzIF4gKHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX1JFTU9URV9NQVNLKTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4mIzQzO1xuIFx0LyogaWYgYW55IFwmIzM0O2R5bmFtaWNcJiMzNDsgZmxhZyBoYXMgYmVlbiBtb2RpZmllZCwgcmVzZW5kIGFuIEFERCBldmVudCBmb3IgdGhpc1xuIFx0ICogZW50cnkgc28gdGhhdCBhbGwgdGhlIG5vZGVzIGNhbiBnZXQgdGhlIG5ldyBmbGFnc1xuIFx0ICovXG4tXHRpZiAocmVtb3RlX2ZsYWdzIF4gKHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX1JFTU9URV9NQVNLKSlcbiYjNDM7XHRpZiAobW9kaWZpZWQpXG4gXHRcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XG4gXG4gXHRyZXQgPSB0cnVlO1xuQEAgLTExMTUsNiAmIzQzOzEyMDEsNyBAQCBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLFxuIFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiBcdHVuc2lnbmVkIGludCBsYXN0X3NlZW5fbXNlY3M7XG4gXHR2b2lkICpoZHI7XG4mIzQzO1x0dTE2IGZsYWdzO1xuIFx0dTMyIGNyYztcbiBcbiBcdGxvY2FsID0gY29udGFpbmVyX29mKGNvbW1vbiwgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSwgY29tbW9uKTtcbkBAIC0xMTM2LDEzICYjNDM7MTIyMywxNSBAQCBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLFxuIFxuIFx0Z2VubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIGhkcik7XG4gXG4mIzQzO1x0ZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KGNvbW1vbik7XG4mIzQzO1xuIFx0aWYgKG5sYV9wdXQobXNnLCBCQVRBRFZfQVRUUl9UVF9BRERSRVNTLCBFVEhfQUxFTiwgY29tbW9uLVx1MDAzZWFkZHIpIHx8XG4gXHQgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9UVF9DUkMzMiwgY3JjKSB8fFxuIFx0ICAgIG5sYV9wdXRfdTE2KG1zZywgQkFUQURWX0FUVFJfVFRfVklELCBjb21tb24tXHUwMDNldmlkKSB8fFxuLVx0ICAgIG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfVFRfRkxBR1MsIGNvbW1vbi1cdTAwM2VmbGFncykpXG4mIzQzO1x0ICAgIG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfVFRfRkxBR1MsIGZsYWdzKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAoIShjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTk9QVVJHRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0aWYgKCEoZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTk9QVVJHRSkgXHUwMDI2XHUwMDI2XG4gXHQgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9MQVNUX1NFRU5fTVNFQ1MsIGxhc3Rfc2Vlbl9tc2VjcykpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuQEAgLTEyNDksMjkgJiM0MzsxMzM4LDIzIEBAIGludCBiYXRhZHZfdHRfbG9jYWxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gfVxuIFxuIC8qKlxuLSAqIGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZygpIC0gbWFyayBhIGxvY2FsIFRUIGVudHJ5IGFzIHBlbmRpbmcgcmVtb3ZhbFxuJiM0MzsgKiBiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmdfZXZlbnQoKSAtIHRyaWdnZXIgZXZlbnRzIGZvciBUVCBwZW5kaW5nIHJlbW92YWxcbiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiAgKiBAdHRfbG9jYWxfZW50cnk6IGxvY2FsIFRUIGVudHJ5IHRvIG1hcmtcbiAgKiBAZmxhZ3M6IFRUIGNoYW5nZSBmbGFncyB0byBhbm5vdW5jZSB0b2dldGhlciB3aXRoIHRoZSBwZW5kaW5nIHJlbW92YWxcbiAgKiBAbWVzc2FnZTogZGVidWcgbWVzc2FnZSBkZXNjcmliaW5nIHRoZSByZWFzb24gZm9yIHRoZSBjaGFuZ2VcbiAgKlxuLSAqIFNjaGVkdWxlIHRoZSBUVCBjaGFuZ2UgYW5ub3VuY2VtZW50IGFuZCBzZXQgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HIG9uIHRoZVxuLSAqIGVudHJ5LiBUaGUgZW50cnkgaXMga2VwdCBpbiB0aGUgbG9jYWwgdGFibGUgdW50aWwgdGhlIG5leHQgVFRWTiBpbmNyZW1lbnRcbi0gKiBzbyB0aGF0IGEgY29uc2lzdGVuY3ktY2hlY2sgcmVzcG9uc2UgY2FuIHN0aWxsIGJlIGFuc3dlcmVkLlxuJiM0MzsgKiBTY2hlZHVsZSB0aGUgVFQgY2hhbmdlIGFubm91bmNlbWVudCBmb3IgdGhlIGVudHJ5LiBUaGUgZW50cnkgaXMga2VwdCBpbiB0aGVcbiYjNDM7ICogbG9jYWwgdGFibGUgdW50aWwgdGhlIG5leHQgVFRWTiBpbmNyZW1lbnQgc28gdGhhdCBhIGNvbnNpc3RlbmN5LWNoZWNrXG4mIzQzOyAqIHJlc3BvbnNlIGNhbiBzdGlsbCBiZSBhbnN3ZXJlZC5cbiAgKi9cbiBzdGF0aWMgdm9pZFxuLWJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdCAgICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSxcbi1cdFx0XHQgICAgdTE2IGZsYWdzLCBjb25zdCBjaGFyICptZXNzYWdlKVxuJiM0MztiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LFxuJiM0MztcdFx0XHRcdCAgdTE2IGZsYWdzLCBjb25zdCBjaGFyICptZXNzYWdlKVxuIHtcbiBcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksIGZsYWdzKTtcbiBcbi1cdC8qIFRoZSBsb2NhbCBjbGllbnQgaGFzIHRvIGJlIG1hcmtlZCBhcyBcJiMzNDtwZW5kaW5nIHRvIGJlIHJlbW92ZWRcJiMzNDsgYnV0IGhhc1xuLVx0ICogdG8gYmUga2VwdCBpbiB0aGUgdGFibGUgaW4gb3JkZXIgdG8gc2VuZCBpdCBpbiBhIGZ1bGwgdGFibGVcbi1cdCAqIHJlc3BvbnNlIGlzc3VlZCBiZWZvcmUgdGhlIG5ldCB0dHZuIGluY3JlbWVudCAoY29uc2lzdGVuY3kgY2hlY2spXG4tXHQgKi9cbi1cdHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7XG4tXG4gXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxuIFx0XHQgICBcJiMzNDtMb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKSBwZW5kaW5nIHRvIGJlIHJlbW92ZWQ6ICVzXFxuXCYjMzQ7LFxuIFx0XHQgICB0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uYWRkcixcbkBAIC0xMjkyLDE2ICYjNDM7MTM3NSwxNyBAQCB1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbiBcdFx0XHQgICB1bnNpZ25lZCBzaG9ydCB2aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsXG4gXHRcdFx0ICAgYm9vbCByb2FtaW5nKVxuIHtcbi1cdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X3JlbW92ZWRfZW50cnk7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbiBcdHN0cnVjdCBobGlzdF9ub2RlICp0dF9yZW1vdmVkX25vZGU7XG4gXHR1MTYgY3Vycl9mbGFncyA9IEJBVEFEVl9OT19GTEFHUztcbiYjNDM7XHRib29sIHBlbmRpbmcgPSBmYWxzZTtcbiBcdHUxNiBmbGFncztcbiBcbiBcdHR0X2xvY2FsX2VudHJ5ID0gYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcbiBcdGlmICghdHRfbG9jYWxfZW50cnkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuJiM0MztcdHNwaW5fbG9ja19iaChcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4gXHRjdXJyX2ZsYWdzID0gdHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzO1xuIFxuIFx0ZmxhZ3MgPSBCQVRBRFZfVFRfQ0xJRU5UX0RFTDtcbkBAIC0xMzE2LDI3ICYjNDM7MTQwMCwzOSBAQCB1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbiBcdH1cbiBcbiBcdGlmICghKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKSB7XG4tXHRcdGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZyhiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksIGZsYWdzLFxuLVx0XHRcdFx0XHQgICAgbWVzc2FnZSk7XG4mIzQzO1x0XHR0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HO1xuJiM0MztcdFx0cGVuZGluZyA9IHRydWU7XG4mIzQzO1x0fVxuJiM0MztcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBlbmRpbmcpIHtcbiYjNDM7XHRcdGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudChiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksIGZsYWdzLFxuJiM0MztcdFx0XHRcdFx0XHQgIG1lc3NhZ2UpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiYjNDM7XG4gXHQvKiBpZiB0aGlzIGNsaWVudCBoYXMgYmVlbiBhZGRlZCByaWdodCBub3csIGl0IGlzIHBvc3NpYmxlIHRvXG4gXHQgKiBpbW1lZGlhdGVseSBwdXJnZSBpdFxuIFx0ICovXG4gXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBCQVRBRFZfVFRfQ0xJRU5UX0RFTCk7XG4gXG4mIzQzO1x0LyogcmVtb3ZlIGV4YWN0bHkgdGhpcyBvYmplY3Qgd2hlbiBzdGlsbCBwcmVzZW50IGluIGhhc2ggKi9cbiBcdHR0X3JlbW92ZWRfbm9kZSA9IGJhdGFkdl9oYXNoX3JlbW92ZShiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLFxuLVx0XHRcdFx0XHQgICAgIGJhdGFkdl9jb21wYXJlX3R0LFxuJiM0MztcdFx0XHRcdFx0ICAgICBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSxcbiBcdFx0XHRcdFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbik7XG4gXHRpZiAoIXR0X3JlbW92ZWRfbm9kZSlcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0LyogYmF0YWR2X3R0X2xvY2FsX3RyYW5zaXRpb25fbmV3KCkgbWF5IGhhdmUgY29tbWl0dGVkIHRoZSBlbnRyeSBhbmRcbiYjNDM7XHQgKiB0aHVzIGNvdW50ZWQgaXQgaW4gdGhlIGxvY2FsIHRhYmxlIHNpemUgc2luY2UgdGhlIEJBVEFEVl9UVF9DTElFTlRfTkVXXG4mIzQzO1x0ICogY2hlY2sgYWJvdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCEoYmF0YWR2X3R0X2ZsYWdzX2dldChcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24pIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpXG4mIzQzO1x0XHRiYXRhZHZfdHRfbG9jYWxfc2l6ZV9kZWMoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi52aWQpO1xuJiM0MztcbiBcdC8qIGRyb3AgcmVmZXJlbmNlIG9mIHJlbW92ZSBoYXNoIGVudHJ5ICovXG4tXHR0dF9yZW1vdmVkX2VudHJ5ID0gaGxpc3RfZW50cnkodHRfcmVtb3ZlZF9ub2RlLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksXG4tXHRcdFx0XHQgICAgICAgY29tbW9uLmhhc2hfZW50cnkpO1xuLVx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9yZW1vdmVkX2VudHJ5KTtcbiYjNDM7XHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcbiBcbiBvdXQ6XG4gXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcbkBAIC0xMzYxLDIxICYjNDM7MTQ1NywzNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfcHVyZ2VfbGlzdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFxuIFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0dF9jb21tb25fZW50cnksIG5vZGVfdG1wLCBoZWFkLFxuIFx0XHRcdFx0ICBoYXNoX2VudHJ5KSB7XG4mIzQzO1x0XHRib29sIGNvbnQgPSBmYWxzZTtcbiYjNDM7XG4gXHRcdHR0X2xvY2FsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSxcbiBcdFx0XHRcdFx0ICAgICAgY29tbW9uKTtcbi1cdFx0aWYgKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKVxuLVx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKiBlbnRyeSBhbHJlYWR5IG1hcmtlZCBmb3IgZGVsZXRpb24gKi9cbi1cdFx0aWYgKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKVxuLVx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jaykge1xuJiM0MztcdFx0XHRpZiAodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0UpIHtcbiYjNDM7XHRcdFx0XHRjb250ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LyogZW50cnkgYWxyZWFkeSBtYXJrZWQgZm9yIGRlbGV0aW9uICovXG4mIzQzO1x0XHRcdGlmICh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykge1xuJiM0MztcdFx0XHRcdGNvbnQgPSB0cnVlO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWJhdGFkdl9oYXNfdGltZWRfb3V0KHR0X2xvY2FsX2VudHJ5LVx1MDAzZWxhc3Rfc2VlbiwgdGltZW91dCkpIHtcbiYjNDM7XHRcdFx0XHRjb250ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUEVORElORztcbiYjNDM7XHRcdH1cbiBcbi1cdFx0aWYgKCFiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9sb2NhbF9lbnRyeS1cdTAwM2VsYXN0X3NlZW4sIHRpbWVvdXQpKVxuJiM0MztcdFx0aWYgKGNvbnQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZyhiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksXG4tXHRcdFx0XHRcdCAgICBCQVRBRFZfVFRfQ0xJRU5UX0RFTCwgXCYjMzQ7dGltZWQgb3V0XCYjMzQ7KTtcbiYjNDM7XHRcdGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudChiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksXG4mIzQzO1x0XHRcdFx0XHRcdCAgQkFUQURWX1RUX0NMSUVOVF9ERUwsIFwmIzM0O3RpbWVkIG91dFwmIzM0Oyk7XG4gXHR9XG4gfVxuIFxuQEAgLTE1ODEsOCAmIzQzOzE2OTMsMTAgQEAgYmF0YWR2X3R0X2dsb2JhbF9zeW5jX2ZsYWdzKHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwpXG4gXHRcdGZsYWdzIHw9IG9yaWdfZW50cnktXHUwMDNlZmxhZ3M7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbi1cdGZsYWdzIHw9IHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2ICh+QkFUQURWX1RUX1NZTkNfTUFTSyk7XG4tXHR0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcdTAwMjZ0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spIHtcbiYjNDM7XHRcdGZsYWdzIHw9IHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2ICh+QkFUQURWX1RUX1NZTkNfTUFTSyk7XG4mIzQzO1x0XHR0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzID0gZmxhZ3M7XG4mIzQzO1x0fVxuIH1cbiBcbiAvKipcbkBAIC0xNjY0LDggJiM0MzsxNzc4LDEwIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICpjb21tb247XG4gXHRib29sIHJldCA9IGZhbHNlO1xuJiM0MztcdHUxNiBnbG9iYWxfZmxhZ3M7XG4gXHR1MTYgbG9jYWxfZmxhZ3M7XG4gXHRpbnQgaGFzaF9hZGRlZDtcbiYjNDM7XHRib29sIGRlbGV0ZTtcbiBcbiBcdC8qIGlnbm9yZSBnbG9iYWwgZW50cmllcyBmcm9tIGJhY2tib25lIG5vZGVzICovXG4gXHRpZiAoYmF0YWR2X2JsYV9pc19iYWNrYm9uZV9nd19vcmlnKGJhdF9wcml2LCBvcmlnX25vZGUtXHUwMDNlb3JpZywgdmlkKSlcbkBAIC0xNjc4LDkgJiM0MzsxNzk0LDExIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHQgKiBmb3IgYSByb2FtaW5nIGFkdmVydGlzZW1lbnQgaW5zdGVhZCBvZiBtYW51YWxseSBtZXNzaW5nIHVwIHRoZSBnbG9iYWxcbiBcdCAqIHRhYmxlXG4gXHQgKi9cbi1cdGlmICgoZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgXHUwMDI2XHUwMDI2IHR0X2xvY2FsX2VudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICEodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdGlmICgoZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgXHUwMDI2XHUwMDI2IHR0X2xvY2FsX2VudHJ5KSB7XG4mIzQzO1x0XHRsb2NhbF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uKTtcbiYjNDM7XHRcdGlmICghKGxvY2FsX2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcbiBcdGlmICghdHRfZ2xvYmFsX2VudHJ5KSB7XG4gXHRcdHR0X2dsb2JhbF9lbnRyeSA9IGttZW1fY2FjaGVfemFsbG9jKGJhdGFkdl90Z19jYWNoZSxcbkBAIC0xNjkxLDkgJiM0MzsxODA5LDEzIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdGNvbW1vbiA9IFx1MDAyNnR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb247XG4gXHRcdGV0aGVyX2FkZHJfY29weShjb21tb24tXHUwMDNlYWRkciwgdHRfYWRkcik7XG4gXHRcdGNvbW1vbi1cdTAwM2V2aWQgPSB2aWQ7XG4mIzQzO1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjb21tb24tXHUwMDNlZmxhZ3NfbG9jayk7XG4gXG4tXHRcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoY29tbW9uLVx1MDAzZWFkZHIpKVxuJiM0MztcdFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihjb21tb24tXHUwMDNlYWRkcikpIHtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvbW1vbi1cdTAwM2VmbGFnc19sb2NrKTtcbiBcdFx0XHRjb21tb24tXHUwMDNlZmxhZ3MgPSBmbGFncyBcdTAwMjYgKH5CQVRBRFZfVFRfU1lOQ19NQVNLKTtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29tbW9uLVx1MDAzZWZsYWdzX2xvY2spO1xuJiM0MztcdFx0fVxuIFxuIFx0XHR0dF9nbG9iYWxfZW50cnktXHUwMDNlcm9hbV9hdCA9IDA7XG4gXHRcdC8qIG5vZGUgbXVzdCBzdG9yZSBjdXJyZW50IHRpbWUgaW4gY2FzZSBvZiByb2FtaW5nLiBUaGlzIGlzXG5AQCAtMTczMyw4ICYjNDM7MTg1NSwxMCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHQgKiAgICBvcmlnaW5hdG9yIGxpc3QgYW5kIGFkZCB0aGUgbmV3IG9uZSBvcmlnX2VudHJ5XG4gXHRcdCAqL1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkge1xuLVx0XHRcdGlmICghKGNvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSlcbiYjNDM7XHRcdFx0Z2xvYmFsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pO1xuJiM0MztcdFx0XHRpZiAoIShnbG9iYWxfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkpXG4gXHRcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4gXHRcdFx0aWYgKGJhdGFkdl90dF9nbG9iYWxfZW50cnlfaGFzX29yaWcodHRfZ2xvYmFsX2VudHJ5LFxuIFx0XHRcdFx0XHRcdFx0ICAgIG9yaWdfbm9kZSwgTlVMTCkpXG4gXHRcdFx0XHRnb3RvIG91dF9yZW1vdmU7XG5AQCAtMTc0Miw2ICYjNDM7MTg2Niw5IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0Z290byBhZGRfb3JpZ19lbnRyeTtcbiBcdFx0fVxuIFxuJiM0MztcdFx0ZGVsZXRlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvbW1vbi1cdTAwM2VmbGFnc19sb2NrKTtcbiBcdFx0LyogaWYgdGhlIGNsaWVudCB3YXMgdGVtcG9yYXJ5IGFkZGVkIGJlZm9yZSByZWNlaXZpbmcgdGhlIGZpcnN0XG4gXHRcdCAqIE9HTSBhbm5vdW5jaW5nIGl0LCB3ZSBoYXZlIHRvIGNsZWFyIHRoZSBURU1QIGZsYWcuIEFsc28sXG4gXHRcdCAqIHJlbW92ZSB0aGUgcHJldmlvdXMgdGVtcG9yYXJ5IG9yaWcgbm9kZSBhbmQgcmUtYWRkIGl0XG5AQCAtMTc0OSw3ICYjNDM7MTg3Niw3IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdCAqIGlzIGEgbm9uLXRlbXBvcmFyeSBlbnRyeSBpcyBwcmVmZXJyZWQuXG4gXHRcdCAqL1xuIFx0XHRpZiAoY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApIHtcbi1cdFx0XHRiYXRhZHZfdHRfZ2xvYmFsX2RlbF9vcmlnX2xpc3QodHRfZ2xvYmFsX2VudHJ5KTtcbiYjNDM7XHRcdFx0ZGVsZXRlID0gdHJ1ZTtcbiBcdFx0XHRjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9URU1QO1xuIFx0XHR9XG4gXG5AQCAtMTc2OCwxMCAmIzQzOzE4OTUsMTQgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICogbmV3IG9uZS5cbiBcdFx0ICovXG4gXHRcdGlmIChjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkge1xuLVx0XHRcdGJhdGFkdl90dF9nbG9iYWxfZGVsX29yaWdfbGlzdCh0dF9nbG9iYWxfZW50cnkpO1xuLVx0XHRcdGNvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4mIzQzO1x0XHRcdGRlbGV0ZSA9IHRydWU7XG4gXHRcdFx0dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZXJvYW1fYXQgPSAwO1xuJiM0MztcdFx0XHRjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFx0XHR9XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZjb21tb24tXHUwMDNlZmxhZ3NfbG9jayk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGRlbGV0ZSlcbiYjNDM7XHRcdFx0YmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7XG4gXHR9XG4gYWRkX29yaWdfZW50cnk6XG4gXHQvKiBhZGQgdGhlIG5ldyBvcmlnX2VudHJ5IChpZiBuZWVkZWQpIG9yIHVwZGF0ZSBpdCAqL1xuQEAgLTE3OTUsNiAmIzQzOzE5MjYsOCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0bG9jYWxfZmxhZ3MgPSBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKGJhdF9wcml2LCB0dF9hZGRyLCB2aWQsXG4gXHRcdFx0XHRcdCAgICAgXCYjMzQ7Z2xvYmFsIHR0IHJlY2VpdmVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICAgIGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfYmgoXHUwMDI2dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiBcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gbG9jYWxfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfV0lGSTtcbiBcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKVxuQEAgLTE4MDIsNiAmIzQzOzE5MzUsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHQgKiByb2FtaW5nIHN0YXRlIGFueW1vcmUuXG4gXHRcdCAqL1xuIFx0XHR0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbiYjNDM7XHRzcGluX3VubG9ja19iaChcdTAwMjZ0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuIFxuIG91dDpcbiBcdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbF9lbnRyeSk7XG5AQCAtMTg3MSw5ICYjNDM7MjAwNSw5IEBAIGJhdGFkdl90dF9nbG9iYWxfZHVtcF9zdWJlbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqb3JpZyxcbiBcdFx0XHQgICAgICAgYm9vbCBiZXN0KVxuIHtcbi1cdHUxNiBmbGFncyA9IChjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2ICh+QkFUQURWX1RUX1NZTkNfTUFTSykpIHwgb3JpZy1cdTAwM2VmbGFncztcbiBcdHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlX3ZsYW4gKnZsYW47XG4gXHR1OCBsYXN0X3R0dm47XG4mIzQzO1x0dTE2IGZsYWdzO1xuIFx0dm9pZCAqaGRyO1xuIFx0dTMyIGNyYztcbiBcbkBAIC0xODkyLDYgJiM0MzsyMDI2LDcgQEAgYmF0YWR2X3R0X2dsb2JhbF9kdW1wX3N1YmVudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsIHUzMiBzZXEsXG4gXHRpZiAoIWhkcilcbiBcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIFxuJiM0MztcdGZsYWdzID0gKGJhdGFkdl90dF9mbGFnc19nZXQoY29tbW9uKSBcdTAwMjYgKH5CQVRBRFZfVFRfU1lOQ19NQVNLKSkgfCBvcmlnLVx1MDAzZWZsYWdzO1xuIFx0bGFzdF90dHZuID0gUkVBRF9PTkNFKG9yaWctXHUwMDNlb3JpZ19ub2RlLVx1MDAzZWxhc3RfdHR2bik7XG4gXG4gXHRpZiAobmxhX3B1dChtc2csIEJBVEFEVl9BVFRSX1RUX0FERFJFU1MsIEVUSF9BTEVOLCBjb21tb24tXHUwMDNlYWRkcikgfHxcbkBAIC0yMTc5LDkgJiM0MzsyMzE0LDEyIEBAIGJhdGFkdl90dF9nbG9iYWxfZGVsX3JvYW1pbmcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxhc3RfZW50cnkpIHtcbi1cdFx0LyogaXRzIHRoZSBsYXN0IG9uZSwgbWFyayBmb3Igcm9hbWluZy4gKi9cbi1cdFx0dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4tXHRcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcbiYjNDM7XHRcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKSB7XG4mIzQzO1x0XHRcdC8qIGl0cyB0aGUgbGFzdCBvbmUsIG1hcmsgZm9yIHJvYW1pbmcuICovXG4mIzQzO1x0XHRcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcbiYjNDM7XG4mIzQzO1x0XHRcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuJiM0MztcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LyogdGhlcmUgaXMgYW5vdGhlciBlbnRyeSwgd2UgY2FuIHNpbXBseSBkZWxldGUgdGhpc1xuIFx0XHQgKiBvbmUgYW5kIGNhbiBzdGlsbCB1c2UgdGhlIG90aGVyIG9uZS5cbkBAIC0yMzMwLDE2ICYjNDM7MjQ2OCwxOCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX3RvX3B1cmdlKHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwsXG4gXHR1bnNpZ25lZCBsb25nIHRlbXBfdGltZW91dCA9IEJBVEFEVl9UVF9DTElFTlRfVEVNUF9USU1FT1VUO1xuIFx0Ym9vbCBwdXJnZSA9IGZhbHNlO1xuIFxuLVx0aWYgKCh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pIFx1MDAyNlx1MDAyNlxuLVx0ICAgIGJhdGFkdl9oYXNfdGltZWRfb3V0KHR0X2dsb2JhbC1cdTAwM2Vyb2FtX2F0LCByb2FtX3RpbWVvdXQpKSB7XG4tXHRcdHB1cmdlID0gdHJ1ZTtcbi1cdFx0Km1zZyA9IFwmIzM0O1JvYW1pbmcgdGltZW91dFxcblwmIzM0Oztcbi1cdH1cbiYjNDM7XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNnR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jaykge1xuJiM0MztcdFx0aWYgKCh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGJhdGFkdl9oYXNfdGltZWRfb3V0KHR0X2dsb2JhbC1cdTAwM2Vyb2FtX2F0LCByb2FtX3RpbWVvdXQpKSB7XG4mIzQzO1x0XHRcdHB1cmdlID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Km1zZyA9IFwmIzM0O1JvYW1pbmcgdGltZW91dFxcblwmIzM0OztcbiYjNDM7XHRcdH1cbiBcbi1cdGlmICgodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmFkZGVkX2F0LCB0ZW1wX3RpbWVvdXQpKSB7XG4tXHRcdHB1cmdlID0gdHJ1ZTtcbi1cdFx0Km1zZyA9IFwmIzM0O1RlbXBvcmFyeSBjbGllbnQgdGltZW91dFxcblwmIzM0OztcbiYjNDM7XHRcdGlmICgodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmFkZGVkX2F0LCB0ZW1wX3RpbWVvdXQpKSB7XG4mIzQzO1x0XHRcdHB1cmdlID0gdHJ1ZTtcbiYjNDM7XHRcdFx0Km1zZyA9IFwmIzM0O1RlbXBvcmFyeSBjbGllbnQgdGltZW91dFxcblwmIzM0OztcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiBwdXJnZTtcbkBAIC0yNDM3LDggJiM0MzsyNTc3LDggQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF90YWJsZV9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4gLyoqXG4gICogX2JhdGFkdl9pc19hcF9pc29sYXRlZCgpIC0gY2hlY2sgd2hldGhlciB0d28gY2xpZW50cyBhcmUgQVAtaXNvbGF0ZWQgZnJvbVxuICAqICBlYWNoIG90aGVyXG4tICogQHR0X2xvY2FsX2VudHJ5OiBsb2NhbCBUVCBlbnRyeSBvZiB0aGUgc2VuZGluZyBjbGllbnRcbi0gKiBAdHRfZ2xvYmFsX2VudHJ5OiBnbG9iYWwgVFQgZW50cnkgb2YgdGhlIGRlc3RpbmF0aW9uIGNsaWVudFxuJiM0MzsgKiBAdHRfbG9jYWxfZW50cnk6IGxvY2FsIFRUIGVudHJ5IG9mIG9uZSBsb2NhbCBjbGllbnRcbiYjNDM7ICogQHR0X2dsb2JhbF9lbnRyeTogZ2xvYmFsIFRUIGVudHJ5IG9mIHRoZSByZW1vdGUgY2xpZW50XG4gICpcbiAgKiBSZXR1cm46IHRydWUgaWYgdHJhZmZpYyBiZXR3ZWVuIHRoZSB0d28gY2xpZW50cyBzaG91bGQgYmUgZHJvcHBlZCBiZWNhdXNlXG4gICogIGVpdGhlciBib3RoIGFyZSBXaUZpIGNsaWVudHMgb3IgYm90aCBjYXJyeSB0aGUgSVNPTEFUSU9OIGZsYWc7IGZhbHNlXG5AQCAtMjQ0OCwxMyAmIzQzOzI1ODgsMTkgQEAgc3RhdGljIGJvb2xcbiBfYmF0YWR2X2lzX2FwX2lzb2xhdGVkKHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LFxuIFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeSlcbiB7XG4tXHRpZiAodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9XSUZJKVxuJiM0MztcdHUxNiBnbG9iYWxfZmxhZ3M7XG4mIzQzO1x0dTE2IGxvY2FsX2ZsYWdzO1xuJiM0MztcbiYjNDM7XHRnbG9iYWxfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24pO1xuJiM0MztcdGxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24pO1xuJiM0MztcbiYjNDM7XHRpZiAobG9jYWxfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfV0lGSSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgZ2xvYmFsX2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogY2hlY2sgaWYgdGhlIHR3byBjbGllbnRzIGFyZSBtYXJrZWQgYXMgaXNvbGF0ZWQgKi9cbi1cdGlmICh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEgXHUwMDI2XHUwMDI2XG4tXHQgICAgdHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQSlcbiYjNDM7XHRpZiAobG9jYWxfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIGdsb2JhbF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQSlcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4gXHRyZXR1cm4gZmFsc2U7XG5AQCAtMjQ4MywxMSAmIzQzOzI2MjksMTUgQEAgc3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKmJhdGFkdl90cmFuc3RhYmxlX3NlYXJjaChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnkgPSBOVUxMO1xuIFx0c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKmJlc3RfZW50cnk7XG4gXHRzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDtcbiYjNDM7XHR1MTYgZmxhZ3M7XG4gXG4gXHRpZiAoc3JjIFx1MDAyNlx1MDAyNiBiYXRhZHZfdmxhbl9hcF9pc29sYV9nZXQoYmF0X3ByaXYsIHZpZCkpIHtcbiBcdFx0dHRfbG9jYWxfZW50cnkgPSBiYXRhZHZfdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBzcmMsIHZpZCk7XG4tXHRcdGlmICghdHRfbG9jYWxfZW50cnkgfHxcbi1cdFx0ICAgICh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykpXG4mIzQzO1x0XHRpZiAoIXR0X2xvY2FsX2VudHJ5KVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRmbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uKTtcbiYjNDM7XHRcdGlmIChmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTI1NjIsNiAmIzQzOzI3MTIsOCBAQCBzdGF0aWMgdTMyIGJhdGFkdl90dF9nbG9iYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHR0X2NvbW1vbiwgaGVhZCwgaGFzaF9lbnRyeSkge1xuJiM0MztcdFx0XHR1MTYgdHRfZmxhZ3M7XG4mIzQzO1xuIFx0XHRcdHR0X2dsb2JhbCA9IGNvbnRhaW5lcl9vZih0dF9jb21tb24sXG4gXHRcdFx0XHRcdFx0IHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5LFxuIFx0XHRcdFx0XHRcdCBjb21tb24pO1xuQEAgLTI1NzEsMTggJiM0MzsyNzIzLDIxIEBAIHN0YXRpYyB1MzIgYmF0YWR2X3R0X2dsb2JhbF9jcmMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRpZiAodHRfY29tbW9uLVx1MDAzZXZpZCAhPSB2aWQpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdFx0dHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbik7XG4mIzQzO1xuIFx0XHRcdC8qIFJvYW1pbmcgY2xpZW50cyBhcmUgaW4gdGhlIGdsb2JhbCB0YWJsZSBmb3JcbiBcdFx0XHQgKiBjb25zaXN0ZW5jeSBvbmx5LiBUaGV5IGRvbiYjMzk7dCBoYXZlIHRvIGJlXG4gXHRcdFx0ICogdGFrZW4gaW50byBhY2NvdW50IHdoaWxlIGNvbXB1dGluZyB0aGVcbiBcdFx0XHQgKiBnbG9iYWwgY3JjXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKHR0X2NvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKVxuJiM0MztcdFx0XHRpZiAodHRfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSlcbiBcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0XHQvKiBUZW1wb3JhcnkgY2xpZW50cyBoYXZlIG5vdCBiZWVuIGFubm91bmNlZCB5ZXQsIHNvXG4gXHRcdFx0ICogdGhleSBoYXZlIHRvIGJlIHNraXBwZWQgd2hpbGUgY29tcHV0aW5nIHRoZSBnbG9iYWxcbiBcdFx0XHQgKiBjcmNcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAodHRfY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApXG4mIzQzO1x0XHRcdGlmICh0dF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0LyogZmluZCBvdXQgaWYgdGhpcyBnbG9iYWwgZW50cnkgaXMgYW5ub3VuY2VkIGJ5IHRoaXNcbkBAIC0yNjQyLDE4ICYjNDM7Mjc5NywyNCBAQCBzdGF0aWMgdTMyIGJhdGFkdl90dF9sb2NhbF9jcmMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfY29tbW9uLCBoZWFkLCBoYXNoX2VudHJ5KSB7XG4mIzQzO1x0XHRcdHUxNiB0dF9mbGFncztcbiYjNDM7XG4gXHRcdFx0LyogY29tcHV0ZSB0aGUgQ1JDIG9ubHkgZm9yIGVudHJpZXMgYmVsb25naW5nIHRvIHRoZVxuIFx0XHRcdCAqIFZMQU4gaWRlbnRpZmllZCBieSB2aWRcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAodHRfY29tbW9uLVx1MDAzZXZpZCAhPSB2aWQpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdFx0dHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbik7XG4mIzQzO1xuIFx0XHRcdC8qIG5vdCB5ZXQgY29tbWl0dGVkIGNsaWVudHMgaGF2ZSBub3QgdG8gYmUgdGFrZW4gaW50b1xuIFx0XHRcdCAqIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIHRoZSBDUkNcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAodHRfY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVylcbiYjNDM7XHRcdFx0aWYgKHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuJiM0MztcdFx0XHRmbGFncyA9IHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfU1lOQ19NQVNLO1xuJiM0MztcbiBcdFx0XHQvKiB1c2UgbmV0d29yayBvcmRlciB0byByZWFkIHRoZSBWSUQ6IHRoaXMgZW5zdXJlcyB0aGF0XG4gXHRcdFx0ICogZXZlcnkgbm9kZSByZWFkcyB0aGUgYnl0ZXMgaW4gdGhlIHNhbWUgb3JkZXIuXG4gXHRcdFx0ICovXG5AQCAtMjY2Myw3ICYjNDM7MjgyNCw2IEBAIHN0YXRpYyB1MzIgYmF0YWR2X3R0X2xvY2FsX2NyYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRcdC8qIGNvbXB1dGUgdGhlIENSQyBvbiBmbGFncyB0aGF0IGhhdmUgdG8gYmUga2VwdCBpbiBzeW5jXG4gXHRcdFx0ICogYW1vbmcgbm9kZXNcbiBcdFx0XHQgKi9cbi1cdFx0XHRmbGFncyA9IHR0X2NvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX1NZTkNfTUFTSztcbiBcdFx0XHRjcmNfdG1wID0gY3JjMzJjKGNyY190bXAsIFx1MDAyNmZsYWdzLCBzaXplb2YoZmxhZ3MpKTtcbiBcbiBcdFx0XHRjcmMgXj0gY3JjMzJjKGNyY190bXAsIHR0X2NvbW1vbi1cdTAwM2VhZGRyLCBFVEhfQUxFTik7XG5AQCAtMjgyMSwxNyAmIzQzOzI5ODEsMTkgQEAgYmF0YWR2X3R0X3JlcV9ub2RlX25ldyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuICAqXG4gICogUmV0dXJuOiB0cnVlIGlmIHRoZSBlbnRyeSBpcyBhIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKGNvbnN0IHZvaWQgKmVudHJ5X3B0cixcbiYjNDM7c3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKHZvaWQgKmVudHJ5X3B0cixcbiBcdFx0XHRcdCAgY29uc3Qgdm9pZCAqZGF0YV9wdHIsXG4gXHRcdFx0XHQgIHU4ICpmbGFncylcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5ID0gZW50cnlfcHRyO1xuJiM0MztcdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnkgPSBlbnRyeV9wdHI7XG4mIzQzO1x0dTE2IHR0X2ZsYWdzO1xuIFxuLVx0aWYgKHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpXG4mIzQzO1x0dHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbl9lbnRyeSk7XG4mIzQzO1x0aWYgKHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGZsYWdzKVxuLVx0XHQqZmxhZ3MgPSB0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3M7XG4mIzQzO1x0XHQqZmxhZ3MgPSB0dF9mbGFncztcbiBcbiBcdHJldHVybiB0cnVlO1xuIH1cbkBAIC0yODQ4LDE2ICYjNDM7MzAxMCwxOCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfbG9jYWxfdmFsaWQoY29uc3Qgdm9pZCAqZW50cnlfcHRyLFxuICAqXG4gICogUmV0dXJuOiB0cnVlIGlmIHRoZSBlbnRyeSBpcyBhIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF92YWxpZChjb25zdCB2b2lkICplbnRyeV9wdHIsXG4mIzQzO3N0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfdmFsaWQodm9pZCAqZW50cnlfcHRyLFxuIFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqZGF0YV9wdHIsXG4gXHRcdFx0XHQgICB1OCAqZmxhZ3MpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeSA9IGVudHJ5X3B0cjtcbi1cdGNvbnN0IHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7XG4mIzQzO1x0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeSA9IGVudHJ5X3B0cjtcbiBcdGNvbnN0IHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGUgPSBkYXRhX3B0cjtcbiYjNDM7XHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5O1xuJiM0MztcdHUxNiB0dF9mbGFncztcbiBcbi1cdGlmICh0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSB8fFxuLVx0ICAgIHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKVxuJiM0MztcdHR0X2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCh0dF9jb21tb25fZW50cnkpO1xuJiM0MztcdGlmICh0dF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNIHx8XG4mIzQzO1x0ICAgIHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHR0X2dsb2JhbF9lbnRyeSA9IGNvbnRhaW5lcl9vZih0dF9jb21tb25fZW50cnksXG5AQCAtMjg4Niw3ICYjNDM7MzA1MCw3IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfdmFsaWQoY29uc3Qgdm9pZCAqZW50cnlfcHRyLFxuIHN0YXRpYyB1MTYgYmF0YWR2X3R0X3R2bHZfZ2VuZXJhdGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdCAgIHN0cnVjdCBiYXRhZHZfaGFzaHRhYmxlICpoYXNoLFxuIFx0XHRcdFx0ICAgdm9pZCAqdHZsdl9idWZmLCB1MTYgdHRfbGVuLFxuLVx0XHRcdFx0ICAgYm9vbCAoKnZhbGlkX2NiKShjb25zdCB2b2lkICosXG4mIzQzO1x0XHRcdFx0ICAgYm9vbCAoKnZhbGlkX2NiKSh2b2lkICosXG4gXHRcdFx0XHRcdFx0ICAgIGNvbnN0IHZvaWQgKixcbiBcdFx0XHRcdFx0XHQgICAgdTggKmZsYWdzKSxcbiBcdFx0XHRcdCAgIHZvaWQgKmNiX2RhdGEpXG5AQCAtMzUxMSwxOSAmIzQzOzM2NzUsMjEgQEAgYm9vbCBiYXRhZHZfaXNfbXlfY2xpZW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4ge1xuIFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7XG4tXHRib29sIHJldCA9IGZhbHNlO1xuJiM0MztcdHUxNiB0dF9mbGFncztcbiYjNDM7XHRib29sIHJldDtcbiBcbiBcdHR0X2xvY2FsX2VudHJ5ID0gYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcbiBcdGlmICghdHRfbG9jYWxfZW50cnkpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHR0dF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uKTtcbiYjNDM7XG4gXHQvKiBDaGVjayBpZiB0aGUgY2xpZW50IGhhcyBiZWVuIGxvZ2ljYWxseSBkZWxldGVkIChidXQgaXMga2VwdCBmb3JcbiBcdCAqIGNvbnNpc3RlbmN5IHB1cnBvc2UpXG4gXHQgKi9cbi1cdGlmICgodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpIHx8XG4tXHQgICAgKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRyZXQgPSB0cnVlO1xuLW91dDpcbiYjNDM7XHRyZXQgPSAhKCh0dF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB8fFxuJiM0MztcdFx0KHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKTtcbiYjNDM7XG4gXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM3ODIsMTYgJiM0MzszOTQ4LDEzIEBAIHZvaWQgYmF0YWR2X3R0X2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbiB9XG4gXG4gLyoqXG4tICogYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncygpIC0gc2V0IG9yIHVuc2V0IHRoZSBzcGVjaWZpZWQgZmxhZ3Mgb24gdGhlIGxvY2FsXG4tICogIHRhYmxlIGFuZCBwb3NzaWJseSBjb3VudCB0aGVtIGluIHRoZSBUVCBzaXplXG4mIzQzOyAqIGJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldygpIC0gdW5zZXQgdGhlIE5FVyBmbGFnIG9uIHRoZSBsb2NhbFxuJiM0MzsgKiAgdGFibGUgYW5kIGNvdW50IHRoZW0gaW4gdGhlIFRUIHNpemVcbiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0gKiBAZmxhZ3M6IHRoZSBmbGFnIHRvIHN3aXRjaFxuLSAqIEBlbmFibGU6IHdoZXRoZXIgdG8gc2V0IG9yIHVuc2V0IHRoZSBmbGFnXG4tICogQGNvdW50OiB3aGV0aGVyIHRvIGluY3JlYXNlIHRoZSBUVCBzaXplIGJ5IHRoZSBudW1iZXIgb2YgY2hhbmdlZCBlbnRyaWVzXG4gICovXG4tc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1MTYgZmxhZ3MsXG4tXHRcdFx0XHQgICAgICBib29sIGVuYWJsZSwgYm9vbCBjb3VudClcbiYjNDM7c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3RyYW5zaXRpb25fbmV3KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4ge1xuJiM0MztcdHNwaW5sb2NrX3QgKmxpc3RfbG9jazsgLyogcHJvdGVjdHMgd3JpdGUgYWNjZXNzIHRvIHRoZSBoYXNoIGxpc3RzICovXG4gXHRzdHJ1Y3QgYmF0YWR2X2hhc2h0YWJsZSAqaGFzaCA9IGJhdF9wcml2LVx1MDAzZXR0LmxvY2FsX2hhc2g7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5O1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7XG5AQCAtMzgwMiwyNyAmIzQzOzM5NjUsMjggQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1MTYgZmxhZ3MsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBoYXNoLVx1MDAzZXNpemU7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGhlYWQgPSBcdTAwMjZoYXNoLVx1MDAzZXRhYmxlW2ldO1xuJiM0MztcdFx0bGlzdF9sb2NrID0gXHUwMDI2aGFzaC1cdTAwM2VsaXN0X2xvY2tzW2ldO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dF9jb21tb25fZW50cnksXG4tXHRcdFx0XHRcdCBoZWFkLCBoYXNoX2VudHJ5KSB7XG4tXHRcdFx0aWYgKGVuYWJsZSkge1xuLVx0XHRcdFx0aWYgKCh0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3MgXHUwMDI2IGZsYWdzKSA9PSBmbGFncylcbi1cdFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0XHR0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3MgfD0gZmxhZ3M7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGlmICghKHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjYgZmxhZ3MpKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRcdHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjY9IH5mbGFncztcbiYjNDM7XHRcdHNwaW5fbG9ja19iaChsaXN0X2xvY2spO1xuJiM0MztcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkodHRfY29tbW9uX2VudHJ5LCBoZWFkLCBoYXNoX2VudHJ5KSB7XG4mIzQzO1x0XHRcdGJvb2wgY29udCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcdTAwMjZ0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3NfbG9jaykge1xuJiM0MztcdFx0XHRcdGlmICghKHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKSB7XG4mIzQzO1x0XHRcdFx0XHRjb250ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdFx0dHRfY29tbW9uX2VudHJ5LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfTkVXO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWNvdW50KVxuJiM0MztcdFx0XHRpZiAoY29udClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGJhdGFkdl90dF9sb2NhbF9zaXplX2luYyhiYXRfcHJpdixcbiBcdFx0XHRcdFx0XHQgdHRfY29tbW9uX2VudHJ5LVx1MDAzZXZpZCk7XG4gXHRcdH1cbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1x0XHRzcGluX3VubG9ja19iaChsaXN0X2xvY2spO1xuIFx0fVxuIH1cbiBcbkBAIC0zODU0LDE2ICYjNDM7NDAxOCwzMSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfcHVyZ2VfcGVuZGluZ19jbGllbnRzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4gXHRcdHNwaW5fbG9ja19iaChsaXN0X2xvY2spO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHR0X2NvbW1vbiwgbm9kZV90bXAsIGhlYWQsXG4gXHRcdFx0XHRcdCAgaGFzaF9lbnRyeSkge1xuLVx0XHRcdGlmICghKHR0X2NvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRib29sIGNvbnQgPSBmYWxzZTtcbiBcbi1cdFx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxuLVx0XHRcdFx0ICAgXCYjMzQ7RGVsZXRpbmcgbG9jYWwgdHQgZW50cnkgKCVwTSwgdmlkOiAlZCk6IHBlbmRpbmdcXG5cJiMzNDssXG4tXHRcdFx0XHQgICB0dF9jb21tb24tXHUwMDNlYWRkcixcbi1cdFx0XHRcdCAgIGJhdGFkdl9wcmludF92aWQodHRfY29tbW9uLVx1MDAzZXZpZCkpO1xuJiM0MztcdFx0XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNnR0X2NvbW1vbi1cdTAwM2VmbGFnc19sb2NrKSB7XG4mIzQzO1x0XHRcdFx0aWYgKCEodHRfY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpKSB7XG4mIzQzO1x0XHRcdFx0XHRjb250ID0gdHJ1ZTtcbiYjNDM7XHRcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O0RlbGV0aW5nIGxvY2FsIHR0IGVudHJ5ICglcE0sIHZpZDogJWQpOiBwZW5kaW5nXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdFx0ICAgdHRfY29tbW9uLVx1MDAzZWFkZHIsXG4mIzQzO1x0XHRcdFx0XHQgICBiYXRhZHZfcHJpbnRfdmlkKHR0X2NvbW1vbi1cdTAwM2V2aWQpKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aGxpc3RfZGVsX3JjdShcdTAwMjZ0dF9jb21tb24tXHUwMDNlaGFzaF9lbnRyeSk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdC8qIEFuIGVudHJ5IHdoaWNoIHN0aWxsIGNhcnJpZXMgQkFUQURWX1RUX0NMSUVOVF9ORVcgd2FzXG4mIzQzO1x0XHRcdFx0ICogbmV2ZXIgY291bnRlZCBhbmQgbXVzdCBub3QgYmUgdW5jb3VudGVkIGhlcmUuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1x0XHRcdFx0aWYgKCEodHRfY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpXG4mIzQzO1x0XHRcdFx0XHRiYXRhZHZfdHRfbG9jYWxfc2l6ZV9kZWMoYmF0X3ByaXYsIHR0X2NvbW1vbi1cdTAwM2V2aWQpO1xuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoY29udClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRiYXRhZHZfdHRfbG9jYWxfc2l6ZV9kZWMoYmF0X3ByaXYsIHR0X2NvbW1vbi1cdTAwM2V2aWQpO1xuLVx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2dHRfY29tbW9uLVx1MDAzZWhhc2hfZW50cnkpO1xuIFx0XHRcdHR0X2xvY2FsID0gY29udGFpbmVyX29mKHR0X2NvbW1vbixcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LFxuIFx0XHRcdFx0XHRcdGNvbW1vbik7XG5AQCAtMzg5MSw3ICYjNDM7NDA3MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9jb21taXRfY2hhbmdlc19ub2xvY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0YmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhiYXRfcHJpdiwgQkFUQURWX1RUX0NMSUVOVF9ORVcsIGZhbHNlLCB0cnVlKTtcbiYjNDM7XHRiYXRhZHZfdHRfbG9jYWxfdHJhbnNpdGlvbl9uZXcoYmF0X3ByaXYpO1xuIFxuIFx0YmF0YWR2X3R0X2xvY2FsX3B1cmdlX3BlbmRpbmdfY2xpZW50cyhiYXRfcHJpdik7XG4gXHRiYXRhZHZfdHRfbG9jYWxfdXBkYXRlX2NyYyhiYXRfcHJpdik7XG5AQCAtNDA2MSwxNSAmIzQzOzQyNDAsMTYgQEAgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHRcdHU4ICphZGRyLCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4ge1xuIFx0c3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTtcbi1cdGJvb2wgcmV0ID0gZmFsc2U7XG4mIzQzO1x0Ym9vbCByZXQ7XG4gXG4gXHR0dF9nbG9iYWxfZW50cnkgPSBiYXRhZHZfdHRfZ2xvYmFsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcbiBcdGlmICghdHRfZ2xvYmFsX2VudHJ5KVxuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcdTAwMjZ0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uKSBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFxuLVx0cmV0ID0gdHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsX2VudHJ5KTtcbi1vdXQ6XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNDA4NywxNSAmIzQzOzQyNjcsMTYgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfY2xpZW50X2lzX3JvYW1pbmcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdCAgICAgICB1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkKVxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5O1xuLVx0Ym9vbCByZXQgPSBmYWxzZTtcbiYjNDM7XHRib29sIHJldDtcbiBcbiBcdHR0X2xvY2FsX2VudHJ5ID0gYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcbiBcdGlmICghdHRfbG9jYWxfZW50cnkpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbikgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbiBcbi1cdHJldCA9IHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG4tb3V0OlxuJiM0MztcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTQ0MDQsNyAmIzQzOzQ1ODUsNyBAQCBib29sIGJhdGFkdl90dF9nbG9iYWxfaXNfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdGlmICghdHQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldCA9IHR0LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQTtcbiYjNDM7XHRyZXQgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0LVx1MDAzZWNvbW1vbikgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEE7XG4gXG4gXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaCBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbmluZGV4IDliZGM1YTNlNzk5ZTIuLjY3ODcyOTI3Y2ZiNTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oXG5AQCAtNDEwLDcgJiM0Mzs0MTAsNyBAQCBzdHJ1Y3QgYmF0YWR2X29yaWdfYmF0X2l2IHtcbiAgKi9cbiBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSB7XG4gXHQvKiogQG9yaWc6IG9yaWdpbmF0b3IgZXRoZXJuZXQgYWRkcmVzcyAqL1xuLVx0dTggb3JpZ1tFVEhfQUxFTl07XG4mIzQzO1x0dTggb3JpZ1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEBpZmluZm9fbGlzdDogbGlzdCBmb3Igcm91dGVycyBwZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovXG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBpZmluZm9fbGlzdDtcbkBAIC02MzQsMTIgJiM0Mzs2MzQsMTIgQEAgc3RydWN0IGJhdGFkdl9oYXJkaWZfbmVpZ2hfbm9kZSB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0O1xuIFxuIFx0LyoqIEBhZGRyOiB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG5laWdoYm9yaW5nIGludGVyZmFjZSAqL1xuLVx0dTggYWRkcltFVEhfQUxFTl07XG4mIzQzO1x0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqXG4gXHQgKiBAb3JpZzogdGhlIGFkZHJlc3Mgb2YgdGhlIG9yaWdpbmF0b3IgdGhpcyBuZWlnaGJvciBub2RlIGJlbG9uZ3MgdG9cbiBcdCAqL1xuLVx0dTggb3JpZ1tFVEhfQUxFTl07XG4mIzQzO1x0dTggb3JpZ1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEBpZl9pbmNvbWluZzogcG9pbnRlciB0byBpbmNvbWluZyBoYXJkLWludGVyZmFjZSAqL1xuIFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9pbmNvbWluZztcbkBAIC02NzcsNyAmIzQzOzY3Nyw3IEBAIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSB7XG4gI2VuZGlmXG4gXG4gXHQvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbmVpZ2hib3JpbmcgaW50ZXJmYWNlICovXG4tXHR1OCBhZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKiogQGlmaW5mb19saXN0OiBsaXN0IGZvciByb3V0aW5nIG1ldHJpY3MgcGVyIG91dGdvaW5nIGludGVyZmFjZSAqL1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgaWZpbmZvX2xpc3Q7XG5AQCAtNzc3LDcgJiM0Mzs3NzcsNyBAQCBzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyB7XG4gICovXG4gc3RydWN0IGJhdGFkdl9iY2FzdF9kdXBsaXN0X2VudHJ5IHtcbiBcdC8qKiBAb3JpZzogbWFjIGFkZHJlc3Mgb2Ygb3JpZyBub2RlIG9yaWdpbmF0aW5nIHRoZSBicm9hZGNhc3QgKi9cbi1cdHU4IG9yaWdbRVRIX0FMRU5dO1xuJiM0MztcdHU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAY3JjOiBjcmMzMiBjaGVja3N1bSBvZiBicm9hZGNhc3QgcGF5bG9hZCAqL1xuIFx0dTMyIGNyYztcbkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RydWN0IGJhdGFkdl9wcml2X2JsYSB7XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhc2h0YWJsZSAqYmFja2JvbmVfaGFzaDtcbiBcbiBcdC8qKiBAbG9vcGRldGVjdF9hZGRyOiBNQUMgYWRkcmVzcyB1c2VkIGZvciBvd24gbG9vcGRldGVjdGlvbiBmcmFtZXMgKi9cbi1cdHU4IGxvb3BkZXRlY3RfYWRkcltFVEhfQUxFTl07XG4mIzQzO1x0dTggbG9vcGRldGVjdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKipcbiBcdCAqIEBsb29wZGV0ZWN0X2xhc3R0aW1lOiB0aW1lIHdoZW4gdGhlIGxvb3BkZXRlY3Rpb24gZnJhbWVzIHdlcmUgc2VudFxuQEAgLTEzNTIsNyAmIzQzOzEzNTIsNyBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIHtcbiBcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7XG4gXG4gXHQvKiogQG90aGVyX2VuZDogbWFjIGFkZHJlc3Mgb2YgcmVtb3RlICovXG4tXHR1OCBvdGhlcl9lbmRbRVRIX0FMRU5dO1xuJiM0MztcdHU4IG90aGVyX2VuZFtFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEBzZXNzaW9uOiBUUCBzZXNzaW9uIGlkZW50aWZpZXIgKi9cbiBcdHU4IHNlc3Npb25bMl07XG5AQCAtMTc2NSw3ICYjNDM7MTc2NSw3IEBAIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3IHtcbiBcdCAqIEBvcmlnOiBvcmlnaW5hdG9yIGFkZHJlc3Mgb2YgYmFja2JvbmUgbm9kZSAobWFjIGFkZHJlc3Mgb2YgcHJpbWFyeVxuIFx0ICogIGlmYWNlKVxuIFx0ICovXG4tXHR1OCBvcmlnW0VUSF9BTEVOXTtcbiYjNDM7XHR1OCBvcmlnW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKiogQHZpZDogdmxhbiBpZCB0aGlzIGdhdGV3YXkgd2FzIGRldGVjdGVkIG9uICovXG4gXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XG5AQCAtMTgxMCw3ICYjNDM7MTgxMCw3IEBAIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3IHtcbiAgKi9cbiBzdHJ1Y3QgYmF0YWR2X2JsYV9jbGFpbSB7XG4gXHQvKiogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIGNsYWltZWQgbm9uLW1lc2ggY2xpZW50ICovXG4tXHR1OCBhZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKiogQHZpZDogdmxhbiBpZCB0aGlzIGNsaWVudCB3YXMgZGV0ZWN0ZWQgb24gKi9cbiBcdHVuc2lnbmVkIHNob3J0IHZpZDtcbkBAIC0xODQwLDcgJiM0MzsxODQwLDcgQEAgc3RydWN0IGJhdGFkdl9ibGFfY2xhaW0ge1xuICAqL1xuIHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5IHtcbiBcdC8qKiBAYWRkcjogbWFjIGFkZHJlc3Mgb2Ygbm9uLW1lc2ggY2xpZW50ICovXG4tXHR1OCBhZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKiogQHZpZDogVkxBTiBpZGVudGlmaWVyICovXG4gXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XG5AQCAtMTg1MSwxMiAmIzQzOzE4NTEsMjEgQEAgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkge1xuIFx0ICovXG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoX2VudHJ5O1xuIFxuLVx0LyoqIEBmbGFnczogdmFyaW91cyBzdGF0ZSBoYW5kbGluZyBmbGFncyAoc2VlIGJhdGFkdl90dF9jbGllbnRfZmxhZ3MpICovXG4mIzQzO1x0LyoqXG4mIzQzO1x0ICogQGZsYWdzOiB2YXJpb3VzIHN0YXRlIGhhbmRsaW5nIGZsYWdzIChzZWUgYmF0YWR2X3R0X2NsaWVudF9mbGFncyksXG4mIzQzO1x0ICogcHJvdGVjdGVkIGJ5IEBmbGFnc19sb2NrXG4mIzQzO1x0ICovXG4gXHR1MTYgZmxhZ3M7XG4gXG4gXHQvKiogQGFkZGVkX2F0OiB0aW1lc3RhbXAgdXNlZCBmb3IgcHVyZ2luZyBzdGFsZSB0dCBjb21tb24gZW50cmllcyAqL1xuIFx0dW5zaWduZWQgbG9uZyBhZGRlZF9hdDtcbiBcbiYjNDM7XHQvKipcbiYjNDM7XHQgKiBAZmxhZ3NfbG9jazogcHJvdGVjdCBtb2RpZmljYXRpb25zIG9mIEBmbGFncyBhbmRcbiYjNDM7XHQgKiAgQGJhdGFkdl90dF9nbG9iYWxfZW50cnkucm9hbV9hdFxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5sb2NrX3QgZmxhZ3NfbG9jaztcbiYjNDM7XG4gXHQvKiogQHJlZmNvdW50OiBudW1iZXIgb2YgY29udGV4dHMgdGhlIG9iamVjdCBpcyB1c2VkICovXG4gXHRzdHJ1Y3Qga3JlZiByZWZjb3VudDtcbiBcbkBAIC0xOTQyLDcgJiM0MzsxOTUxLDcgQEAgc3RydWN0IGJhdGFkdl90dF9yZXFfbm9kZSB7XG4gXHQvKipcbiBcdCAqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiB0aGUgb3JpZ2luYXRvciB0aGlzIHJlcXVlc3Qgd2FzIHNlbnQgdG9cbiBcdCAqL1xuLVx0dTggYWRkcltFVEhfQUxFTl07XG4mIzQzO1x0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEBpc3N1ZWRfYXQ6IHRpbWVzdGFtcCB1c2VkIGZvciBwdXJnaW5nIHN0YWxlIHR0IHJlcXVlc3RzICovXG4gXHR1bnNpZ25lZCBsb25nIGlzc3VlZF9hdDtcbkBAIC0xOTU5LDcgJiM0MzsxOTY4LDcgQEAgc3RydWN0IGJhdGFkdl90dF9yZXFfbm9kZSB7XG4gICovXG4gc3RydWN0IGJhdGFkdl90dF9yb2FtX25vZGUge1xuIFx0LyoqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiB0aGUgY2xpZW50IGluIHRoZSByb2FtaW5nIHBoYXNlICovXG4tXHR1OCBhZGRyW0VUSF9BTEVOXTtcbiYjNDM7XHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKiogQHZpZDogVkxBTiBpZGVudGlmaWVyICovXG4gXHR1MTYgdmlkO1xuQEAgLTIwODcsMTQgJiM0MzsyMDk2LDE0IEBAIHN0cnVjdCBiYXRhZHZfYWxnb19uZWlnaF9vcHMge1xuIFx0XHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMik7XG4gXG4gXHQvKipcbi1cdCAqIEBpc19zaW1pbGFyX29yX2JldHRlcjogY2hlY2sgaWYgbmVpZ2gxIGlzIGVxdWFsbHkgc2ltaWxhciBvciBiZXR0ZXJcbi1cdCAqICB0aGFuIG5laWdoMiBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBvdXRnb2luZyBpbnRlcmZhY2UgZnJvbSB0aGUgbWV0cmljXG4mIzQzO1x0ICogQGlzX3NpbWlsYXJfb3JfYmV0dGVyOiBjaGVjayBpZiBAY2FuZGlkYXRlIGlzIGVxdWFsbHkgc2ltaWxhciBvciBiZXR0ZXJcbiYjNDM7XHQgKiAgdGhhbiBAcmVmZXJlbmNlIGZvciB0aGVpciByZXNwZWN0aXZlIG91dGdvaW5nIGludGVyZmFjZSBmcm9tIHRoZSBtZXRyaWNcbiBcdCAqICBwcm9zcGVjdGl2ZVxuIFx0ICovXG4tXHRib29sICgqaXNfc2ltaWxhcl9vcl9iZXR0ZXIpKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gxLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDIsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcyKTtcbiYjNDM7XHRib29sICgqaXNfc2ltaWxhcl9vcl9iZXR0ZXIpKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqY2FuZGlkYXRlLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLFxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpyZWZlcmVuY2UsXG4mIzQzO1x0XHRcdFx0ICAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nX3JlZik7XG4gXG4gXHQvKiogQGR1bXA6IGR1bXAgbmVpZ2hib3JzIHRvIGEgbmV0bGluayBzb2NrZXQgKG9wdGlvbmFsKSAqL1xuIFx0dm9pZCAoKmR1bXApKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbkBAIC0yMjA0LDcgJiM0MzsyMjEzLDcgQEAgc3RydWN0IGJhdGFkdl9od19hZGRyIHtcbiBcdHN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7XG4gXG4gXHQvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGlzIGxpc3QgZW50cnkgKi9cbi1cdHVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl07XG4mIzQzO1x0dW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gfTtcbiBcbiAvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCQVRNQU5fQURWJiMzNDssCiAgICAmIzM0O0JBVE1BTl9BRFZfQkFUTUFOX1YmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9CTEEmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9EQVQmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9NQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JhdGFkdl90dF9sb2NhbF9hZGQmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R0X2xvY2FsX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2gmIzM0OywKICAgICYjMzQ7YmF0YWR2X2lzX215X2NsaWVudCYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHRfZ2xvYmFsX2lzX2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2JhdGFkdl90dF9nbG9iYWxfY2xpZW50X2lzX3JvYW1pbmcmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgYnVnIGZpeGVzIGluIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgbWVzaCBwcm90b2NvbCBzdWJzeXN0ZW0gKG5ldC9iYXRtYW4tYWR2LykuIEtleSBjaGFuZ2VzIGluY2x1ZGUgYWRkaW5nIHNwaW5sb2NrIHByb3RlY3Rpb24gKGZsYWdzX2xvY2spIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgYW5kIG11dGF0aW5nIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzLCBmaXhpbmcgZXhhY3Qgb2JqZWN0IHJlbW92YWwgZnJvbSBoYXNoIGJ1Y2tldHMgKGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KSwgY29ycmVjdGluZyB0aGUgQi5BLlQuTS5BLk4uIFYgbmVpZ2hib3IgY29tcGFyaXNvbiBjYWxjdWxhdGlvbiBsb2dpYyBpbiBiYXRhZHZfdl9uZWlnaF9pc19zb2IoKSwgYW5kIGFkZGluZyAyLWJ5dGUgYWxpZ25tZW50IGF0dHJpYnV0ZXMgdG8gTUFDIGFkZHJlc3MgYnVmZmVycy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIGV4ZWN1dGlvbiBmbG93cyBhbmQgc3RhdGUgaGFuZGxpbmcgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0N2VhM2Y5YTc2OTE4YTk5MjM3Y2U3MzFkN2NmNmU4NTc3NWQwMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDozMTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYyBiL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYwppbmRleCA1M2ZiZGJiZThmNGY3Li4zZmUwOWI0YzMwNDYzIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jCkBAIC0yNDI0LDI1ICYjNDM7MjQyNCwyNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pdl9vZ21fbmVpZ2hfY21wKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gxLAogLyoqCiAgKiBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpIC0gY2hlY2sgaWYgbmVpZ2gxIGlzIHNpbWlsYXJseSBnb29kIG9yIGJldHRlcgogICogIHRoYW4gbmVpZ2gyIGZyb20gdGhlIG1ldHJpYyBwcm9zcGVjdGl2ZQotICogQG5laWdoMTogdGhlIGZpcnN0IG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvbgotICogQGlmX291dGdvaW5nMTogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgZmlyc3QgbmVpZ2hib3IKLSAqIEBuZWlnaDI6IHRoZSBzZWNvbmQgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uCi0gKiBAaWZfb3V0Z29pbmcyOiBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIHRoZSBzZWNvbmQgbmVpZ2hib3IKJiM0MzsgKiBAY2FuZGlkYXRlOiB0aGUgZmlyc3QgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uCiYjNDM7ICogQGlmX291dGdvaW5nX2NhbmQ6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEBjYW5kaWRhdGUgbmVpZ2hib3IKJiM0MzsgKiBAcmVmZXJlbmNlOiB0aGUgc2Vjb25kIG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvbgomIzQzOyAqIEBpZl9vdXRnb2luZ19yZWY6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEByZWZlcmVuY2UgbmVpZ2hib3IKICAqCi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIG1ldHJpYyB2aWEgbmVpZ2gxIGlzIGVxdWFsbHkgZ29vZCBvciBiZXR0ZXIgdGhhbgotICogdGhlIG1ldHJpYyB2aWEgbmVpZ2gyLCBmYWxzZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBtZXRyaWMgdmlhIEBjYW5kaWRhdGUgaXMgZXF1YWxseSBnb29kIG9yIGJldHRlciB0aGFuCiYjNDM7ICogdGhlIG1ldHJpYyB2aWEgQHJlZmVyZW5jZSwgZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgYm9vbAotYmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsCi0JCQkgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMSwKLQkJCSAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gyLAotCQkJICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzIpCiYjNDM7YmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsCiYjNDM7CQkJICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLAomIzQzOwkJCSAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLAomIzQzOwkJCSAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKQogewogCWJvb2wgcmV0OwogCWludCBkaWZmOwogCi0JcmV0ID0gYmF0YWR2X2l2X29nbV9uZWlnaF9kaWZmKG5laWdoMSwgaWZfb3V0Z29pbmcxLCBuZWlnaDIsCi0JCQkJICAgICAgIGlmX291dGdvaW5nMiwgJmFtcDtkaWZmKTsKJiM0MzsJcmV0ID0gYmF0YWR2X2l2X29nbV9uZWlnaF9kaWZmKGNhbmRpZGF0ZSwgaWZfb3V0Z29pbmdfY2FuZCwKJiM0MzsJCQkJICAgICAgIHJlZmVyZW5jZSwgaWZfb3V0Z29pbmdfcmVmLAomIzQzOwkJCQkgICAgICAgJmFtcDtkaWZmKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfdi5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3YuYwppbmRleCAwYzI3NDQ3Y2Y2ODg5Li41OTY4ODliMzUyMmQwIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JhdF92LmMKQEAgLTUxNCw0MCAmIzQzOzUxNCw0MCBAQCBzdGF0aWMgaW50IGJhdGFkdl92X25laWdoX2NtcChzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSwKIC8qKgogICogYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKCkgLSBjaGVjayB3aGV0aGVyIHR3byBCLkEuVC5NLkEuTi4gViBuZWlnaGJvdXJzIGhhdmUKICAqICBhIHNpbWlsYXIgb3IgYmV0dGVyIHRocm91Z2hwdXQKLSAqIEBuZWlnaDE6IGZpcnN0IG5laWdoYm91ciB0byBjb21wYXJlCi0gKiBAaWZfb3V0Z29pbmcxOiBvdXRnb2luZyBpbnRlcmZhY2UgdG8gdXNlIGZvciBAbmVpZ2gxCi0gKiBAbmVpZ2gyOiBzZWNvbmQgbmVpZ2hib3VyIHRvIGNvbXBhcmUKLSAqIEBpZl9vdXRnb2luZzI6IG91dGdvaW5nIGludGVyZmFjZSB0byB1c2UgZm9yIEBuZWlnaDIKJiM0MzsgKiBAY2FuZGlkYXRlOiB0aGUgZmlyc3QgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uCiYjNDM7ICogQGlmX291dGdvaW5nX2NhbmQ6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEBjYW5kaWRhdGUgbmVpZ2hib3IKJiM0MzsgKiBAcmVmZXJlbmNlOiB0aGUgc2Vjb25kIG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvbgomIzQzOyAqIEBpZl9vdXRnb2luZ19yZWY6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEByZWZlcmVuY2UgbmVpZ2hib3IKICAqCi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIHRocm91Z2hwdXQgb2YgQG5laWdoMiBpcyBhdCBsZWFzdCAzLzQgb2YgdGhlCi0gKiAgQG5laWdoMSB0aHJvdWdocHV0CiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSB0aHJvdWdocHV0IG9mIEBjYW5kaWRhdGUgaXMgbW9yZSB0aGFuIDMvNCBvZiB0aGUKJiM0MzsgKiAgQHJlZmVyZW5jZSB0aHJvdWdocHV0CiAgKi8KLXN0YXRpYyBib29sIGJhdGFkdl92X25laWdoX2lzX3NvYihzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSwKLQkJCQkgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcxLAotCQkJCSAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDIsCi0JCQkJICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMikKJiM0MztzdGF0aWMgYm9vbCBiYXRhZHZfdl9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsCiYjNDM7CQkJCSAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLAomIzQzOwkJCQkgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLAomIzQzOwkJCQkgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKQogewotCXN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm8xOwotCXN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm8yOwomIzQzOwlzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyAqaWZpbmZvX2NhbmQ7CiYjNDM7CXN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm9fcmVmOwogCWJvb2wgcmV0ID0gZmFsc2U7CiAJdTMyIHRocmVzaG9sZDsKIAotCWlmaW5mbzEgPSBiYXRhZHZfbmVpZ2hfaWZpbmZvX2dldChuZWlnaDEsIGlmX291dGdvaW5nMSk7Ci0JaWYgKCFpZmluZm8xKQomIzQzOwlpZmluZm9fY2FuZCA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KGNhbmRpZGF0ZSwgaWZfb3V0Z29pbmdfY2FuZCk7CiYjNDM7CWlmICghaWZpbmZvX2NhbmQpCiAJCWdvdG8gZXJyX2lmaW5mbzE7CiAKLQlpZmluZm8yID0gYmF0YWR2X25laWdoX2lmaW5mb19nZXQobmVpZ2gyLCBpZl9vdXRnb2luZzIpOwotCWlmICghaWZpbmZvMikKJiM0MzsJaWZpbmZvX3JlZiA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KHJlZmVyZW5jZSwgaWZfb3V0Z29pbmdfcmVmKTsKJiM0MzsJaWYgKCFpZmluZm9fcmVmKQogCQlnb3RvIGVycl9pZmluZm8yOwogCi0JdGhyZXNob2xkID0gaWZpbmZvMS0mZ3Q7YmF0X3YudGhyb3VnaHB1dCAvIDQ7Ci0JdGhyZXNob2xkID0gaWZpbmZvMS0mZ3Q7YmF0X3YudGhyb3VnaHB1dCAtIHRocmVzaG9sZDsKJiM0MzsJdGhyZXNob2xkID0gaWZpbmZvX3JlZi0mZ3Q7YmF0X3YudGhyb3VnaHB1dCAvIDQ7CiYjNDM7CXRocmVzaG9sZCA9IGlmaW5mb19yZWYtJmd0O2JhdF92LnRocm91Z2hwdXQgLSB0aHJlc2hvbGQ7CiAKLQlyZXQgPSBpZmluZm8yLSZndDtiYXRfdi50aHJvdWdocHV0ICZndDsgdGhyZXNob2xkOwomIzQzOwlyZXQgPSBpZmluZm9fY2FuZC0mZ3Q7YmF0X3YudGhyb3VnaHB1dCAmZ3Q7IHRocmVzaG9sZDsKIAotCWJhdGFkdl9uZWlnaF9pZmluZm9fcHV0KGlmaW5mbzIpOwomIzQzOwliYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm9fcmVmKTsKIGVycl9pZmluZm8yOgotCWJhdGFkdl9uZWlnaF9pZmluZm9fcHV0KGlmaW5mbzEpOwomIzQzOwliYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm9fY2FuZCk7CiBlcnJfaWZpbmZvMToKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYwppbmRleCBmNjM1ZGE0YjhjYTY1Li5hZDZhYjRhNTA2NThmIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYwpAQCAtNjYzLDcgJiM0Mzs2NjMsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfcmVxdWVzdChzdHJ1Y3QgYmF0YWR2X2JsYV9iYWNrYm9uZV9ndyAqYmFja2JvbmVfZ3cpCiBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfYW5ub3VuY2Uoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkgICAgIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3ICpiYWNrYm9uZV9ndykKIHsKLQl1OCBtYWNbRVRIX0FMRU5dOwomIzQzOwl1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAlfX2JlMTYgY3JjOwogCiAJbWVtY3B5KG1hYywgYmF0YWR2X2Fubm91bmNlX21hYywgNCk7CkBAIC0xNTgyLDcgJiM0MzsxNTgyLDkgQEAgc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBiYXRhZHZfYmFja2JvbmVfaGFzaF9sb2NrX2NsYXNzX2tleTsKICAqLwogaW50IGJhdGFkdl9ibGFfaW5pdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KQogewotCXU4IGNsYWltX2Rlc3RbRVRIX0FMRU5dID0gezB4ZmYsIDB4NDMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDB9OwomIzQzOwlzdGF0aWMgY29uc3QgdTggY2xhaW1fZGVzdFtFVEhfQUxFTl0gX19hbGlnbmVkKDIpID0gewomIzQzOwkJMHhmZiwgMHg0MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMAomIzQzOwl9OwogCXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKIAl1bnNpZ25lZCBsb25nIGVudHJ5dGltZTsKIAl1MTYgY3JjOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYwppbmRleCAwMTFjZmRjNDdmYWI0Li5hNGJlNWIyYTg3ZDdhIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYwpAQCAtNTQ4LDcgJiM0Mzs1NDgsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfZGJnX2FycChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQliYXRhZHZfZGJnKEJBVEFEVl9EQkdfREFULCBiYXRfcHJpdiwgJiMzNDsqIHR5cGU6IFVua25vd24gKCV1KSFcbiYjMzQ7LAotCQkJCSAgIHVuaWNhc3RfNGFkZHJfcGFja2V0LSZndDt1LnBhY2tldF90eXBlKTsKJiM0MzsJCQkJICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtJmd0O3N1YnR5cGUpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQkFUQURWX0JDQVNUOgpAQCAtOTQwLDcgJiM0Mzs5NDAsNyBAQCBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwKIAkJCSAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAJCQkgICAgc3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSkKIHsKLQl1OCBtYWNbRVRIX0FMRU5dOwomIzQzOwl1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAl1NjQgdTY0X21hYzsKIAlpbnQgbXNlY3M7CiAJdm9pZCAqaGRyOwpAQCAtMTIzNiwxMCAmIzQzOzEyMzYsMTAgQEAgYm9vbCBiYXRhZHZfZGF0X3Nub29wX291dGdvaW5nX2FycF9yZXF1ZXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UgPSBiYXRfcHJpdi0mZ3Q7bWVzaF9pZmFjZTsKIAlzdHJ1Y3QgYmF0YWR2X2RhdF9lbnRyeSAqZGF0X2VudHJ5ID0gTlVMTDsKJiM0MzsJdTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9uZXc7CiAJdW5zaWduZWQgc2hvcnQgdmlkOwogCWJvb2wgcmV0ID0gZmFsc2U7Ci0JdTggbWFjW0VUSF9BTEVOXTsKIAlpbnQgaGRyX3NpemUgPSAwOwogCV9fYmUzMiBpcF9kc3Q7CiAJX19iZTMyIGlwX3NyYzsKQEAgLTEzNDQsMTAgJiM0MzsxMzQ0LDEwIEBAIGJvb2wgYmF0YWR2X2RhdF9zbm9vcF9pbmNvbWluZ19hcnBfcmVxdWVzdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX3NpemUpCiB7CiAJc3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSA9IE5VTEw7CiYjNDM7CXU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCXN0cnVjdCBza19idWZmICpza2JfbmV3OwogCXVuc2lnbmVkIHNob3J0IHZpZDsKIAlib29sIHJldCA9IGZhbHNlOwotCXU4IG1hY1tFVEhfQUxFTl07CiAJX19iZTMyIGlwX3NyYzsKIAlfX2JlMzIgaXBfZHN0OwogCXU2NCB1NjRfbWFjOwpAQCAtMTQ3NCw5ICYjNDM7MTQ3NCw5IEBAIGJvb2wgYmF0YWR2X2RhdF9zbm9vcF9pbmNvbWluZ19hcnBfcmVwbHkoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfc2l6ZSkKIHsKIAlzdHJ1Y3QgYmF0YWR2X2RhdF9lbnRyeSAqZGF0X2VudHJ5ID0gTlVMTDsKJiM0MzsJdTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAJYm9vbCBkcm9wcGVkID0gZmFsc2U7CiAJdW5zaWduZWQgc2hvcnQgdmlkOwotCXU4IG1hY1tFVEhfQUxFTl07CiAJX19iZTMyIGlwX3NyYzsKIAlfX2JlMzIgaXBfZHN0OwogCXU2NCB1NjRfbWFjOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMKaW5kZXggZTIwMjA4OGNmMWZkNC4uNjNhZjIxOTU0Y2Y5MCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCkBAIC0xNDEsOSAmIzQzOzE0MSw5IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYmF0YWR2X2ludGVyZmFjZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogc3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwl1OCBvbGRfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCXN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKLQl1OCBvbGRfYWRkcltFVEhfQUxFTl07CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0mZ3Q7c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKQEAgLTIxMywxMyAmIzQzOzIxMywxOCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfaW50ZXJmYWNlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSkKIHsKLQlzdGF0aWMgY29uc3QgdTggZWN0cF9hZGRyW0VUSF9BTEVOXSA9IHsweENGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKLQlzdGF0aWMgY29uc3QgdTggc3RwX2FkZHJbRVRIX0FMRU5dID0gezB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDB9OwogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTsKIAllbnVtIGJhdGFkdl9kaGNwX3JlY2lwaWVudCBkaGNwX3JjcCA9IEJBVEFEVl9ESENQX05POwogCWVudW0gYmF0YWR2X2ZvcndfbW9kZSBmb3J3X21vZGUgPSBCQVRBRFZfRk9SV19CQ0FTVDsKJiM0MzsJc3RhdGljIGNvbnN0IHU4IGVjdHBfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpID0gewomIzQzOwkJMHhDRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAomIzQzOwl9OwomIzQzOwlzdGF0aWMgY29uc3QgdTggc3RwX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKSA9IHsKJiM0MzsJCTB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDAKJiM0MzsJfTsKIAlzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMOwogCXN0cnVjdCBiYXRhZHZfYmNhc3RfcGFja2V0ICpiY2FzdF9wYWNrZXQ7CiYjNDM7CXU4IGNoYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCWludCBuZXR3b3JrX29mZnNldCA9IEVUSF9ITEVOOwogCXVuc2lnbmVkIGludCBoZWFkZXJfbGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGJyZF9kZWxheSA9IDA7CkBAIC0yMjksNyAmIzQzOzIzNCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBiYXRhZHZfaW50ZXJmYWNlX3R4KHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCWJvb2wgZG9fYmNhc3QgPSBmYWxzZTsKIAl1OCAqZHN0X2hpbnQgPSBOVUxMOwotCXU4IGNoYWRkcltFVEhfQUxFTl07CiAJdW5zaWduZWQgc2hvcnQgdmlkOwogCWJvb2wgY2xpZW50X2FkZGVkOwogCV9fYmUxNiBwcm90bzsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jIGIvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMKaW5kZXggODJmZDUyN2I2MWMwMi4uMjJkZDI4ZDVlMWFiYyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMKQEAgLTM2OCw5ICYjNDM7MzY4LDkgQEAgYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGhsaXN0X2hlYWQgKm1jYXN0X2xpc3QsCiAJCQkJIHN0cnVjdCBiYXRhZHZfbWNhc3RfbWxhX2ZsYWdzICpmbGFncykKIHsKJiM0MzsJdTggbWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCXN0cnVjdCBiYXRhZHZfaHdfYWRkciAqbmV3OwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQl1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXTsKIAlzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jOwogCWludCByZXQgPSAwOwogCkBAIC00MzUsOSAmIzQzOzQzNSw5IEBAIGJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBobGlzdF9oZWFkICptY2FzdF9saXN0LAogCQkJCSBzdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyAqZmxhZ3MpCiB7CiYjNDM7CXU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAlzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgKm5ldzsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2OwotCXU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dOwogCXN0cnVjdCBpZm1jYWRkcjYgKnBtYzY7CiAJaW50IHJldCA9IDA7CiAKQEAgLTU4NywxMCAmIzQzOzU4NywxMCBAQCBzdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9tbGFfYnJpZGdlX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICBzdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyAqZmxhZ3MpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCBicmlkZ2VfbWNhc3RfbGlzdCA9IExJU1RfSEVBRF9JTklUKGJyaWRnZV9tY2FzdF9saXN0KTsKJiM0MzsJdTggbWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCXU4IHR2bHZfZmxhZ3MgPSBmbGFncy0mZ3Q7dHZsdl9mbGFnczsKIAlzdHJ1Y3QgYnJfaXBfbGlzdCAqYnJfaXBfZW50cnk7CiAJc3RydWN0IGJhdGFkdl9od19hZGRyICpuZXc7Ci0JdTggbWNhc3RfYWRkcltFVEhfQUxFTl07CiAJc3RydWN0IGJyX2lwX2xpc3QgKnRtcDsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jIGIvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYwppbmRleCA2OGY3OTg1MzAzMmVkLi40NGE4Y2Y4OTM4MmM2IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKQEAgLTEzLDYgJiM0MzsxMyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnVpbGRfYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYWNoZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcmMzMi5oJmd0OwpAQCAtOTUsNiAmIzQzOzk2LDI2IEBAIHN0YXRpYyBib29sIGJhdGFkdl9jb21wYXJlX3R0KGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCBjb25zdCB2b2lkICpkYXRhMikKIAlyZXR1cm4gKHR0MS0mZ3Q7dmlkID09IHR0Mi0mZ3Q7dmlkKSAmYW1wOyZhbXA7IGJhdGFkdl9jb21wYXJlX2V0aChkYXRhMSwgZGF0YTIpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYmF0YWR2X2NvbXBhcmVfdHRfZW50cnkoKSAtIGNoZWNrIGlmIGEgaGFzaCBub2RlIGlzIGEgc3BlY2lmaWMgVFQgZW50cnkKJiM0MzsgKiBAbm9kZTogdGhlIGxpc3QgZWxlbWVudCBwb2ludGVyIG9mIHRoZSBUVCBlbnRyeSBzdG9yZWQgaW4gdGhlIGJ1Y2tldAomIzQzOyAqIEBkYXRhMjogcG9pbnRlciB0byB0aGUgdHRfY29tbW9uX2VudHJ5IHdoaWNoIGlzIGxvb2tlZCBmb3IKJiM0MzsgKgomIzQzOyAqIFVubGlrZSBiYXRhZHZfY29tcGFyZV90dCgpLCB0aGlzIG9ubHkgbWF0Y2hlcyB0aGUgdmVyeSBvYmplY3Qgd2hpY2ggaXMKJiM0MzsgKiBwYXNzZWQgYXMgQGRhdGEyIGFuZCBub3QganVzdCBhbnkgZW50cnkgZm9yIHRoZSBzYW1lIFRUIGNsaWVudC4gSXQgaXMgbWVhbnQKJiM0MzsgKiBmb3IgYmF0YWR2X2hhc2hfcmVtb3ZlKCkgY2FsbGVycyB3aGljaCBtdXN0IG5vdCB1bmxpbmsgYW4gZW50cnkgdGhleSBkaWQgbm90CiYjNDM7ICogbG9vayB1cCB0aGVtc2VsdmVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBub2RlIGJlbG9uZ3MgdG8gQGRhdGEyLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBiYXRhZHZfY29tcGFyZV90dF9lbnRyeShjb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEyKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0ID0gZGF0YTI7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlID09ICZhbXA7dHQtJmd0O2hhc2hfZW50cnk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBiYXRhZHZfY2hvb3NlX3R0KCkgLSByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSB0dCBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZQogICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHR0X2NvbW1vbl9lbnRyeSBvYmplY3QgdG8gbWFwCkBAIC0zMTIsNiAmIzQzOzMzMywxMCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9tb2Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKICAqICBnaXZlbiB2aWQKICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvbgogICogQHZpZDogdGhlIFZMQU4gaWRlbnRpZmllcgomIzQzOyAqCiYjNDM7ICogSXQgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHJlbW92aW5nIHRoZSBORVcgZmxhZyBvZiBhCiYjNDM7ICogYmF0YWR2X3R0X2xvY2FsX2VudHJ5IHdoaWxlIGl0IGlzIHN0aWxsIHBhcnQgb2YgdGhlIGJhdF9wcml2LSZndDt0dC5sb2NhbF9oYXNoLgomIzQzOyAqIEl0IG11c3QgdGhlcmVmb3JlIGJlIGNoZWNrZWQgdW5kZXIgdGhlIHNwZWNpZmljIGxpc3RfbG9ja3NbaV0uCiAgKi8KIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9zaXplX2luYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgdmlkKQpAQCAtMzI0LDYgJiM0MzszNDksMTEgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfaW5jKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAgKiAgZ2l2ZW4gdmlkCiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KICAqIEB2aWQ6IHRoZSBWTEFOIGlkZW50aWZpZXIKJiM0MzsgKgomIzQzOyAqIEl0IG11c3Qgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBiYXRhZHZfdHRfbG9jYWxfZW50cnkgd2l0aG91dCBORVcgZmxhZwomIzQzOyAqIHdhcyByZW1vdmVkIGZyb20gYmF0X3ByaXYtJmd0O3R0LmxvY2FsX2hhc2ggKHVuZGVyIHRoZSBzcGVjaWZpYwomIzQzOyAqIGxpc3RfbG9ja3NbaV0pIG9yIHdoZW4gaXQgaXMgZW5zdXJlZCB0aGF0IGl0IGlzIG5vdCBhY2Nlc3NpYmxlCiYjNDM7ICogaW4gdGhpcyBsaXN0LgogICovCiBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9kZWMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHZpZCkKQEAgLTQxMyw2ICYjNDM7NDQzLDIyIEBAIGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnlfcHV0KHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpvcmlnX2VudHJ5KQogCWtyZWZfcHV0KCZhbXA7b3JpZ19lbnRyeS0mZ3Q7cmVmY291bnQsIGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnlfcmVsZWFzZSk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBiYXRhZHZfdHRfZmxhZ3NfZ2V0KCkgLSBnZXQgYSBzbmFwc2hvdCBvZiB0aGUgZmxhZ3Mgb2YgYSBUVCBlbnRyeQomIzQzOyAqIEBjb21tb246IHR0IGxvY2FsICZhbXA7IHR0IGdsb2JhbCBjb21tb24gZGF0YQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0aGUgZmxhZ3Mgb2YgdGhlIFRUIGVudHJ5IGFzIG9ic2VydmVkIHVuZGVyIGl0cyBmbGFnc19sb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MTYgYmF0YWR2X3R0X2ZsYWdzX2dldChzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uKQomIzQzO3sKJiM0MzsJdTE2IGZsYWdzOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsICZhbXA7Y29tbW9uLSZndDtmbGFnc19sb2NrKQomIzQzOwkJZmxhZ3MgPSBjb21tb24tJmd0O2ZsYWdzOwomIzQzOwomIzQzOwlyZXR1cm4gZmxhZ3M7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBiYXRhZHZfdHRfbG9jYWxfZXZlbnQoKSAtIHN0b3JlIGEgbG9jYWwgVFQgZXZlbnQgKEFERC9ERUwpCiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KQEAgLTQyNSwyMyAmIzQzOzQ3MSwyNSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZXZlbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIHsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uID0gJmFtcDt0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uOwogCXN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKnR0X2NoYW5nZV9ub2RlOwotCXU4IGZsYWdzID0gY29tbW9uLSZndDtmbGFncyB8IGV2ZW50X2ZsYWdzOwogCXN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKmVudHJ5OwogCXN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKnNhZmU7CiAJYm9vbCBkZWxfb3BfcmVxdWVzdGVkOwogCWJvb2wgZGVsX29wX2VudHJ5OwogCXNpemVfdCBjaGFuZ2VzOwomIzQzOwl1OCBmbGFnczsKIAogCXR0X2NoYW5nZV9ub2RlID0ga21lbV9jYWNoZV9hbGxvYyhiYXRhZHZfdHRfY2hhbmdlX2NhY2hlLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXR0X2NoYW5nZV9ub2RlKQogCQlyZXR1cm47CiAKLQl0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLmZsYWdzID0gZmxhZ3M7CiAJbWVtc2V0KHR0X2NoYW5nZV9ub2RlLSZndDtjaGFuZ2UucmVzZXJ2ZWQsIDAsCiAJICAgICAgIHNpemVvZih0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLnJlc2VydmVkKSk7CiAJZXRoZXJfYWRkcl9jb3B5KHR0X2NoYW5nZV9ub2RlLSZndDtjaGFuZ2UuYWRkciwgY29tbW9uLSZndDthZGRyKTsKIAl0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLnZpZCA9IGh0b25zKGNvbW1vbi0mZ3Q7dmlkKTsKIAomIzQzOwlmbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoY29tbW9uKSB8IGV2ZW50X2ZsYWdzOwomIzQzOwomIzQzOwl0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLmZsYWdzID0gZmxhZ3M7CiAJZGVsX29wX3JlcXVlc3RlZCA9IGZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfREVMOwogCiAJLyogY2hlY2sgZm9yIEFERCYjNDM7REVMLCBERUwmIzQzO0FERCwgQUREJiM0MztBREQgb3IgREVMJiM0MztERUwgZXZlbnRzICovCkBAIC01NzUsNyAmIzQzOzYyMyw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkJCSAgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbCwKIAkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7Ci0Jc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X3JlbW92ZWRfZW50cnk7CiAJc3RydWN0IGhsaXN0X25vZGUgKnR0X3JlbW92ZWRfbm9kZTsKIAogCWJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsCkBAIC01ODMsMTggJiM0Mzs2MzAsNjcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCSAgIHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmFkZHIsCiAJCSAgIGJhdGFkdl9wcmludF92aWQodHRfZ2xvYmFsLSZndDtjb21tb24udmlkKSwgbWVzc2FnZSk7CiAKJiM0MzsJLyogcmVtb3ZlIGV4YWN0bHkgdGhpcyBvYmplY3Qgd2hlbiBzdGlsbCBwcmVzZW50IGluIGhhc2ggKi8KIAl0dF9yZW1vdmVkX25vZGUgPSBiYXRhZHZfaGFzaF9yZW1vdmUoYmF0X3ByaXYtJmd0O3R0Lmdsb2JhbF9oYXNoLAotCQkJCQkgICAgIGJhdGFkdl9jb21wYXJlX3R0LAomIzQzOwkJCQkJICAgICBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSwKIAkJCQkJICAgICBiYXRhZHZfY2hvb3NlX3R0LAogCQkJCQkgICAgICZhbXA7dHRfZ2xvYmFsLSZndDtjb21tb24pOwogCWlmICghdHRfcmVtb3ZlZF9ub2RlKQogCQlyZXR1cm47CiAKIAkvKiBkcm9wIHJlZmVyZW5jZSBvZiByZW1vdmUgaGFzaCBlbnRyeSAqLwotCXR0X3JlbW92ZWRfZW50cnkgPSBobGlzdF9lbnRyeSh0dF9yZW1vdmVkX25vZGUsCi0JCQkJICAgICAgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5LAotCQkJCSAgICAgICBjb21tb24uaGFzaF9lbnRyeSk7Ci0JYmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfcmVtb3ZlZF9lbnRyeSk7CiYjNDM7CWJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJhdGFkdl90dF9sb2NhbF9hZGRfcm9hbSgpIC0gaGFuZGxlIHJvYW1lZCBjbGllbnRzIGR1cmluZyBiYXRhZHZfdHRfbG9jYWxfYWRkKCkKJiM0MzsgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KJiM0MzsgKiBAdHRfZ2xvYmFsOiB0aGUgZ2xvYmFsIFRUIGVudHJ5CiYjNDM7ICogQHJvYW1lZF9iYWNrOiB3aGV0aGVyIEB0dF9nbG9iYWwgcm9hbWVkIGJhY2sKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfYWRkX3JvYW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsLAomIzQzOwkJCQkgICAgIGJvb2wgcm9hbWVkX2JhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqb3JpZ19lbnRyeTsKJiM0MzsJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiYjNDM7CiYjNDM7CWlmICghdHRfZ2xvYmFsKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgcm9hbWluZywgYnV0IGRvbiYjMzk7dCBkbyBhbnl0aGluZyBpZiB0aGUgcm9hbWluZwomIzQzOwkgKiBwcm9jZXNzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZAomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCAmYW1wO3R0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzX2xvY2spIHsKJiM0MzsJCWlmICh0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJaWYgKCFyb2FtZWRfYmFjaykgewomIzQzOwkJCS8qIFRoZSBnbG9iYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBST0FNSU5HIGFuZCBoYXMgdG8gYmUKJiM0MzsJCQkgKiBrZXB0IGZvciBjb25zaXN0ZW5jeSBwdXJwb3NlLgomIzQzOwkJCSAqCiYjNDM7CQkJICogYmF0YWR2X3R0X2dsb2JhbF90b19wdXJnZSgpIGV2YWx1YXRlcyByb2FtX2F0IGFzIHNvb24gYXMgaXQKJiM0MzsJCQkgKiBvYnNlcnZlcyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0sIHNvIHRoZSB0aW1lb3V0IGhhcyB0byBiZQomIzQzOwkJCSAqIHN0YW1wZWQgYmVmb3JlIHRoZSBmbGFnIGlzIHB1Ymxpc2hlZC4gT3RoZXJ3aXNlIHRoZSBlbnRyeSBjYW4KJiM0MzsJCQkgKiBiZSBkZWxldGVkIHJpZ2h0IGF3YXkgYXMgJiMzNDtSb2FtaW5nIHRpbWVvdXQmIzM0Oy4KJiM0MzsJCQkgKi8KJiM0MzsJCQl0dF9nbG9iYWwtJmd0O3JvYW1fYXQgPSBqaWZmaWVzOwomIzQzOwkJCXR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUk9BTTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGVzZSBub2RlIGFyZSBwcm9iYWJseSBnb2luZyB0byB1cGRhdGUgdGhlaXIgdHQgdGFibGUgKi8KJiM0MzsJaGVhZCA9ICZhbXA7dHRfZ2xvYmFsLSZndDtvcmlnX2xpc3Q7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9yaWdfZW50cnksIGhlYWQsIGxpc3QpIHsKJiM0MzsJCWJhdGFkdl9zZW5kX3JvYW1fYWR2KGJhdF9wcml2LCB0dF9nbG9iYWwtJmd0O2NvbW1vbi5hZGRyLAomIzQzOwkJCQkgICAgIHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLnZpZCwKJiM0MzsJCQkJICAgICBvcmlnX2VudHJ5LSZndDtvcmlnX25vZGUpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocm9hbWVkX2JhY2spCiYjNDM7CQliYXRhZHZfdHRfZ2xvYmFsX2ZyZWUoYmF0X3ByaXYsIHR0X2dsb2JhbCwgJiMzNDtSb2FtaW5nIGNhbmNlbGVkJiMzNDspOwogfQogCiAvKioKQEAgLTYxNSwyMCAmIzQzOzcxMSwxOSBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLAogewogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsID0gTlVMTDsKLQlzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqb3JpZ19lbnRyeTsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KG1lc2hfaWZhY2UpOwogCXN0cnVjdCBuZXRfZGV2aWNlICppbl9kZXYgPSBOVUxMOwogCXN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47CiAJYm9vbCByb2FtZWRfYmFjayA9IGZhbHNlOwogCWJvb2wgaWlmX2lzX3dpZmkgPSBmYWxzZTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlpbnQgcGFja2V0X3NpemVfbWF4OwogCWJvb2wgcmV0ID0gZmFsc2U7CiAJdTggcmVtb3RlX2ZsYWdzOwogCWludCBoYXNoX2FkZGVkOwogCWludCB0YWJsZV9zaXplOwogCXUzMiBtYXRjaF9tYXJrOwomIzQzOwlib29sIG1vZGlmaWVkOwogCiAJaWYgKGlmaW5kZXggIT0gQkFUQURWX05VTExfSUZJTkRFWCkKIAkJaW5fZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpOwpAQCAtNjQ2LDYgJiM0Mzs3NDEsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLAogCiAJaWYgKHR0X2xvY2FsKSB7CiAJCXR0X2xvY2FsLSZndDtsYXN0X3NlZW4gPSBqaWZmaWVzOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5mbGFnc19sb2NrKTsKIAkJaWYgKHR0X2xvY2FsLSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB7CiAJCQliYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LAogCQkJCSAgICYjMzQ7UmUtYWRkaW5nIHBlbmRpbmcgY2xpZW50ICVwTSAodmlkOiAlZClcbiYjMzQ7LApAQCAtNjU2LDYgJiM0Mzs3NTMsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLAogCQkJICogZmxhZyBjYW4gYmUgcmVzZXQgbGlrZSBpdCB3YXMgbmV2ZXIgZW5xdWV1ZWQKIAkJCSAqLwogCQkJdHRfbG9jYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOz0gfkJBVEFEVl9UVF9DTElFTlRfUEVORElORzsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiYjNDM7CiAJCQlnb3RvIGFkZF9ldmVudDsKIAkJfQogCkBAIC02NzEsNiAmIzQzOzc3MCw4IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsCiAJCQl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNOwogCQkJcm9hbWVkX2JhY2sgPSB0cnVlOwogCQl9CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiYjNDM7CiAJCWdvdG8gY2hlY2tfcm9hbWluZzsKIAl9CiAKQEAgLTcwNiwxOCAmIzQzOzgwNywyMSBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLAogCQkgICAodTgpYXRvbWljX3JlYWQoJmFtcDtiYXRfcHJpdi0mZ3Q7dHQudm4pKTsKIAogCWV0aGVyX2FkZHJfY29weSh0dF9sb2NhbC0mZ3Q7Y29tbW9uLmFkZHIsIGFkZHIpOwomIzQzOwl0dF9sb2NhbC0mZ3Q7Y29tbW9uLnZpZCA9IHZpZDsKJiM0MzsJa3JlZl9pbml0KCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5yZWZjb3VudCk7CiYjNDM7CXR0X2xvY2FsLSZndDtsYXN0X3NlZW4gPSBqaWZmaWVzOwomIzQzOwl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmFkZGVkX2F0ID0gdHRfbG9jYWwtJmd0O2xhc3Rfc2VlbjsKJiM0MzsJdHRfbG9jYWwtJmd0O3ZsYW4gPSB2bGFuOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiAJLyogVGhlIGxvY2FsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgTkVXIHRvIGF2b2lkIHRvIHNlbmQgaXQgaW4KIAkgKiBhIGZ1bGwgdGFibGUgcmVzcG9uc2UgZ29pbmcgb3V0IGJlZm9yZSB0aGUgbmV4dCB0dHZuIGluY3JlbWVudAogCSAqIChjb25zaXN0ZW5jeSBjaGVjaykKIAkgKi8KIAl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ORVc7Ci0JdHRfbG9jYWwtJmd0O2NvbW1vbi52aWQgPSB2aWQ7CiAJaWYgKGlpZl9pc193aWZpKQogCQl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfV0lGSTsKLQlrcmVmX2luaXQoJmFtcDt0dF9sb2NhbC0mZ3Q7Y29tbW9uLnJlZmNvdW50KTsKLQl0dF9sb2NhbC0mZ3Q7bGFzdF9zZWVuID0gamlmZmllczsKLQl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmFkZGVkX2F0ID0gdHRfbG9jYWwtJmd0O2xhc3Rfc2VlbjsKLQl0dF9sb2NhbC0mZ3Q7dmxhbiA9IHZsYW47CiAKIAkvKiB0aGUgYmF0bWFuIGludGVyZmFjZSBtYWMgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMgc2hvdWxkIG5ldmVyIGJlCiAJICogcHVyZ2VkCkBAIC03MjUsNiAmIzQzOzgyOSw3IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsCiAJaWYgKGJhdGFkdl9jb21wYXJlX2V0aChhZGRyLCBtZXNoX2lmYWNlLSZndDtkZXZfYWRkcikgfHwKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoYWRkcikpCiAJCXR0X2xvY2FsLSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiAKIAlrcmVmX2dldCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24ucmVmY291bnQpOwogCWhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoYmF0X3ByaXYtJmd0O3R0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LApAQCAtNzQxLDMxICYjNDM7ODQ2LDkgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkciwKIAliYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpOwogCiBjaGVja19yb2FtaW5nOgotCS8qIENoZWNrIHdoZXRoZXIgaXQgaXMgYSByb2FtaW5nLCBidXQgZG9uJiMzOTt0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nCi0JICogcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQKLQkgKi8KLQlpZiAodHRfZ2xvYmFsICZhbXA7JmFtcDsgISh0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKSB7Ci0JCS8qIFRoZXNlIG5vZGUgYXJlIHByb2JhYmx5IGdvaW5nIHRvIHVwZGF0ZSB0aGVpciB0dCB0YWJsZSAqLwotCQloZWFkID0gJmFtcDt0dF9nbG9iYWwtJmd0O29yaWdfbGlzdDsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uob3JpZ19lbnRyeSwgaGVhZCwgbGlzdCkgewotCQkJYmF0YWR2X3NlbmRfcm9hbV9hZHYoYmF0X3ByaXYsIHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmFkZHIsCi0JCQkJCSAgICAgdHRfZ2xvYmFsLSZndDtjb21tb24udmlkLAotCQkJCQkgICAgIG9yaWdfZW50cnktJmd0O29yaWdfbm9kZSk7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWlmIChyb2FtZWRfYmFjaykgewotCQkJYmF0YWR2X3R0X2dsb2JhbF9mcmVlKGJhdF9wcml2LCB0dF9nbG9iYWwsCi0JCQkJCSAgICAgICYjMzQ7Um9hbWluZyBjYW5jZWxlZCYjMzQ7KTsKLQkJfSBlbHNlIHsKLQkJCS8qIFRoZSBnbG9iYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBST0FNSU5HIGFuZAotCQkJICogaGFzIHRvIGJlIGtlcHQgZm9yIGNvbnNpc3RlbmN5IHB1cnBvc2UKLQkJCSAqLwotCQkJdHRfZ2xvYmFsLSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNOwotCQkJdHRfZ2xvYmFsLSZndDtyb2FtX2F0ID0gamlmZmllczsKLQkJfQotCX0KJiM0MzsJYmF0YWR2X3R0X2xvY2FsX2FkZF9yb2FtKGJhdF9wcml2LCB0dF9nbG9iYWwsIHJvYW1lZF9iYWNrKTsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzX2xvY2spOwogCS8qIHN0b3JlIHRoZSBjdXJyZW50IHJlbW90ZSBmbGFncyBiZWZvcmUgYWx0ZXJpbmcgdGhlbS4gVGhpcyBoZWxwcwogCSAqIHVuZGVyc3RhbmRpbmcgaXMgZmxhZ3MgYXJlIGNoYW5naW5nIG9yIG5vdAogCSAqLwpAQCAtNzg3LDEwICYjNDM7ODcwLDEzIEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsCiAJZWxzZQogCQl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7PSB+QkFUQURWX1RUX0NMSUVOVF9JU09MQTsKIAomIzQzOwltb2RpZmllZCA9IHJlbW90ZV9mbGFncyBeICh0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9SRU1PVEVfTUFTSyk7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5mbGFnc19sb2NrKTsKJiM0MzsKIAkvKiBpZiBhbnkgJiMzNDtkeW5hbWljJiMzNDsgZmxhZyBoYXMgYmVlbiBtb2RpZmllZCwgcmVzZW5kIGFuIEFERCBldmVudCBmb3IgdGhpcwogCSAqIGVudHJ5IHNvIHRoYXQgYWxsIHRoZSBub2RlcyBjYW4gZ2V0IHRoZSBuZXcgZmxhZ3MKIAkgKi8KLQlpZiAocmVtb3RlX2ZsYWdzIF4gKHR0X2xvY2FsLSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX1JFTU9URV9NQVNLKSkKJiM0MzsJaWYgKG1vZGlmaWVkKQogCQliYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpOwogCiAJcmV0ID0gdHJ1ZTsKQEAgLTExMTUsNiAmIzQzOzEyMDEsNyBAQCBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLAogCXN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47CiAJdW5zaWduZWQgaW50IGxhc3Rfc2Vlbl9tc2VjczsKIAl2b2lkICpoZHI7CiYjNDM7CXUxNiBmbGFnczsKIAl1MzIgY3JjOwogCiAJbG9jYWwgPSBjb250YWluZXJfb2YoY29tbW9uLCBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LCBjb21tb24pOwpAQCAtMTEzNiwxMyAmIzQzOzEyMjMsMTUgQEAgYmF0YWR2X3R0X2xvY2FsX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwKIAogCWdlbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBoZHIpOwogCiYjNDM7CWZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pOwomIzQzOwogCWlmIChubGFfcHV0KG1zZywgQkFUQURWX0FUVFJfVFRfQUREUkVTUywgRVRIX0FMRU4sIGNvbW1vbi0mZ3Q7YWRkcikgfHwKIAkgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9UVF9DUkMzMiwgY3JjKSB8fAogCSAgICBubGFfcHV0X3UxNihtc2csIEJBVEFEVl9BVFRSX1RUX1ZJRCwgY29tbW9uLSZndDt2aWQpIHx8Ci0JICAgIG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfVFRfRkxBR1MsIGNvbW1vbi0mZ3Q7ZmxhZ3MpKQomIzQzOwkgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9UVF9GTEFHUywgZmxhZ3MpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCWlmICghKGNvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKSAmYW1wOyZhbXA7CiYjNDM7CWlmICghKGZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTk9QVVJHRSkgJmFtcDsmYW1wOwogCSAgICBubGFfcHV0X3UzMihtc2csIEJBVEFEVl9BVFRSX0xBU1RfU0VFTl9NU0VDUywgbGFzdF9zZWVuX21zZWNzKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKQEAgLTEyNDksMjkgJiM0MzsxMzM4LDIzIEBAIGludCBiYXRhZHZfdHRfbG9jYWxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB9CiAKIC8qKgotICogYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nKCkgLSBtYXJrIGEgbG9jYWwgVFQgZW50cnkgYXMgcGVuZGluZyByZW1vdmFsCiYjNDM7ICogYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nX2V2ZW50KCkgLSB0cmlnZ2VyIGV2ZW50cyBmb3IgVFQgcGVuZGluZyByZW1vdmFsCiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KICAqIEB0dF9sb2NhbF9lbnRyeTogbG9jYWwgVFQgZW50cnkgdG8gbWFyawogICogQGZsYWdzOiBUVCBjaGFuZ2UgZmxhZ3MgdG8gYW5ub3VuY2UgdG9nZXRoZXIgd2l0aCB0aGUgcGVuZGluZyByZW1vdmFsCiAgKiBAbWVzc2FnZTogZGVidWcgbWVzc2FnZSBkZXNjcmliaW5nIHRoZSByZWFzb24gZm9yIHRoZSBjaGFuZ2UKICAqCi0gKiBTY2hlZHVsZSB0aGUgVFQgY2hhbmdlIGFubm91bmNlbWVudCBhbmQgc2V0IEJBVEFEVl9UVF9DTElFTlRfUEVORElORyBvbiB0aGUKLSAqIGVudHJ5LiBUaGUgZW50cnkgaXMga2VwdCBpbiB0aGUgbG9jYWwgdGFibGUgdW50aWwgdGhlIG5leHQgVFRWTiBpbmNyZW1lbnQKLSAqIHNvIHRoYXQgYSBjb25zaXN0ZW5jeS1jaGVjayByZXNwb25zZSBjYW4gc3RpbGwgYmUgYW5zd2VyZWQuCiYjNDM7ICogU2NoZWR1bGUgdGhlIFRUIGNoYW5nZSBhbm5vdW5jZW1lbnQgZm9yIHRoZSBlbnRyeS4gVGhlIGVudHJ5IGlzIGtlcHQgaW4gdGhlCiYjNDM7ICogbG9jYWwgdGFibGUgdW50aWwgdGhlIG5leHQgVFRWTiBpbmNyZW1lbnQgc28gdGhhdCBhIGNvbnNpc3RlbmN5LWNoZWNrCiYjNDM7ICogcmVzcG9uc2UgY2FuIHN0aWxsIGJlIGFuc3dlcmVkLgogICovCiBzdGF0aWMgdm9pZAotYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCi0JCQkgICAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnksCi0JCQkgICAgdTE2IGZsYWdzLCBjb25zdCBjaGFyICptZXNzYWdlKQomIzQzO2JhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAomIzQzOwkJCQkgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LAomIzQzOwkJCQkgIHUxNiBmbGFncywgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKIAliYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncyk7CiAKLQkvKiBUaGUgbG9jYWwgY2xpZW50IGhhcyB0byBiZSBtYXJrZWQgYXMgJiMzNDtwZW5kaW5nIHRvIGJlIHJlbW92ZWQmIzM0OyBidXQgaGFzCi0JICogdG8gYmUga2VwdCBpbiB0aGUgdGFibGUgaW4gb3JkZXIgdG8gc2VuZCBpdCBpbiBhIGZ1bGwgdGFibGUKLQkgKiByZXNwb25zZSBpc3N1ZWQgYmVmb3JlIHRoZSBuZXQgdHR2biBpbmNyZW1lbnQgKGNvbnNpc3RlbmN5IGNoZWNrKQotCSAqLwotCXR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HOwotCiAJYmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdiwKIAkJICAgJiMzNDtMb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKSBwZW5kaW5nIHRvIGJlIHJlbW92ZWQ6ICVzXG4mIzM0OywKIAkJICAgdHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5hZGRyLApAQCAtMTI5MiwxNiAmIzQzOzEzNzUsMTcgQEAgdTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsCiAJCQkgICB1bnNpZ25lZCBzaG9ydCB2aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsCiAJCQkgICBib29sIHJvYW1pbmcpCiB7Ci0Jc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfcmVtb3ZlZF9lbnRyeTsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdHRfcmVtb3ZlZF9ub2RlOwogCXUxNiBjdXJyX2ZsYWdzID0gQkFUQURWX05PX0ZMQUdTOwomIzQzOwlib29sIHBlbmRpbmcgPSBmYWxzZTsKIAl1MTYgZmxhZ3M7CiAKIAl0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7CiAJaWYgKCF0dF9sb2NhbF9lbnRyeSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFnc19sb2NrKTsKIAljdXJyX2ZsYWdzID0gdHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFnczsKIAogCWZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ERUw7CkBAIC0xMzE2LDI3ICYjNDM7MTQwMCwzOSBAQCB1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkciwKIAl9CiAKIAlpZiAoISh0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTkVXKSkgewotCQliYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncywKLQkJCQkJICAgIG1lc3NhZ2UpOwomIzQzOwkJdHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7CiYjNDM7CQlwZW5kaW5nID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3R0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChwZW5kaW5nKSB7CiYjNDM7CQliYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmdfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncywKJiM0MzsJCQkJCQkgIG1lc3NhZ2UpOwogCQlnb3RvIG91dDsKIAl9CiYjNDM7CiAJLyogaWYgdGhpcyBjbGllbnQgaGFzIGJlZW4gYWRkZWQgcmlnaHQgbm93LCBpdCBpcyBwb3NzaWJsZSB0bwogCSAqIGltbWVkaWF0ZWx5IHB1cmdlIGl0CiAJICovCiAJYmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwgQkFUQURWX1RUX0NMSUVOVF9ERUwpOwogCiYjNDM7CS8qIHJlbW92ZSBleGFjdGx5IHRoaXMgb2JqZWN0IHdoZW4gc3RpbGwgcHJlc2VudCBpbiBoYXNoICovCiAJdHRfcmVtb3ZlZF9ub2RlID0gYmF0YWR2X2hhc2hfcmVtb3ZlKGJhdF9wcml2LSZndDt0dC5sb2NhbF9oYXNoLAotCQkJCQkgICAgIGJhdGFkdl9jb21wYXJlX3R0LAomIzQzOwkJCQkJICAgICBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSwKIAkJCQkJICAgICBiYXRhZHZfY2hvb3NlX3R0LAogCQkJCQkgICAgICZhbXA7dHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbik7CiAJaWYgKCF0dF9yZW1vdmVkX25vZGUpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qIGJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldygpIG1heSBoYXZlIGNvbW1pdHRlZCB0aGUgZW50cnkgYW5kCiYjNDM7CSAqIHRodXMgY291bnRlZCBpdCBpbiB0aGUgbG9jYWwgdGFibGUgc2l6ZSBzaW5jZSB0aGUgQkFUQURWX1RUX0NMSUVOVF9ORVcKJiM0MzsJICogY2hlY2sgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIShiYXRhZHZfdHRfZmxhZ3NfZ2V0KCZhbXA7dHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbikgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpKQomIzQzOwkJYmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uLnZpZCk7CiYjNDM7CiAJLyogZHJvcCByZWZlcmVuY2Ugb2YgcmVtb3ZlIGhhc2ggZW50cnkgKi8KLQl0dF9yZW1vdmVkX2VudHJ5ID0gaGxpc3RfZW50cnkodHRfcmVtb3ZlZF9ub2RlLAotCQkJCSAgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LAotCQkJCSAgICAgICBjb21tb24uaGFzaF9lbnRyeSk7Ci0JYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9yZW1vdmVkX2VudHJ5KTsKJiM0MzsJYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7CiAKIG91dDoKIAliYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTsKQEAgLTEzNjEsMjEgJiM0MzsxNDU3LDM3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9saXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHR0X2NvbW1vbl9lbnRyeSwgbm9kZV90bXAsIGhlYWQsCiAJCQkJICBoYXNoX2VudHJ5KSB7CiYjNDM7CQlib29sIGNvbnQgPSBmYWxzZTsKJiM0MzsKIAkJdHRfbG9jYWxfZW50cnkgPSBjb250YWluZXJfb2YodHRfY29tbW9uX2VudHJ5LAogCQkJCQkgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LAogCQkJCQkgICAgICBjb21tb24pOwotCQlpZiAodHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0UpCi0JCQljb250aW51ZTsKIAotCQkvKiBlbnRyeSBhbHJlYWR5IG1hcmtlZCBmb3IgZGVsZXRpb24gKi8KLQkJaWYgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKQotCQkJY29udGludWU7CiYjNDM7CQlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsICZhbXA7dHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFnc19sb2NrKSB7CiYjNDM7CQkJaWYgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKSB7CiYjNDM7CQkJCWNvbnQgPSB0cnVlOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJLyogZW50cnkgYWxyZWFkeSBtYXJrZWQgZm9yIGRlbGV0aW9uICovCiYjNDM7CQkJaWYgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB7CiYjNDM7CQkJCWNvbnQgPSB0cnVlOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKCFiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9sb2NhbF9lbnRyeS0mZ3Q7bGFzdF9zZWVuLCB0aW1lb3V0KSkgewomIzQzOwkJCQljb250ID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HOwomIzQzOwkJfQogCi0JCWlmICghYmF0YWR2X2hhc190aW1lZF9vdXQodHRfbG9jYWxfZW50cnktJmd0O2xhc3Rfc2VlbiwgdGltZW91dCkpCiYjNDM7CQlpZiAoY29udCkKIAkJCWNvbnRpbnVlOwogCi0JCWJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZyhiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksCi0JCQkJCSAgICBCQVRBRFZfVFRfQ0xJRU5UX0RFTCwgJiMzNDt0aW1lZCBvdXQmIzM0Oyk7CiYjNDM7CQliYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmdfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LAomIzQzOwkJCQkJCSAgQkFUQURWX1RUX0NMSUVOVF9ERUwsICYjMzQ7dGltZWQgb3V0JiMzNDspOwogCX0KIH0KIApAQCAtMTU4MSw4ICYjNDM7MTY5MywxMCBAQCBiYXRhZHZfdHRfZ2xvYmFsX3N5bmNfZmxhZ3Moc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbCkKIAkJZmxhZ3MgfD0gb3JpZ19lbnRyeS0mZ3Q7ZmxhZ3M7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlmbGFncyB8PSB0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyAofkJBVEFEVl9UVF9TWU5DX01BU0spOwotCXR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzID0gZmxhZ3M7CiYjNDM7CXNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgJmFtcDt0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFnc19sb2NrKSB7CiYjNDM7CQlmbGFncyB8PSB0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyAofkJBVEFEVl9UVF9TWU5DX01BU0spOwomIzQzOwkJdHRfZ2xvYmFsLSZndDtjb21tb24uZmxhZ3MgPSBmbGFnczsKJiM0MzsJfQogfQogCiAvKioKQEAgLTE2NjQsOCAmIzQzOzE3NzgsMTAgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAlzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uOwogCWJvb2wgcmV0ID0gZmFsc2U7CiYjNDM7CXUxNiBnbG9iYWxfZmxhZ3M7CiAJdTE2IGxvY2FsX2ZsYWdzOwogCWludCBoYXNoX2FkZGVkOwomIzQzOwlib29sIGRlbGV0ZTsKIAogCS8qIGlnbm9yZSBnbG9iYWwgZW50cmllcyBmcm9tIGJhY2tib25lIG5vZGVzICovCiAJaWYgKGJhdGFkdl9ibGFfaXNfYmFja2JvbmVfZ3dfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLSZndDtvcmlnLCB2aWQpKQpAQCAtMTY3OCw5ICYjNDM7MTc5NCwxMSBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCSAqIGZvciBhIHJvYW1pbmcgYWR2ZXJ0aXNlbWVudCBpbnN0ZWFkIG9mIG1hbnVhbGx5IG1lc3NpbmcgdXAgdGhlIGdsb2JhbAogCSAqIHRhYmxlCiAJICovCi0JaWYgKChmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApICZhbXA7JmFtcDsgdHRfbG9jYWxfZW50cnkgJmFtcDsmYW1wOwotCSAgICAhKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKChmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApICZhbXA7JmFtcDsgdHRfbG9jYWxfZW50cnkpIHsKJiM0MzsJCWxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCgmYW1wO3R0X2xvY2FsX2VudHJ5LSZndDtjb21tb24pOwomIzQzOwkJaWYgKCEobG9jYWxfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAlpZiAoIXR0X2dsb2JhbF9lbnRyeSkgewogCQl0dF9nbG9iYWxfZW50cnkgPSBrbWVtX2NhY2hlX3phbGxvYyhiYXRhZHZfdGdfY2FjaGUsCkBAIC0xNjkxLDkgJiM0MzsxODA5LDEzIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCWNvbW1vbiA9ICZhbXA7dHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb247CiAJCWV0aGVyX2FkZHJfY29weShjb21tb24tJmd0O2FkZHIsIHR0X2FkZHIpOwogCQljb21tb24tJmd0O3ZpZCA9IHZpZDsKJiM0MzsJCXNwaW5fbG9ja19pbml0KCZhbXA7Y29tbW9uLSZndDtmbGFnc19sb2NrKTsKIAotCQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbW1vbi0mZ3Q7YWRkcikpCiYjNDM7CQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbW1vbi0mZ3Q7YWRkcikpIHsKJiM0MzsJCQlzcGluX2xvY2tfYmgoJmFtcDtjb21tb24tJmd0O2ZsYWdzX2xvY2spOwogCQkJY29tbW9uLSZndDtmbGFncyA9IGZsYWdzICZhbXA7ICh+QkFUQURWX1RUX1NZTkNfTUFTSyk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjb21tb24tJmd0O2ZsYWdzX2xvY2spOwomIzQzOwkJfQogCiAJCXR0X2dsb2JhbF9lbnRyeS0mZ3Q7cm9hbV9hdCA9IDA7CiAJCS8qIG5vZGUgbXVzdCBzdG9yZSBjdXJyZW50IHRpbWUgaW4gY2FzZSBvZiByb2FtaW5nLiBUaGlzIGlzCkBAIC0xNzMzLDggJiM0MzsxODU1LDEwIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCSAqICAgIG9yaWdpbmF0b3IgbGlzdCBhbmQgYWRkIHRoZSBuZXcgb25lIG9yaWdfZW50cnkKIAkJICovCiAJCWlmIChmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApIHsKLQkJCWlmICghKGNvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9URU1QKSkKJiM0MzsJCQlnbG9iYWxfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KGNvbW1vbik7CiYjNDM7CQkJaWYgKCEoZ2xvYmFsX2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkpCiAJCQkJZ290byBvdXQ7CiYjNDM7CiAJCQlpZiAoYmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9oYXNfb3JpZyh0dF9nbG9iYWxfZW50cnksCiAJCQkJCQkJICAgIG9yaWdfbm9kZSwgTlVMTCkpCiAJCQkJZ290byBvdXRfcmVtb3ZlOwpAQCAtMTc0Miw2ICYjNDM7MTg2Niw5IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCQlnb3RvIGFkZF9vcmlnX2VudHJ5OwogCQl9CiAKJiM0MzsJCWRlbGV0ZSA9IGZhbHNlOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7Y29tbW9uLSZndDtmbGFnc19sb2NrKTsKIAkJLyogaWYgdGhlIGNsaWVudCB3YXMgdGVtcG9yYXJ5IGFkZGVkIGJlZm9yZSByZWNlaXZpbmcgdGhlIGZpcnN0CiAJCSAqIE9HTSBhbm5vdW5jaW5nIGl0LCB3ZSBoYXZlIHRvIGNsZWFyIHRoZSBURU1QIGZsYWcuIEFsc28sCiAJCSAqIHJlbW92ZSB0aGUgcHJldmlvdXMgdGVtcG9yYXJ5IG9yaWcgbm9kZSBhbmQgcmUtYWRkIGl0CkBAIC0xNzQ5LDcgJiM0MzsxODc2LDcgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJICogaXMgYSBub24tdGVtcG9yYXJ5IGVudHJ5IGlzIHByZWZlcnJlZC4KIAkJICovCiAJCWlmIChjb21tb24tJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgewotCQkJYmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7CiYjNDM7CQkJZGVsZXRlID0gdHJ1ZTsKIAkJCWNvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CQVRBRFZfVFRfQ0xJRU5UX1RFTVA7CiAJCX0KIApAQCAtMTc2OCwxMCAmIzQzOzE4OTUsMTQgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJICogbmV3IG9uZS4KIAkJICovCiAJCWlmIChjb21tb24tJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkgewotCQkJYmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7Ci0JCQljb21tb24tJmd0O2ZsYWdzICZhbXA7PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNOwomIzQzOwkJCWRlbGV0ZSA9IHRydWU7CiAJCQl0dF9nbG9iYWxfZW50cnktJmd0O3JvYW1fYXQgPSAwOwomIzQzOwkJCWNvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CQVRBRFZfVFRfQ0xJRU5UX1JPQU07CiAJCX0KJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y29tbW9uLSZndDtmbGFnc19sb2NrKTsKJiM0MzsKJiM0MzsJCWlmIChkZWxldGUpCiYjNDM7CQkJYmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7CiAJfQogYWRkX29yaWdfZW50cnk6CiAJLyogYWRkIHRoZSBuZXcgb3JpZ19lbnRyeSAoaWYgbmVlZGVkKSBvciB1cGRhdGUgaXQgKi8KQEAgLTE3OTUsNiAmIzQzOzE5MjYsOCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCWxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgdHRfYWRkciwgdmlkLAogCQkJCQkgICAgICYjMzQ7Z2xvYmFsIHR0IHJlY2VpdmVkJiMzNDssCiAJCQkJCSAgICAgZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiAJdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gbG9jYWxfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9XSUZJOwogCiAJaWYgKCEoZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSkKQEAgLTE4MDIsNiAmIzQzOzE5MzUsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkgKiByb2FtaW5nIHN0YXRlIGFueW1vcmUuCiAJCSAqLwogCQl0dF9nbG9iYWxfZW50cnktJmd0O2NvbW1vbi5mbGFncyAmYW1wOz0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0dF9nbG9iYWxfZW50cnktJmd0O2NvbW1vbi5mbGFnc19sb2NrKTsKIAogb3V0OgogCWJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbF9lbnRyeSk7CkBAIC0xODcxLDkgJiM0MzsyMDA1LDkgQEAgYmF0YWR2X3R0X2dsb2JhbF9kdW1wX3N1YmVudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsIHUzMiBzZXEsCiAJCQkgICAgICAgc3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWcsCiAJCQkgICAgICAgYm9vbCBiZXN0KQogewotCXUxNiBmbGFncyA9IChjb21tb24tJmd0O2ZsYWdzICZhbXA7ICh+QkFUQURWX1RUX1NZTkNfTUFTSykpIHwgb3JpZy0mZ3Q7ZmxhZ3M7CiAJc3RydWN0IGJhdGFkdl9vcmlnX25vZGVfdmxhbiAqdmxhbjsKIAl1OCBsYXN0X3R0dm47CiYjNDM7CXUxNiBmbGFnczsKIAl2b2lkICpoZHI7CiAJdTMyIGNyYzsKIApAQCAtMTg5Miw2ICYjNDM7MjAyNiw3IEBAIGJhdGFkdl90dF9nbG9iYWxfZHVtcF9zdWJlbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgc2VxLAogCWlmICghaGRyKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKJiM0MzsJZmxhZ3MgPSAoYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pICZhbXA7ICh+QkFUQURWX1RUX1NZTkNfTUFTSykpIHwgb3JpZy0mZ3Q7ZmxhZ3M7CiAJbGFzdF90dHZuID0gUkVBRF9PTkNFKG9yaWctJmd0O29yaWdfbm9kZS0mZ3Q7bGFzdF90dHZuKTsKIAogCWlmIChubGFfcHV0KG1zZywgQkFUQURWX0FUVFJfVFRfQUREUkVTUywgRVRIX0FMRU4sIGNvbW1vbi0mZ3Q7YWRkcikgfHwKQEAgLTIxNzksOSAmIzQzOzIzMTQsMTIgQEAgYmF0YWR2X3R0X2dsb2JhbF9kZWxfcm9hbWluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGxhc3RfZW50cnkpIHsKLQkJLyogaXRzIHRoZSBsYXN0IG9uZSwgbWFyayBmb3Igcm9hbWluZy4gKi8KLQkJdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNOwotCQl0dF9nbG9iYWxfZW50cnktJmd0O3JvYW1fYXQgPSBqaWZmaWVzOwomIzQzOwkJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCAmYW1wO3R0X2dsb2JhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzX2xvY2spIHsKJiM0MzsJCQkvKiBpdHMgdGhlIGxhc3Qgb25lLCBtYXJrIGZvciByb2FtaW5nLiAqLwomIzQzOwkJCXR0X2dsb2JhbF9lbnRyeS0mZ3Q7cm9hbV9hdCA9IGppZmZpZXM7CiYjNDM7CiYjNDM7CQkJdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNOwomIzQzOwkJfQogCX0gZWxzZSB7CiAJCS8qIHRoZXJlIGlzIGFub3RoZXIgZW50cnksIHdlIGNhbiBzaW1wbHkgZGVsZXRlIHRoaXMKIAkJICogb25lIGFuZCBjYW4gc3RpbGwgdXNlIHRoZSBvdGhlciBvbmUuCkBAIC0yMzMwLDE2ICYjNDM7MjQ2OCwxOCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX3RvX3B1cmdlKHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwsCiAJdW5zaWduZWQgbG9uZyB0ZW1wX3RpbWVvdXQgPSBCQVRBRFZfVFRfQ0xJRU5UX1RFTVBfVElNRU9VVDsKIAlib29sIHB1cmdlID0gZmFsc2U7CiAKLQlpZiAoKHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkgJmFtcDsmYW1wOwotCSAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtJmd0O3JvYW1fYXQsIHJvYW1fdGltZW91dCkpIHsKLQkJcHVyZ2UgPSB0cnVlOwotCQkqbXNnID0gJiMzNDtSb2FtaW5nIHRpbWVvdXRcbiYjMzQ7OwotCX0KJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCAmYW1wO3R0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzX2xvY2spIHsKJiM0MzsJCWlmICgodHRfZ2xvYmFsLSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYmF0YWR2X2hhc190aW1lZF9vdXQodHRfZ2xvYmFsLSZndDtyb2FtX2F0LCByb2FtX3RpbWVvdXQpKSB7CiYjNDM7CQkJcHVyZ2UgPSB0cnVlOwomIzQzOwkJCSptc2cgPSAmIzM0O1JvYW1pbmcgdGltZW91dFxuJiMzNDs7CiYjNDM7CQl9CiAKLQlpZiAoKHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgJmFtcDsmYW1wOwotCSAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtJmd0O2NvbW1vbi5hZGRlZF9hdCwgdGVtcF90aW1lb3V0KSkgewotCQlwdXJnZSA9IHRydWU7Ci0JCSptc2cgPSAmIzM0O1RlbXBvcmFyeSBjbGllbnQgdGltZW91dFxuJiMzNDs7CiYjNDM7CQlpZiAoKHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGJhdGFkdl9oYXNfdGltZWRfb3V0KHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmFkZGVkX2F0LCB0ZW1wX3RpbWVvdXQpKSB7CiYjNDM7CQkJcHVyZ2UgPSB0cnVlOwomIzQzOwkJCSptc2cgPSAmIzM0O1RlbXBvcmFyeSBjbGllbnQgdGltZW91dFxuJiMzNDs7CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIHB1cmdlOwpAQCAtMjQzNyw4ICYjNDM7MjU3Nyw4IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfdGFibGVfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KQogLyoqCiAgKiBfYmF0YWR2X2lzX2FwX2lzb2xhdGVkKCkgLSBjaGVjayB3aGV0aGVyIHR3byBjbGllbnRzIGFyZSBBUC1pc29sYXRlZCBmcm9tCiAgKiAgZWFjaCBvdGhlcgotICogQHR0X2xvY2FsX2VudHJ5OiBsb2NhbCBUVCBlbnRyeSBvZiB0aGUgc2VuZGluZyBjbGllbnQKLSAqIEB0dF9nbG9iYWxfZW50cnk6IGdsb2JhbCBUVCBlbnRyeSBvZiB0aGUgZGVzdGluYXRpb24gY2xpZW50CiYjNDM7ICogQHR0X2xvY2FsX2VudHJ5OiBsb2NhbCBUVCBlbnRyeSBvZiBvbmUgbG9jYWwgY2xpZW50CiYjNDM7ICogQHR0X2dsb2JhbF9lbnRyeTogZ2xvYmFsIFRUIGVudHJ5IG9mIHRoZSByZW1vdGUgY2xpZW50CiAgKgogICogUmV0dXJuOiB0cnVlIGlmIHRyYWZmaWMgYmV0d2VlbiB0aGUgdHdvIGNsaWVudHMgc2hvdWxkIGJlIGRyb3BwZWQgYmVjYXVzZQogICogIGVpdGhlciBib3RoIGFyZSBXaUZpIGNsaWVudHMgb3IgYm90aCBjYXJyeSB0aGUgSVNPTEFUSU9OIGZsYWc7IGZhbHNlCkBAIC0yNDQ4LDEzICYjNDM7MjU4OCwxOSBAQCBzdGF0aWMgYm9vbAogX2JhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSwKIAkJICAgICAgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnkpCiB7Ci0JaWYgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9XSUZJICZhbXA7JmFtcDsKLQkgICAgdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9XSUZJKQomIzQzOwl1MTYgZ2xvYmFsX2ZsYWdzOwomIzQzOwl1MTYgbG9jYWxfZmxhZ3M7CiYjNDM7CiYjNDM7CWdsb2JhbF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoJmFtcDt0dF9nbG9iYWxfZW50cnktJmd0O2NvbW1vbik7CiYjNDM7CWxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCgmYW1wO3R0X2xvY2FsX2VudHJ5LSZndDtjb21tb24pOwomIzQzOwomIzQzOwlpZiAobG9jYWxfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9XSUZJICZhbXA7JmFtcDsKJiM0MzsJICAgIGdsb2JhbF9mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkpCiAJCXJldHVybiB0cnVlOwogCiAJLyogY2hlY2sgaWYgdGhlIHR3byBjbGllbnRzIGFyZSBtYXJrZWQgYXMgaXNvbGF0ZWQgKi8KLQlpZiAodHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX0lTT0xBICZhbXA7JmFtcDsKLQkgICAgdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9JU09MQSkKJiM0MzsJaWYgKGxvY2FsX2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEgJmFtcDsmYW1wOwomIzQzOwkgICAgZ2xvYmFsX2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEpCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjQ4MywxMSAmIzQzOzI2MjksMTUgQEAgc3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKmJhdGFkdl90cmFuc3RhYmxlX3NlYXJjaChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCXN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqYmVzdF9lbnRyeTsKIAlzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDsKJiM0MzsJdTE2IGZsYWdzOwogCiAJaWYgKHNyYyAmYW1wOyZhbXA7IGJhdGFkdl92bGFuX2FwX2lzb2xhX2dldChiYXRfcHJpdiwgdmlkKSkgewogCQl0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIHNyYywgdmlkKTsKLQkJaWYgKCF0dF9sb2NhbF9lbnRyeSB8fAotCQkgICAgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSkKJiM0MzsJCWlmICghdHRfbG9jYWxfZW50cnkpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlmbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoJmFtcDt0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uKTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI1NjIsNiAmIzQzOzI3MTIsOCBAQCBzdGF0aWMgdTMyIGJhdGFkdl90dF9nbG9iYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfY29tbW9uLCBoZWFkLCBoYXNoX2VudHJ5KSB7CiYjNDM7CQkJdTE2IHR0X2ZsYWdzOwomIzQzOwogCQkJdHRfZ2xvYmFsID0gY29udGFpbmVyX29mKHR0X2NvbW1vbiwKIAkJCQkJCSBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSwKIAkJCQkJCSBjb21tb24pOwpAQCAtMjU3MSwxOCAmIzQzOzI3MjMsMjEgQEAgc3RhdGljIHUzMiBiYXRhZHZfdHRfZ2xvYmFsX2NyYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkJaWYgKHR0X2NvbW1vbi0mZ3Q7dmlkICE9IHZpZCkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCXR0X2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCh0dF9jb21tb24pOwomIzQzOwogCQkJLyogUm9hbWluZyBjbGllbnRzIGFyZSBpbiB0aGUgZ2xvYmFsIHRhYmxlIGZvcgogCQkJICogY29uc2lzdGVuY3kgb25seS4gVGhleSBkb24mIzM5O3QgaGF2ZSB0byBiZQogCQkJICogdGFrZW4gaW50byBhY2NvdW50IHdoaWxlIGNvbXB1dGluZyB0aGUKIAkJCSAqIGdsb2JhbCBjcmMKIAkJCSAqLwotCQkJaWYgKHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKQomIzQzOwkJCWlmICh0dF9mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pCiAJCQkJY29udGludWU7CiYjNDM7CiAJCQkvKiBUZW1wb3JhcnkgY2xpZW50cyBoYXZlIG5vdCBiZWVuIGFubm91bmNlZCB5ZXQsIHNvCiAJCQkgKiB0aGV5IGhhdmUgdG8gYmUgc2tpcHBlZCB3aGlsZSBjb21wdXRpbmcgdGhlIGdsb2JhbAogCQkJICogY3JjCiAJCQkgKi8KLQkJCWlmICh0dF9jb21tb24tJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkKJiM0MzsJCQlpZiAodHRfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9URU1QKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiBmaW5kIG91dCBpZiB0aGlzIGdsb2JhbCBlbnRyeSBpcyBhbm5vdW5jZWQgYnkgdGhpcwpAQCAtMjY0MiwxOCAmIzQzOzI3OTcsMjQgQEAgc3RhdGljIHUzMiBiYXRhZHZfdHRfbG9jYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfY29tbW9uLCBoZWFkLCBoYXNoX2VudHJ5KSB7CiYjNDM7CQkJdTE2IHR0X2ZsYWdzOwomIzQzOwogCQkJLyogY29tcHV0ZSB0aGUgQ1JDIG9ubHkgZm9yIGVudHJpZXMgYmVsb25naW5nIHRvIHRoZQogCQkJICogVkxBTiBpZGVudGlmaWVkIGJ5IHZpZAogCQkJICovCiAJCQlpZiAodHRfY29tbW9uLSZndDt2aWQgIT0gdmlkKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJdHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbik7CiYjNDM7CiAJCQkvKiBub3QgeWV0IGNvbW1pdHRlZCBjbGllbnRzIGhhdmUgbm90IHRvIGJlIHRha2VuIGludG8KIAkJCSAqIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIHRoZSBDUkMKIAkJCSAqLwotCQkJaWYgKHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpCiYjNDM7CQkJaWYgKHR0X2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTkVXKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJZmxhZ3MgPSB0dF9mbGFncyAmYW1wOyBCQVRBRFZfVFRfU1lOQ19NQVNLOwomIzQzOwogCQkJLyogdXNlIG5ldHdvcmsgb3JkZXIgdG8gcmVhZCB0aGUgVklEOiB0aGlzIGVuc3VyZXMgdGhhdAogCQkJICogZXZlcnkgbm9kZSByZWFkcyB0aGUgYnl0ZXMgaW4gdGhlIHNhbWUgb3JkZXIuCiAJCQkgKi8KQEAgLTI2NjMsNyAmIzQzOzI4MjQsNiBAQCBzdGF0aWMgdTMyIGJhdGFkdl90dF9sb2NhbF9jcmMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCS8qIGNvbXB1dGUgdGhlIENSQyBvbiBmbGFncyB0aGF0IGhhdmUgdG8gYmUga2VwdCBpbiBzeW5jCiAJCQkgKiBhbW9uZyBub2RlcwogCQkJICovCi0JCQlmbGFncyA9IHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX1NZTkNfTUFTSzsKIAkJCWNyY190bXAgPSBjcmMzMmMoY3JjX3RtcCwgJmFtcDtmbGFncywgc2l6ZW9mKGZsYWdzKSk7CiAKIAkJCWNyYyBePSBjcmMzMmMoY3JjX3RtcCwgdHRfY29tbW9uLSZndDthZGRyLCBFVEhfQUxFTik7CkBAIC0yODIxLDE3ICYjNDM7Mjk4MSwxOSBAQCBiYXRhZHZfdHRfcmVxX25vZGVfbmV3KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAgKgogICogUmV0dXJuOiB0cnVlIGlmIHRoZSBlbnRyeSBpcyBhIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIGJhdGFkdl90dF9sb2NhbF92YWxpZChjb25zdCB2b2lkICplbnRyeV9wdHIsCiYjNDM7c3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKHZvaWQgKmVudHJ5X3B0ciwKIAkJCQkgIGNvbnN0IHZvaWQgKmRhdGFfcHRyLAogCQkJCSAgdTggKmZsYWdzKQogewotCWNvbnN0IHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnkgPSBlbnRyeV9wdHI7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnkgPSBlbnRyeV9wdHI7CiYjNDM7CXUxNiB0dF9mbGFnczsKIAotCWlmICh0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTkVXKQomIzQzOwl0dF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQodHRfY29tbW9uX2VudHJ5KTsKJiM0MzsJaWYgKHR0X2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTkVXKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoZmxhZ3MpCi0JCSpmbGFncyA9IHR0X2NvbW1vbl9lbnRyeS0mZ3Q7ZmxhZ3M7CiYjNDM7CQkqZmxhZ3MgPSB0dF9mbGFnczsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMjg0OCwxNiAmIzQzOzMwMTAsMTggQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKGNvbnN0IHZvaWQgKmVudHJ5X3B0ciwKICAqCiAgKiBSZXR1cm46IHRydWUgaWYgdGhlIGVudHJ5IGlzIGEgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF92YWxpZChjb25zdCB2b2lkICplbnRyeV9wdHIsCiYjNDM7c3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF92YWxpZCh2b2lkICplbnRyeV9wdHIsCiAJCQkJICAgY29uc3Qgdm9pZCAqZGF0YV9wdHIsCiAJCQkJICAgdTggKmZsYWdzKQogewotCWNvbnN0IHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnkgPSBlbnRyeV9wdHI7Ci0JY29uc3Qgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTsKJiM0MzsJc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeSA9IGVudHJ5X3B0cjsKIAljb25zdCBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gZGF0YV9wdHI7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7CiYjNDM7CXUxNiB0dF9mbGFnczsKIAotCWlmICh0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTSB8fAotCSAgICB0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkKJiM0MzsJdHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbl9lbnRyeSk7CiYjNDM7CWlmICh0dF9mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0gfHwKJiM0MzsJICAgIHR0X2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJdHRfZ2xvYmFsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSwKQEAgLTI4ODYsNyAmIzQzOzMwNTAsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX3ZhbGlkKGNvbnN0IHZvaWQgKmVudHJ5X3B0ciwKIHN0YXRpYyB1MTYgYmF0YWR2X3R0X3R2bHZfZ2VuZXJhdGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkgICBzdHJ1Y3QgYmF0YWR2X2hhc2h0YWJsZSAqaGFzaCwKIAkJCQkgICB2b2lkICp0dmx2X2J1ZmYsIHUxNiB0dF9sZW4sCi0JCQkJICAgYm9vbCAoKnZhbGlkX2NiKShjb25zdCB2b2lkICosCiYjNDM7CQkJCSAgIGJvb2wgKCp2YWxpZF9jYikodm9pZCAqLAogCQkJCQkJICAgIGNvbnN0IHZvaWQgKiwKIAkJCQkJCSAgICB1OCAqZmxhZ3MpLAogCQkJCSAgIHZvaWQgKmNiX2RhdGEpCkBAIC0zNTExLDE5ICYjNDM7MzY3NSwyMSBAQCBib29sIGJhdGFkdl9pc19teV9jbGllbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsCiAJCQkgdW5zaWduZWQgc2hvcnQgdmlkKQogewogCXN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5OwotCWJvb2wgcmV0ID0gZmFsc2U7CiYjNDM7CXUxNiB0dF9mbGFnczsKJiM0MzsJYm9vbCByZXQ7CiAKIAl0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7CiAJaWYgKCF0dF9sb2NhbF9lbnRyeSkKLQkJZ290byBvdXQ7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXR0X2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCgmYW1wO3R0X2xvY2FsX2VudHJ5LSZndDtjb21tb24pOwomIzQzOwogCS8qIENoZWNrIGlmIHRoZSBjbGllbnQgaGFzIGJlZW4gbG9naWNhbGx5IGRlbGV0ZWQgKGJ1dCBpcyBrZXB0IGZvcgogCSAqIGNvbnNpc3RlbmN5IHB1cnBvc2UpCiAJICovCi0JaWYgKCh0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykgfHwKLQkgICAgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gdHJ1ZTsKLW91dDoKJiM0MzsJcmV0ID0gISgodHRfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB8fAomIzQzOwkJKHR0X2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkpOwomIzQzOwogCWJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zNzgyLDE2ICYjNDM7Mzk0OCwxMyBAQCB2b2lkIGJhdGFkdl90dF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpCiB9CiAKIC8qKgotICogYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncygpIC0gc2V0IG9yIHVuc2V0IHRoZSBzcGVjaWZpZWQgZmxhZ3Mgb24gdGhlIGxvY2FsCi0gKiAgdGFibGUgYW5kIHBvc3NpYmx5IGNvdW50IHRoZW0gaW4gdGhlIFRUIHNpemUKJiM0MzsgKiBiYXRhZHZfdHRfbG9jYWxfdHJhbnNpdGlvbl9uZXcoKSAtIHVuc2V0IHRoZSBORVcgZmxhZyBvbiB0aGUgbG9jYWwKJiM0MzsgKiAgdGFibGUgYW5kIGNvdW50IHRoZW0gaW4gdGhlIFRUIHNpemUKICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvbgotICogQGZsYWdzOiB0aGUgZmxhZyB0byBzd2l0Y2gKLSAqIEBlbmFibGU6IHdoZXRoZXIgdG8gc2V0IG9yIHVuc2V0IHRoZSBmbGFnCi0gKiBAY291bnQ6IHdoZXRoZXIgdG8gaW5jcmVhc2UgdGhlIFRUIHNpemUgYnkgdGhlIG51bWJlciBvZiBjaGFuZ2VkIGVudHJpZXMKICAqLwotc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1MTYgZmxhZ3MsCi0JCQkJICAgICAgYm9vbCBlbmFibGUsIGJvb2wgY291bnQpCiYjNDM7c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3RyYW5zaXRpb25fbmV3KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpCiB7CiYjNDM7CXNwaW5sb2NrX3QgKmxpc3RfbG9jazsgLyogcHJvdGVjdHMgd3JpdGUgYWNjZXNzIHRvIHRoZSBoYXNoIGxpc3RzICovCiAJc3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmhhc2ggPSBiYXRfcHJpdi0mZ3Q7dHQubG9jYWxfaGFzaDsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5OwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwpAQCAtMzgwMiwyNyAmIzQzOzM5NjUsMjggQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1MTYgZmxhZ3MsCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgaGFzaC0mZ3Q7c2l6ZTsgaSYjNDM7JiM0MzspIHsKIAkJaGVhZCA9ICZhbXA7aGFzaC0mZ3Q7dGFibGVbaV07CiYjNDM7CQlsaXN0X2xvY2sgPSAmYW1wO2hhc2gtJmd0O2xpc3RfbG9ja3NbaV07CiAKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfY29tbW9uX2VudHJ5LAotCQkJCQkgaGVhZCwgaGFzaF9lbnRyeSkgewotCQkJaWYgKGVuYWJsZSkgewotCQkJCWlmICgodHRfY29tbW9uX2VudHJ5LSZndDtmbGFncyAmYW1wOyBmbGFncykgPT0gZmxhZ3MpCi0JCQkJCWNvbnRpbnVlOwotCQkJCXR0X2NvbW1vbl9lbnRyeS0mZ3Q7ZmxhZ3MgfD0gZmxhZ3M7Ci0JCQl9IGVsc2UgewotCQkJCWlmICghKHR0X2NvbW1vbl9lbnRyeS0mZ3Q7ZmxhZ3MgJmFtcDsgZmxhZ3MpKQotCQkJCQljb250aW51ZTsKLQkJCQl0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzICZhbXA7PSB+ZmxhZ3M7CiYjNDM7CQlzcGluX2xvY2tfYmgobGlzdF9sb2NrKTsKJiM0MzsJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHR0X2NvbW1vbl9lbnRyeSwgaGVhZCwgaGFzaF9lbnRyeSkgewomIzQzOwkJCWJvb2wgY29udCA9IGZhbHNlOwomIzQzOwomIzQzOwkJCXNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgJmFtcDt0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzX2xvY2spIHsKJiM0MzsJCQkJaWYgKCEodHRfY29tbW9uX2VudHJ5LSZndDtmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX05FVykpIHsKJiM0MzsJCQkJCWNvbnQgPSB0cnVlOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsKJiM0MzsJCQkJdHRfY29tbW9uX2VudHJ5LSZndDtmbGFncyAmYW1wOz0gfkJBVEFEVl9UVF9DTElFTlRfTkVXOwogCQkJfQogCi0JCQlpZiAoIWNvdW50KQomIzQzOwkJCWlmIChjb250KQogCQkJCWNvbnRpbnVlOwogCiAJCQliYXRhZHZfdHRfbG9jYWxfc2l6ZV9pbmMoYmF0X3ByaXYsCiAJCQkJCQkgdHRfY29tbW9uX2VudHJ5LSZndDt2aWQpOwogCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgobGlzdF9sb2NrKTsKIAl9CiB9CiAKQEAgLTM4NTQsMTYgJiM0Mzs0MDE4LDMxIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9wZW5kaW5nX2NsaWVudHMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdikKIAkJc3Bpbl9sb2NrX2JoKGxpc3RfbG9jayk7CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHRfY29tbW9uLCBub2RlX3RtcCwgaGVhZCwKIAkJCQkJICBoYXNoX2VudHJ5KSB7Ci0JCQlpZiAoISh0dF9jb21tb24tJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykpCi0JCQkJY29udGludWU7CiYjNDM7CQkJYm9vbCBjb250ID0gZmFsc2U7CiAKLQkJCWJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsCi0JCQkJICAgJiMzNDtEZWxldGluZyBsb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKTogcGVuZGluZ1xuJiMzNDssCi0JCQkJICAgdHRfY29tbW9uLSZndDthZGRyLAotCQkJCSAgIGJhdGFkdl9wcmludF92aWQodHRfY29tbW9uLSZndDt2aWQpKTsKJiM0MzsJCQlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsICZhbXA7dHRfY29tbW9uLSZndDtmbGFnc19sb2NrKSB7CiYjNDM7CQkJCWlmICghKHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSkgewomIzQzOwkJCQkJY29udCA9IHRydWU7CiYjNDM7CQkJCQlicmVhazsKJiM0MzsJCQkJfQomIzQzOwomIzQzOwkJCQliYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LAomIzQzOwkJCQkJICAgJiMzNDtEZWxldGluZyBsb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKTogcGVuZGluZ1xuJiMzNDssCiYjNDM7CQkJCQkgICB0dF9jb21tb24tJmd0O2FkZHIsCiYjNDM7CQkJCQkgICBiYXRhZHZfcHJpbnRfdmlkKHR0X2NvbW1vbi0mZ3Q7dmlkKSk7CiYjNDM7CiYjNDM7CQkJCWhsaXN0X2RlbF9yY3UoJmFtcDt0dF9jb21tb24tJmd0O2hhc2hfZW50cnkpOwomIzQzOwomIzQzOwkJCQkvKiBBbiBlbnRyeSB3aGljaCBzdGlsbCBjYXJyaWVzIEJBVEFEVl9UVF9DTElFTlRfTkVXIHdhcwomIzQzOwkJCQkgKiBuZXZlciBjb3VudGVkIGFuZCBtdXN0IG5vdCBiZSB1bmNvdW50ZWQgaGVyZS4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWlmICghKHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpKQomIzQzOwkJCQkJYmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9jb21tb24tJmd0O3ZpZCk7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWlmIChjb250KQomIzQzOwkJCQljb250aW51ZTsKIAotCQkJYmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9jb21tb24tJmd0O3ZpZCk7Ci0JCQlobGlzdF9kZWxfcmN1KCZhbXA7dHRfY29tbW9uLSZndDtoYXNoX2VudHJ5KTsKIAkJCXR0X2xvY2FsID0gY29udGFpbmVyX29mKHR0X2NvbW1vbiwKIAkJCQkJCXN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksCiAJCQkJCQljb21tb24pOwpAQCAtMzg5MSw3ICYjNDM7NDA3MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9jb21taXRfY2hhbmdlc19ub2xvY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdikKIAkJcmV0dXJuOwogCX0KIAotCWJhdGFkdl90dF9sb2NhbF9zZXRfZmxhZ3MoYmF0X3ByaXYsIEJBVEFEVl9UVF9DTElFTlRfTkVXLCBmYWxzZSwgdHJ1ZSk7CiYjNDM7CWJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldyhiYXRfcHJpdik7CiAKIAliYXRhZHZfdHRfbG9jYWxfcHVyZ2VfcGVuZGluZ19jbGllbnRzKGJhdF9wcml2KTsKIAliYXRhZHZfdHRfbG9jYWxfdXBkYXRlX2NyYyhiYXRfcHJpdik7CkBAIC00MDYxLDE1ICYjNDM7NDI0MCwxNiBAQCBib29sIGJhdGFkdl90dF9nbG9iYWxfY2xpZW50X2lzX3JvYW1pbmcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkJdTggKmFkZHIsIHVuc2lnbmVkIHNob3J0IHZpZCkKIHsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5OwotCWJvb2wgcmV0ID0gZmFsc2U7CiYjNDM7CWJvb2wgcmV0OwogCiAJdHRfZ2xvYmFsX2VudHJ5ID0gYmF0YWR2X3R0X2dsb2JhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7CiAJaWYgKCF0dF9nbG9iYWxfZW50cnkpCi0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXQgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KCZhbXA7dHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24pICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTTsKIAotCXJldCA9IHR0X2dsb2JhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTTsKIAliYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWxfZW50cnkpOwotb3V0OgomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQwODcsMTUgJiM0Mzs0MjY3LDE2IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCQkJICAgICAgIHU4ICphZGRyLCB1bnNpZ25lZCBzaG9ydCB2aWQpCiB7CiAJc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7Ci0JYm9vbCByZXQgPSBmYWxzZTsKJiM0MzsJYm9vbCByZXQ7CiAKIAl0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7CiAJaWYgKCF0dF9sb2NhbF9lbnRyeSkKLQkJZ290byBvdXQ7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldCA9IGJhdGFkdl90dF9mbGFnc19nZXQoJmFtcDt0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uKSAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07CiAKLQlyZXQgPSB0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTTsKIAliYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTsKLW91dDoKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00NDA0LDcgJiM0Mzs0NTg1LDcgQEAgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2lzX2lzb2xhdGVkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJaWYgKCF0dCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0ID0gdHQtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX0lTT0xBOwomIzQzOwlyZXQgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KCZhbXA7dHQtJmd0O2NvbW1vbikgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9JU09MQTsKIAogCWJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaCBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmgKaW5kZXggOWJkYzVhM2U3OTllMi4uNjc4NzI5MjdjZmI1MCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0cnVjdCBiYXRhZHZfb3JpZ19iYXRfaXYgewogICovCiBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSB7CiAJLyoqIEBvcmlnOiBvcmlnaW5hdG9yIGV0aGVybmV0IGFkZHJlc3MgKi8KLQl1OCBvcmlnW0VUSF9BTEVOXTsKJiM0MzsJdTggb3JpZ1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCiAJLyoqIEBpZmluZm9fbGlzdDogbGlzdCBmb3Igcm91dGVycyBwZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovCiAJc3RydWN0IGhsaXN0X2hlYWQgaWZpbmZvX2xpc3Q7CkBAIC02MzQsMTIgJiM0Mzs2MzQsMTIgQEAgc3RydWN0IGJhdGFkdl9oYXJkaWZfbmVpZ2hfbm9kZSB7CiAJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKIAogCS8qKiBAYWRkcjogdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBuZWlnaGJvcmluZyBpbnRlcmZhY2UgKi8KLQl1OCBhZGRyW0VUSF9BTEVOXTsKJiM0MzsJdTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCiAJLyoqCiAJICogQG9yaWc6IHRoZSBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hdG9yIHRoaXMgbmVpZ2hib3Igbm9kZSBiZWxvbmdzIHRvCiAJICovCi0JdTggb3JpZ1tFVEhfQUxFTl07CiYjNDM7CXU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAogCS8qKiBAaWZfaW5jb21pbmc6IHBvaW50ZXIgdG8gaW5jb21pbmcgaGFyZC1pbnRlcmZhY2UgKi8KIAlzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX2luY29taW5nOwpAQCAtNjc3LDcgJiM0Mzs2NzcsNyBAQCBzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgewogI2VuZGlmCiAKIAkvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbmVpZ2hib3JpbmcgaW50ZXJmYWNlICovCi0JdTggYWRkcltFVEhfQUxFTl07CiYjNDM7CXU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAogCS8qKiBAaWZpbmZvX2xpc3Q6IGxpc3QgZm9yIHJvdXRpbmcgbWV0cmljcyBwZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovCiAJc3RydWN0IGhsaXN0X2hlYWQgaWZpbmZvX2xpc3Q7CkBAIC03NzcsNyAmIzQzOzc3Nyw3IEBAIHN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvIHsKICAqLwogc3RydWN0IGJhdGFkdl9iY2FzdF9kdXBsaXN0X2VudHJ5IHsKIAkvKiogQG9yaWc6IG1hYyBhZGRyZXNzIG9mIG9yaWcgbm9kZSBvcmlnaW5hdGluZyB0aGUgYnJvYWRjYXN0ICovCi0JdTggb3JpZ1tFVEhfQUxFTl07CiYjNDM7CXU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAogCS8qKiBAY3JjOiBjcmMzMiBjaGVja3N1bSBvZiBicm9hZGNhc3QgcGF5bG9hZCAqLwogCXUzMiBjcmM7CkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RydWN0IGJhdGFkdl9wcml2X2JsYSB7CiAJc3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmJhY2tib25lX2hhc2g7CiAKIAkvKiogQGxvb3BkZXRlY3RfYWRkcjogTUFDIGFkZHJlc3MgdXNlZCBmb3Igb3duIGxvb3BkZXRlY3Rpb24gZnJhbWVzICovCi0JdTggbG9vcGRldGVjdF9hZGRyW0VUSF9BTEVOXTsKJiM0MzsJdTggbG9vcGRldGVjdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAKIAkvKioKIAkgKiBAbG9vcGRldGVjdF9sYXN0dGltZTogdGltZSB3aGVuIHRoZSBsb29wZGV0ZWN0aW9uIGZyYW1lcyB3ZXJlIHNlbnQKQEAgLTEzNTIsNyAmIzQzOzEzNTIsNyBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIHsKIAlzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2OwogCiAJLyoqIEBvdGhlcl9lbmQ6IG1hYyBhZGRyZXNzIG9mIHJlbW90ZSAqLwotCXU4IG90aGVyX2VuZFtFVEhfQUxFTl07CiYjNDM7CXU4IG90aGVyX2VuZFtFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCiAJLyoqIEBzZXNzaW9uOiBUUCBzZXNzaW9uIGlkZW50aWZpZXIgKi8KIAl1OCBzZXNzaW9uWzJdOwpAQCAtMTc2NSw3ICYjNDM7MTc2NSw3IEBAIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3IHsKIAkgKiBAb3JpZzogb3JpZ2luYXRvciBhZGRyZXNzIG9mIGJhY2tib25lIG5vZGUgKG1hYyBhZGRyZXNzIG9mIHByaW1hcnkKIAkgKiAgaWZhY2UpCiAJICovCi0JdTggb3JpZ1tFVEhfQUxFTl07CiYjNDM7CXU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAogCS8qKiBAdmlkOiB2bGFuIGlkIHRoaXMgZ2F0ZXdheSB3YXMgZGV0ZWN0ZWQgb24gKi8KIAl1bnNpZ25lZCBzaG9ydCB2aWQ7CkBAIC0xODEwLDcgJiM0MzsxODEwLDcgQEAgc3RydWN0IGJhdGFkdl9ibGFfYmFja2JvbmVfZ3cgewogICovCiBzdHJ1Y3QgYmF0YWR2X2JsYV9jbGFpbSB7CiAJLyoqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiBjbGFpbWVkIG5vbi1tZXNoIGNsaWVudCAqLwotCXU4IGFkZHJbRVRIX0FMRU5dOwomIzQzOwl1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAKIAkvKiogQHZpZDogdmxhbiBpZCB0aGlzIGNsaWVudCB3YXMgZGV0ZWN0ZWQgb24gKi8KIAl1bnNpZ25lZCBzaG9ydCB2aWQ7CkBAIC0xODQwLDcgJiM0MzsxODQwLDcgQEAgc3RydWN0IGJhdGFkdl9ibGFfY2xhaW0gewogICovCiBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSB7CiAJLyoqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiBub24tbWVzaCBjbGllbnQgKi8KLQl1OCBhZGRyW0VUSF9BTEVOXTsKJiM0MzsJdTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCiAJLyoqIEB2aWQ6IFZMQU4gaWRlbnRpZmllciAqLwogCXVuc2lnbmVkIHNob3J0IHZpZDsKQEAgLTE4NTEsMTIgJiM0MzsxODUxLDIxIEBAIHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5IHsKIAkgKi8KIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoX2VudHJ5OwogCi0JLyoqIEBmbGFnczogdmFyaW91cyBzdGF0ZSBoYW5kbGluZyBmbGFncyAoc2VlIGJhdGFkdl90dF9jbGllbnRfZmxhZ3MpICovCiYjNDM7CS8qKgomIzQzOwkgKiBAZmxhZ3M6IHZhcmlvdXMgc3RhdGUgaGFuZGxpbmcgZmxhZ3MgKHNlZSBiYXRhZHZfdHRfY2xpZW50X2ZsYWdzKSwKJiM0MzsJICogcHJvdGVjdGVkIGJ5IEBmbGFnc19sb2NrCiYjNDM7CSAqLwogCXUxNiBmbGFnczsKIAogCS8qKiBAYWRkZWRfYXQ6IHRpbWVzdGFtcCB1c2VkIGZvciBwdXJnaW5nIHN0YWxlIHR0IGNvbW1vbiBlbnRyaWVzICovCiAJdW5zaWduZWQgbG9uZyBhZGRlZF9hdDsKIAomIzQzOwkvKioKJiM0MzsJICogQGZsYWdzX2xvY2s6IHByb3RlY3QgbW9kaWZpY2F0aW9ucyBvZiBAZmxhZ3MgYW5kCiYjNDM7CSAqICBAYmF0YWR2X3R0X2dsb2JhbF9lbnRyeS5yb2FtX2F0CiYjNDM7CSAqLwomIzQzOwlzcGlubG9ja190IGZsYWdzX2xvY2s7CiYjNDM7CiAJLyoqIEByZWZjb3VudDogbnVtYmVyIG9mIGNvbnRleHRzIHRoZSBvYmplY3QgaXMgdXNlZCAqLwogCXN0cnVjdCBrcmVmIHJlZmNvdW50OwogCkBAIC0xOTQyLDcgJiM0MzsxOTUxLDcgQEAgc3RydWN0IGJhdGFkdl90dF9yZXFfbm9kZSB7CiAJLyoqCiAJICogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hdG9yIHRoaXMgcmVxdWVzdCB3YXMgc2VudCB0bwogCSAqLwotCXU4IGFkZHJbRVRIX0FMRU5dOwomIzQzOwl1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAKIAkvKiogQGlzc3VlZF9hdDogdGltZXN0YW1wIHVzZWQgZm9yIHB1cmdpbmcgc3RhbGUgdHQgcmVxdWVzdHMgKi8KIAl1bnNpZ25lZCBsb25nIGlzc3VlZF9hdDsKQEAgLTE5NTksNyAmIzQzOzE5NjgsNyBAQCBzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlIHsKICAqLwogc3RydWN0IGJhdGFkdl90dF9yb2FtX25vZGUgewogCS8qKiBAYWRkcjogbWFjIGFkZHJlc3Mgb2YgdGhlIGNsaWVudCBpbiB0aGUgcm9hbWluZyBwaGFzZSAqLwotCXU4IGFkZHJbRVRIX0FMRU5dOwomIzQzOwl1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAKIAkvKiogQHZpZDogVkxBTiBpZGVudGlmaWVyICovCiAJdTE2IHZpZDsKQEAgLTIwODcsMTQgJiM0MzsyMDk2LDE0IEBAIHN0cnVjdCBiYXRhZHZfYWxnb19uZWlnaF9vcHMgewogCQkgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMik7CiAKIAkvKioKLQkgKiBAaXNfc2ltaWxhcl9vcl9iZXR0ZXI6IGNoZWNrIGlmIG5laWdoMSBpcyBlcXVhbGx5IHNpbWlsYXIgb3IgYmV0dGVyCi0JICogIHRoYW4gbmVpZ2gyIGZvciB0aGVpciByZXNwZWN0aXZlIG91dGdvaW5nIGludGVyZmFjZSBmcm9tIHRoZSBtZXRyaWMKJiM0MzsJICogQGlzX3NpbWlsYXJfb3JfYmV0dGVyOiBjaGVjayBpZiBAY2FuZGlkYXRlIGlzIGVxdWFsbHkgc2ltaWxhciBvciBiZXR0ZXIKJiM0MzsJICogIHRoYW4gQHJlZmVyZW5jZSBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBvdXRnb2luZyBpbnRlcmZhY2UgZnJvbSB0aGUgbWV0cmljCiAJICogIHByb3NwZWN0aXZlCiAJICovCi0JYm9vbCAoKmlzX3NpbWlsYXJfb3JfYmV0dGVyKShzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSwKLQkJCQkgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcxLAotCQkJCSAgICAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDIsCi0JCQkJICAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMik7CiYjNDM7CWJvb2wgKCppc19zaW1pbGFyX29yX2JldHRlcikoc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsCiYjNDM7CQkJCSAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLAomIzQzOwkJCQkgICAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLAomIzQzOwkJCQkgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKTsKIAogCS8qKiBAZHVtcDogZHVtcCBuZWlnaGJvcnMgdG8gYSBuZXRsaW5rIHNvY2tldCAob3B0aW9uYWwpICovCiAJdm9pZCAoKmR1bXApKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKQEAgLTIyMDQsNyAmIzQzOzIyMTMsNyBAQCBzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgewogCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CiAKIAkvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGlzIGxpc3QgZW50cnkgKi8KLQl1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dOwomIzQzOwl1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIH07CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYyMwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDc5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExpbnV4IEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIExpbnV4IGtlcm5lbCBhbmQgZGV0ZXJtaW5lIGlmIGl0IGludHJvZHVjZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgd2FycmFudCBmdXp6aW5nLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBhY3R1YWxseSBiZWVuIG1vZGlmaWVkLiBMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY2hhbmdlZCBmaWxlcy4KCiogICBgbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jYDogTG9va3MgbGlrZSBhIHN0cmFpZ2h0Zm9yd2FyZCBwYXJhbWV0ZXIgcmVuYW1lIHdpdGhpbiB0aGUgYGJhdGFkdl9pdl9vZ21fbmVpZ2hfaXNfc29iYCBmdW5jdGlvbi4gTWlub3IsIHVubGlrZWx5IHRvIGJlIGZydWl0ZnVsIGZvciBmdXp6aW5nIG9uIGl0cyBvd24uCiogICBgbmV0L2JhdG1hbi1hZHYvYmF0X3YuY2A6IEFoLCBhIGJ1ZyBmaXghIFRoZSBgYmF0YWR2X3ZfbmVpZ2hfaXNfc29iYCBjYWxjdWxhdGlvbiBoYWQgYSBsb2dpYyBpbnZlcnNpb24gaXNzdWUg4oCTIHRoZSB0aHJlc2hvbGQgd2FzIGNvbXB1dGVkIHVzaW5nIG9uZSBuZWlnaGJvciYjMzk7cyB0aHJvdWdocHV0IGJ1dCBjb21wYXJlZCBhZ2FpbnN0IGFub3RoZXIuIEZpeGluZyB0aGlzIGlzIGltcG9ydGFudCwgb2YgY291cnNlLCBidXQgaXQmIzM5O3MgYSBzcGVjaWZpYyBjb3JyZWN0aW9uLiBTdGlsbCwgd29ydGggbm90aW5nIGFzIGEgcG90ZW50aWFsIGFyZWEgdG8gZXhhbWluZSB3aXRoIGZvY3VzZWQgZnV6emluZyBpZiB3ZSBrbm93IHRoZSB0aHJvdWdocHV0IGNhbGN1bGF0aW9uLgoqICAgYG5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jYCwgYG5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jYCwgYG5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNgLCBgbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmNgLCBhbmQgYG5ldC9iYXRtYW4tYWR2L3R5cGVzLmhgOiBUaGVzZSBhbGwgaW52b2x2ZSBgX19hbGlnbmVkKDIpYCBhbm5vdGF0aW9ucyBvbiBNQUMgYWRkcmVzc2VzIG9yIGFkZGl0aW9ucyBpbiBhIHN0cnVjdC4gVGhlc2UgYXJlIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBhbGlnbm1lbnQgZm9yIHBlcmZvcm1hbmNlIG9yIGhhcmR3YXJlIGNvbXBhdGliaWxpdHkuIFByb2JhYmx5IG5vdCBpbnRlcmVzdGluZyBmb3IgZnV6emluZyBpbiBpc29sYXRpb24sIGJ1dCBrZWVwIGl0IGluIG1pbmQgaWYgdGhleSBhcmUgcGFydCBvZiBhIGxhcmdlciBjaGFuZ2UuCiogICBgbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY2A6IE5vdyAqdGhpcyogaXMgaW50ZXJlc3RpbmcuIE1ham9yIGxvY2tpbmcgYW5kIHJhY2UgY29uZGl0aW9uIGZpeGVzISBBIG5ldyBgZmxhZ3NfbG9ja2Agc3BpbmxvY2sgaGFzIGJlZW4gYWRkZWQgdG8gYHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5YCwgYW5kIGEgYnVuY2ggb2YgbmV3IGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW50cm9kdWNlZCAoYGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5YCwgYGJhdGFkdl90dF9mbGFnc19nZXRgLCBldGMuKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gbnVtZXJvdXMgZXhpc3RpbmcgZnVuY3Rpb25zLiBUaGlzIGlzIGEgKnNpZ25pZmljYW50KiByZWZhY3RvciBwb3RlbnRpYWxseSB0b3VjaGluZyBtYW55IGFyZWFzIHdoZXJlIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCBzdGF0ZSBjaGFuZ2VzIGFyZSBvY2N1cnJpbmcuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5LXJlbGF0ZWQgYnVncyBhbmQgcmFjZSBjb25kaXRpb25zLCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc2VjdGlvbi4KCk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEJBVE1BTl9BRFYgYW5kIGFueSByZWxhdGVkIHNldHRpbmdzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgZW5hYmxlZCBieSB0aGVzZSBjb21wb25lbnRzLiBUaGUgZWFzaWVzdCB0aGluZyB0byBkbyB3aWxsIGJlIHRvIHVzZSBncmVwcGVyIG9yIHNpbXBseSByZWFkIEtjb25maWcuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIHBhdGNoZWQgY29tcG9uZW50cyBhcmUgY29udHJvbGxlZCBhbmQgd2hldGhlciB0aGVyZSBhcmUgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzIHRoYXQgY291bGQgZXhwYW5kIHRoZSBhdHRhY2sgc3VyZmFjZS4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIHRoZSBzY29wZSBhbmQgcmVsZXZhbmNlIG9mIHRoZXNlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7QkFUTUFOX0FEViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NzkgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctOS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MTA6Y29uZmlnIEJBVE1BTl9BRFZcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMTEtXHR0cmlzdGF0ZSBcJiMzNDtCLkEuVC5NLkEuTi4gQWR2YW5jZWQgTWVzaGluZyBQcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMTktXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjIwOmNvbmZpZyBCQVRNQU5fQURWX0JBVE1BTl9WXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTIxLVx0Ym9vbCBcJiMzNDtCLkEuVC5NLkEuTi4gViBwcm90b2NvbFwmIzM0O1xubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzoyMjpcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcdTAwMjZcdTAwMjYgIShDRkc4MDIxMT1tIFx1MDAyNlx1MDAyNiBCQVRNQU5fQURWPXkpXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTIzLVx0ZGVmYXVsdCB5XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zMy1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MzQ6Y29uZmlnIEJBVE1BTl9BRFZfQkxBXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVx0Ym9vbCBcJiMzNDtCcmlkZ2UgTG9vcCBBdm9pZGFuY2VcJiMzNDtcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MzY6XHRkZXBlbmRzIG9uIEJBVE1BTl9BRFYgXHUwMDI2XHUwMDI2IElORVRcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzctXHRzZWxlY3QgQ1JDMTZcbi0tXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTQ2LVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo0Nzpjb25maWcgQkFUTUFOX0FEVl9EQVRcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNDgtXHRib29sIFwmIzM0O0Rpc3RyaWJ1dGVkIEFSUCBUYWJsZVwmIzM0O1xubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo0OTpcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcdTAwMjZcdTAwMjYgSU5FVFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01MC1cdGRlZmF1bHQgeVxuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTYtXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjU3OmNvbmZpZyBCQVRNQU5fQURWX01DQVNUXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTU4LVx0Ym9vbCBcJiMzNDtNdWx0aWNhc3Qgb3B0aW1pc2F0aW9uXCYjMzQ7XG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjU5Olx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWIFx1MDAyNlx1MDAyNiBJTkVUIFx1MDAyNlx1MDAyNiAhKEJSSURHRT1tIFx1MDAyNlx1MDAyNiBCQVRNQU5fQURWPXkpXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTYwLVx0ZGVmYXVsdCB5XG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy02NS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NjY6Y29uZmlnIEJBVE1BTl9BRFZfREVCVUdcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjctXHRib29sIFwmIzM0O0IuQS5ULk0uQS5OLiBkZWJ1Z2dpbmdcJiMzNDtcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6Njg6XHRkZXBlbmRzIG9uIEJBVE1BTl9BRFZcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjktXHRoZWxwXG4tLVxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03NC1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NzU6Y29uZmlnIEJBVE1BTl9BRFZfVFJBQ0lOR1xubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03Ni1cdGJvb2wgXCYjMzQ7Qi5BLlQuTS5BLk4uIHRyYWNpbmcgc3VwcG9ydFwmIzM0O1xubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo3NzpcdGRlcGVuZHMgb24gQkFUTUFOX0FEVlxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03OC1cdGRlcGVuZHMgb24gRVZFTlRfVFJBQ0lOR1xuLS1cbm5ldC9iYXRtYW4tYWR2L0tjb25maWctODItXHQgIG1lc3NhZ2VzIHVzaW5nIHRoZSBnZW5lcmljIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgb2YgdGhlIGtlcm5lbC5cbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6ODM6XHQgIEJBVE1BTl9BRFZfREVCVUcgbXVzdCBhbHNvIGJlIHNlbGVjdGVkIHRvIGdldCB0cmFjZSBldmVudHMgZm9yXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTg0LVx0ICBiYXRhZHZfZGJnLlxuLS1cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlLTUtXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19CQVRNQU5fQURWKSAmIzQzOz0gYmF0bWFuLWFkdi5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZS03LWJhdG1hbi1hZHYteSAmIzQzOz0gYmF0X2FsZ28ub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9OD1iYXRtYW4tYWR2LXkgJiM0Mzs9IGJhdF9pdl9vZ20ub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6OTpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YpICYjNDM7PSBiYXRfdi5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxMDpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YpICYjNDM7PSBiYXRfdl9lbHAub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTE6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WKSAmIzQzOz0gYmF0X3Zfb2dtLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlLTEyLWJhdG1hbi1hZHYteSAmIzQzOz0gYml0YXJyYXkub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTM6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JMQSkgJiM0Mzs9IGJyaWRnZV9sb29wX2F2b2lkYW5jZS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxNDpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfREFUKSAmIzQzOz0gZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlLTE1LWJhdG1hbi1hZHYteSAmIzQzOz0gZnJhZ21lbnRhdGlvbi5vXG4tLVxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9MTk9YmF0bWFuLWFkdi15ICYjNDM7PSBoYXNoLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjIwOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9ERUJVRykgJiM0Mzs9IGxvZy5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZS0yMS1iYXRtYW4tYWR2LXkgJiM0Mzs9IG1haW4ub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9MjI9YmF0bWFuLWFkdi15ICYjNDM7PSBtZXNoLWludGVyZmFjZS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToyMzpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfTUNBU1QpICYjNDM7PSBtdWx0aWNhc3Qub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MjQ6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX01DQVNUKSAmIzQzOz0gbXVsdGljYXN0X2Zvcncub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMjUtYmF0bWFuLWFkdi15ICYjNDM7PSBuZXRsaW5rLm9cbi0tXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZT0yOD1iYXRtYW4tYWR2LXkgJiM0Mzs9IHNlbmQub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6Mjk6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX1RSQUNJTkcpICYjNDM7PSB0cmFjZS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZS0zMC1iYXRtYW4tYWR2LXkgJiM0Mzs9IHRwX21ldGVyLm9cbi0tXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5oLTYtXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQkFUX0FMR09fSF9cbm5ldC9iYXRtYW4tYWR2L2JhdF9hbGdvLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9CQVRfQUxHT19IX1xubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uaC05LVxuLS1cbm5ldC9iYXRtYW4tYWR2L2JhdF9hbGdvLmg9MjE9aW50IGJhdGFkdl9hbGdvX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbm5ldC9iYXRtYW4tYWR2L2JhdF9hbGdvLmgtMjItXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5oOjIzOiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfQkFUX0FMR09fSF8gKi9cbi0tXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmgtNi1cbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0JBVF9JVl9PR01fSF9cbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0JBVF9JVl9PR01fSF9cbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uaC05LVxuLS1cbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uaD0xMz12b2lkIGJhdGFkdl9pdl9kZWluaXQodm9pZCk7XG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmgtMTQtXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmg6MTU6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9CQVRfSVZfT0dNX0hfICovXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaC02LVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0JBVF9WX0hfXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfQkFUX1ZfSF9cbm5ldC9iYXRtYW4tYWR2L2JhdF92LmgtOS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5oLTExLVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaDoxMjojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1Zcbm5ldC9iYXRtYW4tYWR2L2JhdF92LmgtMTMtXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaD00MD1zdGF0aWMgaW5saW5lIHZvaWQgYmF0YWR2X3ZfbWVzaF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaC00My1cbm5ldC9iYXRtYW4tYWR2L2JhdF92Lmg6NDQ6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WICovXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5oLTQ1LVxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaDo0NjojZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0JBVF9WX0hfICovXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmgtNi1cbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQkFUX1ZfRUxQX0hfXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0JBVF9WX0VMUF9IX1xubmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmgtOS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuaD0xOT1pbnQgYmF0YWR2X3ZfZWxwX3BhY2tldF9yZWN2KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmgtMjEtXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuaDoyMjojZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0JBVF9WX0VMUF9IXyAqL1xuLS1cbm5ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5oLTYtXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0JBVF9WX09HTV9IX1xubmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9CQVRfVl9PR01fSF9cbm5ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5oLTktXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmg9MjQ9aW50IGJhdGFkdl92X29nbV9wYWNrZXRfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5oLTI2LVxubmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmg6Mjc6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9CQVRfVl9PR01fSF8gKi9cbi0tXG5uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5oLTYtXG5uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQklUQVJSQVlfSF9cbm5ldC9iYXRtYW4tYWR2L2JpdGFycmF5Lmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9CSVRBUlJBWV9IX1xubmV0L2JhdG1hbi1hZHYvYml0YXJyYXkuaC05LVxuLS1cbm5ldC9iYXRtYW4tYWR2L2JpdGFycmF5Lmg9NTM9Ym9vbCBiYXRhZHZfYml0X2dldF9wYWNrZXQodm9pZCAqcHJpdiwgdW5zaWduZWQgbG9uZyAqc2VxX2JpdHMsXG4tLVxubmV0L2JhdG1hbi1hZHYvYml0YXJyYXkuaC01NS1cbm5ldC9iYXRtYW4tYWR2L2JpdGFycmF5Lmg6NTY6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9CSVRBUlJBWV9IXyAqL1xuLS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jPTI0NjQ9aW50IGJhdGFkdl9ibGFfYmFja2JvbmVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4tLVxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMtMjUwNy1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jOjI1MDg6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RBVFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMtMjUwOS0vKipcbi0tXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC02LVxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg6NzojaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9CTEFfSF9cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfQkxBX0hfXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC05LVxuLS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oPTI3PXN0YXRpYyBpbmxpbmUgYm9vbCBiYXRhZHZfYmxhX2lzX2xvb3BkZXRlY3RfbWFjKGNvbnN0IHVpbnQ4X3QgKm1hYylcbi0tXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC0zNC1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oOjM1OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CTEFcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oLTM2LWJvb2wgYmF0YWR2X2JsYV9yeChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oPTU0PXZvaWQgYmF0YWR2X2JsYV9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpO1xubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg6NTU6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RBVFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmgtNTYtYm9vbCBiYXRhZHZfYmxhX2NoZWNrX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHU4ICphZGRyLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oLTU5LSNkZWZpbmUgQkFUQURWX0JMQV9DUkNfSU5JVFx0MFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg6NjA6I2Vsc2UgLyogaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfQkxBICovXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC02MS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaD0xMjQ9Ym9vbCBiYXRhZHZfYmxhX2NoZWNrX2NsYWltKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHU4ICphZGRyLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oLTEyOS1cbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oOjEzMDojZW5kaWYgLyogaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfQkxBICovXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC0xMzEtXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaDoxMzI6I2VuZGlmIC8qIGlmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQkxBX0hfICovXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9NDQ0PXN0YXRpYyB2b2lkIGJhdGFkdl9kYXRfZW50cnlfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcCxcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy00OTEtXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo0OTI6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy00OTMtXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9NTcwPXN0YXRpYyB2b2lkIGJhdGFkdl9kYmdfYXJwKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNTc0LVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NTc1OiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRyAqL1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNTc2LVxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5oLTYtXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0RJU1RSSUJVVEVEX0FSUF9UQUJMRV9IX1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9ESVNUUklCVVRFRF9BUlBfVEFCTEVfSF9cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5oLTktXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmgtMjAtXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaDoyMTojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREFUXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaC0yMi1cbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaD0xNzk9c3RhdGljIGlubGluZSB2b2lkIGJhdGFkdl9kYXRfaW5jX2NvdW50ZXIoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaC0xODMtXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaDoxODQ6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0RBVCAqL1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmgtMTg1LVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmg6MTg2OiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfRElTVFJJQlVURURfQVJQX1RBQkxFX0hfICovXG4tLVxubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5oLTYtXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmg6NzojaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9GUkFHTUVOVEFUSU9OX0hfXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9GUkFHTUVOVEFUSU9OX0hfXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmgtOS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmg9Mzc9YmF0YWR2X2ZyYWdfY2hlY2tfZW50cnkoc3RydWN0IGJhdGFkdl9mcmFnX3RhYmxlX2VudHJ5ICpmcmFnc19lbnRyeSlcbi0tXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmgtNDQtXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmg6NDU6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9GUkFHTUVOVEFUSU9OX0hfICovXG4tLVxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuaC02LVxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0dBVEVXQVlfQ0xJRU5UX0hfXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfR0FURVdBWV9DTElFTlRfSF9cbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmgtOS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oPTQ3PXN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfZ3dfbm9kZV9wdXQoc3RydWN0IGJhdGFkdl9nd19ub2RlICpnd19ub2RlKVxuLS1cbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmgtNTQtXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oOjU1OiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfR0FURVdBWV9DTElFTlRfSF8gKi9cbi0tXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NvbW1vbi5oLTYtXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NvbW1vbi5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfR0FURVdBWV9DT01NT05fSF9cbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY29tbW9uLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9HQVRFV0FZX0NPTU1PTl9IX1xubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jb21tb24uaC05LVxuLS1cbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY29tbW9uLmg9Mjk9dm9pZCBiYXRhZHZfZ3dfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KTtcbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY29tbW9uLmgtMzAtXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NvbW1vbi5oOjMxOiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfR0FURVdBWV9DT01NT05fSF8gKi9cbi0tXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oLTYtXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfSEFSRF9JTlRFUkZBQ0VfSF9cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9IQVJEX0lOVEVSRkFDRV9IX1xubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaC05LVxuLS1cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmg9MTQ0PXN0YXRpYyBpbmxpbmUgYm9vbCBiYXRhZHZfaXNfd2lmaSh1MzIgd2lmaV9mbGFncylcbi0tXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oLTE0OC1cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmg6MTQ5OiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfSEFSRF9JTlRFUkZBQ0VfSF8gKi9cbi0tXG5uZXQvYmF0bWFuLWFkdi9oYXNoLmgtNi1cbm5ldC9iYXRtYW4tYWR2L2hhc2guaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0hBU0hfSF9cbm5ldC9iYXRtYW4tYWR2L2hhc2guaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0hBU0hfSF9cbm5ldC9iYXRtYW4tYWR2L2hhc2guaC05LVxuLS1cbm5ldC9iYXRtYW4tYWR2L2hhc2guaD0xNDM9c3RhdGljIGlubGluZSB2b2lkICpiYXRhZHZfaGFzaF9yZW1vdmUoc3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmhhc2gsXG4tLVxubmV0L2JhdG1hbi1hZHYvaGFzaC5oLTE3MC1cbm5ldC9iYXRtYW4tYWR2L2hhc2guaDoxNzE6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9IQVNIX0hfICovXG4tLVxubmV0L2JhdG1hbi1hZHYvbG9nLmgtNi1cbm5ldC9iYXRtYW4tYWR2L2xvZy5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfTE9HX0hfXG5uZXQvYmF0bWFuLWFkdi9sb2cuaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0xPR19IX1xubmV0L2JhdG1hbi1hZHYvbG9nLmgtOS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC0xNi1cbm5ldC9iYXRtYW4tYWR2L2xvZy5oOjE3OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVR1xubmV0L2JhdG1hbi1hZHYvbG9nLmgtMTgtXG4tLVxubmV0L2JhdG1hbi1hZHYvbG9nLmg9Mzg9ZW51bSBiYXRhZHZfZGJnX2xldmVsIHtcbi0tXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC02My1cbm5ldC9iYXRtYW4tYWR2L2xvZy5oOjY0OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVR1xubmV0L2JhdG1hbi1hZHYvbG9nLmgtNjUtaW50IGJhdGFkdl9kZWJ1Z19sb2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgY2hhciAqZm10LCAuLi4pXG5uZXQvYmF0bWFuLWFkdi9sb2cuaD02Nj1fX3ByaW50ZigyLCAzKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC04My1cdHdoaWxlICgwKVxubmV0L2JhdG1hbi1hZHYvbG9nLmg6ODQ6I2Vsc2UgLyogIUNPTkZJR19CQVRNQU5fQURWX0RFQlVHICovXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC04NS1fX3ByaW50Zig0LCA1KVxubmV0L2JhdG1hbi1hZHYvbG9nLmg9ODY9c3RhdGljIGlubGluZSB2b2lkIF9iYXRhZHZfZGJnKGludCB0eXBlIF9fYWx3YXlzX3VudXNlZCxcbi0tXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC0xNDctXG5uZXQvYmF0bWFuLWFkdi9sb2cuaDoxNDg6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9MT0dfSF8gKi9cbi0tXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9MTg5PWludCBiYXRhZHZfbWVzaF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMDEtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZiYXRfcHJpdi1cdTAwM2Vndy5saXN0X2xvY2spO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjIwMjojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1Rcbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMDMtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZiYXRfcHJpdi1cdTAwM2VtY2FzdC5tbGFfbG9jayk7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTIxMy1cdElOSVRfSExJU1RfSEVBRChcdTAwMjZiYXRfcHJpdi1cdTAwM2Vndy5nYXRld2F5X2xpc3QpO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjIxNDojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1Rcbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMTUtXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3Qud2FudF9hbGxfdW5zbm9vcGFibGVzX2xpc3QpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMjEtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZiYXRfcHJpdi1cdTAwM2V0dC5yb2FtX2xpc3QpO1xubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjIyMjojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1Rcbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMjMtXHRJTklUX0hMSVNUX0hFQUQoXHUwMDI2YmF0X3ByaXYtXHUwMDNlbWNhc3QubWxhX2xpc3QpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uaC02LVxubmV0L2JhdG1hbi1hZHYvbWFpbi5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfTUFJTl9IX1xubmV0L2JhdG1hbi1hZHYvbWFpbi5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfTUFJTl9IX1xubmV0L2JhdG1hbi1hZHYvbWFpbi5oLTktXG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5oPTM3MD1pbnQgYmF0YWR2X3Rocm93X3VldmVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBlbnVtIGJhdGFkdl91ZXZfdHlwZSB0eXBlLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uaC0zNzItXG5uZXQvYmF0bWFuLWFkdi9tYWluLmg6MzczOiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfTUFJTl9IXyAqL1xuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9Nzk1PXN0YXRpYyBpbnQgYmF0YWR2X21lc2hpZl9pbml0X2xhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgxNS1cdFdSSVRFX09OQ0UoYmF0X3ByaXYtXHUwMDNlYm9uZGluZywgMCk7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjgxNjojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfQkxBXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgxNy1cdFdSSVRFX09OQ0UoYmF0X3ByaXYtXHUwMDNlYnJpZGdlX2xvb3BfYXZvaWRhbmNlLCAxKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODE4LSNlbmRpZlxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo4MTk6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RBVFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04MjAtXHRXUklURV9PTkNFKGJhdF9wcml2LVx1MDAzZWRpc3RyaWJ1dGVkX2FycF90YWJsZSwgMSk7XG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgyMS0jZW5kaWZcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODIyOiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04MjMtXHRXUklURV9PTkNFKGJhdF9wcml2LVx1MDAzZW11bHRpY2FzdF9tb2RlLCAxKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgzNC1cdFdSSVRFX09OQ0UoYmF0X3ByaXYtXHUwMDNlaG9wX3BlbmFsdHksIDMwKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODM1OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVR1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04MzYtXHRXUklURV9PTkNFKGJhdF9wcml2LVx1MDAzZWxvZ19sZXZlbCwgMCk7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04NDYtXHRhdG9taWNfc2V0KFx1MDAyNmJhdF9wcml2LVx1MDAzZXR0Lm9nbV9hcHBlbmRfY250LCAwKTtcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODQ3OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CTEFcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODQ4LVx0YXRvbWljX3NldChcdTAwMjZiYXRfcHJpdi1cdTAwM2VibGEubnVtX3JlcXVlc3RzLCAwKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTk1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IHtcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTk4Mi1cdHsgXCYjMzQ7dHRfcm9hbV9hZHZfcnhcJiMzNDsgfSxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6OTgzOiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy05ODQtXHR7IFwmIzM0O21jYXN0X3R4XCYjMzQ7IH0sXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy05OTQtI2VuZGlmXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjk5NTojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREFUXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTk5Ni1cdHsgXCYjMzQ7ZGF0X2dldF90eFwmIzM0OyB9LFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtNi1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg6NzojaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9NRVNIX0lOVEVSRkFDRV9IX1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX01FU0hfSU5URVJGQUNFX0hfXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTktXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuaD0zNT1zdGF0aWMgaW5saW5lIHZvaWQgYmF0YWR2X21lc2hpZl92bGFuX3B1dChzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtNDItXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oOjQzOiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfTUVTSF9JTlRFUkZBQ0VfSF8gKi9cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC02LVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0Lmg6NzojaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9NVUxUSUNBU1RfSF9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfTVVMVElDQVNUX0hfXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC05LVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oPTE5PWVudW0gYmF0YWR2X2ZvcndfbW9kZSB7XG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmgtNDEtXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaDo0MjojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1Rcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oLTQzLVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oPTExNj1zdGF0aWMgaW5saW5lIGludCBiYXRhZHZfbWNhc3RfZm9yd19tY3NlbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC0xMjItXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaDoxMjM6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX01DQVNUICovXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC0xMjQtXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaDoxMjU6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9NVUxUSUNBU1RfSF8gKi9cbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9MjMwPXN0YXRpYyBpbnQgYmF0YWR2X25ldGxpbmtfbWVzaF9maWxsKHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTI1NC1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoyNTU6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JMQVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTI1Ni1cdGlmIChubGFfcHV0X3UxNihtc2csIEJBVEFEVl9BVFRSX0JMQV9DUkMsXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTI5NS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoyOTY6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JMQVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTI5Ny1cdGlmIChubGFfcHV0X3U4KG1zZywgQkFUQURWX0FUVFJfQlJJREdFX0xPT1BfQVZPSURBTkNFX0VOQUJMRUQsXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTI5OS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MzAwOiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9CTEEgKi9cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zMDEtXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MzAyOiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9EQVRcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zMDMtXHRpZiAobmxhX3B1dF91OChtc2csIEJBVEFEVl9BVFRSX0RJU1RSSUJVVEVEX0FSUF9UQUJMRV9FTkFCTEVELFxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zMDUtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjMwNjojZW5kaWYgLyogQ09ORklHX0JBVE1BTl9BRFZfREFUICovXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMzA3LVxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zMzctXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MzM4OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVR1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTMzOS1cdGlmIChubGFfcHV0X3UzMihtc2csIEJBVEFEVl9BVFRSX0xPR19MRVZFTCxcbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMzQxLVx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzozNDI6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0RFQlVHICovXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMzQzLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjM0NDojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1Rcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zNDUtXHRpZiAobmxhX3B1dF91OChtc2csIEJBVEFEVl9BVFRSX01VTFRJQ0FTVF9GT1JDRUZMT09EX0VOQUJMRUQsXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTM1MS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MzUyOiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVCAqL1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTM1My1cbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9NDM1PXN0YXRpYyBpbnQgYmF0YWR2X25ldGxpbmtfc2V0X21lc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNDY5LVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjQ3MDojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfQkxBXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNDcxLVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbQkFUQURWX0FUVFJfQlJJREdFX0xPT1BfQVZPSURBTkNFX0VOQUJMRURdKSB7XG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTQ3Ny1cdH1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo0Nzg6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0JMQSAqL1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTQ3OS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo0ODA6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RBVFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTQ4MS1cdGlmIChpbmZvLVx1MDAzZWF0dHJzW0JBVEFEVl9BVFRSX0RJU1RSSUJVVEVEX0FSUF9UQUJMRV9FTkFCTEVEXSkge1xuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy00ODctXHR9XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6NDg4OiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9EQVQgKi9cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy00ODktXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTU2Ny1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo1Njg6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNTY5LVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbQkFUQURWX0FUVFJfTE9HX0xFVkVMXSkge1xuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy01NzQtXHR9XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6NTc1OiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRyAqL1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTU3Ni1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo1Nzc6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX01DQVNUXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNTc4LVx0aWYgKGluZm8tXHUwMDNlYXR0cnNbQkFUQURWX0FUVFJfTVVMVElDQVNUX0ZPUkNFRkxPT0RfRU5BQkxFRF0pIHtcbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNTg4LVx0fVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjU4OTojZW5kaWYgLyogQ09ORklHX0JBVE1BTl9BRFZfTUNBU1QgKi9cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy01OTAtXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTc4MT1zdGF0aWMgaW50IGJhdGFkdl9uZXRsaW5rX2hhcmRpZl9maWxsKHN0cnVjdCBza19idWZmICptc2csXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTgyMi1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo4MjM6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtODI0LVx0aWYgKG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfRUxQX0lOVEVSVkFMLFxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy04MzAtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjgzMTojZW5kaWYgLyogQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YgKi9cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy04MzItXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTkxMj1zdGF0aWMgaW50IGJhdGFkdl9uZXRsaW5rX3NldF9oYXJkaWYoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtOTI0LVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjkyNTojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1Zcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy05MjYtXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTk0NC1cdH1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo5NDU6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WICovXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtOTQ2LVxuLS1cbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuaC02LVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfTkVUTElOS19IX1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfTkVUTElOS19IX1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5oLTktXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5oPTI2PWV4dGVybiBzdHJ1Y3QgZ2VubF9mYW1pbHkgYmF0YWR2X25ldGxpbmtfZmFtaWx5O1xubmV0L2JhdG1hbi1hZHYvbmV0bGluay5oLTI3LVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5oOjI4OiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfTkVUTElOS19IXyAqL1xuLS1cbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYz02NzI9YmF0YWR2X25laWdoX25vZGVfY3JlYXRlKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGUsXG4tLVxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jLTcwMi1cbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYzo3MDM6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMtNzA0LVx0QUNDRVNTX1BSSVZBVEUobmVpZ2hfbm9kZSwgb3JpZ19ub2RlX2lkKSA9IG9yaWdfbm9kZTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmM9OTQ3PXN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpiYXRhZHZfb3JpZ19ub2RlX25ldyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYy05ODMtXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmM6OTg0OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jLTk4NS1cdG9yaWdfbm9kZS1cdTAwM2VtY2FzdF9mbGFncyA9IEJBVEFEVl9NQ0FTVF9XQU5UX05PX1JUUjQ7XG4tLVxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oLTYtXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmg6NzojaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9PUklHSU5BVE9SX0hfXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9PUklHSU5BVE9SX0hfXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgtOS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmg9MTYyPXN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfb3JpZ19ub2RlX3B1dChzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlKVxuLS1cbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaC0xNjktXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmg6MTcwOiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfT1JJR0lOQVRPUl9IXyAqL1xuLS1cbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYz0xMjYzPWludCBiYXRhZHZfcmVjdl9iY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTM3Ny1cbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoxMzc4OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTEzNzktLyoqXG4tLVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jPTEzOTI9aW50IGJhdGFkdl9yZWN2X21jYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xNDUzLX1cbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoxNDU0OiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVCAqL1xuLS1cbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaC02LVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfUk9VVElOR19IX1xubmV0L2JhdG1hbi1hZHYvcm91dGluZy5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfUk9VVElOR19IX1xubmV0L2JhdG1hbi1hZHYvcm91dGluZy5oLTktXG4tLVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5oPTI4PWludCBiYXRhZHZfcmVjdl9iY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaC0yOS1cdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcmVjdl9pZik7XG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmg6MzA6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX01DQVNUXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmgtMzEtaW50IGJhdGFkdl9yZWN2X21jYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaD00OT1ib29sIGJhdGFkdl93aW5kb3dfcHJvdGVjdGVkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHMzMiBzZXFfbnVtX2RpZmYsXG4tLVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5oLTUyLVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5oOjUzOiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfUk9VVElOR19IXyAqL1xuLS1cbm5ldC9iYXRtYW4tYWR2L3NlbmQuYz0xMzM9aW50IGJhdGFkdl9zZW5kX3VuaWNhc3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTEzNS17XG5uZXQvYmF0bWFuLWFkdi9zZW5kLmM6MTM2OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVlxubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTEzNy1cdHN0cnVjdCBiYXRhZHZfaGFyZGlmX25laWdoX25vZGUgKmhhcmRpZl9uZWlnaDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmMtMTQyLVxubmV0L2JhdG1hbi1hZHYvc2VuZC5jOjE0MzojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1Zcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy0xNDQtXHRoYXJkaWZfbmVpZ2ggPSBiYXRhZHZfaGFyZGlmX25laWdoX2dldChuZWlnaC1cdTAwM2VpZl9pbmNvbWluZywgbmVpZ2gtXHUwMDNlYWRkcik7XG4tLVxubmV0L2JhdG1hbi1hZHYvc2VuZC5oLTYtXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmg6NzojaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9TRU5EX0hfXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDI4MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDY0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExhdGVzdCBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZSBjb3JlIG9mIHRoZSB3b3JrIHNlZW1zIHRvIGJlIGluIGBuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jYC4gSXQmIzM5O3MgYSBzaWduaWZpY2FudCBmaXgtdXAgYXJvdW5kIGNvbmN1cnJlbmN5IGlzc3VlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3aXRoaW4gdGhlIEIuQS5ULk0uQS5OLiB0cmFuc2xhdGlvbiB0YWJsZS4gU3BlY2lmaWNhbGx5LCBhIGBmbGFnc19sb2NrYCB3YXMgaW50cm9kdWNlZCB3aXRoaW4gYGJhdGFkdl90dF9jb21tb25fZW50cnlgIHRvIGd1YXJkIGFjY2VzcyB0byB0aGUgYGZsYWdzYCBmaWVsZCBhbmQgYHJvYW1fYXRgLiBUaGlzIGlzIGNydWNpYWwgYmVjYXVzZSBgZmxhZ3NgIGNvbnRyb2xzIHRoaW5ncyBsaWtlIGBCQVRBRFZfVFRfQ0xJRU5UX05FV2AsIGBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkdgLCBhbmQgc28gb24uIENvbmN1cnJlbnQgYWNjZXNzIHRvIHRoZXNlIGZsYWdzIGlzIGEgY2xhc3NpYyBzb3VyY2Ugb2YgcHJvYmxlbXMsIHNvIHRoaXMgbG9jayBpcyBhIHNtYXJ0IG1vdmUuIFRoZXJlJiMzOTtzIGFsc28gYSBidWcgZml4IGluIGhvdyB0aGUgbG9jYWwgaGFzaCB0YWJsZSBlbnRyaWVzIGFyZSByZW1vdmVkOyBpdCB3YXMgbWF0Y2hpbmcgYmFzZWQgb24gYWRkcmVzcyBhbmQgVklEIGluc3RlYWQgb2YgdGhlIGNvcnJlY3QgcG9pbnRlciBjb21wYXJpc29uLiBUaGUgY29kZSBpbiBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAsIGBiYXRhZHZfdHRfbG9jYWxfcHVyZ2VfcGVuZGluZ19jbGllbnRzYCwgYW5kIG90aGVycyBoYXMgYWxzbyBiZWVuIGNsZWFuZWQgdXAuCgpUaGVuLCBtb3Zpbmcgb24gdG8gYG5ldC9iYXRtYW4tYWR2L2JhdF92LmNgLCB0aGVyZSYjMzk7cyBhIGNvcnJlY3Rpb24gdG8gdGhlIGBiYXRhZHZfdl9uZWlnaF9pc19zb2JgIGNhbGN1bGF0aW9uLiBJdCBhcHBlYXJzIHRoZSBsb2dpYyBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBuZWlnaGJvciBpcyBzdWl0YWJsZSAoaGF2aW5nIGJldHRlciB0aHJvdWdocHV0KSB3YXMgaW52ZXJ0ZWQgb3IgZmxhd2VkIGluIHNvbWUgd2F5LiBGaW5hbGx5LCBpbiBgbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmNgLCB0aGVyZSYjMzk7cyBhIG1pbm9yIGNvcnJlY3Rpb24gaW4gYGJhdGFkdl9kYmdfYXJwYCB3aXRoIHRoZSBzdWJ0eXBlIG9mIHRoZSBwYWNrZXQuCgpJIGFsc28gc2VlIHNldmVyYWwgaW5zdGFuY2VzIG9mIGBfX2FsaWduZWQoMilgIGFubm90YXRpb25zIG9uIE1BQyBhZGRyZXNzZXMuIFRoYXQmIzM5O3MgYSBnb29kIHByYWN0aWNlIHRvIGF2b2lkIHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzc3VlcyBkdXJpbmcgY2FzdGluZyBvciBjb3B5aW5nIEV0aGVybmV0IGFkZHJlc3Nlcy4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoaXMgY29kZSBldmVuIHJlYWNoYWJsZSBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIHVzaW5nIGZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgeWVzLiBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgaXMgYSBtb2R1bGUgaW4gdGhlIExpbnV4IGtlcm5lbCB0aGF0IG9wZXJhdGVzIG92ZXIgdmlydHVhbCBpbnRlcmZhY2VzIG9yIHJhdyBuZXRsaW5rLCBhbmQgaXQgaXMgZnJlcXVlbnRseSBmdXp6ZWQsIHRodXMgcmVhY2hhYmxlLgoKTm93LCBzaG91bGQgd2UgY29uc2lkZXIgaXQgd29ydGh5IG9mIGludGVuc2UgZnV6emluZz8gRGVmaW5pdGVseS4gVGhpcyBwYXRjaCBhbHRlcnMgZXhlY3V0aW9uIGZsb3csIGluY2x1ZGluZyBjb3JlIHJvdXRpbmcgYW5kIHRyYW5zbGF0aW9uIHRhYmxlIGxvZ2ljLiBXZSYjMzk7dmUgZ290IHRoZSBpbnRyb2R1Y3Rpb24gb2YgY29uY3VycmVuY3kgbG9ja2luZywgcG90ZW50aWFsbHkgaW52ZXJ0aW5nIG9mIGxvZ2ljIGluICBgYmF0YWR2X3ZfbmVpZ2hfaXNfc29iYCBhbmQgYSBoYXNoIHJlbW92YWwgYnVnIGZpeCwgYXMgd2VsbCBhcyBzZXZlcmFsIGZpeGVzIHRvIGxvY2FsIHRhYmxlIHNpemUgY291bnRpbmcgYW5kIHRyYW5zaXRpb24gbG9naWMuCgpTbywgdGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGNoZWNrIGBuZXQvYmF0bWFuLWFkdi9LY29uZmlnYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDg1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0IyBDb3B5cmlnaHQgKEMpIEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6XG4gICAzOlx0I1xuICAgNDpcdCMgTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaFxuICAgNTpcdFxuICAgNjpcdCNcbiAgIDc6XHQjIEIuQS5ULk0uQS5OIG1lc2hpbmcgcHJvdG9jb2xcbiAgIDg6XHQjXG4gICA5Olx0XG4gIDEwOlx0Y29uZmlnIEJBVE1BTl9BRFZcbiAgMTE6XHRcdHRyaXN0YXRlIFwmIzM0O0IuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sXCYjMzQ7XG4gIDEyOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTM6XHRcdGhlbHBcbiAgMTQ6XHRcdCAgQi5BLlQuTS5BLk4uIChiZXR0ZXIgYXBwcm9hY2ggdG8gbW9iaWxlIGFkLWhvYyBuZXR3b3JraW5nKSBpc1xuICAxNTpcdFx0ICBhIHJvdXRpbmcgcHJvdG9jb2wgZm9yIG11bHRpLWhvcCBhZC1ob2MgbWVzaCBuZXR3b3Jrcy4gVGhlXG4gIDE2Olx0XHQgIG5ldHdvcmtzIG1heSBiZSB3aXJlZCBvciB3aXJlbGVzcy4gU2VlXG4gIDE3Olx0XHQgIGh0dHBzOi8vd3d3Lm9wZW4tbWVzaC5vcmcvIGZvciBtb3JlIGluZm9ybWF0aW9uIGFuZCB1c2VyIHNwYWNlXG4gIDE4Olx0XHQgIHRvb2xzLlxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBCQVRNQU5fQURWX0JBVE1BTl9WXG4gIDIxOlx0XHRib29sIFwmIzM0O0IuQS5ULk0uQS5OLiBWIHByb3RvY29sXCYjMzQ7XG4gIDIyOlx0XHRkZXBlbmRzIG9uIEJBVE1BTl9BRFYgXHUwMDI2XHUwMDI2ICEoQ0ZHODAyMTE9bSBcdTAwMjZcdTAwMjYgQkFUTUFOX0FEVj15KVxuICAyMzpcdFx0ZGVmYXVsdCB5XG4gIDI0Olx0XHRoZWxwXG4gIDI1Olx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEIuQS5ULk0uQS5OLiBWIHByb3RvY29sLCB0aGUgc3VjY2Vzc29yXG4gIDI2Olx0XHQgIG9mIHRoZSBjdXJyZW50bHkgdXNlZCBCLkEuVC5NLkEuTi4gSVYgcHJvdG9jb2wuIFRoZSBtYWluXG4gIDI3Olx0XHQgIGNoYW5nZXMgaW5jbHVkZSBzcGxpdHRpbmcgb2YgdGhlIE9HTSBwcm90b2NvbCBpbnRvIGEgbmVpZ2hib3JcbiAgMjg6XHRcdCAgZGlzY292ZXJ5IHByb3RvY29sIChFY2hvIExvY2F0aW9uIFByb3RvY29sLCBFTFApIGFuZCBhIG5ldyBPR01cbiAgMjk6XHRcdCAgUHJvdG9jb2wgT0dNdjIgZm9yIGZsb29kaW5nIHByb3RvY29sIGluZm9ybWF0aW9uIHRocm91Z2ggdGhlXG4gIDMwOlx0XHQgIG5ldHdvcmssIGFzIHdlbGwgYXMgYSB0aHJvdWdocHV0IGJhc2VkIG1ldHJpYy5cbiAgMzE6XHRcdCAgQi5BLlQuTS5BLk4uIFYgaXMgY3VycmVudGx5IGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsIGFuZCBub3RcbiAgMzI6XHRcdCAgY29tcGF0aWJsZSB0byBCLkEuVC5NLkEuTi4gSVYgbmV0d29ya3MuXG4gIDMzOlx0XG4gIDM0Olx0Y29uZmlnIEJBVE1BTl9BRFZfQkxBXG4gIDM1Olx0XHRib29sIFwmIzM0O0JyaWRnZSBMb29wIEF2b2lkYW5jZVwmIzM0O1xuICAzNjpcdFx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWIFx1MDAyNlx1MDAyNiBJTkVUXG4gIDM3Olx0XHRzZWxlY3QgQ1JDMTZcbiAgMzg6XHRcdHNlbGVjdCBORVRfQ1JDMzJDXG4gIDM5Olx0XHRkZWZhdWx0IHlcbiAgNDA6XHRcdGhlbHBcbiAgNDE6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBCTEEgKEJyaWRnZSBMb29wIEF2b2lkYW5jZSksIGEgbWVjaGFuaXNtXG4gIDQyOlx0XHQgIHRvIGF2b2lkIEV0aGVybmV0IGZyYW1lcyBsb29waW5nIHdoZW4gbWVzaCBub2RlcyBhcmUgY29ubmVjdGVkXG4gIDQzOlx0XHQgIHRvIGJvdGggdGhlIHNhbWUgTEFOIGFuZCB0aGUgc2FtZSBtZXNoLiBJZiB5b3Ugd2lsbCBuZXZlciB1c2VcbiAgNDQ6XHRcdCAgbW9yZSB0aGFuIG9uZSBtZXNoIG5vZGUgaW4gdGhlIHNhbWUgTEFOLCB5b3UgY2FuIHNhZmVseSByZW1vdmVcbiAgNDU6XHRcdCAgdGhpcyBmZWF0dXJlIGFuZCBzYXZlIHNvbWUgc3BhY2UuXG4gIDQ2Olx0XG4gIDQ3Olx0Y29uZmlnIEJBVE1BTl9BRFZfREFUXG4gIDQ4Olx0XHRib29sIFwmIzM0O0Rpc3RyaWJ1dGVkIEFSUCBUYWJsZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWIFx1MDAyNlx1MDAyNiBJTkVUXG4gIDUwOlx0XHRkZWZhdWx0IHlcbiAgNTE6XHRcdGhlbHBcbiAgNTI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBEQVQgKERpc3RyaWJ1dGVkIEFSUCBUYWJsZSksIGEgREhUIGJhc2VkXG4gIDUzOlx0XHQgIG1lY2hhbmlzbSB0aGF0IGluY3JlYXNlcyBBUlAgcmVsaWFiaWxpdHkgb24gc3BhcnNlIHdpcmVsZXNzXG4gIDU0Olx0XHQgIG1lc2ggbmV0d29ya3MuIElmIHlvdSB0aGluayB0aGF0IHlvdXIgbmV0d29yayBkb2VzIG5vdCBuZWVkXG4gIDU1Olx0XHQgIHRoaXMgb3B0aW9uIHlvdSBjYW4gc2FmZWx5IHJlbW92ZSBpdCBhbmQgc2F2ZSBzb21lIHNwYWNlLlxuICA1NjpcdFxuICA1NzpcdGNvbmZpZyBCQVRNQU5fQURWX01DQVNUXG4gIDU4Olx0XHRib29sIFwmIzM0O011bHRpY2FzdCBvcHRpbWlzYXRpb25cJiMzNDtcbiAgNTk6XHRcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcdTAwMjZcdTAwMjYgSU5FVCBcdTAwMjZcdTAwMjYgIShCUklER0U9bSBcdTAwMjZcdTAwMjYgQkFUTUFOX0FEVj15KVxuICA2MDpcdFx0ZGVmYXVsdCB5XG4gIDYxOlx0XHRoZWxwXG4gIDYyOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpY2FzdCBvcHRpbWlzYXRpb24gd2hpY2ggYWltcyB0b1xuICA2MzpcdFx0ICByZWR1Y2UgdGhlIGFpciBvdmVyaGVhZCB3aGlsZSBpbXByb3ZpbmcgdGhlIHJlbGlhYmlsaXR5IG9mXG4gIDY0Olx0XHQgIG11bHRpY2FzdCBtZXNzYWdlcy5cbiAgNjU6XHRcbiAgNjY6XHRjb25maWcgQkFUTUFOX0FEVl9ERUJVR1xuICA2NzpcdFx0Ym9vbCBcJiMzNDtCLkEuVC5NLkEuTi4gZGVidWdnaW5nXCYjMzQ7XG4gIDY4Olx0XHRkZXBlbmRzIG9uIEJBVE1BTl9BRFZcbiAgNjk6XHRcdGhlbHBcbiAgNzA6XHRcdCAgVGhpcyBpcyBhbiBvcHRpb24gZm9yIHVzZSBieSBkZXZlbG9wZXJzOyBtb3N0IHBlb3BsZSBzaG91bGRcbiAgNzE6XHRcdCAgc2F5IE4gaGVyZS4gVGhpcyBlbmFibGVzIGNvbXBpbGF0aW9uIG9mIHN1cHBvcnQgZm9yXG4gIDcyOlx0XHQgIG91dHB1dHRpbmcgZGVidWdnaW5nIGluZm9ybWF0aW9uIHRvIHRoZSB0cmFjaW5nIGJ1ZmZlci4gVGhlIG91dHB1dCBpc1xuICA3MzpcdFx0ICBjb250cm9sbGVkIHZpYSB0aGUgYmF0YWR2IG5ldGRldiBzcGVjaWZpYyBsb2dfbGV2ZWwgc2V0dGluZy5cbiAgNzQ6XHRcbiAgNzU6XHRjb25maWcgQkFUTUFOX0FEVl9UUkFDSU5HXG4gIDc2Olx0XHRib29sIFwmIzM0O0IuQS5ULk0uQS5OLiB0cmFjaW5nIHN1cHBvcnRcJiMzNDtcbiAgNzc6XHRcdGRlcGVuZHMgb24gQkFUTUFOX0FEVlxuICA3ODpcdFx0ZGVwZW5kcyBvbiBFVkVOVF9UUkFDSU5HXG4gIDc5Olx0XHRoZWxwXG4gIDgwOlx0XHQgIFRoaXMgaXMgYW4gb3B0aW9uIGZvciB1c2UgYnkgZGV2ZWxvcGVyczsgbW9zdCBwZW9wbGUgc2hvdWxkXG4gIDgxOlx0XHQgIHNheSBOIGhlcmUuIFNlbGVjdCB0aGlzIG9wdGlvbiB0byBnYXRoZXIgdHJhY2VzIGxpa2UgdGhlIGRlYnVnXG4gIDgyOlx0XHQgIG1lc3NhZ2VzIHVzaW5nIHRoZSBnZW5lcmljIHRyYWNpbmcgaW5mcmFzdHJ1Y3R1cmUgb2YgdGhlIGtlcm5lbC5cbiAgODM6XHRcdCAgQkFUTUFOX0FEVl9ERUJVRyBtdXN0IGFsc28gYmUgc2VsZWN0ZWQgdG8gZ2V0IHRyYWNlIGV2ZW50cyBmb3JcbiAgODQ6XHRcdCAgYmF0YWR2X2RiZy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjgwNQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKktjb25maWcgRGVwZW5kZW5jeSBEZWVwIERpdmUqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGluY2x1c2lvbiBhbmQgZGVwZW5kZW5jaWVzIG9mIGBCQVRNQU5fQURWYC4gVGltZSB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgcGFyZW50IGBLY29uZmlnYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHRyYWNlIHRoZSBwYXRoIHRvIHNlZSB0aGUgZXhhY3QgY29udGV4dCBpbiB3aGljaCBgQkFUTUFOX0FEVmAgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBXaGF0IGFyZSB0aGUgZ2F0aW5nIG9wdGlvbnM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgb3Iga2VybmVsIGZlYXR1cmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBjb25mbGljdGluZyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHByZXZlbnQgaXQgZnJvbSBiZWluZyBlbmFibGVkIGluIGNlcnRhaW4gc2NlbmFyaW9zPyBVbmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBvciBjdXN0b21pemluZyBpdHMgYmVoYXZpb3IgbGF0ZXIgb24uIFRoaXMgaXMgd2hlcmUgdGhlIGZ1biBiZWdpbnMuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgYEtjb25maWdgIGZpbGVzIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0JBVE1BTl9BRFYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzcwMzYKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipOYXZpZ2F0aW5nIHRoZSBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSBhIHNwZWNpZmljIG5ldHdvcmsgY29uZmlndXJhdGlvbiBvcHRpb24gcmVzaWRlcy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCB0aGUgTGludXgga2VybmVsJiMzOTtzIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBpcyB0byBzdGFydCB3aXRoIHRoZSBmb3VuZGF0aW9uYWwgYG5ldC9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhbnl0aGluZyBuZXR3b3JrLXJlbGF0ZWQuIElmIGl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzIHRoZXJlLCBvciBpZiBJIHN1c3BlY3QgdGhpcyBvcHRpb24gbWlnaHQgYmUgcGFydCBvZiBhbiBhZGQtb24gb3IgYSBtb3JlIHNwZWNpYWxpemVkIHBhcnQgb2YgbmV0d29ya2luZyBJJiMzOTtsbCBuZWVkIHRvIGdvIGRlZXBlci4gU28sIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgYG5ldC9LY29uZmlnYCBvciwgc2luY2UgaXQmIzM5O3MgYSBwb3NzaWJpbGl0eSwgdGhhdCBJIGFtIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgaW4gYmF0bWFuLWFkdiwgSSYjMzk7bGwgZ28gZm9yIHRoZSBzcGVjaWZpYyBgc291cmNlICYjMzQ7bmV0L2JhdG1hbi1hZHYvS2NvbmZpZyYjMzQ7YCBmaWxlIGFuZCBpbnZlc3RpZ2F0ZSBpdCB0aG9yb3VnaGx5LiBJIGFtIHByZXR0eSBjb25maWRlbnQgSSYjMzk7bGwgZmluZCBteSBhbnN3ZXIgaW4gb25lIG9mIHRob3NlIHR3byBsb2NhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdG1hbi1hZHYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDU3MSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L0tjb25maWc9MjcyPXNvdXJjZSBcJiMzNDtuZXQvZG5zX3Jlc29sdmVyL0tjb25maWdcJiMzNDtcbm5ldC9LY29uZmlnOjI3Mzpzb3VyY2UgXCYjMzQ7bmV0L2JhdG1hbi1hZHYvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjc0LXNvdXJjZSBcJiMzNDtuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ1wmIzM0O1xuLS1cbm5ldC9NYWtlZmlsZT01OT1vYmotJChDT05GSUdfQ0VQSF9MSUIpXHRcdCYjNDM7PSBjZXBoL1xubmV0L01ha2VmaWxlOjYwOm9iai0kKENPTkZJR19CQVRNQU5fQURWKVx0JiM0Mzs9IGJhdG1hbi1hZHYvXG5uZXQvTWFrZWZpbGUtNjEtb2JqLSQoQ09ORklHX05GQylcdFx0JiM0Mzs9IG5mYy9cbi0tXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZS01LVxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkFUTUFOX0FEVikgJiM0Mzs9IGJhdG1hbi1hZHYub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6NzpiYXRtYW4tYWR2LXkgJiM0Mzs9IGJhdF9hbGdvLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjg6YmF0bWFuLWFkdi15ICYjNDM7PSBiYXRfaXZfb2dtLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjk6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WKSAmIzQzOz0gYmF0X3Yub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTA6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WKSAmIzQzOz0gYmF0X3ZfZWxwLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjExOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVikgJiM0Mzs9IGJhdF92X29nbS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxMjpiYXRtYW4tYWR2LXkgJiM0Mzs9IGJpdGFycmF5Lm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjEzOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CTEEpICYjNDM7PSBicmlkZ2VfbG9vcF9hdm9pZGFuY2Uub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTQ6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0RBVCkgJiM0Mzs9IGRpc3RyaWJ1dGVkLWFycC10YWJsZS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxNTpiYXRtYW4tYWR2LXkgJiM0Mzs9IGZyYWdtZW50YXRpb24ub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTY6YmF0bWFuLWFkdi15ICYjNDM7PSBnYXRld2F5X2NsaWVudC5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxNzpiYXRtYW4tYWR2LXkgJiM0Mzs9IGdhdGV3YXlfY29tbW9uLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjE4OmJhdG1hbi1hZHYteSAmIzQzOz0gaGFyZC1pbnRlcmZhY2Uub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTk6YmF0bWFuLWFkdi15ICYjNDM7PSBoYXNoLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjIwOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9ERUJVRykgJiM0Mzs9IGxvZy5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToyMTpiYXRtYW4tYWR2LXkgJiM0Mzs9IG1haW4ub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MjI6YmF0bWFuLWFkdi15ICYjNDM7PSBtZXNoLWludGVyZmFjZS5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToyMzpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfTUNBU1QpICYjNDM7PSBtdWx0aWNhc3Qub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MjQ6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX01DQVNUKSAmIzQzOz0gbXVsdGljYXN0X2Zvcncub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MjU6YmF0bWFuLWFkdi15ICYjNDM7PSBuZXRsaW5rLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjI2OmJhdG1hbi1hZHYteSAmIzQzOz0gb3JpZ2luYXRvci5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToyNzpiYXRtYW4tYWR2LXkgJiM0Mzs9IHJvdXRpbmcub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6Mjg6YmF0bWFuLWFkdi15ICYjNDM7PSBzZW5kLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjI5OmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9UUkFDSU5HKSAmIzQzOz0gdHJhY2Uub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MzA6YmF0bWFuLWFkdi15ICYjNDM7PSB0cF9tZXRlci5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTozMTpiYXRtYW4tYWR2LXkgJiM0Mzs9IHRyYW5zbGF0aW9uLXRhYmxlLm9cbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjMyOmJhdG1hbi1hZHYteSAmIzQzOz0gdHZsdi5vXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTozMzpiYXRtYW4tYWR2LXkgJiM0Mzs9IHZlcnNpb24ub1xubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMzQtXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uYz0yNj1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgYmF0YWR2X2FsZ29fbGlzdDtcbi0tXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTI4LS8qKlxubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uYzoyOTogKiBiYXRhZHZfYWxnb19pbml0KCkgLSBJbml0aWFsaXplIGJhdG1hbi1hZHYgYWxnb3JpdGhtIG1hbmFnZW1lbnQgZGF0YVxubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uYy0zMC0gKiAgc3RydWN0dXJlc1xuLS1cbm5ldC9iYXRtYW4tYWR2L2JhdF9hbGdvLmM9MTA3PWludCBiYXRhZHZfYWxnb19zZWxlY3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgY2hhciAqbmFtZSlcbi0tXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTEyNC0gKlxubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uYzoxMjU6ICogQ2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIGFsZ29yaXRobSBpcyBrbm93biB0byBiYXRtYW4tYWR2IGFuZCB0aGVuIHN0b3JlXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTEyNi0gKiB0aGUgbmFtZSBhcyB0aGUgbmV3IGRlZmF1bHQgcm91dGluZyBhbGdvcml0aG0uXG4tLVxubmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmM9MjMwPWJhdGFkdl92X2VscF93aWZpX25laWdoX3Byb2JlKHN0cnVjdCBiYXRhZHZfaGFyZGlmX25laWdoX25vZGUgKm5laWdoKVxuLS1cbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jLTI0OC1cdCAqIGFsZ29yaXRobSBzYW1wbGluZyBpbnRlcnZhbCAobWluc3RyZWwpLiBJbiB0aGlzIHdheSwgaWYgbm90XG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYzoyNDk6XHQgKiBlbm91Z2ggdHJhZmZpYyBoYXMgYmVlbiBzZW50IHRvIHRoZSBuZWlnaGJvciwgYmF0bWFuLWFkdiBjYW5cbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jLTI1MC1cdCAqIGdlbmVyYXRlIDIgcHJvYmUgcGFja2V0cyBhbmQgcHVzaCB0aGUgUkMgYWxnb3JpdGhtIHRvIHBlcmZvcm1cbi0tXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYz0yOTA9c3RhdGljIHZvaWQgYmF0YWR2X3ZfZWxwX3BlcmlvZGljX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuLS1cbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jLTMzOC1cdC8qIFRoZSB0aHJvdWdocHV0IG1ldHJpYyBpcyB1cGRhdGVkIG9uIGVhY2ggc2VudCBwYWNrZXQuIFRoaXMgd2F5LCBpZiBhXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYzozMzk6XHQgKiBub2RlIGlzIGRlYWQgYW5kIG5vIGxvbmdlciBzZW5kcyBwYWNrZXRzLCBiYXRtYW4tYWR2IGlzIHN0aWxsIGFibGUgdG9cbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jLTM0MC1cdCAqIHJlYWN0IHRpbWVseSB0byBpdHMgZGVhdGguXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9NjQ9ZW51bSBiYXRhZHZfYm9vdGh0eXBlIHtcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy02OS0vKipcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjcwOiAqIGVudW0gYmF0YWR2X2RoY3BvcHRpb25jb2RlIC0gREhDUCBvcHRpb24gY29kZXMgcmVsZXZhbnQgZm9yIGJhdG1hbi1hZHYgREFUXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy03MS0gKi9cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTcyPWVudW0gYmF0YWR2X2RoY3BvcHRpb25jb2RlIHtcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy04My0vKipcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjg0OiAqIGVudW0gYmF0YWR2X2RoY3B0eXBlIC0gREhDUCBtZXNzYWdlIHR5cGVzIHJlbGV2YW50IGZvciBiYXRtYW4tYWR2IERBVFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtODUtICovXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9MTA4Mj1zdGF0aWMgdTE2IGJhdGFkdl9hcnBfZ2V0X3R5cGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMTUyLSAqIEBza2I6IHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgcGFja2V0IHRvIGV4dHJhY3QgdGhlIFZJRCBmcm9tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzoxMTUzOiAqIEBoZHJfc2l6ZTogdGhlIHNpemUgb2YgdGhlIGJhdG1hbi1hZHYgaGVhZGVyIGVuY2Fwc3VsYXRpbmcgdGhlIHBhY2tldFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTE1NC0gKlxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTE4NTc9dm9pZCBiYXRhZHZfZGF0X3Nub29wX291dGdvaW5nX2RoY3BfYWNrKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTg3OS0gKiBAc2tiOiB0aGUgcGFja2V0IHRvIHNub29wXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzoxODgwOiAqIEBoZHJfc2l6ZTogaGVhZGVyIHNpemUsIHVwIHRvIHRoZSB0YWlsIG9mIHRoZSBiYXRtYW4tYWR2IGhlYWRlclxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTg4MS0gKlxuLS1cbm5ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uYz01MDU9aW50IGJhdGFkdl9mcmFnX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jLTU1MS1cdCAqIGxpbmVhcml6ZWQgdG8gYXZvaWQgaW5jb3JyZWN0IGxlbmd0aCBpbmZvcm1hdGlvbiBhZnRlciBhbGxcbm5ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uYzo1NTI6XHQgKiBiYXRtYW4tYWR2IGZyYWdtZW50cyB3ZXJlIGNyZWF0ZWQgYW5kIHN1Ym1pdHRlZCB0byB0aGVcbm5ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uYy01NTMtXHQgKiBoYXJkLWludGVyZmFjZVxuLS1cbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmM9MTc4PXZvaWQgYmF0YWR2X2d3X2NoZWNrX2NsaWVudF9zdG9wKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4tLVxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYy0xOTMtXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jOjE5NDpcdC8qIGlmIGJhdG1hbi1hZHYgaXMgc3dpdGNoaW5nIHRoZSBndyBjbGllbnQgbW9kZSBvZmYgYW5kIGEgZ2F0ZXdheSB3YXNcbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMtMTk1LVx0ICogYWxyZWFkeSBzZWxlY3RlZCwgc2VuZCBhIERFTCB1ZXZlbnRcbi0tXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jPTUxNj1pbnQgYmF0YWR2X2d3X2R1bXAoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuLS1cbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMtNTUzLSAqIEBza2I6IHRoZSBwYWNrZXQgdG8gY2hlY2tcbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmM6NTU0OiAqIEBoZWFkZXJfbGVuOiBhIHBvaW50ZXIgdG8gdGhlIGJhdG1hbi1hZHYgaGVhZGVyIHNpemVcbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMtNTU1LSAqIEBjaGFkZHI6IGJ1ZmZlciB3aGVyZSB0aGUgY2xpZW50IGFkZHJlc3Mgd2lsbCBiZSBzdG9yZWQuIFZhbGlkXG4tLVxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYz0xMjc9c3RhdGljIGJvb2wgYmF0YWR2X211dHVhbF9wYXJlbnRzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYxLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtMTUyLSAqXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jOjE1MzogKiBJZiB0aGUgdXNlciBjcmVhdGVzIGFueSB2aXJ0dWFsIGRldmljZSBvbiB0b3Agb2YgYSBiYXRtYW4tYWR2IGludGVyZmFjZSwgaXRcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtMTU0LSAqIGlzIGltcG9ydGFudCB0byBwcmV2ZW50IHRoaXMgbmV3IGludGVyZmFjZSBmcm9tIGJlaW5nIHVzZWQgdG8gY3JlYXRlIGEgbmV3XG4tLVxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy0xNTYtICogY29uZmlndXJhdGlvbikuIFRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgY2hlY2tzIGFsbCB0aGUgZmF0aGVycyBvZiB0aGVcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6MTU3OiAqIGRldmljZSBwYXNzZWQgYXMgYXJndW1lbnQgbG9va2luZyBmb3IgYSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlLlxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy0xNTgtICpcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6MTU5OiAqIFJldHVybjogdHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGRlc2NlbmRhbnQgb2YgYSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlIChvclxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYzoxNjA6ICogaWYgaXQgaXMgYSBiYXRtYW4tYWR2IGludGVyZmFjZSBpdHNlbGYpLCBmYWxzZSBvdGhlcndpc2Vcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtMTYxLSAqL1xubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYz0xNjI9c3RhdGljIGJvb2wgYmF0YWR2X2lzX29uX2JhdG1hbl9pZmFjZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldilcbi0tXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTE2OS1cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6MTcwOlx0LyogY2hlY2sgaWYgdGhpcyBpcyBhIGJhdG1hbi1hZHYgbWVzaCBpbnRlcmZhY2UgKi9cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtMTcxLVx0aWYgKGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQobmV0X2RldikpXG4tLVxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy0yMDUtICogUmVmdXNlIGxvb3BiYWNrIGRldmljZXMsIG5vbi1FdGhlcm5ldCBkZXZpY2VzLCBkZXZpY2VzIHdpdGggYSBub24tRXRoZXJuZXRcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6MjA2OiAqIGFkZHJlc3MgbGVuZ3RoIGFuZCBhbnkgZGV2aWNlIHRoYXQgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgYmF0bWFuLWFkdiBtZXNoXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTIwNy0gKiBpbnRlcmZhY2Ugc3RhY2suXG4tLVxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYz02NTM9aW50IGJhdGFkdl9oYXJkaWZfbWluX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSlcbi0tXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTY4Mi1cdC8qIHJlcG9ydCB0byB0aGUgb3RoZXIgY29tcG9uZW50cyB0aGUgbWF4aW11bSBhbW91bnQgb2YgYnl0ZXMgdGhhdFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYzo2ODM6XHQgKiBiYXRtYW4tYWR2IGNhbiBzZW5kIG92ZXIgdGhlIHdpcmUgKHdpdGhvdXQgY29uc2lkZXJpbmcgdGhlIHBheWxvYWRcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtNjg0LVx0ICogb3ZlcmhlYWQpLiBGb3IgZXhhbXBsZSwgdGhpcyB2YWx1ZSBpcyB1c2VkIGJ5IFRUIHRvIGNvbXB1dGUgdGhlXG4tLVxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYz03OTQ9aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldixcbi0tXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTg2NC1cdFx0YmF0YWR2X2luZm8oaGFyZF9pZmFjZS1cdTAwM2VtZXNoX2lmYWNlLFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYzo4NjU6XHRcdFx0ICAgIFwmIzM0O1RoZSBNVFUgb2YgaW50ZXJmYWNlICVzIGlzIHRvbyBzbWFsbCAoJWkpIHRvIGhhbmRsZSB0aGUgdHJhbnNwb3J0IG9mIGJhdG1hbi1hZHYgcGFja2V0cy4gUGFja2V0cyBnb2luZyBvdmVyIHRoaXMgaW50ZXJmYWNlIHdpbGwgYmUgZnJhZ21lbnRlZCBvbiBsYXllcjIgd2hpYy4uLlxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy04NjYtXHRcdFx0ICAgIGhhcmRfaWZhY2UtXHUwMDNlbmV0X2Rldi1cdTAwM2VuYW1lLCBoYXJkaWZfbXR1LFxuLS1cbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtODcwLVx0XHRiYXRhZHZfaW5mbyhoYXJkX2lmYWNlLVx1MDAzZW1lc2hfaWZhY2UsXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jOjg3MTpcdFx0XHQgICAgXCYjMzQ7VGhlIE1UVSBvZiBpbnRlcmZhY2UgJXMgaXMgdG9vIHNtYWxsICglaSkgdG8gaGFuZGxlIHRoZSB0cmFuc3BvcnQgb2YgYmF0bWFuLWFkdiBwYWNrZXRzLiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyBnZXR0aW5nIHRyYWZmaWMgdGhyb3VnaCB0cnkgaW5jcmVhc2luZyB0Li4uXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTg3Mi1cdFx0XHQgICAgaGFyZF9pZmFjZS1cdTAwM2VuZXRfZGV2LVx1MDAzZW5hbWUsIGhhcmRpZl9tdHUsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jPTgwPXN0YXRpYyBjaGFyICpiYXRhZHZfdWV2X3R5cGVfc3RyW10gPSB7XG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTg1LS8qKlxubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjg2OiAqIGJhdGFkdl9pbml0KCkgLSBiYXRtYW4tYWR2IG1vZHVsZSBpbml0IGZ1bmN0aW9uXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtODctICpcbi0tXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9OTM9c3RhdGljIGludCBfX2luaXQgYmF0YWR2X2luaXQodm9pZClcbi0tXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMTYyLS8qKlxubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjE2MzogKiBiYXRhZHZfZXhpdCgpIC0gYmF0bWFuLWFkdiBtb2R1bGUgZXhpdCBmdW5jdGlvblxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTE2NC0gKlxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYz01NTQ9c3RhdGljIHZvaWQgYmF0YWR2X3JlY3ZfaGFuZGxlcl9pbml0KHZvaWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTYwMy0vKipcbm5ldC9iYXRtYW4tYWR2L21haW4uYzo2MDQ6ICogYmF0YWR2X3JlY3ZfaGFuZGxlcl9yZWdpc3RlcigpIC0gUmVnaXN0ZXIgaGFuZGxlciBmb3IgYmF0bWFuLWFkdiBwYWNrZXQgdHlwZVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTYwNS0gKiBAcGFja2V0X3R5cGU6IGJhdGFkdl9wYWNrZXR0eXBlIHdoaWNoIHNob3VsZCBiZSBoYW5kbGVkXG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jPTY4Nz1ib29sIGJhdGFkdl92bGFuX2FwX2lzb2xhX2dldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTcwNC0vKipcbm5ldC9iYXRtYW4tYWR2L21haW4uYzo3MDU6ICogYmF0YWR2X3Rocm93X3VldmVudCgpIC0gU2VuZCBhbiB1ZXZlbnQgd2l0aCBiYXRtYW4tYWR2IHNwZWNpZmljIGVudiBkYXRhXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtNzA2LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uaC0xMi0jZGVmaW5lIEJBVEFEVl9EUklWRVJfREVTQyAgIFwmIzM0O0IuQS5ULk0uQS5OLiBhZHZhbmNlZFwmIzM0O1xubmV0L2JhdG1hbi1hZHYvbWFpbi5oOjEzOiNkZWZpbmUgQkFUQURWX0RSSVZFUl9ERVZJQ0UgXCYjMzQ7YmF0bWFuLWFkdlwmIzM0O1xubmV0L2JhdG1hbi1hZHYvbWFpbi5oLTE0LVxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uaD0xNzA9ZW51bSBiYXRhZHZfdWV2X3R5cGUge1xuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uaC0xOTUtI2VuZGlmXG5uZXQvYmF0bWFuLWFkdi9tYWluLmg6MTk2Oi8qIEFwcGVuZCAmIzM5O2JhdG1hbi1hZHY6ICYjMzk7IGJlZm9yZSBrZXJuZWwgbWVzc2FnZXMgKi9cbm5ldC9iYXRtYW4tYWR2L21haW4uaC0xOTctI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcJiMzNDs6IFwmIzM0OyBmbXRcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTIxMz1zdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDQyLS8qKlxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo0NDM6ICogYmF0YWR2X2ludGVyZmFjZV9yeCgpIC0gcmVjZWl2ZSBldGhlcm5ldCBmcmFtZSBvbiBsb2NhbCBiYXRtYW4tYWR2IGludGVyZmFjZVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00NDQtICogQG1lc2hfaWZhY2U6IGxvY2FsIGludGVyZmFjZSB3aGljaCB3aWxsIHJlY2VpdmUgdGhlIGV0aGVybmV0IGZyYW1lXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ0NS0gKiBAc2tiOiBldGhlcm5ldCBmcmFtZSBmb3IgQG1lc2hfaWZhY2Vcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NDQ2OiAqIEBoZHJfc2l6ZTogc2l6ZSBvZiBhbHJlYWR5IHBhcnNlZCBiYXRtYW4tYWR2IGhlYWRlclxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo0NDc6ICogQG9yaWdfbm9kZTogb3JpZ2luYXRvciBmcm9tIHdoaWNoIHRoZSBiYXRtYW4tYWR2IHBhY2tldCB3YXMgc2VudFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00NDgtICpcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDQ5LSAqIFNlbmRzIGFuIGV0aGVybmV0IGZyYW1lIHRvIHRoZSByZWNlaXZlIHBhdGggb2YgdGhlIGxvY2FsIEBtZXNoX2lmYWNlLlxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo0NTA6ICogc2tiLVx1MDAzZWRhdGEgbXVzdCBzdGlsbCBwb2ludCB0byB0aGUgYmF0bWFuLWFkdiBoZWFkZXIgd2l0aCB0aGUgc2l6ZSBAaGRyX3NpemUuXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ1MS0gKiBUaGUgY2FsbGVyIGhhcyB0byBoYXZlIHBhcnNlZCB0aGlzIGhlYWRlciBhbHJlYWR5IGFuZCBtYWRlIHN1cmUgdGhhdCBhdCBsZWFzdFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDU0LSAqIFRoZSBwYWNrZXQgbWF5IHN0aWxsIGdldCBkcm9wcGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiB0aGUgZW5jYXBzdWxhdGVkXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjQ1NTogKiBldGhlcm5ldCBmcmFtZSBpcyBpbnZhbGlkIG9yIGNvbnRhaW5zIGFnYWluIGEgYmF0bWFuLWFkdiBwYWNrZXQuIEFsc29cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDU2LSAqIHVuaWNhc3QgcGFja2V0cyB3aWxsIGJlIGRyb3BwZWQgZGlyZWN0bHkgd2hlbiB0aGV5IHdlcmUgc2VudCBiZXR3ZWVuIHR3b1xuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NDU5PXZvaWQgYmF0YWR2X2ludGVyZmFjZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ3NS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NDc2Olx0LyogY2xlYW4gdGhlIG5ldGZpbHRlciBzdGF0ZSBub3cgdGhhdCB0aGUgYmF0bWFuLWFkdiBoZWFkZXIgaGFzIGJlZW5cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDc3LVx0ICogcmVtb3ZlZFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9Njc0PXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY4MC1cdC8qIG9ubHkgODAyLjFRIHZsYW5zIGFyZSBzdXBwb3J0ZWQuXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY4MTpcdCAqIGJhdG1hbi1hZHYgZG9lcyBub3Qga25vdyBob3cgdG8gaGFuZGxlIG90aGVyIHR5cGVzXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTY4Mi1cdCAqL1xuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NzI5PXN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9raWxsX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMTYgcHJvdG8sXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy03MzQtXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjczNTpcdC8qIG9ubHkgODAyLjFRIHZsYW5zIGFyZSBzdXBwb3J0ZWQuIGJhdG1hbi1hZHYgZG9lcyBub3Qga25vdyBob3cgdG9cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNzM2LVx0ICogaGFuZGxlIG90aGVyIHR5cGVzXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy03NTgtXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjc1OTovKiBiYXRtYW4tYWR2IG5ldHdvcmsgZGV2aWNlcyBoYXZlIGRldmljZXMgbmVzdGluZyBiZWxvdyBpdCBhbmQgYXJlIGEgc3BlY2lhbFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy03NjAtICogXCYjMzQ7c3VwZXIgY2xhc3NcJiMzNDsgb2Ygbm9ybWFsIG5ldHdvcmsgZGV2aWNlczsgc3BsaXQgdGhlaXIgbG9ja3Mgb2ZmIGludG8gYVxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9MTEzMz1zdGF0aWMgaW50IGJhdGFkdl9tZXNoaWZfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTE1NC0gKiAgbmV0bGlua1xubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMTU1OiAqIEBtZXNoX2lmYWNlOiB0aGUgdG8tYmUtcmVtb3ZlZCBiYXRtYW4tYWR2IGludGVyZmFjZVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMTU2LSAqIEBoZWFkOiBsaXN0IHBvaW50ZXJcbi0tXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTExNTg9c3RhdGljIHZvaWQgYmF0YWR2X21lc2hpZl9kZXN0cm95X25ldGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsXG4tLVxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMTc0LSAqXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjExNzU6ICogUmV0dXJuOiB0cnVlIHdoZW4gbmV0X2RldiBpcyBhIGJhdG1hbi1hZHYgaW50ZXJmYWNlLCBmYWxzZSBvdGhlcndpc2Vcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTE3Ni0gKi9cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz03MTQ9c3RhdGljIHZvaWQgYmF0YWR2X21jYXN0X21sYV90dF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy03NTItICogYmVoaW5kIG91ciBsb2NhbCBicmlkZ2Ugc2VnbWVudDogU25vb3Bpbmcgc3dpdGNoZXMgd2lsbCBkaXJlY3RseVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6NzUzOiAqIGZvcndhcmQgbGlzdGVuZXIgcmVwb3J0cyB0byB0aGUgcXVlcmllciwgdGhlcmVmb3JlIGJhdG1hbi1hZHYgYW5kXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy03NTQtICogdGhlIGJyaWRnZSB3aWxsIHBvdGVudGlhbGx5IG5vdCBzZWUgdGhlc2UgbGlzdGVuZXJzIC0gdGhlIHF1ZXJpZXIgaXNcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xMTY1PXN0YXRpYyBpbnQgYmF0YWR2X21jYXN0X2ZvcndfcnRyX2NvdW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE4Ny0gKiBtb2RlIHRvIHVzZS4gRm9yIEJBVEFEVl9GT1JXX01DQVNUIGl0IGFsc28gZW5jYXBzdWxhdGVzIHRoZSBwYWNrZXQgd2l0aCBhXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMTg4OiAqIGNvbXBsZXRlIGJhdG1hbi1hZHYgbXVsdGljYXN0IGhlYWRlci5cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTExODktICpcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMTkzLSAqXHRhbmQgdGhlIGVuY2Fwc3VsYXRlZCBtdWx0aWNhc3QgcGFja2V0IHdpdGggYWxsIGRlc3RpbmF0aW9uIGFkZHJlc3Nlc1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTE5NDogKlx0d291bGQgc3RpbGwgZml0IGludG8gYW4gMTI4MCBieXRlcyBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTExOTUtICpcdChleGNsdWRpbmcgdGhlIG91dGVyIGV0aGVybmV0IGZyYW1lKSBhbmQgd2UgY291bGQgc3VjY2Vzc2Z1bGx5IHB1c2hcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExOTY6ICpcdHRoZSBmdWxsIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCBoZWFkZXIuXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMTk3OiAqXHRCQVRBRFZfRk9SV19VQ0FTVFM6IElmIHRoZSBwYWNrZXQgY2Fubm90IGJlIHNlbnQgaW4gYSBiYXRtYW4tYWR2XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMTk4OiAqXHRtdWx0aWNhc3QgcGFja2V0IGFuZCB0aGUgYW1vdW50IG9mIGJhdG1hbi1hZHYgdW5pY2FzdCBwYWNrZXRzIG5lZWRlZFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE5OS0gKlx0aXMgc21hbGxlciBvciBlcXVhbCB0byB0aGUgY29uZmlndXJlZCBtdWx0aWNhc3QgZmFub3V0LlxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEyODA9c3RhdGljIGludCBiYXRhZHZfbWNhc3RfZm9yd19zZW5kX29yaWcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzA3LSAqIGxpc3RlbmVyIHJlZ2lzdGVyZWQgaW4gdGhlIHRyYW5zbGF0aW9uIHRhYmxlLiBBIHRyYW5zbWlzc2lvbiBpcyBwZXJmb3JtZWRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzMDg6ICogdmlhIGEgYmF0bWFuLWFkdiB1bmljYXN0IHBhY2tldCBmb3IgZWFjaCBzdWNoIGRlc3RpbmF0aW9uIG5vZGUuXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzA5LSAqXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTMxND1iYXRhZHZfbWNhc3RfZm9yd190dChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNTMtICogQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQgZmxhZyBzZXQuIEEgdHJhbnNtaXNzaW9uIGlzIHBlcmZvcm1lZCB2aWEgYVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTM1NDogKiBiYXRtYW4tYWR2IHVuaWNhc3QgcGFja2V0IGZvciBlYWNoIHN1Y2ggZGVzdGluYXRpb24gbm9kZS5cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNTUtICpcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xMzYwPWJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfYWxsX2lwdjQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzkwLSAqIEJBVEFEVl9NQ0FTVF9XQU5UX0FMTF9JUFY2IGZsYWcgc2V0LiBBIHRyYW5zbWlzc2lvbiBpcyBwZXJmb3JtZWQgdmlhIGFcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzOTE6ICogYmF0bWFuLWFkdiB1bmljYXN0IHBhY2tldCBmb3IgZWFjaCBzdWNoIGRlc3RpbmF0aW9uIG5vZGUuXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzkyLSAqXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTM5Nz1iYXRhZHZfbWNhc3RfZm9yd193YW50X2FsbF9pcHY2KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTQyNy0gKiBCQVRBRFZfTUNBU1RfV0FOVF9BTExfSVBWNCBvciBCQVRBRFZfTUNBU1RfV0FOVF9BTExfSVBWNiBmbGFnIHNldC4gQVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTQyODogKiB0cmFuc21pc3Npb24gaXMgcGVyZm9ybWVkIHZpYSBhIGJhdG1hbi1hZHYgdW5pY2FzdCBwYWNrZXQgZm9yIGVhY2ggc3VjaFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTQyOS0gKiBkZXN0aW5hdGlvbiBub2RlLlxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE0MzU9YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGwoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNDU2LSAqIEJBVEFEVl9NQ0FTVF9XQU5UX05PX1JUUjQgZmxhZyB1bnNldC4gQSB0cmFuc21pc3Npb24gaXMgcGVyZm9ybWVkIHZpYSBhXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNDU3OiAqIGJhdG1hbi1hZHYgdW5pY2FzdCBwYWNrZXQgZm9yIGVhY2ggc3VjaCBkZXN0aW5hdGlvbiBub2RlLlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTQ1OC0gKlxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE0NjM9YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGxfcnRyNChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE0OTMtICogQkFUQURWX01DQVNUX1dBTlRfTk9fUlRSNiBmbGFnIHVuc2V0LiBBIHRyYW5zbWlzc2lvbiBpcyBwZXJmb3JtZWQgdmlhIGFcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE0OTQ6ICogYmF0bWFuLWFkdiB1bmljYXN0IHBhY2tldCBmb3IgZWFjaCBzdWNoIGRlc3RpbmF0aW9uIG5vZGUuXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNDk1LSAqXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTUwMD1iYXRhZHZfbWNhc3RfZm9yd193YW50X2FsbF9ydHI2KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTUzMC0gKiBCQVRBRFZfTUNBU1RfV0FOVF9OT19SVFI0IG9yIEJBVEFEVl9NQ0FTVF9XQU5UX05PX1JUUjYgZmxhZyB1bnNldC4gQVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTUzMTogKiB0cmFuc21pc3Npb24gaXMgcGVyZm9ybWVkIHZpYSBhIGJhdG1hbi1hZHYgdW5pY2FzdCBwYWNrZXQgZm9yIGVhY2ggc3VjaFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTUzMi0gKiBkZXN0aW5hdGlvbiBub2RlLlxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE1Mzg9YmF0YWR2X21jYXN0X2Zvcndfd2FudF9ydHIoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNTYwLSAqIGludGVyZXN0IGluIGl0LCB0aGF0IGlzIGVpdGhlciB2aWEgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIG9yIHRoZSBhY2NvcmRpbmdcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE1NjE6ICogd2FudC1hbGwgZmxhZ3MuIEEgdHJhbnNtaXNzaW9uIGlzIHBlcmZvcm1lZCB2aWEgYSBiYXRtYW4tYWR2IHVuaWNhc3QgcGFja2V0XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNTYyLSAqIGZvciBlYWNoIHN1Y2ggZGVzdGluYXRpb24gbm9kZS5cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaD0xOT1lbnVtIGJhdGFkdl9mb3J3X21vZGUge1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmgtMjAtXHQvKipcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oOjIxOlx0ICogQEJBVEFEVl9GT1JXX0JDQVNUOiBmb3J3YXJkIHRoZSBwYWNrZXQgdG8gYWxsIG5vZGVzIHZpYSBhIGJhdG1hbi1hZHZcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oLTIyLVx0ICogIGJyb2FkY2FzdCBwYWNrZXRcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC0yNy1cdCAqIEBCQVRBRFZfRk9SV19VQ0FTVFM6IGZvcndhcmQgdGhlIHBhY2tldCB0byBzb21lIG5vZGVzIHZpYSBvbmVcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oOjI4Olx0ICogIG9yIG1vcmUgYmF0bWFuLWFkdiB1bmljYXN0IHBhY2tldHNcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oLTI5LVx0ICovXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmgtMzMtXHQgKiBAQkFUQURWX0ZPUldfTUNBU1Q6IGZvcndhcmQgdGhlIHBhY2tldCB0byBzb21lIG5vZGVzIHZpYSBhXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaDozNDpcdCAqICBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oLTM1LVx0ICovXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYz01ODM9YmF0YWR2X21jYXN0X2ZvcndfcHVzaF90dmx2cyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtNjA1LSAqXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjYwNjogKiBQdXNoZXMgYSBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQgaGVhZGVyIG9udG8gdGhlIGdpdmVuIHNrYiBhbmQgc2V0c1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy02MDctICogdGhlIHByb3ZpZGVkIHRvdGFsIFRWTFYgbGVuZ3RoIHZhbHVlIGluIGl0LlxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM9NjE1PWJhdGFkdl9tY2FzdF9mb3J3X3B1c2hfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIHNob3J0IHR2bHZfbGVuKVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtNjQxLSAqXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjY0MjogKiBUaGlzIHNvcnRzIGRlc3RpbmF0aW9uIGVudHJpZXMgaW50byBlaXRoZXIgdGhlIG9yaWdpbmFsIGJhdG1hbi1hZHZcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtNjQzLSAqIG11bHRpY2FzdCBwYWNrZXQgb3IgdGhlIHNrYiAoY29weSkgdGhhdCBpcyBnb2luZyB0byBiZSBzZW50IHRvIGNvbXBfbmVpZ2hcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTY0NS0gKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo2NDY6ICogSW4gcHJlcGFyYXRpb24gZm9yIHRoZSBuZXh0LCB0byBiZSAodW5pY2FzdCkgdHJhbnNtaXR0ZWQgYmF0bWFuLWFkdiBtdWx0aWNhc3Rcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtNjQ3LSAqIHBhY2tldCBza2IgdG8gYmUgc2VudCB0byB0aGUgZ2l2ZW4gbmVpZ2hib3Igbm9kZSwgdHJpZXMgdG8gY29sbGVjdCBhbGxcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTcxMD1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfZm9yd19zaHJpbmtfZmlsbCh1OCAqc2xvdCwgdTE2IG51bV9kZXN0c19zbG90KVxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtNzM2LSAqIGJhdGFkdl9tY2FzdF9mb3J3X3Nocmlua19wYWNrX2Rlc3RzKCkgLSBwYWNrIGRlc3RpbmF0aW9ucyBvZiBhIHRyYWNrZXIgVFZMVlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo3Mzc6ICogQHNrYjogdGhlIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCB0byBjb21wYWN0IGRlc3RpbmF0aW9ucyBpblxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy03MzgtICpcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTc5Mj1iYXRhZHZfbWNhc3RfZm9yd19zaHJpbmtfYWxpZ25fb2Zmc2V0KHVuc2lnbmVkIGludCBudW1fZGVzdHNfb2xkLFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODA4LSAqIGJhdGFkdl9tY2FzdF9mb3J3X3Nocmlua191cGRhdGVfaGVhZGVycygpIC0gdXBkYXRlIHNocnVuayBtYyBwYWNrZXQgaGVhZGVyc1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4MDk6ICogQHNrYjogdGhlIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCB0byB1cGRhdGUgaGVhZGVycyBvZlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04MTAtICogQG51bV9kZXN0c19yZWR1Y2U6IHRoZSBudW1iZXIgb2YgZGVzdGluYXRpb25zIHRoYXQgd2VyZSByZW1vdmVkXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTgxMS0gKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4MTI6ICogVGhpcyB1cGRhdGVzIGFueSBmaWVsZHMgb2YgYSBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQgdGhhdCBhcmUgYWZmZWN0ZWRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODEzLSAqIGJ5IHRoZSByZWR1Y2VkIG51bWJlciBvZiBkZXN0aW5hdGlvbnMgaW4gdGhlIG11bHRpY2FzdCB0cmFja2V0IFRWTFYuIEluXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04MTctICogVGhlIFRWTFYgbGVuZ3RoIGZpZWxkIG9mIHRoZSBhY2NvcmRpbmcgZ2VuZXJpYyBUVkxWIGhlYWRlci5cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6ODE4OiAqIFRoZSBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQmIzM5O3MgdG90YWwgVFZMViBsZW5ndGggZmllbGQuXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTgxOS0gKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4MjA6ICogUmV0dXJuOiBUaGUgb2Zmc2V0IGluIHNrYiYjMzk7cyB0YWlsIGRpcmVjdGlvbiBhdCB3aGljaCB0aGUgbmV3IGJhdG1hbi1hZHZcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODIxLSAqIG11bHRpY2FzdCBwYWNrZXQgaGVhZGVyIG5lZWRzIHRvIHN0YXJ0LlxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM9ODI0PWJhdGFkdl9tY2FzdF9mb3J3X3Nocmlua191cGRhdGVfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODYwLSAqIGJhdGFkdl9tY2FzdF9mb3J3X3Nocmlua19tb3ZlX2hlYWRlcnMoKSAtIG1vdmUgbXVsdGljYXN0IGhlYWRlcnMgYnkgb2Zmc2V0XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjg2MTogKiBAc2tiOiB0aGUgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0IHRvIG1vdmUgaGVhZGVycyBmb3Jcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODYyLSAqIEBvZmZzZXQ6IGEgbm9uLW5lZ2F0aXZlIG9mZnNldCB0byBtb3ZlIGhlYWRlcnMgYnksIHRvd2FyZHMgdGhlIHNrYiB0YWlsXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTg2My0gKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4NjQ6ICogTW92ZXMgdGhlIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCBoZWFkZXIsIGl0cyBtdWx0aWNhc3QgdHJhY2tlciBUVkxWIGFuZFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04NjUtICogYW55IFRWTFZzIGluIGJldHdlZW4gYnkgdGhlIGdpdmVuIG9mZnNldCBpbiBkaXJlY3Rpb24gdG93YXJkcyB0aGUgdGFpbC5cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTg2OD1iYXRhZHZfbWNhc3RfZm9yd19zaHJpbmtfbW92ZV9oZWFkZXJzKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBvZmZzZXQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04ODUtICogYmF0YWR2X21jYXN0X2Zvcndfc2hyaW5rX3RyYWNrZXIoKSAtIHJlbW92ZSB6ZXJvIGFkZHJlc3NlcyBpbiBhIHRyYWNrZXIgdHZsdlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4ODY6ICogQHNrYjogdGhlIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCB0byAocG90ZW50aWFsbHkpIHNocmlua1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04ODctICpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODg4LSAqIFJlbW92ZXMgYWxsIGRlc3RpbmF0aW9ucyB3aXRoIGEgemVybyBNQUMgYWRkcmVzc2VzICgwMDowMDowMDowMDowMDowMCkgZnJvbVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4ODk6ICogdGhlIGdpdmVuIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCYjMzk7cyB0cmFja2VyIFRWTFYgYW5kIHVwZGF0ZXMgaGVhZGVyc1xubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4OTA6ICogYWNjb3JkaW5nbHkgdG8gbWFpbnRhaW4gYSB2YWxpZCBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQuXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTg5MS0gKi9cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM9ODkyPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF9mb3J3X3Nocmlua190cmFja2VyKHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy05MDUtLyoqXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjkwNjogKiBiYXRhZHZfbWNhc3RfZm9yd19wYWNrZXQoKSAtIGZvcndhcmQgYSBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtOTA3LSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo5MDg6ICogQHNrYjogdGhlIHJlY2VpdmVkIG9yIGxvY2FsbHkgZ2VuZXJhdGVkIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy05MDktICogQGxvY2FsX3htaXQ6IGluZGljYXRlcyB0aGF0IHRoZSBwYWNrZXQgd2FzIGxvY2FsbHkgZ2VuZXJhdGVkIGFuZCBub3QgcmVjZWl2ZWRcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtOTEwLSAqXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjkxMTogKiBQYXJzZXMgdGhlIHRyYWNrZXIgVFZMViBvZiBhIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCBhbmQgZm9yd2FyZHMgdGhlXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTkxMi0gKiBwYWNrZXQgYXMgaW5kaWNhdGVkIGluIHRoaXMgVFZMVi5cbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTkyND1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X3BhY2tldChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTAzMC0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6MTAzMTogKiBAc2tiOiB0aGUgcmVjZWl2ZWQgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwMzItICpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6MTAzMzogKiBQYXJzZXMgdGhlIHRyYWNrZXIgVFZMViBvZiBhbiBpbmNvbWluZyBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQgYW5kXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwMzQtICogZm9yd2FyZHMgdGhlIHBhY2tldCBhcyBpbmRpY2F0ZWQgaW4gdGhpcyBUVkxWLlxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM9MTA0Nj1pbnQgYmF0YWR2X21jYXN0X2ZvcndfdHJhY2tlcl90dmx2X2hhbmRsZXIoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwNTUtICpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6MTA1NjogKiBDYWxjdWxhdGVzIHRoZSB0b3RhbCBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQgaGVhZGVyIGxlbmd0aCBmb3IgYSBnaXZlblxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMDU3LSAqIG51bWJlciBvZiBkZXN0aW5hdGlvbiBub2RlcyAoZXhjbHVkaW5nIHRoZSBvdXRlciBldGhlcm5ldCBmcmFtZSkuXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwNTgtICpcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6MTA1OTogKiBSZXR1cm46IFRoZSBjYWxjdWxhdGVkIHRvdGFsIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCBoZWFkZXIgbGVuZ3RoLlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMDYwLSAqL1xuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM9MTA5MT1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X2V4cGFuZF9oZWFkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMTE4LS8qKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzoxMTE5OiAqIGJhdGFkdl9tY2FzdF9mb3J3X3B1c2goKSAtIGVuY2Fwc3VsYXRlIHNrYiBpbiBhIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMTIwLSAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuLS1cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTEyNS0gKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzoxMTI2OiAqIEVuY2Fwc3VsYXRlcyB0aGUgZ2l2ZW4gbXVsdGljYXN0IHBhY2tldCBpbiBhIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldC5cbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTEyNy0gKiBBIG11bHRpY2FzdCB0cmFja2VyIFRWTFYgd2l0aCBkZXN0aW5hdGlvbiBvcmlnaW5hdG9yIGFkZHJlc3NlcyBmb3IgYW55IG5vZGVcbi0tXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTExMzg9Ym9vbCBiYXRhZHZfbWNhc3RfZm9yd19wdXNoKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMTY3LS8qKlxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzoxMTY4OiAqIGJhdGFkdl9tY2FzdF9mb3J3X21jc2VuZCgpIC0gc2VuZCBhIHNlbGYgcHJlcGFyZWQgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0XG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTExNjktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4tLVxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMTcxLSAqXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjExNzI6ICogVHJhbnNtaXRzIGEgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0IHRoYXQgd2FzIGxvY2FsbHkgcHJlcGFyZWQgYW5kXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTExNzMtICogY29uc3VtZXMvZnJlZXMgaXQuXG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTUzPXN0cnVjdCBnZW5sX2ZhbWlseSBiYXRhZHZfbmV0bGlua19mYW1pbHk7XG4tLVxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTU1LS8qKlxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjU2OiAqIGVudW0gYmF0YWR2X25ldGxpbmtfbXVsdGljYXN0X2dyb3VwcyAtIGJhdG1hbi1hZHYgZ2VuZXJpYyBuZXRsaW5rIG11bHRpY2FzdFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTU3LSAqICBncm91cHNcbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9MTI5Nz1iYXRhZHZfZ2V0X3ZsYW5fZnJvbV9pbmZvKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTMxNS0vKipcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoxMzE2OiAqIGJhdGFkdl9wcmVfZG9pdCgpIC0gUHJlcGFyZSBiYXRtYW4tYWR2IGdlbmwgZG9pdCByZXF1ZXN0XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTMxNy0gKiBAb3BzOiByZXF1ZXN0ZWQgbmV0bGluayBvcGVyYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9MTMyMz1zdGF0aWMgaW50IGJhdGFkdl9wcmVfZG9pdChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcyxcbi0tXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTM4NC0vKipcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoxMzg1OiAqIGJhdGFkdl9wb3N0X2RvaXQoKSAtIEVuZCBiYXRtYW4tYWR2IGdlbmwgZG9pdCByZXF1ZXN0XG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMTM4Ni0gKiBAb3BzOiByZXF1ZXN0ZWQgbmV0bGluayBvcGVyYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmM9MTA5PWJhdGFkdl9vcmlnX25vZGVfdmxhbl9nZXQoc3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKm9yaWdfbm9kZSxcbi0tXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMtMTMyLS8qKlxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jOjEzMzogKiBiYXRhZHZfdmxhbl9pZF92YWxpZCgpIC0gY2hlY2sgaWYgdmxhbiBpZCBpcyBpbiB2YWxpZCBiYXRtYW4tYWR2IGVuY29kaW5nXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMtMTM0LSAqIEB2aWQ6IHRoZSBWTEFOIGlkZW50aWZpZXJcbi0tXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM9MTgyPWJvb2wgYmF0YWR2X2NoZWNrX21hbmFnZW1lbnRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTIxMy0vKipcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoyMTQ6ICogYmF0YWR2X3NrYl9kZWNyZW1lbnRfdHRsKCkgLSBkZWNyZW1lbnQgdHRsIGluIGEgYmF0bWFuLWFkdiBoZWFkZXIsIGNzdW0tc2FmZVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjIxNTogKiBAc2tiOiB0aGUgcmVjZWl2ZWQgcGFja2V0IHdpdGggQHNrYi1cdTAwM2VkYXRhIHBvaW50aW5nIHRvIHRoZSBiYXRtYW4tYWR2IGhlYWRlclxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTIxNi0gKlxuLS1cbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYz0xMjYzPWludCBiYXRhZHZfcmVjdl9iY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTM3OS0vKipcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoxMzgwOiAqIGJhdGFkdl9yZWN2X21jYXN0X3BhY2tldCgpIC0gcHJvY2VzcyByZWNlaXZlZCBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoxMzgxOiAqIEBza2I6IHRoZSByZWNlaXZlZCBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xMzgyLSAqIEByZWN2X2lmOiBpbnRlcmZhY2UgdGhhdCB0aGUgc2tiIGlzIHJlY2VpdmVkIG9uXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTM4My0gKlxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjEzODQ6ICogUGFyc2VzIHRoZSBnaXZlbiwgcmVjZWl2ZWQgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0LiBEZXBlbmRpbmcgb24gdGhlXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTM4NS0gKiBjb250ZW50cyBvZiBpdHMgVFZMViBmb3J3YXJkcyBpdCBhbmQvb3IgZGVjYXBzdWxhdGVzIGl0IHRvIGhhbmQgaXQgdG8gdGhlXG4tLVxubmV0L2JhdG1hbi1hZHYvc2VuZC5jPTI2OT1ib29sIGJhdGFkdl9zZW5kX3NrYl9wcmVwYXJlX3VuaWNhc3RfNGFkZHIoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmMtMzExLSAqXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmM6MzEyOiAqIFdyYXAgdGhlIGdpdmVuIHNrYiBpbnRvIGEgYmF0bWFuLWFkdiB1bmljYXN0IG9yIHVuaWNhc3QtNGFkZHIgaGVhZGVyXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmMtMzEzLSAqIGRlcGVuZGluZyBvbiB3aGV0aGVyIEJBVEFEVl9VTklDQVNUIG9yIEJBVEFEVl9VTklDQVNUXzRBRERSIHdhcyBzdXBwbGllZFxuLS1cbm5ldC9iYXRtYW4tYWR2L3NlbmQuYz0zMTg9aW50IGJhdGFkdl9zZW5kX3NrYl91bmljYXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTM4Ni0gKiBMb29rIHVwIHRoZSByZWNpcGllbnQgbm9kZSBmb3IgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gdGhlIGV0aGVybmV0XG5uZXQvYmF0bWFuLWFkdi9zZW5kLmM6Mzg3OiAqIGhlYWRlciB2aWEgdGhlIHRyYW5zbGF0aW9uIHRhYmxlLiBXcmFwIHRoZSBnaXZlbiBza2IgaW50byBhIGJhdG1hbi1hZHZcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy0zODgtICogdW5pY2FzdCBvciB1bmljYXN0LTRhZGRyIGhlYWRlciBkZXBlbmRpbmcgb24gd2hldGhlciBCQVRBRFZfVU5JQ0FTVCBvclxuLS1cbm5ldC9iYXRtYW4tYWR2L3NlbmQuYz0zOTQ9aW50IGJhdGFkdl9zZW5kX3NrYl92aWFfdHRfZ2VuZXJpYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy00MjgtICpcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYzo0Mjk6ICogTG9vayB1cCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGdhdGV3YXkuIFdyYXAgdGhlIGdpdmVuIHNrYiBpbnRvIGEgYmF0bWFuLWFkdlxubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTQzMC0gKiB1bmljYXN0IGhlYWRlciBhbmQgc2VuZCB0aGlzIGZyYW1lIHRvIHRoaXMgZ2F0ZXdheSBub2RlLlxuLS1cbm5ldC9iYXRtYW4tYWR2L3NlbmQuaD02Nj1pbnQgYmF0YWR2X3NlbmRfc2tiX3ZpYV9ndyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L3NlbmQuaC03Ni0gKiBMb29rIHVwIHRoZSByZWNpcGllbnQgbm9kZSBmb3IgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gdGhlIGV0aGVybmV0XG5uZXQvYmF0bWFuLWFkdi9zZW5kLmg6Nzc6ICogaGVhZGVyIHZpYSB0aGUgdHJhbnNsYXRpb24gdGFibGUuIFdyYXAgdGhlIGdpdmVuIHNrYiBpbnRvIGEgYmF0bWFuLWFkdlxubmV0L2JhdG1hbi1hZHYvc2VuZC5oLTc4LSAqIHVuaWNhc3QgaGVhZGVyLiBUaGVuIHNlbmQgdGhpcyBmcmFtZSB0byB0aGUgYWNjb3JkaW5nIGRlc3RpbmF0aW9uIG5vZGUuXG4tLVxubmV0L2JhdG1hbi1hZHYvc2VuZC5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IGJhdGFkdl9zZW5kX3NrYl92aWFfdHQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmgtOTgtICogTG9vayB1cCB0aGUgcmVjaXBpZW50IG5vZGUgZm9yIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGluIHRoZSBldGhlcm5ldFxubmV0L2JhdG1hbi1hZHYvc2VuZC5oOjk5OiAqIGhlYWRlciB2aWEgdGhlIHRyYW5zbGF0aW9uIHRhYmxlLiBXcmFwIHRoZSBnaXZlbiBza2IgaW50byBhIGJhdG1hbi1hZHZcbm5ldC9iYXRtYW4tYWR2L3NlbmQuaC0xMDAtICogdW5pY2FzdC00YWRkciBoZWFkZXIuIFRoZW4gc2VuZCB0aGlzIGZyYW1lIHRvIHRoZSBhY2NvcmRpbmcgZGVzdGluYXRpb25cbi0tXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jPTEwNDY9dm9pZCBiYXRhZHZfdHBfc3RhcnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jLTExMTEtXHQvKiBpbml0aWFsaXNlIHRoZSBDV05EIHRvIDMqTVNTIChTZWN0aW9uIDMuMSBpbiBSRkM1NjgxKS5cbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmM6MTExMjpcdCAqIEZvciBiYXRtYW4tYWR2IHRoZSBNU1MgaXMgdGhlIHNpemUgb2YgdGhlIHBheWxvYWQgcmVjZWl2ZWQgYnkgdGhlXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jLTExMTMtXHQgKiBtZXNoX2ludGVyZmFjZSwgaGVuY2UgaXRzIE1UVVxuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg9MTkzPXN0cnVjdCBiYXRhZHZfd2lmaV9uZXRfZGV2aWNlX3N0YXRlIHtcbi0tXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTIxMy0vKipcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MjE0OiAqIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAtIG5ldHdvcmsgZGV2aWNlIGtub3duIHRvIGJhdG1hbi1hZHZcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMjE1LSAqL1xubmV0L2JhdG1hbi1hZHYvdHlwZXMuaD0yMTY9c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlIHtcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MjE3Olx0LyoqIEBpZl9zdGF0dXM6IHN0YXR1cyBvZiB0aGUgaW50ZXJmYWNlIGZvciBiYXRtYW4tYWR2ICovXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTIxOC1cdGNoYXIgaWZfc3RhdHVzO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMjM1LVx0ICogQGJhdG1hbl9hZHZfcHR5cGU6IHBhY2tldCB0eXBlIGRlc2NyaWJpbmcgcGFja2V0cyB0aGF0IHNob3VsZCBiZVxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoyMzY6XHQgKiBwcm9jZXNzZWQgYnkgYmF0bWFuLWFkdiBmb3IgdGhpcyBpbnRlcmZhY2Vcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMjM3LVx0ICovXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDkwMzYKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA1NjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1vZGlmaWVkIEZ1bmN0aW9ucyBpbiBiYXRtYW4tYWR2IGZvciBOb24tU3RhdGljIEVudHJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHRoYXQgd2VyZSB0b3VjaGVkIGluIGBuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jYCBhbmQgYXNzb2NpYXRlZCBmaWxlcy4gVGhpcyBpcyBsaWtlbHkgcGFydCBvZiBhIGRlZXBlciBkaXZlIGludG8gdGhlIEJhdG1hbi1hZHYgY29kZSwgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIHJlY2VudCBtb2RpZmljYXRpb25zIG9yIGEgc3BlY2lmaWMgdGFzayBJJiMzOTttIHdvcmtpbmcgb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQsIGZ1bmN0aW9uIGJ5IGZ1bmN0aW9uLgoKUmlnaHQsIHNvIGFmdGVyIHJldmlld2luZyB0aGUgZGlmZiwgaGVyZSYjMzk7cyB3aGF0IHN0YW5kcyBvdXQ6CgoqICAgKipgbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jYCBhbmQgYG5ldC9iYXRtYW4tYWR2L2JhdF92LmNgOioqIFRoZXNlIGZpbGVzIGhhdmUgYGJhdGFkdl9pdl9vZ21fbmVpZ2hfaXNfc29iYCBhbmQgYGJhdGFkdl92X25laWdoX2lzX3NvYmAsIHJlc3BlY3RpdmVseSwgYnV0IHRoZXkgYXJlIHN0YXRpYyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMsIHdoaWNoIGlzIGxlc3MgaW50ZXJlc3RpbmcgZm9yIG15IGN1cnJlbnQgb2JqZWN0aXZlLiBMaWtlbHkgc29tZSB0d2Vha3MgdG8gdGhlIGFsZ29yaXRobSBvcGVyYXRpb25zLgoqICAgKipgbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgOioqIGBiYXRhZHZfYmxhX2luaXRgIGlzIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiB3aGljaCBpcyB3b3J0aCBmdXJ0aGVyIGV4YW1pbmF0aW9uLgoqICAgKipgbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmNgOioqIFNldmVyYWwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGhlcmU6IGBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnlgLCBgYmF0YWR2X2RhdF9zbm9vcF9vdXRnb2luZ19hcnBfcmVxdWVzdGAsIGBiYXRhZHZfZGF0X3Nub29wX2luY29taW5nX2FycF9yZXF1ZXN0YCwgYW5kIGBiYXRhZHZfZGF0X3Nub29wX2luY29taW5nX2FycF9yZXBseWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgZGF0IHBhdGguCiogICAqKmBuZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jYDoqKiBUaGlzIGhhcyBzb21lIHN0YXRpYyBuZXRkZXYgb3BlcmF0aW9ucywgYGJhdGFkdl9pbnRlcmZhY2Vfc2V0X21hY19hZGRyYCwgYW5kIGBiYXRhZHZfaW50ZXJmYWNlX3R4YC4gVGhleSBsaWtlbHkgd29uJiMzOTt0IGJlIHJlbGV2YW50IGZvciBteSBjdXJyZW50IG5vbi1zdGF0aWMgZnVuY3Rpb24gaW52ZXN0aWdhdGlvbi4KKiAgICoqYG5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jYDoqKiBIZXJlIGFyZSBhIGZldyBmdW5jdGlvbnMgdG8gY2hlY2ssIGluY2x1ZGluZyBgYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjRgLCBgYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjZgLCBhbmQgYGJhdGFkdl9tY2FzdF9tbGFfYnJpZGdlX2dldGAuCiogICAqKmBuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jYDoqKiBBbmQgaGVyZSYjMzk7cyB0aGUgY29yZS4gU2V2ZXJhbCBub24tc3RhdGljIGZ1bmN0aW9ucyBoYXZlIGJlZW4gbW9kaWZpZWQgaGVyZTogYGJhdGFkdl90dF9sb2NhbF9hZGRgLCBgYmF0YWR2X3R0X2xvY2FsX2R1bXBgLCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAsIGBiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2hgLCBgYmF0YWR2X2lzX215X2NsaWVudGAsIGBiYXRhZHZfdHRfZ2xvYmFsX2NsaWVudF9pc19yb2FtaW5nYCwgYGJhdGFkdl90dF9sb2NhbF9jbGllbnRfaXNfcm9hbWluZ2AsIGFuZCBgYmF0YWR2X3R0X2dsb2JhbF9pc19pc29sYXRlZGAuIFRoZXJlJiMzOTtzIGFsc28gYGJhdGFkdl90dF9sb2NhbF9kdW1wX2VudHJ5YCBpbiB0aGUgbWl4LCBidXQgdGhhdCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHRoZSBUVC1yZWxhdGVkIG9uZXMsIGFyZSB0aGUgcHJpbWFyeSBmb2N1cyBvZiBteSBhdHRlbnRpb24uCgpOb3csIGxldCYjMzk7cyBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBkZWNsYXJhdGlvbnMgaW4gdGhlIGBuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oYCBmaWxlIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlLiBJIG5lZWQgdG8gc2VlIHRoZSBjb250ZXh0IGFuZCBhcmd1bWVudHMgb2YgdGhvc2UgZnVuY3Rpb25zIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIHRoZSBtb2RpZmljYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDU1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuICAgMjpcdC8qIENvcHlyaWdodCAoQykgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczpcbiAgIDM6XHQgKlxuICAgNDpcdCAqIE1hcmVrIExpbmRuZXIsIFNpbW9uIFd1bmRlcmxpY2gsIEFudG9uaW8gUXVhcnR1bGxpXG4gICA1Olx0ICovXG4gICA2Olx0XG4gICA3Olx0I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfVFJBTlNMQVRJT05fVEFCTEVfSF9cbiAgIDg6XHQjZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9UUkFOU0xBVElPTl9UQUJMRV9IX1xuICAgOTpcdFxuICAxMDpcdCNpbmNsdWRlIFwmIzM0O21haW4uaFwmIzM0O1xuICAxMTpcdFxuICAxMjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tyZWYuaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L25ldGRldmljZS5oXHUwMDNlXG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbmV0bGluay5oXHUwMDNlXG4gIDE1Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2tidWZmLmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gIDE3Olx0XG4gIDE4Olx0aW50IGJhdGFkdl90dF9pbml0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpO1xuICAxOTpcdGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4gIDIwOlx0XHRcdFx0IHVuc2lnbmVkIHNob3J0IHZpZCwgaW50IGlmaW5kZXgsIHUzMiBtYXJrKTtcbiAgMjE6XHR1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuICAyMjpcdFx0XHRcdCAgIGNvbnN0IHU4ICphZGRyLCB1bnNpZ25lZCBzaG9ydCB2aWQsXG4gIDIzOlx0XHRcdFx0ICAgY29uc3QgY2hhciAqbWVzc2FnZSwgYm9vbCByb2FtaW5nKTtcbiAgMjQ6XHRpbnQgYmF0YWR2X3R0X2xvY2FsX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKTtcbiAgMjU6XHRpbnQgYmF0YWR2X3R0X2dsb2JhbF9kdW1wKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XG4gIDI2Olx0dm9pZCBiYXRhZHZfdHRfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gIDI3Olx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGUsXG4gIDI4Olx0XHRcdFx0ICAgICAgIHMzMiBtYXRjaF92aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpO1xuICAyOTpcdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICpcbiAgMzA6XHRiYXRhZHZfdHRfZ2xvYmFsX2hhc2hfZmluZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbiAgMzE6XHRcdFx0XHQgICB1bnNpZ25lZCBzaG9ydCB2aWQpO1xuICAzMjpcdHZvaWQgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9yZWxlYXNlKHN0cnVjdCBrcmVmICpyZWYpO1xuICAzMzpcdGludCBiYXRhZHZfdHRfZ2xvYmFsX2hhc2hfY291bnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiAgMzQ6XHRcdFx0XHRcdGNvbnN0IHU4ICphZGRyLCB1bnNpZ25lZCBzaG9ydCB2aWQpO1xuICAzNTpcdHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2goc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiAgMzY6XHRcdFx0XHRcdFx0XHQgIGNvbnN0IHU4ICpzcmMsIGNvbnN0IHU4ICphZGRyLFxuICAzNzpcdFx0XHRcdFx0XHRcdCAgdW5zaWduZWQgc2hvcnQgdmlkKTtcbiAgMzg6XHR2b2lkIGJhdGFkdl90dF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpO1xuICAzOTpcdGJvb2wgYmF0YWR2X2lzX215X2NsaWVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbiAgNDA6XHRcdFx0XHQgdW5zaWduZWQgc2hvcnQgdmlkKTtcbiAgNDE6XHRib29sIGJhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1OCAqc3JjLCB1OCAqZHN0LFxuICA0MjpcdFx0XHRcdCAgIHVuc2lnbmVkIHNob3J0IHZpZCk7XG4gIDQzOlx0dm9pZCBiYXRhZHZfdHRfbG9jYWxfY29tbWl0X2NoYW5nZXMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdik7XG4gIDQ0Olx0Ym9vbCBiYXRhZHZfdHRfZ2xvYmFsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gIDQ1Olx0XHRcdFx0XHRcdHU4ICphZGRyLCB1bnNpZ25lZCBzaG9ydCB2aWQpO1xuICA0NjpcdGJvb2wgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gIDQ3Olx0XHRcdFx0XHQgICAgICAgdTggKmFkZHIsIHVuc2lnbmVkIHNob3J0IHZpZCk7XG4gIDQ4Olx0dm9pZCBiYXRhZHZfdHRfbG9jYWxfcmVzaXplX3RvX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSk7XG4gIDQ5Olx0Ym9vbCBiYXRhZHZfdHRfYWRkX3RlbXBvcmFyeV9nbG9iYWxfZW50cnkoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiAgNTA6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlLFxuICA1MTpcdFx0XHRcdFx0XHQgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXG4gIDUyOlx0XHRcdFx0XHRcdCAgdW5zaWduZWQgc2hvcnQgdmlkKTtcbiAgNTM6XHRib29sIGJhdGFkdl90dF9nbG9iYWxfaXNfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiAgNTQ6XHRcdFx0XHRcdCAgY29uc3QgdTggKmFkZHIsIHVuc2lnbmVkIHNob3J0IHZpZCk7XG4gIDU1Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNDQ4CgkJCQkJCQlvdXRwdXQ6IDMwNwoJCQkJCQkJdGhvdWdodHM6IDcyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIEZvY3VzIFN5bWJvbHMgZm9yIFRlc3RpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgdGhlIEIuQS5ULk0uQS5OLiBBZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIExvb2tpbmcgYXQgYG5ldC9iYXRtYW4tYWR2L0tjb25maWdgLCBJIGNhbiBzZWUgdGhlIGNvcmUgZGVwZW5kZW5jeSwgYEJBVE1BTl9BRFZgLCByZWxpZXMgb24gdGhlIGBORVRgIHN1YnN5c3RlbSwgYXMgZXhwZWN0ZWQuIEZyb20gdGhlcmUsIGBCQVRNQU5fQURWX0JBVE1BTl9WYCBoYXMgYSBtb3JlIG51YW5jZWQgZGVwZW5kZW5jeSwgcmVxdWlyaW5nIGBCQVRNQU5fQURWYCBidXQgZXhjbHVkaW5nIHRoZSBjb21iaW5hdGlvbiBvZiBgQ0ZHODAyMTFgIGFzIGEgbW9kdWxlIGFuZCBgQkFUTUFOX0FEVmAgZW5hYmxlZC4gYEJBVE1BTl9BRFZfQkxBYCwgYEJBVE1BTl9BRFZfREFUYCwgYW5kIGBCQVRNQU5fQURWX01DQVNUYCBhbGwgZGVwZW5kIG9uIGJvdGggYEJBVE1BTl9BRFZgIGFuZCBgSU5FVGAuICBgQkFUTUFOX0FEVl9NQ0FTVGAgYWxzbyBleGNsdWRlcyB0aGUgc2NlbmFyaW8gd2hlcmUgYEJSSURHRWAgaXMgYSBtb2R1bGUgYW5kIGBCQVRNQU5fQURWYCBpcyBlbmFibGVkLiBGaW5hbGx5LCBgQkFUTUFOX0FEVl9ERUJVR2AgZGVwZW5kcyBzb2xlbHkgb24gYEJBVE1BTl9BRFZgLgoKSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbiYjMzk7dCBhbnkgb3RoZXIgY3J1Y2lhbCBjb25maWdzIGluIHRoZSBgbmV0L2JhdG1hbi1hZHYvYCBkaXJlY3RvcnkgdGhhdCBJIG5lZWQgdG8gYWNjb3VudCBmb3IsIHRoZW4gSSYjMzk7bGwgbW92ZSBvbiB0byBjb25maXJtaW5nIHRoYXQgdGhlIHJlcXVpcmVkIGNvbmZpZ3MgYXJlIGluZGVlZCB0aG9zZSBJJiMzOTt2ZSBqdXN0IHJldmlld2VkOiBgQkFUTUFOX0FEVmAsIGBCQVRNQU5fQURWX0JBVE1BTl9WYCwgYEJBVE1BTl9BRFZfQkxBYCwgYEJBVE1BTl9BRFZfREFUYCwgYW5kIGBCQVRNQU5fQURWX01DQVNUYC4KCk5leHQsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMg4oCTIHRoZSBBUEkgZW50cnlwb2ludHMgZGlyZWN0bHkgbW9kaWZpZWQgb3IgYWZmZWN0ZWQgYnkgdGhpcyBwYXRjaC4gSSBuZWVkIHRvIGJlIHByZWNpc2UgaGVyZSwgZm9jdXNpbmcgb24gdGhvc2UgdGhhdCBhcmUgbm90IHN0YXRpYyBvciBpbmxpbmVkLiBUaGUgcmVsZXZhbnQgZnVuY3Rpb25zIGFwcGVhciB0byBiZTogYGJhdGFkdl90dF9sb2NhbF9hZGRgLCBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAsIGBiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2hgLCBgYmF0YWR2X2lzX215X2NsaWVudGAsIGBiYXRhZHZfdHRfZ2xvYmFsX2NsaWVudF9pc19yb2FtaW5nYCwgYGJhdGFkdl90dF9sb2NhbF9jbGllbnRfaXNfcm9hbWluZ2AsIGFuZCBgYmF0YWR2X3R0X2dsb2JhbF9pc19pc29sYXRlZGAuIFRoZXNlIGFyZSBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBjaGFuZ2VzIGFyZSBoYXBwZW5pbmcuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIGV2ZXJ5dGhpbmcgZm9yIHRoZSB0ZXN0IHJ1bi4gIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBJIGlkZW50aWZpZWQgZWFybGllcjogYEJBVE1BTl9BRFZgLCBgQkFUTUFOX0FEVl9CQVRNQU5fVmAsIGBCQVRNQU5fQURWX0JMQWAsIGBCQVRNQU5fQURWX0RBVGAsIGFuZCBgQkFUTUFOX0FEVl9NQ0FTVGAuIFRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IG1hdGNoZXMgd2hhdCBJIGlzb2xhdGVkIGFzIHRoZSBjcml0aWNhbCBBUEkgZW50cnlwb2ludHMuCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhcjogVGhpcyBwYXRjaCBzZXJpZXMgaXMgdG91Y2hpbmcgdGhlIEIuQS5ULk0uQS5OLiBBZHZhbmNlZCByb3V0aW5nIGFuZCB0cmFuc2xhdGlvbiB0YWJsZSBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBzcGlubG9jayBzeW5jaHJvbml6YXRpb24gdG8gYWRkcmVzcyBjb25jdXJyZW5jeSByYWNlcyBvbiBlbnRyeSBmbGFncywgZml4aW5nIGhhc2ggdGFibGUgZW50cnkgcmVtb3ZhbCBjb21wYXJpc29ucywgY29ycmVjdGluZyB0aGUgbmVpZ2hib3IgbWV0cmljIHRocm91Z2hwdXQgY29tcGFyaXNvbiBsb2dpYywgYW5kIGVuc3VyaW5nIDItYnl0ZSBhbGlnbm1lbnQgZm9yIE1BQyBhZGRyZXNzIG1hbmlwdWxhdGlvbi4gVGhpcyBzb3VuZHMgbGlrZSBpbXBvcnRhbnQgd29yayB0byBpbXByb3ZlIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UuCgpFdmVyeXRoaW5nIHNlZW1zIHRvIGJlIGluIG9yZGVyLiBJJiMzOTttIHJlYWR5IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCQVRNQU5fQURWJiMzNDssCiAgICAmIzM0O0JBVE1BTl9BRFZfQkFUTUFOX1YmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9CTEEmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9EQVQmIzM0OywKICAgICYjMzQ7QkFUTUFOX0FEVl9NQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JhdGFkdl90dF9sb2NhbF9hZGQmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R0X2xvY2FsX3JlbW92ZSYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2gmIzM0OywKICAgICYjMzQ7YmF0YWR2X2lzX215X2NsaWVudCYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHRfZ2xvYmFsX2lzX2lzb2xhdGVkJiMzNDssCiAgICAmIzM0O2JhdGFkdl90dF9nbG9iYWxfY2xpZW50X2lzX3JvYW1pbmcmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgYnVnIGZpeGVzIGluIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgbWVzaCBwcm90b2NvbCBzdWJzeXN0ZW0gKG5ldC9iYXRtYW4tYWR2LykuIEtleSBjaGFuZ2VzIGluY2x1ZGUgYWRkaW5nIHNwaW5sb2NrIHByb3RlY3Rpb24gKGZsYWdzX2xvY2spIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgYW5kIG11dGF0aW5nIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzLCBmaXhpbmcgZXhhY3Qgb2JqZWN0IHJlbW92YWwgZnJvbSBoYXNoIGJ1Y2tldHMgKGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KSwgY29ycmVjdGluZyB0aGUgQi5BLlQuTS5BLk4uIFYgbmVpZ2hib3IgY29tcGFyaXNvbiBjYWxjdWxhdGlvbiBsb2dpYyBpbiBiYXRhZHZfdl9uZWlnaF9pc19zb2IoKSwgYW5kIGFkZGluZyAyLWJ5dGUgYWxpZ25tZW50IGF0dHJpYnV0ZXMgdG8gTUFDIGFkZHJlc3MgYnVmZmVycy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIGV4ZWN1dGlvbiBmbG93cyBhbmQgc3RhdGUgaGFuZGxpbmcgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QkFUTUFOX0FEViYjMzQ7LAogICAgJiMzNDtCQVRNQU5fQURWX0JBVE1BTl9WJiMzNDssCiAgICAmIzM0O0JBVE1BTl9BRFZfQkxBJiMzNDssCiAgICAmIzM0O0JBVE1BTl9BRFZfREFUJiMzNDssCiAgICAmIzM0O0JBVE1BTl9BRFZfTUNBU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtiYXRhZHZfdHRfbG9jYWxfYWRkJiMzNDssCiAgICAmIzM0O2JhdGFkdl90dF9sb2NhbF9yZW1vdmUmIzM0OywKICAgICYjMzQ7YmF0YWR2X3RyYW5zdGFibGVfc2VhcmNoJiMzNDssCiAgICAmIzM0O2JhdGFkdl9pc19teV9jbGllbnQmIzM0OywKICAgICYjMzQ7YmF0YWR2X3R0X2dsb2JhbF9pc19pc29sYXRlZCYjMzQ7LAogICAgJiMzNDtiYXRhZHZfdHRfZ2xvYmFsX2NsaWVudF9pc19yb2FtaW5nJiMzNDssCiAgICAmIzM0O2JhdGFkdl90dF9sb2NhbF9jbGllbnRfaXNfcm9hbWluZyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIGJ1ZyBmaXhlcyBpbiB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIG1lc2ggcHJvdG9jb2wgc3Vic3lzdGVtIChuZXQvYmF0bWFuLWFkdi8pLiBLZXkgY2hhbmdlcyBpbmNsdWRlIGFkZGluZyBzcGlubG9jayBwcm90ZWN0aW9uIChmbGFnc19sb2NrKSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIGFuZCBtdXRhdGluZyB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeSBmbGFncywgZml4aW5nIGV4YWN0IG9iamVjdCByZW1vdmFsIGZyb20gaGFzaCBidWNrZXRzIChiYXRhZHZfY29tcGFyZV90dF9lbnRyeSksIGNvcnJlY3RpbmcgdGhlIEIuQS5ULk0uQS5OLiBWIG5laWdoYm9yIGNvbXBhcmlzb24gY2FsY3VsYXRpb24gbG9naWMgaW4gYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKCksIGFuZCBhZGRpbmcgMi1ieXRlIGFsaWdubWVudCBhdHRyaWJ1dGVzIHRvIE1BQyBhZGRyZXNzIGJ1ZmZlcnMuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29yZSBleGVjdXRpb24gZmxvd3MgYW5kIHN0YXRlIGhhbmRsaW5nIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjMyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgb2Ygc2V2ZXJhbCBjbGVhbnVwcyBhbmQgYnVnZml4ZXMgaW4gYmF0bWFuLWFkdjpcbjEuIEFsaWdubWVudCBhbm5vdGF0aW9uczogQWRkcyBgX19hbGlnbmVkKDIpYCB0byB2YXJpb3VzIE1BQyBhZGRyZXNzIGJ5dGUgYXJyYXlzIChgdTggYWRkcltFVEhfQUxFTl1gLCBgdTggb3JpZ1tFVEhfQUxFTl1gLCBldGMuKSB0byBlbnN1cmUgMi1ieXRlIGFsaWdubWVudCBmb3Igb3BlcmF0aW9ucyBsaWtlIGBldGhlcl9hZGRyX2NvcHkoKWAuXG4yLiBDb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpbXByb3ZlbWVudHM6IEludHJvZHVjZXMgYGZsYWdzX2xvY2tgIHNwaW5sb2NrIHRvIGBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeWAgdG8gcHJvdGVjdCBjb25jdXJyZW50IHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzIChgY29tbW9uLVx1MDAzZWZsYWdzYCkgYW5kIHJvYW1pbmcgdGltZXN0YW1wcyAoYHJvYW1fYXRgKS5cbjMuIExvZ2ljIFx1MDAyNiBuYW1pbmcgZml4ZXM6IEZpeGVzIG5laWdoYm9yIGNvbXBhcmlzb24gbG9naWMgaW4gYGJhdGFkdl92X25laWdoX2lzX3NvYigpYCBhbmQgcmVuYW1lcyBwYXJhbWV0ZXJzIGZvciBjbGFyaXR5IGluIGBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpYC5cbjQuIERlYnVnIG91dHB1dCBmaXg6IENvcnJlY3RzIGZpZWxkIGFjY2VzcyBpbiBkZWJ1ZyBwcmludGluZyBmb3IgZW5jYXBzdWxhdGVkIERBVCBwYWNrZXRzLlxuNS4gSGFzaCB0YWJsZSBsb29rdXAgYWNjdXJhY3k6IEludHJvZHVjZXMgYGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KClgIHRvIG1hdGNoIGV4YWN0IHBvaW50ZXIgaWRlbnRpdGllcyBkdXJpbmcgYGJhdGFkdl9oYXNoX3JlbW92ZSgpYC5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIE5ldGxpbmsgZHVtcCBoYW5kbGVycyAoYGJhdGFkdl9kYXRfY2FjaGVfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfZ2xvYmFsX2R1bXBfc3ViZW50cnlgKSBvbmx5IHNlcmlhbGl6ZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXJzIGFuZCBNQUMgYWRkcmVzc2VzLiBDb25jdXJyZW5jeSwgbGlmZXRpbWUsIGFuZCBib3VuZGFyeSBjaGVja3MgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0N2VhM2Y5YTc2OTE4YTk5MjM3Y2U3MzFkN2NmNmU4NTc3NWQwMDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDozMTo1MiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYyBiL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uYwppbmRleCA1M2ZiZGJiZThmNGY3Li4zZmUwOWI0YzMwNDYzIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jCkBAIC0yNDI0LDI1ICYjNDM7MjQyNCwyNiBAQCBzdGF0aWMgaW50IGJhdGFkdl9pdl9vZ21fbmVpZ2hfY21wKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gxLAogLyoqCiAgKiBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpIC0gY2hlY2sgaWYgbmVpZ2gxIGlzIHNpbWlsYXJseSBnb29kIG9yIGJldHRlcgogICogIHRoYW4gbmVpZ2gyIGZyb20gdGhlIG1ldHJpYyBwcm9zcGVjdGl2ZQotICogQG5laWdoMTogdGhlIGZpcnN0IG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvbgotICogQGlmX291dGdvaW5nMTogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgZmlyc3QgbmVpZ2hib3IKLSAqIEBuZWlnaDI6IHRoZSBzZWNvbmQgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uCi0gKiBAaWZfb3V0Z29pbmcyOiBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIHRoZSBzZWNvbmQgbmVpZ2hib3IKJiM0MzsgKiBAY2FuZGlkYXRlOiB0aGUgZmlyc3QgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uCiYjNDM7ICogQGlmX291dGdvaW5nX2NhbmQ6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEBjYW5kaWRhdGUgbmVpZ2hib3IKJiM0MzsgKiBAcmVmZXJlbmNlOiB0aGUgc2Vjb25kIG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvbgomIzQzOyAqIEBpZl9vdXRnb2luZ19yZWY6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEByZWZlcmVuY2UgbmVpZ2hib3IKICAqCi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIG1ldHJpYyB2aWEgbmVpZ2gxIGlzIGVxdWFsbHkgZ29vZCBvciBiZXR0ZXIgdGhhbgotICogdGhlIG1ldHJpYyB2aWEgbmVpZ2gyLCBmYWxzZSBvdGhlcndpc2UuCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSBtZXRyaWMgdmlhIEBjYW5kaWRhdGUgaXMgZXF1YWxseSBnb29kIG9yIGJldHRlciB0aGFuCiYjNDM7ICogdGhlIG1ldHJpYyB2aWEgQHJlZmVyZW5jZSwgZmFsc2Ugb3RoZXJ3aXNlLgogICovCiBzdGF0aWMgYm9vbAotYmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsCi0JCQkgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMSwKLQkJCSAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gyLAotCQkJICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzIpCiYjNDM7YmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsCiYjNDM7CQkJICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLAomIzQzOwkJCSAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLAomIzQzOwkJCSAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKQogewogCWJvb2wgcmV0OwogCWludCBkaWZmOwogCi0JcmV0ID0gYmF0YWR2X2l2X29nbV9uZWlnaF9kaWZmKG5laWdoMSwgaWZfb3V0Z29pbmcxLCBuZWlnaDIsCi0JCQkJICAgICAgIGlmX291dGdvaW5nMiwgJmFtcDtkaWZmKTsKJiM0MzsJcmV0ID0gYmF0YWR2X2l2X29nbV9uZWlnaF9kaWZmKGNhbmRpZGF0ZSwgaWZfb3V0Z29pbmdfY2FuZCwKJiM0MzsJCQkJICAgICAgIHJlZmVyZW5jZSwgaWZfb3V0Z29pbmdfcmVmLAomIzQzOwkJCQkgICAgICAgJmFtcDtkaWZmKTsKIAlpZiAoIXJldCkKIAkJcmV0dXJuIGZhbHNlOwogCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfdi5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3YuYwppbmRleCAwYzI3NDQ3Y2Y2ODg5Li41OTY4ODliMzUyMmQwIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfdi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L2JhdF92LmMKQEAgLTUxNCw0MCAmIzQzOzUxNCw0MCBAQCBzdGF0aWMgaW50IGJhdGFkdl92X25laWdoX2NtcChzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSwKIC8qKgogICogYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKCkgLSBjaGVjayB3aGV0aGVyIHR3byBCLkEuVC5NLkEuTi4gViBuZWlnaGJvdXJzIGhhdmUKICAqICBhIHNpbWlsYXIgb3IgYmV0dGVyIHRocm91Z2hwdXQKLSAqIEBuZWlnaDE6IGZpcnN0IG5laWdoYm91ciB0byBjb21wYXJlCi0gKiBAaWZfb3V0Z29pbmcxOiBvdXRnb2luZyBpbnRlcmZhY2UgdG8gdXNlIGZvciBAbmVpZ2gxCi0gKiBAbmVpZ2gyOiBzZWNvbmQgbmVpZ2hib3VyIHRvIGNvbXBhcmUKLSAqIEBpZl9vdXRnb2luZzI6IG91dGdvaW5nIGludGVyZmFjZSB0byB1c2UgZm9yIEBuZWlnaDIKJiM0MzsgKiBAY2FuZGlkYXRlOiB0aGUgZmlyc3QgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uCiYjNDM7ICogQGlmX291dGdvaW5nX2NhbmQ6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEBjYW5kaWRhdGUgbmVpZ2hib3IKJiM0MzsgKiBAcmVmZXJlbmNlOiB0aGUgc2Vjb25kIG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvbgomIzQzOyAqIEBpZl9vdXRnb2luZ19yZWY6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEByZWZlcmVuY2UgbmVpZ2hib3IKICAqCi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIHRocm91Z2hwdXQgb2YgQG5laWdoMiBpcyBhdCBsZWFzdCAzLzQgb2YgdGhlCi0gKiAgQG5laWdoMSB0aHJvdWdocHV0CiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIHRoZSB0aHJvdWdocHV0IG9mIEBjYW5kaWRhdGUgaXMgbW9yZSB0aGFuIDMvNCBvZiB0aGUKJiM0MzsgKiAgQHJlZmVyZW5jZSB0aHJvdWdocHV0CiAgKi8KLXN0YXRpYyBib29sIGJhdGFkdl92X25laWdoX2lzX3NvYihzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSwKLQkJCQkgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcxLAotCQkJCSAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDIsCi0JCQkJICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMikKJiM0MztzdGF0aWMgYm9vbCBiYXRhZHZfdl9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsCiYjNDM7CQkJCSAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLAomIzQzOwkJCQkgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLAomIzQzOwkJCQkgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKQogewotCXN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm8xOwotCXN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm8yOwomIzQzOwlzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyAqaWZpbmZvX2NhbmQ7CiYjNDM7CXN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm9fcmVmOwogCWJvb2wgcmV0ID0gZmFsc2U7CiAJdTMyIHRocmVzaG9sZDsKIAotCWlmaW5mbzEgPSBiYXRhZHZfbmVpZ2hfaWZpbmZvX2dldChuZWlnaDEsIGlmX291dGdvaW5nMSk7Ci0JaWYgKCFpZmluZm8xKQomIzQzOwlpZmluZm9fY2FuZCA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KGNhbmRpZGF0ZSwgaWZfb3V0Z29pbmdfY2FuZCk7CiYjNDM7CWlmICghaWZpbmZvX2NhbmQpCiAJCWdvdG8gZXJyX2lmaW5mbzE7CiAKLQlpZmluZm8yID0gYmF0YWR2X25laWdoX2lmaW5mb19nZXQobmVpZ2gyLCBpZl9vdXRnb2luZzIpOwotCWlmICghaWZpbmZvMikKJiM0MzsJaWZpbmZvX3JlZiA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KHJlZmVyZW5jZSwgaWZfb3V0Z29pbmdfcmVmKTsKJiM0MzsJaWYgKCFpZmluZm9fcmVmKQogCQlnb3RvIGVycl9pZmluZm8yOwogCi0JdGhyZXNob2xkID0gaWZpbmZvMS0mZ3Q7YmF0X3YudGhyb3VnaHB1dCAvIDQ7Ci0JdGhyZXNob2xkID0gaWZpbmZvMS0mZ3Q7YmF0X3YudGhyb3VnaHB1dCAtIHRocmVzaG9sZDsKJiM0MzsJdGhyZXNob2xkID0gaWZpbmZvX3JlZi0mZ3Q7YmF0X3YudGhyb3VnaHB1dCAvIDQ7CiYjNDM7CXRocmVzaG9sZCA9IGlmaW5mb19yZWYtJmd0O2JhdF92LnRocm91Z2hwdXQgLSB0aHJlc2hvbGQ7CiAKLQlyZXQgPSBpZmluZm8yLSZndDtiYXRfdi50aHJvdWdocHV0ICZndDsgdGhyZXNob2xkOwomIzQzOwlyZXQgPSBpZmluZm9fY2FuZC0mZ3Q7YmF0X3YudGhyb3VnaHB1dCAmZ3Q7IHRocmVzaG9sZDsKIAotCWJhdGFkdl9uZWlnaF9pZmluZm9fcHV0KGlmaW5mbzIpOwomIzQzOwliYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm9fcmVmKTsKIGVycl9pZmluZm8yOgotCWJhdGFkdl9uZWlnaF9pZmluZm9fcHV0KGlmaW5mbzEpOwomIzQzOwliYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm9fY2FuZCk7CiBlcnJfaWZpbmZvMToKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYwppbmRleCBmNjM1ZGE0YjhjYTY1Li5hZDZhYjRhNTA2NThmIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYwpAQCAtNjYzLDcgJiM0Mzs2NjMsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfcmVxdWVzdChzdHJ1Y3QgYmF0YWR2X2JsYV9iYWNrYm9uZV9ndyAqYmFja2JvbmVfZ3cpCiBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfYW5ub3VuY2Uoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkgICAgIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3ICpiYWNrYm9uZV9ndykKIHsKLQl1OCBtYWNbRVRIX0FMRU5dOwomIzQzOwl1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAlfX2JlMTYgY3JjOwogCiAJbWVtY3B5KG1hYywgYmF0YWR2X2Fubm91bmNlX21hYywgNCk7CkBAIC0xNTgyLDcgJiM0MzsxNTgyLDkgQEAgc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBiYXRhZHZfYmFja2JvbmVfaGFzaF9sb2NrX2NsYXNzX2tleTsKICAqLwogaW50IGJhdGFkdl9ibGFfaW5pdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KQogewotCXU4IGNsYWltX2Rlc3RbRVRIX0FMRU5dID0gezB4ZmYsIDB4NDMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDB9OwomIzQzOwlzdGF0aWMgY29uc3QgdTggY2xhaW1fZGVzdFtFVEhfQUxFTl0gX19hbGlnbmVkKDIpID0gewomIzQzOwkJMHhmZiwgMHg0MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMAomIzQzOwl9OwogCXN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjsKIAl1bnNpZ25lZCBsb25nIGVudHJ5dGltZTsKIAl1MTYgY3JjOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYwppbmRleCAwMTFjZmRjNDdmYWI0Li5hNGJlNWIyYTg3ZDdhIDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYwpAQCAtNTQ4LDcgJiM0Mzs1NDgsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfZGJnX2FycChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQliYXRhZHZfZGJnKEJBVEFEVl9EQkdfREFULCBiYXRfcHJpdiwgJiMzNDsqIHR5cGU6IFVua25vd24gKCV1KSFcbiYjMzQ7LAotCQkJCSAgIHVuaWNhc3RfNGFkZHJfcGFja2V0LSZndDt1LnBhY2tldF90eXBlKTsKJiM0MzsJCQkJICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtJmd0O3N1YnR5cGUpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQkFUQURWX0JDQVNUOgpAQCAtOTQwLDcgJiM0Mzs5NDAsNyBAQCBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwKIAkJCSAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsCiAJCQkgICAgc3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSkKIHsKLQl1OCBtYWNbRVRIX0FMRU5dOwomIzQzOwl1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAl1NjQgdTY0X21hYzsKIAlpbnQgbXNlY3M7CiAJdm9pZCAqaGRyOwpAQCAtMTIzNiwxMCAmIzQzOzEyMzYsMTAgQEAgYm9vbCBiYXRhZHZfZGF0X3Nub29wX291dGdvaW5nX2FycF9yZXF1ZXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UgPSBiYXRfcHJpdi0mZ3Q7bWVzaF9pZmFjZTsKIAlzdHJ1Y3QgYmF0YWR2X2RhdF9lbnRyeSAqZGF0X2VudHJ5ID0gTlVMTDsKJiM0MzsJdTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYl9uZXc7CiAJdW5zaWduZWQgc2hvcnQgdmlkOwogCWJvb2wgcmV0ID0gZmFsc2U7Ci0JdTggbWFjW0VUSF9BTEVOXTsKIAlpbnQgaGRyX3NpemUgPSAwOwogCV9fYmUzMiBpcF9kc3Q7CiAJX19iZTMyIGlwX3NyYzsKQEAgLTEzNDQsMTAgJiM0MzsxMzQ0LDEwIEBAIGJvb2wgYmF0YWR2X2RhdF9zbm9vcF9pbmNvbWluZ19hcnBfcmVxdWVzdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX3NpemUpCiB7CiAJc3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSA9IE5VTEw7CiYjNDM7CXU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCXN0cnVjdCBza19idWZmICpza2JfbmV3OwogCXVuc2lnbmVkIHNob3J0IHZpZDsKIAlib29sIHJldCA9IGZhbHNlOwotCXU4IG1hY1tFVEhfQUxFTl07CiAJX19iZTMyIGlwX3NyYzsKIAlfX2JlMzIgaXBfZHN0OwogCXU2NCB1NjRfbWFjOwpAQCAtMTQ3NCw5ICYjNDM7MTQ3NCw5IEBAIGJvb2wgYmF0YWR2X2RhdF9zbm9vcF9pbmNvbWluZ19hcnBfcmVwbHkoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkJIHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfc2l6ZSkKIHsKIAlzdHJ1Y3QgYmF0YWR2X2RhdF9lbnRyeSAqZGF0X2VudHJ5ID0gTlVMTDsKJiM0MzsJdTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAJYm9vbCBkcm9wcGVkID0gZmFsc2U7CiAJdW5zaWduZWQgc2hvcnQgdmlkOwotCXU4IG1hY1tFVEhfQUxFTl07CiAJX19iZTMyIGlwX3NyYzsKIAlfX2JlMzIgaXBfZHN0OwogCXU2NCB1NjRfbWFjOwpkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMKaW5kZXggZTIwMjA4OGNmMWZkNC4uNjNhZjIxOTU0Y2Y5MCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jCkBAIC0xNDEsOSAmIzQzOzE0MSw5IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYmF0YWR2X2ludGVyZmFjZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogc3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQogewogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwl1OCBvbGRfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCXN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKLQl1OCBvbGRfYWRkcltFVEhfQUxFTl07CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0mZ3Q7c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKQEAgLTIxMywxMyAmIzQzOzIxMywxOCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfaW50ZXJmYWNlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiBzdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSkKIHsKLQlzdGF0aWMgY29uc3QgdTggZWN0cF9hZGRyW0VUSF9BTEVOXSA9IHsweENGLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKLQlzdGF0aWMgY29uc3QgdTggc3RwX2FkZHJbRVRIX0FMRU5dID0gezB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDB9OwogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTsKIAllbnVtIGJhdGFkdl9kaGNwX3JlY2lwaWVudCBkaGNwX3JjcCA9IEJBVEFEVl9ESENQX05POwogCWVudW0gYmF0YWR2X2ZvcndfbW9kZSBmb3J3X21vZGUgPSBCQVRBRFZfRk9SV19CQ0FTVDsKJiM0MzsJc3RhdGljIGNvbnN0IHU4IGVjdHBfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpID0gewomIzQzOwkJMHhDRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMAomIzQzOwl9OwomIzQzOwlzdGF0aWMgY29uc3QgdTggc3RwX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKSA9IHsKJiM0MzsJCTB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDAKJiM0MzsJfTsKIAlzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMOwogCXN0cnVjdCBiYXRhZHZfYmNhc3RfcGFja2V0ICpiY2FzdF9wYWNrZXQ7CiYjNDM7CXU4IGNoYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCWludCBuZXR3b3JrX29mZnNldCA9IEVUSF9ITEVOOwogCXVuc2lnbmVkIGludCBoZWFkZXJfbGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGJyZF9kZWxheSA9IDA7CkBAIC0yMjksNyAmIzQzOzIzNCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBiYXRhZHZfaW50ZXJmYWNlX3R4KHN0cnVjdCBza19idWZmICpza2IsCiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwogCWJvb2wgZG9fYmNhc3QgPSBmYWxzZTsKIAl1OCAqZHN0X2hpbnQgPSBOVUxMOwotCXU4IGNoYWRkcltFVEhfQUxFTl07CiAJdW5zaWduZWQgc2hvcnQgdmlkOwogCWJvb2wgY2xpZW50X2FkZGVkOwogCV9fYmUxNiBwcm90bzsKZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jIGIvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMKaW5kZXggODJmZDUyN2I2MWMwMi4uMjJkZDI4ZDVlMWFiYyAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMKQEAgLTM2OCw5ICYjNDM7MzY4LDkgQEAgYmF0YWR2X21jYXN0X21sYV9tZXNoaWZfZ2V0X2lwdjQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgc3RydWN0IGhsaXN0X2hlYWQgKm1jYXN0X2xpc3QsCiAJCQkJIHN0cnVjdCBiYXRhZHZfbWNhc3RfbWxhX2ZsYWdzICpmbGFncykKIHsKJiM0MzsJdTggbWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCXN0cnVjdCBiYXRhZHZfaHdfYWRkciAqbmV3OwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQl1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXTsKIAlzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jOwogCWludCByZXQgPSAwOwogCkBAIC00MzUsOSAmIzQzOzQzNSw5IEBAIGJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJIHN0cnVjdCBobGlzdF9oZWFkICptY2FzdF9saXN0LAogCQkJCSBzdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyAqZmxhZ3MpCiB7CiYjNDM7CXU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAlzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgKm5ldzsKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppbjZfZGV2OwotCXU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dOwogCXN0cnVjdCBpZm1jYWRkcjYgKnBtYzY7CiAJaW50IHJldCA9IDA7CiAKQEAgLTU4NywxMCAmIzQzOzU4NywxMCBAQCBzdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9tbGFfYnJpZGdlX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgICAgICBzdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyAqZmxhZ3MpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCBicmlkZ2VfbWNhc3RfbGlzdCA9IExJU1RfSEVBRF9JTklUKGJyaWRnZV9tY2FzdF9saXN0KTsKJiM0MzsJdTggbWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCXU4IHR2bHZfZmxhZ3MgPSBmbGFncy0mZ3Q7dHZsdl9mbGFnczsKIAlzdHJ1Y3QgYnJfaXBfbGlzdCAqYnJfaXBfZW50cnk7CiAJc3RydWN0IGJhdGFkdl9od19hZGRyICpuZXc7Ci0JdTggbWNhc3RfYWRkcltFVEhfQUxFTl07CiAJc3RydWN0IGJyX2lwX2xpc3QgKnRtcDsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jIGIvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYwppbmRleCA2OGY3OTg1MzAzMmVkLi40NGE4Y2Y4OTM4MmM2IDEwMDY0NAotLS0gYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKQEAgLTEzLDYgJiM0MzsxMyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvYnVpbGRfYnVnLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jYWNoZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jbGVhbnVwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jb250YWluZXJfb2YuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jcmMzMi5oJmd0OwpAQCAtOTUsNiAmIzQzOzk2LDI2IEBAIHN0YXRpYyBib29sIGJhdGFkdl9jb21wYXJlX3R0KGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCBjb25zdCB2b2lkICpkYXRhMikKIAlyZXR1cm4gKHR0MS0mZ3Q7dmlkID09IHR0Mi0mZ3Q7dmlkKSAmYW1wOyZhbXA7IGJhdGFkdl9jb21wYXJlX2V0aChkYXRhMSwgZGF0YTIpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYmF0YWR2X2NvbXBhcmVfdHRfZW50cnkoKSAtIGNoZWNrIGlmIGEgaGFzaCBub2RlIGlzIGEgc3BlY2lmaWMgVFQgZW50cnkKJiM0MzsgKiBAbm9kZTogdGhlIGxpc3QgZWxlbWVudCBwb2ludGVyIG9mIHRoZSBUVCBlbnRyeSBzdG9yZWQgaW4gdGhlIGJ1Y2tldAomIzQzOyAqIEBkYXRhMjogcG9pbnRlciB0byB0aGUgdHRfY29tbW9uX2VudHJ5IHdoaWNoIGlzIGxvb2tlZCBmb3IKJiM0MzsgKgomIzQzOyAqIFVubGlrZSBiYXRhZHZfY29tcGFyZV90dCgpLCB0aGlzIG9ubHkgbWF0Y2hlcyB0aGUgdmVyeSBvYmplY3Qgd2hpY2ggaXMKJiM0MzsgKiBwYXNzZWQgYXMgQGRhdGEyIGFuZCBub3QganVzdCBhbnkgZW50cnkgZm9yIHRoZSBzYW1lIFRUIGNsaWVudC4gSXQgaXMgbWVhbnQKJiM0MzsgKiBmb3IgYmF0YWR2X2hhc2hfcmVtb3ZlKCkgY2FsbGVycyB3aGljaCBtdXN0IG5vdCB1bmxpbmsgYW4gZW50cnkgdGhleSBkaWQgbm90CiYjNDM7ICogbG9vayB1cCB0aGVtc2VsdmVzLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0cnVlIGlmIEBub2RlIGJlbG9uZ3MgdG8gQGRhdGEyLCBmYWxzZSBvdGhlcndpc2UKJiM0MzsgKi8KJiM0MztzdGF0aWMgYm9vbCBiYXRhZHZfY29tcGFyZV90dF9lbnRyeShjb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwKJiM0MzsJCQkJICAgIGNvbnN0IHZvaWQgKmRhdGEyKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0ID0gZGF0YTI7CiYjNDM7CiYjNDM7CXJldHVybiBub2RlID09ICZhbXA7dHQtJmd0O2hhc2hfZW50cnk7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBiYXRhZHZfY2hvb3NlX3R0KCkgLSByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSB0dCBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZQogICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHR0X2NvbW1vbl9lbnRyeSBvYmplY3QgdG8gbWFwCkBAIC0zMTIsNiAmIzQzOzMzMywxMCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9tb2Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKICAqICBnaXZlbiB2aWQKICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvbgogICogQHZpZDogdGhlIFZMQU4gaWRlbnRpZmllcgomIzQzOyAqCiYjNDM7ICogSXQgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHJlbW92aW5nIHRoZSBORVcgZmxhZyBvZiBhCiYjNDM7ICogYmF0YWR2X3R0X2xvY2FsX2VudHJ5IHdoaWxlIGl0IGlzIHN0aWxsIHBhcnQgb2YgdGhlIGJhdF9wcml2LSZndDt0dC5sb2NhbF9oYXNoLgomIzQzOyAqIEl0IG11c3QgdGhlcmVmb3JlIGJlIGNoZWNrZWQgdW5kZXIgdGhlIHNwZWNpZmljIGxpc3RfbG9ja3NbaV0uCiAgKi8KIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9zaXplX2luYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkJCSAgICAgdW5zaWduZWQgc2hvcnQgdmlkKQpAQCAtMzI0LDYgJiM0MzszNDksMTEgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfaW5jKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAgKiAgZ2l2ZW4gdmlkCiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KICAqIEB2aWQ6IHRoZSBWTEFOIGlkZW50aWZpZXIKJiM0MzsgKgomIzQzOyAqIEl0IG11c3Qgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBiYXRhZHZfdHRfbG9jYWxfZW50cnkgd2l0aG91dCBORVcgZmxhZwomIzQzOyAqIHdhcyByZW1vdmVkIGZyb20gYmF0X3ByaXYtJmd0O3R0LmxvY2FsX2hhc2ggKHVuZGVyIHRoZSBzcGVjaWZpYwomIzQzOyAqIGxpc3RfbG9ja3NbaV0pIG9yIHdoZW4gaXQgaXMgZW5zdXJlZCB0aGF0IGl0IGlzIG5vdCBhY2Nlc3NpYmxlCiYjNDM7ICogaW4gdGhpcyBsaXN0LgogICovCiBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9kZWMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkgICAgIHVuc2lnbmVkIHNob3J0IHZpZCkKQEAgLTQxMyw2ICYjNDM7NDQzLDIyIEBAIGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnlfcHV0KHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpvcmlnX2VudHJ5KQogCWtyZWZfcHV0KCZhbXA7b3JpZ19lbnRyeS0mZ3Q7cmVmY291bnQsIGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnlfcmVsZWFzZSk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBiYXRhZHZfdHRfZmxhZ3NfZ2V0KCkgLSBnZXQgYSBzbmFwc2hvdCBvZiB0aGUgZmxhZ3Mgb2YgYSBUVCBlbnRyeQomIzQzOyAqIEBjb21tb246IHR0IGxvY2FsICZhbXA7IHR0IGdsb2JhbCBjb21tb24gZGF0YQomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0aGUgZmxhZ3Mgb2YgdGhlIFRUIGVudHJ5IGFzIG9ic2VydmVkIHVuZGVyIGl0cyBmbGFnc19sb2NrLgomIzQzOyAqLwomIzQzO3N0YXRpYyB1MTYgYmF0YWR2X3R0X2ZsYWdzX2dldChzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uKQomIzQzO3sKJiM0MzsJdTE2IGZsYWdzOwomIzQzOwomIzQzOwlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsICZhbXA7Y29tbW9uLSZndDtmbGFnc19sb2NrKQomIzQzOwkJZmxhZ3MgPSBjb21tb24tJmd0O2ZsYWdzOwomIzQzOwomIzQzOwlyZXR1cm4gZmxhZ3M7CiYjNDM7fQomIzQzOwogLyoqCiAgKiBiYXRhZHZfdHRfbG9jYWxfZXZlbnQoKSAtIHN0b3JlIGEgbG9jYWwgVFQgZXZlbnQgKEFERC9ERUwpCiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KQEAgLTQyNSwyMyAmIzQzOzQ3MSwyNSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZXZlbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIHsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uID0gJmFtcDt0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uOwogCXN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKnR0X2NoYW5nZV9ub2RlOwotCXU4IGZsYWdzID0gY29tbW9uLSZndDtmbGFncyB8IGV2ZW50X2ZsYWdzOwogCXN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKmVudHJ5OwogCXN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKnNhZmU7CiAJYm9vbCBkZWxfb3BfcmVxdWVzdGVkOwogCWJvb2wgZGVsX29wX2VudHJ5OwogCXNpemVfdCBjaGFuZ2VzOwomIzQzOwl1OCBmbGFnczsKIAogCXR0X2NoYW5nZV9ub2RlID0ga21lbV9jYWNoZV9hbGxvYyhiYXRhZHZfdHRfY2hhbmdlX2NhY2hlLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXR0X2NoYW5nZV9ub2RlKQogCQlyZXR1cm47CiAKLQl0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLmZsYWdzID0gZmxhZ3M7CiAJbWVtc2V0KHR0X2NoYW5nZV9ub2RlLSZndDtjaGFuZ2UucmVzZXJ2ZWQsIDAsCiAJICAgICAgIHNpemVvZih0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLnJlc2VydmVkKSk7CiAJZXRoZXJfYWRkcl9jb3B5KHR0X2NoYW5nZV9ub2RlLSZndDtjaGFuZ2UuYWRkciwgY29tbW9uLSZndDthZGRyKTsKIAl0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLnZpZCA9IGh0b25zKGNvbW1vbi0mZ3Q7dmlkKTsKIAomIzQzOwlmbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoY29tbW9uKSB8IGV2ZW50X2ZsYWdzOwomIzQzOwomIzQzOwl0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLmZsYWdzID0gZmxhZ3M7CiAJZGVsX29wX3JlcXVlc3RlZCA9IGZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfREVMOwogCiAJLyogY2hlY2sgZm9yIEFERCYjNDM7REVMLCBERUwmIzQzO0FERCwgQUREJiM0MztBREQgb3IgREVMJiM0MztERUwgZXZlbnRzICovCkBAIC01NzUsNyAmIzQzOzYyMyw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkJCSAgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbCwKIAkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7Ci0Jc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X3JlbW92ZWRfZW50cnk7CiAJc3RydWN0IGhsaXN0X25vZGUgKnR0X3JlbW92ZWRfbm9kZTsKIAogCWJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsCkBAIC01ODMsMTggJiM0Mzs2MzAsNjcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCSAgIHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmFkZHIsCiAJCSAgIGJhdGFkdl9wcmludF92aWQodHRfZ2xvYmFsLSZndDtjb21tb24udmlkKSwgbWVzc2FnZSk7CiAKJiM0MzsJLyogcmVtb3ZlIGV4YWN0bHkgdGhpcyBvYmplY3Qgd2hlbiBzdGlsbCBwcmVzZW50IGluIGhhc2ggKi8KIAl0dF9yZW1vdmVkX25vZGUgPSBiYXRhZHZfaGFzaF9yZW1vdmUoYmF0X3ByaXYtJmd0O3R0Lmdsb2JhbF9oYXNoLAotCQkJCQkgICAgIGJhdGFkdl9jb21wYXJlX3R0LAomIzQzOwkJCQkJICAgICBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSwKIAkJCQkJICAgICBiYXRhZHZfY2hvb3NlX3R0LAogCQkJCQkgICAgICZhbXA7dHRfZ2xvYmFsLSZndDtjb21tb24pOwogCWlmICghdHRfcmVtb3ZlZF9ub2RlKQogCQlyZXR1cm47CiAKIAkvKiBkcm9wIHJlZmVyZW5jZSBvZiByZW1vdmUgaGFzaCBlbnRyeSAqLwotCXR0X3JlbW92ZWRfZW50cnkgPSBobGlzdF9lbnRyeSh0dF9yZW1vdmVkX25vZGUsCi0JCQkJICAgICAgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5LAotCQkJCSAgICAgICBjb21tb24uaGFzaF9lbnRyeSk7Ci0JYmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfcmVtb3ZlZF9lbnRyeSk7CiYjNDM7CWJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJhdGFkdl90dF9sb2NhbF9hZGRfcm9hbSgpIC0gaGFuZGxlIHJvYW1lZCBjbGllbnRzIGR1cmluZyBiYXRhZHZfdHRfbG9jYWxfYWRkKCkKJiM0MzsgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KJiM0MzsgKiBAdHRfZ2xvYmFsOiB0aGUgZ2xvYmFsIFRUIGVudHJ5CiYjNDM7ICogQHJvYW1lZF9iYWNrOiB3aGV0aGVyIEB0dF9nbG9iYWwgcm9hbWVkIGJhY2sKJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfYWRkX3JvYW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsLAomIzQzOwkJCQkgICAgIGJvb2wgcm9hbWVkX2JhY2spCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqb3JpZ19lbnRyeTsKJiM0MzsJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiYjNDM7CiYjNDM7CWlmICghdHRfZ2xvYmFsKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwkvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgcm9hbWluZywgYnV0IGRvbiYjMzk7dCBkbyBhbnl0aGluZyBpZiB0aGUgcm9hbWluZwomIzQzOwkgKiBwcm9jZXNzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZAomIzQzOwkgKi8KJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCAmYW1wO3R0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzX2xvY2spIHsKJiM0MzsJCWlmICh0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJaWYgKCFyb2FtZWRfYmFjaykgewomIzQzOwkJCS8qIFRoZSBnbG9iYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBST0FNSU5HIGFuZCBoYXMgdG8gYmUKJiM0MzsJCQkgKiBrZXB0IGZvciBjb25zaXN0ZW5jeSBwdXJwb3NlLgomIzQzOwkJCSAqCiYjNDM7CQkJICogYmF0YWR2X3R0X2dsb2JhbF90b19wdXJnZSgpIGV2YWx1YXRlcyByb2FtX2F0IGFzIHNvb24gYXMgaXQKJiM0MzsJCQkgKiBvYnNlcnZlcyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0sIHNvIHRoZSB0aW1lb3V0IGhhcyB0byBiZQomIzQzOwkJCSAqIHN0YW1wZWQgYmVmb3JlIHRoZSBmbGFnIGlzIHB1Ymxpc2hlZC4gT3RoZXJ3aXNlIHRoZSBlbnRyeSBjYW4KJiM0MzsJCQkgKiBiZSBkZWxldGVkIHJpZ2h0IGF3YXkgYXMgJiMzNDtSb2FtaW5nIHRpbWVvdXQmIzM0Oy4KJiM0MzsJCQkgKi8KJiM0MzsJCQl0dF9nbG9iYWwtJmd0O3JvYW1fYXQgPSBqaWZmaWVzOwomIzQzOwkJCXR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUk9BTTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUaGVzZSBub2RlIGFyZSBwcm9iYWJseSBnb2luZyB0byB1cGRhdGUgdGhlaXIgdHQgdGFibGUgKi8KJiM0MzsJaGVhZCA9ICZhbXA7dHRfZ2xvYmFsLSZndDtvcmlnX2xpc3Q7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9yaWdfZW50cnksIGhlYWQsIGxpc3QpIHsKJiM0MzsJCWJhdGFkdl9zZW5kX3JvYW1fYWR2KGJhdF9wcml2LCB0dF9nbG9iYWwtJmd0O2NvbW1vbi5hZGRyLAomIzQzOwkJCQkgICAgIHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLnZpZCwKJiM0MzsJCQkJICAgICBvcmlnX2VudHJ5LSZndDtvcmlnX25vZGUpOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwomIzQzOwlpZiAocm9hbWVkX2JhY2spCiYjNDM7CQliYXRhZHZfdHRfZ2xvYmFsX2ZyZWUoYmF0X3ByaXYsIHR0X2dsb2JhbCwgJiMzNDtSb2FtaW5nIGNhbmNlbGVkJiMzNDspOwogfQogCiAvKioKQEAgLTYxNSwyMCAmIzQzOzcxMSwxOSBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLAogewogCXN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsID0gTlVMTDsKLQlzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqb3JpZ19lbnRyeTsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbDsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KG1lc2hfaWZhY2UpOwogCXN0cnVjdCBuZXRfZGV2aWNlICppbl9kZXYgPSBOVUxMOwogCXN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47CiAJYm9vbCByb2FtZWRfYmFjayA9IGZhbHNlOwogCWJvb2wgaWlmX2lzX3dpZmkgPSBmYWxzZTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlpbnQgcGFja2V0X3NpemVfbWF4OwogCWJvb2wgcmV0ID0gZmFsc2U7CiAJdTggcmVtb3RlX2ZsYWdzOwogCWludCBoYXNoX2FkZGVkOwogCWludCB0YWJsZV9zaXplOwogCXUzMiBtYXRjaF9tYXJrOwomIzQzOwlib29sIG1vZGlmaWVkOwogCiAJaWYgKGlmaW5kZXggIT0gQkFUQURWX05VTExfSUZJTkRFWCkKIAkJaW5fZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpOwpAQCAtNjQ2LDYgJiM0Mzs3NDEsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLAogCiAJaWYgKHR0X2xvY2FsKSB7CiAJCXR0X2xvY2FsLSZndDtsYXN0X3NlZW4gPSBqaWZmaWVzOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5mbGFnc19sb2NrKTsKIAkJaWYgKHR0X2xvY2FsLSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB7CiAJCQliYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LAogCQkJCSAgICYjMzQ7UmUtYWRkaW5nIHBlbmRpbmcgY2xpZW50ICVwTSAodmlkOiAlZClcbiYjMzQ7LApAQCAtNjU2LDYgJiM0Mzs3NTMsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLAogCQkJICogZmxhZyBjYW4gYmUgcmVzZXQgbGlrZSBpdCB3YXMgbmV2ZXIgZW5xdWV1ZWQKIAkJCSAqLwogCQkJdHRfbG9jYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOz0gfkJBVEFEVl9UVF9DTElFTlRfUEVORElORzsKJiM0MzsJCQlzcGluX3VubG9ja19iaCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiYjNDM7CiAJCQlnb3RvIGFkZF9ldmVudDsKIAkJfQogCkBAIC02NzEsNiAmIzQzOzc3MCw4IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsCiAJCQl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNOwogCQkJcm9hbWVkX2JhY2sgPSB0cnVlOwogCQl9CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiYjNDM7CiAJCWdvdG8gY2hlY2tfcm9hbWluZzsKIAl9CiAKQEAgLTcwNiwxOCAmIzQzOzgwNywyMSBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLAogCQkgICAodTgpYXRvbWljX3JlYWQoJmFtcDtiYXRfcHJpdi0mZ3Q7dHQudm4pKTsKIAogCWV0aGVyX2FkZHJfY29weSh0dF9sb2NhbC0mZ3Q7Y29tbW9uLmFkZHIsIGFkZHIpOwomIzQzOwl0dF9sb2NhbC0mZ3Q7Y29tbW9uLnZpZCA9IHZpZDsKJiM0MzsJa3JlZl9pbml0KCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5yZWZjb3VudCk7CiYjNDM7CXR0X2xvY2FsLSZndDtsYXN0X3NlZW4gPSBqaWZmaWVzOwomIzQzOwl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmFkZGVkX2F0ID0gdHRfbG9jYWwtJmd0O2xhc3Rfc2VlbjsKJiM0MzsJdHRfbG9jYWwtJmd0O3ZsYW4gPSB2bGFuOwomIzQzOwlzcGluX2xvY2tfaW5pdCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19iaCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiAJLyogVGhlIGxvY2FsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgTkVXIHRvIGF2b2lkIHRvIHNlbmQgaXQgaW4KIAkgKiBhIGZ1bGwgdGFibGUgcmVzcG9uc2UgZ29pbmcgb3V0IGJlZm9yZSB0aGUgbmV4dCB0dHZuIGluY3JlbWVudAogCSAqIChjb25zaXN0ZW5jeSBjaGVjaykKIAkgKi8KIAl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ORVc7Ci0JdHRfbG9jYWwtJmd0O2NvbW1vbi52aWQgPSB2aWQ7CiAJaWYgKGlpZl9pc193aWZpKQogCQl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfV0lGSTsKLQlrcmVmX2luaXQoJmFtcDt0dF9sb2NhbC0mZ3Q7Y29tbW9uLnJlZmNvdW50KTsKLQl0dF9sb2NhbC0mZ3Q7bGFzdF9zZWVuID0gamlmZmllczsKLQl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmFkZGVkX2F0ID0gdHRfbG9jYWwtJmd0O2xhc3Rfc2VlbjsKLQl0dF9sb2NhbC0mZ3Q7dmxhbiA9IHZsYW47CiAKIAkvKiB0aGUgYmF0bWFuIGludGVyZmFjZSBtYWMgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMgc2hvdWxkIG5ldmVyIGJlCiAJICogcHVyZ2VkCkBAIC03MjUsNiAmIzQzOzgyOSw3IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsCiAJaWYgKGJhdGFkdl9jb21wYXJlX2V0aChhZGRyLCBtZXNoX2lmYWNlLSZndDtkZXZfYWRkcikgfHwKIAkgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoYWRkcikpCiAJCXR0X2xvY2FsLSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFOwomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiAKIAlrcmVmX2dldCgmYW1wO3R0X2xvY2FsLSZndDtjb21tb24ucmVmY291bnQpOwogCWhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoYmF0X3ByaXYtJmd0O3R0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LApAQCAtNzQxLDMxICYjNDM7ODQ2LDkgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkciwKIAliYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpOwogCiBjaGVja19yb2FtaW5nOgotCS8qIENoZWNrIHdoZXRoZXIgaXQgaXMgYSByb2FtaW5nLCBidXQgZG9uJiMzOTt0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nCi0JICogcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWQKLQkgKi8KLQlpZiAodHRfZ2xvYmFsICZhbXA7JmFtcDsgISh0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKSB7Ci0JCS8qIFRoZXNlIG5vZGUgYXJlIHByb2JhYmx5IGdvaW5nIHRvIHVwZGF0ZSB0aGVpciB0dCB0YWJsZSAqLwotCQloZWFkID0gJmFtcDt0dF9nbG9iYWwtJmd0O29yaWdfbGlzdDsKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uob3JpZ19lbnRyeSwgaGVhZCwgbGlzdCkgewotCQkJYmF0YWR2X3NlbmRfcm9hbV9hZHYoYmF0X3ByaXYsIHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmFkZHIsCi0JCQkJCSAgICAgdHRfZ2xvYmFsLSZndDtjb21tb24udmlkLAotCQkJCQkgICAgIG9yaWdfZW50cnktJmd0O29yaWdfbm9kZSk7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWlmIChyb2FtZWRfYmFjaykgewotCQkJYmF0YWR2X3R0X2dsb2JhbF9mcmVlKGJhdF9wcml2LCB0dF9nbG9iYWwsCi0JCQkJCSAgICAgICYjMzQ7Um9hbWluZyBjYW5jZWxlZCYjMzQ7KTsKLQkJfSBlbHNlIHsKLQkJCS8qIFRoZSBnbG9iYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBST0FNSU5HIGFuZAotCQkJICogaGFzIHRvIGJlIGtlcHQgZm9yIGNvbnNpc3RlbmN5IHB1cnBvc2UKLQkJCSAqLwotCQkJdHRfZ2xvYmFsLSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNOwotCQkJdHRfZ2xvYmFsLSZndDtyb2FtX2F0ID0gamlmZmllczsKLQkJfQotCX0KJiM0MzsJYmF0YWR2X3R0X2xvY2FsX2FkZF9yb2FtKGJhdF9wcml2LCB0dF9nbG9iYWwsIHJvYW1lZF9iYWNrKTsKIAomIzQzOwlzcGluX2xvY2tfYmgoJmFtcDt0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzX2xvY2spOwogCS8qIHN0b3JlIHRoZSBjdXJyZW50IHJlbW90ZSBmbGFncyBiZWZvcmUgYWx0ZXJpbmcgdGhlbS4gVGhpcyBoZWxwcwogCSAqIHVuZGVyc3RhbmRpbmcgaXMgZmxhZ3MgYXJlIGNoYW5naW5nIG9yIG5vdAogCSAqLwpAQCAtNzg3LDEwICYjNDM7ODcwLDEzIEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsCiAJZWxzZQogCQl0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7PSB+QkFUQURWX1RUX0NMSUVOVF9JU09MQTsKIAomIzQzOwltb2RpZmllZCA9IHJlbW90ZV9mbGFncyBeICh0dF9sb2NhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9SRU1PVEVfTUFTSyk7CiYjNDM7CXNwaW5fdW5sb2NrX2JoKCZhbXA7dHRfbG9jYWwtJmd0O2NvbW1vbi5mbGFnc19sb2NrKTsKJiM0MzsKIAkvKiBpZiBhbnkgJiMzNDtkeW5hbWljJiMzNDsgZmxhZyBoYXMgYmVlbiBtb2RpZmllZCwgcmVzZW5kIGFuIEFERCBldmVudCBmb3IgdGhpcwogCSAqIGVudHJ5IHNvIHRoYXQgYWxsIHRoZSBub2RlcyBjYW4gZ2V0IHRoZSBuZXcgZmxhZ3MKIAkgKi8KLQlpZiAocmVtb3RlX2ZsYWdzIF4gKHR0X2xvY2FsLSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX1JFTU9URV9NQVNLKSkKJiM0MzsJaWYgKG1vZGlmaWVkKQogCQliYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpOwogCiAJcmV0ID0gdHJ1ZTsKQEAgLTExMTUsNiAmIzQzOzEyMDEsNyBAQCBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLAogCXN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47CiAJdW5zaWduZWQgaW50IGxhc3Rfc2Vlbl9tc2VjczsKIAl2b2lkICpoZHI7CiYjNDM7CXUxNiBmbGFnczsKIAl1MzIgY3JjOwogCiAJbG9jYWwgPSBjb250YWluZXJfb2YoY29tbW9uLCBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LCBjb21tb24pOwpAQCAtMTEzNiwxMyAmIzQzOzEyMjMsMTUgQEAgYmF0YWR2X3R0X2xvY2FsX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwKIAogCWdlbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBoZHIpOwogCiYjNDM7CWZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pOwomIzQzOwogCWlmIChubGFfcHV0KG1zZywgQkFUQURWX0FUVFJfVFRfQUREUkVTUywgRVRIX0FMRU4sIGNvbW1vbi0mZ3Q7YWRkcikgfHwKIAkgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9UVF9DUkMzMiwgY3JjKSB8fAogCSAgICBubGFfcHV0X3UxNihtc2csIEJBVEFEVl9BVFRSX1RUX1ZJRCwgY29tbW9uLSZndDt2aWQpIHx8Ci0JICAgIG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfVFRfRkxBR1MsIGNvbW1vbi0mZ3Q7ZmxhZ3MpKQomIzQzOwkgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9UVF9GTEFHUywgZmxhZ3MpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCWlmICghKGNvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKSAmYW1wOyZhbXA7CiYjNDM7CWlmICghKGZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTk9QVVJHRSkgJmFtcDsmYW1wOwogCSAgICBubGFfcHV0X3UzMihtc2csIEJBVEFEVl9BVFRSX0xBU1RfU0VFTl9NU0VDUywgbGFzdF9zZWVuX21zZWNzKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKQEAgLTEyNDksMjkgJiM0MzsxMzM4LDIzIEBAIGludCBiYXRhZHZfdHRfbG9jYWxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB9CiAKIC8qKgotICogYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nKCkgLSBtYXJrIGEgbG9jYWwgVFQgZW50cnkgYXMgcGVuZGluZyByZW1vdmFsCiYjNDM7ICogYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nX2V2ZW50KCkgLSB0cmlnZ2VyIGV2ZW50cyBmb3IgVFQgcGVuZGluZyByZW1vdmFsCiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb24KICAqIEB0dF9sb2NhbF9lbnRyeTogbG9jYWwgVFQgZW50cnkgdG8gbWFyawogICogQGZsYWdzOiBUVCBjaGFuZ2UgZmxhZ3MgdG8gYW5ub3VuY2UgdG9nZXRoZXIgd2l0aCB0aGUgcGVuZGluZyByZW1vdmFsCiAgKiBAbWVzc2FnZTogZGVidWcgbWVzc2FnZSBkZXNjcmliaW5nIHRoZSByZWFzb24gZm9yIHRoZSBjaGFuZ2UKICAqCi0gKiBTY2hlZHVsZSB0aGUgVFQgY2hhbmdlIGFubm91bmNlbWVudCBhbmQgc2V0IEJBVEFEVl9UVF9DTElFTlRfUEVORElORyBvbiB0aGUKLSAqIGVudHJ5LiBUaGUgZW50cnkgaXMga2VwdCBpbiB0aGUgbG9jYWwgdGFibGUgdW50aWwgdGhlIG5leHQgVFRWTiBpbmNyZW1lbnQKLSAqIHNvIHRoYXQgYSBjb25zaXN0ZW5jeS1jaGVjayByZXNwb25zZSBjYW4gc3RpbGwgYmUgYW5zd2VyZWQuCiYjNDM7ICogU2NoZWR1bGUgdGhlIFRUIGNoYW5nZSBhbm5vdW5jZW1lbnQgZm9yIHRoZSBlbnRyeS4gVGhlIGVudHJ5IGlzIGtlcHQgaW4gdGhlCiYjNDM7ICogbG9jYWwgdGFibGUgdW50aWwgdGhlIG5leHQgVFRWTiBpbmNyZW1lbnQgc28gdGhhdCBhIGNvbnNpc3RlbmN5LWNoZWNrCiYjNDM7ICogcmVzcG9uc2UgY2FuIHN0aWxsIGJlIGFuc3dlcmVkLgogICovCiBzdGF0aWMgdm9pZAotYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCi0JCQkgICAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnksCi0JCQkgICAgdTE2IGZsYWdzLCBjb25zdCBjaGFyICptZXNzYWdlKQomIzQzO2JhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAomIzQzOwkJCQkgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LAomIzQzOwkJCQkgIHUxNiBmbGFncywgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKIAliYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncyk7CiAKLQkvKiBUaGUgbG9jYWwgY2xpZW50IGhhcyB0byBiZSBtYXJrZWQgYXMgJiMzNDtwZW5kaW5nIHRvIGJlIHJlbW92ZWQmIzM0OyBidXQgaGFzCi0JICogdG8gYmUga2VwdCBpbiB0aGUgdGFibGUgaW4gb3JkZXIgdG8gc2VuZCBpdCBpbiBhIGZ1bGwgdGFibGUKLQkgKiByZXNwb25zZSBpc3N1ZWQgYmVmb3JlIHRoZSBuZXQgdHR2biBpbmNyZW1lbnQgKGNvbnNpc3RlbmN5IGNoZWNrKQotCSAqLwotCXR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HOwotCiAJYmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdiwKIAkJICAgJiMzNDtMb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKSBwZW5kaW5nIHRvIGJlIHJlbW92ZWQ6ICVzXG4mIzM0OywKIAkJICAgdHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5hZGRyLApAQCAtMTI5MiwxNiAmIzQzOzEzNzUsMTcgQEAgdTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsCiAJCQkgICB1bnNpZ25lZCBzaG9ydCB2aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsCiAJCQkgICBib29sIHJvYW1pbmcpCiB7Ci0Jc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfcmVtb3ZlZF9lbnRyeTsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqdHRfcmVtb3ZlZF9ub2RlOwogCXUxNiBjdXJyX2ZsYWdzID0gQkFUQURWX05PX0ZMQUdTOwomIzQzOwlib29sIHBlbmRpbmcgPSBmYWxzZTsKIAl1MTYgZmxhZ3M7CiAKIAl0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7CiAJaWYgKCF0dF9sb2NhbF9lbnRyeSkKIAkJZ290byBvdXQ7CiAKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFnc19sb2NrKTsKIAljdXJyX2ZsYWdzID0gdHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFnczsKIAogCWZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ERUw7CkBAIC0xMzE2LDI3ICYjNDM7MTQwMCwzOSBAQCB1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkciwKIAl9CiAKIAlpZiAoISh0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTkVXKSkgewotCQliYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncywKLQkJCQkJICAgIG1lc3NhZ2UpOwomIzQzOwkJdHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7CiYjNDM7CQlwZW5kaW5nID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwlzcGluX3VubG9ja19iaCgmYW1wO3R0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChwZW5kaW5nKSB7CiYjNDM7CQliYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmdfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncywKJiM0MzsJCQkJCQkgIG1lc3NhZ2UpOwogCQlnb3RvIG91dDsKIAl9CiYjNDM7CiAJLyogaWYgdGhpcyBjbGllbnQgaGFzIGJlZW4gYWRkZWQgcmlnaHQgbm93LCBpdCBpcyBwb3NzaWJsZSB0bwogCSAqIGltbWVkaWF0ZWx5IHB1cmdlIGl0CiAJICovCiAJYmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwgQkFUQURWX1RUX0NMSUVOVF9ERUwpOwogCiYjNDM7CS8qIHJlbW92ZSBleGFjdGx5IHRoaXMgb2JqZWN0IHdoZW4gc3RpbGwgcHJlc2VudCBpbiBoYXNoICovCiAJdHRfcmVtb3ZlZF9ub2RlID0gYmF0YWR2X2hhc2hfcmVtb3ZlKGJhdF9wcml2LSZndDt0dC5sb2NhbF9oYXNoLAotCQkJCQkgICAgIGJhdGFkdl9jb21wYXJlX3R0LAomIzQzOwkJCQkJICAgICBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSwKIAkJCQkJICAgICBiYXRhZHZfY2hvb3NlX3R0LAogCQkJCQkgICAgICZhbXA7dHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbik7CiAJaWYgKCF0dF9yZW1vdmVkX25vZGUpCiAJCWdvdG8gb3V0OwogCiYjNDM7CS8qIGJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldygpIG1heSBoYXZlIGNvbW1pdHRlZCB0aGUgZW50cnkgYW5kCiYjNDM7CSAqIHRodXMgY291bnRlZCBpdCBpbiB0aGUgbG9jYWwgdGFibGUgc2l6ZSBzaW5jZSB0aGUgQkFUQURWX1RUX0NMSUVOVF9ORVcKJiM0MzsJICogY2hlY2sgYWJvdmUuCiYjNDM7CSAqLwomIzQzOwlpZiAoIShiYXRhZHZfdHRfZmxhZ3NfZ2V0KCZhbXA7dHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbikgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpKQomIzQzOwkJYmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uLnZpZCk7CiYjNDM7CiAJLyogZHJvcCByZWZlcmVuY2Ugb2YgcmVtb3ZlIGhhc2ggZW50cnkgKi8KLQl0dF9yZW1vdmVkX2VudHJ5ID0gaGxpc3RfZW50cnkodHRfcmVtb3ZlZF9ub2RlLAotCQkJCSAgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LAotCQkJCSAgICAgICBjb21tb24uaGFzaF9lbnRyeSk7Ci0JYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9yZW1vdmVkX2VudHJ5KTsKJiM0MzsJYmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7CiAKIG91dDoKIAliYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTsKQEAgLTEzNjEsMjEgJiM0MzsxNDU3LDM3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9saXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHR0X2NvbW1vbl9lbnRyeSwgbm9kZV90bXAsIGhlYWQsCiAJCQkJICBoYXNoX2VudHJ5KSB7CiYjNDM7CQlib29sIGNvbnQgPSBmYWxzZTsKJiM0MzsKIAkJdHRfbG9jYWxfZW50cnkgPSBjb250YWluZXJfb2YodHRfY29tbW9uX2VudHJ5LAogCQkJCQkgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LAogCQkJCQkgICAgICBjb21tb24pOwotCQlpZiAodHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0UpCi0JCQljb250aW51ZTsKIAotCQkvKiBlbnRyeSBhbHJlYWR5IG1hcmtlZCBmb3IgZGVsZXRpb24gKi8KLQkJaWYgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKQotCQkJY29udGludWU7CiYjNDM7CQlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsICZhbXA7dHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFnc19sb2NrKSB7CiYjNDM7CQkJaWYgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKSB7CiYjNDM7CQkJCWNvbnQgPSB0cnVlOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJLyogZW50cnkgYWxyZWFkeSBtYXJrZWQgZm9yIGRlbGV0aW9uICovCiYjNDM7CQkJaWYgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB7CiYjNDM7CQkJCWNvbnQgPSB0cnVlOwomIzQzOwkJCQlicmVhazsKJiM0MzsJCQl9CiYjNDM7CiYjNDM7CQkJaWYgKCFiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9sb2NhbF9lbnRyeS0mZ3Q7bGFzdF9zZWVuLCB0aW1lb3V0KSkgewomIzQzOwkJCQljb250ID0gdHJ1ZTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HOwomIzQzOwkJfQogCi0JCWlmICghYmF0YWR2X2hhc190aW1lZF9vdXQodHRfbG9jYWxfZW50cnktJmd0O2xhc3Rfc2VlbiwgdGltZW91dCkpCiYjNDM7CQlpZiAoY29udCkKIAkJCWNvbnRpbnVlOwogCi0JCWJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZyhiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksCi0JCQkJCSAgICBCQVRBRFZfVFRfQ0xJRU5UX0RFTCwgJiMzNDt0aW1lZCBvdXQmIzM0Oyk7CiYjNDM7CQliYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmdfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LAomIzQzOwkJCQkJCSAgQkFUQURWX1RUX0NMSUVOVF9ERUwsICYjMzQ7dGltZWQgb3V0JiMzNDspOwogCX0KIH0KIApAQCAtMTU4MSw4ICYjNDM7MTY5MywxMCBAQCBiYXRhZHZfdHRfZ2xvYmFsX3N5bmNfZmxhZ3Moc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbCkKIAkJZmxhZ3MgfD0gb3JpZ19lbnRyeS0mZ3Q7ZmxhZ3M7CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlmbGFncyB8PSB0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyAofkJBVEFEVl9UVF9TWU5DX01BU0spOwotCXR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzID0gZmxhZ3M7CiYjNDM7CXNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgJmFtcDt0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFnc19sb2NrKSB7CiYjNDM7CQlmbGFncyB8PSB0dF9nbG9iYWwtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyAofkJBVEFEVl9UVF9TWU5DX01BU0spOwomIzQzOwkJdHRfZ2xvYmFsLSZndDtjb21tb24uZmxhZ3MgPSBmbGFnczsKJiM0MzsJfQogfQogCiAvKioKQEAgLTE2NjQsOCAmIzQzOzE3NzgsMTAgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAlzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uOwogCWJvb2wgcmV0ID0gZmFsc2U7CiYjNDM7CXUxNiBnbG9iYWxfZmxhZ3M7CiAJdTE2IGxvY2FsX2ZsYWdzOwogCWludCBoYXNoX2FkZGVkOwomIzQzOwlib29sIGRlbGV0ZTsKIAogCS8qIGlnbm9yZSBnbG9iYWwgZW50cmllcyBmcm9tIGJhY2tib25lIG5vZGVzICovCiAJaWYgKGJhdGFkdl9ibGFfaXNfYmFja2JvbmVfZ3dfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLSZndDtvcmlnLCB2aWQpKQpAQCAtMTY3OCw5ICYjNDM7MTc5NCwxMSBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCSAqIGZvciBhIHJvYW1pbmcgYWR2ZXJ0aXNlbWVudCBpbnN0ZWFkIG9mIG1hbnVhbGx5IG1lc3NpbmcgdXAgdGhlIGdsb2JhbAogCSAqIHRhYmxlCiAJICovCi0JaWYgKChmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApICZhbXA7JmFtcDsgdHRfbG9jYWxfZW50cnkgJmFtcDsmYW1wOwotCSAgICAhKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpKQotCQlnb3RvIG91dDsKJiM0MzsJaWYgKChmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApICZhbXA7JmFtcDsgdHRfbG9jYWxfZW50cnkpIHsKJiM0MzsJCWxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCgmYW1wO3R0X2xvY2FsX2VudHJ5LSZndDtjb21tb24pOwomIzQzOwkJaWYgKCEobG9jYWxfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAlpZiAoIXR0X2dsb2JhbF9lbnRyeSkgewogCQl0dF9nbG9iYWxfZW50cnkgPSBrbWVtX2NhY2hlX3phbGxvYyhiYXRhZHZfdGdfY2FjaGUsCkBAIC0xNjkxLDkgJiM0MzsxODA5LDEzIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCWNvbW1vbiA9ICZhbXA7dHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb247CiAJCWV0aGVyX2FkZHJfY29weShjb21tb24tJmd0O2FkZHIsIHR0X2FkZHIpOwogCQljb21tb24tJmd0O3ZpZCA9IHZpZDsKJiM0MzsJCXNwaW5fbG9ja19pbml0KCZhbXA7Y29tbW9uLSZndDtmbGFnc19sb2NrKTsKIAotCQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbW1vbi0mZ3Q7YWRkcikpCiYjNDM7CQlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbW1vbi0mZ3Q7YWRkcikpIHsKJiM0MzsJCQlzcGluX2xvY2tfYmgoJmFtcDtjb21tb24tJmd0O2ZsYWdzX2xvY2spOwogCQkJY29tbW9uLSZndDtmbGFncyA9IGZsYWdzICZhbXA7ICh+QkFUQURWX1RUX1NZTkNfTUFTSyk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfYmgoJmFtcDtjb21tb24tJmd0O2ZsYWdzX2xvY2spOwomIzQzOwkJfQogCiAJCXR0X2dsb2JhbF9lbnRyeS0mZ3Q7cm9hbV9hdCA9IDA7CiAJCS8qIG5vZGUgbXVzdCBzdG9yZSBjdXJyZW50IHRpbWUgaW4gY2FzZSBvZiByb2FtaW5nLiBUaGlzIGlzCkBAIC0xNzMzLDggJiM0MzsxODU1LDEwIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCSAqICAgIG9yaWdpbmF0b3IgbGlzdCBhbmQgYWRkIHRoZSBuZXcgb25lIG9yaWdfZW50cnkKIAkJICovCiAJCWlmIChmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApIHsKLQkJCWlmICghKGNvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9URU1QKSkKJiM0MzsJCQlnbG9iYWxfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KGNvbW1vbik7CiYjNDM7CQkJaWYgKCEoZ2xvYmFsX2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkpCiAJCQkJZ290byBvdXQ7CiYjNDM7CiAJCQlpZiAoYmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9oYXNfb3JpZyh0dF9nbG9iYWxfZW50cnksCiAJCQkJCQkJICAgIG9yaWdfbm9kZSwgTlVMTCkpCiAJCQkJZ290byBvdXRfcmVtb3ZlOwpAQCAtMTc0Miw2ICYjNDM7MTg2Niw5IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCQlnb3RvIGFkZF9vcmlnX2VudHJ5OwogCQl9CiAKJiM0MzsJCWRlbGV0ZSA9IGZhbHNlOwomIzQzOwomIzQzOwkJc3Bpbl9sb2NrX2JoKCZhbXA7Y29tbW9uLSZndDtmbGFnc19sb2NrKTsKIAkJLyogaWYgdGhlIGNsaWVudCB3YXMgdGVtcG9yYXJ5IGFkZGVkIGJlZm9yZSByZWNlaXZpbmcgdGhlIGZpcnN0CiAJCSAqIE9HTSBhbm5vdW5jaW5nIGl0LCB3ZSBoYXZlIHRvIGNsZWFyIHRoZSBURU1QIGZsYWcuIEFsc28sCiAJCSAqIHJlbW92ZSB0aGUgcHJldmlvdXMgdGVtcG9yYXJ5IG9yaWcgbm9kZSBhbmQgcmUtYWRkIGl0CkBAIC0xNzQ5LDcgJiM0MzsxODc2LDcgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJICogaXMgYSBub24tdGVtcG9yYXJ5IGVudHJ5IGlzIHByZWZlcnJlZC4KIAkJICovCiAJCWlmIChjb21tb24tJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgewotCQkJYmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7CiYjNDM7CQkJZGVsZXRlID0gdHJ1ZTsKIAkJCWNvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CQVRBRFZfVFRfQ0xJRU5UX1RFTVA7CiAJCX0KIApAQCAtMTc2OCwxMCAmIzQzOzE4OTUsMTQgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJICogbmV3IG9uZS4KIAkJICovCiAJCWlmIChjb21tb24tJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkgewotCQkJYmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7Ci0JCQljb21tb24tJmd0O2ZsYWdzICZhbXA7PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNOwomIzQzOwkJCWRlbGV0ZSA9IHRydWU7CiAJCQl0dF9nbG9iYWxfZW50cnktJmd0O3JvYW1fYXQgPSAwOwomIzQzOwkJCWNvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDs9IH5CQVRBRFZfVFRfQ0xJRU5UX1JPQU07CiAJCX0KJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Y29tbW9uLSZndDtmbGFnc19sb2NrKTsKJiM0MzsKJiM0MzsJCWlmIChkZWxldGUpCiYjNDM7CQkJYmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7CiAJfQogYWRkX29yaWdfZW50cnk6CiAJLyogYWRkIHRoZSBuZXcgb3JpZ19lbnRyeSAoaWYgbmVlZGVkKSBvciB1cGRhdGUgaXQgKi8KQEAgLTE3OTUsNiAmIzQzOzE5MjYsOCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCWxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgdHRfYWRkciwgdmlkLAogCQkJCQkgICAgICYjMzQ7Z2xvYmFsIHR0IHJlY2VpdmVkJiMzNDssCiAJCQkJCSAgICAgZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKTsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrX2JoKCZhbXA7dHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3NfbG9jayk7CiAJdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gbG9jYWxfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9XSUZJOwogCiAJaWYgKCEoZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSkKQEAgLTE4MDIsNiAmIzQzOzE5MzUsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkgKiByb2FtaW5nIHN0YXRlIGFueW1vcmUuCiAJCSAqLwogCQl0dF9nbG9iYWxfZW50cnktJmd0O2NvbW1vbi5mbGFncyAmYW1wOz0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTsKJiM0MzsJc3Bpbl91bmxvY2tfYmgoJmFtcDt0dF9nbG9iYWxfZW50cnktJmd0O2NvbW1vbi5mbGFnc19sb2NrKTsKIAogb3V0OgogCWJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbF9lbnRyeSk7CkBAIC0xODcxLDkgJiM0MzsyMDA1LDkgQEAgYmF0YWR2X3R0X2dsb2JhbF9kdW1wX3N1YmVudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsIHUzMiBzZXEsCiAJCQkgICAgICAgc3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWcsCiAJCQkgICAgICAgYm9vbCBiZXN0KQogewotCXUxNiBmbGFncyA9IChjb21tb24tJmd0O2ZsYWdzICZhbXA7ICh+QkFUQURWX1RUX1NZTkNfTUFTSykpIHwgb3JpZy0mZ3Q7ZmxhZ3M7CiAJc3RydWN0IGJhdGFkdl9vcmlnX25vZGVfdmxhbiAqdmxhbjsKIAl1OCBsYXN0X3R0dm47CiYjNDM7CXUxNiBmbGFnczsKIAl2b2lkICpoZHI7CiAJdTMyIGNyYzsKIApAQCAtMTg5Miw2ICYjNDM7MjAyNiw3IEBAIGJhdGFkdl90dF9nbG9iYWxfZHVtcF9zdWJlbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgc2VxLAogCWlmICghaGRyKQogCQlyZXR1cm4gLUVOT0JVRlM7CiAKJiM0MzsJZmxhZ3MgPSAoYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pICZhbXA7ICh+QkFUQURWX1RUX1NZTkNfTUFTSykpIHwgb3JpZy0mZ3Q7ZmxhZ3M7CiAJbGFzdF90dHZuID0gUkVBRF9PTkNFKG9yaWctJmd0O29yaWdfbm9kZS0mZ3Q7bGFzdF90dHZuKTsKIAogCWlmIChubGFfcHV0KG1zZywgQkFUQURWX0FUVFJfVFRfQUREUkVTUywgRVRIX0FMRU4sIGNvbW1vbi0mZ3Q7YWRkcikgfHwKQEAgLTIxNzksOSAmIzQzOzIzMTQsMTIgQEAgYmF0YWR2X3R0X2dsb2JhbF9kZWxfcm9hbWluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGxhc3RfZW50cnkpIHsKLQkJLyogaXRzIHRoZSBsYXN0IG9uZSwgbWFyayBmb3Igcm9hbWluZy4gKi8KLQkJdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNOwotCQl0dF9nbG9iYWxfZW50cnktJmd0O3JvYW1fYXQgPSBqaWZmaWVzOwomIzQzOwkJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCAmYW1wO3R0X2dsb2JhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzX2xvY2spIHsKJiM0MzsJCQkvKiBpdHMgdGhlIGxhc3Qgb25lLCBtYXJrIGZvciByb2FtaW5nLiAqLwomIzQzOwkJCXR0X2dsb2JhbF9lbnRyeS0mZ3Q7cm9hbV9hdCA9IGppZmZpZXM7CiYjNDM7CiYjNDM7CQkJdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNOwomIzQzOwkJfQogCX0gZWxzZSB7CiAJCS8qIHRoZXJlIGlzIGFub3RoZXIgZW50cnksIHdlIGNhbiBzaW1wbHkgZGVsZXRlIHRoaXMKIAkJICogb25lIGFuZCBjYW4gc3RpbGwgdXNlIHRoZSBvdGhlciBvbmUuCkBAIC0yMzMwLDE2ICYjNDM7MjQ2OCwxOCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX3RvX3B1cmdlKHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwsCiAJdW5zaWduZWQgbG9uZyB0ZW1wX3RpbWVvdXQgPSBCQVRBRFZfVFRfQ0xJRU5UX1RFTVBfVElNRU9VVDsKIAlib29sIHB1cmdlID0gZmFsc2U7CiAKLQlpZiAoKHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkgJmFtcDsmYW1wOwotCSAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtJmd0O3JvYW1fYXQsIHJvYW1fdGltZW91dCkpIHsKLQkJcHVyZ2UgPSB0cnVlOwotCQkqbXNnID0gJiMzNDtSb2FtaW5nIHRpbWVvdXRcbiYjMzQ7OwotCX0KJiM0MzsJc2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCAmYW1wO3R0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzX2xvY2spIHsKJiM0MzsJCWlmICgodHRfZ2xvYmFsLSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYmF0YWR2X2hhc190aW1lZF9vdXQodHRfZ2xvYmFsLSZndDtyb2FtX2F0LCByb2FtX3RpbWVvdXQpKSB7CiYjNDM7CQkJcHVyZ2UgPSB0cnVlOwomIzQzOwkJCSptc2cgPSAmIzM0O1JvYW1pbmcgdGltZW91dFxuJiMzNDs7CiYjNDM7CQl9CiAKLQlpZiAoKHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgJmFtcDsmYW1wOwotCSAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtJmd0O2NvbW1vbi5hZGRlZF9hdCwgdGVtcF90aW1lb3V0KSkgewotCQlwdXJnZSA9IHRydWU7Ci0JCSptc2cgPSAmIzM0O1RlbXBvcmFyeSBjbGllbnQgdGltZW91dFxuJiMzNDs7CiYjNDM7CQlpZiAoKHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgJmFtcDsmYW1wOwomIzQzOwkJICAgIGJhdGFkdl9oYXNfdGltZWRfb3V0KHR0X2dsb2JhbC0mZ3Q7Y29tbW9uLmFkZGVkX2F0LCB0ZW1wX3RpbWVvdXQpKSB7CiYjNDM7CQkJcHVyZ2UgPSB0cnVlOwomIzQzOwkJCSptc2cgPSAmIzM0O1RlbXBvcmFyeSBjbGllbnQgdGltZW91dFxuJiMzNDs7CiYjNDM7CQl9CiAJfQogCiAJcmV0dXJuIHB1cmdlOwpAQCAtMjQzNyw4ICYjNDM7MjU3Nyw4IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfdGFibGVfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KQogLyoqCiAgKiBfYmF0YWR2X2lzX2FwX2lzb2xhdGVkKCkgLSBjaGVjayB3aGV0aGVyIHR3byBjbGllbnRzIGFyZSBBUC1pc29sYXRlZCBmcm9tCiAgKiAgZWFjaCBvdGhlcgotICogQHR0X2xvY2FsX2VudHJ5OiBsb2NhbCBUVCBlbnRyeSBvZiB0aGUgc2VuZGluZyBjbGllbnQKLSAqIEB0dF9nbG9iYWxfZW50cnk6IGdsb2JhbCBUVCBlbnRyeSBvZiB0aGUgZGVzdGluYXRpb24gY2xpZW50CiYjNDM7ICogQHR0X2xvY2FsX2VudHJ5OiBsb2NhbCBUVCBlbnRyeSBvZiBvbmUgbG9jYWwgY2xpZW50CiYjNDM7ICogQHR0X2dsb2JhbF9lbnRyeTogZ2xvYmFsIFRUIGVudHJ5IG9mIHRoZSByZW1vdGUgY2xpZW50CiAgKgogICogUmV0dXJuOiB0cnVlIGlmIHRyYWZmaWMgYmV0d2VlbiB0aGUgdHdvIGNsaWVudHMgc2hvdWxkIGJlIGRyb3BwZWQgYmVjYXVzZQogICogIGVpdGhlciBib3RoIGFyZSBXaUZpIGNsaWVudHMgb3IgYm90aCBjYXJyeSB0aGUgSVNPTEFUSU9OIGZsYWc7IGZhbHNlCkBAIC0yNDQ4LDEzICYjNDM7MjU4OCwxOSBAQCBzdGF0aWMgYm9vbAogX2JhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSwKIAkJICAgICAgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnkpCiB7Ci0JaWYgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9XSUZJICZhbXA7JmFtcDsKLQkgICAgdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9XSUZJKQomIzQzOwl1MTYgZ2xvYmFsX2ZsYWdzOwomIzQzOwl1MTYgbG9jYWxfZmxhZ3M7CiYjNDM7CiYjNDM7CWdsb2JhbF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoJmFtcDt0dF9nbG9iYWxfZW50cnktJmd0O2NvbW1vbik7CiYjNDM7CWxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCgmYW1wO3R0X2xvY2FsX2VudHJ5LSZndDtjb21tb24pOwomIzQzOwomIzQzOwlpZiAobG9jYWxfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9XSUZJICZhbXA7JmFtcDsKJiM0MzsJICAgIGdsb2JhbF9mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkpCiAJCXJldHVybiB0cnVlOwogCiAJLyogY2hlY2sgaWYgdGhlIHR3byBjbGllbnRzIGFyZSBtYXJrZWQgYXMgaXNvbGF0ZWQgKi8KLQlpZiAodHRfbG9jYWxfZW50cnktJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX0lTT0xBICZhbXA7JmFtcDsKLQkgICAgdHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9JU09MQSkKJiM0MzsJaWYgKGxvY2FsX2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEgJmFtcDsmYW1wOwomIzQzOwkgICAgZ2xvYmFsX2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEpCiAJCXJldHVybiB0cnVlOwogCiAJcmV0dXJuIGZhbHNlOwpAQCAtMjQ4MywxMSAmIzQzOzI2MjksMTUgQEAgc3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKmJhdGFkdl90cmFuc3RhYmxlX3NlYXJjaChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCXN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqYmVzdF9lbnRyeTsKIAlzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDsKJiM0MzsJdTE2IGZsYWdzOwogCiAJaWYgKHNyYyAmYW1wOyZhbXA7IGJhdGFkdl92bGFuX2FwX2lzb2xhX2dldChiYXRfcHJpdiwgdmlkKSkgewogCQl0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIHNyYywgdmlkKTsKLQkJaWYgKCF0dF9sb2NhbF9lbnRyeSB8fAotCQkgICAgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSkKJiM0MzsJCWlmICghdHRfbG9jYWxfZW50cnkpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlmbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoJmFtcDt0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uKTsKJiM0MzsJCWlmIChmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI1NjIsNiAmIzQzOzI3MTIsOCBAQCBzdGF0aWMgdTMyIGJhdGFkdl90dF9nbG9iYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfY29tbW9uLCBoZWFkLCBoYXNoX2VudHJ5KSB7CiYjNDM7CQkJdTE2IHR0X2ZsYWdzOwomIzQzOwogCQkJdHRfZ2xvYmFsID0gY29udGFpbmVyX29mKHR0X2NvbW1vbiwKIAkJCQkJCSBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSwKIAkJCQkJCSBjb21tb24pOwpAQCAtMjU3MSwxOCAmIzQzOzI3MjMsMjEgQEAgc3RhdGljIHUzMiBiYXRhZHZfdHRfZ2xvYmFsX2NyYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LAogCQkJaWYgKHR0X2NvbW1vbi0mZ3Q7dmlkICE9IHZpZCkKIAkJCQljb250aW51ZTsKIAomIzQzOwkJCXR0X2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCh0dF9jb21tb24pOwomIzQzOwogCQkJLyogUm9hbWluZyBjbGllbnRzIGFyZSBpbiB0aGUgZ2xvYmFsIHRhYmxlIGZvcgogCQkJICogY29uc2lzdGVuY3kgb25seS4gVGhleSBkb24mIzM5O3QgaGF2ZSB0byBiZQogCQkJICogdGFrZW4gaW50byBhY2NvdW50IHdoaWxlIGNvbXB1dGluZyB0aGUKIAkJCSAqIGdsb2JhbCBjcmMKIAkJCSAqLwotCQkJaWYgKHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKQomIzQzOwkJCWlmICh0dF9mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pCiAJCQkJY29udGludWU7CiYjNDM7CiAJCQkvKiBUZW1wb3JhcnkgY2xpZW50cyBoYXZlIG5vdCBiZWVuIGFubm91bmNlZCB5ZXQsIHNvCiAJCQkgKiB0aGV5IGhhdmUgdG8gYmUgc2tpcHBlZCB3aGlsZSBjb21wdXRpbmcgdGhlIGdsb2JhbAogCQkJICogY3JjCiAJCQkgKi8KLQkJCWlmICh0dF9jb21tb24tJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkKJiM0MzsJCQlpZiAodHRfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9URU1QKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKiBmaW5kIG91dCBpZiB0aGlzIGdsb2JhbCBlbnRyeSBpcyBhbm5vdW5jZWQgYnkgdGhpcwpAQCAtMjY0MiwxOCAmIzQzOzI3OTcsMjQgQEAgc3RhdGljIHUzMiBiYXRhZHZfdHRfbG9jYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAKIAkJcmN1X3JlYWRfbG9jaygpOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfY29tbW9uLCBoZWFkLCBoYXNoX2VudHJ5KSB7CiYjNDM7CQkJdTE2IHR0X2ZsYWdzOwomIzQzOwogCQkJLyogY29tcHV0ZSB0aGUgQ1JDIG9ubHkgZm9yIGVudHJpZXMgYmVsb25naW5nIHRvIHRoZQogCQkJICogVkxBTiBpZGVudGlmaWVkIGJ5IHZpZAogCQkJICovCiAJCQlpZiAodHRfY29tbW9uLSZndDt2aWQgIT0gdmlkKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJdHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbik7CiYjNDM7CiAJCQkvKiBub3QgeWV0IGNvbW1pdHRlZCBjbGllbnRzIGhhdmUgbm90IHRvIGJlIHRha2VuIGludG8KIAkJCSAqIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIHRoZSBDUkMKIAkJCSAqLwotCQkJaWYgKHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpCiYjNDM7CQkJaWYgKHR0X2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTkVXKQogCQkJCWNvbnRpbnVlOwogCiYjNDM7CQkJZmxhZ3MgPSB0dF9mbGFncyAmYW1wOyBCQVRBRFZfVFRfU1lOQ19NQVNLOwomIzQzOwogCQkJLyogdXNlIG5ldHdvcmsgb3JkZXIgdG8gcmVhZCB0aGUgVklEOiB0aGlzIGVuc3VyZXMgdGhhdAogCQkJICogZXZlcnkgbm9kZSByZWFkcyB0aGUgYnl0ZXMgaW4gdGhlIHNhbWUgb3JkZXIuCiAJCQkgKi8KQEAgLTI2NjMsNyAmIzQzOzI4MjQsNiBAQCBzdGF0aWMgdTMyIGJhdGFkdl90dF9sb2NhbF9jcmMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCS8qIGNvbXB1dGUgdGhlIENSQyBvbiBmbGFncyB0aGF0IGhhdmUgdG8gYmUga2VwdCBpbiBzeW5jCiAJCQkgKiBhbW9uZyBub2RlcwogCQkJICovCi0JCQlmbGFncyA9IHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX1NZTkNfTUFTSzsKIAkJCWNyY190bXAgPSBjcmMzMmMoY3JjX3RtcCwgJmFtcDtmbGFncywgc2l6ZW9mKGZsYWdzKSk7CiAKIAkJCWNyYyBePSBjcmMzMmMoY3JjX3RtcCwgdHRfY29tbW9uLSZndDthZGRyLCBFVEhfQUxFTik7CkBAIC0yODIxLDE3ICYjNDM7Mjk4MSwxOSBAQCBiYXRhZHZfdHRfcmVxX25vZGVfbmV3KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAgKgogICogUmV0dXJuOiB0cnVlIGlmIHRoZSBlbnRyeSBpcyBhIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIGJhdGFkdl90dF9sb2NhbF92YWxpZChjb25zdCB2b2lkICplbnRyeV9wdHIsCiYjNDM7c3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKHZvaWQgKmVudHJ5X3B0ciwKIAkJCQkgIGNvbnN0IHZvaWQgKmRhdGFfcHRyLAogCQkJCSAgdTggKmZsYWdzKQogewotCWNvbnN0IHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnkgPSBlbnRyeV9wdHI7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnkgPSBlbnRyeV9wdHI7CiYjNDM7CXUxNiB0dF9mbGFnczsKIAotCWlmICh0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTkVXKQomIzQzOwl0dF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQodHRfY29tbW9uX2VudHJ5KTsKJiM0MzsJaWYgKHR0X2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfTkVXKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlpZiAoZmxhZ3MpCi0JCSpmbGFncyA9IHR0X2NvbW1vbl9lbnRyeS0mZ3Q7ZmxhZ3M7CiYjNDM7CQkqZmxhZ3MgPSB0dF9mbGFnczsKIAogCXJldHVybiB0cnVlOwogfQpAQCAtMjg0OCwxNiAmIzQzOzMwMTAsMTggQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKGNvbnN0IHZvaWQgKmVudHJ5X3B0ciwKICAqCiAgKiBSZXR1cm46IHRydWUgaWYgdGhlIGVudHJ5IGlzIGEgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF92YWxpZChjb25zdCB2b2lkICplbnRyeV9wdHIsCiYjNDM7c3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF92YWxpZCh2b2lkICplbnRyeV9wdHIsCiAJCQkJICAgY29uc3Qgdm9pZCAqZGF0YV9wdHIsCiAJCQkJICAgdTggKmZsYWdzKQogewotCWNvbnN0IHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnkgPSBlbnRyeV9wdHI7Ci0JY29uc3Qgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTsKJiM0MzsJc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeSA9IGVudHJ5X3B0cjsKIAljb25zdCBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gZGF0YV9wdHI7CiYjNDM7CXN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7CiYjNDM7CXUxNiB0dF9mbGFnczsKIAotCWlmICh0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTSB8fAotCSAgICB0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkKJiM0MzsJdHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbl9lbnRyeSk7CiYjNDM7CWlmICh0dF9mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0gfHwKJiM0MzsJICAgIHR0X2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJdHRfZ2xvYmFsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSwKQEAgLTI4ODYsNyAmIzQzOzMwNTAsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX3ZhbGlkKGNvbnN0IHZvaWQgKmVudHJ5X3B0ciwKIHN0YXRpYyB1MTYgYmF0YWR2X3R0X3R2bHZfZ2VuZXJhdGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkgICBzdHJ1Y3QgYmF0YWR2X2hhc2h0YWJsZSAqaGFzaCwKIAkJCQkgICB2b2lkICp0dmx2X2J1ZmYsIHUxNiB0dF9sZW4sCi0JCQkJICAgYm9vbCAoKnZhbGlkX2NiKShjb25zdCB2b2lkICosCiYjNDM7CQkJCSAgIGJvb2wgKCp2YWxpZF9jYikodm9pZCAqLAogCQkJCQkJICAgIGNvbnN0IHZvaWQgKiwKIAkJCQkJCSAgICB1OCAqZmxhZ3MpLAogCQkJCSAgIHZvaWQgKmNiX2RhdGEpCkBAIC0zNTExLDE5ICYjNDM7MzY3NSwyMSBAQCBib29sIGJhdGFkdl9pc19teV9jbGllbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsCiAJCQkgdW5zaWduZWQgc2hvcnQgdmlkKQogewogCXN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5OwotCWJvb2wgcmV0ID0gZmFsc2U7CiYjNDM7CXUxNiB0dF9mbGFnczsKJiM0MzsJYm9vbCByZXQ7CiAKIAl0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7CiAJaWYgKCF0dF9sb2NhbF9lbnRyeSkKLQkJZ290byBvdXQ7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXR0X2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCgmYW1wO3R0X2xvY2FsX2VudHJ5LSZndDtjb21tb24pOwomIzQzOwogCS8qIENoZWNrIGlmIHRoZSBjbGllbnQgaGFzIGJlZW4gbG9naWNhbGx5IGRlbGV0ZWQgKGJ1dCBpcyBrZXB0IGZvcgogCSAqIGNvbnNpc3RlbmN5IHB1cnBvc2UpCiAJICovCi0JaWYgKCh0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykgfHwKLQkgICAgKHR0X2xvY2FsX2VudHJ5LSZndDtjb21tb24uZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gdHJ1ZTsKLW91dDoKJiM0MzsJcmV0ID0gISgodHRfZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB8fAomIzQzOwkJKHR0X2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkpOwomIzQzOwogCWJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpOwogCXJldHVybiByZXQ7CiB9CkBAIC0zNzgyLDE2ICYjNDM7Mzk0OCwxMyBAQCB2b2lkIGJhdGFkdl90dF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpCiB9CiAKIC8qKgotICogYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncygpIC0gc2V0IG9yIHVuc2V0IHRoZSBzcGVjaWZpZWQgZmxhZ3Mgb24gdGhlIGxvY2FsCi0gKiAgdGFibGUgYW5kIHBvc3NpYmx5IGNvdW50IHRoZW0gaW4gdGhlIFRUIHNpemUKJiM0MzsgKiBiYXRhZHZfdHRfbG9jYWxfdHJhbnNpdGlvbl9uZXcoKSAtIHVuc2V0IHRoZSBORVcgZmxhZyBvbiB0aGUgbG9jYWwKJiM0MzsgKiAgdGFibGUgYW5kIGNvdW50IHRoZW0gaW4gdGhlIFRUIHNpemUKICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvbgotICogQGZsYWdzOiB0aGUgZmxhZyB0byBzd2l0Y2gKLSAqIEBlbmFibGU6IHdoZXRoZXIgdG8gc2V0IG9yIHVuc2V0IHRoZSBmbGFnCi0gKiBAY291bnQ6IHdoZXRoZXIgdG8gaW5jcmVhc2UgdGhlIFRUIHNpemUgYnkgdGhlIG51bWJlciBvZiBjaGFuZ2VkIGVudHJpZXMKICAqLwotc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1MTYgZmxhZ3MsCi0JCQkJICAgICAgYm9vbCBlbmFibGUsIGJvb2wgY291bnQpCiYjNDM7c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3RyYW5zaXRpb25fbmV3KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpCiB7CiYjNDM7CXNwaW5sb2NrX3QgKmxpc3RfbG9jazsgLyogcHJvdGVjdHMgd3JpdGUgYWNjZXNzIHRvIHRoZSBoYXNoIGxpc3RzICovCiAJc3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmhhc2ggPSBiYXRfcHJpdi0mZ3Q7dHQubG9jYWxfaGFzaDsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5OwogCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwpAQCAtMzgwMiwyNyAmIzQzOzM5NjUsMjggQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1MTYgZmxhZ3MsCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgaGFzaC0mZ3Q7c2l6ZTsgaSYjNDM7JiM0MzspIHsKIAkJaGVhZCA9ICZhbXA7aGFzaC0mZ3Q7dGFibGVbaV07CiYjNDM7CQlsaXN0X2xvY2sgPSAmYW1wO2hhc2gtJmd0O2xpc3RfbG9ja3NbaV07CiAKLQkJcmN1X3JlYWRfbG9jaygpOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfY29tbW9uX2VudHJ5LAotCQkJCQkgaGVhZCwgaGFzaF9lbnRyeSkgewotCQkJaWYgKGVuYWJsZSkgewotCQkJCWlmICgodHRfY29tbW9uX2VudHJ5LSZndDtmbGFncyAmYW1wOyBmbGFncykgPT0gZmxhZ3MpCi0JCQkJCWNvbnRpbnVlOwotCQkJCXR0X2NvbW1vbl9lbnRyeS0mZ3Q7ZmxhZ3MgfD0gZmxhZ3M7Ci0JCQl9IGVsc2UgewotCQkJCWlmICghKHR0X2NvbW1vbl9lbnRyeS0mZ3Q7ZmxhZ3MgJmFtcDsgZmxhZ3MpKQotCQkJCQljb250aW51ZTsKLQkJCQl0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzICZhbXA7PSB+ZmxhZ3M7CiYjNDM7CQlzcGluX2xvY2tfYmgobGlzdF9sb2NrKTsKJiM0MzsJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHR0X2NvbW1vbl9lbnRyeSwgaGVhZCwgaGFzaF9lbnRyeSkgewomIzQzOwkJCWJvb2wgY29udCA9IGZhbHNlOwomIzQzOwomIzQzOwkJCXNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgJmFtcDt0dF9jb21tb25fZW50cnktJmd0O2ZsYWdzX2xvY2spIHsKJiM0MzsJCQkJaWYgKCEodHRfY29tbW9uX2VudHJ5LSZndDtmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX05FVykpIHsKJiM0MzsJCQkJCWNvbnQgPSB0cnVlOwomIzQzOwkJCQkJYnJlYWs7CiYjNDM7CQkJCX0KJiM0MzsKJiM0MzsJCQkJdHRfY29tbW9uX2VudHJ5LSZndDtmbGFncyAmYW1wOz0gfkJBVEFEVl9UVF9DTElFTlRfTkVXOwogCQkJfQogCi0JCQlpZiAoIWNvdW50KQomIzQzOwkJCWlmIChjb250KQogCQkJCWNvbnRpbnVlOwogCiAJCQliYXRhZHZfdHRfbG9jYWxfc2l6ZV9pbmMoYmF0X3ByaXYsCiAJCQkJCQkgdHRfY29tbW9uX2VudHJ5LSZndDt2aWQpOwogCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwkJc3Bpbl91bmxvY2tfYmgobGlzdF9sb2NrKTsKIAl9CiB9CiAKQEAgLTM4NTQsMTYgJiM0Mzs0MDE4LDMxIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9wZW5kaW5nX2NsaWVudHMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdikKIAkJc3Bpbl9sb2NrX2JoKGxpc3RfbG9jayk7CiAJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHRfY29tbW9uLCBub2RlX3RtcCwgaGVhZCwKIAkJCQkJICBoYXNoX2VudHJ5KSB7Ci0JCQlpZiAoISh0dF9jb21tb24tJmd0O2ZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykpCi0JCQkJY29udGludWU7CiYjNDM7CQkJYm9vbCBjb250ID0gZmFsc2U7CiAKLQkJCWJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsCi0JCQkJICAgJiMzNDtEZWxldGluZyBsb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKTogcGVuZGluZ1xuJiMzNDssCi0JCQkJICAgdHRfY29tbW9uLSZndDthZGRyLAotCQkJCSAgIGJhdGFkdl9wcmludF92aWQodHRfY29tbW9uLSZndDt2aWQpKTsKJiM0MzsJCQlzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsICZhbXA7dHRfY29tbW9uLSZndDtmbGFnc19sb2NrKSB7CiYjNDM7CQkJCWlmICghKHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSkgewomIzQzOwkJCQkJY29udCA9IHRydWU7CiYjNDM7CQkJCQlicmVhazsKJiM0MzsJCQkJfQomIzQzOwomIzQzOwkJCQliYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LAomIzQzOwkJCQkJICAgJiMzNDtEZWxldGluZyBsb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKTogcGVuZGluZ1xuJiMzNDssCiYjNDM7CQkJCQkgICB0dF9jb21tb24tJmd0O2FkZHIsCiYjNDM7CQkJCQkgICBiYXRhZHZfcHJpbnRfdmlkKHR0X2NvbW1vbi0mZ3Q7dmlkKSk7CiYjNDM7CiYjNDM7CQkJCWhsaXN0X2RlbF9yY3UoJmFtcDt0dF9jb21tb24tJmd0O2hhc2hfZW50cnkpOwomIzQzOwomIzQzOwkJCQkvKiBBbiBlbnRyeSB3aGljaCBzdGlsbCBjYXJyaWVzIEJBVEFEVl9UVF9DTElFTlRfTkVXIHdhcwomIzQzOwkJCQkgKiBuZXZlciBjb3VudGVkIGFuZCBtdXN0IG5vdCBiZSB1bmNvdW50ZWQgaGVyZS4KJiM0MzsJCQkJICovCiYjNDM7CQkJCWlmICghKHR0X2NvbW1vbi0mZ3Q7ZmxhZ3MgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9ORVcpKQomIzQzOwkJCQkJYmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9jb21tb24tJmd0O3ZpZCk7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWlmIChjb250KQomIzQzOwkJCQljb250aW51ZTsKIAotCQkJYmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9jb21tb24tJmd0O3ZpZCk7Ci0JCQlobGlzdF9kZWxfcmN1KCZhbXA7dHRfY29tbW9uLSZndDtoYXNoX2VudHJ5KTsKIAkJCXR0X2xvY2FsID0gY29udGFpbmVyX29mKHR0X2NvbW1vbiwKIAkJCQkJCXN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksCiAJCQkJCQljb21tb24pOwpAQCAtMzg5MSw3ICYjNDM7NDA3MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9jb21taXRfY2hhbmdlc19ub2xvY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdikKIAkJcmV0dXJuOwogCX0KIAotCWJhdGFkdl90dF9sb2NhbF9zZXRfZmxhZ3MoYmF0X3ByaXYsIEJBVEFEVl9UVF9DTElFTlRfTkVXLCBmYWxzZSwgdHJ1ZSk7CiYjNDM7CWJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldyhiYXRfcHJpdik7CiAKIAliYXRhZHZfdHRfbG9jYWxfcHVyZ2VfcGVuZGluZ19jbGllbnRzKGJhdF9wcml2KTsKIAliYXRhZHZfdHRfbG9jYWxfdXBkYXRlX2NyYyhiYXRfcHJpdik7CkBAIC00MDYxLDE1ICYjNDM7NDI0MCwxNiBAQCBib29sIGJhdGFkdl90dF9nbG9iYWxfY2xpZW50X2lzX3JvYW1pbmcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwKIAkJCQkJdTggKmFkZHIsIHVuc2lnbmVkIHNob3J0IHZpZCkKIHsKIAlzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5OwotCWJvb2wgcmV0ID0gZmFsc2U7CiYjNDM7CWJvb2wgcmV0OwogCiAJdHRfZ2xvYmFsX2VudHJ5ID0gYmF0YWR2X3R0X2dsb2JhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7CiAJaWYgKCF0dF9nbG9iYWxfZW50cnkpCi0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXQgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KCZhbXA7dHRfZ2xvYmFsX2VudHJ5LSZndDtjb21tb24pICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTTsKIAotCXJldCA9IHR0X2dsb2JhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTTsKIAliYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWxfZW50cnkpOwotb3V0OgomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQwODcsMTUgJiM0Mzs0MjY3LDE2IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJCQkJICAgICAgIHU4ICphZGRyLCB1bnNpZ25lZCBzaG9ydCB2aWQpCiB7CiAJc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7Ci0JYm9vbCByZXQgPSBmYWxzZTsKJiM0MzsJYm9vbCByZXQ7CiAKIAl0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7CiAJaWYgKCF0dF9sb2NhbF9lbnRyeSkKLQkJZ290byBvdXQ7CiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CXJldCA9IGJhdGFkdl90dF9mbGFnc19nZXQoJmFtcDt0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uKSAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07CiAKLQlyZXQgPSB0dF9sb2NhbF9lbnRyeS0mZ3Q7Y29tbW9uLmZsYWdzICZhbXA7IEJBVEFEVl9UVF9DTElFTlRfUk9BTTsKIAliYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTsKLW91dDoKJiM0MzsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00NDA0LDcgJiM0Mzs0NTg1LDcgQEAgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2lzX2lzb2xhdGVkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsCiAJaWYgKCF0dCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcmV0ID0gdHQtJmd0O2NvbW1vbi5mbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX0lTT0xBOwomIzQzOwlyZXQgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KCZhbXA7dHQtJmd0O2NvbW1vbikgJmFtcDsgQkFUQURWX1RUX0NMSUVOVF9JU09MQTsKIAogCWJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaCBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmgKaW5kZXggOWJkYzVhM2U3OTllMi4uNjc4NzI5MjdjZmI1MCAxMDA2NDQKLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaAomIzQzOyYjNDM7JiM0MzsgYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oCkBAIC00MTAsNyAmIzQzOzQxMCw3IEBAIHN0cnVjdCBiYXRhZHZfb3JpZ19iYXRfaXYgewogICovCiBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSB7CiAJLyoqIEBvcmlnOiBvcmlnaW5hdG9yIGV0aGVybmV0IGFkZHJlc3MgKi8KLQl1OCBvcmlnW0VUSF9BTEVOXTsKJiM0MzsJdTggb3JpZ1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCiAJLyoqIEBpZmluZm9fbGlzdDogbGlzdCBmb3Igcm91dGVycyBwZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovCiAJc3RydWN0IGhsaXN0X2hlYWQgaWZpbmZvX2xpc3Q7CkBAIC02MzQsMTIgJiM0Mzs2MzQsMTIgQEAgc3RydWN0IGJhdGFkdl9oYXJkaWZfbmVpZ2hfbm9kZSB7CiAJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKIAogCS8qKiBAYWRkcjogdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBuZWlnaGJvcmluZyBpbnRlcmZhY2UgKi8KLQl1OCBhZGRyW0VUSF9BTEVOXTsKJiM0MzsJdTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCiAJLyoqCiAJICogQG9yaWc6IHRoZSBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hdG9yIHRoaXMgbmVpZ2hib3Igbm9kZSBiZWxvbmdzIHRvCiAJICovCi0JdTggb3JpZ1tFVEhfQUxFTl07CiYjNDM7CXU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAogCS8qKiBAaWZfaW5jb21pbmc6IHBvaW50ZXIgdG8gaW5jb21pbmcgaGFyZC1pbnRlcmZhY2UgKi8KIAlzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX2luY29taW5nOwpAQCAtNjc3LDcgJiM0Mzs2NzcsNyBAQCBzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgewogI2VuZGlmCiAKIAkvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbmVpZ2hib3JpbmcgaW50ZXJmYWNlICovCi0JdTggYWRkcltFVEhfQUxFTl07CiYjNDM7CXU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAogCS8qKiBAaWZpbmZvX2xpc3Q6IGxpc3QgZm9yIHJvdXRpbmcgbWV0cmljcyBwZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovCiAJc3RydWN0IGhsaXN0X2hlYWQgaWZpbmZvX2xpc3Q7CkBAIC03NzcsNyAmIzQzOzc3Nyw3IEBAIHN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvIHsKICAqLwogc3RydWN0IGJhdGFkdl9iY2FzdF9kdXBsaXN0X2VudHJ5IHsKIAkvKiogQG9yaWc6IG1hYyBhZGRyZXNzIG9mIG9yaWcgbm9kZSBvcmlnaW5hdGluZyB0aGUgYnJvYWRjYXN0ICovCi0JdTggb3JpZ1tFVEhfQUxFTl07CiYjNDM7CXU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAogCS8qKiBAY3JjOiBjcmMzMiBjaGVja3N1bSBvZiBicm9hZGNhc3QgcGF5bG9hZCAqLwogCXUzMiBjcmM7CkBAIC0xMDg1LDcgJiM0MzsxMDg1LDcgQEAgc3RydWN0IGJhdGFkdl9wcml2X2JsYSB7CiAJc3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmJhY2tib25lX2hhc2g7CiAKIAkvKiogQGxvb3BkZXRlY3RfYWRkcjogTUFDIGFkZHJlc3MgdXNlZCBmb3Igb3duIGxvb3BkZXRlY3Rpb24gZnJhbWVzICovCi0JdTggbG9vcGRldGVjdF9hZGRyW0VUSF9BTEVOXTsKJiM0MzsJdTggbG9vcGRldGVjdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAKIAkvKioKIAkgKiBAbG9vcGRldGVjdF9sYXN0dGltZTogdGltZSB3aGVuIHRoZSBsb29wZGV0ZWN0aW9uIGZyYW1lcyB3ZXJlIHNlbnQKQEAgLTEzNTIsNyAmIzQzOzEzNTIsNyBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIHsKIAlzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2OwogCiAJLyoqIEBvdGhlcl9lbmQ6IG1hYyBhZGRyZXNzIG9mIHJlbW90ZSAqLwotCXU4IG90aGVyX2VuZFtFVEhfQUxFTl07CiYjNDM7CXU4IG90aGVyX2VuZFtFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCiAJLyoqIEBzZXNzaW9uOiBUUCBzZXNzaW9uIGlkZW50aWZpZXIgKi8KIAl1OCBzZXNzaW9uWzJdOwpAQCAtMTc2NSw3ICYjNDM7MTc2NSw3IEBAIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3IHsKIAkgKiBAb3JpZzogb3JpZ2luYXRvciBhZGRyZXNzIG9mIGJhY2tib25lIG5vZGUgKG1hYyBhZGRyZXNzIG9mIHByaW1hcnkKIAkgKiAgaWZhY2UpCiAJICovCi0JdTggb3JpZ1tFVEhfQUxFTl07CiYjNDM7CXU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIAogCS8qKiBAdmlkOiB2bGFuIGlkIHRoaXMgZ2F0ZXdheSB3YXMgZGV0ZWN0ZWQgb24gKi8KIAl1bnNpZ25lZCBzaG9ydCB2aWQ7CkBAIC0xODEwLDcgJiM0MzsxODEwLDcgQEAgc3RydWN0IGJhdGFkdl9ibGFfYmFja2JvbmVfZ3cgewogICovCiBzdHJ1Y3QgYmF0YWR2X2JsYV9jbGFpbSB7CiAJLyoqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiBjbGFpbWVkIG5vbi1tZXNoIGNsaWVudCAqLwotCXU4IGFkZHJbRVRIX0FMRU5dOwomIzQzOwl1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAKIAkvKiogQHZpZDogdmxhbiBpZCB0aGlzIGNsaWVudCB3YXMgZGV0ZWN0ZWQgb24gKi8KIAl1bnNpZ25lZCBzaG9ydCB2aWQ7CkBAIC0xODQwLDcgJiM0MzsxODQwLDcgQEAgc3RydWN0IGJhdGFkdl9ibGFfY2xhaW0gewogICovCiBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSB7CiAJLyoqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiBub24tbWVzaCBjbGllbnQgKi8KLQl1OCBhZGRyW0VUSF9BTEVOXTsKJiM0MzsJdTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpOwogCiAJLyoqIEB2aWQ6IFZMQU4gaWRlbnRpZmllciAqLwogCXVuc2lnbmVkIHNob3J0IHZpZDsKQEAgLTE4NTEsMTIgJiM0MzsxODUxLDIxIEBAIHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5IHsKIAkgKi8KIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoX2VudHJ5OwogCi0JLyoqIEBmbGFnczogdmFyaW91cyBzdGF0ZSBoYW5kbGluZyBmbGFncyAoc2VlIGJhdGFkdl90dF9jbGllbnRfZmxhZ3MpICovCiYjNDM7CS8qKgomIzQzOwkgKiBAZmxhZ3M6IHZhcmlvdXMgc3RhdGUgaGFuZGxpbmcgZmxhZ3MgKHNlZSBiYXRhZHZfdHRfY2xpZW50X2ZsYWdzKSwKJiM0MzsJICogcHJvdGVjdGVkIGJ5IEBmbGFnc19sb2NrCiYjNDM7CSAqLwogCXUxNiBmbGFnczsKIAogCS8qKiBAYWRkZWRfYXQ6IHRpbWVzdGFtcCB1c2VkIGZvciBwdXJnaW5nIHN0YWxlIHR0IGNvbW1vbiBlbnRyaWVzICovCiAJdW5zaWduZWQgbG9uZyBhZGRlZF9hdDsKIAomIzQzOwkvKioKJiM0MzsJICogQGZsYWdzX2xvY2s6IHByb3RlY3QgbW9kaWZpY2F0aW9ucyBvZiBAZmxhZ3MgYW5kCiYjNDM7CSAqICBAYmF0YWR2X3R0X2dsb2JhbF9lbnRyeS5yb2FtX2F0CiYjNDM7CSAqLwomIzQzOwlzcGlubG9ja190IGZsYWdzX2xvY2s7CiYjNDM7CiAJLyoqIEByZWZjb3VudDogbnVtYmVyIG9mIGNvbnRleHRzIHRoZSBvYmplY3QgaXMgdXNlZCAqLwogCXN0cnVjdCBrcmVmIHJlZmNvdW50OwogCkBAIC0xOTQyLDcgJiM0MzsxOTUxLDcgQEAgc3RydWN0IGJhdGFkdl90dF9yZXFfbm9kZSB7CiAJLyoqCiAJICogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hdG9yIHRoaXMgcmVxdWVzdCB3YXMgc2VudCB0bwogCSAqLwotCXU4IGFkZHJbRVRIX0FMRU5dOwomIzQzOwl1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAKIAkvKiogQGlzc3VlZF9hdDogdGltZXN0YW1wIHVzZWQgZm9yIHB1cmdpbmcgc3RhbGUgdHQgcmVxdWVzdHMgKi8KIAl1bnNpZ25lZCBsb25nIGlzc3VlZF9hdDsKQEAgLTE5NTksNyAmIzQzOzE5NjgsNyBAQCBzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlIHsKICAqLwogc3RydWN0IGJhdGFkdl90dF9yb2FtX25vZGUgewogCS8qKiBAYWRkcjogbWFjIGFkZHJlc3Mgb2YgdGhlIGNsaWVudCBpbiB0aGUgcm9hbWluZyBwaGFzZSAqLwotCXU4IGFkZHJbRVRIX0FMRU5dOwomIzQzOwl1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7CiAKIAkvKiogQHZpZDogVkxBTiBpZGVudGlmaWVyICovCiAJdTE2IHZpZDsKQEAgLTIwODcsMTQgJiM0MzsyMDk2LDE0IEBAIHN0cnVjdCBiYXRhZHZfYWxnb19uZWlnaF9vcHMgewogCQkgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMik7CiAKIAkvKioKLQkgKiBAaXNfc2ltaWxhcl9vcl9iZXR0ZXI6IGNoZWNrIGlmIG5laWdoMSBpcyBlcXVhbGx5IHNpbWlsYXIgb3IgYmV0dGVyCi0JICogIHRoYW4gbmVpZ2gyIGZvciB0aGVpciByZXNwZWN0aXZlIG91dGdvaW5nIGludGVyZmFjZSBmcm9tIHRoZSBtZXRyaWMKJiM0MzsJICogQGlzX3NpbWlsYXJfb3JfYmV0dGVyOiBjaGVjayBpZiBAY2FuZGlkYXRlIGlzIGVxdWFsbHkgc2ltaWxhciBvciBiZXR0ZXIKJiM0MzsJICogIHRoYW4gQHJlZmVyZW5jZSBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBvdXRnb2luZyBpbnRlcmZhY2UgZnJvbSB0aGUgbWV0cmljCiAJICogIHByb3NwZWN0aXZlCiAJICovCi0JYm9vbCAoKmlzX3NpbWlsYXJfb3JfYmV0dGVyKShzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSwKLQkJCQkgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcxLAotCQkJCSAgICAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDIsCi0JCQkJICAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMik7CiYjNDM7CWJvb2wgKCppc19zaW1pbGFyX29yX2JldHRlcikoc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsCiYjNDM7CQkJCSAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLAomIzQzOwkJCQkgICAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLAomIzQzOwkJCQkgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKTsKIAogCS8qKiBAZHVtcDogZHVtcCBuZWlnaGJvcnMgdG8gYSBuZXRsaW5rIHNvY2tldCAob3B0aW9uYWwpICovCiAJdm9pZCAoKmR1bXApKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYiwKQEAgLTIyMDQsNyAmIzQzOzIyMTMsNyBAQCBzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgewogCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CiAKIAkvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGlzIGxpc3QgZW50cnkgKi8KLQl1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dOwomIzQzOwl1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTsKIH07CiAKIC8qKgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2MjAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMzA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzIGVpdGhlciBpbnRyb2R1Y2VkIG9yIGV4cG9zZWQgYnkgdGhlIGNoYW5nZXMuIExldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgpGaXJzdCwgSSBzZWUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMgaW1wYWN0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29tYmluYXRpb24gb2YgcGFyYW1ldGVyIHJlbmFtZXMsIG1pbm9yIGxvZ2ljIGZpeGVzLCBhbmQgc29tZSBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zLiBUaGUgYWxpZ25tZW50IGNoYW5nZXMgdXNpbmcgYF9fYWxpZ25lZCgyKWAgaW1tZWRpYXRlbHkgY2F0Y2ggbXkgZXllLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIEV0aGVybmV0IGFkZHJlc3Nlcy4gSSBrbm93IHRob3NlIGFsaWdubWVudCBwcmFnbWFzIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIuCgpTcGVjaWZpY2FsbHksIHRoZSBhbGlnbm1lbnQgY2hhbmdlcyBhcmUgYWRkZWQgdG8gc2V2ZXJhbCBzdHJ1Y3R1cmVzIGluIGB0eXBlcy5oYCBhbmQgc29tZSBsb2NhbCBhcnJheXMuIEkgbmVlZCB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGVzZSBhbGlnbm1lbnQgY2hhbmdlcyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGFmZmVjdGVkIHN0cnVjdHVyZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgcGFkZGluZyBpc3N1ZXMgb3IgdW5leHBlY3RlZCBzdHJ1Y3QgbGF5b3V0IGNoYW5nZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWQtYmVmb3JlLXdyaXRlIGlzc3Vlcy4gRm9yIGV4YW1wbGU6CgoqICAgSSBzZWUgYSBidW5jaCBvZiBgdTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpYCBpbiBgdHlwZXMuaGAuIGBFVEhfQUxFTmAgaXMgNiBieXRlcy4gNiBieXRlcyBhbGlnbmVkIHRvIDIgYnl0ZXMgaXMgcGVyZmVjdGx5IHZhbGlkLCBzbyB0aGF0JiMzOTtzIG5vdCBhdXRvbWF0aWNhbGx5IGEgcHJvYmxlbS4gQnV0IEkgbmVlZCB0byBsb29rIGF0ICpob3cqIHRoZXNlIGZpZWxkcyBhcmUgdXNlZCwgd2hlcmUgdGhleSBhcmUgYWxsb2NhdGVkLCBhbmQgaWYgdGhlIGFsaWdubWVudCBjaGFuZ2VzIGNvdWxkIGludGVyYWN0IHdpdGggdGhlIGNvbXBpbGVyJiMzOTtzIHN0cnVjdHVyZSBsYXlvdXQgZGVjaXNpb25zLgoqICAgSSBzZWUgYSBuZXcgc3BpbmxvY2ssIGBmbGFnc19sb2NrYCwgYmVpbmcgYWRkZWQgdG8gYHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYW5kIEkgbmVlZCB0byBjaGVjayB3aGVyZSBpdCYjMzk7cyBpbml0aWFsaXplZCBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIEFyZSB0aGVyZSByYWNlIGNvbmRpdGlvbnMgYmVpbmcgYWRkcmVzc2VkIGhlcmUsIGFuZCBpZiBzbywgaG93PyBMZXQmIzM5O3MgY2hlY2sgd2hlcmUgdGhlIHNwaW5sb2NrIGlzIGluaXRpYWxpemVkLiBJIHNlZSBgc3Bpbl9sb2NrX2luaXQoKWAgY2FsbHMgaW4gYGJhdGFkdl90dF9sb2NhbF9hZGQoKWAgYW5kIGBiYXRhZHZfdHRfZ2xvYmFsX2FkZCgpYC4gVGhhdCBsb29rcyBzdGFuZGFyZC4gQXJlIHRoZXJlIG90aGVyIHBsYWNlcyB3aGVyZSBgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeWAgaXMgaW5pdGlhbGl6ZWQgb3IgYWxsb2NhdGVkPyBJJiMzOTtsbCBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGBiYXRhZHZfdGdfY2FjaGVgIGFuZCBgYmF0YWR2X3RsX2NhY2hlYCBvciBgdHRfY29tbW9uYC4gVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb24gZm9yIGEgcHJvYmxlbS4KClRoZSB0cmFuc2xhdGlvbiB0YWJsZSBjaGFuZ2VzIHdpdGggdGhlIHNwaW5sb2NrcyBpcyB0aGUgbW9zdCBpbnRlcmVzdGluZyBwYXJ0IG9mIHRoaXMgcGF0Y2ggc2VyaWVzIGZyb20gYSBLTVNBTiBwZXJzcGVjdGl2ZS4gUmFjZSBjb25kaXRpb25zIGluIHRoZSByb2FtaW5nIGFuZCBwdXJnaW5nIGxvZ2ljIGFyZSBsaWtlbHkgdGFyZ2V0cyBmb3IgdGhpcyB0eXBlIG9mIGNoZWNrLiBUaGUgYGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5YCBhbmQgdGhlIHJlZmFjdG9yaW5nIG9mIGR1bXBpbmcgZnVuY3Rpb25zIHRvIHNuYXBzaG90IHRoZSBmbGFncyB3aXRoIGBiYXRhZHZfdHRfZmxhZ3NfZ2V0KGNvbW1vbilgIG1pZ2h0IGJlIGhlbHBmdWwuIEJ1dCBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgbG9jayBpcyBiZWluZyBoZWxkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFjY2Vzc2VzLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgbXkgYXR0ZW50aW9uLiBJdCBsb29rcyBsaWtlIGl0IGFkZHJlc3NlcyByYWNlIGNvbmRpdGlvbnMgc28gaXQgbWlnaHQgYmUgd29ydGh3aGlsZS4KCk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBhbGlnbm1lbnQgY2hhbmdlcyBhcmUgdW5saWtlbHkgdG8gYmUgYSAqZGlyZWN0KiBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMsIGJ1dCB0aGV5IGNvdWxkIGluZGlyZWN0bHkgZXhwb3NlIGV4aXN0aW5nIGlzc3Vlcy4gVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYXJlYSBvZiBjb25jZXJuIGlzIHRoZSBzcGlubG9jayBpbnRyb2R1Y3Rpb24gYW5kIHRoZSByZWZhY3RvcmluZyBhcm91bmQgdGhlIHRyYW5zbGF0aW9uIHRhYmxlLCBhbmQgSSB3aWxsIGZvY3VzIG9uIHRoYXQgYXJlYS4gSSBtaWdodCBuZWVkIGEgZGVkaWNhdGVkIHNlc3Npb24gdG8gY29uZmlybS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a21lbV9jYWNoZV9hbGxvYy4qYmF0YWR2X3RbZ2xdX2NhY2hlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9NzA5PWJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03ODgtXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjc4OTpcdHR0X2xvY2FsID0ga21lbV9jYWNoZV9hbGxvYyhiYXRhZHZfdGxfY2FjaGUsIEdGUF9BVE9NSUMpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03OTAtXHRpZiAoIXR0X2xvY2FsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDc1NgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgQ2FjaGUqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgb3B0aW1pemluZyB0aGlzIHBhcnRpY3VsYXIgYXNwZWN0LiBXZSYjMzk7dmUgZ290IG91ciB1c3VhbCBzdXNwZWN0cywgYnV0IEkmIzM5O20gZmVlbGluZyB0aGF0IG5hZ2dpbmcgc2Vuc2UgdGhhdCB3ZSBtaWdodCBiZSBtaXNzaW5nIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gV2UgY2FuJiMzOTt0IGp1c3Qgc3RvcCBhdCB0aGUgb2J2aW91cyBlbnRyeSBwb2ludHMuIFRvIHRydWx5IGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBhbmQgcG90ZW50aWFsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBJIHJlYWxseSBuZWVkIHRvIGNoZWNrIGBiYXRhZHZfdGdfY2FjaGVgIGFzIHdlbGwuIEl0JiMzOTtzIHRvbyBpbXBvcnRhbnQgdG8gc2tpcCwgYW5kIGl0IGNvdWxkIGhvbGQgdGhlIGtleSB0byBhIG1ham9yIGJyZWFrdGhyb3VnaCBpbiBvcHRpbWl6aW5nIHRoaXMgYXJlYS4gSXQmIzM5O3MgYSBrZXkgcGllY2UgYW5kIEkmIzM5O2QgYmUgcmVtaXNzIGlmIEkgZGlkbiYjMzk7dCB2ZXJpZnkgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JhdGFkdl90Z19jYWNoZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTU3PXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmF0YWR2X3RsX2NhY2hlIF9fcmVhZF9tb3N0bHk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjU4OnN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmF0YWR2X3RnX2NhY2hlIF9fcmVhZF9tb3N0bHk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU5LXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmF0YWR2X3R0X29yaWdfY2FjaGUgX19yZWFkX21vc3RseTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTE3NzI9c3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE4MDMtXHRpZiAoIXR0X2dsb2JhbF9lbnRyeSkge1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxODA0Olx0XHR0dF9nbG9iYWxfZW50cnkgPSBrbWVtX2NhY2hlX3phbGxvYyhiYXRhZHZfdGdfY2FjaGUsXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE4MDUtXHRcdFx0XHRcdFx0ICAgIEdGUF9BVE9NSUMpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9NDYwMD1pbnQgX19pbml0IGJhdGFkdl90dF9jYWNoZV9pbml0KHZvaWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjEzLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0NjE0Olx0YmF0YWR2X3RnX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7YmF0YWR2X3RnX2NhY2hlXCYjMzQ7LCB0Z19zaXplLCAwLFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjE1LVx0XHRcdFx0XHQgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDYxNjpcdGlmICghYmF0YWR2X3RnX2NhY2hlKVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjE3LVx0XHRnb3RvIGVycl90dF90bF9kZXN0cm95O1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDY1NC1lcnJfdHRfdGdfZGVzdHJveTpcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDY1NTpcdGttZW1fY2FjaGVfZGVzdHJveShiYXRhZHZfdGdfY2FjaGUpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0NjU2Olx0YmF0YWR2X3RnX2NhY2hlID0gTlVMTDtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDY1Ny1lcnJfdHRfdGxfZGVzdHJveTpcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTQ2Njc9dm9pZCBiYXRhZHZfdHRfY2FjaGVfZGVzdHJveSh2b2lkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDY2OS1cdGttZW1fY2FjaGVfZGVzdHJveShiYXRhZHZfdGxfY2FjaGUpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0NjcwOlx0a21lbV9jYWNoZV9kZXN0cm95KGJhdGFkdl90Z19jYWNoZSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQ2NzEtXHRrbWVtX2NhY2hlX2Rlc3Ryb3koYmF0YWR2X3R0X29yaWdfY2FjaGUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTY1MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgYmF0YWR2X3R0X2xvY2FsX2FkZCgpYCoqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgQkFUTUFOIEFkdmFuY2VkIGhhbmRsZXMgbG9jYWwgdHJhbnNsYXRpb24gdGFibGUgZW50cmllcy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGJhdGFkdl90dF9sb2NhbF9hZGQoKWAgYXJvdW5kIGxpbmUgNzg5IGluIGB0cmFuc2xhdGlvbi10YWJsZS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgYWRkaW5nIG5ldyBsb2NhbCBlbnRyaWVzIHRoZXJlLCBwcm9iYWJseSBpbnZvbHZpbmcgaGFzaCB0YWJsZSBsb29rdXBzIG9yIGluc2VydGlvbnMsIG1heWJlIHNvbWUgYWdpbmcgY29uc2lkZXJhdGlvbnMuIEhvcGVmdWxseSwgdGhlcmUmIzM5O3MgYSBxdWljayBhbmQgZGlydHkgd2F5IHRvIGlkZW50aWZ5IHRoZSBleGFjdCBkYXRhIHN0cnVjdHVyZXMgYW5kIGxvY2tpbmcgcHJpbWl0aXZlcyB1c2VkLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UmIzM5O3ZlIGdvdCEgSSYjMzk7bSBjdXJpb3VzIGlmIHRoZXkgdXNlZCBhbiBSQ1UgdG8gb3B0aW1pc2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzg1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3ODU6XHRcdFx0XHRcdFx0IHRhYmxlX3NpemUsIHBhY2tldF9zaXplX21heCwgYWRkcik7XG4gNzg2Olx0XHRcdGdvdG8gb3V0O1xuIDc4NzpcdFx0fVxuIDc4ODpcdFxuIDc4OTpcdFx0dHRfbG9jYWwgPSBrbWVtX2NhY2hlX2FsbG9jKGJhdGFkdl90bF9jYWNoZSwgR0ZQX0FUT01JQyk7XG4gNzkwOlx0XHRpZiAoIXR0X2xvY2FsKVxuIDc5MTpcdFx0XHRnb3RvIG91dDtcbiA3OTI6XHRcbiA3OTM6XHRcdC8qIGluY3JlYXNlIHRoZSByZWZjb3VudGVyIG9mIHRoZSByZWxhdGVkIHZsYW4gKi9cbiA3OTQ6XHRcdHZsYW4gPSBiYXRhZHZfbWVzaGlmX3ZsYW5fZ2V0KGJhdF9wcml2LCB2aWQpO1xuIDc5NTpcdFx0aWYgKCF2bGFuKSB7XG4gNzk2Olx0XHRcdG5ldF9yYXRlbGltaXRlZF9mdW5jdGlvbihiYXRhZHZfaW5mbywgbWVzaF9pZmFjZSxcbiA3OTc6XHRcdFx0XHRcdFx0IFwmIzM0O2FkZGluZyBUVCBsb2NhbCBlbnRyeSAlcE0gdG8gbm9uLWV4aXN0ZW50IFZMQU4gJWRcXG5cJiMzNDssXG4gNzk4Olx0XHRcdFx0XHRcdCBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCkpO1xuIDc5OTpcdFx0XHRrbWVtX2NhY2hlX2ZyZWUoYmF0YWR2X3RsX2NhY2hlLCB0dF9sb2NhbCk7XG4gODAwOlx0XHRcdHR0X2xvY2FsID0gTlVMTDtcbiA4MDE6XHRcdFx0Z290byBvdXQ7XG4gODAyOlx0XHR9XG4gODAzOlx0XG4gODA0Olx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxuIDgwNTpcdFx0XHQgICBcJiMzNDtDcmVhdGluZyBuZXcgbG9jYWwgdHQgZW50cnk6ICVwTSAodmlkOiAlZCwgdHR2bjogJWQpXFxuXCYjMzQ7LFxuIDgwNjpcdFx0XHQgICBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCksXG4gODA3Olx0XHRcdCAgICh1OClhdG9taWNfcmVhZChcdTAwMjZiYXRfcHJpdi1cdTAwM2V0dC52bikpO1xuIDgwODpcdFxuIDgwOTpcdFx0ZXRoZXJfYWRkcl9jb3B5KHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5hZGRyLCBhZGRyKTtcbiA4MTA6XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi52aWQgPSB2aWQ7XG4gODExOlx0XHRrcmVmX2luaXQoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcbiA4MTI6XHRcdHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XG4gODEzOlx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW47XG4gODE0Olx0XHR0dF9sb2NhbC1cdTAwM2V2bGFuID0gdmxhbjtcbiA4MTU6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiA4MTY6XHRcbiA4MTc6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4gODE4Olx0XHQvKiBUaGUgbG9jYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBORVcgdG8gYXZvaWQgdG8gc2VuZCBpdCBpblxuIDgxOTpcdFx0ICogYSBmdWxsIHRhYmxlIHJlc3BvbnNlIGdvaW5nIG91dCBiZWZvcmUgdGhlIG5leHQgdHR2biBpbmNyZW1lbnRcbiA4MjA6XHRcdCAqIChjb25zaXN0ZW5jeSBjaGVjaylcbiA4MjE6XHRcdCAqL1xuIDgyMjpcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ORVc7XG4gODIzOlx0XHRpZiAoaWlmX2lzX3dpZmkpXG4gODI0Olx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1dJRkk7XG4gODI1Olx0XG4gODI2Olx0XHQvKiB0aGUgYmF0bWFuIGludGVyZmFjZSBtYWMgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMgc2hvdWxkIG5ldmVyIGJlXG4gODI3Olx0XHQgKiBwdXJnZWRcbiA4Mjg6XHRcdCAqL1xuIDgyOTpcdFx0aWYgKGJhdGFkdl9jb21wYXJlX2V0aChhZGRyLCBtZXNoX2lmYWNlLVx1MDAzZWRldl9hZGRyKSB8fFxuIDgzMDpcdFx0ICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxuIDgzMTpcdFx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFO1xuIDgzMjpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuIDgzMzpcdFxuIDgzNDpcdFx0a3JlZl9nZXQoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcbiA4MzU6XHRcdGhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoYmF0X3ByaXYtXHUwMDNldHQubG9jYWxfaGFzaCwgYmF0YWR2X2NvbXBhcmVfdHQsXG4gODM2Olx0XHRcdFx0XHQgICAgIGJhdGFkdl9jaG9vc2VfdHQsIFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbixcbiA4Mzc6XHRcdFx0XHRcdCAgICAgXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLmhhc2hfZW50cnkpO1xuIDgzODpcdFxuIDgzOTpcdFx0aWYgKHVubGlrZWx5KGhhc2hfYWRkZWQgIT0gMCkpIHtcbiA4NDA6XHRcdFx0LyogcmVtb3ZlIHRoZSByZWZlcmVuY2UgZm9yIHRoZSBoYXNoICovXG4gODQxOlx0XHRcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWwpO1xuIDg0MjpcdFx0XHRnb3RvIG91dDtcbiA4NDM6XHRcdH1cbiA4NDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5MzMKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBCYXRhZHYgVFQgTG9jYWwgRW50cnkgU3RydWN0dXJlKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBiYXRhZHZfdHRfbG9jYWxfZW50cnlgIGFuZCBgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeWAgc3RydWN0dXJlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTt2ZSBnb3QgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIGluaXRpYWxpemF0aW9uIGluIHRoZSBsb2NhbCB0YWJsZS4gU28sIHJ1bm5pbmcgZG93biB0aGUgZmllbGRzLCBJIHNlZSBgYWRkcmAsIGB2aWRgLCBgcmVmY291bnRgLCBgbGFzdF9zZWVuYCwgYGFkZGVkX2F0YCwgYHZsYW5gLCBgZmxhZ3NfbG9ja2AsIGFuZCBgZmxhZ3NgIGFyZSBhbGwgaGFuZGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24uIFRoZSBgaGFzaF9lbnRyeWAgaXMgY2xlYXJseSB0YWtlbiBjYXJlIG9mIGVpdGhlciBieSBgYmF0YWR2X2hhc2hfYWRkYCBvciB0aGUgc3RhbmRhcmQgaGxpc3QgZnVuY3Rpb25hbGl0eSwgd2hpY2ggbWFrZXMgc2Vuc2UuIAoKSSB0aGluayB0aGF0IGNvdmVycyB0aGUgbWFpbiBpbml0aWFsaXphdGlvbiBwb2ludHMsIGJ1dCBJIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSBkZWZpbml0aXZlIHNvdXJjZS4gSSYjMzk7bGwgb3BlbiB1cCBgdHlwZXMuaGAgYW5kIGdpdmUgYHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnlgIGFub3RoZXIsIGNsb3NlciBsb29rLiBKdXN0IHdhbnQgdG8gcnVsZSBvdXQgYW55dGhpbmcgSSBtaWdodCBiZSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTQ5PWJhdGFkdl90dF9oYXNoX2ZpbmQoc3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmhhc2gsIGNvbnN0IHU4ICphZGRyLFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTk0LSAqL1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxOTU6c3RhdGljIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKlxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xOTYtYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE5OC17XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjE5OTpcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5ID0gTlVMTDtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjAwLVx0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIwNS1cdFx0dHRfbG9jYWxfZW50cnkgPSBjb250YWluZXJfb2YodHRfY29tbW9uX2VudHJ5LFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyMDY6XHRcdFx0XHRcdCAgICAgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIwNy1cdFx0XHRcdFx0ICAgICAgY29tbW9uKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTI0MT1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yNDIte1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyNDM6XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjQ0LVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyNDU6XHR0dF9sb2NhbF9lbnRyeSA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTI0Ni1cdFx0XHRcdCAgICAgIGNvbW1vbi5yZWZjb3VudCk7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yNTg9c3RhdGljIHZvaWRcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MjU5OmJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnkpXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTI2MC17XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz00Njg9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX2V2ZW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ2OTpcdFx0XHRcdCAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnksXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQ3MC1cdFx0XHRcdCAgdTggZXZlbnRfZmxhZ3MpXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz03MDk9Ym9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTcxMy1cdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwgPSBOVUxMO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo3MTQ6XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbDtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNzE1LVx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChtZXNoX2lmYWNlKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTExOTU9YmF0YWR2X3R0X2xvY2FsX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTExOTkte1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMjAwOlx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqbG9jYWw7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyMDEtXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTIwNi1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTIwNzpcdGxvY2FsID0gY29udGFpbmVyX29mKGNvbW1vbiwgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSwgY29tbW9uKTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTIwOC1cdGxhc3Rfc2Vlbl9tc2VjcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGxvY2FsLVx1MDAzZWxhc3Rfc2Vlbik7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0xMzUyPWJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMzUzOlx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTM1NC1cdFx0XHRcdCAgdTE2IGZsYWdzLCBjb25zdCBjaGFyICptZXNzYWdlKVxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTM3ND11MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEzNzcte1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMzc4Olx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEzNzktXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdHRfcmVtb3ZlZF9ub2RlO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTQ1MD1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfcHVyZ2VfbGlzdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTQ1NC1cdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjE0NTU6XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTQ1Ni1cdHN0cnVjdCBobGlzdF9ub2RlICpub2RlX3RtcDtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE0NjItXHRcdHR0X2xvY2FsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTQ2MzpcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTQ2NC1cdFx0XHRcdFx0ICAgICAgY29tbW9uKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTE1MjU9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3RhYmxlX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE1MjgtXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5O1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNTI5Olx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWw7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE1MzAtXHRzdHJ1Y3QgYmF0YWR2X2hhc2h0YWJsZSAqaGFzaDtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE1NDgtXHRcdFx0dHRfbG9jYWwgPSBjb250YWluZXJfb2YodHRfY29tbW9uX2VudHJ5LFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNTQ5Olx0XHRcdFx0XHRcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE1NTAtXHRcdFx0XHRcdFx0Y29tbW9uKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTE3NzI9c3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE3NzctXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5O1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNzc4Olx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE3NzktXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjM0Mj1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfZ2xvYmFsX2RlbChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjM0Ni17XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIzNDc6XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICpsb2NhbF9lbnRyeSA9IE5VTEw7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTIzNDgtXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5O1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjU4Nz1zdGF0aWMgYm9vbFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyNTg4Ol9iYXRhZHZfaXNfYXBfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnksXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTI1ODktXHRcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5KVxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjYyMz1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqYmF0YWR2X3RyYW5zdGFibGVfc2VhcmNoKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yNjI4LVx0c3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeSA9IE5VTEw7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjI2Mjk6XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSA9IE5VTEw7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTI2MzAtXHRzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqYmVzdF9lbnRyeTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTM2NzQ9Ym9vbCBiYXRhZHZfaXNfbXlfY2xpZW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICphZGRyLFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzY3Ni17XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM2Nzc6XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzY3OC1cdHUxNiB0dF9mbGFncztcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTQwMDE9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3B1cmdlX3BlbmRpbmdfY2xpZW50cyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDAwNS1cdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb247XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQwMDY6XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbDtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDAwNy1cdHN0cnVjdCBobGlzdF9ub2RlICpub2RlX3RtcDtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQwNDYtXHRcdFx0dHRfbG9jYWwgPSBjb250YWluZXJfb2YodHRfY29tbW9uLFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0MDQ3Olx0XHRcdFx0XHRcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQwNDgtXHRcdFx0XHRcdFx0Y29tbW9uKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTQxMTA9Ym9vbCBiYXRhZHZfaXNfYXBfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdTggKnNyYywgdTggKmRzdCxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQxMTMtXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5O1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0MTE0Olx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQxMTUtXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9NDI2Nj1ib29sIGJhdGFkdl90dF9sb2NhbF9jbGllbnRfaXNfcm9hbWluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDI2OC17XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQyNjk6XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDI3MC1cdGJvb2wgcmV0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9NDYwMD1pbnQgX19pbml0IGJhdGFkdl90dF9jYWNoZV9pbml0KHZvaWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjA2LVx0c2l6ZV90IHR0X3JlcV9zaXplID0gc2l6ZW9mKHN0cnVjdCBiYXRhZHZfdHRfcmVxX25vZGUpO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0NjA3Olx0c2l6ZV90IHRsX3NpemUgPSBzaXplb2Yoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQ2MDgtXG4tLVxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaD0xODQxPXN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5IHtcbi0tXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTE4NzYtLyoqXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjE4Nzc6ICogc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAtIHRyYW5zbGF0aW9uIHRhYmxlIGxvY2FsIGVudHJ5IGRhdGFcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTg3OC0gKi9cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTg3OTpzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5IHtcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTg4MC1cdC8qKiBAY29tbW9uOiBnZW5lcmFsIHRyYW5zbGF0aW9uIHRhYmxlIGRhdGEgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA1ODMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipEaXZpbmcgaW50byB0aGUgQmF0YWR2IENvZGViYXNlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnlgLiBJIGtub3cgaXQmIzM5O3MgZGVmaW5lZCBpbiBgdHlwZXMuaGAsIHNvIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgYmVnaW4uIFRoaXMgc3RydWN0IGlzIGNyaXRpY2FsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYmF0YWR2IChCLkEuVC5NLkEuTi4gYWR2YW5jZWQpIHByb3RvY29sIG1hbmFnZXMgaXRzIGxvY2FsIHRvcG9sb2d5IHRhYmxlcywgc28gZ2V0dGluZyBhIHNvbGlkIGdyYXNwIG9uIGl0cyBzdHJ1Y3R1cmUgaXMgZ29pbmcgdG8gYmUga2V5IHRvIHdoYXRldmVyIEkmIzM5O20gdHJvdWJsZXNob290aW5nIG9yIGVuaGFuY2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBkZXZlbG9wZXJzIGhhdmUgZGVmaW5lZCBpbiB0aGVyZSwgd2hhdCBmaWVsZHMgdGhleSBjaG9zZSBhbmQgdGhlaXIgcmVhc29uaW5nLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGxvdy1sZXZlbCBsb29rLCBhbmQgdGhlbiBJIGNhbiBjb25uZWN0IHRoZSBkYXRhIHRvIHRoZSBvdmVyYWxsIHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L3R5cGVzLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxODc1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE4NzU6XHRcbjE4NzY6XHQvKipcbjE4Nzc6XHQgKiBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5IC0gdHJhbnNsYXRpb24gdGFibGUgbG9jYWwgZW50cnkgZGF0YVxuMTg3ODpcdCAqL1xuMTg3OTpcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkge1xuMTg4MDpcdFx0LyoqIEBjb21tb246IGdlbmVyYWwgdHJhbnNsYXRpb24gdGFibGUgZGF0YSAqL1xuMTg4MTpcdFx0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgY29tbW9uO1xuMTg4MjpcdFxuMTg4MzpcdFx0LyoqIEBsYXN0X3NlZW46IHRpbWVzdGFtcCB1c2VkIGZvciBwdXJnaW5nIHN0YWxlIHR0IGxvY2FsIGVudHJpZXMgKi9cbjE4ODQ6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF9zZWVuO1xuMTg4NTpcdFxuMTg4NjpcdFx0LyoqIEB2bGFuOiBtZXNoLWludGVyZmFjZSB2bGFuIG9mIHRoZSBlbnRyeSAqL1xuMTg4NzpcdFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbjE4ODg6XHR9O1xuMTg4OTpcdFxuMTg5MDpcdC8qKlxuMTg5MTpcdCAqIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5IC0gdHJhbnNsYXRpb24gdGFibGUgZ2xvYmFsIGVudHJ5IGRhdGFcbjE4OTI6XHQgKi9cbjE4OTM6XHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSB7XG4xODk0Olx0XHQvKiogQGNvbW1vbjogZ2VuZXJhbCB0cmFuc2xhdGlvbiB0YWJsZSBkYXRhICovXG4xODk1Olx0XHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSBjb21tb247XG4xODk2Olx0XG4xODk3Olx0XHQvKiogQG9yaWdfbGlzdDogbGlzdCBvZiBvcmlnIG5vZGVzIGFubm91bmNpbmcgdGhpcyBub24tbWVzaCBjbGllbnQgKi9cbjE4OTg6XHRcdHN0cnVjdCBobGlzdF9oZWFkIG9yaWdfbGlzdDtcbjE4OTk6XHRcbjE5MDA6XHRcdC8qKiBAb3JpZ19saXN0X2NvdW50OiBudW1iZXIgb2YgaXRlbXMgaW4gdGhlIG9yaWdfbGlzdCAqL1xuMTkwMTpcdFx0YXRvbWljX3Qgb3JpZ19saXN0X2NvdW50O1xuMTkwMjpcdFxuMTkwMzpcdFx0LyoqIEBsaXN0X2xvY2s6IGxvY2sgcHJvdGVjdGluZyBvcmlnX2xpc3QgKi9cbjE5MDQ6XHRcdHNwaW5sb2NrX3QgbGlzdF9sb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTI2NwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGNoOiBBIERlZXAgRGl2ZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGlzc2VjdCB0aGVzZSBjaGFuZ2VzIG1ldGhvZGljYWxseS4gRmlyc3QsIGBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYmA6IHNlZW1zIGxpa2UgaXQmIzM5O3MganVzdCBhIHNpbXBsZSBwYXJhbWV0ZXIgcmVuYW1lLCBub3RoaW5nIHRvIHJhaXNlIGFuIGV5ZWJyb3cgYWJvdXQgdGhlcmUuIE1vdmluZyBvbiwgYGJhdGFkdl92X25laWdoX2lzX3NvYmAgaXMgYSBiaXQgbW9yZSBpbnZvbHZlZC4gQWgsIGEgcGFyYW1ldGVyIHJlbmFtZSAqYW5kKiBzb21lIGxvZ2ljIGNvcnJlY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgdGhyb3VnaHB1dCBjb21wYXJpc29uLiBJbnRlcmVzdGluZy4gTGV0IG1lIGJyZWFrIHRoaXMgZG93bi4uLiBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGNhbGN1bGF0aW5nIGEgdGhyZXNob2xkIGFzIG9uZS1mb3VydGggb2YgdGhlIHJlZmVyZW5jZSBpbnRlcmZhY2UmIzM5O3MgdGhyb3VnaHB1dCBhbmQgdGhlbiBzdWJ0cmFjdGluZyBpdCBmcm9tIHRoZSB0b3RhbC4gVGhlIGZpbmFsIGNvbXBhcmlzb24sIGBjYW5kaWRhdGUgJmd0OyAzLzQgKiByZWZlcmVuY2VgLCBzaG91bGQgbWFrZSBzZW5zZS4gQW5kLCBpbXBvcnRhbnRseSwgbm8gbWVtb3J5IGFsbG9jYXRpb24gb3IgdW5pbml0aWFsaXplZCByZWFkcywgd2hpY2ggaXMgYWx3YXlzIGdvb2QgdG8gc2VlLiBUaGUgY29kZSBpcyBmYWlybHkgY29uY2lzZSBhbmQgZWZmaWNpZW50IGluIGl0cyBhcHByb2FjaC4KCk5vdywgbGV0JiMzOTtzIHNoaWZ0IGdlYXJzIHRvIHRoZSBgYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgIG1vZGlmaWNhdGlvbnMuIEkgc2VlIGEgYHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO2AgZGVjbGFyYXRpb24gaW4gYGJhdGFkdl9ibGFfc2VuZF9hbm5vdW5jZWAgYW5kIGEgYHN0YXRpYyBjb25zdCB1OCBjbGFpbV9kZXN0W0VUSF9BTEVOXSBfX2FsaWduZWQoMikgPSB7IC4uLiB9O2AgaW4gYGJhdGFkdl9ibGFfaW5pdGAuIExvb2tzIGxpa2UgYSBwb3RlbnRpYWwgY2hhbmdlIHRvIE1BQyBhZGRyZXNzIGhhbmRsaW5nLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBgYmF0YWR2X2JsYV9zZW5kX2Fubm91bmNlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY2My4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIGJyaWRnZSBsb29wIGF2b2lkYW5jZSBsb2dpYyB3aWxsIGJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NjA6XHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiA2NjE6XHQgKiBAYmFja2JvbmVfZ3c6IG91ciBiYWNrYm9uZSBnYXRld2F5IHdoaWNoIHNob3VsZCBiZSBhbm5vdW5jZWRcbiA2NjI6XHQgKi9cbiA2NjM6XHRzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfYW5ub3VuY2Uoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiA2NjQ6XHRcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9ibGFfYmFja2JvbmVfZ3cgKmJhY2tib25lX2d3KVxuIDY2NTpcdHtcbiA2NjY6XHRcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIDY2NzpcdFx0X19iZTE2IGNyYztcbiA2Njg6XHRcbiA2Njk6XHRcdG1lbWNweShtYWMsIGJhdGFkdl9hbm5vdW5jZV9tYWMsIDQpO1xuIDY3MDpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmJhY2tib25lX2d3LVx1MDAzZWNyY19sb2NrKTtcbiA2NzE6XHRcdGNyYyA9IGh0b25zKGJhY2tib25lX2d3LVx1MDAzZWNyYyk7XG4gNjcyOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZiYWNrYm9uZV9ndy1cdTAwM2VjcmNfbG9jayk7XG4gNjczOlx0XHRtZW1jcHkoXHUwMDI2bWFjWzRdLCBcdTAwMjZjcmMsIDIpO1xuIDY3NDpcdFxuIDY3NTpcdFx0YmF0YWR2X2JsYV9zZW5kX2NsYWltKGJhdF9wcml2LCBtYWMsIGJhY2tib25lX2d3LVx1MDAzZXZpZCxcbiA2NzY6XHRcdFx0XHQgICAgICBCQVRBRFZfQ0xBSU1fVFlQRV9BTk5PVU5DRSk7XG4gNjc3Olx0fVxuIDY3ODpcdFxuIDY3OTpcdC8qKlxuIDY4MDpcdCAqIGJhdGFkdl9ibGFfYWRkX2NsYWltKCkgLSBBZGRzIGEgY2xhaW0gaW4gdGhlIGNsYWltIGhhc2hcbiA2ODE6XHQgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiA2ODI6XHQgKiBAbWFjOiB0aGUgbWFjIGFkZHJlc3Mgb2YgdGhlIGNsYWltXG4gNjgzOlx0ICogQHZpZDogdGhlIFZMQU4gSUQgb2YgdGhlIGZyYW1lXG4gNjg0Olx0ICogQGJhY2tib25lX2d3OiB0aGUgYmFja2JvbmUgZ2F0ZXdheSB3aGljaCBjbGFpbXMgaXRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNDEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA4NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1BQyBBZGRyZXNzIGFuZCBQb3RlbnRpYWwgQnVnKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhpcyBgbWFjYCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSB0aGUgZnVsbCA2IGJ5dGVzIGFyZSBiZWluZyB3cml0dGVuLCB3aGljaCBpcyBnb29kLiBXZSYjMzk7cmUgZ2V0dGluZyB0aGUgY29tcGxldGUgTUFDIGFkZHJlc3MsIGZvdXIgYnl0ZXMgcGx1cyB0d28gYnl0ZXMuIE5vdywgSSYjMzk7bSBtb3Zpbmcgb24gdG8gdGhpcyBgZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBjaGVja2luZyBvdXQgYGJhdGFkdl9kYmdfYXJwYC4gQWgsIGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgYXJlYSB0byBpbnZlc3RpZ2F0ZTogaXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgdXNpbmcgYHVuaWNhc3RfNGFkZHJfcGFja2V0LSZndDtzdWJ0eXBlYCBpbnN0ZWFkIG9mIGB1bmljYXN0XzRhZGRyX3BhY2tldC0mZ3Q7dS5wYWNrZXRfdHlwZWAuIFRoYXQgc2VlbXMgb2RkLCBzbyBJIG5lZWQgdG8gdmVyaWZ5IHdoYXQgdGhlIGNvcnJlY3QgZmllbGQgaXMuIEkmIzM5O2xsIG5lZWQgdG8gZ28gYW5kIGFuYWx5emUgdGhlIGBiYXRhZHZfdW5pY2FzdF80YWRkcl9wYWNrZXRgIHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIHdoYXQgZWFjaCBmaWVsZCByZXByZXNlbnRzIGFuZCBtYWtlIHN1cmUgdGhpcyBpcyB0aGUgcmlnaHQgZmllbGQgdG8gYmUgdXNpbmcuIFRoaXMgbWlnaHQgYmUgYSBidWcgd2FpdGluZyB0byBoYXBwZW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJpZ2h0IGRhdGEgaXMgYmVpbmcgYWNjZXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VuaWNhc3RfNGFkZHJfcGFja2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTUwMj1zdGF0aWMgdm9pZCBiYXRhZHZfZGJnX2FycChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTUwNC17XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo1MDU6XHRzdHJ1Y3QgYmF0YWR2X3VuaWNhc3RfNGFkZHJfcGFja2V0ICp1bmljYXN0XzRhZGRyX3BhY2tldDtcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTUwNi1cdHN0cnVjdCBiYXRhZHZfYmNhc3RfcGFja2V0ICpiY2FzdF9wa3Q7XG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNTIzLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NTI0Olx0dW5pY2FzdF80YWRkcl9wYWNrZXQgPSAoc3RydWN0IGJhdGFkdl91bmljYXN0XzRhZGRyX3BhY2tldCAqKXNrYi1cdTAwM2VkYXRhO1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNTI1LVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NTI2Olx0c3dpdGNoICh1bmljYXN0XzRhZGRyX3BhY2tldC1cdTAwM2V1LnBhY2tldF90eXBlKSB7XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01MjctXHRjYXNlIEJBVEFEVl9VTklDQVNUOlxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTUzMy1cdFx0XHQgICBcJiMzNDsqIGVuY2Fwc3VsYXRlZCB3aXRoaW4gYSBVTklDQVNUXzRBRERSIHBhY2tldCAoc3JjOiAlcE0pXFxuXCYjMzQ7LFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NTM0Olx0XHRcdCAgIHVuaWNhc3RfNGFkZHJfcGFja2V0LVx1MDAzZXNyYyk7XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo1MzU6XHRcdHN3aXRjaCAodW5pY2FzdF80YWRkcl9wYWNrZXQtXHUwMDNlc3VidHlwZSkge1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNTM2LVx0XHRjYXNlIEJBVEFEVl9QX0RBVF9ESFRfUFVUOlxuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTU1MC1cdFx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfREFULCBiYXRfcHJpdiwgXCYjMzQ7KiB0eXBlOiBVbmtub3duICgldSkhXFxuXCYjMzQ7LFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NTUxOlx0XHRcdFx0ICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtXHUwMDNlc3VidHlwZSk7XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01NTItXHRcdH1cbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01NTQtXHRjYXNlIEJBVEFEVl9CQ0FTVDpcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjU1NTpcdFx0YmNhc3RfcGt0ID0gKHN0cnVjdCBiYXRhZHZfYmNhc3RfcGFja2V0ICopdW5pY2FzdF80YWRkcl9wYWNrZXQ7XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01NTYtXHRcdG9yaWdfYWRkciA9IGJjYXN0X3BrdC1cdTAwM2VvcmlnO1xuLS1cbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTU2My1cdFx0XHQgICBcJiMzNDsqIGVuY2Fwc3VsYXRlZCB3aXRoaW4gYW4gdW5rbm93biBwYWNrZXQgdHlwZSAoMHgleClcXG5cJiMzNDssXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo1NjQ6XHRcdFx0ICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtXHUwMDNldS5wYWNrZXRfdHlwZSk7XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01NjUtXHR9XG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jPTM3MD1pbnQgYmF0YWR2X21heF9oZWFkZXJfbGVuKHZvaWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTM3Ni1cdGhlYWRlcl9sZW4gPSBtYXhfdChpbnQsIGhlYWRlcl9sZW4sXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM6Mzc3Olx0XHRcdCAgIHNpemVvZihzdHJ1Y3QgYmF0YWR2X3VuaWNhc3RfNGFkZHJfcGFja2V0KSk7XG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMzc4LVx0aGVhZGVyX2xlbiA9IG1heF90KGludCwgaGVhZGVyX2xlbixcbi0tXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9NTU0PXN0YXRpYyB2b2lkIGJhdGFkdl9yZWN2X2hhbmRsZXJfaW5pdCh2b2lkKVxuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYy01NzAtXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBiYXRhZHZfdW5pY2FzdF9wYWNrZXQpICE9IDEwKTtcbm5ldC9iYXRtYW4tYWR2L21haW4uYzo1NzE6XHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBiYXRhZHZfdW5pY2FzdF80YWRkcl9wYWNrZXQpICE9IDE4KTtcbm5ldC9iYXRtYW4tYWR2L21haW4uYy01NzItXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBiYXRhZHZfZnJhZ19wYWNrZXQpICE9IDIwKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM9NzQwPXN0YXRpYyBpbnQgYmF0YWR2X3JvdXRlX3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTc3Ni1cdGNhc2UgQkFUQURWX1VOSUNBU1RfNEFERFI6XG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM6Nzc3Olx0XHRoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBiYXRhZHZfdW5pY2FzdF80YWRkcl9wYWNrZXQpO1xubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTc3OC1cdFx0YnJlYWs7XG4tLVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jPTEwMzk9aW50IGJhdGFkdl9yZWN2X3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTEwNDItXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYocmVjdl9pZi1cdTAwM2VtZXNoX2lmYWNlKTtcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoxMDQzOlx0c3RydWN0IGJhdGFkdl91bmljYXN0XzRhZGRyX3BhY2tldCAqdW5pY2FzdF80YWRkcl9wYWNrZXQ7XG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTA0NC1cdHN0cnVjdCBiYXRhZHZfdW5pY2FzdF9wYWNrZXQgKnVuaWNhc3RfcGFja2V0O1xuLS1cbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xMDU5LVx0aWYgKGlzNGFkZHIpXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM6MTA2MDpcdFx0aGRyX3NpemUgPSBzaXplb2YoKnVuaWNhc3RfNGFkZHJfcGFja2V0KTtcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xMDYxLVxuLS1cbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xMDkyLVx0XHRpZiAoaXM0YWRkcikge1xubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjEwOTM6XHRcdFx0dW5pY2FzdF80YWRkcl9wYWNrZXQgPVxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjEwOTQ6XHRcdFx0XHQoc3RydWN0IGJhdGFkdl91bmljYXN0XzRhZGRyX3BhY2tldCAqKXNrYi1cdTAwM2VkYXRhO1xubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjEwOTU6XHRcdFx0c3VidHlwZSA9IHVuaWNhc3RfNGFkZHJfcGFja2V0LVx1MDAzZXN1YnR5cGU7XG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTA5Ni1cdFx0XHRiYXRhZHZfZGF0X2luY19jb3VudGVyKGJhdF9wcml2LCBzdWJ0eXBlKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTEwNC1cdFx0XHRpZiAoc3VidHlwZSA9PSBCQVRBRFZfUF9EQVRBKSB7XG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM6MTEwNTpcdFx0XHRcdG9yaWdfYWRkciA9IHVuaWNhc3RfNGFkZHJfcGFja2V0LVx1MDAzZXNyYztcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xMTA2LVx0XHRcdFx0b3JpZ19ub2RlID0gYmF0YWR2X29yaWdfaGFzaF9maW5kKGJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3NlbmQuYz0yNjk9Ym9vbCBiYXRhZHZfc2VuZF9za2JfcHJlcGFyZV91bmljYXN0XzRhZGRyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTI3My17XG5uZXQvYmF0bWFuLWFkdi9zZW5kLmM6Mjc0Olx0c3RydWN0IGJhdGFkdl91bmljYXN0XzRhZGRyX3BhY2tldCAqdWNfNGFkZHJfcGFja2V0O1xubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTI3NS1cdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZjtcbi0tXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmMtMjg5LVxubmV0L2JhdG1hbi1hZHYvc2VuZC5jOjI5MDpcdHVjXzRhZGRyX3BhY2tldCA9IChzdHJ1Y3QgYmF0YWR2X3VuaWNhc3RfNGFkZHJfcGFja2V0ICopc2tiLVx1MDAzZWRhdGE7XG5uZXQvYmF0bWFuLWFkdi9zZW5kLmMtMjkxLVx0dWNfNGFkZHJfcGFja2V0LVx1MDAzZXUucGFja2V0X3R5cGUgPSBCQVRBRFZfVU5JQ0FTVF80QUREUjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ1MzgKCQkJCQkJCW91dHB1dDogNDIKCQkJCQkJCXRob3VnaHRzOiA2MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgQmF0YWR2IERBVCBDYWNoZSBEdW1wKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgaW50byB0aGlzLiBJIG5lZWQgdG8gdGFrZSBhIGxvb2sgYXQgYGJhdGFkdl9kYXRfY2FjaGVfZHVtcF9lbnRyeWAgaW4gdGhlIGBkaXN0cmlidXRlZC1hcnAtdGFibGUuY2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGRlY2xhcmF0aW9uIGZvciBgdTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7YC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IHRoZSByZWFsIHRhc2sgaGVyZSBpcyB0byBkaWcgaW50byB3aGF0IGBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnlgIGlzIGFjdHVhbGx5ICpkb2luZyouIExldCYjMzk7cyBnbyB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gZGVmaW5pdGlvbiB3aXRoIGEgZmluZSB0b290aCBjb21iLiBJIHdhbnQgdG8gc2VlIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCBhbmQgaG93IGl0IGlzIGJlaGF2aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTM4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5Mzg6XHRzdGF0aWMgaW50XG4gOTM5Olx0YmF0YWR2X2RhdF9jYWNoZV9kdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsXG4gOTQwOlx0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiA5NDE6XHRcdFx0XHQgICAgc3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSlcbiA5NDI6XHR7XG4gOTQzOlx0XHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiA5NDQ6XHRcdHU2NCB1NjRfbWFjO1xuIDk0NTpcdFx0aW50IG1zZWNzO1xuIDk0NjpcdFx0dm9pZCAqaGRyO1xuIDk0NzpcdFxuIDk0ODpcdFx0aGRyID0gZ2VubG1zZ19wdXQobXNnLCBwb3J0aWQsIGNiLVx1MDAzZW5saC1cdTAwM2VubG1zZ19zZXEsXG4gOTQ5Olx0XHRcdFx0ICBcdTAwMjZiYXRhZHZfbmV0bGlua19mYW1pbHksIE5MTV9GX01VTFRJLFxuIDk1MDpcdFx0XHRcdCAgQkFUQURWX0NNRF9HRVRfREFUX0NBQ0hFKTtcbiA5NTE6XHRcdGlmICghaGRyKVxuIDk1MjpcdFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gOTUzOlx0XG4gOTU0Olx0XHRnZW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgaGRyKTtcbiA5NTU6XHRcbiA5NTY6XHRcdG1zZWNzID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gZGF0X2VudHJ5LVx1MDAzZWxhc3RfdXBkYXRlKTtcbiA5NTc6XHRcdHU2NF9tYWMgPSBhdG9taWM2NF9yZWFkKFx1MDAyNmRhdF9lbnRyeS1cdTAwM2VtYWNfYWRkcik7XG4gOTU4Olx0XHR1NjRfdG9fZXRoZXJfYWRkcih1NjRfbWFjLCBtYWMpO1xuIDk1OTpcdFxuIDk2MDpcdFx0aWYgKG5sYV9wdXRfaW5fYWRkcihtc2csIEJBVEFEVl9BVFRSX0RBVF9DQUNIRV9JUDRBRERSRVNTLFxuIDk2MTpcdFx0XHRcdCAgICBkYXRfZW50cnktXHUwMDNlaXApIHx8XG4gOTYyOlx0XHQgICAgbmxhX3B1dChtc2csIEJBVEFEVl9BVFRSX0RBVF9DQUNIRV9IV0FERFJFU1MsIEVUSF9BTEVOLCBtYWMpIHx8XG4gOTYzOlx0XHQgICAgbmxhX3B1dF91MTYobXNnLCBCQVRBRFZfQVRUUl9EQVRfQ0FDSEVfVklELCBkYXRfZW50cnktXHUwMDNldmlkKSB8fFxuIDk2NDpcdFx0ICAgIG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfTEFTVF9TRUVOX01TRUNTLCBtc2VjcykpIHtcbiA5NjU6XHRcdFx0Z2VubG1zZ19jYW5jZWwobXNnLCBoZHIpO1xuIDk2NjpcdFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuIDk2NzpcdFx0fVxuIDk2ODpcdFxuIDk2OTpcdFx0Z2VubG1zZ19lbmQobXNnLCBoZHIpO1xuIDk3MDpcdFx0cmV0dXJuIDA7XG4gOTcxOlx0fVxuIDk3MjpcdFxuIDk3MzpcdC8qKlxuIDk3NDpcdCAqIGJhdGFkdl9kYXRfY2FjaGVfZHVtcF9idWNrZXQoKSAtIGR1bXAgb25lIGJ1Y2tldCBvZiB0aGUgREFUIGNhY2hlIHRhYmxlIHRvXG4gOTc1Olx0ICogIGEgbmV0bGluayBzb2NrZXRcbiA5NzY6XHQgKiBAbXNnOiBidWZmZXIgZm9yIHRoZSBtZXNzYWdlXG4gOTc3Olx0ICogQHBvcnRpZDogbmV0bGluayBwb3J0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NDg2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxpZ25tZW50IGluIGB1NjRfdG9fZXRoZXJfYWRkcmAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHU2NF90b19ldGhlcl9hZGRyYCBmdW5jdGlvbiBhbmQgaXQgc2VlbXMgdG8gYmUgY29weWluZyA2IGJ5dGVzIHRvIGBtYWNgIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBwdXRfdW5hbGlnbmVkYC4gVGhlIGltbWVkaWF0ZSBmbGFnIGhlcmUgaXMgdGhhdCB0aGVzZSB0eXBlcyBvZiBvcGVyYXRpb25zIGNhbiBvZnRlbiBkZXBlbmQgb24gbWVtb3J5IGFsaWdubWVudCwgYW5kIHNwZWNpZmljYWxseSwgdGhlIHVzZSBvZiBgcHV0X3VuYWxpZ25lZGAgKG9yIGVxdWl2YWxlbnQpIHJhaXNlcyBhIHJlZCBmbGFnIGluIG15IG1pbmQuIFRoZSBjb2RlJiMzOTtzIHVzaW5nIGFuIG9wZXJhdGlvbiB0aGF0IGFudGljaXBhdGVzIDItYnl0ZSBhbGlnbm1lbnQuCgpTbywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGhlYWRlcnMgYW5kIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBgdTY0X3RvX2V0aGVyX2FkZHJgIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgYF9fYWxpZ25lZCgyKWAgYXR0cmlidXRlIHdhcyBhZGRlZCBhY3Jvc3MgdGhlc2UgZmlsZXMuIEkgc3VzcGVjdCBpdCYjMzk7cyBkaXJlY3RseSByZWxhdGVkIHRvIHRoZSBtZW1vcnkgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBvZiB0aGUgYHB1dF91bmFsaWduZWRgIGZ1bmN0aW9uIG9yIHdoYXRldmVyIGVxdWl2YWxlbnQgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZCB0byB3cml0ZSB0aGUgTUFDIGFkZHJlc3MuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgZXNzZW50aWFsIG9yIGEgcHJlY2F1dGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dTY0X3RvX2V0aGVyX2FkZHImIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX21haW4uYz01Mzc9c3RhdGljIGludCBlcmRtYV9pYl9kZXZpY2VfYWRkKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9tYWluLmMtNTg4LVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX21haW4uYzo1ODk6XHR1NjRfdG9fZXRoZXJfYWRkcihtYWMsIGRldi1cdTAwM2VhdHRycy5wZWVyX2FkZHIpO1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L2VyZG1hL2VyZG1hX21haW4uYy01OTAtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTMzMj1zdGF0aWMgaW5saW5lIHZvaWQgYjUzX2FybF90b19lbnRyeShzdHJ1Y3QgYjUzX2FybF9lbnRyeSAqZW50LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0zMzktXHRlbnQtXHUwMDNlaXNfc3RhdGljID0gISEoZndkX2VudHJ5IFx1MDAyNiBBUkxUQkxfU1RBVElDKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDozNDA6XHR1NjRfdG9fZXRoZXJfYWRkcihtYWNfdmlkLCBlbnQtXHUwMDNlbWFjKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0zNDEtXHRlbnQtXHUwMDNldmlkID0gbWFjX3ZpZCBcdTAwM2VcdTAwM2UgQVJMVEJMX1ZJRF9TO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaD0zNDQ9c3RhdGljIGlubGluZSB2b2lkIGI1M19hcmxfdG9fZW50cnlfMjUoc3RydWN0IGI1M19hcmxfZW50cnkgKmVudCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMzUwLVx0ZW50LVx1MDAzZWlzX3N0YXRpYyA9ICEhKG1hY192aWQgXHUwMDI2IEFSTFRCTF9TVEFUSUNfMjUpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oOjM1MTpcdHU2NF90b19ldGhlcl9hZGRyKG1hY192aWQsIGVudC1cdTAwM2VtYWMpO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTM1Mi1cdGVudC1cdTAwM2Vwb3J0ID0gKG1hY192aWQgXHUwMDI2IEFSTFRCTF9EQVRBX1BPUlRfSURfTUFTS18yNSkgXHUwMDNlXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTM1OT1zdGF0aWMgaW5saW5lIHZvaWQgYjUzX2FybF90b19lbnRyeV84OShzdHJ1Y3QgYjUzX2FybF9lbnRyeSAqZW50LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0zNjYtXHRlbnQtXHUwMDNlaXNfc3RhdGljID0gISEoZndkX2VudHJ5IFx1MDAyNiBBUkxUQkxfU1RBVElDXzg5KTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDozNjc6XHR1NjRfdG9fZXRoZXJfYWRkcihtYWNfdmlkLCBlbnQtXHUwMDNlbWFjKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0zNjgtXHRlbnQtXHUwMDNldmlkID0gbWFjX3ZpZCBcdTAwM2VcdTAwM2UgQVJMVEJMX1ZJRF9TO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaD00MTc9c3RhdGljIGlubGluZSB2b2lkIGI1M19hcmxfc2VhcmNoX3RvX2VudHJ5XzI1KHN0cnVjdCBiNTNfYXJsX2VudHJ5ICplbnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTQyMy1cdGVudC1cdTAwM2Vpc19zdGF0aWMgPSAhIShtYWNfdmlkIFx1MDAyNiBBUkxUQkxfU1RBVElDXzI1KTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDo0MjQ6XHR1NjRfdG9fZXRoZXJfYWRkcihtYWNfdmlkLCBlbnQtXHUwMDNlbWFjKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC00MjUtXHRlbnQtXHUwMDNldmlkID0gKG1hY192aWQgXHUwMDI2IEFSTF9TUkNIX1JTTFRfVklEX01BU0tfMjUpIFx1MDAzZVx1MDAzZVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaD00MzU9c3RhdGljIGlubGluZSB2b2lkIGI1M19hcmxfc2VhcmNoX3RvX2VudHJ5XzYzeHgoc3RydWN0IGI1M19hcmxfZW50cnkgKmVudCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtNDM4LVx0bWVtc2V0KGVudCwgMCwgc2l6ZW9mKCplbnQpKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDo0Mzk6XHR1NjRfdG9fZXRoZXJfYWRkcihtYWNfdmlkLCBlbnQtXHUwMDNlbWFjKTtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC00NDAtXHRlbnQtXHUwMDNldmlkID0gbWFjX3ZpZCBcdTAwM2VcdTAwM2UgQVJMVEJMX1ZJRF9TO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTE4Mzc9c3RhdGljIGludCBzamExMTA1X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMTg2Ny1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjE4Njg6XHRcdHU2NF90b19ldGhlcl9hZGRyKGwyX2xvb2t1cC5tYWNhZGRyLCBtYWNhZGRyKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTE4NjktXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM9MTg4Nj1zdGF0aWMgdm9pZCBzamExMTA1X2Zhc3RfYWdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMTkyMy1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjE5MjQ6XHRcdHU2NF90b19ldGhlcl9hZGRyKGwyX2xvb2t1cC5tYWNhZGRyLCBtYWNhZGRyKTtcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTE5MjUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnVuZ2libGUvZnVuZXRoL2Z1bmV0aF9tYWluLmM9OTUzPXN0YXRpYyBpbnQgZnVuX2dldF9wb3J0X2F0dHJpYnV0ZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX21haW4uYy05NzQtXHRcdGNhc2UgRlVOX0FETUlOX1BPUlRfS0VZX01BQ0FERFI6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX21haW4uYzo5NzU6XHRcdFx0dTY0X3RvX2V0aGVyX2FkZHIoZGF0YVtpXSwgbWFjKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfbWFpbi5jLTk3Ni1cdFx0XHRpZiAoaXNfemVyb19ldGhlcl9hZGRyKG1hYykpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfaHcuYz02Mj1zdGF0aWMgaW50IGhiZ19od19kZXZfc3BlY3NfaW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX2h3LmMtODItXHRtYWNfYWRkciA9IGhiZ19yZWdfcmVhZDY0KHByaXYsIEhCR19SRUdfTUFDX0FERFJfQUREUik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfaHcuYzo4MzpcdHU2NF90b19ldGhlcl9hZGRyKG1hY19hZGRyLCAodTggKilzcGVjcy1cdTAwM2VtYWNfYWRkci5zYV9kYXRhKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaWJtY2dlL2hiZ19ody5jLTg0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTQzND1pbnQgY2d4X2xtYWNfYWRkcl9kZWwodTggY2d4X2lkLCB1OCBsbWFjX2lkLCB1OCBpbmRleClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy00NjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYzo0NjQ6XHR1NjRfdG9fZXRoZXJfYWRkcihjZmcsIG1hYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYy00NjUtXHRpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIobWFjKSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYz03OTA9c3RhdGljIHZvaWQgcnZ1X3NldHVwX3BmdmZfbWFjYWRkcmVzcyhzdHJ1Y3QgcnZ1ICpydnUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmMtODA4LVx0XHRcdGlmICgqbWFjKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6ODA5Olx0XHRcdFx0dTY0X3RvX2V0aGVyX2FkZHIoKm1hYywgcGZ2Zi1cdTAwM2VtYWNfYWRkcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy04MTAtXHRcdFx0ZWxzZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTgyNC1cdFx0XHRcdGlmICgqbWFjKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6ODI1Olx0XHRcdFx0XHR1NjRfdG9fZXRoZXJfYWRkcigqbWFjLCBwZnZmLVx1MDAzZW1hY19hZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTgyNi1cdFx0XHRcdGVsc2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTg3NT1zdGF0aWMgaW50IHJ2dV9kYmdfcnZ1X2Z3ZGF0YV9kaXNwbGF5KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtOTEwLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUEZfTUFDTlVNX01BWDsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6OTExOlx0XHR1NjRfdG9fZXRoZXJfYWRkcihmd2RhdGEtXHUwMDNlcGZfbWFjc1tpXSwgbWFjKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtOTEyLVx0XHRpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihtYWMpKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy05MjQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBWRl9NQUNOVU1fTUFYOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzo5MjU6XHRcdHU2NF90b19ldGhlcl9hZGRyKGZ3ZGF0YS1cdTAwM2V2Zl9tYWNzW2ldLCBtYWMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy05MjYtXHRcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKG1hYykpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI5NjE9c3RhdGljIGludCBjZ3hfcHJpbnRfZG1hY19mbHQoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMwMDAtXHRcdFx0bWFjID0gRklFTERfR0VUKENHWF9SWF9ETUFDX0FEUl9NQVNLLCBjZmcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzozMDAxOlx0XHRcdHU2NF90b19ldGhlcl9hZGRyKG1hYywgZG1hYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTMwMDItXHRcdFx0c2VxX3ByaW50ZihzLCBcJiMzNDslN2QgICAgICVwTVxcblwmIzM0OywgaW5kZXgsIGRtYWMpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvY21kLmM9MzE2MT1pbnQgbWx4NF9zZXRfdmZfc3Bvb2ZjaGsoc3RydWN0IG1seDRfZGV2ICpkZXYsIGludCBwb3J0LCBpbnQgdmYsIGJvb2wgc2V0dGluZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2NtZC5jLTMxNzgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2NtZC5jOjMxNzk6XHR1NjRfdG9fZXRoZXJfYWRkcihzX2luZm8tXHUwMDNlbWFjLCBtYWMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9jbWQuYy0zMTgwLVx0aWYgKHNldHRpbmcgXHUwMDI2XHUwMDI2ICFpc192YWxpZF9ldGhlcl9hZGRyKG1hYykpIHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jPTUzMz1zdGF0aWMgdm9pZCBtbHg0X2VuX3U2NF90b19tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTY0IHNyY19tYWMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9uZXRkZXYuYy01MzYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jOjUzNzpcdHU2NF90b19ldGhlcl9hZGRyKHNyY19tYWMsIGFkZHIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9lbl9uZXRkZXYuYy01MzgtXHRldGhfaHdfYWRkcl9zZXQoZGV2LCBhZGRyKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jPTY2PXN0YXRpYyB2b2lkIG1seGJmX2dpZ2VfaW5pdGlhbF9tYWMoc3RydWN0IG1seGJmX2dpZ2UgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4YmZfZ2lnZS9tbHhiZl9naWdlX21haW4uYy03My1cdFx0XHRcdCAgICAgXHUwMDI2bG9jYWxfbWFjKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tYWluLmM6NzQ6XHR1NjRfdG9fZXRoZXJfYWRkcihsb2NhbF9tYWMsIG1hYyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jLTc1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwLmM9MTUzMj1zdGF0aWMgdm9pZCB0bjQwX21hY19pbml0KHN0cnVjdCB0bjQwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDAuYy0xNTQwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDAuYzoxNTQxOlx0dTY0X3RvX2V0aGVyX2FkZHIodmFsLCBhZGRyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwLmMtMTU0Mi1cdGV0aF9od19hZGRyX3NldChwcml2LVx1MDAzZW5kZXYsIGFkZHIpO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmM9OTQ4PWludCBtd2lmaWV4X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbXdpZmlleF9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtOTc1LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYzo5NzY6XHR1NjRfdG9fZXRoZXJfYWRkcihtYWNfYWRkciwgcHJpdi1cdTAwM2VjdXJyX2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy05NzctXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy05ODItXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjk4MzpcdFx0dTY0X3RvX2V0aGVyX2FkZHIob2xkX21hY19hZGRyLCBwcml2LVx1MDAzZWN1cnJfYWRkcik7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTk4NC1cdFx0bXdpZmlleF9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmM9OTIzPWludCBueHB3aWZpX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYy05NDctXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmM6OTQ4Olx0dTY0X3RvX2V0aGVyX2FkZHIobWFjX2FkZHIsIHByaXYtXHUwMDNlY3Vycl9hZGRyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYy05NDktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jLTk1NC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYzo5NTU6XHRcdHU2NF90b19ldGhlcl9hZGRyKG9sZF9tYWNfYWRkciwgcHJpdi1cdTAwM2VjdXJyX2FkZHIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jLTk1Ni1cdFx0bnhwd2lmaV9kYmcocHJpdi1cdTAwM2VhZGFwdGVyLCBFUlJPUixcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg9NDY0PXN0YXRpYyBpbmxpbmUgdTY0IGV0aGVyX2FkZHJfdG9fdTY0KGNvbnN0IHU4ICphZGRyKVxuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00NzUtLyoqXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NDc2OiAqIHU2NF90b19ldGhlcl9hZGRyIC0gQ29udmVydCBhIHU2NCB0byBhbiBFdGhlcm5ldCBhZGRyZXNzLlxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTQ3Ny0gKiBAdTogdTY0IHRvIGNvbnZlcnQgdG8gYW4gRXRoZXJuZXQgTUFDIGFkZHJlc3Ncbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNDc5LSAqL1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjQ4MDpzdGF0aWMgaW5saW5lIHZvaWQgdTY0X3RvX2V0aGVyX2FkZHIodTY0IHUsIHU4ICphZGRyKVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTQ4MS17XG4tLVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTQ5NT1zdGF0aWMgaW5saW5lIHZvaWQgZXRoX2FkZHJfZGVjKHU4ICphZGRyKVxuLS1cbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00OTktXHR1LS07XG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NTAwOlx0dTY0X3RvX2V0aGVyX2FkZHIodSwgYWRkcik7XG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNTAxLX1cbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg9NTA3PXN0YXRpYyBpbmxpbmUgdm9pZCBldGhfYWRkcl9pbmModTggKmFkZHIpXG4tLVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTUxMS1cdHUmIzQzOyYjNDM7O1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjUxMjpcdHU2NF90b19ldGhlcl9hZGRyKHUsIGFkZHIpO1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTUxMy19XG4tLVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTUyMT1zdGF0aWMgaW5saW5lIHZvaWQgZXRoX2FkZHJfYWRkKHU4ICphZGRyLCBsb25nIG9mZnNldClcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNTI1LVx0dSAmIzQzOz0gb2Zmc2V0O1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjUyNjpcdHU2NF90b19ldGhlcl9hZGRyKHUsIGFkZHIpO1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTUyNy19XG4tLVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTYwND1zdGF0aWMgaW5saW5lIHZvaWQgZXRoX2h3X2FkZHJfZ2VuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpiYXNlX2FkZHIsXG4tLVxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTYxMC1cdHUgJiM0Mzs9IGlkO1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjYxMTpcdHU2NF90b19ldGhlcl9hZGRyKHUsIGFkZHIpO1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTYxMi1cdGV0aF9od19hZGRyX3NldChkZXYsIGFkZHIpO1xuLS1cbmluY2x1ZGUvbmV0L2NmZzgwMjExLmg9ODI5MT1zdGF0aWMgaW5saW5lIHZvaWQgY2ZnODAyMTFfZ2VuX25ld19ic3NpZChjb25zdCB1OCAqYnNzaWQsIHU4IG1heF9ic3NpZCxcbi0tXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTgzMDEtXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oOjgzMDI6XHR1NjRfdG9fZXRoZXJfYWRkcihuZXdfYnNzaWRfdTY0LCBuZXdfYnNzaWQpO1xuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC04MzAzLX1cbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz05Mzk9YmF0YWR2X2RhdF9jYWNoZV9kdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtOTU3LVx0dTY0X21hYyA9IGF0b21pYzY0X3JlYWQoXHUwMDI2ZGF0X2VudHJ5LVx1MDAzZW1hY19hZGRyKTtcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjk1ODpcdHU2NF90b19ldGhlcl9hZGRyKHU2NF9tYWMsIG1hYyk7XG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy05NTktXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9MTIzND1ib29sIGJhdGFkdl9kYXRfc25vb3Bfb3V0Z29pbmdfYXJwX3JlcXVlc3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMjc2LVx0XHR1NjRfbWFjID0gYXRvbWljNjRfcmVhZChcdTAwMjZkYXRfZW50cnktXHUwMDNlbWFjX2FkZHIpO1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTI3NzpcdFx0dTY0X3RvX2V0aGVyX2FkZHIodTY0X21hYywgbWFjKTtcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTEyNzgtXG4tLVxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9MTM0Mz1ib29sIGJhdGFkdl9kYXRfc25vb3BfaW5jb21pbmdfYXJwX3JlcXVlc3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMzgzLVx0dTY0X21hYyA9IGF0b21pYzY0X3JlYWQoXHUwMDI2ZGF0X2VudHJ5LVx1MDAzZW1hY19hZGRyKTtcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjEzODQ6XHR1NjRfdG9fZXRoZXJfYWRkcih1NjRfbWFjLCBtYWMpO1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTM4NS1cbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz0xNDczPWJvb2wgYmF0YWR2X2RhdF9zbm9vcF9pbmNvbWluZ19hcnBfcmVwbHkoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xNTE1LVx0XHR1NjRfbWFjID0gYXRvbWljNjRfcmVhZChcdTAwMjZkYXRfZW50cnktXHUwMDNlbWFjX2FkZHIpO1xubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTUxNjpcdFx0dTY0X3RvX2V0aGVyX2FkZHIodTY0X21hYywgbWFjKTtcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTE1MTctXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvbGliLnNoPTEwOTI9ZXRoZXJfYWRkcl90b191NjQoKVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2xpYi5zaC0xMTA5LVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvbGliLnNoOjExMTA6dTY0X3RvX2V0aGVyX2FkZHIoKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvbGliLnNoLTExMTEte1xuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2xpYi5zaD0yMjk2PWhhc191bmljYXN0X2ZsdCgpXG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvbGliLnNoLTIzMDQtXHRpcCBsaW5rIGFkZCBsaW5rICRkZXYgbmFtZSBtYWN2bGFuLXRtcCB0eXBlIG1hY3ZsYW4gbW9kZSBwcml2YXRlXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9saWIuc2g6MjMwNTpcdGlwIGxpbmsgc2V0IG1hY3ZsYW4tdG1wIGFkZHJlc3MgJCh1NjRfdG9fZXRoZXJfYWRkciAkKCh0bXAgJiM0MzsgMSkpKVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvbGliLnNoLTIzMDYtXHRpcCBsaW5rIHNldCBtYWN2bGFuLXRtcCB1cFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTM2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBuZXR3b3JraW5nIGtlcm5lbCBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgdTY0X3RvX2V0aGVyX2FkZHJgIEZ1bmN0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgdTY0X3RvX2V0aGVyX2FkZHJgIGluIGBpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmhgLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNvbnZlcnRpbmcgYSA2NC1iaXQgdW5zaWduZWQgaW50ZWdlciBpbnRvIGFuIEV0aGVybmV0IE1BQyBhZGRyZXNzIGZvcm1hdCwgbGlrZWx5IHJlcHJlc2VudGVkIGFzIGEgYHN0cnVjdCBldGhlcl9hZGRyYCBvciBhIGB1OFs2XWAuIEdpdmVuIHRoYXQgaXQmIzM5O3MgaW4gYSBoZWFkZXIgZmlsZSwgaXQmIzM5O3MgcHJvYmFibHkgYW4gaW5saW5lIGZ1bmN0aW9uIG9yIGEgbWFjcm8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIOKAkyB3aGV0aGVyIGl0JiMzOTtzIHNpbXBseSBhIGJpdHdpc2Ugb3BlcmF0aW9uLCBhIHNoaWZ0LCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHRvIGRlYWwgd2l0aCBlbmRpYW5uZXNzIG9yIHBvdGVudGlhbCB2YWxpZGF0aW9uLiBNeSBtYWluIGNvbmNlcm4gaXMgaG93IGVmZmljaWVudCBhbmQgc2FmZSB0aGlzIGlzLiBBcmUgdGhlcmUgYW55IGVkZ2UgY2FzZXM/IERvZXMgaXQgcGVyZm9ybSBhbnkgZXJyb3IgY2hlY2tpbmcgb24gdGhlIGlucHV0IGB1NjRgPyBJJiMzOTtkIGV4cGVjdCBpdCB0byBoYW5kbGUgdGhlIGJ5dGUgb3JkZXIgY29ycmVjdGx5IHdoZW4gY29uc3RydWN0aW5nIHRoZSBNQUMgYWRkcmVzcyBzaW5jZSB0aGVzZSB2YWx1ZXMgYXJlIGFsd2F5cyByZXByZXNlbnRlZCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgd2hpY2ggaXMgYmlnLWVuZGlhbiwgd2hlcmVhcyB0aGUga2VybmVsIGNvdWxkIGJlIHJ1bm5pbmcgb24gZWl0aGVyIGEgYmlnIG9yIGxpdHRsZSBlbmRpYW4gYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgb3ZlcmZsb3cgc2l0dWF0aW9ucyB0aGF0IGNvdWxkIGxlYWQgdG8gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLiBMZXQmIzM5O3Mgc2VlIGhvdyBpdCYjMzk7cyBhY3R1YWxseSBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ3NTpcdC8qKlxuIDQ3NjpcdCAqIHU2NF90b19ldGhlcl9hZGRyIC0gQ29udmVydCBhIHU2NCB0byBhbiBFdGhlcm5ldCBhZGRyZXNzLlxuIDQ3NzpcdCAqIEB1OiB1NjQgdG8gY29udmVydCB0byBhbiBFdGhlcm5ldCBNQUMgYWRkcmVzc1xuIDQ3ODpcdCAqIEBhZGRyOiBQb2ludGVyIHRvIGEgc2l4LWJ5dGUgYXJyYXkgdG8gY29udGFpbiB0aGUgRXRoZXJuZXQgYWRkcmVzc1xuIDQ3OTpcdCAqL1xuIDQ4MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCB1NjRfdG9fZXRoZXJfYWRkcih1NjQgdSwgdTggKmFkZHIpXG4gNDgxOlx0e1xuIDQ4MjpcdFx0aW50IGk7XG4gNDgzOlx0XG4gNDg0Olx0XHRmb3IgKGkgPSBFVEhfQUxFTiAtIDE7IGkgXHUwMDNlPSAwOyBpLS0pIHtcbiA0ODU6XHRcdFx0YWRkcltpXSA9IHUgXHUwMDI2IDB4ZmY7XG4gNDg2Olx0XHRcdHUgPSB1IFx1MDAzZVx1MDAzZSA4O1xuIDQ4NzpcdFx0fVxuIDQ4ODpcdH1cbiA0ODk6XHRcbiA0OTA6XHQvKipcbiA0OTE6XHQgKiBldGhfYWRkcl9kZWMgLSBEZWNyZW1lbnQgdGhlIGdpdmVuIE1BQyBhZGRyZXNzXG4gNDkyOlx0ICpcbiA0OTM6XHQgKiBAYWRkcjogUG9pbnRlciB0byBhIHNpeC1ieXRlIGFycmF5IGNvbnRhaW5pbmcgRXRoZXJuZXQgYWRkcmVzcyB0byBkZWNyZW1lbnRcbiA0OTQ6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDIwMTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV0aGVyIEFkZHJlc3MgQ29weSBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGV0aGVyX2FkZHJfY29weWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb25zdHJhaW50cy4gQWNjb3JkaW5nIHRvIHRoZSBoZWFkZXIgZmlsZSwgc3BlY2lmaWNhbGx5IGBpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmhgLCB0aGUgZnVuY3Rpb24gZXhwZWN0cyB0aGUgc291cmNlIHBvaW50ZXIgKGBzcmNgKSBhbmQgdGhlIGRlc3RpbmF0aW9uIHBvaW50ZXIgKGBkc3RgKSB0byBiZSBhbGlnbmVkIHRvIGB1MTZgLiBJdCB1c2VzIHRoYXQgYWxpZ25tZW50IHRvIGFjY2VzcyBgdTE2YCB1bml0cy4gR290IGl0LiBTbywgYWxpZ25tZW50IGlzIGtleSBoZXJlIHRvIGF2b2lkIHBvdGVudGlhbCB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oYCBhcm91bmQgYGV0aGVyX2FkZHJfY29weWAgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBvciBwZXJoYXBzIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnl0aGluZyBJIGNhbiBsZXZlcmFnZSBmb3IgbXkgdXNlIGNhc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbmxpbmUgdm9pZCBldGhlcl9hZGRyX2NvcHkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTI5MD1zdGF0aWMgaW5saW5lIHUzMiBldGhfaHdfYWRkcl9jcmMoc3RydWN0IG5ldGRldl9od19hZGRyICpoYSlcbi0tXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzAxLSAqL1xuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjMwMjpzdGF0aWMgaW5saW5lIHZvaWQgZXRoZXJfYWRkcl9jb3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzAzLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0MjIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgZXRoZXJfYWRkcl9jb3B5YCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBldGhlcl9hZGRyX2NvcHlgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgY29udGV4dCB3aGVyZSBpdCBpcyBiZWluZyB1c2VkLiBJIGtub3cgdGhpcyBpcyBhIHByZXR0eSBiYXNpYyBmdW5jdGlvbiwgcHJvYmFibHkganVzdCBjb3B5aW5nIHRoZSBNQUMgYWRkcmVzcywgYnV0IEkgd2FudCB0byBlbnN1cmUgdGhhdCBJIHJlbWVtYmVyIGFsbCBkZXRhaWxzIHRvIHZlcmlmeSB0aGF0IGl0JiMzOTtzIGRvaW5nIHByZWNpc2VseSB3aGF0IGl0IG5lZWRzIHRvIGRvLCB3aXRob3V0IGFueSBvdmVyaGVhZC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBmb3IgYW55IG9idmlvdXMgZ290Y2hhcyBsaWtlIHBvdGVudGlhbCBhbGlnbm1lbnQgaXNzdWVzLCBvdmVybGFwLCBvciB3aGV0aGVyIGl0JiMzOTtzIG9wdGltaXplZCBpbiB0aGUgY29tbW9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSB1bmRlcmx5aW5nIGNvbXBpbGVyIG9yIGFyY2hpdGVjdHVyZS4gSSB3aWxsIGV2YWx1YXRlIHRoZSBmdW5jdGlvbiYjMzk7cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc2l6ZSBvZiB0aGUgTUFDIGFkZHJlc3MgdG8gZW5zdXJlIGl0IG1hdGNoZXMgYW55IG5ldHdvcmsgaW50ZXJmYWNlIGNvbnRyb2xsZXIgcmVxdWlyZW1lbnRzIEkgbWlnaHQgYmUgZGVzaWduaW5nL2RlYnVnZ2luZy4gSXMgaXQgYSBzdHJhaWdodCBtZW1vcnkgY29weSwgb3IgYXJlIHRoZXJlIGFueSBiaXQtbGV2ZWwgbWFuaXB1bGF0aW9ucyBpbnZvbHZlZD8gQW55IG5vbi1vYnZpb3VzIG9wdGltaXphdGlvbnMgdGhhdCBhcmUgdXNlZD8gSXQmIzM5O3MgYWx3YXlzIHdvcnRoIHJldmlzaXRpbmcgdGhlIGZ1bmRhbWVudGFscywgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGxvdy1sZXZlbC4gSSYjMzk7bGwgYWxzbyBiZSB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoZSBmdW5jdGlvbiBpc24mIzM5O3QgdGhyZWFkLXNhZmUsIG9yIGlmIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGJ1ZmZlcnMgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIGNvcnJlY3RseSBhbGlnbmVkLiBJIHdpbGwgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgY29weSBpcyBjb3JyZWN0bHkgaGFuZGxlZCBhbmQgYW55IGFzc29jaWF0ZWQgZXJyb3IgY29uZGl0aW9ucyBhcmUgY29ycmVjdGx5IGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTU6XHQvKipcbiAyOTY6XHQgKiBldGhlcl9hZGRyX2NvcHkgLSBDb3B5IGFuIEV0aGVybmV0IGFkZHJlc3NcbiAyOTc6XHQgKiBAZHN0OiBQb2ludGVyIHRvIGEgc2l4LWJ5dGUgYXJyYXkgRXRoZXJuZXQgYWRkcmVzcyBkZXN0aW5hdGlvblxuIDI5ODpcdCAqIEBzcmM6IFBvaW50ZXIgdG8gYSBzaXgtYnl0ZSBhcnJheSBFdGhlcm5ldCBhZGRyZXNzIHNvdXJjZVxuIDI5OTpcdCAqXG4gMzAwOlx0ICogUGxlYXNlIG5vdGU6IGRzdCBcdTAwMjYgc3JjIG11c3QgYm90aCBiZSBhbGlnbmVkIHRvIHUxNi5cbiAzMDE6XHQgKi9cbiAzMDI6XHRzdGF0aWMgaW5saW5lIHZvaWQgZXRoZXJfYWRkcl9jb3B5KHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpXG4gMzAzOlx0e1xuIDMwNDpcdCNpZiBkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKVxuIDMwNTpcdFx0Kih1MzIgKilkc3QgPSAqKGNvbnN0IHUzMiAqKXNyYztcbiAzMDY6XHRcdCoodTE2ICopKGRzdCAmIzQzOyA0KSA9ICooY29uc3QgdTE2ICopKHNyYyAmIzQzOyA0KTtcbiAzMDc6XHQjZWxzZVxuIDMwODpcdFx0dTE2ICphID0gKHUxNiAqKWRzdDtcbiAzMDk6XHRcdGNvbnN0IHUxNiAqYiA9IChjb25zdCB1MTYgKilzcmM7XG4gMzEwOlx0XG4gMzExOlx0XHRhWzBdID0gYlswXTtcbiAzMTI6XHRcdGFbMV0gPSBiWzFdO1xuIDMxMzpcdFx0YVsyXSA9IGJbMl07XG4gMzE0Olx0I2VuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMTEwCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMzcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIEFsaWdubWVudCBJc3N1ZXMgaW4gYmF0bWFuLWFkdioqCgpPa2F5LCBzbyB0aGUgYGV0aGVyX2FkZHJfY29weWAgZnVuY3Rpb24gaGFzIHRoaXMgcmVxdWlyZW1lbnQgdGhhdCBib3RoIHRoZSBkZXN0aW5hdGlvbiAoYGRzdGApIGFuZCBzb3VyY2UgKGBzcmNgKSBtZW1vcnkgYWRkcmVzc2VzIG5lZWQgdG8gYmUgYWxpZ25lZCB0byBhIGB1MTZgIGJvdW5kYXJ5LiBUaGlzIHdob2xlIHNsZXcgb2YgY2hhbmdlcyBpbiBgYmF0bWFuLWFkdmAgYXJlIGFkZHJlc3NpbmcgcG90ZW50aWFsbHkgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgZXNwZWNpYWxseSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIHVuYWxpZ25lZCBhY2Nlc3MgaXNuJiMzOTt0IGhhbmRsZWQgZWZmaWNpZW50bHkuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYF9fYWxpZ25lZCgyKWAgdG8gYHU4IG1hY1tFVEhfQUxFTl1gIGFycmF5cyBpcyB0aGUgdGVsbC4gSSBrbm93IEtBU0FOIGFuZCBVQlNBTiB3aWxsIGNhdGNoIHVuYWxpZ25lZCBhY2Nlc3Mgb3IgYm91bmRhcnkgdmlvbGF0aW9ucywgYnV0IGFsaWdubWVudCBpdHNlbGYgZG9lc24mIzM5O3QgbWVhbiB0aGUgbWVtb3J5IGlzIHVuaW5pdGlhbGl6ZWQuIFdlIG5lZWQgdG8gYmUgY2FyZWZ1bC4KCkxldCYjMzk7cyBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlLCBzdGFydGluZyB3aXRoIGB0cmFuc2xhdGlvbi10YWJsZS5jYC4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIGNoYW5nZXMgaW4gdGhlIGBiYXRhZHZfdHRfbG9jYWxfZXZlbnRgIGZ1bmN0aW9uLgoKYGBgYwoJdHRfY2hhbmdlX25vZGUgPSBrbWVtX2NhY2hlX2FsbG9jKGJhdGFkdl90dF9jaGFuZ2VfY2FjaGUsIEdGUF9BVE9NSUMpOwoJaWYgKCF0dF9jaGFuZ2Vfbm9kZSkKCQlyZXR1cm47CgoJbWVtc2V0KHR0X2NoYW5nZV9ub2RlLSZndDtjaGFuZ2UucmVzZXJ2ZWQsIDAsCgkgICAgICAgc2l6ZW9mKHR0X2NoYW5nZV9ub2RlLSZndDtjaGFuZ2UucmVzZXJ2ZWQpKTsKCWV0aGVyX2FkZHJfY29weSh0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLmFkZHIsIGNvbW1vbi0mZ3Q7YWRkcik7Cgl0dF9jaGFuZ2Vfbm9kZS0mZ3Q7Y2hhbmdlLnZpZCA9IGh0b25zKGNvbW1vbi0mZ3Q7dmlkKTsKCglmbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoY29tbW9uKSB8IGV2ZW50X2ZsYWdzOwoKCXR0X2NoYW5nZV9ub2RlLSZndDtjaGFuZ2UuZmxhZ3MgPSBmbGFnczsKCWRlbF9vcF9yZXF1ZXN0ZWQgPSBmbGFncyAmYW1wOyBCQVRBRFZfVFRfQ0xJRU5UX0RFTDsKYGBgCgpMb29raW5nIGF0IHRoaXMsIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgdHRfY2hhbmdlX25vZGUtJmd0O2NoYW5nZWAsIEkgc2VlIGEgZmV3IGtleSBpbml0aWFsaXphdGlvbnMuIFRoZSBgZmxhZ3NgIGZpZWxkIGlzIGFzc2lnbmVkIGEgdmFsdWUuIFRoZSBgcmVzZXJ2ZWRgIGZpZWxkIGlzIHNwZWNpZmljYWxseSB6ZXJvZWQgb3V0IHdpdGggYG1lbXNldGAuIFRoZSBgYWRkcmAgZmllbGQgaXMgY29waWVkIHVzaW5nIGBldGhlcl9hZGRyX2NvcHlgLCB3aGljaCBpcyBnb29kIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQgdG8gaGFuZGxlIHRoZSBhbGlnbm1lbnQgY29ycmVjdGx5LiBUaGUgYHZpZGAgZmllbGQgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgaHRvbnNgLiBKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgSSYjMzk7bGwgZG91YmxlLWNoZWNrIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgc3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZWAgaXRzZWxmIHRvIG1ha2UgY2VydGFpbiB0aGF0IGFsbCBtZW1iZXJzIHdpdGhpbiB0aGUgZW1iZWRkZWQgYGNoYW5nZWAgc3RydWN0IGFyZSwgaW4gZmFjdCwgZ2V0dGluZyBhcHByb3ByaWF0ZWx5IGluaXRpYWxpemVkLiBBbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9iYXRtYW4tYWR2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTQ2OD1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZXZlbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQ3Mi1cdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICpjb21tb24gPSBcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb247XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ3MzpcdHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKnR0X2NoYW5nZV9ub2RlO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0NzQ6XHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICplbnRyeTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDc1Olx0c3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSAqc2FmZTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDc2LVx0Ym9vbCBkZWxfb3BfcmVxdWVzdGVkO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTA5Nj1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfdHZsdl9jb250YWluZXJfdXBkYXRlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMDk4LVx0c3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSAqdHRfY2hhbmdlO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMDk5Olx0c3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSAqZW50cnk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTExMDAtXHRzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfZGF0YSAqdHRfZGF0YTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTEwMTpcdHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKnNhZmU7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTExMDItXHRpbnQgdHRfZGlmZl9lbnRyaWVzX2NvdW50ID0gMDtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTE1OTE9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2NoYW5nZXNfbGlzdF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE1OTIte1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNTkzOlx0c3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSAqZW50cnk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjE1OTQ6XHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICpzYWZlO1xubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xNTk1LVxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9NDYwMD1pbnQgX19pbml0IGJhdGFkdl90dF9jYWNoZV9pbml0KHZvaWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjAyLVx0c2l6ZV90IHR0X29yaWdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ2MDM6XHRzaXplX3QgdHRfY2hhbmdlX3NpemUgPSBzaXplb2Yoc3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSk7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQ2MDQtXHRzaXplX3QgdHRfcm9hbV9zaXplID0gc2l6ZW9mKHN0cnVjdCBiYXRhZHZfdHRfcm9hbV9ub2RlKTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTE5MTM9c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkge1xuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTkzNi0vKipcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTkzNzogKiBzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlIC0gc3RydWN0dXJlIGZvciB0dCBjaGFuZ2VzIG9jY3VycmVkXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTE5MzgtICovXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjE5Mzk6c3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSB7XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTE5NDAtXHQvKiogQGxpc3Q6IGxpc3Qgbm9kZSBmb3IgXHUwMDI2YmF0YWR2X3ByaXZfdHQuY2hhbmdlc19saXN0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0OTMxCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGB0eXBlcy5oYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBzb21ldGhpbmcgc3BlY2lmaWMsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgdHlwZXMuaGAuIEkmIzM5O20gdGhpbmtpbmcsIGxpa2VseSB0aGUgaXNzdWUgSSYjMzk7bSBjaGFzaW5nIGlzIHdpdGhpbiB0aGUgZGVmaW5pdGlvbnMgb3IgZGVjbGFyYXRpb25zIHJlbGF0ZWQgdG8gdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgbGluZXMgMTkzNSB0aHJvdWdoIDE5NTAuIFRoYXQgcmFuZ2UgdXN1YWxseSBjb3ZlcnMgYSBwYXJ0aWN1bGFyIGdyb3VwaW5nIG9yIHJlbGF0ZWQgZGVmaW5pdGlvbnMsIGFuZCBpcyBsaWtlbHkgd2hlcmUgSSYjMzk7bGwgZmluZCB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IuIFRoaXMgc2hvdWxkIHByb3ZpZGUgc29tZSBzb2xpZCBsZWFkcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2JhdG1hbi1hZHYvdHlwZXMuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkzNTpcdFxuMTkzNjpcdC8qKlxuMTkzNzpcdCAqIHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgLSBzdHJ1Y3R1cmUgZm9yIHR0IGNoYW5nZXMgb2NjdXJyZWRcbjE5Mzg6XHQgKi9cbjE5Mzk6XHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlIHtcbjE5NDA6XHRcdC8qKiBAbGlzdDogbGlzdCBub2RlIGZvciBcdTAwMjZiYXRhZHZfcHJpdl90dC5jaGFuZ2VzX2xpc3QgKi9cbjE5NDE6XHRcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbjE5NDI6XHRcbjE5NDM6XHRcdC8qKiBAY2hhbmdlOiBob2xkcyB0aGUgYWN0dWFsIHRyYW5zbGF0aW9uIHRhYmxlIGRpZmYgZGF0YSAqL1xuMTk0NDpcdFx0c3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSBjaGFuZ2U7XG4xOTQ1Olx0fTtcbjE5NDY6XHRcbjE5NDc6XHQvKipcbjE5NDg6XHQgKiBzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlIC0gZGF0YSB0byBrZWVwIHRyYWNrIG9mIHRoZSB0dCByZXF1ZXN0cyBpbiBmbGlnaHRcbjE5NDk6XHQgKi9cbjE5NTA6XHRzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlIHtcbjE5NTE6XHRcdC8qKlxuMTk1MjpcdFx0ICogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hdG9yIHRoaXMgcmVxdWVzdCB3YXMgc2VudCB0b1xuMTk1MzpcdFx0ICovXG4xOTU0Olx0XHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NDI0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIGBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlYDoKCioqRGl2aW5nIGludG8gdGhlIGBiYXRhZHZfdHZsdl90dF9jaGFuZ2VgIFN0cnVjdHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2VgLiBJbW1lZGlhdGVseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdHMgcm9sZSB3aXRoaW4gdGhlIGJhdGFkdiBmcmFtZXdvcmsuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWlubHkgcmVsYXRlZCB0byBtYW5hZ2luZyBhbmQgc2lnbmFsaW5nIGNoYW5nZXMgd2l0aGluIHRoZSBUdW5uZWxpbmcgVkxBTi1hd2FyZSBMaW5rIFN0YXRlIFRhYmxlIFZlY3RvciAoVFZMVikgbWVjaGFuaXNtLCBnaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24uIE15IGltbWVkaWF0ZSBxdWVzdGlvbnMgYXJlOgoKKiAgIFdoYXQgc3BlY2lmaWMgcGFyYW1ldGVycyBkb2VzIGl0IGVuY29tcGFzcz8KKiAgIFdoYXQgdHJpZ2dlcnMgdGhlIGNyZWF0aW9uIG9yIG1vZGlmaWNhdGlvbiBvZiBhbiBpbnN0YW5jZSBvZiB0aGlzIHN0cnVjdD8gSXMgaXQgYSBjaGFuZ2UgaW4gbmV0d29yayB0b3BvbG9neSwgYW4gdXBkYXRlIGluIFZMQU4gY29uZmlndXJhdGlvbiwgb3IgcGVyaGFwcyBhIHRpbWVyLWJhc2VkIGNoZWNrPwoqICAgSG93IGlzIHRoaXMgc3RydWN0dXJlIHVzZWQgaW4gcmVsYXRpb24gdG8gb3RoZXIgYmF0YWR2IGRhdGEgc3RydWN0dXJlcywgc3VjaCBhcyB0aGUgVFZMViB0YWJsZSBpdHNlbGYsIGFuZCB3aGljaCBmdW5jdGlvbnMgbGV2ZXJhZ2UgaXQ/CiogICBJcyB0aGlzIHN0cnVjdHVyZSBzcGVjaWZpYyB0byBhIGNlcnRhaW4gYmF0YWR2IHZlcnNpb24gb3IgaXMgaXQgbW9yZSBnZW5lcmljPwoqICAgRG9lcyBpdCByZWxhdGUgdG8gc2VjdXJpdHkgYXNwZWN0cyBvZiB0aGUgYmF0YWR2IGZyYW1ld29yaz8KCkkgZXhwZWN0IHRvIHNlZSBtZW1iZXJzIHRoYXQgZGVzY3JpYmUgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlIChlLmcuLCBhZGQsIGRlbGV0ZSwgbW9kaWZ5KSwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbGV2YW50IFRWTFYgZW50cnkgb3IgZW50cmllcywgdGltZXN0YW1wcywgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCB0aGF0IGFsbG93cyB0aGUgZnJhbWV3b3JrIHRvIGhhbmRsZSB0aGUgdXBkYXRlIGdyYWNlZnVsbHksIHBvc3NpYmx5IGluY2x1ZGluZyBmbGFncyB0byBoYW5kbGUgcmFjZXMvY29uY3VycmVuY3kuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgbGlua2VkIGxpc3Qgb3Igc2ltaWxhciBtZWNoYW5pc20gaXMgaW52b2x2ZWQgZm9yIHF1ZXVpbmcgb3IgcHJvY2Vzc2luZyB0aGVzZSBjaGFuZ2UgZXZlbnRzLiBUaGUgZGV0YWlscyBoZXJlIGFyZSBnb2luZyB0byBiZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgbGF0ZW5jeSBhbmQgcm9idXN0bmVzcyBvZiBiYXRhZHYmIzM5O3MgaGFuZGxpbmcgb2YgVFZMViB1cGRhdGVzLiBNeSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgc3RydWN0dXJlJiMzOTtzIGRhdGEgbWVtYmVycyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHZhcmlvdXMgYmF0YWR2IGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmF0YWR2IFRWTFYgc3ViLW1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYmF0YWR2X3BhY2tldC5oPTYyMz1zdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfZGF0YSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JhdGFkdl9wYWNrZXQuaC02MzAtLyoqXG5pbmNsdWRlL3VhcGkvbGludXgvYmF0YWR2X3BhY2tldC5oOjYzMTogKiBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlIC0gdHJhbnNsYXRpb24gdGFibGUgZGlmZiBkYXRhXG5pbmNsdWRlL3VhcGkvbGludXgvYmF0YWR2X3BhY2tldC5oLTYzMi0gKiBAZmxhZ3M6IHN0YXR1cyBpbmRpY2F0b3JzIGNvbmNlcm5pbmcgdGhlIG5vbi1tZXNoIGNsaWVudCAoc2VlXG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2JhdGFkdl9wYWNrZXQuaC02MzctICovXG5pbmNsdWRlL3VhcGkvbGludXgvYmF0YWR2X3BhY2tldC5oOjYzODpzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlIHtcbmluY2x1ZGUvdWFwaS9saW51eC9iYXRhZHZfcGFja2V0LmgtNjM5LVx0X191OCAgIGZsYWdzO1xuLS1cbm5ldC9iYXRtYW4tYWR2L21haW4uYz01NTQ9c3RhdGljIHZvaWQgYmF0YWR2X3JlY3ZfaGFuZGxlcl9pbml0KHZvaWQpXG4tLVxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTU3OC1cdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGJhdGFkdl90dmx2X3R0X3ZsYW5fZGF0YSkgIT0gOCk7XG5uZXQvYmF0bWFuLWFkdi9tYWluLmM6NTc5Olx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlKSAhPSAxMik7XG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtNTgwLVx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R2bHZfcm9hbV9hZHYpICE9IDgpO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9NTQ1PXN0YXRpYyBpbnQgYmF0YWR2X3R0X2xlbihpbnQgY2hhbmdlc19udW0pXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU0Ni17XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjU0NzpcdHJldHVybiBjaGFuZ2VzX251bSAqIHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlKTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNTQ4LX1cbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTkwOD1iYXRhZHZfdHRfcHJlcGFyZV90dmx2X2dsb2JhbF9kYXRhKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGUsXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTkwOS1cdFx0XHRcdCAgIHN0cnVjdCBiYXRhZHZfdHZsdl90dF9kYXRhICoqdHRfZGF0YSxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6OTEwOlx0XHRcdFx0ICAgc3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSAqKnR0X2NoYW5nZSxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtOTExLVx0XHRcdFx0ICAgczMyICp0dF9sZW4pXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy05ODEtXHR0dF9jaGFuZ2VfcHRyID0gKHU4ICopKnR0X2RhdGEgJiM0MzsgY2hhbmdlX29mZnNldDtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6OTgyOlx0KnR0X2NoYW5nZSA9IChzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICopdHRfY2hhbmdlX3B0cjtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtOTgzLVxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTAwOT1iYXRhZHZfdHRfcHJlcGFyZV90dmx2X2xvY2FsX2RhdGEoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTAxMC1cdFx0XHRcdCAgc3RydWN0IGJhdGFkdl90dmx2X3R0X2RhdGEgKip0dF9kYXRhLFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMDExOlx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICoqdHRfY2hhbmdlLFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMDEyLVx0XHRcdFx0ICBzMzIgKnR0X2xlbilcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEwODItXHR0dF9jaGFuZ2VfcHRyID0gKHU4ICopKnR0X2RhdGEgJiM0MzsgY2hhbmdlX29mZnNldDtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTA4MzpcdCp0dF9jaGFuZ2UgPSAoc3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSAqKXR0X2NoYW5nZV9wdHI7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEwODQtXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0xMDk2PXN0YXRpYyB2b2lkIGJhdGFkdl90dF90dmx2X2NvbnRhaW5lcl91cGRhdGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTA5Ny17XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEwOTg6XHRzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICp0dF9jaGFuZ2U7XG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEwOTktXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICplbnRyeTtcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTExNDMtXHRcdFx0ICAgICAgIFx1MDAyNmVudHJ5LVx1MDAzZWNoYW5nZSxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTE0NDpcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UpKTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTE0NS1cdFx0XHR0dF9kaWZmX2VudHJpZXNfY291bnQmIzQzOyYjNDM7O1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzA1MD1zdGF0aWMgdTE2IGJhdGFkdl90dF90dmx2X2dlbmVyYXRlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zMDU4LVx0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzA1OTpcdHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKnR0X2NoYW5nZTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzA2MC1cdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzI5Nz1zdGF0aWMgYm9vbCBiYXRhZHZfc2VuZF9vdGhlcl90dF9yZXNwb25zZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzMwMy1cdHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpyZXFfZHN0X29yaWdfbm9kZTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzMwNDpcdHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKnR0X2NoYW5nZTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzMwNS1cdGJvb2wgcmV0ID0gZmFsc2U7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNDI4PXN0YXRpYyBib29sIGJhdGFkdl9zZW5kX215X3R0X3Jlc3BvbnNlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNDMzLVx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzQzNDpcdHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKnR0X2NoYW5nZTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzQzNS1cdHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGU7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNTY5PXN0YXRpYyB2b2lkIF9iYXRhZHZfdHRfdXBkYXRlX2NoYW5nZXMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzU3MC1cdFx0XHRcdCAgICAgIHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGUsXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM1NzE6XHRcdFx0XHQgICAgICBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICp0dF9jaGFuZ2UsXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM1NzItXHRcdFx0XHQgICAgICB1MTYgdHRfbnVtX2NoYW5nZXMsIHU4IHR0dm4pXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNjE0PXN0YXRpYyB2b2lkIGJhdGFkdl90dF9maWxsX2d0YWJsZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozNjE1Olx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICp0dF9jaGFuZ2UsXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM2MTYtXHRcdFx0XHQgIHU4IHR0dm4sIHU4ICpyZXNwX3NyYyxcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTM2NTM9c3RhdGljIHZvaWQgYmF0YWR2X3R0X3VwZGF0ZV9jaGFuZ2VzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNjU1LVx0XHRcdFx0ICAgICB1MTYgdHRfbnVtX2NoYW5nZXMsIHU4IHR0dm4sXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM2NTY6XHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKnR0X2NoYW5nZSlcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzY1Ny17XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNzA0PXN0YXRpYyB2b2lkIGJhdGFkdl9oYW5kbGVfdHRfcmVzcG9uc2Uoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM3MDgtXHRzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzcwOTpcdHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKnR0X2NoYW5nZTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzcxMC1cdHN0cnVjdCBiYXRhZHZfdHRfcmVxX25vZGUgKm5vZGU7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzI2LVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzozNzI3Olx0dHRfY2hhbmdlID0gKHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKil0dmx2X3B0cjtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzcyOC1cdGlmICh0dF9kYXRhLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfRlVMTF9UQUJMRSkge1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9NDE1NT1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfdXBkYXRlX29yaWcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbi0tXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQxNTctXHRcdFx0XHQgIGNvbnN0IHZvaWQgKnR0X2J1ZmYsIHUxNiB0dF9udW1fdmxhbixcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDE1ODpcdFx0XHRcdCAgc3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSAqdHRfY2hhbmdlLFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00MTU5LVx0XHRcdFx0ICB1MTYgdHRfbnVtX2NoYW5nZXMsIHU4IHR0dm4pXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz00MzY3PXN0YXRpYyB2b2lkIGJhdGFkdl90dF90dmx2X29nbV9oYW5kbGVyX3YxKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tLVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00MzcxLXtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDM3MjpcdHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKnR0X2NoYW5nZTtcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDM3My1cdHN0cnVjdCBiYXRhZHZfdHZsdl90dF9kYXRhICp0dF9kYXRhO1xuLS1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDM4Ny1cbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDM4ODpcdHR0X2NoYW5nZSA9IChzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICopKCh2b2lkICopdHRfZGF0YVxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00Mzg5LVx0XHRcdFx0XHRcdCAgICAgJiM0MzsgdHRfZGF0YV9zeik7XG4tLVxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaD0xOTM5PXN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUge1xuLS1cbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTk0My1cdC8qKiBAY2hhbmdlOiBob2xkcyB0aGUgYWN0dWFsIHRyYW5zbGF0aW9uIHRhYmxlIGRpZmYgZGF0YSAqL1xubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxOTQ0Olx0c3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSBjaGFuZ2U7XG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTE5NDUtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg1OTkKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBgYmF0YWR2X3R2bHZfdHRfY2hhbmdlYCBTdHJ1Y3R1cmUqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQmIzM5O3MgZ2V0IGEgaGFuZGxlIG9uIHRoZSBgc3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZWAuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoaXMgc3BlY2lmaWMgc3RydWN0dXJlIGVuY2Fwc3VsYXRlcyB3aXRoaW4gdGhlIEJhdG1hbmQgY29kZWJhc2UuIEl0JiMzOTtzIGJlZW4gYSB3aGlsZSBzaW5jZSBJIGxhc3QgbG9va2VkIGRlZXBseSBpbnRvIHRoZSBpbm5lciB3b3JraW5ncyBvZiB0aGUgVFQgKFRvcG9sb2d5IFRhYmxlKSBtYW5hZ2VtZW50LCBzbyB0aGlzIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzdHJ1Y3R1cmUgdG8gYW5hbHl6ZSBzb21lIHJlbGF0ZWQgY2hhbmdlIGV2ZW50cywgc28gSSYjMzk7bGwgZGlnIGludG8gaXRzIGRlZmluaXRpb24sIHNlZSB0aGUgc3BlY2lmaWMgZmllbGRzLCBhbmQgd2hhdCB0aG9zZSBmaWVsZHMgc2lnbmlmeS4gSXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIG1lY2hhbmljcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMzEgMjA6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL3VhcGkvbGludXgvYmF0YWR2X3BhY2tldC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2MzA6XHQvKipcbiA2MzE6XHQgKiBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlIC0gdHJhbnNsYXRpb24gdGFibGUgZGlmZiBkYXRhXG4gNjMyOlx0ICogQGZsYWdzOiBzdGF0dXMgaW5kaWNhdG9ycyBjb25jZXJuaW5nIHRoZSBub24tbWVzaCBjbGllbnQgKHNlZVxuIDYzMzpcdCAqICBiYXRhZHZfdHRfY2xpZW50X2ZsYWdzKVxuIDYzNDpcdCAqIEByZXNlcnZlZDogcmVzZXJ2ZWQgZmllbGQgLSB1c2VmdWwgZm9yIGFsaWdubWVudCBwdXJwb3NlcyBvbmx5XG4gNjM1Olx0ICogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIG5vbi1tZXNoIGNsaWVudCB0aGF0IHRyaWdnZXJlZCB0aGlzIHR0IGNoYW5nZVxuIDYzNjpcdCAqIEB2aWQ6IFZMQU4gaWRlbnRpZmllclxuIDYzNzpcdCAqL1xuIDYzODpcdHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2Uge1xuIDYzOTpcdFx0X191OCAgIGZsYWdzO1xuIDY0MDpcdFx0X191OCAgIHJlc2VydmVkWzNdO1xuIDY0MTpcdFx0X191OCAgIGFkZHJbRVRIX0FMRU5dO1xuIDY0MjpcdFx0X19iZTE2IHZpZDtcbiA2NDM6XHR9O1xuIDY0NDpcdFxuIDY0NTpcdC8qKlxuIDY0NjpcdCAqIHN0cnVjdCBiYXRhZHZfdHZsdl9yb2FtX2FkdiAtIHJvYW1pbmcgYWR2ZXJ0aXNlbWVudFxuIDY0NzpcdCAqIEBjbGllbnQ6IG1hYyBhZGRyZXNzIG9mIHJvYW1pbmcgY2xpZW50XG4gNjQ4Olx0ICogQHZpZDogVkxBTiBpZGVudGlmaWVyXG4gNjQ5Olx0ICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzMxIDIwOjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MTE2CgkJCQkJCQlvdXRwdXQ6IDM3MQoJCQkJCQkJdGhvdWdodHM6IDExNzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQSBUaG9yb3VnaCBSZXZpZXcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgY29uZmlybWVkIHRoYXQgYWxsIDEyIGJ5dGVzIG9mIHRoZSBgYmF0YWR2X3R2bHZfdHRfY2hhbmdlYCBzdHJ1Y3QgYXJlIGFjY291bnRlZCBmb3IsIHdpdGggYWxsIGZpZWxkcyBpbml0aWFsaXplZCBvciBjb3BpZWQgYXBwcm9wcmlhdGVseSDigJMgZmxhZ3MsIHJlc2VydmVkIGJ5dGVzIChtZW1zZXQgdG8gMCksIHRoZSBNQUMgYWRkcmVzcyAodXNpbmcgYGV0aGVyX2FkZHJfY29weWApLCBhbmQgdGhlIGB2aWRgICh1c2luZyBgaHRvbnNgKS4gSSB0aGVuIGNoZWNrZWQgdGhlIG5ldGxpbmsgZHVtcCBmdW5jdGlvbnMgaW4gYHRyYW5zbGF0aW9uLXRhYmxlLmNgLiBCb3RoIGBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeWAgYW5kIGBiYXRhZHZfdHRfZ2xvYmFsX2R1bXBfc3ViZW50cnlgIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBhbGwgbmV0bGluayBhdHRyaWJ1dGVzIHdpdGggc2NhbGFyIHZhbHVlcyBvciBpbml0aWFsaXplZCBNQUMgYWRkcmVzcyBieXRlcy4KCk5leHQsIEkgbG9va2VkIGF0IGBiYXRhZHZfY29tcGFyZV90dF9lbnRyeWAgYW5kIGBiYXRhZHZfaGFzaF9yZW1vdmVgLiBgYmF0YWR2X2hhc2hfcmVtb3ZlYCB1c2VzIGBiYXRhZHZfY29tcGFyZV90dF9lbnRyeWAgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGVudHJ5IGlzIHJlbW92ZWQgYmFzZWQgb24gcG9pbnRlciBpZGVudGl0eSwgZWZmZWN0aXZlbHkgYWRkcmVzc2luZyBhIGxvY2tpbmcgYW5kIGxpZmV0aW1lIGNvbmNlcm4uCgpOb3csIGxldCYjMzk7cyBjb21wYXJlIGFsbCB0aGlzIGFnYWluc3QgdGhlIEtNU0FOIGNyaXRlcmlhLiBNeSBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIHBhdGNoIHByaW1hcmlseSBtb2RpZmllcyBvciBpbnRyb2R1Y2VzOgoxLiBBZGRpbmcgYF9fYWxpZ25lZCgyKWAgYXR0cmlidXRlcyB0byBNQUMgYWRkcmVzcyBhcnJheXMgYW5kIHN0cnVjdCBmaWVsZHMgZm9yIHByb3BlciBhbGlnbm1lbnQuCjIuIEFkZGluZyBhbmQgdXNpbmcgcGVyLWVudHJ5IHNwaW5sb2NrIHRvIHByb3RlY3QgYGNvbW1vbi0mZ3Q7ZmxhZ3NgIGFuZCBgcm9hbV9hdGAuCjMuIENvcnJlY3RpbmcgZnVuY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBsb2dpY2FsIGNvbXBhcmlzb25zLgo0LiBDb3JyZWN0aW5nIGEgZGVidWcgcHJpbnQgc3RhdGVtZW50Lgo1LiBJbXByb3ZpbmcgaGFzaCByZW1vdmFsIG1hdGNoaW5nLgoKTm9uZSBvZiB0aGVzZSBjaGFuZ2VzIHRvdWNoIG9uIHRoZSBLTVNBTiBjb25jZXJucy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGJlaW5nIHNlbnQgdG8gdXNlcnNwYWNlLCBubyBjb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMsIG5vIG5ldyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZmllbGRzLCBhbmQgbm8gYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZGluZyB1bmluaXRpYWxpemVkIGJ5dGVzLgoKSSBjYXJlZnVsbHkgdmVyaWZpZWQgdGhhdCB0aGUgbmV0bGluayBkdW1wcyBhcmUgc2FmZSwgc2VyaWFsaXppbmcgb25seSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgYW5kIE1BQyBhZGRyZXNzZXMuIFRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGFscmVhZHkgaW4gcGxhY2UgdG8gaGFuZGxlIGNvbmN1cnJlbmN5LCBtZW1vcnkgc2FmZXR5LCBhbmQgbGlmZXRpbWUgaXNzdWVzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgc2hvdWxkIGRlZmluaXRlbHkgYmUgc2V0IHRvIGBmYWxzZWAuIEkgYW0gbm93IHByZXBhcmluZyB0aGUgZmluYWwgcmVzcG9uc2UgYW5kIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8zMSAyMDozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgb2Ygc2V2ZXJhbCBjbGVhbnVwcyBhbmQgYnVnZml4ZXMgaW4gYmF0bWFuLWFkdjpcbjEuIEFsaWdubWVudCBhbm5vdGF0aW9uczogQWRkcyBgX19hbGlnbmVkKDIpYCB0byB2YXJpb3VzIE1BQyBhZGRyZXNzIGJ5dGUgYXJyYXlzIChgdTggYWRkcltFVEhfQUxFTl1gLCBgdTggb3JpZ1tFVEhfQUxFTl1gLCBldGMuKSB0byBlbnN1cmUgMi1ieXRlIGFsaWdubWVudCBmb3Igb3BlcmF0aW9ucyBsaWtlIGBldGhlcl9hZGRyX2NvcHkoKWAuXG4yLiBDb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpbXByb3ZlbWVudHM6IEludHJvZHVjZXMgYGZsYWdzX2xvY2tgIHNwaW5sb2NrIHRvIGBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeWAgdG8gcHJvdGVjdCBjb25jdXJyZW50IHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzIChgY29tbW9uLVx1MDAzZWZsYWdzYCkgYW5kIHJvYW1pbmcgdGltZXN0YW1wcyAoYHJvYW1fYXRgKS5cbjMuIExvZ2ljIFx1MDAyNiBuYW1pbmcgZml4ZXM6IEZpeGVzIG5laWdoYm9yIGNvbXBhcmlzb24gbG9naWMgaW4gYGJhdGFkdl92X25laWdoX2lzX3NvYigpYCBhbmQgcmVuYW1lcyBwYXJhbWV0ZXJzIGZvciBjbGFyaXR5IGluIGBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpYC5cbjQuIERlYnVnIG91dHB1dCBmaXg6IENvcnJlY3RzIGZpZWxkIGFjY2VzcyBpbiBkZWJ1ZyBwcmludGluZyBmb3IgZW5jYXBzdWxhdGVkIERBVCBwYWNrZXRzLlxuNS4gSGFzaCB0YWJsZSBsb29rdXAgYWNjdXJhY3k6IEludHJvZHVjZXMgYGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KClgIHRvIG1hdGNoIGV4YWN0IHBvaW50ZXIgaWRlbnRpdGllcyBkdXJpbmcgYGJhdGFkdl9oYXNoX3JlbW92ZSgpYC5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIE5ldGxpbmsgZHVtcCBoYW5kbGVycyAoYGJhdGFkdl9kYXRfY2FjaGVfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfZ2xvYmFsX2R1bXBfc3ViZW50cnlgKSBvbmx5IHNlcmlhbGl6ZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXJzIGFuZCBNQUMgYWRkcmVzc2VzLiBDb25jdXJyZW5jeSwgbGlmZXRpbWUsIGFuZCBib3VuZGFyeSBjaGVja3MgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgb2Ygc2V2ZXJhbCBjbGVhbnVwcyBhbmQgYnVnZml4ZXMgaW4gYmF0bWFuLWFkdjpcbjEuIEFsaWdubWVudCBhbm5vdGF0aW9uczogQWRkcyBgX19hbGlnbmVkKDIpYCB0byB2YXJpb3VzIE1BQyBhZGRyZXNzIGJ5dGUgYXJyYXlzIChgdTggYWRkcltFVEhfQUxFTl1gLCBgdTggb3JpZ1tFVEhfQUxFTl1gLCBldGMuKSB0byBlbnN1cmUgMi1ieXRlIGFsaWdubWVudCBmb3Igb3BlcmF0aW9ucyBsaWtlIGBldGhlcl9hZGRyX2NvcHkoKWAuXG4yLiBDb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpbXByb3ZlbWVudHM6IEludHJvZHVjZXMgYGZsYWdzX2xvY2tgIHNwaW5sb2NrIHRvIGBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeWAgdG8gcHJvdGVjdCBjb25jdXJyZW50IHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzIChgY29tbW9uLVx1MDAzZWZsYWdzYCkgYW5kIHJvYW1pbmcgdGltZXN0YW1wcyAoYHJvYW1fYXRgKS5cbjMuIExvZ2ljIFx1MDAyNiBuYW1pbmcgZml4ZXM6IEZpeGVzIG5laWdoYm9yIGNvbXBhcmlzb24gbG9naWMgaW4gYGJhdGFkdl92X25laWdoX2lzX3NvYigpYCBhbmQgcmVuYW1lcyBwYXJhbWV0ZXJzIGZvciBjbGFyaXR5IGluIGBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpYC5cbjQuIERlYnVnIG91dHB1dCBmaXg6IENvcnJlY3RzIGZpZWxkIGFjY2VzcyBpbiBkZWJ1ZyBwcmludGluZyBmb3IgZW5jYXBzdWxhdGVkIERBVCBwYWNrZXRzLlxuNS4gSGFzaCB0YWJsZSBsb29rdXAgYWNjdXJhY3k6IEludHJvZHVjZXMgYGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KClgIHRvIG1hdGNoIGV4YWN0IHBvaW50ZXIgaWRlbnRpdGllcyBkdXJpbmcgYGJhdGFkdl9oYXNoX3JlbW92ZSgpYC5cblxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIE5ldGxpbmsgZHVtcCBoYW5kbGVycyAoYGJhdGFkdl9kYXRfY2FjaGVfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfZ2xvYmFsX2R1bXBfc3ViZW50cnlgKSBvbmx5IHNlcmlhbGl6ZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXJzIGFuZCBNQUMgYWRkcmVzc2VzLiBDb25jdXJyZW5jeSwgbGlmZXRpbWUsIGFuZCBib3VuZGFyeSBjaGVja3MgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjMxOjUzLjk4ODYzMTIxNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MzkwNTM5MjE5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCQVRNQU5fQURWXCIsXG4gICAgXCJCQVRNQU5fQURWX0JBVE1BTl9WXCIsXG4gICAgXCJCQVRNQU5fQURWX0JMQVwiLFxuICAgIFwiQkFUTUFOX0FEVl9EQVRcIixcbiAgICBcIkJBVE1BTl9BRFZfTUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJiYXRhZHZfdHRfbG9jYWxfYWRkXCIsXG4gICAgXCJiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlXCIsXG4gICAgXCJiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2hcIixcbiAgICBcImJhdGFkdl9pc19teV9jbGllbnRcIixcbiAgICBcImJhdGFkdl90dF9nbG9iYWxfaXNfaXNvbGF0ZWRcIixcbiAgICBcImJhdGFkdl90dF9nbG9iYWxfY2xpZW50X2lzX3JvYW1pbmdcIixcbiAgICBcImJhdGFkdl90dF9sb2NhbF9jbGllbnRfaXNfcm9hbWluZ1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHNldmVyYWwgY2xlYW51cHMgYW5kIGJ1Z2ZpeGVzIGluIGJhdG1hbi1hZHY6XFxuMS4gQWxpZ25tZW50IGFubm90YXRpb25zOiBBZGRzIGBfX2FsaWduZWQoMilgIHRvIHZhcmlvdXMgTUFDIGFkZHJlc3MgYnl0ZSBhcnJheXMgKGB1OCBhZGRyW0VUSF9BTEVOXWAsIGB1OCBvcmlnW0VUSF9BTEVOXWAsIGV0Yy4pIHRvIGVuc3VyZSAyLWJ5dGUgYWxpZ25tZW50IGZvciBvcGVyYXRpb25zIGxpa2UgYGV0aGVyX2FkZHJfY29weSgpYC5cXG4yLiBDb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpbXByb3ZlbWVudHM6IEludHJvZHVjZXMgYGZsYWdzX2xvY2tgIHNwaW5sb2NrIHRvIGBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeWAgdG8gcHJvdGVjdCBjb25jdXJyZW50IHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzIChgY29tbW9uLVxcdTAwM2VmbGFnc2ApIGFuZCByb2FtaW5nIHRpbWVzdGFtcHMgKGByb2FtX2F0YCkuXFxuMy4gTG9naWMgXFx1MDAyNiBuYW1pbmcgZml4ZXM6IEZpeGVzIG5laWdoYm9yIGNvbXBhcmlzb24gbG9naWMgaW4gYGJhdGFkdl92X25laWdoX2lzX3NvYigpYCBhbmQgcmVuYW1lcyBwYXJhbWV0ZXJzIGZvciBjbGFyaXR5IGluIGBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpYC5cXG40LiBEZWJ1ZyBvdXRwdXQgZml4OiBDb3JyZWN0cyBmaWVsZCBhY2Nlc3MgaW4gZGVidWcgcHJpbnRpbmcgZm9yIGVuY2Fwc3VsYXRlZCBEQVQgcGFja2V0cy5cXG41LiBIYXNoIHRhYmxlIGxvb2t1cCBhY2N1cmFjeTogSW50cm9kdWNlcyBgYmF0YWR2X2NvbXBhcmVfdHRfZW50cnkoKWAgdG8gbWF0Y2ggZXhhY3QgcG9pbnRlciBpZGVudGl0aWVzIGR1cmluZyBgYmF0YWR2X2hhc2hfcmVtb3ZlKClgLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBOZXRsaW5rIGR1bXAgaGFuZGxlcnMgKGBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnlgLCBgYmF0YWR2X3R0X2xvY2FsX2R1bXBfZW50cnlgLCBgYmF0YWR2X3R0X2dsb2JhbF9kdW1wX3N1YmVudHJ5YCkgb25seSBzZXJpYWxpemUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFycyBhbmQgTUFDIGFkZHJlc3Nlcy4gQ29uY3VycmVuY3ksIGxpZmV0aW1lLCBhbmQgYm91bmRhcnkgY2hlY2tzIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyBhbmQgYnVnIGZpeGVzIGluIHRoZSBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgbWVzaCBwcm90b2NvbCBzdWJzeXN0ZW0gKG5ldC9iYXRtYW4tYWR2LykuIEtleSBjaGFuZ2VzIGluY2x1ZGUgYWRkaW5nIHNwaW5sb2NrIHByb3RlY3Rpb24gKGZsYWdzX2xvY2spIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aGVuIHJlYWRpbmcgYW5kIG11dGF0aW5nIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzLCBmaXhpbmcgZXhhY3Qgb2JqZWN0IHJlbW92YWwgZnJvbSBoYXNoIGJ1Y2tldHMgKGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KSwgY29ycmVjdGluZyB0aGUgQi5BLlQuTS5BLk4uIFYgbmVpZ2hib3IgY29tcGFyaXNvbiBjYWxjdWxhdGlvbiBsb2dpYyBpbiBiYXRhZHZfdl9uZWlnaF9pc19zb2IoKSwgYW5kIGFkZGluZyAyLWJ5dGUgYWxpZ25tZW50IGF0dHJpYnV0ZXMgdG8gTUFDIGFkZHJlc3MgYnVmZmVycy4gVGhlc2UgY2hhbmdlcyBhbHRlciBjb3JlIGV4ZWN1dGlvbiBmbG93cyBhbmQgc3RhdGUgaGFuZGxpbmcgdGhhdCBhcmUgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzE6NTMuOTg4NjM1MjA1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTcxODc3NDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjQ3ZWEzZjlhNzY5MThhOTkyMzdjZTczMWQ3Y2Y2ZTg1Nzc1ZDAwN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEF1ZyAzMSAyMDozMTo1MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcXG5pbmRleCA1M2ZiZGJiZThmNGY3Li4zZmUwOWI0YzMwNDYzIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uY1xcbkBAIC0yNDI0LDI1ICsyNDI0LDI2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2l2X29nbV9uZWlnaF9jbXAoc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsXFxuIC8qKlxcbiAgKiBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpIC0gY2hlY2sgaWYgbmVpZ2gxIGlzIHNpbWlsYXJseSBnb29kIG9yIGJldHRlclxcbiAgKiAgdGhhbiBuZWlnaDIgZnJvbSB0aGUgbWV0cmljIHByb3NwZWN0aXZlXFxuLSAqIEBuZWlnaDE6IHRoZSBmaXJzdCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cXG4tICogQGlmX291dGdvaW5nMTogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgZmlyc3QgbmVpZ2hib3JcXG4tICogQG5laWdoMjogdGhlIHNlY29uZCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cXG4tICogQGlmX291dGdvaW5nMjogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgc2Vjb25kIG5laWdoYm9yXFxuKyAqIEBjYW5kaWRhdGU6IHRoZSBmaXJzdCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cXG4rICogQGlmX291dGdvaW5nX2NhbmQ6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEBjYW5kaWRhdGUgbmVpZ2hib3JcXG4rICogQHJlZmVyZW5jZTogdGhlIHNlY29uZCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cXG4rICogQGlmX291dGdvaW5nX3JlZjogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgQHJlZmVyZW5jZSBuZWlnaGJvclxcbiAgKlxcbi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIG1ldHJpYyB2aWEgbmVpZ2gxIGlzIGVxdWFsbHkgZ29vZCBvciBiZXR0ZXIgdGhhblxcbi0gKiB0aGUgbWV0cmljIHZpYSBuZWlnaDIsIGZhbHNlIG90aGVyd2lzZS5cXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBtZXRyaWMgdmlhIEBjYW5kaWRhdGUgaXMgZXF1YWxseSBnb29kIG9yIGJldHRlciB0aGFuXFxuKyAqIHRoZSBtZXRyaWMgdmlhIEByZWZlcmVuY2UsIGZhbHNlIG90aGVyd2lzZS5cXG4gICovXFxuIHN0YXRpYyBib29sXFxuLWJhdGFkdl9pdl9vZ21fbmVpZ2hfaXNfc29iKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gxLFxcbi1cXHRcXHRcXHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMSxcXG4tXFx0XFx0XFx0ICAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDIsXFxuLVxcdFxcdFxcdCAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcyKVxcbitiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYihzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKmNhbmRpZGF0ZSxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLFxcbitcXHRcXHRcXHQgICBzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKnJlZmVyZW5jZSxcXG4rXFx0XFx0XFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19yZWYpXFxuIHtcXG4gXFx0Ym9vbCByZXQ7XFxuIFxcdGludCBkaWZmO1xcbiBcXG4tXFx0cmV0ID0gYmF0YWR2X2l2X29nbV9uZWlnaF9kaWZmKG5laWdoMSwgaWZfb3V0Z29pbmcxLCBuZWlnaDIsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBpZl9vdXRnb2luZzIsIFxcdTAwMjZkaWZmKTtcXG4rXFx0cmV0ID0gYmF0YWR2X2l2X29nbV9uZWlnaF9kaWZmKGNhbmRpZGF0ZSwgaWZfb3V0Z29pbmdfY2FuZCxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHJlZmVyZW5jZSwgaWZfb3V0Z29pbmdfcmVmLFxcbitcXHRcXHRcXHRcXHQgICAgICAgXFx1MDAyNmRpZmYpO1xcbiBcXHRpZiAoIXJldClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X3YuYyBiL25ldC9iYXRtYW4tYWR2L2JhdF92LmNcXG5pbmRleCAwYzI3NDQ3Y2Y2ODg5Li41OTY4ODliMzUyMmQwIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92LmNcXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdi5jXFxuQEAgLTUxNCw0MCArNTE0LDQwIEBAIHN0YXRpYyBpbnQgYmF0YWR2X3ZfbmVpZ2hfY21wKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gxLFxcbiAvKipcXG4gICogYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKCkgLSBjaGVjayB3aGV0aGVyIHR3byBCLkEuVC5NLkEuTi4gViBuZWlnaGJvdXJzIGhhdmVcXG4gICogIGEgc2ltaWxhciBvciBiZXR0ZXIgdGhyb3VnaHB1dFxcbi0gKiBAbmVpZ2gxOiBmaXJzdCBuZWlnaGJvdXIgdG8gY29tcGFyZVxcbi0gKiBAaWZfb3V0Z29pbmcxOiBvdXRnb2luZyBpbnRlcmZhY2UgdG8gdXNlIGZvciBAbmVpZ2gxXFxuLSAqIEBuZWlnaDI6IHNlY29uZCBuZWlnaGJvdXIgdG8gY29tcGFyZVxcbi0gKiBAaWZfb3V0Z29pbmcyOiBvdXRnb2luZyBpbnRlcmZhY2UgdG8gdXNlIGZvciBAbmVpZ2gyXFxuKyAqIEBjYW5kaWRhdGU6IHRoZSBmaXJzdCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cXG4rICogQGlmX291dGdvaW5nX2NhbmQ6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEBjYW5kaWRhdGUgbmVpZ2hib3JcXG4rICogQHJlZmVyZW5jZTogdGhlIHNlY29uZCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cXG4rICogQGlmX291dGdvaW5nX3JlZjogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgQHJlZmVyZW5jZSBuZWlnaGJvclxcbiAgKlxcbi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIHRocm91Z2hwdXQgb2YgQG5laWdoMiBpcyBhdCBsZWFzdCAzLzQgb2YgdGhlXFxuLSAqICBAbmVpZ2gxIHRocm91Z2hwdXRcXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSB0aHJvdWdocHV0IG9mIEBjYW5kaWRhdGUgaXMgbW9yZSB0aGFuIDMvNCBvZiB0aGVcXG4rICogIEByZWZlcmVuY2UgdGhyb3VnaHB1dFxcbiAgKi9cXG4tc3RhdGljIGJvb2wgYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gxLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcxLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gyLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcyKVxcbitzdGF0aWMgYm9vbCBiYXRhZHZfdl9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKVxcbiB7XFxuLVxcdHN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm8xO1xcbi1cXHRzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyAqaWZpbmZvMjtcXG4rXFx0c3RydWN0IGJhdGFkdl9uZWlnaF9pZmluZm8gKmlmaW5mb19jYW5kO1xcbitcXHRzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyAqaWZpbmZvX3JlZjtcXG4gXFx0Ym9vbCByZXQgPSBmYWxzZTtcXG4gXFx0dTMyIHRocmVzaG9sZDtcXG4gXFxuLVxcdGlmaW5mbzEgPSBiYXRhZHZfbmVpZ2hfaWZpbmZvX2dldChuZWlnaDEsIGlmX291dGdvaW5nMSk7XFxuLVxcdGlmICghaWZpbmZvMSlcXG4rXFx0aWZpbmZvX2NhbmQgPSBiYXRhZHZfbmVpZ2hfaWZpbmZvX2dldChjYW5kaWRhdGUsIGlmX291dGdvaW5nX2NhbmQpO1xcbitcXHRpZiAoIWlmaW5mb19jYW5kKVxcbiBcXHRcXHRnb3RvIGVycl9pZmluZm8xO1xcbiBcXG4tXFx0aWZpbmZvMiA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KG5laWdoMiwgaWZfb3V0Z29pbmcyKTtcXG4tXFx0aWYgKCFpZmluZm8yKVxcbitcXHRpZmluZm9fcmVmID0gYmF0YWR2X25laWdoX2lmaW5mb19nZXQocmVmZXJlbmNlLCBpZl9vdXRnb2luZ19yZWYpO1xcbitcXHRpZiAoIWlmaW5mb19yZWYpXFxuIFxcdFxcdGdvdG8gZXJyX2lmaW5mbzI7XFxuIFxcbi1cXHR0aHJlc2hvbGQgPSBpZmluZm8xLVxcdTAwM2ViYXRfdi50aHJvdWdocHV0IC8gNDtcXG4tXFx0dGhyZXNob2xkID0gaWZpbmZvMS1cXHUwMDNlYmF0X3YudGhyb3VnaHB1dCAtIHRocmVzaG9sZDtcXG4rXFx0dGhyZXNob2xkID0gaWZpbmZvX3JlZi1cXHUwMDNlYmF0X3YudGhyb3VnaHB1dCAvIDQ7XFxuK1xcdHRocmVzaG9sZCA9IGlmaW5mb19yZWYtXFx1MDAzZWJhdF92LnRocm91Z2hwdXQgLSB0aHJlc2hvbGQ7XFxuIFxcbi1cXHRyZXQgPSBpZmluZm8yLVxcdTAwM2ViYXRfdi50aHJvdWdocHV0IFxcdTAwM2UgdGhyZXNob2xkO1xcbitcXHRyZXQgPSBpZmluZm9fY2FuZC1cXHUwMDNlYmF0X3YudGhyb3VnaHB1dCBcXHUwMDNlIHRocmVzaG9sZDtcXG4gXFxuLVxcdGJhdGFkdl9uZWlnaF9pZmluZm9fcHV0KGlmaW5mbzIpO1xcbitcXHRiYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm9fcmVmKTtcXG4gZXJyX2lmaW5mbzI6XFxuLVxcdGJhdGFkdl9uZWlnaF9pZmluZm9fcHV0KGlmaW5mbzEpO1xcbitcXHRiYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm9fY2FuZCk7XFxuIGVycl9pZmluZm8xOlxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jIGIvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcXG5pbmRleCBmNjM1ZGE0YjhjYTY1Li5hZDZhYjRhNTA2NThmIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcXG5AQCAtNjYzLDcgKzY2Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9yZXF1ZXN0KHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3ICpiYWNrYm9uZV9ndylcXG4gc3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2Fubm91bmNlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJhdGFkdl9ibGFfYmFja2JvbmVfZ3cgKmJhY2tib25lX2d3KVxcbiB7XFxuLVxcdHU4IG1hY1tFVEhfQUxFTl07XFxuK1xcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiBcXHRfX2JlMTYgY3JjO1xcbiBcXG4gXFx0bWVtY3B5KG1hYywgYmF0YWR2X2Fubm91bmNlX21hYywgNCk7XFxuQEAgLTE1ODIsNyArMTU4Miw5IEBAIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgYmF0YWR2X2JhY2tib25lX2hhc2hfbG9ja19jbGFzc19rZXk7XFxuICAqL1xcbiBpbnQgYmF0YWR2X2JsYV9pbml0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXFxuIHtcXG4tXFx0dTggY2xhaW1fZGVzdFtFVEhfQUxFTl0gPSB7MHhmZiwgMHg0MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH07XFxuK1xcdHN0YXRpYyBjb25zdCB1OCBjbGFpbV9kZXN0W0VUSF9BTEVOXSBfX2FsaWduZWQoMikgPSB7XFxuK1xcdFxcdDB4ZmYsIDB4NDMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDBcXG4rXFx0fTtcXG4gXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmO1xcbiBcXHR1bnNpZ25lZCBsb25nIGVudHJ5dGltZTtcXG4gXFx0dTE2IGNyYztcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuY1xcbmluZGV4IDAxMWNmZGM0N2ZhYjQuLmE0YmU1YjJhODdkN2EgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmNcXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuY1xcbkBAIC01NDgsNyArNTQ4LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2RiZ19hcnAoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19EQVQsIGJhdF9wcml2LCBcXFwiKiB0eXBlOiBVbmtub3duICgldSkhXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICB1bmljYXN0XzRhZGRyX3BhY2tldC1cXHUwMDNldS5wYWNrZXRfdHlwZSk7XFxuK1xcdFxcdFxcdFxcdCAgIHVuaWNhc3RfNGFkZHJfcGFja2V0LVxcdTAwM2VzdWJ0eXBlKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBCQVRBRFZfQkNBU1Q6XFxuQEAgLTk0MCw3ICs5NDAsNyBAQCBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBiYXRhZHZfZGF0X2VudHJ5ICpkYXRfZW50cnkpXFxuIHtcXG4tXFx0dTggbWFjW0VUSF9BTEVOXTtcXG4rXFx0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcdHU2NCB1NjRfbWFjO1xcbiBcXHRpbnQgbXNlY3M7XFxuIFxcdHZvaWQgKmhkcjtcXG5AQCAtMTIzNiwxMCArMTIzNiwxMCBAQCBib29sIGJhdGFkdl9kYXRfc25vb3Bfb3V0Z29pbmdfYXJwX3JlcXVlc3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4ge1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSA9IGJhdF9wcml2LVxcdTAwM2VtZXNoX2lmYWNlO1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X2RhdF9lbnRyeSAqZGF0X2VudHJ5ID0gTlVMTDtcXG4rXFx0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2JfbmV3O1xcbiBcXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XFxuIFxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuLVxcdHU4IG1hY1tFVEhfQUxFTl07XFxuIFxcdGludCBoZHJfc2l6ZSA9IDA7XFxuIFxcdF9fYmUzMiBpcF9kc3Q7XFxuIFxcdF9fYmUzMiBpcF9zcmM7XFxuQEAgLTEzNDQsMTAgKzEzNDQsMTAgQEAgYm9vbCBiYXRhZHZfZGF0X3Nub29wX2luY29taW5nX2FycF9yZXF1ZXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfc2l6ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X2RhdF9lbnRyeSAqZGF0X2VudHJ5ID0gTlVMTDtcXG4rXFx0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcdHN0cnVjdCBza19idWZmICpza2JfbmV3O1xcbiBcXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XFxuIFxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuLVxcdHU4IG1hY1tFVEhfQUxFTl07XFxuIFxcdF9fYmUzMiBpcF9zcmM7XFxuIFxcdF9fYmUzMiBpcF9kc3Q7XFxuIFxcdHU2NCB1NjRfbWFjO1xcbkBAIC0xNDc0LDkgKzE0NzQsOSBAQCBib29sIGJhdGFkdl9kYXRfc25vb3BfaW5jb21pbmdfYXJwX3JlcGx5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSA9IE5VTEw7XFxuK1xcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiBcXHRib29sIGRyb3BwZWQgPSBmYWxzZTtcXG4gXFx0dW5zaWduZWQgc2hvcnQgdmlkO1xcbi1cXHR1OCBtYWNbRVRIX0FMRU5dO1xcbiBcXHRfX2JlMzIgaXBfc3JjO1xcbiBcXHRfX2JlMzIgaXBfZHN0O1xcbiBcXHR1NjQgdTY0X21hYztcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcXG5pbmRleCBlMjAyMDg4Y2YxZmQ0Li42M2FmMjE5NTRjZjkwIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXFxuQEAgLTE0MSw5ICsxNDEsOSBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJhdGFkdl9pbnRlcmZhY2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gc3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKVxcbiB7XFxuIFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHR1OCBvbGRfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xcbiBcXHRzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwO1xcbi1cXHR1OCBvbGRfYWRkcltFVEhfQUxFTl07XFxuIFxcbiBcXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cXHUwMDNlc2FfZGF0YSkpXFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG5AQCAtMjEzLDEzICsyMTMsMTggQEAgc3RhdGljIHZvaWQgYmF0YWR2X2ludGVyZmFjZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXFxuIHtcXG4tXFx0c3RhdGljIGNvbnN0IHU4IGVjdHBfYWRkcltFVEhfQUxFTl0gPSB7MHhDRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07XFxuLVxcdHN0YXRpYyBjb25zdCB1OCBzdHBfYWRkcltFVEhfQUxFTl0gPSB7MHgwMSwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwMCwgMHgwMH07XFxuIFxcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcXG4gXFx0ZW51bSBiYXRhZHZfZGhjcF9yZWNpcGllbnQgZGhjcF9yY3AgPSBCQVRBRFZfREhDUF9OTztcXG4gXFx0ZW51bSBiYXRhZHZfZm9yd19tb2RlIGZvcndfbW9kZSA9IEJBVEFEVl9GT1JXX0JDQVNUO1xcbitcXHRzdGF0aWMgY29uc3QgdTggZWN0cF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMikgPSB7XFxuK1xcdFxcdDB4Q0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBcXG4rXFx0fTtcXG4rXFx0c3RhdGljIGNvbnN0IHU4IHN0cF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMikgPSB7XFxuK1xcdFxcdDB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDBcXG4rXFx0fTtcXG4gXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDtcXG4gXFx0c3RydWN0IGJhdGFkdl9iY2FzdF9wYWNrZXQgKmJjYXN0X3BhY2tldDtcXG4rXFx0dTggY2hhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcdGludCBuZXR3b3JrX29mZnNldCA9IEVUSF9ITEVOO1xcbiBcXHR1bnNpZ25lZCBpbnQgaGVhZGVyX2xlbiA9IDA7XFxuIFxcdHVuc2lnbmVkIGxvbmcgYnJkX2RlbGF5ID0gMDtcXG5AQCAtMjI5LDcgKzIzNCw2IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBiYXRhZHZfaW50ZXJmYWNlX3R4KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHN0cnVjdCBldGhoZHIgKmV0aGhkcjtcXG4gXFx0Ym9vbCBkb19iY2FzdCA9IGZhbHNlO1xcbiBcXHR1OCAqZHN0X2hpbnQgPSBOVUxMO1xcbi1cXHR1OCBjaGFkZHJbRVRIX0FMRU5dO1xcbiBcXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XFxuIFxcdGJvb2wgY2xpZW50X2FkZGVkO1xcbiBcXHRfX2JlMTYgcHJvdG87XFxuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jIGIvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmNcXG5pbmRleCA4MmZkNTI3YjYxYzAyLi4yMmRkMjhkNWUxYWJjIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jXFxuKysrIGIvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmNcXG5AQCAtMzY4LDkgKzM2OCw5IEBAIGJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgaGxpc3RfaGVhZCAqbWNhc3RfbGlzdCxcXG4gXFx0XFx0XFx0XFx0IHN0cnVjdCBiYXRhZHZfbWNhc3RfbWxhX2ZsYWdzICpmbGFncylcXG4ge1xcbitcXHR1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcdHN0cnVjdCBiYXRhZHZfaHdfYWRkciAqbmV3O1xcbiBcXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7XFxuLVxcdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dO1xcbiBcXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4gXFxuQEAgLTQzNSw5ICs0MzUsOSBAQCBiYXRhZHZfbWNhc3RfbWxhX21lc2hpZl9nZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgc3RydWN0IGhsaXN0X2hlYWQgKm1jYXN0X2xpc3QsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgYmF0YWR2X21jYXN0X21sYV9mbGFncyAqZmxhZ3MpXFxuIHtcXG4rXFx0dTggbWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgKm5ldztcXG4gXFx0c3RydWN0IGluZXQ2X2RldiAqaW42X2RldjtcXG4tXFx0dTggbWNhc3RfYWRkcltFVEhfQUxFTl07XFxuIFxcdHN0cnVjdCBpZm1jYWRkcjYgKnBtYzY7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG5AQCAtNTg3LDEwICs1ODcsMTAgQEAgc3RhdGljIGludCBiYXRhZHZfbWNhc3RfbWxhX2JyaWRnZV9nZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWNhc3RfbWxhX2ZsYWdzICpmbGFncylcXG4ge1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkIGJyaWRnZV9tY2FzdF9saXN0ID0gTElTVF9IRUFEX0lOSVQoYnJpZGdlX21jYXN0X2xpc3QpO1xcbitcXHR1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcdHU4IHR2bHZfZmxhZ3MgPSBmbGFncy1cXHUwMDNldHZsdl9mbGFncztcXG4gXFx0c3RydWN0IGJyX2lwX2xpc3QgKmJyX2lwX2VudHJ5O1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgKm5ldztcXG4tXFx0dTggbWNhc3RfYWRkcltFVEhfQUxFTl07XFxuIFxcdHN0cnVjdCBicl9pcF9saXN0ICp0bXA7XFxuIFxcdGludCByZXQ7XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jIGIvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY1xcbmluZGV4IDY4Zjc5ODUzMDMyZWQuLjQ0YThjZjg5MzgyYzYgMTAwNjQ0XFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY1xcbisrKyBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcXG5AQCAtMTMsNiArMTMsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2FjaGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NsZWFudXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYzMyLmhcXHUwMDNlXFxuQEAgLTk1LDYgKzk2LDI2IEBAIHN0YXRpYyBib29sIGJhdGFkdl9jb21wYXJlX3R0KGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlLCBjb25zdCB2b2lkICpkYXRhMilcXG4gXFx0cmV0dXJuICh0dDEtXFx1MDAzZXZpZCA9PSB0dDItXFx1MDAzZXZpZCkgXFx1MDAyNlxcdTAwMjYgYmF0YWR2X2NvbXBhcmVfZXRoKGRhdGExLCBkYXRhMik7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSgpIC0gY2hlY2sgaWYgYSBoYXNoIG5vZGUgaXMgYSBzcGVjaWZpYyBUVCBlbnRyeVxcbisgKiBAbm9kZTogdGhlIGxpc3QgZWxlbWVudCBwb2ludGVyIG9mIHRoZSBUVCBlbnRyeSBzdG9yZWQgaW4gdGhlIGJ1Y2tldFxcbisgKiBAZGF0YTI6IHBvaW50ZXIgdG8gdGhlIHR0X2NvbW1vbl9lbnRyeSB3aGljaCBpcyBsb29rZWQgZm9yXFxuKyAqXFxuKyAqIFVubGlrZSBiYXRhZHZfY29tcGFyZV90dCgpLCB0aGlzIG9ubHkgbWF0Y2hlcyB0aGUgdmVyeSBvYmplY3Qgd2hpY2ggaXNcXG4rICogcGFzc2VkIGFzIEBkYXRhMiBhbmQgbm90IGp1c3QgYW55IGVudHJ5IGZvciB0aGUgc2FtZSBUVCBjbGllbnQuIEl0IGlzIG1lYW50XFxuKyAqIGZvciBiYXRhZHZfaGFzaF9yZW1vdmUoKSBjYWxsZXJzIHdoaWNoIG11c3Qgbm90IHVubGluayBhbiBlbnRyeSB0aGV5IGRpZCBub3RcXG4rICogbG9vayB1cCB0aGVtc2VsdmVzLlxcbisgKlxcbisgKiBSZXR1cm46IHRydWUgaWYgQG5vZGUgYmVsb25ncyB0byBAZGF0YTIsIGZhbHNlIG90aGVyd2lzZVxcbisgKi9cXG4rc3RhdGljIGJvb2wgYmF0YWR2X2NvbXBhcmVfdHRfZW50cnkoY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsXFxuK1xcdFxcdFxcdFxcdCAgICBjb25zdCB2b2lkICpkYXRhMilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHQgPSBkYXRhMjtcXG4rXFxuK1xcdHJldHVybiBub2RlID09IFxcdTAwMjZ0dC1cXHUwMDNlaGFzaF9lbnRyeTtcXG4rfVxcbitcXG4gLyoqXFxuICAqIGJhdGFkdl9jaG9vc2VfdHQoKSAtIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHR0IGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlXFxuICAqIEBkYXRhOiBwb2ludGVyIHRvIHRoZSB0dF9jb21tb25fZW50cnkgb2JqZWN0IHRvIG1hcFxcbkBAIC0zMTIsNiArMzMzLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9zaXplX21vZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiAgKiAgZ2l2ZW4gdmlkXFxuICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiAgKiBAdmlkOiB0aGUgVkxBTiBpZGVudGlmaWVyXFxuKyAqXFxuKyAqIEl0IG11c3Qgb25seSBiZSBjYWxsZWQgd2hlbiByZW1vdmluZyB0aGUgTkVXIGZsYWcgb2YgYVxcbisgKiBiYXRhZHZfdHRfbG9jYWxfZW50cnkgd2hpbGUgaXQgaXMgc3RpbGwgcGFydCBvZiB0aGUgYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2guXFxuKyAqIEl0IG11c3QgdGhlcmVmb3JlIGJlIGNoZWNrZWQgdW5kZXIgdGhlIHNwZWNpZmljIGxpc3RfbG9ja3NbaV0uXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9pbmMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuQEAgLTMyNCw2ICszNDksMTEgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfaW5jKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuICAqICBnaXZlbiB2aWRcXG4gICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuICAqIEB2aWQ6IHRoZSBWTEFOIGlkZW50aWZpZXJcXG4rICpcXG4rICogSXQgbXVzdCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIGJhdGFkdl90dF9sb2NhbF9lbnRyeSB3aXRob3V0IE5FVyBmbGFnXFxuKyAqIHdhcyByZW1vdmVkIGZyb20gYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2ggKHVuZGVyIHRoZSBzcGVjaWZpY1xcbisgKiBsaXN0X2xvY2tzW2ldKSBvciB3aGVuIGl0IGlzIGVuc3VyZWQgdGhhdCBpdCBpcyBub3QgYWNjZXNzaWJsZVxcbisgKiBpbiB0aGlzIGxpc3QuXFxuICAqL1xcbiBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9kZWMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gXFx0XFx0XFx0XFx0ICAgICB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuQEAgLTQxMyw2ICs0NDMsMjIgQEAgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeV9wdXQoc3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWdfZW50cnkpXFxuIFxcdGtyZWZfcHV0KFxcdTAwMjZvcmlnX2VudHJ5LVxcdTAwM2VyZWZjb3VudCwgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeV9yZWxlYXNlKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJhdGFkdl90dF9mbGFnc19nZXQoKSAtIGdldCBhIHNuYXBzaG90IG9mIHRoZSBmbGFncyBvZiBhIFRUIGVudHJ5XFxuKyAqIEBjb21tb246IHR0IGxvY2FsIFxcdTAwMjYgdHQgZ2xvYmFsIGNvbW1vbiBkYXRhXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIGZsYWdzIG9mIHRoZSBUVCBlbnRyeSBhcyBvYnNlcnZlZCB1bmRlciBpdHMgZmxhZ3NfbG9jay5cXG4rICovXFxuK3N0YXRpYyB1MTYgYmF0YWR2X3R0X2ZsYWdzX2dldChzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uKVxcbit7XFxuK1xcdHUxNiBmbGFncztcXG4rXFxuK1xcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXFx1MDAyNmNvbW1vbi1cXHUwMDNlZmxhZ3NfbG9jaylcXG4rXFx0XFx0ZmxhZ3MgPSBjb21tb24tXFx1MDAzZWZsYWdzO1xcbitcXG4rXFx0cmV0dXJuIGZsYWdzO1xcbit9XFxuK1xcbiAvKipcXG4gICogYmF0YWR2X3R0X2xvY2FsX2V2ZW50KCkgLSBzdG9yZSBhIGxvY2FsIFRUIGV2ZW50IChBREQvREVMKVxcbiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG5AQCAtNDI1LDIzICs0NzEsMjUgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX2V2ZW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKmNvbW1vbiA9IFxcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uO1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICp0dF9jaGFuZ2Vfbm9kZTtcXG4tXFx0dTggZmxhZ3MgPSBjb21tb24tXFx1MDAzZWZsYWdzIHwgZXZlbnRfZmxhZ3M7XFxuIFxcdHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKmVudHJ5O1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICpzYWZlO1xcbiBcXHRib29sIGRlbF9vcF9yZXF1ZXN0ZWQ7XFxuIFxcdGJvb2wgZGVsX29wX2VudHJ5O1xcbiBcXHRzaXplX3QgY2hhbmdlcztcXG4rXFx0dTggZmxhZ3M7XFxuIFxcbiBcXHR0dF9jaGFuZ2Vfbm9kZSA9IGttZW1fY2FjaGVfYWxsb2MoYmF0YWR2X3R0X2NoYW5nZV9jYWNoZSwgR0ZQX0FUT01JQyk7XFxuIFxcdGlmICghdHRfY2hhbmdlX25vZGUpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdHR0X2NoYW5nZV9ub2RlLVxcdTAwM2VjaGFuZ2UuZmxhZ3MgPSBmbGFncztcXG4gXFx0bWVtc2V0KHR0X2NoYW5nZV9ub2RlLVxcdTAwM2VjaGFuZ2UucmVzZXJ2ZWQsIDAsXFxuIFxcdCAgICAgICBzaXplb2YodHRfY2hhbmdlX25vZGUtXFx1MDAzZWNoYW5nZS5yZXNlcnZlZCkpO1xcbiBcXHRldGhlcl9hZGRyX2NvcHkodHRfY2hhbmdlX25vZGUtXFx1MDAzZWNoYW5nZS5hZGRyLCBjb21tb24tXFx1MDAzZWFkZHIpO1xcbiBcXHR0dF9jaGFuZ2Vfbm9kZS1cXHUwMDNlY2hhbmdlLnZpZCA9IGh0b25zKGNvbW1vbi1cXHUwMDNldmlkKTtcXG4gXFxuK1xcdGZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pIHwgZXZlbnRfZmxhZ3M7XFxuK1xcbitcXHR0dF9jaGFuZ2Vfbm9kZS1cXHUwMDNlY2hhbmdlLmZsYWdzID0gZmxhZ3M7XFxuIFxcdGRlbF9vcF9yZXF1ZXN0ZWQgPSBmbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfREVMO1xcbiBcXG4gXFx0LyogY2hlY2sgZm9yIEFERCtERUwsIERFTCtBREQsIEFERCtBREQgb3IgREVMK0RFTCBldmVudHMgKi9cXG5AQCAtNTc1LDcgKzYyMyw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwsXFxuIFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqbWVzc2FnZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfcmVtb3ZlZF9lbnRyeTtcXG4gXFx0c3RydWN0IGhsaXN0X25vZGUgKnR0X3JlbW92ZWRfbm9kZTtcXG4gXFxuIFxcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXFxuQEAgLTU4MywxOCArNjMwLDY3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRcXHQgICB0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5hZGRyLFxcbiBcXHRcXHQgICBiYXRhZHZfcHJpbnRfdmlkKHR0X2dsb2JhbC1cXHUwMDNlY29tbW9uLnZpZCksIG1lc3NhZ2UpO1xcbiBcXG4rXFx0LyogcmVtb3ZlIGV4YWN0bHkgdGhpcyBvYmplY3Qgd2hlbiBzdGlsbCBwcmVzZW50IGluIGhhc2ggKi9cXG4gXFx0dHRfcmVtb3ZlZF9ub2RlID0gYmF0YWR2X2hhc2hfcmVtb3ZlKGJhdF9wcml2LVxcdTAwM2V0dC5nbG9iYWxfaGFzaCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBiYXRhZHZfY29tcGFyZV90dCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZ0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbik7XFxuIFxcdGlmICghdHRfcmVtb3ZlZF9ub2RlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHQvKiBkcm9wIHJlZmVyZW5jZSBvZiByZW1vdmUgaGFzaCBlbnRyeSAqL1xcbi1cXHR0dF9yZW1vdmVkX2VudHJ5ID0gaGxpc3RfZW50cnkodHRfcmVtb3ZlZF9ub2RlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnksXFxuLVxcdFxcdFxcdFxcdCAgICAgICBjb21tb24uaGFzaF9lbnRyeSk7XFxuLVxcdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X3JlbW92ZWRfZW50cnkpO1xcbitcXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWwpO1xcbit9XFxuK1xcbisvKipcXG4rICogYmF0YWR2X3R0X2xvY2FsX2FkZF9yb2FtKCkgLSBoYW5kbGUgcm9hbWVkIGNsaWVudHMgZHVyaW5nIGJhdGFkdl90dF9sb2NhbF9hZGQoKVxcbisgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG4rICogQHR0X2dsb2JhbDogdGhlIGdsb2JhbCBUVCBlbnRyeVxcbisgKiBAcm9hbWVkX2JhY2s6IHdoZXRoZXIgQHR0X2dsb2JhbCByb2FtZWQgYmFja1xcbisgKi9cXG4rc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX2FkZF9yb2FtKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbCxcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sIHJvYW1lZF9iYWNrKVxcbit7XFxuK1xcdHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpvcmlnX2VudHJ5O1xcbitcXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcXG4rXFxuK1xcdGlmICghdHRfZ2xvYmFsKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgcm9hbWluZywgYnV0IGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nXFxuK1xcdCAqIHByb2Nlc3MgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkXFxuK1xcdCAqL1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFxcdTAwMjZ0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKSB7XFxuK1xcdFxcdGlmICh0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSlcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0aWYgKCFyb2FtZWRfYmFjaykge1xcbitcXHRcXHRcXHQvKiBUaGUgZ2xvYmFsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgUk9BTUlORyBhbmQgaGFzIHRvIGJlXFxuK1xcdFxcdFxcdCAqIGtlcHQgZm9yIGNvbnNpc3RlbmN5IHB1cnBvc2UuXFxuK1xcdFxcdFxcdCAqXFxuK1xcdFxcdFxcdCAqIGJhdGFkdl90dF9nbG9iYWxfdG9fcHVyZ2UoKSBldmFsdWF0ZXMgcm9hbV9hdCBhcyBzb29uIGFzIGl0XFxuK1xcdFxcdFxcdCAqIG9ic2VydmVzIEJBVEFEVl9UVF9DTElFTlRfUk9BTSwgc28gdGhlIHRpbWVvdXQgaGFzIHRvIGJlXFxuK1xcdFxcdFxcdCAqIHN0YW1wZWQgYmVmb3JlIHRoZSBmbGFnIGlzIHB1Ymxpc2hlZC4gT3RoZXJ3aXNlIHRoZSBlbnRyeSBjYW5cXG4rXFx0XFx0XFx0ICogYmUgZGVsZXRlZCByaWdodCBhd2F5IGFzIFxcXCJSb2FtaW5nIHRpbWVvdXRcXFwiLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0dHRfZ2xvYmFsLVxcdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcXG4rXFx0XFx0XFx0dHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZXNlIG5vZGUgYXJlIHByb2JhYmx5IGdvaW5nIHRvIHVwZGF0ZSB0aGVpciB0dCB0YWJsZSAqL1xcbitcXHRoZWFkID0gXFx1MDAyNnR0X2dsb2JhbC1cXHUwMDNlb3JpZ19saXN0O1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX2VudHJ5LCBoZWFkLCBsaXN0KSB7XFxuK1xcdFxcdGJhdGFkdl9zZW5kX3JvYW1fYWR2KGJhdF9wcml2LCB0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5hZGRyLFxcbitcXHRcXHRcXHRcXHQgICAgIHR0X2dsb2JhbC1cXHUwMDNlY29tbW9uLnZpZCxcXG4rXFx0XFx0XFx0XFx0ICAgICBvcmlnX2VudHJ5LVxcdTAwM2VvcmlnX25vZGUpO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4rXFx0aWYgKHJvYW1lZF9iYWNrKVxcbitcXHRcXHRiYXRhZHZfdHRfZ2xvYmFsX2ZyZWUoYmF0X3ByaXYsIHR0X2dsb2JhbCwgXFxcIlJvYW1pbmcgY2FuY2VsZWRcXFwiKTtcXG4gfVxcbiBcXG4gLyoqXFxuQEAgLTYxNSwyMCArNzExLDE5IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG1lc2hfaWZhY2UpO1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsID0gTlVMTDtcXG4tXFx0c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWdfZW50cnk7XFxuIFxcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsO1xcbiBcXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KG1lc2hfaWZhY2UpO1xcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqaW5fZGV2ID0gTlVMTDtcXG4gXFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4gXFx0Ym9vbCByb2FtZWRfYmFjayA9IGZhbHNlO1xcbiBcXHRib29sIGlpZl9pc193aWZpID0gZmFsc2U7XFxuLVxcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkO1xcbiBcXHRpbnQgcGFja2V0X3NpemVfbWF4O1xcbiBcXHRib29sIHJldCA9IGZhbHNlO1xcbiBcXHR1OCByZW1vdGVfZmxhZ3M7XFxuIFxcdGludCBoYXNoX2FkZGVkO1xcbiBcXHRpbnQgdGFibGVfc2l6ZTtcXG4gXFx0dTMyIG1hdGNoX21hcms7XFxuK1xcdGJvb2wgbW9kaWZpZWQ7XFxuIFxcbiBcXHRpZiAoaWZpbmRleCAhPSBCQVRBRFZfTlVMTF9JRklOREVYKVxcbiBcXHRcXHRpbl9kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgaWZpbmRleCk7XFxuQEAgLTY0Niw2ICs3NDEsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbiBcXG4gXFx0aWYgKHR0X2xvY2FsKSB7XFxuIFxcdFxcdHR0X2xvY2FsLVxcdTAwM2VsYXN0X3NlZW4gPSBqaWZmaWVzO1xcbitcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xcbiBcXHRcXHRpZiAodHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykge1xcbiBcXHRcXHRcXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxcbiBcXHRcXHRcXHRcXHQgICBcXFwiUmUtYWRkaW5nIHBlbmRpbmcgY2xpZW50ICVwTSAodmlkOiAlZClcXFxcblxcXCIsXFxuQEAgLTY1Niw2ICs3NTMsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbiBcXHRcXHRcXHQgKiBmbGFnIGNhbiBiZSByZXNldCBsaWtlIGl0IHdhcyBuZXZlciBlbnF1ZXVlZFxcbiBcXHRcXHRcXHQgKi9cXG4gXFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcXG4rXFxuIFxcdFxcdFxcdGdvdG8gYWRkX2V2ZW50O1xcbiBcXHRcXHR9XFxuIFxcbkBAIC02NzEsNiArNzcwLDggQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcXG4gXFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbiBcXHRcXHRcXHRyb2FtZWRfYmFjayA9IHRydWU7XFxuIFxcdFxcdH1cXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XFxuK1xcbiBcXHRcXHRnb3RvIGNoZWNrX3JvYW1pbmc7XFxuIFxcdH1cXG4gXFxuQEAgLTcwNiwxOCArODA3LDIxIEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXFxuIFxcdFxcdCAgICh1OClhdG9taWNfcmVhZChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZXR0LnZuKSk7XFxuIFxcbiBcXHRldGhlcl9hZGRyX2NvcHkodHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5hZGRyLCBhZGRyKTtcXG4rXFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi52aWQgPSB2aWQ7XFxuK1xcdGtyZWZfaW5pdChcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XFxuK1xcdHR0X2xvY2FsLVxcdTAwM2VsYXN0X3NlZW4gPSBqaWZmaWVzO1xcbitcXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmFkZGVkX2F0ID0gdHRfbG9jYWwtXFx1MDAzZWxhc3Rfc2VlbjtcXG4rXFx0dHRfbG9jYWwtXFx1MDAzZXZsYW4gPSB2bGFuO1xcbitcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcXG4gXFx0LyogVGhlIGxvY2FsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgTkVXIHRvIGF2b2lkIHRvIHNlbmQgaXQgaW5cXG4gXFx0ICogYSBmdWxsIHRhYmxlIHJlc3BvbnNlIGdvaW5nIG91dCBiZWZvcmUgdGhlIG5leHQgdHR2biBpbmNyZW1lbnRcXG4gXFx0ICogKGNvbnNpc3RlbmN5IGNoZWNrKVxcbiBcXHQgKi9cXG4gXFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyA9IEJBVEFEVl9UVF9DTElFTlRfTkVXO1xcbi1cXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnZpZCA9IHZpZDtcXG4gXFx0aWYgKGlpZl9pc193aWZpKVxcbiBcXHRcXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfV0lGSTtcXG4tXFx0a3JlZl9pbml0KFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcXG4tXFx0dHRfbG9jYWwtXFx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XFxuLVxcdHR0X2xvY2FsLVxcdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cXHUwMDNlbGFzdF9zZWVuO1xcbi1cXHR0dF9sb2NhbC1cXHUwMDNldmxhbiA9IHZsYW47XFxuIFxcbiBcXHQvKiB0aGUgYmF0bWFuIGludGVyZmFjZSBtYWMgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMgc2hvdWxkIG5ldmVyIGJlXFxuIFxcdCAqIHB1cmdlZFxcbkBAIC03MjUsNiArODI5LDcgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcXG4gXFx0aWYgKGJhdGFkdl9jb21wYXJlX2V0aChhZGRyLCBtZXNoX2lmYWNlLVxcdTAwM2VkZXZfYWRkcikgfHxcXG4gXFx0ICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxcbiBcXHRcXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfTk9QVVJHRTtcXG4rXFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XFxuIFxcbiBcXHRrcmVmX2dldChcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XFxuIFxcdGhhc2hfYWRkZWQgPSBiYXRhZHZfaGFzaF9hZGQoYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LFxcbkBAIC03NDEsMzEgKzg0Niw5IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXFxuIFxcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XFxuIFxcbiBjaGVja19yb2FtaW5nOlxcbi1cXHQvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgcm9hbWluZywgYnV0IGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nXFxuLVxcdCAqIHByb2Nlc3MgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkXFxuLVxcdCAqL1xcbi1cXHRpZiAodHRfZ2xvYmFsIFxcdTAwMjZcXHUwMDI2ICEodHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKSB7XFxuLVxcdFxcdC8qIFRoZXNlIG5vZGUgYXJlIHByb2JhYmx5IGdvaW5nIHRvIHVwZGF0ZSB0aGVpciB0dCB0YWJsZSAqL1xcbi1cXHRcXHRoZWFkID0gXFx1MDAyNnR0X2dsb2JhbC1cXHUwMDNlb3JpZ19saXN0O1xcbi1cXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuLVxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX2VudHJ5LCBoZWFkLCBsaXN0KSB7XFxuLVxcdFxcdFxcdGJhdGFkdl9zZW5kX3JvYW1fYWR2KGJhdF9wcml2LCB0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5hZGRyLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIHR0X2dsb2JhbC1cXHUwMDNlY29tbW9uLnZpZCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBvcmlnX2VudHJ5LVxcdTAwM2VvcmlnX25vZGUpO1xcbi1cXHRcXHR9XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHRcXHRpZiAocm9hbWVkX2JhY2spIHtcXG4tXFx0XFx0XFx0YmF0YWR2X3R0X2dsb2JhbF9mcmVlKGJhdF9wcml2LCB0dF9nbG9iYWwsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIFxcXCJSb2FtaW5nIGNhbmNlbGVkXFxcIik7XFxuLVxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdC8qIFRoZSBnbG9iYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBST0FNSU5HIGFuZFxcbi1cXHRcXHRcXHQgKiBoYXMgdG8gYmUga2VwdCBmb3IgY29uc2lzdGVuY3kgcHVycG9zZVxcbi1cXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0dHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbi1cXHRcXHRcXHR0dF9nbG9iYWwtXFx1MDAzZXJvYW1fYXQgPSBqaWZmaWVzO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0YmF0YWR2X3R0X2xvY2FsX2FkZF9yb2FtKGJhdF9wcml2LCB0dF9nbG9iYWwsIHJvYW1lZF9iYWNrKTtcXG4gXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcXG4gXFx0Lyogc3RvcmUgdGhlIGN1cnJlbnQgcmVtb3RlIGZsYWdzIGJlZm9yZSBhbHRlcmluZyB0aGVtLiBUaGlzIGhlbHBzXFxuIFxcdCAqIHVuZGVyc3RhbmRpbmcgaXMgZmxhZ3MgYXJlIGNoYW5naW5nIG9yIG5vdFxcbiBcXHQgKi9cXG5AQCAtNzg3LDEwICs4NzAsMTMgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcXG4gXFx0ZWxzZVxcbiBcXHRcXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX0lTT0xBO1xcbiBcXG4rXFx0bW9kaWZpZWQgPSByZW1vdGVfZmxhZ3MgXiAodHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9SRU1PVEVfTUFTSyk7XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xcbitcXG4gXFx0LyogaWYgYW55IFxcXCJkeW5hbWljXFxcIiBmbGFnIGhhcyBiZWVuIG1vZGlmaWVkLCByZXNlbmQgYW4gQUREIGV2ZW50IGZvciB0aGlzXFxuIFxcdCAqIGVudHJ5IHNvIHRoYXQgYWxsIHRoZSBub2RlcyBjYW4gZ2V0IHRoZSBuZXcgZmxhZ3NcXG4gXFx0ICovXFxuLVxcdGlmIChyZW1vdGVfZmxhZ3MgXiAodHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9SRU1PVEVfTUFTSykpXFxuK1xcdGlmIChtb2RpZmllZClcXG4gXFx0XFx0YmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbCwgQkFUQURWX05PX0ZMQUdTKTtcXG4gXFxuIFxcdHJldCA9IHRydWU7XFxuQEAgLTExMTUsNiArMTIwMSw3IEBAIGJhdGFkdl90dF9sb2NhbF9kdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsXFxuIFxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuIFxcdHVuc2lnbmVkIGludCBsYXN0X3NlZW5fbXNlY3M7XFxuIFxcdHZvaWQgKmhkcjtcXG4rXFx0dTE2IGZsYWdzO1xcbiBcXHR1MzIgY3JjO1xcbiBcXG4gXFx0bG9jYWwgPSBjb250YWluZXJfb2YoY29tbW9uLCBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LCBjb21tb24pO1xcbkBAIC0xMTM2LDEzICsxMjIzLDE1IEBAIGJhdGFkdl90dF9sb2NhbF9kdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsXFxuIFxcbiBcXHRnZW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgaGRyKTtcXG4gXFxuK1xcdGZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pO1xcbitcXG4gXFx0aWYgKG5sYV9wdXQobXNnLCBCQVRBRFZfQVRUUl9UVF9BRERSRVNTLCBFVEhfQUxFTiwgY29tbW9uLVxcdTAwM2VhZGRyKSB8fFxcbiBcXHQgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9UVF9DUkMzMiwgY3JjKSB8fFxcbiBcXHQgICAgbmxhX3B1dF91MTYobXNnLCBCQVRBRFZfQVRUUl9UVF9WSUQsIGNvbW1vbi1cXHUwMDNldmlkKSB8fFxcbi1cXHQgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9UVF9GTEFHUywgY29tbW9uLVxcdTAwM2VmbGFncykpXFxuK1xcdCAgICBubGFfcHV0X3UzMihtc2csIEJBVEFEVl9BVFRSX1RUX0ZMQUdTLCBmbGFncykpXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4tXFx0aWYgKCEoY29tbW9uLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTk9QVVJHRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0UpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBubGFfcHV0X3UzMihtc2csIEJBVEFEVl9BVFRSX0xBU1RfU0VFTl9NU0VDUywgbGFzdF9zZWVuX21zZWNzKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbkBAIC0xMjQ5LDI5ICsxMzM4LDIzIEBAIGludCBiYXRhZHZfdHRfbG9jYWxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuIH1cXG4gXFxuIC8qKlxcbi0gKiBiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoKSAtIG1hcmsgYSBsb2NhbCBUVCBlbnRyeSBhcyBwZW5kaW5nIHJlbW92YWxcXG4rICogYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nX2V2ZW50KCkgLSB0cmlnZ2VyIGV2ZW50cyBmb3IgVFQgcGVuZGluZyByZW1vdmFsXFxuICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiAgKiBAdHRfbG9jYWxfZW50cnk6IGxvY2FsIFRUIGVudHJ5IHRvIG1hcmtcXG4gICogQGZsYWdzOiBUVCBjaGFuZ2UgZmxhZ3MgdG8gYW5ub3VuY2UgdG9nZXRoZXIgd2l0aCB0aGUgcGVuZGluZyByZW1vdmFsXFxuICAqIEBtZXNzYWdlOiBkZWJ1ZyBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIHJlYXNvbiBmb3IgdGhlIGNoYW5nZVxcbiAgKlxcbi0gKiBTY2hlZHVsZSB0aGUgVFQgY2hhbmdlIGFubm91bmNlbWVudCBhbmQgc2V0IEJBVEFEVl9UVF9DTElFTlRfUEVORElORyBvbiB0aGVcXG4tICogZW50cnkuIFRoZSBlbnRyeSBpcyBrZXB0IGluIHRoZSBsb2NhbCB0YWJsZSB1bnRpbCB0aGUgbmV4dCBUVFZOIGluY3JlbWVudFxcbi0gKiBzbyB0aGF0IGEgY29uc2lzdGVuY3ktY2hlY2sgcmVzcG9uc2UgY2FuIHN0aWxsIGJlIGFuc3dlcmVkLlxcbisgKiBTY2hlZHVsZSB0aGUgVFQgY2hhbmdlIGFubm91bmNlbWVudCBmb3IgdGhlIGVudHJ5LiBUaGUgZW50cnkgaXMga2VwdCBpbiB0aGVcXG4rICogbG9jYWwgdGFibGUgdW50aWwgdGhlIG5leHQgVFRWTiBpbmNyZW1lbnQgc28gdGhhdCBhIGNvbnNpc3RlbmN5LWNoZWNrXFxuKyAqIHJlc3BvbnNlIGNhbiBzdGlsbCBiZSBhbnN3ZXJlZC5cXG4gICovXFxuIHN0YXRpYyB2b2lkXFxuLWJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnksXFxuLVxcdFxcdFxcdCAgICB1MTYgZmxhZ3MsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXFxuK2JhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LFxcbitcXHRcXHRcXHRcXHQgIHUxNiBmbGFncywgY29uc3QgY2hhciAqbWVzc2FnZSlcXG4ge1xcbiBcXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncyk7XFxuIFxcbi1cXHQvKiBUaGUgbG9jYWwgY2xpZW50IGhhcyB0byBiZSBtYXJrZWQgYXMgXFxcInBlbmRpbmcgdG8gYmUgcmVtb3ZlZFxcXCIgYnV0IGhhc1xcbi1cXHQgKiB0byBiZSBrZXB0IGluIHRoZSB0YWJsZSBpbiBvcmRlciB0byBzZW5kIGl0IGluIGEgZnVsbCB0YWJsZVxcbi1cXHQgKiByZXNwb25zZSBpc3N1ZWQgYmVmb3JlIHRoZSBuZXQgdHR2biBpbmNyZW1lbnQgKGNvbnNpc3RlbmN5IGNoZWNrKVxcbi1cXHQgKi9cXG4tXFx0dHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7XFxuLVxcbiBcXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxcbiBcXHRcXHQgICBcXFwiTG9jYWwgdHQgZW50cnkgKCVwTSwgdmlkOiAlZCkgcGVuZGluZyB0byBiZSByZW1vdmVkOiAlc1xcXFxuXFxcIixcXG4gXFx0XFx0ICAgdHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5hZGRyLFxcbkBAIC0xMjkyLDE2ICsxMzc1LDE3IEBAIHUxNiBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICphZGRyLFxcbiBcXHRcXHRcXHQgICB1bnNpZ25lZCBzaG9ydCB2aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsXFxuIFxcdFxcdFxcdCAgIGJvb2wgcm9hbWluZylcXG4ge1xcbi1cXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9yZW1vdmVkX2VudHJ5O1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcXG4gXFx0c3RydWN0IGhsaXN0X25vZGUgKnR0X3JlbW92ZWRfbm9kZTtcXG4gXFx0dTE2IGN1cnJfZmxhZ3MgPSBCQVRBRFZfTk9fRkxBR1M7XFxuK1xcdGJvb2wgcGVuZGluZyA9IGZhbHNlO1xcbiBcXHR1MTYgZmxhZ3M7XFxuIFxcbiBcXHR0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7XFxuIFxcdGlmICghdHRfbG9jYWxfZW50cnkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xcbiBcXHRjdXJyX2ZsYWdzID0gdHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncztcXG4gXFxuIFxcdGZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ERUw7XFxuQEAgLTEzMTYsMjcgKzE0MDAsMzkgQEAgdTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXFxuIFxcdH1cXG4gXFxuIFxcdGlmICghKHR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpIHtcXG4tXFx0XFx0YmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nKGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwgZmxhZ3MsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBtZXNzYWdlKTtcXG4rXFx0XFx0dHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7XFxuK1xcdFxcdHBlbmRpbmcgPSB0cnVlO1xcbitcXHR9XFxuK1xcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xcbitcXG4rXFx0aWYgKHBlbmRpbmcpIHtcXG4rXFx0XFx0YmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwgZmxhZ3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgbWVzc2FnZSk7XFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuK1xcbiBcXHQvKiBpZiB0aGlzIGNsaWVudCBoYXMgYmVlbiBhZGRlZCByaWdodCBub3csIGl0IGlzIHBvc3NpYmxlIHRvXFxuIFxcdCAqIGltbWVkaWF0ZWx5IHB1cmdlIGl0XFxuIFxcdCAqL1xcbiBcXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBCQVRBRFZfVFRfQ0xJRU5UX0RFTCk7XFxuIFxcbitcXHQvKiByZW1vdmUgZXhhY3RseSB0aGlzIG9iamVjdCB3aGVuIHN0aWxsIHByZXNlbnQgaW4gaGFzaCAqL1xcbiBcXHR0dF9yZW1vdmVkX25vZGUgPSBiYXRhZHZfaGFzaF9yZW1vdmUoYmF0X3ByaXYtXFx1MDAzZXR0LmxvY2FsX2hhc2gsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgYmF0YWR2X2NvbXBhcmVfdHQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYmF0YWR2X2NvbXBhcmVfdHRfZW50cnksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgYmF0YWR2X2Nob29zZV90dCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbik7XFxuIFxcdGlmICghdHRfcmVtb3ZlZF9ub2RlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuK1xcdC8qIGJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldygpIG1heSBoYXZlIGNvbW1pdHRlZCB0aGUgZW50cnkgYW5kXFxuK1xcdCAqIHRodXMgY291bnRlZCBpdCBpbiB0aGUgbG9jYWwgdGFibGUgc2l6ZSBzaW5jZSB0aGUgQkFUQURWX1RUX0NMSUVOVF9ORVdcXG4rXFx0ICogY2hlY2sgYWJvdmUuXFxuK1xcdCAqL1xcbitcXHRpZiAoIShiYXRhZHZfdHRfZmxhZ3NfZ2V0KFxcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uKSBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKSlcXG4rXFx0XFx0YmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uLnZpZCk7XFxuK1xcbiBcXHQvKiBkcm9wIHJlZmVyZW5jZSBvZiByZW1vdmUgaGFzaCBlbnRyeSAqL1xcbi1cXHR0dF9yZW1vdmVkX2VudHJ5ID0gaGxpc3RfZW50cnkodHRfcmVtb3ZlZF9ub2RlLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGNvbW1vbi5oYXNoX2VudHJ5KTtcXG4tXFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9yZW1vdmVkX2VudHJ5KTtcXG4rXFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XFxuIFxcbiBvdXQ6XFxuIFxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xcbkBAIC0xMzYxLDIxICsxNDU3LDM3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9saXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcbiBcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHR0X2NvbW1vbl9lbnRyeSwgbm9kZV90bXAsIGhlYWQsXFxuIFxcdFxcdFxcdFxcdCAgaGFzaF9lbnRyeSkge1xcbitcXHRcXHRib29sIGNvbnQgPSBmYWxzZTtcXG4rXFxuIFxcdFxcdHR0X2xvY2FsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgY29tbW9uKTtcXG4tXFx0XFx0aWYgKHR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0UpXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0LyogZW50cnkgYWxyZWFkeSBtYXJrZWQgZm9yIGRlbGV0aW9uICovXFxuLVxcdFxcdGlmICh0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcXHUwMDI2dHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKSB7XFxuK1xcdFxcdFxcdGlmICh0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKSB7XFxuK1xcdFxcdFxcdFxcdGNvbnQgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0LyogZW50cnkgYWxyZWFkeSBtYXJrZWQgZm9yIGRlbGV0aW9uICovXFxuK1xcdFxcdFxcdGlmICh0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB7XFxuK1xcdFxcdFxcdFxcdGNvbnQgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0aWYgKCFiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9sb2NhbF9lbnRyeS1cXHUwMDNlbGFzdF9zZWVuLCB0aW1lb3V0KSkge1xcbitcXHRcXHRcXHRcXHRjb250ID0gdHJ1ZTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRcXHRpZiAoIWJhdGFkdl9oYXNfdGltZWRfb3V0KHR0X2xvY2FsX2VudHJ5LVxcdTAwM2VsYXN0X3NlZW4sIHRpbWVvdXQpKVxcbitcXHRcXHRpZiAoY29udClcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgQkFUQURWX1RUX0NMSUVOVF9ERUwsIFxcXCJ0aW1lZCBvdXRcXFwiKTtcXG4rXFx0XFx0YmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBCQVRBRFZfVFRfQ0xJRU5UX0RFTCwgXFxcInRpbWVkIG91dFxcXCIpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTE1ODEsOCArMTY5MywxMCBAQCBiYXRhZHZfdHRfZ2xvYmFsX3N5bmNfZmxhZ3Moc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbClcXG4gXFx0XFx0ZmxhZ3MgfD0gb3JpZ19lbnRyeS1cXHUwMDNlZmxhZ3M7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4tXFx0ZmxhZ3MgfD0gdHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiAofkJBVEFEVl9UVF9TWU5DX01BU0spO1xcbi1cXHR0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5mbGFncyA9IGZsYWdzO1xcbitcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFxcdTAwMjZ0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKSB7XFxuK1xcdFxcdGZsYWdzIHw9IHR0X2dsb2JhbC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgKH5CQVRBRFZfVFRfU1lOQ19NQVNLKTtcXG4rXFx0XFx0dHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgPSBmbGFncztcXG4rXFx0fVxcbiB9XFxuIFxcbiAvKipcXG5AQCAtMTY2NCw4ICsxNzc4LDEwIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5O1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uO1xcbiBcXHRib29sIHJldCA9IGZhbHNlO1xcbitcXHR1MTYgZ2xvYmFsX2ZsYWdzO1xcbiBcXHR1MTYgbG9jYWxfZmxhZ3M7XFxuIFxcdGludCBoYXNoX2FkZGVkO1xcbitcXHRib29sIGRlbGV0ZTtcXG4gXFxuIFxcdC8qIGlnbm9yZSBnbG9iYWwgZW50cmllcyBmcm9tIGJhY2tib25lIG5vZGVzICovXFxuIFxcdGlmIChiYXRhZHZfYmxhX2lzX2JhY2tib25lX2d3X29yaWcoYmF0X3ByaXYsIG9yaWdfbm9kZS1cXHUwMDNlb3JpZywgdmlkKSlcXG5AQCAtMTY3OCw5ICsxNzk0LDExIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdCAqIGZvciBhIHJvYW1pbmcgYWR2ZXJ0aXNlbWVudCBpbnN0ZWFkIG9mIG1hbnVhbGx5IG1lc3NpbmcgdXAgdGhlIGdsb2JhbFxcbiBcXHQgKiB0YWJsZVxcbiBcXHQgKi9cXG4tXFx0aWYgKChmbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgXFx1MDAyNlxcdTAwMjYgdHRfbG9jYWxfZW50cnkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgICEodHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdGlmICgoZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApIFxcdTAwMjZcXHUwMDI2IHR0X2xvY2FsX2VudHJ5KSB7XFxuK1xcdFxcdGxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcXHUwMDI2dHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbik7XFxuK1xcdFxcdGlmICghKGxvY2FsX2ZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbiBcXG4gXFx0aWYgKCF0dF9nbG9iYWxfZW50cnkpIHtcXG4gXFx0XFx0dHRfZ2xvYmFsX2VudHJ5ID0ga21lbV9jYWNoZV96YWxsb2MoYmF0YWR2X3RnX2NhY2hlLFxcbkBAIC0xNjkxLDkgKzE4MDksMTMgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gXFx0XFx0Y29tbW9uID0gXFx1MDAyNnR0X2dsb2JhbF9lbnRyeS1cXHUwMDNlY29tbW9uO1xcbiBcXHRcXHRldGhlcl9hZGRyX2NvcHkoY29tbW9uLVxcdTAwM2VhZGRyLCB0dF9hZGRyKTtcXG4gXFx0XFx0Y29tbW9uLVxcdTAwM2V2aWQgPSB2aWQ7XFxuK1xcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZjb21tb24tXFx1MDAzZWZsYWdzX2xvY2spO1xcbiBcXG4tXFx0XFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihjb21tb24tXFx1MDAzZWFkZHIpKVxcbitcXHRcXHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbW1vbi1cXHUwMDNlYWRkcikpIHtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZjb21tb24tXFx1MDAzZWZsYWdzX2xvY2spO1xcbiBcXHRcXHRcXHRjb21tb24tXFx1MDAzZWZsYWdzID0gZmxhZ3MgXFx1MDAyNiAofkJBVEFEVl9UVF9TWU5DX01BU0spO1xcbitcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2Y29tbW9uLVxcdTAwM2VmbGFnc19sb2NrKTtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0dHRfZ2xvYmFsX2VudHJ5LVxcdTAwM2Vyb2FtX2F0ID0gMDtcXG4gXFx0XFx0Lyogbm9kZSBtdXN0IHN0b3JlIGN1cnJlbnQgdGltZSBpbiBjYXNlIG9mIHJvYW1pbmcuIFRoaXMgaXNcXG5AQCAtMTczMyw4ICsxODU1LDEwIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdCAqICAgIG9yaWdpbmF0b3IgbGlzdCBhbmQgYWRkIHRoZSBuZXcgb25lIG9yaWdfZW50cnlcXG4gXFx0XFx0ICovXFxuIFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkge1xcbi1cXHRcXHRcXHRpZiAoIShjb21tb24tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSlcXG4rXFx0XFx0XFx0Z2xvYmFsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pO1xcbitcXHRcXHRcXHRpZiAoIShnbG9iYWxfZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApKVxcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuIFxcdFxcdFxcdGlmIChiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X2hhc19vcmlnKHR0X2dsb2JhbF9lbnRyeSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIG9yaWdfbm9kZSwgTlVMTCkpXFxuIFxcdFxcdFxcdFxcdGdvdG8gb3V0X3JlbW92ZTtcXG5AQCAtMTc0Miw2ICsxODY2LDkgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gXFx0XFx0XFx0Z290byBhZGRfb3JpZ19lbnRyeTtcXG4gXFx0XFx0fVxcbiBcXG4rXFx0XFx0ZGVsZXRlID0gZmFsc2U7XFxuK1xcbitcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmNvbW1vbi1cXHUwMDNlZmxhZ3NfbG9jayk7XFxuIFxcdFxcdC8qIGlmIHRoZSBjbGllbnQgd2FzIHRlbXBvcmFyeSBhZGRlZCBiZWZvcmUgcmVjZWl2aW5nIHRoZSBmaXJzdFxcbiBcXHRcXHQgKiBPR00gYW5ub3VuY2luZyBpdCwgd2UgaGF2ZSB0byBjbGVhciB0aGUgVEVNUCBmbGFnLiBBbHNvLFxcbiBcXHRcXHQgKiByZW1vdmUgdGhlIHByZXZpb3VzIHRlbXBvcmFyeSBvcmlnIG5vZGUgYW5kIHJlLWFkZCBpdFxcbkBAIC0xNzQ5LDcgKzE4NzYsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRcXHQgKiBpcyBhIG5vbi10ZW1wb3JhcnkgZW50cnkgaXMgcHJlZmVycmVkLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGNvbW1vbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApIHtcXG4tXFx0XFx0XFx0YmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7XFxuK1xcdFxcdFxcdGRlbGV0ZSA9IHRydWU7XFxuIFxcdFxcdFxcdGNvbW1vbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfVEVNUDtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTc2OCwxMCArMTg5NSwxNCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRcXHQgKiBuZXcgb25lLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGNvbW1vbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pIHtcXG4tXFx0XFx0XFx0YmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7XFxuLVxcdFxcdFxcdGNvbW1vbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG4rXFx0XFx0XFx0ZGVsZXRlID0gdHJ1ZTtcXG4gXFx0XFx0XFx0dHRfZ2xvYmFsX2VudHJ5LVxcdTAwM2Vyb2FtX2F0ID0gMDtcXG4rXFx0XFx0XFx0Y29tbW9uLVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbiBcXHRcXHR9XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZjb21tb24tXFx1MDAzZWZsYWdzX2xvY2spO1xcbitcXG4rXFx0XFx0aWYgKGRlbGV0ZSlcXG4rXFx0XFx0XFx0YmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7XFxuIFxcdH1cXG4gYWRkX29yaWdfZW50cnk6XFxuIFxcdC8qIGFkZCB0aGUgbmV3IG9yaWdfZW50cnkgKGlmIG5lZWRlZCkgb3IgdXBkYXRlIGl0ICovXFxuQEAgLTE3OTUsNiArMTkyNiw4IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdGxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgdHRfYWRkciwgdmlkLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIFxcXCJnbG9iYWwgdHQgcmVjZWl2ZWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgIGZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKTtcXG4rXFxuK1xcdHNwaW5fbG9ja19iaChcXHUwMDI2dHRfZ2xvYmFsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XFxuIFxcdHR0X2dsb2JhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIHw9IGxvY2FsX2ZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9XSUZJO1xcbiBcXG4gXFx0aWYgKCEoZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKVxcbkBAIC0xODAyLDYgKzE5MzUsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRcXHQgKiByb2FtaW5nIHN0YXRlIGFueW1vcmUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHR0dF9nbG9iYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbitcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dHRfZ2xvYmFsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XFxuIFxcbiBvdXQ6XFxuIFxcdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X2dsb2JhbF9lbnRyeSk7XFxuQEAgLTE4NzEsOSArMjAwNSw5IEBAIGJhdGFkdl90dF9nbG9iYWxfZHVtcF9zdWJlbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxcbiBcXHRcXHRcXHQgICAgICAgc3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWcsXFxuIFxcdFxcdFxcdCAgICAgICBib29sIGJlc3QpXFxuIHtcXG4tXFx0dTE2IGZsYWdzID0gKGNvbW1vbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAofkJBVEFEVl9UVF9TWU5DX01BU0spKSB8IG9yaWctXFx1MDAzZWZsYWdzO1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZV92bGFuICp2bGFuO1xcbiBcXHR1OCBsYXN0X3R0dm47XFxuK1xcdHUxNiBmbGFncztcXG4gXFx0dm9pZCAqaGRyO1xcbiBcXHR1MzIgY3JjO1xcbiBcXG5AQCAtMTg5Miw2ICsyMDI2LDcgQEAgYmF0YWR2X3R0X2dsb2JhbF9kdW1wX3N1YmVudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsIHUzMiBzZXEsXFxuIFxcdGlmICghaGRyKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIFxcbitcXHRmbGFncyA9IChiYXRhZHZfdHRfZmxhZ3NfZ2V0KGNvbW1vbikgXFx1MDAyNiAofkJBVEFEVl9UVF9TWU5DX01BU0spKSB8IG9yaWctXFx1MDAzZWZsYWdzO1xcbiBcXHRsYXN0X3R0dm4gPSBSRUFEX09OQ0Uob3JpZy1cXHUwMDNlb3JpZ19ub2RlLVxcdTAwM2VsYXN0X3R0dm4pO1xcbiBcXG4gXFx0aWYgKG5sYV9wdXQobXNnLCBCQVRBRFZfQVRUUl9UVF9BRERSRVNTLCBFVEhfQUxFTiwgY29tbW9uLVxcdTAwM2VhZGRyKSB8fFxcbkBAIC0yMTc5LDkgKzIzMTQsMTIgQEAgYmF0YWR2X3R0X2dsb2JhbF9kZWxfcm9hbWluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdGlmIChsYXN0X2VudHJ5KSB7XFxuLVxcdFxcdC8qIGl0cyB0aGUgbGFzdCBvbmUsIG1hcmsgZm9yIHJvYW1pbmcuICovXFxuLVxcdFxcdHR0X2dsb2JhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG4tXFx0XFx0dHRfZ2xvYmFsX2VudHJ5LVxcdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcXG4rXFx0XFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcXHUwMDI2dHRfZ2xvYmFsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3NfbG9jaykge1xcbitcXHRcXHRcXHQvKiBpdHMgdGhlIGxhc3Qgb25lLCBtYXJrIGZvciByb2FtaW5nLiAqL1xcbitcXHRcXHRcXHR0dF9nbG9iYWxfZW50cnktXFx1MDAzZXJvYW1fYXQgPSBqaWZmaWVzO1xcbitcXG4rXFx0XFx0XFx0dHRfZ2xvYmFsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbitcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdC8qIHRoZXJlIGlzIGFub3RoZXIgZW50cnksIHdlIGNhbiBzaW1wbHkgZGVsZXRlIHRoaXNcXG4gXFx0XFx0ICogb25lIGFuZCBjYW4gc3RpbGwgdXNlIHRoZSBvdGhlciBvbmUuXFxuQEAgLTIzMzAsMTYgKzI0NjgsMTggQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF90b19wdXJnZShzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsLFxcbiBcXHR1bnNpZ25lZCBsb25nIHRlbXBfdGltZW91dCA9IEJBVEFEVl9UVF9DTElFTlRfVEVNUF9USU1FT1VUO1xcbiBcXHRib29sIHB1cmdlID0gZmFsc2U7XFxuIFxcbi1cXHRpZiAoKHR0X2dsb2JhbC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgYmF0YWR2X2hhc190aW1lZF9vdXQodHRfZ2xvYmFsLVxcdTAwM2Vyb2FtX2F0LCByb2FtX3RpbWVvdXQpKSB7XFxuLVxcdFxcdHB1cmdlID0gdHJ1ZTtcXG4tXFx0XFx0Km1zZyA9IFxcXCJSb2FtaW5nIHRpbWVvdXRcXFxcblxcXCI7XFxuLVxcdH1cXG4rXFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcXHUwMDI2dHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3NfbG9jaykge1xcbitcXHRcXHRpZiAoKHR0X2dsb2JhbC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYmF0YWR2X2hhc190aW1lZF9vdXQodHRfZ2xvYmFsLVxcdTAwM2Vyb2FtX2F0LCByb2FtX3RpbWVvdXQpKSB7XFxuK1xcdFxcdFxcdHB1cmdlID0gdHJ1ZTtcXG4rXFx0XFx0XFx0Km1zZyA9IFxcXCJSb2FtaW5nIHRpbWVvdXRcXFxcblxcXCI7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdGlmICgodHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtXFx1MDAzZWNvbW1vbi5hZGRlZF9hdCwgdGVtcF90aW1lb3V0KSkge1xcbi1cXHRcXHRwdXJnZSA9IHRydWU7XFxuLVxcdFxcdCptc2cgPSBcXFwiVGVtcG9yYXJ5IGNsaWVudCB0aW1lb3V0XFxcXG5cXFwiO1xcbitcXHRcXHRpZiAoKHR0X2dsb2JhbC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgYmF0YWR2X2hhc190aW1lZF9vdXQodHRfZ2xvYmFsLVxcdTAwM2Vjb21tb24uYWRkZWRfYXQsIHRlbXBfdGltZW91dCkpIHtcXG4rXFx0XFx0XFx0cHVyZ2UgPSB0cnVlO1xcbitcXHRcXHRcXHQqbXNnID0gXFxcIlRlbXBvcmFyeSBjbGllbnQgdGltZW91dFxcXFxuXFxcIjtcXG4rXFx0XFx0fVxcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gcHVyZ2U7XFxuQEAgLTI0MzcsOCArMjU3Nyw4IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfdGFibGVfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxcbiAvKipcXG4gICogX2JhdGFkdl9pc19hcF9pc29sYXRlZCgpIC0gY2hlY2sgd2hldGhlciB0d28gY2xpZW50cyBhcmUgQVAtaXNvbGF0ZWQgZnJvbVxcbiAgKiAgZWFjaCBvdGhlclxcbi0gKiBAdHRfbG9jYWxfZW50cnk6IGxvY2FsIFRUIGVudHJ5IG9mIHRoZSBzZW5kaW5nIGNsaWVudFxcbi0gKiBAdHRfZ2xvYmFsX2VudHJ5OiBnbG9iYWwgVFQgZW50cnkgb2YgdGhlIGRlc3RpbmF0aW9uIGNsaWVudFxcbisgKiBAdHRfbG9jYWxfZW50cnk6IGxvY2FsIFRUIGVudHJ5IG9mIG9uZSBsb2NhbCBjbGllbnRcXG4rICogQHR0X2dsb2JhbF9lbnRyeTogZ2xvYmFsIFRUIGVudHJ5IG9mIHRoZSByZW1vdGUgY2xpZW50XFxuICAqXFxuICAqIFJldHVybjogdHJ1ZSBpZiB0cmFmZmljIGJldHdlZW4gdGhlIHR3byBjbGllbnRzIHNob3VsZCBiZSBkcm9wcGVkIGJlY2F1c2VcXG4gICogIGVpdGhlciBib3RoIGFyZSBXaUZpIGNsaWVudHMgb3IgYm90aCBjYXJyeSB0aGUgSVNPTEFUSU9OIGZsYWc7IGZhbHNlXFxuQEAgLTI0NDgsMTMgKzI1ODgsMTkgQEAgc3RhdGljIGJvb2xcXG4gX2JhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSxcXG4gXFx0XFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnkpXFxuIHtcXG4tXFx0aWYgKHR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHR0X2dsb2JhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9XSUZJKVxcbitcXHR1MTYgZ2xvYmFsX2ZsYWdzO1xcbitcXHR1MTYgbG9jYWxfZmxhZ3M7XFxuK1xcbitcXHRnbG9iYWxfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFxcdTAwMjZ0dF9nbG9iYWxfZW50cnktXFx1MDAzZWNvbW1vbik7XFxuK1xcdGxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcXHUwMDI2dHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbik7XFxuK1xcbitcXHRpZiAobG9jYWxfZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGdsb2JhbF9mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfV0lGSSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHQvKiBjaGVjayBpZiB0aGUgdHdvIGNsaWVudHMgYXJlIG1hcmtlZCBhcyBpc29sYXRlZCAqL1xcbi1cXHRpZiAodHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIHR0X2dsb2JhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQSlcXG4rXFx0aWYgKGxvY2FsX2ZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgZ2xvYmFsX2ZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQSlcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTI0ODMsMTEgKzI2MjksMTUgQEAgc3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKmJhdGFkdl90cmFuc3RhYmxlX3NlYXJjaChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSA9IE5VTEw7XFxuIFxcdHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpiZXN0X2VudHJ5O1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDtcXG4rXFx0dTE2IGZsYWdzO1xcbiBcXG4gXFx0aWYgKHNyYyBcXHUwMDI2XFx1MDAyNiBiYXRhZHZfdmxhbl9hcF9pc29sYV9nZXQoYmF0X3ByaXYsIHZpZCkpIHtcXG4gXFx0XFx0dHRfbG9jYWxfZW50cnkgPSBiYXRhZHZfdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBzcmMsIHZpZCk7XFxuLVxcdFxcdGlmICghdHRfbG9jYWxfZW50cnkgfHxcXG4tXFx0XFx0ICAgICh0dF9sb2NhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSlcXG4rXFx0XFx0aWYgKCF0dF9sb2NhbF9lbnRyeSlcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRmbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoXFx1MDAyNnR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24pO1xcbitcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpXFxuIFxcdFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbkBAIC0yNTYyLDYgKzI3MTIsOCBAQCBzdGF0aWMgdTMyIGJhdGFkdl90dF9nbG9iYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dF9jb21tb24sIGhlYWQsIGhhc2hfZW50cnkpIHtcXG4rXFx0XFx0XFx0dTE2IHR0X2ZsYWdzO1xcbitcXG4gXFx0XFx0XFx0dHRfZ2xvYmFsID0gY29udGFpbmVyX29mKHR0X2NvbW1vbixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5LFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgY29tbW9uKTtcXG5AQCAtMjU3MSwxOCArMjcyMywyMSBAQCBzdGF0aWMgdTMyIGJhdGFkdl90dF9nbG9iYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdFxcdGlmICh0dF9jb21tb24tXFx1MDAzZXZpZCAhPSB2aWQpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4rXFx0XFx0XFx0dHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbik7XFxuK1xcbiBcXHRcXHRcXHQvKiBSb2FtaW5nIGNsaWVudHMgYXJlIGluIHRoZSBnbG9iYWwgdGFibGUgZm9yXFxuIFxcdFxcdFxcdCAqIGNvbnNpc3RlbmN5IG9ubHkuIFRoZXkgZG9uJ3QgaGF2ZSB0byBiZVxcbiBcXHRcXHRcXHQgKiB0YWtlbiBpbnRvIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIHRoZVxcbiBcXHRcXHRcXHQgKiBnbG9iYWwgY3JjXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAodHRfY29tbW9uLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSlcXG4rXFx0XFx0XFx0aWYgKHR0X2ZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdFxcdC8qIFRlbXBvcmFyeSBjbGllbnRzIGhhdmUgbm90IGJlZW4gYW5ub3VuY2VkIHlldCwgc29cXG4gXFx0XFx0XFx0ICogdGhleSBoYXZlIHRvIGJlIHNraXBwZWQgd2hpbGUgY29tcHV0aW5nIHRoZSBnbG9iYWxcXG4gXFx0XFx0XFx0ICogY3JjXFxuIFxcdFxcdFxcdCAqL1xcbi1cXHRcXHRcXHRpZiAodHRfY29tbW9uLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUClcXG4rXFx0XFx0XFx0aWYgKHR0X2ZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdC8qIGZpbmQgb3V0IGlmIHRoaXMgZ2xvYmFsIGVudHJ5IGlzIGFubm91bmNlZCBieSB0aGlzXFxuQEAgLTI2NDIsMTggKzI3OTcsMjQgQEAgc3RhdGljIHUzMiBiYXRhZHZfdHRfbG9jYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dF9jb21tb24sIGhlYWQsIGhhc2hfZW50cnkpIHtcXG4rXFx0XFx0XFx0dTE2IHR0X2ZsYWdzO1xcbitcXG4gXFx0XFx0XFx0LyogY29tcHV0ZSB0aGUgQ1JDIG9ubHkgZm9yIGVudHJpZXMgYmVsb25naW5nIHRvIHRoZVxcbiBcXHRcXHRcXHQgKiBWTEFOIGlkZW50aWZpZWQgYnkgdmlkXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRpZiAodHRfY29tbW9uLVxcdTAwM2V2aWQgIT0gdmlkKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdFxcdHR0X2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCh0dF9jb21tb24pO1xcbitcXG4gXFx0XFx0XFx0Lyogbm90IHlldCBjb21taXR0ZWQgY2xpZW50cyBoYXZlIG5vdCB0byBiZSB0YWtlbiBpbnRvXFxuIFxcdFxcdFxcdCAqIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIHRoZSBDUkNcXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmICh0dF9jb21tb24tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpXFxuK1xcdFxcdFxcdGlmICh0dF9mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuK1xcdFxcdFxcdGZsYWdzID0gdHRfZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfU1lOQ19NQVNLO1xcbitcXG4gXFx0XFx0XFx0LyogdXNlIG5ldHdvcmsgb3JkZXIgdG8gcmVhZCB0aGUgVklEOiB0aGlzIGVuc3VyZXMgdGhhdFxcbiBcXHRcXHRcXHQgKiBldmVyeSBub2RlIHJlYWRzIHRoZSBieXRlcyBpbiB0aGUgc2FtZSBvcmRlci5cXG4gXFx0XFx0XFx0ICovXFxuQEAgLTI2NjMsNyArMjgyNCw2IEBAIHN0YXRpYyB1MzIgYmF0YWR2X3R0X2xvY2FsX2NyYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRcXHRcXHQvKiBjb21wdXRlIHRoZSBDUkMgb24gZmxhZ3MgdGhhdCBoYXZlIHRvIGJlIGtlcHQgaW4gc3luY1xcbiBcXHRcXHRcXHQgKiBhbW9uZyBub2Rlc1xcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0ZmxhZ3MgPSB0dF9jb21tb24tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX1NZTkNfTUFTSztcXG4gXFx0XFx0XFx0Y3JjX3RtcCA9IGNyYzMyYyhjcmNfdG1wLCBcXHUwMDI2ZmxhZ3MsIHNpemVvZihmbGFncykpO1xcbiBcXG4gXFx0XFx0XFx0Y3JjIF49IGNyYzMyYyhjcmNfdG1wLCB0dF9jb21tb24tXFx1MDAzZWFkZHIsIEVUSF9BTEVOKTtcXG5AQCAtMjgyMSwxNyArMjk4MSwxOSBAQCBiYXRhZHZfdHRfcmVxX25vZGVfbmV3KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuICAqXFxuICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgZW50cnkgaXMgYSB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKGNvbnN0IHZvaWQgKmVudHJ5X3B0cixcXG4rc3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKHZvaWQgKmVudHJ5X3B0cixcXG4gXFx0XFx0XFx0XFx0ICBjb25zdCB2b2lkICpkYXRhX3B0cixcXG4gXFx0XFx0XFx0XFx0ICB1OCAqZmxhZ3MpXFxuIHtcXG4tXFx0Y29uc3Qgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeSA9IGVudHJ5X3B0cjtcXG4rXFx0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeSA9IGVudHJ5X3B0cjtcXG4rXFx0dTE2IHR0X2ZsYWdzO1xcbiBcXG4tXFx0aWYgKHR0X2NvbW1vbl9lbnRyeS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVylcXG4rXFx0dHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbl9lbnRyeSk7XFxuK1xcdGlmICh0dF9mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbiBcXHRpZiAoZmxhZ3MpXFxuLVxcdFxcdCpmbGFncyA9IHR0X2NvbW1vbl9lbnRyeS1cXHUwMDNlZmxhZ3M7XFxuK1xcdFxcdCpmbGFncyA9IHR0X2ZsYWdzO1xcbiBcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG5AQCAtMjg0OCwxNiArMzAxMCwxOCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfbG9jYWxfdmFsaWQoY29uc3Qgdm9pZCAqZW50cnlfcHRyLFxcbiAgKlxcbiAgKiBSZXR1cm46IHRydWUgaWYgdGhlIGVudHJ5IGlzIGEgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cXG4gICovXFxuLXN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfdmFsaWQoY29uc3Qgdm9pZCAqZW50cnlfcHRyLFxcbitzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX3ZhbGlkKHZvaWQgKmVudHJ5X3B0cixcXG4gXFx0XFx0XFx0XFx0ICAgY29uc3Qgdm9pZCAqZGF0YV9wdHIsXFxuIFxcdFxcdFxcdFxcdCAgIHU4ICpmbGFncylcXG4ge1xcbi1cXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5ID0gZW50cnlfcHRyO1xcbi1cXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5O1xcbitcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5ID0gZW50cnlfcHRyO1xcbiBcXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gZGF0YV9wdHI7XFxuK1xcdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7XFxuK1xcdHUxNiB0dF9mbGFncztcXG4gXFxuLVxcdGlmICh0dF9jb21tb25fZW50cnktXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNIHx8XFxuLVxcdCAgICB0dF9jb21tb25fZW50cnktXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKVxcbitcXHR0dF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQodHRfY29tbW9uX2VudHJ5KTtcXG4rXFx0aWYgKHR0X2ZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNIHx8XFxuK1xcdCAgICB0dF9mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUClcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4gXFx0dHRfZ2xvYmFsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSxcXG5AQCAtMjg4Niw3ICszMDUwLDcgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF92YWxpZChjb25zdCB2b2lkICplbnRyeV9wdHIsXFxuIHN0YXRpYyB1MTYgYmF0YWR2X3R0X3R2bHZfZ2VuZXJhdGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmhhc2gsXFxuIFxcdFxcdFxcdFxcdCAgIHZvaWQgKnR2bHZfYnVmZiwgdTE2IHR0X2xlbixcXG4tXFx0XFx0XFx0XFx0ICAgYm9vbCAoKnZhbGlkX2NiKShjb25zdCB2b2lkICosXFxuK1xcdFxcdFxcdFxcdCAgIGJvb2wgKCp2YWxpZF9jYikodm9pZCAqLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgY29uc3Qgdm9pZCAqLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgdTggKmZsYWdzKSxcXG4gXFx0XFx0XFx0XFx0ICAgdm9pZCAqY2JfZGF0YSlcXG5AQCAtMzUxMSwxOSArMzY3NSwyMSBAQCBib29sIGJhdGFkdl9pc19teV9jbGllbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXFxuIFxcdFxcdFxcdCB1bnNpZ25lZCBzaG9ydCB2aWQpXFxuIHtcXG4gXFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7XFxuLVxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuK1xcdHUxNiB0dF9mbGFncztcXG4rXFx0Ym9vbCByZXQ7XFxuIFxcbiBcXHR0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7XFxuIFxcdGlmICghdHRfbG9jYWxfZW50cnkpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHR0dF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoXFx1MDAyNnR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24pO1xcbitcXG4gXFx0LyogQ2hlY2sgaWYgdGhlIGNsaWVudCBoYXMgYmVlbiBsb2dpY2FsbHkgZGVsZXRlZCAoYnV0IGlzIGtlcHQgZm9yXFxuIFxcdCAqIGNvbnNpc3RlbmN5IHB1cnBvc2UpXFxuIFxcdCAqL1xcbi1cXHRpZiAoKHR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24uZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpIHx8XFxuLVxcdCAgICAodHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbi1cXHRyZXQgPSB0cnVlO1xcbi1vdXQ6XFxuK1xcdHJldCA9ICEoKHR0X2ZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSB8fFxcbitcXHRcXHQodHRfZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKTtcXG4rXFxuIFxcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTM3ODIsMTYgKzM5NDgsMTMgQEAgdm9pZCBiYXRhZHZfdHRfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxcbiB9XFxuIFxcbiAvKipcXG4tICogYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncygpIC0gc2V0IG9yIHVuc2V0IHRoZSBzcGVjaWZpZWQgZmxhZ3Mgb24gdGhlIGxvY2FsXFxuLSAqICB0YWJsZSBhbmQgcG9zc2libHkgY291bnQgdGhlbSBpbiB0aGUgVFQgc2l6ZVxcbisgKiBiYXRhZHZfdHRfbG9jYWxfdHJhbnNpdGlvbl9uZXcoKSAtIHVuc2V0IHRoZSBORVcgZmxhZyBvbiB0aGUgbG9jYWxcXG4rICogIHRhYmxlIGFuZCBjb3VudCB0aGVtIGluIHRoZSBUVCBzaXplXFxuICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbi0gKiBAZmxhZ3M6IHRoZSBmbGFnIHRvIHN3aXRjaFxcbi0gKiBAZW5hYmxlOiB3aGV0aGVyIHRvIHNldCBvciB1bnNldCB0aGUgZmxhZ1xcbi0gKiBAY291bnQ6IHdoZXRoZXIgdG8gaW5jcmVhc2UgdGhlIFRUIHNpemUgYnkgdGhlIG51bWJlciBvZiBjaGFuZ2VkIGVudHJpZXNcXG4gICovXFxuLXN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9zZXRfZmxhZ3Moc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdTE2IGZsYWdzLFxcbi1cXHRcXHRcXHRcXHQgICAgICBib29sIGVuYWJsZSwgYm9vbCBjb3VudClcXG4rc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3RyYW5zaXRpb25fbmV3KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXFxuIHtcXG4rXFx0c3BpbmxvY2tfdCAqbGlzdF9sb2NrOyAvKiBwcm90ZWN0cyB3cml0ZSBhY2Nlc3MgdG8gdGhlIGhhc2ggbGlzdHMgKi9cXG4gXFx0c3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmhhc2ggPSBiYXRfcHJpdi1cXHUwMDNldHQubG9jYWxfaGFzaDtcXG4gXFx0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeTtcXG4gXFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7XFxuQEAgLTM4MDIsMjcgKzM5NjUsMjggQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1MTYgZmxhZ3MsXFxuIFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaGFzaC1cXHUwMDNlc2l6ZTsgaSsrKSB7XFxuIFxcdFxcdGhlYWQgPSBcXHUwMDI2aGFzaC1cXHUwMDNldGFibGVbaV07XFxuK1xcdFxcdGxpc3RfbG9jayA9IFxcdTAwMjZoYXNoLVxcdTAwM2VsaXN0X2xvY2tzW2ldO1xcbiBcXG4tXFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbi1cXHRcXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfY29tbW9uX2VudHJ5LFxcbi1cXHRcXHRcXHRcXHRcXHQgaGVhZCwgaGFzaF9lbnRyeSkge1xcbi1cXHRcXHRcXHRpZiAoZW5hYmxlKSB7XFxuLVxcdFxcdFxcdFxcdGlmICgodHRfY29tbW9uX2VudHJ5LVxcdTAwM2VmbGFncyBcXHUwMDI2IGZsYWdzKSA9PSBmbGFncylcXG4tXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdFxcdHR0X2NvbW1vbl9lbnRyeS1cXHUwMDNlZmxhZ3MgfD0gZmxhZ3M7XFxuLVxcdFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdFxcdGlmICghKHR0X2NvbW1vbl9lbnRyeS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBmbGFncykpXFxuLVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRcXHR0dF9jb21tb25fZW50cnktXFx1MDAzZWZsYWdzIFxcdTAwMjY9IH5mbGFncztcXG4rXFx0XFx0c3Bpbl9sb2NrX2JoKGxpc3RfbG9jayk7XFxuK1xcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHR0X2NvbW1vbl9lbnRyeSwgaGVhZCwgaGFzaF9lbnRyeSkge1xcbitcXHRcXHRcXHRib29sIGNvbnQgPSBmYWxzZTtcXG4rXFxuK1xcdFxcdFxcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXFx1MDAyNnR0X2NvbW1vbl9lbnRyeS1cXHUwMDNlZmxhZ3NfbG9jaykge1xcbitcXHRcXHRcXHRcXHRpZiAoISh0dF9jb21tb25fZW50cnktXFx1MDAzZWZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKSB7XFxuK1xcdFxcdFxcdFxcdFxcdGNvbnQgPSB0cnVlO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0XFx0dHRfY29tbW9uX2VudHJ5LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9ORVc7XFxuIFxcdFxcdFxcdH1cXG4gXFxuLVxcdFxcdFxcdGlmICghY291bnQpXFxuK1xcdFxcdFxcdGlmIChjb250KVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdGJhdGFkdl90dF9sb2NhbF9zaXplX2luYyhiYXRfcHJpdixcXG4gXFx0XFx0XFx0XFx0XFx0XFx0IHR0X2NvbW1vbl9lbnRyeS1cXHUwMDNldmlkKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgobGlzdF9sb2NrKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0zODU0LDE2ICs0MDE4LDMxIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9wZW5kaW5nX2NsaWVudHMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4gXFx0XFx0c3Bpbl9sb2NrX2JoKGxpc3RfbG9jayk7XFxuIFxcdFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHRfY29tbW9uLCBub2RlX3RtcCwgaGVhZCxcXG4gXFx0XFx0XFx0XFx0XFx0ICBoYXNoX2VudHJ5KSB7XFxuLVxcdFxcdFxcdGlmICghKHR0X2NvbW1vbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpKVxcbi1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0Ym9vbCBjb250ID0gZmFsc2U7XFxuIFxcbi1cXHRcXHRcXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxcbi1cXHRcXHRcXHRcXHQgICBcXFwiRGVsZXRpbmcgbG9jYWwgdHQgZW50cnkgKCVwTSwgdmlkOiAlZCk6IHBlbmRpbmdcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdCAgIHR0X2NvbW1vbi1cXHUwMDNlYWRkcixcXG4tXFx0XFx0XFx0XFx0ICAgYmF0YWR2X3ByaW50X3ZpZCh0dF9jb21tb24tXFx1MDAzZXZpZCkpO1xcbitcXHRcXHRcXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFxcdTAwMjZ0dF9jb21tb24tXFx1MDAzZWZsYWdzX2xvY2spIHtcXG4rXFx0XFx0XFx0XFx0aWYgKCEodHRfY29tbW9uLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykpIHtcXG4rXFx0XFx0XFx0XFx0XFx0Y29udCA9IHRydWU7XFxuK1xcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRcXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxcbitcXHRcXHRcXHRcXHRcXHQgICBcXFwiRGVsZXRpbmcgbG9jYWwgdHQgZW50cnkgKCVwTSwgdmlkOiAlZCk6IHBlbmRpbmdcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHR0X2NvbW1vbi1cXHUwMDNlYWRkcixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgYmF0YWR2X3ByaW50X3ZpZCh0dF9jb21tb24tXFx1MDAzZXZpZCkpO1xcbitcXG4rXFx0XFx0XFx0XFx0aGxpc3RfZGVsX3JjdShcXHUwMDI2dHRfY29tbW9uLVxcdTAwM2VoYXNoX2VudHJ5KTtcXG4rXFxuK1xcdFxcdFxcdFxcdC8qIEFuIGVudHJ5IHdoaWNoIHN0aWxsIGNhcnJpZXMgQkFUQURWX1RUX0NMSUVOVF9ORVcgd2FzXFxuK1xcdFxcdFxcdFxcdCAqIG5ldmVyIGNvdW50ZWQgYW5kIG11c3Qgbm90IGJlIHVuY291bnRlZCBoZXJlLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0aWYgKCEodHRfY29tbW9uLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKSlcXG4rXFx0XFx0XFx0XFx0XFx0YmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9jb21tb24tXFx1MDAzZXZpZCk7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdGlmIChjb250KVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuLVxcdFxcdFxcdGJhdGFkdl90dF9sb2NhbF9zaXplX2RlYyhiYXRfcHJpdiwgdHRfY29tbW9uLVxcdTAwM2V2aWQpO1xcbi1cXHRcXHRcXHRobGlzdF9kZWxfcmN1KFxcdTAwMjZ0dF9jb21tb24tXFx1MDAzZWhhc2hfZW50cnkpO1xcbiBcXHRcXHRcXHR0dF9sb2NhbCA9IGNvbnRhaW5lcl9vZih0dF9jb21tb24sXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGNvbW1vbik7XFxuQEAgLTM4OTEsNyArNDA3MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9jb21taXRfY2hhbmdlc19ub2xvY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuIFxcbi1cXHRiYXRhZHZfdHRfbG9jYWxfc2V0X2ZsYWdzKGJhdF9wcml2LCBCQVRBRFZfVFRfQ0xJRU5UX05FVywgZmFsc2UsIHRydWUpO1xcbitcXHRiYXRhZHZfdHRfbG9jYWxfdHJhbnNpdGlvbl9uZXcoYmF0X3ByaXYpO1xcbiBcXG4gXFx0YmF0YWR2X3R0X2xvY2FsX3B1cmdlX3BlbmRpbmdfY2xpZW50cyhiYXRfcHJpdik7XFxuIFxcdGJhdGFkdl90dF9sb2NhbF91cGRhdGVfY3JjKGJhdF9wcml2KTtcXG5AQCAtNDA2MSwxNSArNDI0MCwxNiBAQCBib29sIGJhdGFkdl90dF9nbG9iYWxfY2xpZW50X2lzX3JvYW1pbmcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gXFx0XFx0XFx0XFx0XFx0dTggKmFkZHIsIHVuc2lnbmVkIHNob3J0IHZpZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5O1xcbi1cXHRib29sIHJldCA9IGZhbHNlO1xcbitcXHRib29sIHJldDtcXG4gXFxuIFxcdHR0X2dsb2JhbF9lbnRyeSA9IGJhdGFkdl90dF9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xcbiBcXHRpZiAoIXR0X2dsb2JhbF9lbnRyeSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldCA9IGJhdGFkdl90dF9mbGFnc19nZXQoXFx1MDAyNnR0X2dsb2JhbF9lbnRyeS1cXHUwMDNlY29tbW9uKSBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG4gXFxuLVxcdHJldCA9IHR0X2dsb2JhbF9lbnRyeS1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbiBcXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWxfZW50cnkpO1xcbi1vdXQ6XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC00MDg3LDE1ICs0MjY3LDE2IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgICB1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbiB7XFxuIFxcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5O1xcbi1cXHRib29sIHJldCA9IGZhbHNlO1xcbitcXHRib29sIHJldDtcXG4gXFxuIFxcdHR0X2xvY2FsX2VudHJ5ID0gYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcXG4gXFx0aWYgKCF0dF9sb2NhbF9lbnRyeSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdHJldCA9IGJhdGFkdl90dF9mbGFnc19nZXQoXFx1MDAyNnR0X2xvY2FsX2VudHJ5LVxcdTAwM2Vjb21tb24pIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xcbiBcXG4tXFx0cmV0ID0gdHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbi5mbGFncyBcXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcXG4gXFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XFxuLW91dDpcXG4rXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTQ0MDQsNyArNDU4NSw3IEBAIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9pc19pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiBcXHRpZiAoIXR0KVxcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXQgPSB0dC1cXHUwMDNlY29tbW9uLmZsYWdzIFxcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQTtcXG4rXFx0cmV0ID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcXHUwMDI2dHQtXFx1MDAzZWNvbW1vbikgXFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX0lTT0xBO1xcbiBcXG4gXFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHQpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaCBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcXG5pbmRleCA5YmRjNWEzZTc5OWUyLi42Nzg3MjkyN2NmYjUwIDEwMDY0NFxcbi0tLSBhL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcXG4rKysgYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oXFxuQEAgLTQxMCw3ICs0MTAsNyBAQCBzdHJ1Y3QgYmF0YWR2X29yaWdfYmF0X2l2IHtcXG4gICovXFxuIHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlIHtcXG4gXFx0LyoqIEBvcmlnOiBvcmlnaW5hdG9yIGV0aGVybmV0IGFkZHJlc3MgKi9cXG4tXFx0dTggb3JpZ1tFVEhfQUxFTl07XFxuK1xcdHU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG4gXFxuIFxcdC8qKiBAaWZpbmZvX2xpc3Q6IGxpc3QgZm9yIHJvdXRlcnMgcGVyIG91dGdvaW5nIGludGVyZmFjZSAqL1xcbiBcXHRzdHJ1Y3QgaGxpc3RfaGVhZCBpZmluZm9fbGlzdDtcXG5AQCAtNjM0LDEyICs2MzQsMTIgQEAgc3RydWN0IGJhdGFkdl9oYXJkaWZfbmVpZ2hfbm9kZSB7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7XFxuIFxcbiBcXHQvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbmVpZ2hib3JpbmcgaW50ZXJmYWNlICovXFxuLVxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbitcXHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcbiBcXHQvKipcXG4gXFx0ICogQG9yaWc6IHRoZSBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hdG9yIHRoaXMgbmVpZ2hib3Igbm9kZSBiZWxvbmdzIHRvXFxuIFxcdCAqL1xcbi1cXHR1OCBvcmlnW0VUSF9BTEVOXTtcXG4rXFx0dTggb3JpZ1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiBcXG4gXFx0LyoqIEBpZl9pbmNvbWluZzogcG9pbnRlciB0byBpbmNvbWluZyBoYXJkLWludGVyZmFjZSAqL1xcbiBcXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX2luY29taW5nO1xcbkBAIC02NzcsNyArNjc3LDcgQEAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlIHtcXG4gI2VuZGlmXFxuIFxcbiBcXHQvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbmVpZ2hib3JpbmcgaW50ZXJmYWNlICovXFxuLVxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbitcXHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcbiBcXHQvKiogQGlmaW5mb19saXN0OiBsaXN0IGZvciByb3V0aW5nIG1ldHJpY3MgcGVyIG91dGdvaW5nIGludGVyZmFjZSAqL1xcbiBcXHRzdHJ1Y3QgaGxpc3RfaGVhZCBpZmluZm9fbGlzdDtcXG5AQCAtNzc3LDcgKzc3Nyw3IEBAIHN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvIHtcXG4gICovXFxuIHN0cnVjdCBiYXRhZHZfYmNhc3RfZHVwbGlzdF9lbnRyeSB7XFxuIFxcdC8qKiBAb3JpZzogbWFjIGFkZHJlc3Mgb2Ygb3JpZyBub2RlIG9yaWdpbmF0aW5nIHRoZSBicm9hZGNhc3QgKi9cXG4tXFx0dTggb3JpZ1tFVEhfQUxFTl07XFxuK1xcdHU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG4gXFxuIFxcdC8qKiBAY3JjOiBjcmMzMiBjaGVja3N1bSBvZiBicm9hZGNhc3QgcGF5bG9hZCAqL1xcbiBcXHR1MzIgY3JjO1xcbkBAIC0xMDg1LDcgKzEwODUsNyBAQCBzdHJ1Y3QgYmF0YWR2X3ByaXZfYmxhIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmJhY2tib25lX2hhc2g7XFxuIFxcbiBcXHQvKiogQGxvb3BkZXRlY3RfYWRkcjogTUFDIGFkZHJlc3MgdXNlZCBmb3Igb3duIGxvb3BkZXRlY3Rpb24gZnJhbWVzICovXFxuLVxcdHU4IGxvb3BkZXRlY3RfYWRkcltFVEhfQUxFTl07XFxuK1xcdHU4IGxvb3BkZXRlY3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiBcXG4gXFx0LyoqXFxuIFxcdCAqIEBsb29wZGV0ZWN0X2xhc3R0aW1lOiB0aW1lIHdoZW4gdGhlIGxvb3BkZXRlY3Rpb24gZnJhbWVzIHdlcmUgc2VudFxcbkBAIC0xMzUyLDcgKzEzNTIsNyBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIHtcXG4gXFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdjtcXG4gXFxuIFxcdC8qKiBAb3RoZXJfZW5kOiBtYWMgYWRkcmVzcyBvZiByZW1vdGUgKi9cXG4tXFx0dTggb3RoZXJfZW5kW0VUSF9BTEVOXTtcXG4rXFx0dTggb3RoZXJfZW5kW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcbiBcXHQvKiogQHNlc3Npb246IFRQIHNlc3Npb24gaWRlbnRpZmllciAqL1xcbiBcXHR1OCBzZXNzaW9uWzJdO1xcbkBAIC0xNzY1LDcgKzE3NjUsNyBAQCBzdHJ1Y3QgYmF0YWR2X2JsYV9iYWNrYm9uZV9ndyB7XFxuIFxcdCAqIEBvcmlnOiBvcmlnaW5hdG9yIGFkZHJlc3Mgb2YgYmFja2JvbmUgbm9kZSAobWFjIGFkZHJlc3Mgb2YgcHJpbWFyeVxcbiBcXHQgKiAgaWZhY2UpXFxuIFxcdCAqL1xcbi1cXHR1OCBvcmlnW0VUSF9BTEVOXTtcXG4rXFx0dTggb3JpZ1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiBcXG4gXFx0LyoqIEB2aWQ6IHZsYW4gaWQgdGhpcyBnYXRld2F5IHdhcyBkZXRlY3RlZCBvbiAqL1xcbiBcXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XFxuQEAgLTE4MTAsNyArMTgxMCw3IEBAIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3IHtcXG4gICovXFxuIHN0cnVjdCBiYXRhZHZfYmxhX2NsYWltIHtcXG4gXFx0LyoqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiBjbGFpbWVkIG5vbi1tZXNoIGNsaWVudCAqL1xcbi1cXHR1OCBhZGRyW0VUSF9BTEVOXTtcXG4rXFx0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiBcXG4gXFx0LyoqIEB2aWQ6IHZsYW4gaWQgdGhpcyBjbGllbnQgd2FzIGRldGVjdGVkIG9uICovXFxuIFxcdHVuc2lnbmVkIHNob3J0IHZpZDtcXG5AQCAtMTg0MCw3ICsxODQwLDcgQEAgc3RydWN0IGJhdGFkdl9ibGFfY2xhaW0ge1xcbiAgKi9cXG4gc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkge1xcbiBcXHQvKiogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIG5vbi1tZXNoIGNsaWVudCAqL1xcbi1cXHR1OCBhZGRyW0VUSF9BTEVOXTtcXG4rXFx0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiBcXG4gXFx0LyoqIEB2aWQ6IFZMQU4gaWRlbnRpZmllciAqL1xcbiBcXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XFxuQEAgLTE4NTEsMTIgKzE4NTEsMjEgQEAgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkge1xcbiBcXHQgKi9cXG4gXFx0c3RydWN0IGhsaXN0X25vZGUgaGFzaF9lbnRyeTtcXG4gXFxuLVxcdC8qKiBAZmxhZ3M6IHZhcmlvdXMgc3RhdGUgaGFuZGxpbmcgZmxhZ3MgKHNlZSBiYXRhZHZfdHRfY2xpZW50X2ZsYWdzKSAqL1xcbitcXHQvKipcXG4rXFx0ICogQGZsYWdzOiB2YXJpb3VzIHN0YXRlIGhhbmRsaW5nIGZsYWdzIChzZWUgYmF0YWR2X3R0X2NsaWVudF9mbGFncyksXFxuK1xcdCAqIHByb3RlY3RlZCBieSBAZmxhZ3NfbG9ja1xcbitcXHQgKi9cXG4gXFx0dTE2IGZsYWdzO1xcbiBcXG4gXFx0LyoqIEBhZGRlZF9hdDogdGltZXN0YW1wIHVzZWQgZm9yIHB1cmdpbmcgc3RhbGUgdHQgY29tbW9uIGVudHJpZXMgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBhZGRlZF9hdDtcXG4gXFxuK1xcdC8qKlxcbitcXHQgKiBAZmxhZ3NfbG9jazogcHJvdGVjdCBtb2RpZmljYXRpb25zIG9mIEBmbGFncyBhbmRcXG4rXFx0ICogIEBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5LnJvYW1fYXRcXG4rXFx0ICovXFxuK1xcdHNwaW5sb2NrX3QgZmxhZ3NfbG9jaztcXG4rXFxuIFxcdC8qKiBAcmVmY291bnQ6IG51bWJlciBvZiBjb250ZXh0cyB0aGUgb2JqZWN0IGlzIHVzZWQgKi9cXG4gXFx0c3RydWN0IGtyZWYgcmVmY291bnQ7XFxuIFxcbkBAIC0xOTQyLDcgKzE5NTEsNyBAQCBzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlIHtcXG4gXFx0LyoqXFxuIFxcdCAqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiB0aGUgb3JpZ2luYXRvciB0aGlzIHJlcXVlc3Qgd2FzIHNlbnQgdG9cXG4gXFx0ICovXFxuLVxcdHU4IGFkZHJbRVRIX0FMRU5dO1xcbitcXHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIFxcbiBcXHQvKiogQGlzc3VlZF9hdDogdGltZXN0YW1wIHVzZWQgZm9yIHB1cmdpbmcgc3RhbGUgdHQgcmVxdWVzdHMgKi9cXG4gXFx0dW5zaWduZWQgbG9uZyBpc3N1ZWRfYXQ7XFxuQEAgLTE5NTksNyArMTk2OCw3IEBAIHN0cnVjdCBiYXRhZHZfdHRfcmVxX25vZGUge1xcbiAgKi9cXG4gc3RydWN0IGJhdGFkdl90dF9yb2FtX25vZGUge1xcbiBcXHQvKiogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIHRoZSBjbGllbnQgaW4gdGhlIHJvYW1pbmcgcGhhc2UgKi9cXG4tXFx0dTggYWRkcltFVEhfQUxFTl07XFxuK1xcdHU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG4gXFxuIFxcdC8qKiBAdmlkOiBWTEFOIGlkZW50aWZpZXIgKi9cXG4gXFx0dTE2IHZpZDtcXG5AQCAtMjA4NywxNCArMjA5NiwxNCBAQCBzdHJ1Y3QgYmF0YWR2X2FsZ29fbmVpZ2hfb3BzIHtcXG4gXFx0XFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzIpO1xcbiBcXG4gXFx0LyoqXFxuLVxcdCAqIEBpc19zaW1pbGFyX29yX2JldHRlcjogY2hlY2sgaWYgbmVpZ2gxIGlzIGVxdWFsbHkgc2ltaWxhciBvciBiZXR0ZXJcXG4tXFx0ICogIHRoYW4gbmVpZ2gyIGZvciB0aGVpciByZXNwZWN0aXZlIG91dGdvaW5nIGludGVyZmFjZSBmcm9tIHRoZSBtZXRyaWNcXG4rXFx0ICogQGlzX3NpbWlsYXJfb3JfYmV0dGVyOiBjaGVjayBpZiBAY2FuZGlkYXRlIGlzIGVxdWFsbHkgc2ltaWxhciBvciBiZXR0ZXJcXG4rXFx0ICogIHRoYW4gQHJlZmVyZW5jZSBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBvdXRnb2luZyBpbnRlcmZhY2UgZnJvbSB0aGUgbWV0cmljXFxuIFxcdCAqICBwcm9zcGVjdGl2ZVxcbiBcXHQgKi9cXG4tXFx0Ym9vbCAoKmlzX3NpbWlsYXJfb3JfYmV0dGVyKShzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMSxcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMik7XFxuK1xcdGJvb2wgKCppc19zaW1pbGFyX29yX2JldHRlcikoc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLFxcbitcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKTtcXG4gXFxuIFxcdC8qKiBAZHVtcDogZHVtcCBuZWlnaGJvcnMgdG8gYSBuZXRsaW5rIHNvY2tldCAob3B0aW9uYWwpICovXFxuIFxcdHZvaWQgKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuQEAgLTIyMDQsNyArMjIxMyw3IEBAIHN0cnVjdCBiYXRhZHZfaHdfYWRkciB7XFxuIFxcdHN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7XFxuIFxcbiBcXHQvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGlzIGxpc3QgZW50cnkgKi9cXG4tXFx0dW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXTtcXG4rXFx0dW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuIH07XFxuIFxcbiAvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzE6NTUuNTYxNjE5MTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1ODM0MjgwMDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJBVE1BTl9BRFZcIixcbiAgICBcIkJBVE1BTl9BRFZfQkFUTUFOX1ZcIixcbiAgICBcIkJBVE1BTl9BRFZfQkxBXCIsXG4gICAgXCJCQVRNQU5fQURWX0RBVFwiLFxuICAgIFwiQkFUTUFOX0FEVl9NQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJhdGFkdl90dF9sb2NhbF9hZGRcIixcbiAgICBcImJhdGFkdl90dF9sb2NhbF9yZW1vdmVcIixcbiAgICBcImJhdGFkdl90cmFuc3RhYmxlX3NlYXJjaFwiLFxuICAgIFwiYmF0YWR2X2lzX215X2NsaWVudFwiLFxuICAgIFwiYmF0YWR2X3R0X2dsb2JhbF9pc19pc29sYXRlZFwiLFxuICAgIFwiYmF0YWR2X3R0X2dsb2JhbF9jbGllbnRfaXNfcm9hbWluZ1wiLFxuICAgIFwiYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIGFuZCBidWcgZml4ZXMgaW4gdGhlIEIuQS5ULk0uQS5OLiBBZHZhbmNlZCBtZXNoIHByb3RvY29sIHN1YnN5c3RlbSAobmV0L2JhdG1hbi1hZHYvKS4gS2V5IGNoYW5nZXMgaW5jbHVkZSBhZGRpbmcgc3BpbmxvY2sgcHJvdGVjdGlvbiAoZmxhZ3NfbG9jaykgdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zIHdoZW4gcmVhZGluZyBhbmQgbXV0YXRpbmcgdHJhbnNsYXRpb24gdGFibGUgZW50cnkgZmxhZ3MsIGZpeGluZyBleGFjdCBvYmplY3QgcmVtb3ZhbCBmcm9tIGhhc2ggYnVja2V0cyAoYmF0YWR2X2NvbXBhcmVfdHRfZW50cnkpLCBjb3JyZWN0aW5nIHRoZSBCLkEuVC5NLkEuTi4gViBuZWlnaGJvciBjb21wYXJpc29uIGNhbGN1bGF0aW9uIGxvZ2ljIGluIGJhdGFkdl92X25laWdoX2lzX3NvYigpLCBhbmQgYWRkaW5nIDItYnl0ZSBhbGlnbm1lbnQgYXR0cmlidXRlcyB0byBNQUMgYWRkcmVzcyBidWZmZXJzLiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGNvcmUgZXhlY3V0aW9uIGZsb3dzIGFuZCBzdGF0ZSBoYW5kbGluZyB0aGF0IGFyZSBmdWxseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWwgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmNDdlYTNmOWE3NjkxOGE5OTIzN2NlNzMxZDdjZjZlODU3NzVkMDA3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMzEgMjA6MzE6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmMgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcbmluZGV4IDUzZmJkYmJlOGY0ZjcuLjNmZTA5YjRjMzA0NjMgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcbisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uY1xuQEAgLTI0MjQsMjUgKzI0MjQsMjYgQEAgc3RhdGljIGludCBiYXRhZHZfaXZfb2dtX25laWdoX2NtcChzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSxcbiAvKipcbiAgKiBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpIC0gY2hlY2sgaWYgbmVpZ2gxIGlzIHNpbWlsYXJseSBnb29kIG9yIGJldHRlclxuICAqICB0aGFuIG5laWdoMiBmcm9tIHRoZSBtZXRyaWMgcHJvc3BlY3RpdmVcbi0gKiBAbmVpZ2gxOiB0aGUgZmlyc3QgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uXG4tICogQGlmX291dGdvaW5nMTogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgZmlyc3QgbmVpZ2hib3Jcbi0gKiBAbmVpZ2gyOiB0aGUgc2Vjb25kIG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvblxuLSAqIEBpZl9vdXRnb2luZzI6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIHNlY29uZCBuZWlnaGJvclxuKyAqIEBjYW5kaWRhdGU6IHRoZSBmaXJzdCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cbisgKiBAaWZfb3V0Z29pbmdfY2FuZDogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgQGNhbmRpZGF0ZSBuZWlnaGJvclxuKyAqIEByZWZlcmVuY2U6IHRoZSBzZWNvbmQgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uXG4rICogQGlmX291dGdvaW5nX3JlZjogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgQHJlZmVyZW5jZSBuZWlnaGJvclxuICAqXG4tICogUmV0dXJuOiB0cnVlIGlmIHRoZSBtZXRyaWMgdmlhIG5laWdoMSBpcyBlcXVhbGx5IGdvb2Qgb3IgYmV0dGVyIHRoYW5cbi0gKiB0aGUgbWV0cmljIHZpYSBuZWlnaDIsIGZhbHNlIG90aGVyd2lzZS5cbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIG1ldHJpYyB2aWEgQGNhbmRpZGF0ZSBpcyBlcXVhbGx5IGdvb2Qgb3IgYmV0dGVyIHRoYW5cbisgKiB0aGUgbWV0cmljIHZpYSBAcmVmZXJlbmNlLCBmYWxzZSBvdGhlcndpc2UuXG4gICovXG4gc3RhdGljIGJvb2xcbi1iYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYihzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSxcbi1cdFx0XHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMSxcbi1cdFx0XHQgICBzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMixcbi1cdFx0XHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMilcbitiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYihzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKmNhbmRpZGF0ZSxcbitcdFx0XHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nX2NhbmQsXG4rXHRcdFx0ICAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpyZWZlcmVuY2UsXG4rXHRcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19yZWYpXG4ge1xuIFx0Ym9vbCByZXQ7XG4gXHRpbnQgZGlmZjtcbiBcbi1cdHJldCA9IGJhdGFkdl9pdl9vZ21fbmVpZ2hfZGlmZihuZWlnaDEsIGlmX291dGdvaW5nMSwgbmVpZ2gyLFxuLVx0XHRcdFx0ICAgICAgIGlmX291dGdvaW5nMiwgXHUwMDI2ZGlmZik7XG4rXHRyZXQgPSBiYXRhZHZfaXZfb2dtX25laWdoX2RpZmYoY2FuZGlkYXRlLCBpZl9vdXRnb2luZ19jYW5kLFxuK1x0XHRcdFx0ICAgICAgIHJlZmVyZW5jZSwgaWZfb3V0Z29pbmdfcmVmLFxuK1x0XHRcdFx0ICAgICAgIFx1MDAyNmRpZmYpO1xuIFx0aWYgKCFyZXQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9iYXRfdi5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X3YuY1xuaW5kZXggMGMyNzQ0N2NmNjg4OS4uNTk2ODg5YjM1MjJkMCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JhdF92LmNcbisrKyBiL25ldC9iYXRtYW4tYWR2L2JhdF92LmNcbkBAIC01MTQsNDAgKzUxNCw0MCBAQCBzdGF0aWMgaW50IGJhdGFkdl92X25laWdoX2NtcChzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSxcbiAvKipcbiAgKiBiYXRhZHZfdl9uZWlnaF9pc19zb2IoKSAtIGNoZWNrIHdoZXRoZXIgdHdvIEIuQS5ULk0uQS5OLiBWIG5laWdoYm91cnMgaGF2ZVxuICAqICBhIHNpbWlsYXIgb3IgYmV0dGVyIHRocm91Z2hwdXRcbi0gKiBAbmVpZ2gxOiBmaXJzdCBuZWlnaGJvdXIgdG8gY29tcGFyZVxuLSAqIEBpZl9vdXRnb2luZzE6IG91dGdvaW5nIGludGVyZmFjZSB0byB1c2UgZm9yIEBuZWlnaDFcbi0gKiBAbmVpZ2gyOiBzZWNvbmQgbmVpZ2hib3VyIHRvIGNvbXBhcmVcbi0gKiBAaWZfb3V0Z29pbmcyOiBvdXRnb2luZyBpbnRlcmZhY2UgdG8gdXNlIGZvciBAbmVpZ2gyXG4rICogQGNhbmRpZGF0ZTogdGhlIGZpcnN0IG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvblxuKyAqIEBpZl9vdXRnb2luZ19jYW5kOiBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIHRoZSBAY2FuZGlkYXRlIG5laWdoYm9yXG4rICogQHJlZmVyZW5jZTogdGhlIHNlY29uZCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cbisgKiBAaWZfb3V0Z29pbmdfcmVmOiBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIHRoZSBAcmVmZXJlbmNlIG5laWdoYm9yXG4gICpcbi0gKiBSZXR1cm46IHRydWUgaWYgdGhlIHRocm91Z2hwdXQgb2YgQG5laWdoMiBpcyBhdCBsZWFzdCAzLzQgb2YgdGhlXG4tICogIEBuZWlnaDEgdGhyb3VnaHB1dFxuKyAqIFJldHVybjogdHJ1ZSBpZiB0aGUgdGhyb3VnaHB1dCBvZiBAY2FuZGlkYXRlIGlzIG1vcmUgdGhhbiAzLzQgb2YgdGhlXG4rICogIEByZWZlcmVuY2UgdGhyb3VnaHB1dFxuICAqL1xuLXN0YXRpYyBib29sIGJhdGFkdl92X25laWdoX2lzX3NvYihzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSxcbi1cdFx0XHRcdCAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzEsXG4tXHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gyLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMilcbitzdGF0aWMgYm9vbCBiYXRhZHZfdl9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsXG4rXHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfY2FuZCxcbitcdFx0XHRcdCAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpyZWZlcmVuY2UsXG4rXHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKVxuIHtcbi1cdHN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm8xO1xuLVx0c3RydWN0IGJhdGFkdl9uZWlnaF9pZmluZm8gKmlmaW5mbzI7XG4rXHRzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyAqaWZpbmZvX2NhbmQ7XG4rXHRzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyAqaWZpbmZvX3JlZjtcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXHR1MzIgdGhyZXNob2xkO1xuIFxuLVx0aWZpbmZvMSA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KG5laWdoMSwgaWZfb3V0Z29pbmcxKTtcbi1cdGlmICghaWZpbmZvMSlcbitcdGlmaW5mb19jYW5kID0gYmF0YWR2X25laWdoX2lmaW5mb19nZXQoY2FuZGlkYXRlLCBpZl9vdXRnb2luZ19jYW5kKTtcbitcdGlmICghaWZpbmZvX2NhbmQpXG4gXHRcdGdvdG8gZXJyX2lmaW5mbzE7XG4gXG4tXHRpZmluZm8yID0gYmF0YWR2X25laWdoX2lmaW5mb19nZXQobmVpZ2gyLCBpZl9vdXRnb2luZzIpO1xuLVx0aWYgKCFpZmluZm8yKVxuK1x0aWZpbmZvX3JlZiA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KHJlZmVyZW5jZSwgaWZfb3V0Z29pbmdfcmVmKTtcbitcdGlmICghaWZpbmZvX3JlZilcbiBcdFx0Z290byBlcnJfaWZpbmZvMjtcbiBcbi1cdHRocmVzaG9sZCA9IGlmaW5mbzEtXHUwMDNlYmF0X3YudGhyb3VnaHB1dCAvIDQ7XG4tXHR0aHJlc2hvbGQgPSBpZmluZm8xLVx1MDAzZWJhdF92LnRocm91Z2hwdXQgLSB0aHJlc2hvbGQ7XG4rXHR0aHJlc2hvbGQgPSBpZmluZm9fcmVmLVx1MDAzZWJhdF92LnRocm91Z2hwdXQgLyA0O1xuK1x0dGhyZXNob2xkID0gaWZpbmZvX3JlZi1cdTAwM2ViYXRfdi50aHJvdWdocHV0IC0gdGhyZXNob2xkO1xuIFxuLVx0cmV0ID0gaWZpbmZvMi1cdTAwM2ViYXRfdi50aHJvdWdocHV0IFx1MDAzZSB0aHJlc2hvbGQ7XG4rXHRyZXQgPSBpZmluZm9fY2FuZC1cdTAwM2ViYXRfdi50aHJvdWdocHV0IFx1MDAzZSB0aHJlc2hvbGQ7XG4gXG4tXHRiYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm8yKTtcbitcdGJhdGFkdl9uZWlnaF9pZmluZm9fcHV0KGlmaW5mb19yZWYpO1xuIGVycl9pZmluZm8yOlxuLVx0YmF0YWR2X25laWdoX2lmaW5mb19wdXQoaWZpbmZvMSk7XG4rXHRiYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm9fY2FuZCk7XG4gZXJyX2lmaW5mbzE6XG4gXHRyZXR1cm4gcmV0O1xuIH1cbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYyBiL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXG5pbmRleCBmNjM1ZGE0YjhjYTY1Li5hZDZhYjRhNTA2NThmIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcbisrKyBiL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXG5AQCAtNjYzLDcgKzY2Myw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9yZXF1ZXN0KHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3ICpiYWNrYm9uZV9ndylcbiBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfYW5ub3VuY2Uoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9ibGFfYmFja2JvbmVfZ3cgKmJhY2tib25lX2d3KVxuIHtcbi1cdHU4IG1hY1tFVEhfQUxFTl07XG4rXHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdF9fYmUxNiBjcmM7XG4gXG4gXHRtZW1jcHkobWFjLCBiYXRhZHZfYW5ub3VuY2VfbWFjLCA0KTtcbkBAIC0xNTgyLDcgKzE1ODIsOSBAQCBzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGJhdGFkdl9iYWNrYm9uZV9oYXNoX2xvY2tfY2xhc3Nfa2V5O1xuICAqL1xuIGludCBiYXRhZHZfYmxhX2luaXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbiB7XG4tXHR1OCBjbGFpbV9kZXN0W0VUSF9BTEVOXSA9IHsweGZmLCAweDQzLCAweDA1LCAweDAwLCAweDAwLCAweDAwfTtcbitcdHN0YXRpYyBjb25zdCB1OCBjbGFpbV9kZXN0W0VUSF9BTEVOXSBfX2FsaWduZWQoMikgPSB7XG4rXHRcdDB4ZmYsIDB4NDMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MDBcbitcdH07XG4gXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWY7XG4gXHR1bnNpZ25lZCBsb25nIGVudHJ5dGltZTtcbiBcdHUxNiBjcmM7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuY1xuaW5kZXggMDExY2ZkYzQ3ZmFiNC4uYTRiZTViMmE4N2Q3YSAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuY1xuQEAgLTU0OCw3ICs1NDgsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfZGJnX2FycChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdGJyZWFrO1xuIFx0XHRkZWZhdWx0OlxuIFx0XHRcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19EQVQsIGJhdF9wcml2LCBcIiogdHlwZTogVW5rbm93biAoJXUpIVxcblwiLFxuLVx0XHRcdFx0ICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtXHUwMDNldS5wYWNrZXRfdHlwZSk7XG4rXHRcdFx0XHQgICB1bmljYXN0XzRhZGRyX3BhY2tldC1cdTAwM2VzdWJ0eXBlKTtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgQkFUQURWX0JDQVNUOlxuQEAgLTk0MCw3ICs5NDAsNyBAQCBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcbiBcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiLFxuIFx0XHRcdCAgICBzdHJ1Y3QgYmF0YWR2X2RhdF9lbnRyeSAqZGF0X2VudHJ5KVxuIHtcbi1cdHU4IG1hY1tFVEhfQUxFTl07XG4rXHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdHU2NCB1NjRfbWFjO1xuIFx0aW50IG1zZWNzO1xuIFx0dm9pZCAqaGRyO1xuQEAgLTEyMzYsMTAgKzEyMzYsMTAgQEAgYm9vbCBiYXRhZHZfZGF0X3Nub29wX291dGdvaW5nX2FycF9yZXF1ZXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4ge1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UgPSBiYXRfcHJpdi1cdTAwM2VtZXNoX2lmYWNlO1xuIFx0c3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSA9IE5VTEw7XG4rXHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdHN0cnVjdCBza19idWZmICpza2JfbmV3O1xuIFx0dW5zaWduZWQgc2hvcnQgdmlkO1xuIFx0Ym9vbCByZXQgPSBmYWxzZTtcbi1cdHU4IG1hY1tFVEhfQUxFTl07XG4gXHRpbnQgaGRyX3NpemUgPSAwO1xuIFx0X19iZTMyIGlwX2RzdDtcbiBcdF9fYmUzMiBpcF9zcmM7XG5AQCAtMTM0NCwxMCArMTM0NCwxMCBAQCBib29sIGJhdGFkdl9kYXRfc25vb3BfaW5jb21pbmdfYXJwX3JlcXVlc3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9zaXplKVxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfZGF0X2VudHJ5ICpkYXRfZW50cnkgPSBOVUxMO1xuK1x0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX25ldztcbiBcdHVuc2lnbmVkIHNob3J0IHZpZDtcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4tXHR1OCBtYWNbRVRIX0FMRU5dO1xuIFx0X19iZTMyIGlwX3NyYztcbiBcdF9fYmUzMiBpcF9kc3Q7XG4gXHR1NjQgdTY0X21hYztcbkBAIC0xNDc0LDkgKzE0NzQsOSBAQCBib29sIGJhdGFkdl9kYXRfc25vb3BfaW5jb21pbmdfYXJwX3JlcGx5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX3NpemUpXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSA9IE5VTEw7XG4rXHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdGJvb2wgZHJvcHBlZCA9IGZhbHNlO1xuIFx0dW5zaWduZWQgc2hvcnQgdmlkO1xuLVx0dTggbWFjW0VUSF9BTEVOXTtcbiBcdF9fYmUzMiBpcF9zcmM7XG4gXHRfX2JlMzIgaXBfZHN0O1xuIFx0dTY0IHU2NF9tYWM7XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYyBiL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmNcbmluZGV4IGUyMDIwODhjZjFmZDQuLjYzYWYyMTk1NGNmOTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG5AQCAtMTQxLDkgKzE0MSw5IEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYmF0YWR2X2ludGVyZmFjZV9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBpbnQgYmF0YWR2X2ludGVyZmFjZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcClcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdHU4IG9sZF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuIFx0c3RydWN0IHNvY2thZGRyICphZGRyID0gcDtcbi1cdHU4IG9sZF9hZGRyW0VUSF9BTEVOXTtcbiBcbiBcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLVx1MDAzZXNhX2RhdGEpKVxuIFx0XHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XG5AQCAtMjEzLDEzICsyMTMsMTggQEAgc3RhdGljIHZvaWQgYmF0YWR2X2ludGVyZmFjZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHN0YXRpYyBuZXRkZXZfdHhfdCBiYXRhZHZfaW50ZXJmYWNlX3R4KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UpXG4ge1xuLVx0c3RhdGljIGNvbnN0IHU4IGVjdHBfYWRkcltFVEhfQUxFTl0gPSB7MHhDRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMH07XG4tXHRzdGF0aWMgY29uc3QgdTggc3RwX2FkZHJbRVRIX0FMRU5dID0gezB4MDEsIDB4ODAsIDB4QzIsIDB4MDAsIDB4MDAsIDB4MDB9O1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG1lc2hfaWZhY2UpO1xuIFx0ZW51bSBiYXRhZHZfZGhjcF9yZWNpcGllbnQgZGhjcF9yY3AgPSBCQVRBRFZfREhDUF9OTztcbiBcdGVudW0gYmF0YWR2X2ZvcndfbW9kZSBmb3J3X21vZGUgPSBCQVRBRFZfRk9SV19CQ0FTVDtcbitcdHN0YXRpYyBjb25zdCB1OCBlY3RwX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKSA9IHtcbitcdFx0MHhDRiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMFxuK1x0fTtcbitcdHN0YXRpYyBjb25zdCB1OCBzdHBfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpID0ge1xuK1x0XHQweDAxLCAweDgwLCAweEMyLCAweDAwLCAweDAwLCAweDAwXG4rXHR9O1xuIFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmID0gTlVMTDtcbiBcdHN0cnVjdCBiYXRhZHZfYmNhc3RfcGFja2V0ICpiY2FzdF9wYWNrZXQ7XG4rXHR1OCBjaGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdGludCBuZXR3b3JrX29mZnNldCA9IEVUSF9ITEVOO1xuIFx0dW5zaWduZWQgaW50IGhlYWRlcl9sZW4gPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBicmRfZGVsYXkgPSAwO1xuQEAgLTIyOSw3ICsyMzQsNiBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0c3RydWN0IGV0aGhkciAqZXRoaGRyO1xuIFx0Ym9vbCBkb19iY2FzdCA9IGZhbHNlO1xuIFx0dTggKmRzdF9oaW50ID0gTlVMTDtcbi1cdHU4IGNoYWRkcltFVEhfQUxFTl07XG4gXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XG4gXHRib29sIGNsaWVudF9hZGRlZDtcbiBcdF9fYmUxNiBwcm90bztcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYyBiL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jXG5pbmRleCA4MmZkNTI3YjYxYzAyLi4yMmRkMjhkNWUxYWJjIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmNcbisrKyBiL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jXG5AQCAtMzY4LDkgKzM2OCw5IEBAIGJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgc3RydWN0IGhsaXN0X2hlYWQgKm1jYXN0X2xpc3QsXG4gXHRcdFx0XHQgc3RydWN0IGJhdGFkdl9tY2FzdF9tbGFfZmxhZ3MgKmZsYWdzKVxuIHtcbitcdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdHN0cnVjdCBiYXRhZHZfaHdfYWRkciAqbmV3O1xuIFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2O1xuLVx0dTggbWNhc3RfYWRkcltFVEhfQUxFTl07XG4gXHRzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jO1xuIFx0aW50IHJldCA9IDA7XG4gXG5AQCAtNDM1LDkgKzQzNSw5IEBAIGJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgc3RydWN0IGhsaXN0X2hlYWQgKm1jYXN0X2xpc3QsXG4gXHRcdFx0XHQgc3RydWN0IGJhdGFkdl9tY2FzdF9tbGFfZmxhZ3MgKmZsYWdzKVxuIHtcbitcdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcdHN0cnVjdCBiYXRhZHZfaHdfYWRkciAqbmV3O1xuIFx0c3RydWN0IGluZXQ2X2RldiAqaW42X2Rldjtcbi1cdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dO1xuIFx0c3RydWN0IGlmbWNhZGRyNiAqcG1jNjtcbiBcdGludCByZXQgPSAwO1xuIFxuQEAgLTU4NywxMCArNTg3LDEwIEBAIHN0YXRpYyBpbnQgYmF0YWR2X21jYXN0X21sYV9icmlkZ2VfZ2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl9tY2FzdF9tbGFfZmxhZ3MgKmZsYWdzKVxuIHtcbiBcdHN0cnVjdCBsaXN0X2hlYWQgYnJpZGdlX21jYXN0X2xpc3QgPSBMSVNUX0hFQURfSU5JVChicmlkZ2VfbWNhc3RfbGlzdCk7XG4rXHR1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHR1OCB0dmx2X2ZsYWdzID0gZmxhZ3MtXHUwMDNldHZsdl9mbGFncztcbiBcdHN0cnVjdCBicl9pcF9saXN0ICpicl9pcF9lbnRyeTtcbiBcdHN0cnVjdCBiYXRhZHZfaHdfYWRkciAqbmV3O1xuLVx0dTggbWNhc3RfYWRkcltFVEhfQUxFTl07XG4gXHRzdHJ1Y3QgYnJfaXBfbGlzdCAqdG1wO1xuIFx0aW50IHJldDtcbiBcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jIGIvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY1xuaW5kZXggNjhmNzk4NTMwMzJlZC4uNDRhOGNmODkzODJjNiAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcbisrKyBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcbkBAIC0xMyw2ICsxMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnVpbGRfYnVnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2FjaGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NsZWFudXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb250YWluZXJfb2YuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbkBAIC05NSw2ICs5NiwyNiBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfY29tcGFyZV90dChjb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgY29uc3Qgdm9pZCAqZGF0YTIpXG4gXHRyZXR1cm4gKHR0MS1cdTAwM2V2aWQgPT0gdHQyLVx1MDAzZXZpZCkgXHUwMDI2XHUwMDI2IGJhdGFkdl9jb21wYXJlX2V0aChkYXRhMSwgZGF0YTIpO1xuIH1cbiBcbisvKipcbisgKiBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSgpIC0gY2hlY2sgaWYgYSBoYXNoIG5vZGUgaXMgYSBzcGVjaWZpYyBUVCBlbnRyeVxuKyAqIEBub2RlOiB0aGUgbGlzdCBlbGVtZW50IHBvaW50ZXIgb2YgdGhlIFRUIGVudHJ5IHN0b3JlZCBpbiB0aGUgYnVja2V0XG4rICogQGRhdGEyOiBwb2ludGVyIHRvIHRoZSB0dF9jb21tb25fZW50cnkgd2hpY2ggaXMgbG9va2VkIGZvclxuKyAqXG4rICogVW5saWtlIGJhdGFkdl9jb21wYXJlX3R0KCksIHRoaXMgb25seSBtYXRjaGVzIHRoZSB2ZXJ5IG9iamVjdCB3aGljaCBpc1xuKyAqIHBhc3NlZCBhcyBAZGF0YTIgYW5kIG5vdCBqdXN0IGFueSBlbnRyeSBmb3IgdGhlIHNhbWUgVFQgY2xpZW50LiBJdCBpcyBtZWFudFxuKyAqIGZvciBiYXRhZHZfaGFzaF9yZW1vdmUoKSBjYWxsZXJzIHdoaWNoIG11c3Qgbm90IHVubGluayBhbiBlbnRyeSB0aGV5IGRpZCBub3RcbisgKiBsb29rIHVwIHRoZW1zZWx2ZXMuXG4rICpcbisgKiBSZXR1cm46IHRydWUgaWYgQG5vZGUgYmVsb25ncyB0byBAZGF0YTIsIGZhbHNlIG90aGVyd2lzZVxuKyAqL1xuK3N0YXRpYyBib29sIGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KGNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlLFxuK1x0XHRcdFx0ICAgIGNvbnN0IHZvaWQgKmRhdGEyKVxuK3tcbitcdGNvbnN0IHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dCA9IGRhdGEyO1xuK1xuK1x0cmV0dXJuIG5vZGUgPT0gXHUwMDI2dHQtXHUwMDNlaGFzaF9lbnRyeTtcbit9XG4rXG4gLyoqXG4gICogYmF0YWR2X2Nob29zZV90dCgpIC0gcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgdHQgZW50cnkgaW4gdGhlIGhhc2ggdGFibGVcbiAgKiBAZGF0YTogcG9pbnRlciB0byB0aGUgdHRfY29tbW9uX2VudHJ5IG9iamVjdCB0byBtYXBcbkBAIC0zMTIsNiArMzMzLDEwIEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9zaXplX21vZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuICAqICBnaXZlbiB2aWRcbiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiAgKiBAdmlkOiB0aGUgVkxBTiBpZGVudGlmaWVyXG4rICpcbisgKiBJdCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdoZW4gcmVtb3ZpbmcgdGhlIE5FVyBmbGFnIG9mIGFcbisgKiBiYXRhZHZfdHRfbG9jYWxfZW50cnkgd2hpbGUgaXQgaXMgc3RpbGwgcGFydCBvZiB0aGUgYmF0X3ByaXYtXHUwMDNldHQubG9jYWxfaGFzaC5cbisgKiBJdCBtdXN0IHRoZXJlZm9yZSBiZSBjaGVja2VkIHVuZGVyIHRoZSBzcGVjaWZpYyBsaXN0X2xvY2tzW2ldLlxuICAqL1xuIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9zaXplX2luYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBzaG9ydCB2aWQpXG5AQCAtMzI0LDYgKzM0OSwxMSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9pbmMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiAgKiAgZ2l2ZW4gdmlkXG4gICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gICogQHZpZDogdGhlIFZMQU4gaWRlbnRpZmllclxuKyAqXG4rICogSXQgbXVzdCBvbmx5IGJlIGNhbGxlZCBhZnRlciBhIGJhdGFkdl90dF9sb2NhbF9lbnRyeSB3aXRob3V0IE5FVyBmbGFnXG4rICogd2FzIHJlbW92ZWQgZnJvbSBiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoICh1bmRlciB0aGUgc3BlY2lmaWNcbisgKiBsaXN0X2xvY2tzW2ldKSBvciB3aGVuIGl0IGlzIGVuc3VyZWQgdGhhdCBpdCBpcyBub3QgYWNjZXNzaWJsZVxuKyAqIGluIHRoaXMgbGlzdC5cbiAgKi9cbiBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9kZWMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuQEAgLTQxMyw2ICs0NDMsMjIgQEAgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeV9wdXQoc3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWdfZW50cnkpXG4gXHRrcmVmX3B1dChcdTAwMjZvcmlnX2VudHJ5LVx1MDAzZXJlZmNvdW50LCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5X3JlbGVhc2UpO1xuIH1cbiBcbisvKipcbisgKiBiYXRhZHZfdHRfZmxhZ3NfZ2V0KCkgLSBnZXQgYSBzbmFwc2hvdCBvZiB0aGUgZmxhZ3Mgb2YgYSBUVCBlbnRyeVxuKyAqIEBjb21tb246IHR0IGxvY2FsIFx1MDAyNiB0dCBnbG9iYWwgY29tbW9uIGRhdGFcbisgKlxuKyAqIFJldHVybjogdGhlIGZsYWdzIG9mIHRoZSBUVCBlbnRyeSBhcyBvYnNlcnZlZCB1bmRlciBpdHMgZmxhZ3NfbG9jay5cbisgKi9cbitzdGF0aWMgdTE2IGJhdGFkdl90dF9mbGFnc19nZXQoc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKmNvbW1vbilcbit7XG4rXHR1MTYgZmxhZ3M7XG4rXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNmNvbW1vbi1cdTAwM2VmbGFnc19sb2NrKVxuK1x0XHRmbGFncyA9IGNvbW1vbi1cdTAwM2VmbGFncztcbitcbitcdHJldHVybiBmbGFncztcbit9XG4rXG4gLyoqXG4gICogYmF0YWR2X3R0X2xvY2FsX2V2ZW50KCkgLSBzdG9yZSBhIGxvY2FsIFRUIGV2ZW50IChBREQvREVMKVxuICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuQEAgLTQyNSwyMyArNDcxLDI1IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9ldmVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICpjb21tb24gPSBcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb247XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICp0dF9jaGFuZ2Vfbm9kZTtcbi1cdHU4IGZsYWdzID0gY29tbW9uLVx1MDAzZWZsYWdzIHwgZXZlbnRfZmxhZ3M7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICplbnRyeTtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKnNhZmU7XG4gXHRib29sIGRlbF9vcF9yZXF1ZXN0ZWQ7XG4gXHRib29sIGRlbF9vcF9lbnRyeTtcbiBcdHNpemVfdCBjaGFuZ2VzO1xuK1x0dTggZmxhZ3M7XG4gXG4gXHR0dF9jaGFuZ2Vfbm9kZSA9IGttZW1fY2FjaGVfYWxsb2MoYmF0YWR2X3R0X2NoYW5nZV9jYWNoZSwgR0ZQX0FUT01JQyk7XG4gXHRpZiAoIXR0X2NoYW5nZV9ub2RlKVxuIFx0XHRyZXR1cm47XG4gXG4tXHR0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UuZmxhZ3MgPSBmbGFncztcbiBcdG1lbXNldCh0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UucmVzZXJ2ZWQsIDAsXG4gXHQgICAgICAgc2l6ZW9mKHR0X2NoYW5nZV9ub2RlLVx1MDAzZWNoYW5nZS5yZXNlcnZlZCkpO1xuIFx0ZXRoZXJfYWRkcl9jb3B5KHR0X2NoYW5nZV9ub2RlLVx1MDAzZWNoYW5nZS5hZGRyLCBjb21tb24tXHUwMDNlYWRkcik7XG4gXHR0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UudmlkID0gaHRvbnMoY29tbW9uLVx1MDAzZXZpZCk7XG4gXG4rXHRmbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoY29tbW9uKSB8IGV2ZW50X2ZsYWdzO1xuK1xuK1x0dHRfY2hhbmdlX25vZGUtXHUwMDNlY2hhbmdlLmZsYWdzID0gZmxhZ3M7XG4gXHRkZWxfb3BfcmVxdWVzdGVkID0gZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfREVMO1xuIFxuIFx0LyogY2hlY2sgZm9yIEFERCtERUwsIERFTCtBREQsIEFERCtBREQgb3IgREVMK0RFTCBldmVudHMgKi9cbkBAIC01NzUsNyArNjIzLDYgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwsXG4gXHRcdFx0XHQgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4ge1xuLVx0c3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X3JlbW92ZWRfZW50cnk7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdHRfcmVtb3ZlZF9ub2RlO1xuIFxuIFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbkBAIC01ODMsMTggKzYzMCw2NyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfZ2xvYmFsX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICAgdHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5hZGRyLFxuIFx0XHQgICBiYXRhZHZfcHJpbnRfdmlkKHR0X2dsb2JhbC1cdTAwM2Vjb21tb24udmlkKSwgbWVzc2FnZSk7XG4gXG4rXHQvKiByZW1vdmUgZXhhY3RseSB0aGlzIG9iamVjdCB3aGVuIHN0aWxsIHByZXNlbnQgaW4gaGFzaCAqL1xuIFx0dHRfcmVtb3ZlZF9ub2RlID0gYmF0YWR2X2hhc2hfcmVtb3ZlKGJhdF9wcml2LVx1MDAzZXR0Lmdsb2JhbF9oYXNoLFxuLVx0XHRcdFx0XHQgICAgIGJhdGFkdl9jb21wYXJlX3R0LFxuK1x0XHRcdFx0XHQgICAgIGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5LFxuIFx0XHRcdFx0XHQgICAgIGJhdGFkdl9jaG9vc2VfdHQsXG4gXHRcdFx0XHRcdCAgICAgXHUwMDI2dHRfZ2xvYmFsLVx1MDAzZWNvbW1vbik7XG4gXHRpZiAoIXR0X3JlbW92ZWRfbm9kZSlcbiBcdFx0cmV0dXJuO1xuIFxuIFx0LyogZHJvcCByZWZlcmVuY2Ugb2YgcmVtb3ZlIGhhc2ggZW50cnkgKi9cbi1cdHR0X3JlbW92ZWRfZW50cnkgPSBobGlzdF9lbnRyeSh0dF9yZW1vdmVkX25vZGUsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnksXG4tXHRcdFx0XHQgICAgICAgY29tbW9uLmhhc2hfZW50cnkpO1xuLVx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfcmVtb3ZlZF9lbnRyeSk7XG4rXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWwpO1xuK31cbitcbisvKipcbisgKiBiYXRhZHZfdHRfbG9jYWxfYWRkX3JvYW0oKSAtIGhhbmRsZSByb2FtZWQgY2xpZW50cyBkdXJpbmcgYmF0YWR2X3R0X2xvY2FsX2FkZCgpXG4rICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4rICogQHR0X2dsb2JhbDogdGhlIGdsb2JhbCBUVCBlbnRyeVxuKyAqIEByb2FtZWRfYmFjazogd2hldGhlciBAdHRfZ2xvYmFsIHJvYW1lZCBiYWNrXG4rICovXG4rc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX2FkZF9yb2FtKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwsXG4rXHRcdFx0XHQgICAgIGJvb2wgcm9hbWVkX2JhY2spXG4re1xuK1x0c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWdfZW50cnk7XG4rXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbitcbitcdGlmICghdHRfZ2xvYmFsKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgcm9hbWluZywgYnV0IGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nXG4rXHQgKiBwcm9jZXNzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZFxuK1x0ICovXG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNnR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jaykge1xuK1x0XHRpZiAodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKVxuK1x0XHRcdHJldHVybjtcbitcbitcdFx0aWYgKCFyb2FtZWRfYmFjaykge1xuK1x0XHRcdC8qIFRoZSBnbG9iYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBST0FNSU5HIGFuZCBoYXMgdG8gYmVcbitcdFx0XHQgKiBrZXB0IGZvciBjb25zaXN0ZW5jeSBwdXJwb3NlLlxuK1x0XHRcdCAqXG4rXHRcdFx0ICogYmF0YWR2X3R0X2dsb2JhbF90b19wdXJnZSgpIGV2YWx1YXRlcyByb2FtX2F0IGFzIHNvb24gYXMgaXRcbitcdFx0XHQgKiBvYnNlcnZlcyBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0sIHNvIHRoZSB0aW1lb3V0IGhhcyB0byBiZVxuK1x0XHRcdCAqIHN0YW1wZWQgYmVmb3JlIHRoZSBmbGFnIGlzIHB1Ymxpc2hlZC4gT3RoZXJ3aXNlIHRoZSBlbnRyeSBjYW5cbitcdFx0XHQgKiBiZSBkZWxldGVkIHJpZ2h0IGF3YXkgYXMgXCJSb2FtaW5nIHRpbWVvdXRcIi5cbitcdFx0XHQgKi9cbitcdFx0XHR0dF9nbG9iYWwtXHUwMDNlcm9hbV9hdCA9IGppZmZpZXM7XG4rXHRcdFx0dHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIFRoZXNlIG5vZGUgYXJlIHByb2JhYmx5IGdvaW5nIHRvIHVwZGF0ZSB0aGVpciB0dCB0YWJsZSAqL1xuK1x0aGVhZCA9IFx1MDAyNnR0X2dsb2JhbC1cdTAwM2VvcmlnX2xpc3Q7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uob3JpZ19lbnRyeSwgaGVhZCwgbGlzdCkge1xuK1x0XHRiYXRhZHZfc2VuZF9yb2FtX2FkdihiYXRfcHJpdiwgdHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5hZGRyLFxuK1x0XHRcdFx0ICAgICB0dF9nbG9iYWwtXHUwMDNlY29tbW9uLnZpZCxcbitcdFx0XHRcdCAgICAgb3JpZ19lbnRyeS1cdTAwM2VvcmlnX25vZGUpO1xuK1x0fVxuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRpZiAocm9hbWVkX2JhY2spXG4rXHRcdGJhdGFkdl90dF9nbG9iYWxfZnJlZShiYXRfcHJpdiwgdHRfZ2xvYmFsLCBcIlJvYW1pbmcgY2FuY2VsZWRcIik7XG4gfVxuIFxuIC8qKlxuQEAgLTYxNSwyMCArNzExLDE5IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KG1lc2hfaWZhY2UpO1xuIFx0c3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbCA9IE5VTEw7XG4tXHRzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqb3JpZ19lbnRyeTtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsO1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChtZXNoX2lmYWNlKTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICppbl9kZXYgPSBOVUxMO1xuIFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiBcdGJvb2wgcm9hbWVkX2JhY2sgPSBmYWxzZTtcbiBcdGJvb2wgaWlmX2lzX3dpZmkgPSBmYWxzZTtcbi1cdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkO1xuIFx0aW50IHBhY2tldF9zaXplX21heDtcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4gXHR1OCByZW1vdGVfZmxhZ3M7XG4gXHRpbnQgaGFzaF9hZGRlZDtcbiBcdGludCB0YWJsZV9zaXplO1xuIFx0dTMyIG1hdGNoX21hcms7XG4rXHRib29sIG1vZGlmaWVkO1xuIFxuIFx0aWYgKGlmaW5kZXggIT0gQkFUQURWX05VTExfSUZJTkRFWClcbiBcdFx0aW5fZGV2ID0gZGV2X2dldF9ieV9pbmRleChuZXQsIGlmaW5kZXgpO1xuQEAgLTY0Niw2ICs3NDEsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxuIFxuIFx0aWYgKHR0X2xvY2FsKSB7XG4gXHRcdHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XG4rXG4rXHRcdHNwaW5fbG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4gXHRcdGlmICh0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykge1xuIFx0XHRcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXG4gXHRcdFx0XHQgICBcIlJlLWFkZGluZyBwZW5kaW5nIGNsaWVudCAlcE0gKHZpZDogJWQpXFxuXCIsXG5AQCAtNjU2LDYgKzc1Myw4IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4gXHRcdFx0ICogZmxhZyBjYW4gYmUgcmVzZXQgbGlrZSBpdCB3YXMgbmV2ZXIgZW5xdWV1ZWRcbiBcdFx0XHQgKi9cbiBcdFx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbitcbiBcdFx0XHRnb3RvIGFkZF9ldmVudDtcbiBcdFx0fVxuIFxuQEAgLTY3MSw2ICs3NzAsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4gXHRcdFx0cm9hbWVkX2JhY2sgPSB0cnVlO1xuIFx0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbitcbiBcdFx0Z290byBjaGVja19yb2FtaW5nO1xuIFx0fVxuIFxuQEAgLTcwNiwxOCArODA3LDIxIEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4gXHRcdCAgICh1OClhdG9taWNfcmVhZChcdTAwMjZiYXRfcHJpdi1cdTAwM2V0dC52bikpO1xuIFxuIFx0ZXRoZXJfYWRkcl9jb3B5KHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5hZGRyLCBhZGRyKTtcbitcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi52aWQgPSB2aWQ7XG4rXHRrcmVmX2luaXQoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLnJlZmNvdW50KTtcbitcdHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XG4rXHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uYWRkZWRfYXQgPSB0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW47XG4rXHR0dF9sb2NhbC1cdTAwM2V2bGFuID0gdmxhbjtcbitcdHNwaW5fbG9ja19pbml0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbitcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4gXHQvKiBUaGUgbG9jYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBORVcgdG8gYXZvaWQgdG8gc2VuZCBpdCBpblxuIFx0ICogYSBmdWxsIHRhYmxlIHJlc3BvbnNlIGdvaW5nIG91dCBiZWZvcmUgdGhlIG5leHQgdHR2biBpbmNyZW1lbnRcbiBcdCAqIChjb25zaXN0ZW5jeSBjaGVjaylcbiBcdCAqL1xuIFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ORVc7XG4tXHR0dF9sb2NhbC1cdTAwM2Vjb21tb24udmlkID0gdmlkO1xuIFx0aWYgKGlpZl9pc193aWZpKVxuIFx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9XSUZJO1xuLVx0a3JlZl9pbml0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4tXHR0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW4gPSBqaWZmaWVzO1xuLVx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmFkZGVkX2F0ID0gdHRfbG9jYWwtXHUwMDNlbGFzdF9zZWVuO1xuLVx0dHRfbG9jYWwtXHUwMDNldmxhbiA9IHZsYW47XG4gXG4gXHQvKiB0aGUgYmF0bWFuIGludGVyZmFjZSBtYWMgYW5kIG11bHRpY2FzdCBhZGRyZXNzZXMgc2hvdWxkIG5ldmVyIGJlXG4gXHQgKiBwdXJnZWRcbkBAIC03MjUsNiArODI5LDcgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbiBcdGlmIChiYXRhZHZfY29tcGFyZV9ldGgoYWRkciwgbWVzaF9pZmFjZS1cdTAwM2VkZXZfYWRkcikgfHxcbiBcdCAgICBpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihhZGRyKSlcbiBcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfTk9QVVJHRTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiBcbiBcdGtyZWZfZ2V0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4gXHRoYXNoX2FkZGVkID0gYmF0YWR2X2hhc2hfYWRkKGJhdF9wcml2LVx1MDAzZXR0LmxvY2FsX2hhc2gsIGJhdGFkdl9jb21wYXJlX3R0LFxuQEAgLTc0MSwzMSArODQ2LDkgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbiBcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XG4gXG4gY2hlY2tfcm9hbWluZzpcbi1cdC8qIENoZWNrIHdoZXRoZXIgaXQgaXMgYSByb2FtaW5nLCBidXQgZG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHJvYW1pbmdcbi1cdCAqIHByb2Nlc3MgaGFzIGFscmVhZHkgYmVlbiBoYW5kbGVkXG4tXHQgKi9cbi1cdGlmICh0dF9nbG9iYWwgXHUwMDI2XHUwMDI2ICEodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSkge1xuLVx0XHQvKiBUaGVzZSBub2RlIGFyZSBwcm9iYWJseSBnb2luZyB0byB1cGRhdGUgdGhlaXIgdHQgdGFibGUgKi9cbi1cdFx0aGVhZCA9IFx1MDAyNnR0X2dsb2JhbC1cdTAwM2VvcmlnX2xpc3Q7XG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9yaWdfZW50cnksIGhlYWQsIGxpc3QpIHtcbi1cdFx0XHRiYXRhZHZfc2VuZF9yb2FtX2FkdihiYXRfcHJpdiwgdHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5hZGRyLFxuLVx0XHRcdFx0XHQgICAgIHR0X2dsb2JhbC1cdTAwM2Vjb21tb24udmlkLFxuLVx0XHRcdFx0XHQgICAgIG9yaWdfZW50cnktXHUwMDNlb3JpZ19ub2RlKTtcbi1cdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdFx0aWYgKHJvYW1lZF9iYWNrKSB7XG4tXHRcdFx0YmF0YWR2X3R0X2dsb2JhbF9mcmVlKGJhdF9wcml2LCB0dF9nbG9iYWwsXG4tXHRcdFx0XHRcdCAgICAgIFwiUm9hbWluZyBjYW5jZWxlZFwiKTtcbi1cdFx0fSBlbHNlIHtcbi1cdFx0XHQvKiBUaGUgZ2xvYmFsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgUk9BTUlORyBhbmRcbi1cdFx0XHQgKiBoYXMgdG8gYmUga2VwdCBmb3IgY29uc2lzdGVuY3kgcHVycG9zZVxuLVx0XHRcdCAqL1xuLVx0XHRcdHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuLVx0XHRcdHR0X2dsb2JhbC1cdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcbi1cdFx0fVxuLVx0fVxuK1x0YmF0YWR2X3R0X2xvY2FsX2FkZF9yb2FtKGJhdF9wcml2LCB0dF9nbG9iYWwsIHJvYW1lZF9iYWNrKTtcbiBcbitcdHNwaW5fbG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4gXHQvKiBzdG9yZSB0aGUgY3VycmVudCByZW1vdGUgZmxhZ3MgYmVmb3JlIGFsdGVyaW5nIHRoZW0uIFRoaXMgaGVscHNcbiBcdCAqIHVuZGVyc3RhbmRpbmcgaXMgZmxhZ3MgYXJlIGNoYW5naW5nIG9yIG5vdFxuIFx0ICovXG5AQCAtNzg3LDEwICs4NzAsMTMgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbiBcdGVsc2VcbiBcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfSVNPTEE7XG4gXG4rXHRtb2RpZmllZCA9IHJlbW90ZV9mbGFncyBeICh0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9SRU1PVEVfTUFTSyk7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4rXG4gXHQvKiBpZiBhbnkgXCJkeW5hbWljXCIgZmxhZyBoYXMgYmVlbiBtb2RpZmllZCwgcmVzZW5kIGFuIEFERCBldmVudCBmb3IgdGhpc1xuIFx0ICogZW50cnkgc28gdGhhdCBhbGwgdGhlIG5vZGVzIGNhbiBnZXQgdGhlIG5ldyBmbGFnc1xuIFx0ICovXG4tXHRpZiAocmVtb3RlX2ZsYWdzIF4gKHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX1JFTU9URV9NQVNLKSlcbitcdGlmIChtb2RpZmllZClcbiBcdFx0YmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbCwgQkFUQURWX05PX0ZMQUdTKTtcbiBcbiBcdHJldCA9IHRydWU7XG5AQCAtMTExNSw2ICsxMjAxLDcgQEAgYmF0YWR2X3R0X2xvY2FsX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcbiBcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4gXHR1bnNpZ25lZCBpbnQgbGFzdF9zZWVuX21zZWNzO1xuIFx0dm9pZCAqaGRyO1xuK1x0dTE2IGZsYWdzO1xuIFx0dTMyIGNyYztcbiBcbiBcdGxvY2FsID0gY29udGFpbmVyX29mKGNvbW1vbiwgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSwgY29tbW9uKTtcbkBAIC0xMTM2LDEzICsxMjIzLDE1IEBAIGJhdGFkdl90dF9sb2NhbF9kdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsXG4gXG4gXHRnZW5sX2R1bXBfY2hlY2tfY29uc2lzdGVudChjYiwgaGRyKTtcbiBcbitcdGZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pO1xuK1xuIFx0aWYgKG5sYV9wdXQobXNnLCBCQVRBRFZfQVRUUl9UVF9BRERSRVNTLCBFVEhfQUxFTiwgY29tbW9uLVx1MDAzZWFkZHIpIHx8XG4gXHQgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9UVF9DUkMzMiwgY3JjKSB8fFxuIFx0ICAgIG5sYV9wdXRfdTE2KG1zZywgQkFUQURWX0FUVFJfVFRfVklELCBjb21tb24tXHUwMDNldmlkKSB8fFxuLVx0ICAgIG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfVFRfRkxBR1MsIGNvbW1vbi1cdTAwM2VmbGFncykpXG4rXHQgICAgbmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9UVF9GTEFHUywgZmxhZ3MpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbi1cdGlmICghKGNvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKSBcdTAwMjZcdTAwMjZcbitcdGlmICghKGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0UpIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfTEFTVF9TRUVOX01TRUNTLCBsYXN0X3NlZW5fbXNlY3MpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbkBAIC0xMjQ5LDI5ICsxMzM4LDIzIEBAIGludCBiYXRhZHZfdHRfbG9jYWxfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXG4gfVxuIFxuIC8qKlxuLSAqIGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZygpIC0gbWFyayBhIGxvY2FsIFRUIGVudHJ5IGFzIHBlbmRpbmcgcmVtb3ZhbFxuKyAqIGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudCgpIC0gdHJpZ2dlciBldmVudHMgZm9yIFRUIHBlbmRpbmcgcmVtb3ZhbFxuICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEB0dF9sb2NhbF9lbnRyeTogbG9jYWwgVFQgZW50cnkgdG8gbWFya1xuICAqIEBmbGFnczogVFQgY2hhbmdlIGZsYWdzIHRvIGFubm91bmNlIHRvZ2V0aGVyIHdpdGggdGhlIHBlbmRpbmcgcmVtb3ZhbFxuICAqIEBtZXNzYWdlOiBkZWJ1ZyBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIHJlYXNvbiBmb3IgdGhlIGNoYW5nZVxuICAqXG4tICogU2NoZWR1bGUgdGhlIFRUIGNoYW5nZSBhbm5vdW5jZW1lbnQgYW5kIHNldCBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcgb24gdGhlXG4tICogZW50cnkuIFRoZSBlbnRyeSBpcyBrZXB0IGluIHRoZSBsb2NhbCB0YWJsZSB1bnRpbCB0aGUgbmV4dCBUVFZOIGluY3JlbWVudFxuLSAqIHNvIHRoYXQgYSBjb25zaXN0ZW5jeS1jaGVjayByZXNwb25zZSBjYW4gc3RpbGwgYmUgYW5zd2VyZWQuXG4rICogU2NoZWR1bGUgdGhlIFRUIGNoYW5nZSBhbm5vdW5jZW1lbnQgZm9yIHRoZSBlbnRyeS4gVGhlIGVudHJ5IGlzIGtlcHQgaW4gdGhlXG4rICogbG9jYWwgdGFibGUgdW50aWwgdGhlIG5leHQgVFRWTiBpbmNyZW1lbnQgc28gdGhhdCBhIGNvbnNpc3RlbmN5LWNoZWNrXG4rICogcmVzcG9uc2UgY2FuIHN0aWxsIGJlIGFuc3dlcmVkLlxuICAqL1xuIHN0YXRpYyB2b2lkXG4tYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4tXHRcdFx0ICAgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LFxuLVx0XHRcdCAgICB1MTYgZmxhZ3MsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4rYmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4rXHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LFxuK1x0XHRcdFx0ICB1MTYgZmxhZ3MsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpXG4ge1xuIFx0YmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwgZmxhZ3MpO1xuIFxuLVx0LyogVGhlIGxvY2FsIGNsaWVudCBoYXMgdG8gYmUgbWFya2VkIGFzIFwicGVuZGluZyB0byBiZSByZW1vdmVkXCIgYnV0IGhhc1xuLVx0ICogdG8gYmUga2VwdCBpbiB0aGUgdGFibGUgaW4gb3JkZXIgdG8gc2VuZCBpdCBpbiBhIGZ1bGwgdGFibGVcbi1cdCAqIHJlc3BvbnNlIGlzc3VlZCBiZWZvcmUgdGhlIG5ldCB0dHZuIGluY3JlbWVudCAoY29uc2lzdGVuY3kgY2hlY2spXG4tXHQgKi9cbi1cdHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7XG4tXG4gXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxuIFx0XHQgICBcIkxvY2FsIHR0IGVudHJ5ICglcE0sIHZpZDogJWQpIHBlbmRpbmcgdG8gYmUgcmVtb3ZlZDogJXNcXG5cIixcbiBcdFx0ICAgdHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmFkZHIsXG5AQCAtMTI5MiwxNiArMTM3NSwxNyBAQCB1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbiBcdFx0XHQgICB1bnNpZ25lZCBzaG9ydCB2aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsXG4gXHRcdFx0ICAgYm9vbCByb2FtaW5nKVxuIHtcbi1cdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X3JlbW92ZWRfZW50cnk7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbiBcdHN0cnVjdCBobGlzdF9ub2RlICp0dF9yZW1vdmVkX25vZGU7XG4gXHR1MTYgY3Vycl9mbGFncyA9IEJBVEFEVl9OT19GTEFHUztcbitcdGJvb2wgcGVuZGluZyA9IGZhbHNlO1xuIFx0dTE2IGZsYWdzO1xuIFxuIFx0dHRfbG9jYWxfZW50cnkgPSBiYXRhZHZfdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xuIFx0aWYgKCF0dF9sb2NhbF9lbnRyeSlcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuIFx0Y3Vycl9mbGFncyA9IHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncztcbiBcbiBcdGZsYWdzID0gQkFUQURWX1RUX0NMSUVOVF9ERUw7XG5AQCAtMTMxNiwyNyArMTQwMCwzOSBAQCB1MTYgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcbiBcdH1cbiBcbiBcdGlmICghKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKSB7XG4tXHRcdGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZyhiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksIGZsYWdzLFxuLVx0XHRcdFx0XHQgICAgbWVzc2FnZSk7XG4rXHRcdHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkc7XG4rXHRcdHBlbmRpbmcgPSB0cnVlO1xuK1x0fVxuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuK1xuK1x0aWYgKHBlbmRpbmcpIHtcbitcdFx0YmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwgZmxhZ3MsXG4rXHRcdFx0XHRcdFx0ICBtZXNzYWdlKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4rXG4gXHQvKiBpZiB0aGlzIGNsaWVudCBoYXMgYmVlbiBhZGRlZCByaWdodCBub3csIGl0IGlzIHBvc3NpYmxlIHRvXG4gXHQgKiBpbW1lZGlhdGVseSBwdXJnZSBpdFxuIFx0ICovXG4gXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBCQVRBRFZfVFRfQ0xJRU5UX0RFTCk7XG4gXG4rXHQvKiByZW1vdmUgZXhhY3RseSB0aGlzIG9iamVjdCB3aGVuIHN0aWxsIHByZXNlbnQgaW4gaGFzaCAqL1xuIFx0dHRfcmVtb3ZlZF9ub2RlID0gYmF0YWR2X2hhc2hfcmVtb3ZlKGJhdF9wcml2LVx1MDAzZXR0LmxvY2FsX2hhc2gsXG4tXHRcdFx0XHRcdCAgICAgYmF0YWR2X2NvbXBhcmVfdHQsXG4rXHRcdFx0XHRcdCAgICAgYmF0YWR2X2NvbXBhcmVfdHRfZW50cnksXG4gXHRcdFx0XHRcdCAgICAgYmF0YWR2X2Nob29zZV90dCxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24pO1xuIFx0aWYgKCF0dF9yZW1vdmVkX25vZGUpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0LyogYmF0YWR2X3R0X2xvY2FsX3RyYW5zaXRpb25fbmV3KCkgbWF5IGhhdmUgY29tbWl0dGVkIHRoZSBlbnRyeSBhbmRcbitcdCAqIHRodXMgY291bnRlZCBpdCBpbiB0aGUgbG9jYWwgdGFibGUgc2l6ZSBzaW5jZSB0aGUgQkFUQURWX1RUX0NMSUVOVF9ORVdcbitcdCAqIGNoZWNrIGFib3ZlLlxuK1x0ICovXG4rXHRpZiAoIShiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbikgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKSlcbitcdFx0YmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24udmlkKTtcbitcbiBcdC8qIGRyb3AgcmVmZXJlbmNlIG9mIHJlbW92ZSBoYXNoIGVudHJ5ICovXG4tXHR0dF9yZW1vdmVkX2VudHJ5ID0gaGxpc3RfZW50cnkodHRfcmVtb3ZlZF9ub2RlLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksXG4tXHRcdFx0XHQgICAgICAgY29tbW9uLmhhc2hfZW50cnkpO1xuLVx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9yZW1vdmVkX2VudHJ5KTtcbitcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xuIFxuIG91dDpcbiBcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xuQEAgLTEzNjEsMjEgKzE0NTcsMzcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3B1cmdlX2xpc3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodHRfY29tbW9uX2VudHJ5LCBub2RlX3RtcCwgaGVhZCxcbiBcdFx0XHRcdCAgaGFzaF9lbnRyeSkge1xuK1x0XHRib29sIGNvbnQgPSBmYWxzZTtcbitcbiBcdFx0dHRfbG9jYWxfZW50cnkgPSBjb250YWluZXJfb2YodHRfY29tbW9uX2VudHJ5LFxuIFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LFxuIFx0XHRcdFx0XHQgICAgICBjb21tb24pO1xuLVx0XHRpZiAodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0UpXG4tXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdC8qIGVudHJ5IGFscmVhZHkgbWFya2VkIGZvciBkZWxldGlvbiAqL1xuLVx0XHRpZiAodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpXG4tXHRcdFx0Y29udGludWU7XG4rXHRcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spIHtcbitcdFx0XHRpZiAodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0UpIHtcbitcdFx0XHRcdGNvbnQgPSB0cnVlO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdC8qIGVudHJ5IGFscmVhZHkgbWFya2VkIGZvciBkZWxldGlvbiAqL1xuK1x0XHRcdGlmICh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykge1xuK1x0XHRcdFx0Y29udCA9IHRydWU7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0aWYgKCFiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9sb2NhbF9lbnRyeS1cdTAwM2VsYXN0X3NlZW4sIHRpbWVvdXQpKSB7XG4rXHRcdFx0XHRjb250ID0gdHJ1ZTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHR0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HO1xuK1x0XHR9XG4gXG4tXHRcdGlmICghYmF0YWR2X2hhc190aW1lZF9vdXQodHRfbG9jYWxfZW50cnktXHUwMDNlbGFzdF9zZWVuLCB0aW1lb3V0KSlcbitcdFx0aWYgKGNvbnQpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZyhiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksXG4tXHRcdFx0XHRcdCAgICBCQVRBRFZfVFRfQ0xJRU5UX0RFTCwgXCJ0aW1lZCBvdXRcIik7XG4rXHRcdGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudChiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksXG4rXHRcdFx0XHRcdFx0ICBCQVRBRFZfVFRfQ0xJRU5UX0RFTCwgXCJ0aW1lZCBvdXRcIik7XG4gXHR9XG4gfVxuIFxuQEAgLTE1ODEsOCArMTY5MywxMCBAQCBiYXRhZHZfdHRfZ2xvYmFsX3N5bmNfZmxhZ3Moc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbClcbiBcdFx0ZmxhZ3MgfD0gb3JpZ19lbnRyeS1cdTAwM2VmbGFncztcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuLVx0ZmxhZ3MgfD0gdHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgKH5CQVRBRFZfVFRfU1lOQ19NQVNLKTtcbi1cdHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgPSBmbGFncztcbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2dHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKSB7XG4rXHRcdGZsYWdzIHw9IHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2ICh+QkFUQURWX1RUX1NZTkNfTUFTSyk7XG4rXHRcdHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgPSBmbGFncztcbitcdH1cbiB9XG4gXG4gLyoqXG5AQCAtMTY2NCw4ICsxNzc4LDEwIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICpjb21tb247XG4gXHRib29sIHJldCA9IGZhbHNlO1xuK1x0dTE2IGdsb2JhbF9mbGFncztcbiBcdHUxNiBsb2NhbF9mbGFncztcbiBcdGludCBoYXNoX2FkZGVkO1xuK1x0Ym9vbCBkZWxldGU7XG4gXG4gXHQvKiBpZ25vcmUgZ2xvYmFsIGVudHJpZXMgZnJvbSBiYWNrYm9uZSBub2RlcyAqL1xuIFx0aWYgKGJhdGFkdl9ibGFfaXNfYmFja2JvbmVfZ3dfb3JpZyhiYXRfcHJpdiwgb3JpZ19ub2RlLVx1MDAzZW9yaWcsIHZpZCkpXG5AQCAtMTY3OCw5ICsxNzk0LDExIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHQgKiBmb3IgYSByb2FtaW5nIGFkdmVydGlzZW1lbnQgaW5zdGVhZCBvZiBtYW51YWxseSBtZXNzaW5nIHVwIHRoZSBnbG9iYWxcbiBcdCAqIHRhYmxlXG4gXHQgKi9cbi1cdGlmICgoZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgXHUwMDI2XHUwMDI2IHR0X2xvY2FsX2VudHJ5IFx1MDAyNlx1MDAyNlxuLVx0ICAgICEodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpXG4tXHRcdGdvdG8gb3V0O1xuK1x0aWYgKChmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSBcdTAwMjZcdTAwMjYgdHRfbG9jYWxfZW50cnkpIHtcbitcdFx0bG9jYWxfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbik7XG4rXHRcdGlmICghKGxvY2FsX2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpXG4rXHRcdFx0Z290byBvdXQ7XG4rXHR9XG4gXG4gXHRpZiAoIXR0X2dsb2JhbF9lbnRyeSkge1xuIFx0XHR0dF9nbG9iYWxfZW50cnkgPSBrbWVtX2NhY2hlX3phbGxvYyhiYXRhZHZfdGdfY2FjaGUsXG5AQCAtMTY5MSw5ICsxODA5LDEzIEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdGNvbW1vbiA9IFx1MDAyNnR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb247XG4gXHRcdGV0aGVyX2FkZHJfY29weShjb21tb24tXHUwMDNlYWRkciwgdHRfYWRkcik7XG4gXHRcdGNvbW1vbi1cdTAwM2V2aWQgPSB2aWQ7XG4rXHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmNvbW1vbi1cdTAwM2VmbGFnc19sb2NrKTtcbiBcbi1cdFx0aWYgKCFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihjb21tb24tXHUwMDNlYWRkcikpXG4rXHRcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoY29tbW9uLVx1MDAzZWFkZHIpKSB7XG4rXHRcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvbW1vbi1cdTAwM2VmbGFnc19sb2NrKTtcbiBcdFx0XHRjb21tb24tXHUwMDNlZmxhZ3MgPSBmbGFncyBcdTAwMjYgKH5CQVRBRFZfVFRfU1lOQ19NQVNLKTtcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZjb21tb24tXHUwMDNlZmxhZ3NfbG9jayk7XG4rXHRcdH1cbiBcbiBcdFx0dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZXJvYW1fYXQgPSAwO1xuIFx0XHQvKiBub2RlIG11c3Qgc3RvcmUgY3VycmVudCB0aW1lIGluIGNhc2Ugb2Ygcm9hbWluZy4gVGhpcyBpc1xuQEAgLTE3MzMsOCArMTg1NSwxMCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHQgKiAgICBvcmlnaW5hdG9yIGxpc3QgYW5kIGFkZCB0aGUgbmV3IG9uZSBvcmlnX2VudHJ5XG4gXHRcdCAqL1xuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkge1xuLVx0XHRcdGlmICghKGNvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSlcbitcdFx0XHRnbG9iYWxfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KGNvbW1vbik7XG4rXHRcdFx0aWYgKCEoZ2xvYmFsX2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApKVxuIFx0XHRcdFx0Z290byBvdXQ7XG4rXG4gXHRcdFx0aWYgKGJhdGFkdl90dF9nbG9iYWxfZW50cnlfaGFzX29yaWcodHRfZ2xvYmFsX2VudHJ5LFxuIFx0XHRcdFx0XHRcdFx0ICAgIG9yaWdfbm9kZSwgTlVMTCkpXG4gXHRcdFx0XHRnb3RvIG91dF9yZW1vdmU7XG5AQCAtMTc0Miw2ICsxODY2LDkgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRnb3RvIGFkZF9vcmlnX2VudHJ5O1xuIFx0XHR9XG4gXG4rXHRcdGRlbGV0ZSA9IGZhbHNlO1xuK1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2Y29tbW9uLVx1MDAzZWZsYWdzX2xvY2spO1xuIFx0XHQvKiBpZiB0aGUgY2xpZW50IHdhcyB0ZW1wb3JhcnkgYWRkZWQgYmVmb3JlIHJlY2VpdmluZyB0aGUgZmlyc3RcbiBcdFx0ICogT0dNIGFubm91bmNpbmcgaXQsIHdlIGhhdmUgdG8gY2xlYXIgdGhlIFRFTVAgZmxhZy4gQWxzbyxcbiBcdFx0ICogcmVtb3ZlIHRoZSBwcmV2aW91cyB0ZW1wb3Jhcnkgb3JpZyBub2RlIGFuZCByZS1hZGQgaXRcbkBAIC0xNzQ5LDcgKzE4NzYsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHQgKiBpcyBhIG5vbi10ZW1wb3JhcnkgZW50cnkgaXMgcHJlZmVycmVkLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGNvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSB7XG4tXHRcdFx0YmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7XG4rXHRcdFx0ZGVsZXRlID0gdHJ1ZTtcbiBcdFx0XHRjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9URU1QO1xuIFx0XHR9XG4gXG5AQCAtMTc2OCwxMCArMTg5NSwxNCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHQgKiBuZXcgb25lLlxuIFx0XHQgKi9cbiBcdFx0aWYgKGNvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSB7XG4tXHRcdFx0YmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7XG4tXHRcdFx0Y29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbitcdFx0XHRkZWxldGUgPSB0cnVlO1xuIFx0XHRcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vyb2FtX2F0ID0gMDtcbitcdFx0XHRjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFx0XHR9XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmNvbW1vbi1cdTAwM2VmbGFnc19sb2NrKTtcbitcbitcdFx0aWYgKGRlbGV0ZSlcbitcdFx0XHRiYXRhZHZfdHRfZ2xvYmFsX2RlbF9vcmlnX2xpc3QodHRfZ2xvYmFsX2VudHJ5KTtcbiBcdH1cbiBhZGRfb3JpZ19lbnRyeTpcbiBcdC8qIGFkZCB0aGUgbmV3IG9yaWdfZW50cnkgKGlmIG5lZWRlZCkgb3IgdXBkYXRlIGl0ICovXG5AQCAtMTc5NSw2ICsxOTI2LDggQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdGxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2xvY2FsX3JlbW92ZShiYXRfcHJpdiwgdHRfYWRkciwgdmlkLFxuIFx0XHRcdFx0XHQgICAgIFwiZ2xvYmFsIHR0IHJlY2VpdmVkXCIsXG4gXHRcdFx0XHRcdCAgICAgZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSk7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiBcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gbG9jYWxfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfV0lGSTtcbiBcbiBcdGlmICghKGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKVxuQEAgLTE4MDIsNiArMTkzNSw3IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdCAqIHJvYW1pbmcgc3RhdGUgYW55bW9yZS5cbiBcdFx0ICovXG4gXHRcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiBcbiBvdXQ6XG4gXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWxfZW50cnkpO1xuQEAgLTE4NzEsOSArMjAwNSw5IEBAIGJhdGFkdl90dF9nbG9iYWxfZHVtcF9zdWJlbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuIFx0XHRcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqb3JpZyxcbiBcdFx0XHQgICAgICAgYm9vbCBiZXN0KVxuIHtcbi1cdHUxNiBmbGFncyA9IChjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2ICh+QkFUQURWX1RUX1NZTkNfTUFTSykpIHwgb3JpZy1cdTAwM2VmbGFncztcbiBcdHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlX3ZsYW4gKnZsYW47XG4gXHR1OCBsYXN0X3R0dm47XG4rXHR1MTYgZmxhZ3M7XG4gXHR2b2lkICpoZHI7XG4gXHR1MzIgY3JjO1xuIFxuQEAgLTE4OTIsNiArMjAyNiw3IEBAIGJhdGFkdl90dF9nbG9iYWxfZHVtcF9zdWJlbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLCB1MzIgc2VxLFxuIFx0aWYgKCFoZHIpXG4gXHRcdHJldHVybiAtRU5PQlVGUztcbiBcbitcdGZsYWdzID0gKGJhdGFkdl90dF9mbGFnc19nZXQoY29tbW9uKSBcdTAwMjYgKH5CQVRBRFZfVFRfU1lOQ19NQVNLKSkgfCBvcmlnLVx1MDAzZWZsYWdzO1xuIFx0bGFzdF90dHZuID0gUkVBRF9PTkNFKG9yaWctXHUwMDNlb3JpZ19ub2RlLVx1MDAzZWxhc3RfdHR2bik7XG4gXG4gXHRpZiAobmxhX3B1dChtc2csIEJBVEFEVl9BVFRSX1RUX0FERFJFU1MsIEVUSF9BTEVOLCBjb21tb24tXHUwMDNlYWRkcikgfHxcbkBAIC0yMTc5LDkgKzIzMTQsMTIgQEAgYmF0YWR2X3R0X2dsb2JhbF9kZWxfcm9hbWluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAobGFzdF9lbnRyeSkge1xuLVx0XHQvKiBpdHMgdGhlIGxhc3Qgb25lLCBtYXJrIGZvciByb2FtaW5nLiAqL1xuLVx0XHR0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbi1cdFx0dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZXJvYW1fYXQgPSBqaWZmaWVzO1xuK1x0XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNnR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jaykge1xuK1x0XHRcdC8qIGl0cyB0aGUgbGFzdCBvbmUsIG1hcmsgZm9yIHJvYW1pbmcuICovXG4rXHRcdFx0dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZXJvYW1fYXQgPSBqaWZmaWVzO1xuK1xuK1x0XHRcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuK1x0XHR9XG4gXHR9IGVsc2Uge1xuIFx0XHQvKiB0aGVyZSBpcyBhbm90aGVyIGVudHJ5LCB3ZSBjYW4gc2ltcGx5IGRlbGV0ZSB0aGlzXG4gXHRcdCAqIG9uZSBhbmQgY2FuIHN0aWxsIHVzZSB0aGUgb3RoZXIgb25lLlxuQEAgLTIzMzAsMTYgKzI0NjgsMTggQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF90b19wdXJnZShzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsLFxuIFx0dW5zaWduZWQgbG9uZyB0ZW1wX3RpbWVvdXQgPSBCQVRBRFZfVFRfQ0xJRU5UX1RFTVBfVElNRU9VVDtcbiBcdGJvb2wgcHVyZ2UgPSBmYWxzZTtcbiBcbi1cdGlmICgodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtXHUwMDNlcm9hbV9hdCwgcm9hbV90aW1lb3V0KSkge1xuLVx0XHRwdXJnZSA9IHRydWU7XG4tXHRcdCptc2cgPSBcIlJvYW1pbmcgdGltZW91dFxcblwiO1xuLVx0fVxuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcdTAwMjZ0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spIHtcbitcdFx0aWYgKCh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYmF0YWR2X2hhc190aW1lZF9vdXQodHRfZ2xvYmFsLVx1MDAzZXJvYW1fYXQsIHJvYW1fdGltZW91dCkpIHtcbitcdFx0XHRwdXJnZSA9IHRydWU7XG4rXHRcdFx0Km1zZyA9IFwiUm9hbWluZyB0aW1lb3V0XFxuXCI7XG4rXHRcdH1cbiBcbi1cdGlmICgodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSBcdTAwMjZcdTAwMjZcbi1cdCAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmFkZGVkX2F0LCB0ZW1wX3RpbWVvdXQpKSB7XG4tXHRcdHB1cmdlID0gdHJ1ZTtcbi1cdFx0Km1zZyA9IFwiVGVtcG9yYXJ5IGNsaWVudCB0aW1lb3V0XFxuXCI7XG4rXHRcdGlmICgodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGJhdGFkdl9oYXNfdGltZWRfb3V0KHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uYWRkZWRfYXQsIHRlbXBfdGltZW91dCkpIHtcbitcdFx0XHRwdXJnZSA9IHRydWU7XG4rXHRcdFx0Km1zZyA9IFwiVGVtcG9yYXJ5IGNsaWVudCB0aW1lb3V0XFxuXCI7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHJldHVybiBwdXJnZTtcbkBAIC0yNDM3LDggKzI1NzcsOCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfZ2xvYmFsX3RhYmxlX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbiAvKipcbiAgKiBfYmF0YWR2X2lzX2FwX2lzb2xhdGVkKCkgLSBjaGVjayB3aGV0aGVyIHR3byBjbGllbnRzIGFyZSBBUC1pc29sYXRlZCBmcm9tXG4gICogIGVhY2ggb3RoZXJcbi0gKiBAdHRfbG9jYWxfZW50cnk6IGxvY2FsIFRUIGVudHJ5IG9mIHRoZSBzZW5kaW5nIGNsaWVudFxuLSAqIEB0dF9nbG9iYWxfZW50cnk6IGdsb2JhbCBUVCBlbnRyeSBvZiB0aGUgZGVzdGluYXRpb24gY2xpZW50XG4rICogQHR0X2xvY2FsX2VudHJ5OiBsb2NhbCBUVCBlbnRyeSBvZiBvbmUgbG9jYWwgY2xpZW50XG4rICogQHR0X2dsb2JhbF9lbnRyeTogZ2xvYmFsIFRUIGVudHJ5IG9mIHRoZSByZW1vdGUgY2xpZW50XG4gICpcbiAgKiBSZXR1cm46IHRydWUgaWYgdHJhZmZpYyBiZXR3ZWVuIHRoZSB0d28gY2xpZW50cyBzaG91bGQgYmUgZHJvcHBlZCBiZWNhdXNlXG4gICogIGVpdGhlciBib3RoIGFyZSBXaUZpIGNsaWVudHMgb3IgYm90aCBjYXJyeSB0aGUgSVNPTEFUSU9OIGZsYWc7IGZhbHNlXG5AQCAtMjQ0OCwxMyArMjU4OCwxOSBAQCBzdGF0aWMgYm9vbFxuIF9iYXRhZHZfaXNfYXBfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnksXG4gXHRcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5KVxuIHtcbi1cdGlmICh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfV0lGSSBcdTAwMjZcdTAwMjZcbi1cdCAgICB0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkpXG4rXHR1MTYgZ2xvYmFsX2ZsYWdzO1xuK1x0dTE2IGxvY2FsX2ZsYWdzO1xuK1xuK1x0Z2xvYmFsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcdTAwMjZ0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uKTtcbitcdGxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24pO1xuK1xuK1x0aWYgKGxvY2FsX2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkgXHUwMDI2XHUwMDI2XG4rXHQgICAgZ2xvYmFsX2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0LyogY2hlY2sgaWYgdGhlIHR3byBjbGllbnRzIGFyZSBtYXJrZWQgYXMgaXNvbGF0ZWQgKi9cbi1cdGlmICh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEgXHUwMDI2XHUwMDI2XG4tXHQgICAgdHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQSlcbitcdGlmIChsb2NhbF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQSBcdTAwMjZcdTAwMjZcbitcdCAgICBnbG9iYWxfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuIFx0cmV0dXJuIGZhbHNlO1xuQEAgLTI0ODMsMTEgKzI2MjksMTUgQEAgc3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKmJhdGFkdl90cmFuc3RhYmxlX3NlYXJjaChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnkgPSBOVUxMO1xuIFx0c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKmJlc3RfZW50cnk7XG4gXHRzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDtcbitcdHUxNiBmbGFncztcbiBcbiBcdGlmIChzcmMgXHUwMDI2XHUwMDI2IGJhdGFkdl92bGFuX2FwX2lzb2xhX2dldChiYXRfcHJpdiwgdmlkKSkge1xuIFx0XHR0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIHNyYywgdmlkKTtcbi1cdFx0aWYgKCF0dF9sb2NhbF9lbnRyeSB8fFxuLVx0XHQgICAgKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSlcbitcdFx0aWYgKCF0dF9sb2NhbF9lbnRyeSlcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0ZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbik7XG4rXHRcdGlmIChmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKVxuIFx0XHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuQEAgLTI1NjIsNiArMjcxMiw4IEBAIHN0YXRpYyB1MzIgYmF0YWR2X3R0X2dsb2JhbF9jcmMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcbiBcdFx0cmN1X3JlYWRfbG9jaygpO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UodHRfY29tbW9uLCBoZWFkLCBoYXNoX2VudHJ5KSB7XG4rXHRcdFx0dTE2IHR0X2ZsYWdzO1xuK1xuIFx0XHRcdHR0X2dsb2JhbCA9IGNvbnRhaW5lcl9vZih0dF9jb21tb24sXG4gXHRcdFx0XHRcdFx0IHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5LFxuIFx0XHRcdFx0XHRcdCBjb21tb24pO1xuQEAgLTI1NzEsMTggKzI3MjMsMjEgQEAgc3RhdGljIHUzMiBiYXRhZHZfdHRfZ2xvYmFsX2NyYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRcdGlmICh0dF9jb21tb24tXHUwMDNldmlkICE9IHZpZClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdHR0X2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCh0dF9jb21tb24pO1xuK1xuIFx0XHRcdC8qIFJvYW1pbmcgY2xpZW50cyBhcmUgaW4gdGhlIGdsb2JhbCB0YWJsZSBmb3JcbiBcdFx0XHQgKiBjb25zaXN0ZW5jeSBvbmx5LiBUaGV5IGRvbid0IGhhdmUgdG8gYmVcbiBcdFx0XHQgKiB0YWtlbiBpbnRvIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIHRoZVxuIFx0XHRcdCAqIGdsb2JhbCBjcmNcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAodHRfY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pXG4rXHRcdFx0aWYgKHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pXG4gXHRcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0XHQvKiBUZW1wb3JhcnkgY2xpZW50cyBoYXZlIG5vdCBiZWVuIGFubm91bmNlZCB5ZXQsIHNvXG4gXHRcdFx0ICogdGhleSBoYXZlIHRvIGJlIHNraXBwZWQgd2hpbGUgY29tcHV0aW5nIHRoZSBnbG9iYWxcbiBcdFx0XHQgKiBjcmNcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAodHRfY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApXG4rXHRcdFx0aWYgKHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0XHQvKiBmaW5kIG91dCBpZiB0aGlzIGdsb2JhbCBlbnRyeSBpcyBhbm5vdW5jZWQgYnkgdGhpc1xuQEAgLTI2NDIsMTggKzI3OTcsMjQgQEAgc3RhdGljIHUzMiBiYXRhZHZfdHRfbG9jYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHR0X2NvbW1vbiwgaGVhZCwgaGFzaF9lbnRyeSkge1xuK1x0XHRcdHUxNiB0dF9mbGFncztcbitcbiBcdFx0XHQvKiBjb21wdXRlIHRoZSBDUkMgb25seSBmb3IgZW50cmllcyBiZWxvbmdpbmcgdG8gdGhlXG4gXHRcdFx0ICogVkxBTiBpZGVudGlmaWVkIGJ5IHZpZFxuIFx0XHRcdCAqL1xuIFx0XHRcdGlmICh0dF9jb21tb24tXHUwMDNldmlkICE9IHZpZClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdHR0X2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCh0dF9jb21tb24pO1xuK1xuIFx0XHRcdC8qIG5vdCB5ZXQgY29tbWl0dGVkIGNsaWVudHMgaGF2ZSBub3QgdG8gYmUgdGFrZW4gaW50b1xuIFx0XHRcdCAqIGFjY291bnQgd2hpbGUgY29tcHV0aW5nIHRoZSBDUkNcbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAodHRfY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVylcbitcdFx0XHRpZiAodHRfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4rXHRcdFx0ZmxhZ3MgPSB0dF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX1NZTkNfTUFTSztcbitcbiBcdFx0XHQvKiB1c2UgbmV0d29yayBvcmRlciB0byByZWFkIHRoZSBWSUQ6IHRoaXMgZW5zdXJlcyB0aGF0XG4gXHRcdFx0ICogZXZlcnkgbm9kZSByZWFkcyB0aGUgYnl0ZXMgaW4gdGhlIHNhbWUgb3JkZXIuXG4gXHRcdFx0ICovXG5AQCAtMjY2Myw3ICsyODI0LDYgQEAgc3RhdGljIHUzMiBiYXRhZHZfdHRfbG9jYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0LyogY29tcHV0ZSB0aGUgQ1JDIG9uIGZsYWdzIHRoYXQgaGF2ZSB0byBiZSBrZXB0IGluIHN5bmNcbiBcdFx0XHQgKiBhbW9uZyBub2Rlc1xuIFx0XHRcdCAqL1xuLVx0XHRcdGZsYWdzID0gdHRfY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfU1lOQ19NQVNLO1xuIFx0XHRcdGNyY190bXAgPSBjcmMzMmMoY3JjX3RtcCwgXHUwMDI2ZmxhZ3MsIHNpemVvZihmbGFncykpO1xuIFxuIFx0XHRcdGNyYyBePSBjcmMzMmMoY3JjX3RtcCwgdHRfY29tbW9uLVx1MDAzZWFkZHIsIEVUSF9BTEVOKTtcbkBAIC0yODIxLDE3ICsyOTgxLDE5IEBAIGJhdGFkdl90dF9yZXFfbm9kZV9uZXcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiAgKlxuICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgZW50cnkgaXMgYSB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBib29sIGJhdGFkdl90dF9sb2NhbF92YWxpZChjb25zdCB2b2lkICplbnRyeV9wdHIsXG4rc3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKHZvaWQgKmVudHJ5X3B0cixcbiBcdFx0XHRcdCAgY29uc3Qgdm9pZCAqZGF0YV9wdHIsXG4gXHRcdFx0XHQgIHU4ICpmbGFncylcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5ID0gZW50cnlfcHRyO1xuK1x0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeSA9IGVudHJ5X3B0cjtcbitcdHUxNiB0dF9mbGFncztcbiBcbi1cdGlmICh0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKVxuK1x0dHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbl9lbnRyeSk7XG4rXHRpZiAodHRfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRpZiAoZmxhZ3MpXG4tXHRcdCpmbGFncyA9IHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncztcbitcdFx0KmZsYWdzID0gdHRfZmxhZ3M7XG4gXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG5AQCAtMjg0OCwxNiArMzAxMCwxOCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfbG9jYWxfdmFsaWQoY29uc3Qgdm9pZCAqZW50cnlfcHRyLFxuICAqXG4gICogUmV0dXJuOiB0cnVlIGlmIHRoZSBlbnRyeSBpcyBhIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UuXG4gICovXG4tc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF92YWxpZChjb25zdCB2b2lkICplbnRyeV9wdHIsXG4rc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF92YWxpZCh2b2lkICplbnRyeV9wdHIsXG4gXHRcdFx0XHQgICBjb25zdCB2b2lkICpkYXRhX3B0cixcbiBcdFx0XHRcdCAgIHU4ICpmbGFncylcbiB7XG4tXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5ID0gZW50cnlfcHRyO1xuLVx0Y29uc3Qgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTtcbitcdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnkgPSBlbnRyeV9wdHI7XG4gXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gZGF0YV9wdHI7XG4rXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5O1xuK1x0dTE2IHR0X2ZsYWdzO1xuIFxuLVx0aWYgKHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNIHx8XG4tXHQgICAgdHRfY29tbW9uX2VudHJ5LVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApXG4rXHR0dF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQodHRfY29tbW9uX2VudHJ5KTtcbitcdGlmICh0dF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNIHx8XG4rXHQgICAgdHRfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0dHRfZ2xvYmFsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSxcbkBAIC0yODg2LDcgKzMwNTAsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX3ZhbGlkKGNvbnN0IHZvaWQgKmVudHJ5X3B0cixcbiBzdGF0aWMgdTE2IGJhdGFkdl90dF90dmx2X2dlbmVyYXRlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgYmF0YWR2X2hhc2h0YWJsZSAqaGFzaCxcbiBcdFx0XHRcdCAgIHZvaWQgKnR2bHZfYnVmZiwgdTE2IHR0X2xlbixcbi1cdFx0XHRcdCAgIGJvb2wgKCp2YWxpZF9jYikoY29uc3Qgdm9pZCAqLFxuK1x0XHRcdFx0ICAgYm9vbCAoKnZhbGlkX2NiKSh2b2lkICosXG4gXHRcdFx0XHRcdFx0ICAgIGNvbnN0IHZvaWQgKixcbiBcdFx0XHRcdFx0XHQgICAgdTggKmZsYWdzKSxcbiBcdFx0XHRcdCAgIHZvaWQgKmNiX2RhdGEpXG5AQCAtMzUxMSwxOSArMzY3NSwyMSBAQCBib29sIGJhdGFkdl9pc19teV9jbGllbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXG4gXHRcdFx0IHVuc2lnbmVkIHNob3J0IHZpZClcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbi1cdGJvb2wgcmV0ID0gZmFsc2U7XG4rXHR1MTYgdHRfZmxhZ3M7XG4rXHRib29sIHJldDtcbiBcbiBcdHR0X2xvY2FsX2VudHJ5ID0gYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcbiBcdGlmICghdHRfbG9jYWxfZW50cnkpXG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHR0dF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uKTtcbitcbiBcdC8qIENoZWNrIGlmIHRoZSBjbGllbnQgaGFzIGJlZW4gbG9naWNhbGx5IGRlbGV0ZWQgKGJ1dCBpcyBrZXB0IGZvclxuIFx0ICogY29uc2lzdGVuY3kgcHVycG9zZSlcbiBcdCAqL1xuLVx0aWYgKCh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykgfHxcbi1cdCAgICAodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKVxuLVx0XHRnb3RvIG91dDtcbi1cdHJldCA9IHRydWU7XG4tb3V0OlxuK1x0cmV0ID0gISgodHRfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykgfHxcbitcdFx0KHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pKTtcbitcbiBcdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfbG9jYWxfZW50cnkpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMzc4MiwxNiArMzk0OCwxMyBAQCB2b2lkIGJhdGFkdl90dF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4gfVxuIFxuIC8qKlxuLSAqIGJhdGFkdl90dF9sb2NhbF9zZXRfZmxhZ3MoKSAtIHNldCBvciB1bnNldCB0aGUgc3BlY2lmaWVkIGZsYWdzIG9uIHRoZSBsb2NhbFxuLSAqICB0YWJsZSBhbmQgcG9zc2libHkgY291bnQgdGhlbSBpbiB0aGUgVFQgc2l6ZVxuKyAqIGJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldygpIC0gdW5zZXQgdGhlIE5FVyBmbGFnIG9uIHRoZSBsb2NhbFxuKyAqICB0YWJsZSBhbmQgY291bnQgdGhlbSBpbiB0aGUgVFQgc2l6ZVxuICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuLSAqIEBmbGFnczogdGhlIGZsYWcgdG8gc3dpdGNoXG4tICogQGVuYWJsZTogd2hldGhlciB0byBzZXQgb3IgdW5zZXQgdGhlIGZsYWdcbi0gKiBAY291bnQ6IHdoZXRoZXIgdG8gaW5jcmVhc2UgdGhlIFRUIHNpemUgYnkgdGhlIG51bWJlciBvZiBjaGFuZ2VkIGVudHJpZXNcbiAgKi9cbi1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2V0X2ZsYWdzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHUxNiBmbGFncyxcbi1cdFx0XHRcdCAgICAgIGJvb2wgZW5hYmxlLCBib29sIGNvdW50KVxuK3N0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxuIHtcbitcdHNwaW5sb2NrX3QgKmxpc3RfbG9jazsgLyogcHJvdGVjdHMgd3JpdGUgYWNjZXNzIHRvIHRoZSBoYXNoIGxpc3RzICovXG4gXHRzdHJ1Y3QgYmF0YWR2X2hhc2h0YWJsZSAqaGFzaCA9IGJhdF9wcml2LVx1MDAzZXR0LmxvY2FsX2hhc2g7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5O1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7XG5AQCAtMzgwMiwyNyArMzk2NSwyOCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2V0X2ZsYWdzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHUxNiBmbGFncyxcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGhhc2gtXHUwMDNlc2l6ZTsgaSsrKSB7XG4gXHRcdGhlYWQgPSBcdTAwMjZoYXNoLVx1MDAzZXRhYmxlW2ldO1xuK1x0XHRsaXN0X2xvY2sgPSBcdTAwMjZoYXNoLVx1MDAzZWxpc3RfbG9ja3NbaV07XG4gXG4tXHRcdHJjdV9yZWFkX2xvY2soKTtcbi1cdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHR0X2NvbW1vbl9lbnRyeSxcbi1cdFx0XHRcdFx0IGhlYWQsIGhhc2hfZW50cnkpIHtcbi1cdFx0XHRpZiAoZW5hYmxlKSB7XG4tXHRcdFx0XHRpZiAoKHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjYgZmxhZ3MpID09IGZsYWdzKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRcdHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyB8PSBmbGFncztcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0aWYgKCEodHRfY29tbW9uX2VudHJ5LVx1MDAzZWZsYWdzIFx1MDAyNiBmbGFncykpXG4tXHRcdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdFx0dHRfY29tbW9uX2VudHJ5LVx1MDAzZWZsYWdzIFx1MDAyNj0gfmZsYWdzO1xuK1x0XHRzcGluX2xvY2tfYmgobGlzdF9sb2NrKTtcbitcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnkodHRfY29tbW9uX2VudHJ5LCBoZWFkLCBoYXNoX2VudHJ5KSB7XG4rXHRcdFx0Ym9vbCBjb250ID0gZmFsc2U7XG4rXG4rXHRcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcdTAwMjZ0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3NfbG9jaykge1xuK1x0XHRcdFx0aWYgKCEodHRfY29tbW9uX2VudHJ5LVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpIHtcbitcdFx0XHRcdFx0Y29udCA9IHRydWU7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1xuK1x0XHRcdFx0dHRfY29tbW9uX2VudHJ5LVx1MDAzZWZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfTkVXO1xuIFx0XHRcdH1cbiBcbi1cdFx0XHRpZiAoIWNvdW50KVxuK1x0XHRcdGlmIChjb250KVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0YmF0YWR2X3R0X2xvY2FsX3NpemVfaW5jKGJhdF9wcml2LFxuIFx0XHRcdFx0XHRcdCB0dF9jb21tb25fZW50cnktXHUwMDNldmlkKTtcbiBcdFx0fVxuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0c3Bpbl91bmxvY2tfYmgobGlzdF9sb2NrKTtcbiBcdH1cbiB9XG4gXG5AQCAtMzg1NCwxNiArNDAxOCwzMSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfcHVyZ2VfcGVuZGluZ19jbGllbnRzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4gXHRcdHNwaW5fbG9ja19iaChsaXN0X2xvY2spO1xuIFx0XHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHR0X2NvbW1vbiwgbm9kZV90bXAsIGhlYWQsXG4gXHRcdFx0XHRcdCAgaGFzaF9lbnRyeSkge1xuLVx0XHRcdGlmICghKHR0X2NvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSlcbi1cdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGJvb2wgY29udCA9IGZhbHNlO1xuIFxuLVx0XHRcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXG4tXHRcdFx0XHQgICBcIkRlbGV0aW5nIGxvY2FsIHR0IGVudHJ5ICglcE0sIHZpZDogJWQpOiBwZW5kaW5nXFxuXCIsXG4tXHRcdFx0XHQgICB0dF9jb21tb24tXHUwMDNlYWRkcixcbi1cdFx0XHRcdCAgIGJhdGFkdl9wcmludF92aWQodHRfY29tbW9uLVx1MDAzZXZpZCkpO1xuK1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2dHRfY29tbW9uLVx1MDAzZWZsYWdzX2xvY2spIHtcbitcdFx0XHRcdGlmICghKHR0X2NvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKSkge1xuK1x0XHRcdFx0XHRjb250ID0gdHJ1ZTtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4rXG4rXHRcdFx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxuK1x0XHRcdFx0XHQgICBcIkRlbGV0aW5nIGxvY2FsIHR0IGVudHJ5ICglcE0sIHZpZDogJWQpOiBwZW5kaW5nXFxuXCIsXG4rXHRcdFx0XHRcdCAgIHR0X2NvbW1vbi1cdTAwM2VhZGRyLFxuK1x0XHRcdFx0XHQgICBiYXRhZHZfcHJpbnRfdmlkKHR0X2NvbW1vbi1cdTAwM2V2aWQpKTtcbitcbitcdFx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2dHRfY29tbW9uLVx1MDAzZWhhc2hfZW50cnkpO1xuK1xuK1x0XHRcdFx0LyogQW4gZW50cnkgd2hpY2ggc3RpbGwgY2FycmllcyBCQVRBRFZfVFRfQ0xJRU5UX05FVyB3YXNcbitcdFx0XHRcdCAqIG5ldmVyIGNvdW50ZWQgYW5kIG11c3Qgbm90IGJlIHVuY291bnRlZCBoZXJlLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRpZiAoISh0dF9jb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKSlcbitcdFx0XHRcdFx0YmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9jb21tb24tXHUwMDNldmlkKTtcbitcdFx0XHR9XG4rXG4rXHRcdFx0aWYgKGNvbnQpXG4rXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRiYXRhZHZfdHRfbG9jYWxfc2l6ZV9kZWMoYmF0X3ByaXYsIHR0X2NvbW1vbi1cdTAwM2V2aWQpO1xuLVx0XHRcdGhsaXN0X2RlbF9yY3UoXHUwMDI2dHRfY29tbW9uLVx1MDAzZWhhc2hfZW50cnkpO1xuIFx0XHRcdHR0X2xvY2FsID0gY29udGFpbmVyX29mKHR0X2NvbW1vbixcbiBcdFx0XHRcdFx0XHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LFxuIFx0XHRcdFx0XHRcdGNvbW1vbik7XG5AQCAtMzg5MSw3ICs0MDcwLDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX2NvbW1pdF9jaGFuZ2VzX25vbG9jayhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG4tXHRiYXRhZHZfdHRfbG9jYWxfc2V0X2ZsYWdzKGJhdF9wcml2LCBCQVRBRFZfVFRfQ0xJRU5UX05FVywgZmFsc2UsIHRydWUpO1xuK1x0YmF0YWR2X3R0X2xvY2FsX3RyYW5zaXRpb25fbmV3KGJhdF9wcml2KTtcbiBcbiBcdGJhdGFkdl90dF9sb2NhbF9wdXJnZV9wZW5kaW5nX2NsaWVudHMoYmF0X3ByaXYpO1xuIFx0YmF0YWR2X3R0X2xvY2FsX3VwZGF0ZV9jcmMoYmF0X3ByaXYpO1xuQEAgLTQwNjEsMTUgKzQyNDAsMTYgQEAgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHRcdHU4ICphZGRyLCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4ge1xuIFx0c3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTtcbi1cdGJvb2wgcmV0ID0gZmFsc2U7XG4rXHRib29sIHJldDtcbiBcbiBcdHR0X2dsb2JhbF9lbnRyeSA9IGJhdGFkdl90dF9nbG9iYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xuIFx0aWYgKCF0dF9nbG9iYWxfZW50cnkpXG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXQgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24pIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4gXG4tXHRyZXQgPSB0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4gXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dF9nbG9iYWxfZW50cnkpO1xuLW91dDpcbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTQwODcsMTUgKzQyNjcsMTYgQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfY2xpZW50X2lzX3JvYW1pbmcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdCAgICAgICB1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkKVxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5O1xuLVx0Ym9vbCByZXQgPSBmYWxzZTtcbitcdGJvb2wgcmV0O1xuIFxuIFx0dHRfbG9jYWxfZW50cnkgPSBiYXRhZHZfdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBhZGRyLCB2aWQpO1xuIFx0aWYgKCF0dF9sb2NhbF9lbnRyeSlcbi1cdFx0Z290byBvdXQ7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldCA9IGJhdGFkdl90dF9mbGFnc19nZXQoXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uKSBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFxuLVx0cmV0ID0gdHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4gXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcbi1vdXQ6XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC00NDA0LDcgKzQ1ODUsNyBAQCBib29sIGJhdGFkdl90dF9nbG9iYWxfaXNfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdGlmICghdHQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldCA9IHR0LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQTtcbitcdHJldCA9IGJhdGFkdl90dF9mbGFnc19nZXQoXHUwMDI2dHQtXHUwMDNlY29tbW9uKSBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9JU09MQTtcbiBcbiBcdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0KTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oIGIvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaFxuaW5kZXggOWJkYzVhM2U3OTllMi4uNjc4NzI5MjdjZmI1MCAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbisrKyBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbkBAIC00MTAsNyArNDEwLDcgQEAgc3RydWN0IGJhdGFkdl9vcmlnX2JhdF9pdiB7XG4gICovXG4gc3RydWN0IGJhdGFkdl9vcmlnX25vZGUge1xuIFx0LyoqIEBvcmlnOiBvcmlnaW5hdG9yIGV0aGVybmV0IGFkZHJlc3MgKi9cbi1cdHU4IG9yaWdbRVRIX0FMRU5dO1xuK1x0dTggb3JpZ1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEBpZmluZm9fbGlzdDogbGlzdCBmb3Igcm91dGVycyBwZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovXG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBpZmluZm9fbGlzdDtcbkBAIC02MzQsMTIgKzYzNCwxMiBAQCBzdHJ1Y3QgYmF0YWR2X2hhcmRpZl9uZWlnaF9ub2RlIHtcbiBcdHN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7XG4gXG4gXHQvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbmVpZ2hib3JpbmcgaW50ZXJmYWNlICovXG4tXHR1OCBhZGRyW0VUSF9BTEVOXTtcbitcdHU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKlxuIFx0ICogQG9yaWc6IHRoZSBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hdG9yIHRoaXMgbmVpZ2hib3Igbm9kZSBiZWxvbmdzIHRvXG4gXHQgKi9cbi1cdHU4IG9yaWdbRVRIX0FMRU5dO1xuK1x0dTggb3JpZ1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEBpZl9pbmNvbWluZzogcG9pbnRlciB0byBpbmNvbWluZyBoYXJkLWludGVyZmFjZSAqL1xuIFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9pbmNvbWluZztcbkBAIC02NzcsNyArNjc3LDcgQEAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlIHtcbiAjZW5kaWZcbiBcbiBcdC8qKiBAYWRkcjogdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBuZWlnaGJvcmluZyBpbnRlcmZhY2UgKi9cbi1cdHU4IGFkZHJbRVRIX0FMRU5dO1xuK1x0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEBpZmluZm9fbGlzdDogbGlzdCBmb3Igcm91dGluZyBtZXRyaWNzIHBlciBvdXRnb2luZyBpbnRlcmZhY2UgKi9cbiBcdHN0cnVjdCBobGlzdF9oZWFkIGlmaW5mb19saXN0O1xuQEAgLTc3Nyw3ICs3NzcsNyBAQCBzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyB7XG4gICovXG4gc3RydWN0IGJhdGFkdl9iY2FzdF9kdXBsaXN0X2VudHJ5IHtcbiBcdC8qKiBAb3JpZzogbWFjIGFkZHJlc3Mgb2Ygb3JpZyBub2RlIG9yaWdpbmF0aW5nIHRoZSBicm9hZGNhc3QgKi9cbi1cdHU4IG9yaWdbRVRIX0FMRU5dO1xuK1x0dTggb3JpZ1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEBjcmM6IGNyYzMyIGNoZWNrc3VtIG9mIGJyb2FkY2FzdCBwYXlsb2FkICovXG4gXHR1MzIgY3JjO1xuQEAgLTEwODUsNyArMTA4NSw3IEBAIHN0cnVjdCBiYXRhZHZfcHJpdl9ibGEge1xuIFx0c3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmJhY2tib25lX2hhc2g7XG4gXG4gXHQvKiogQGxvb3BkZXRlY3RfYWRkcjogTUFDIGFkZHJlc3MgdXNlZCBmb3Igb3duIGxvb3BkZXRlY3Rpb24gZnJhbWVzICovXG4tXHR1OCBsb29wZGV0ZWN0X2FkZHJbRVRIX0FMRU5dO1xuK1x0dTggbG9vcGRldGVjdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKipcbiBcdCAqIEBsb29wZGV0ZWN0X2xhc3R0aW1lOiB0aW1lIHdoZW4gdGhlIGxvb3BkZXRlY3Rpb24gZnJhbWVzIHdlcmUgc2VudFxuQEAgLTEzNTIsNyArMTM1Miw3IEBAIHN0cnVjdCBiYXRhZHZfdHBfdmFyc19jb21tb24ge1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdjtcbiBcbiBcdC8qKiBAb3RoZXJfZW5kOiBtYWMgYWRkcmVzcyBvZiByZW1vdGUgKi9cbi1cdHU4IG90aGVyX2VuZFtFVEhfQUxFTl07XG4rXHR1OCBvdGhlcl9lbmRbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAc2Vzc2lvbjogVFAgc2Vzc2lvbiBpZGVudGlmaWVyICovXG4gXHR1OCBzZXNzaW9uWzJdO1xuQEAgLTE3NjUsNyArMTc2NSw3IEBAIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3IHtcbiBcdCAqIEBvcmlnOiBvcmlnaW5hdG9yIGFkZHJlc3Mgb2YgYmFja2JvbmUgbm9kZSAobWFjIGFkZHJlc3Mgb2YgcHJpbWFyeVxuIFx0ICogIGlmYWNlKVxuIFx0ICovXG4tXHR1OCBvcmlnW0VUSF9BTEVOXTtcbitcdHU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAdmlkOiB2bGFuIGlkIHRoaXMgZ2F0ZXdheSB3YXMgZGV0ZWN0ZWQgb24gKi9cbiBcdHVuc2lnbmVkIHNob3J0IHZpZDtcbkBAIC0xODEwLDcgKzE4MTAsNyBAQCBzdHJ1Y3QgYmF0YWR2X2JsYV9iYWNrYm9uZV9ndyB7XG4gICovXG4gc3RydWN0IGJhdGFkdl9ibGFfY2xhaW0ge1xuIFx0LyoqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiBjbGFpbWVkIG5vbi1tZXNoIGNsaWVudCAqL1xuLVx0dTggYWRkcltFVEhfQUxFTl07XG4rXHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKiogQHZpZDogdmxhbiBpZCB0aGlzIGNsaWVudCB3YXMgZGV0ZWN0ZWQgb24gKi9cbiBcdHVuc2lnbmVkIHNob3J0IHZpZDtcbkBAIC0xODQwLDcgKzE4NDAsNyBAQCBzdHJ1Y3QgYmF0YWR2X2JsYV9jbGFpbSB7XG4gICovXG4gc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkge1xuIFx0LyoqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiBub24tbWVzaCBjbGllbnQgKi9cbi1cdHU4IGFkZHJbRVRIX0FMRU5dO1xuK1x0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEB2aWQ6IFZMQU4gaWRlbnRpZmllciAqL1xuIFx0dW5zaWduZWQgc2hvcnQgdmlkO1xuQEAgLTE4NTEsMTIgKzE4NTEsMjEgQEAgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkge1xuIFx0ICovXG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoX2VudHJ5O1xuIFxuLVx0LyoqIEBmbGFnczogdmFyaW91cyBzdGF0ZSBoYW5kbGluZyBmbGFncyAoc2VlIGJhdGFkdl90dF9jbGllbnRfZmxhZ3MpICovXG4rXHQvKipcbitcdCAqIEBmbGFnczogdmFyaW91cyBzdGF0ZSBoYW5kbGluZyBmbGFncyAoc2VlIGJhdGFkdl90dF9jbGllbnRfZmxhZ3MpLFxuK1x0ICogcHJvdGVjdGVkIGJ5IEBmbGFnc19sb2NrXG4rXHQgKi9cbiBcdHUxNiBmbGFncztcbiBcbiBcdC8qKiBAYWRkZWRfYXQ6IHRpbWVzdGFtcCB1c2VkIGZvciBwdXJnaW5nIHN0YWxlIHR0IGNvbW1vbiBlbnRyaWVzICovXG4gXHR1bnNpZ25lZCBsb25nIGFkZGVkX2F0O1xuIFxuK1x0LyoqXG4rXHQgKiBAZmxhZ3NfbG9jazogcHJvdGVjdCBtb2RpZmljYXRpb25zIG9mIEBmbGFncyBhbmRcbitcdCAqICBAYmF0YWR2X3R0X2dsb2JhbF9lbnRyeS5yb2FtX2F0XG4rXHQgKi9cbitcdHNwaW5sb2NrX3QgZmxhZ3NfbG9jaztcbitcbiBcdC8qKiBAcmVmY291bnQ6IG51bWJlciBvZiBjb250ZXh0cyB0aGUgb2JqZWN0IGlzIHVzZWQgKi9cbiBcdHN0cnVjdCBrcmVmIHJlZmNvdW50O1xuIFxuQEAgLTE5NDIsNyArMTk1MSw3IEBAIHN0cnVjdCBiYXRhZHZfdHRfcmVxX25vZGUge1xuIFx0LyoqXG4gXHQgKiBAYWRkcjogbWFjIGFkZHJlc3Mgb2YgdGhlIG9yaWdpbmF0b3IgdGhpcyByZXF1ZXN0IHdhcyBzZW50IHRvXG4gXHQgKi9cbi1cdHU4IGFkZHJbRVRIX0FMRU5dO1xuK1x0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEBpc3N1ZWRfYXQ6IHRpbWVzdGFtcCB1c2VkIGZvciBwdXJnaW5nIHN0YWxlIHR0IHJlcXVlc3RzICovXG4gXHR1bnNpZ25lZCBsb25nIGlzc3VlZF9hdDtcbkBAIC0xOTU5LDcgKzE5NjgsNyBAQCBzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlIHtcbiAgKi9cbiBzdHJ1Y3QgYmF0YWR2X3R0X3JvYW1fbm9kZSB7XG4gXHQvKiogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIHRoZSBjbGllbnQgaW4gdGhlIHJvYW1pbmcgcGhhc2UgKi9cbi1cdHU4IGFkZHJbRVRIX0FMRU5dO1xuK1x0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEB2aWQ6IFZMQU4gaWRlbnRpZmllciAqL1xuIFx0dTE2IHZpZDtcbkBAIC0yMDg3LDE0ICsyMDk2LDE0IEBAIHN0cnVjdCBiYXRhZHZfYWxnb19uZWlnaF9vcHMge1xuIFx0XHQgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMik7XG4gXG4gXHQvKipcbi1cdCAqIEBpc19zaW1pbGFyX29yX2JldHRlcjogY2hlY2sgaWYgbmVpZ2gxIGlzIGVxdWFsbHkgc2ltaWxhciBvciBiZXR0ZXJcbi1cdCAqICB0aGFuIG5laWdoMiBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBvdXRnb2luZyBpbnRlcmZhY2UgZnJvbSB0aGUgbWV0cmljXG4rXHQgKiBAaXNfc2ltaWxhcl9vcl9iZXR0ZXI6IGNoZWNrIGlmIEBjYW5kaWRhdGUgaXMgZXF1YWxseSBzaW1pbGFyIG9yIGJldHRlclxuK1x0ICogIHRoYW4gQHJlZmVyZW5jZSBmb3IgdGhlaXIgcmVzcGVjdGl2ZSBvdXRnb2luZyBpbnRlcmZhY2UgZnJvbSB0aGUgbWV0cmljXG4gXHQgKiAgcHJvc3BlY3RpdmVcbiBcdCAqL1xuLVx0Ym9vbCAoKmlzX3NpbWlsYXJfb3JfYmV0dGVyKShzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMSxcbi1cdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzEsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqbmVpZ2gyLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nMik7XG4rXHRib29sICgqaXNfc2ltaWxhcl9vcl9iZXR0ZXIpKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqY2FuZGlkYXRlLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nX2NhbmQsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nX3JlZik7XG4gXG4gXHQvKiogQGR1bXA6IGR1bXAgbmVpZ2hib3JzIHRvIGEgbmV0bGluayBzb2NrZXQgKG9wdGlvbmFsKSAqL1xuIFx0dm9pZCAoKmR1bXApKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbkBAIC0yMjA0LDcgKzIyMTMsNyBAQCBzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIge1xuIFx0c3RydWN0IGhsaXN0X25vZGUgbGlzdDtcbiBcbiBcdC8qKiBAYWRkcjogdGhlIE1BQyBhZGRyZXNzIG9mIHRoaXMgbGlzdCBlbnRyeSAqL1xuLVx0dW5zaWduZWQgY2hhciBhZGRyW0VUSF9BTEVOXTtcbitcdHVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIH07XG4gXG4gLyoqXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozMTo1NS41NjE2MjM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTIyNDg1NDY4NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMaW51eCBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzIGZvciB0aGUgTGludXgga2VybmVsIGFuZCBkZXRlcm1pbmUgaWYgaXQgaW50cm9kdWNlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCB3YXJyYW50IGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgYmVlbiBtb2RpZmllZC4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY2hhbmdlZCBmaWxlcy5cblxuKiAgIGBuZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNgOiBMb29rcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIHBhcmFtZXRlciByZW5hbWUgd2l0aGluIHRoZSBgYmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2JgIGZ1bmN0aW9uLiBNaW5vciwgdW5saWtlbHkgdG8gYmUgZnJ1aXRmdWwgZm9yIGZ1enppbmcgb24gaXRzIG93bi5cbiogICBgbmV0L2JhdG1hbi1hZHYvYmF0X3YuY2A6IEFoLCBhIGJ1ZyBmaXghIFRoZSBgYmF0YWR2X3ZfbmVpZ2hfaXNfc29iYCBjYWxjdWxhdGlvbiBoYWQgYSBsb2dpYyBpbnZlcnNpb24gaXNzdWUg4oCTIHRoZSB0aHJlc2hvbGQgd2FzIGNvbXB1dGVkIHVzaW5nIG9uZSBuZWlnaGJvcidzIHRocm91Z2hwdXQgYnV0IGNvbXBhcmVkIGFnYWluc3QgYW5vdGhlci4gRml4aW5nIHRoaXMgaXMgaW1wb3J0YW50LCBvZiBjb3Vyc2UsIGJ1dCBpdCdzIGEgc3BlY2lmaWMgY29ycmVjdGlvbi4gU3RpbGwsIHdvcnRoIG5vdGluZyBhcyBhIHBvdGVudGlhbCBhcmVhIHRvIGV4YW1pbmUgd2l0aCBmb2N1c2VkIGZ1enppbmcgaWYgd2Uga25vdyB0aGUgdGhyb3VnaHB1dCBjYWxjdWxhdGlvbi5cbiogICBgbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNgLCBgbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmNgLCBgbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY2AsIGBuZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuY2AsIGFuZCBgbmV0L2JhdG1hbi1hZHYvdHlwZXMuaGA6IFRoZXNlIGFsbCBpbnZvbHZlIGBfX2FsaWduZWQoMilgIGFubm90YXRpb25zIG9uIE1BQyBhZGRyZXNzZXMgb3IgYWRkaXRpb25zIGluIGEgc3RydWN0LiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IGFsaWdubWVudCBmb3IgcGVyZm9ybWFuY2Ugb3IgaGFyZHdhcmUgY29tcGF0aWJpbGl0eS4gUHJvYmFibHkgbm90IGludGVyZXN0aW5nIGZvciBmdXp6aW5nIGluIGlzb2xhdGlvbiwgYnV0IGtlZXAgaXQgaW4gbWluZCBpZiB0aGV5IGFyZSBwYXJ0IG9mIGEgbGFyZ2VyIGNoYW5nZS5cbiogICBgbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY2A6IE5vdyAqdGhpcyogaXMgaW50ZXJlc3RpbmcuIE1ham9yIGxvY2tpbmcgYW5kIHJhY2UgY29uZGl0aW9uIGZpeGVzISBBIG5ldyBgZmxhZ3NfbG9ja2Agc3BpbmxvY2sgaGFzIGJlZW4gYWRkZWQgdG8gYHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5YCwgYW5kIGEgYnVuY2ggb2YgbmV3IGZ1bmN0aW9ucyBhcmUgYmVpbmcgaW50cm9kdWNlZCAoYGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5YCwgYGJhdGFkdl90dF9mbGFnc19nZXRgLCBldGMuKSBhbG9uZyB3aXRoIHVwZGF0ZXMgdG8gbnVtZXJvdXMgZXhpc3RpbmcgZnVuY3Rpb25zLiBUaGlzIGlzIGEgKnNpZ25pZmljYW50KiByZWZhY3RvciBwb3RlbnRpYWxseSB0b3VjaGluZyBtYW55IGFyZWFzIHdoZXJlIGNvbmN1cnJlbnQgYWNjZXNzIGFuZCBzdGF0ZSBjaGFuZ2VzIGFyZSBvY2N1cnJpbmcuIFRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIGNvbmN1cnJlbmN5LXJlbGF0ZWQgYnVncyBhbmQgcmFjZSBjb25kaXRpb25zLCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gVGhpcyBpcyBhIHZlcnkgaW50ZXJlc3Rpbmcgc2VjdGlvbi5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgQkFUTUFOX0FEViBhbmQgYW55IHJlbGF0ZWQgc2V0dGluZ3MuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGJ5IHRoZXNlIGNvbXBvbmVudHMuIFRoZSBlYXNpZXN0IHRoaW5nIHRvIGRvIHdpbGwgYmUgdG8gdXNlIGdyZXBwZXIgb3Igc2ltcGx5IHJlYWQgS2NvbmZpZy4gSSB3YW50IHRvIHNlZSBob3cgdGhlc2UgcGF0Y2hlZCBjb21wb25lbnRzIGFyZSBjb250cm9sbGVkIGFuZCB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIHN1YnN5c3RlbXMgb3IgZmVhdHVyZXMgdGhhdCBjb3VsZCBleHBhbmQgdGhlIGF0dGFjayBzdXJmYWNlLiBUaGlzIHdpbGwgaGVscCBkZXRlcm1pbmUgdGhlIHNjb3BlIGFuZCByZWxldmFuY2Ugb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MjMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3OTgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozMjowNy44MTAxNzM3MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwNjczNTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkJBVE1BTl9BRFZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2JhdG1hbi1hZHZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA2NzkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctOS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjEwOmNvbmZpZyBCQVRNQU5fQURWXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0xMS1cXHR0cmlzdGF0ZSBcXFwiQi5BLlQuTS5BLk4uIEFkdmFuY2VkIE1lc2hpbmcgUHJvdG9jb2xcXFwiXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTE5LVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MjA6Y29uZmlnIEJBVE1BTl9BRFZfQkFUTUFOX1ZcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTIxLVxcdGJvb2wgXFxcIkIuQS5ULk0uQS5OLiBWIHByb3RvY29sXFxcIlxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6MjI6XFx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWIFxcdTAwMjZcXHUwMDI2ICEoQ0ZHODAyMTE9bSBcXHUwMDI2XFx1MDAyNiBCQVRNQU5fQURWPXkpXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0yMy1cXHRkZWZhdWx0IHlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctMzMtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzozNDpjb25maWcgQkFUTUFOX0FEVl9CTEFcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTM1LVxcdGJvb2wgXFxcIkJyaWRnZSBMb29wIEF2b2lkYW5jZVxcXCJcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjM2OlxcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcXHUwMDI2XFx1MDAyNiBJTkVUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy0zNy1cXHRzZWxlY3QgQ1JDMTZcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNDYtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo0Nzpjb25maWcgQkFUTUFOX0FEVl9EQVRcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRpc3RyaWJ1dGVkIEFSUCBUYWJsZVxcXCJcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjQ5OlxcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcXHUwMDI2XFx1MDAyNiBJTkVUXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy01MC1cXHRkZWZhdWx0IHlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTYtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo1Nzpjb25maWcgQkFUTUFOX0FEVl9NQ0FTVFxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNTgtXFx0Ym9vbCBcXFwiTXVsdGljYXN0IG9wdGltaXNhdGlvblxcXCJcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnOjU5OlxcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcXHUwMDI2XFx1MDAyNiBJTkVUIFxcdTAwMjZcXHUwMDI2ICEoQlJJREdFPW0gXFx1MDAyNlxcdTAwMjYgQkFUTUFOX0FEVj15KVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNjAtXFx0ZGVmYXVsdCB5XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTY1LVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6NjY6Y29uZmlnIEJBVE1BTl9BRFZfREVCVUdcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTY3LVxcdGJvb2wgXFxcIkIuQS5ULk0uQS5OLiBkZWJ1Z2dpbmdcXFwiXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo2ODpcXHRkZXBlbmRzIG9uIEJBVE1BTl9BRFZcXG5uZXQvYmF0bWFuLWFkdi9LY29uZmlnLTY5LVxcdGhlbHBcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctNzQtXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo3NTpjb25maWcgQkFUTUFOX0FEVl9UUkFDSU5HXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03Ni1cXHRib29sIFxcXCJCLkEuVC5NLkEuTi4gdHJhY2luZyBzdXBwb3J0XFxcIlxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWc6Nzc6XFx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy03OC1cXHRkZXBlbmRzIG9uIEVWRU5UX1RSQUNJTkdcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L0tjb25maWctODItXFx0ICBtZXNzYWdlcyB1c2luZyB0aGUgZ2VuZXJpYyB0cmFjaW5nIGluZnJhc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwuXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZzo4MzpcXHQgIEJBVE1BTl9BRFZfREVCVUcgbXVzdCBhbHNvIGJlIHNlbGVjdGVkIHRvIGdldCB0cmFjZSBldmVudHMgZm9yXFxubmV0L2JhdG1hbi1hZHYvS2NvbmZpZy04NC1cXHQgIGJhdGFkdl9kYmcuXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZS01LVxcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0JBVE1BTl9BRFYpICs9IGJhdG1hbi1hZHYub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlLTctYmF0bWFuLWFkdi15ICs9IGJhdF9hbGdvLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZT04PWJhdG1hbi1hZHYteSArPSBiYXRfaXZfb2dtLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTo5OmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVikgKz0gYmF0X3Yub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjEwOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVikgKz0gYmF0X3ZfZWxwLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxMTpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YpICs9IGJhdF92X29nbS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMTItYmF0bWFuLWFkdi15ICs9IGJpdGFycmF5Lm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxMzpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfQkxBKSArPSBicmlkZ2VfbG9vcF9hdm9pZGFuY2Uub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjE0OmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9EQVQpICs9IGRpc3RyaWJ1dGVkLWFycC10YWJsZS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMTUtYmF0bWFuLWFkdi15ICs9IGZyYWdtZW50YXRpb24ub1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9MTk9YmF0bWFuLWFkdi15ICs9IGhhc2gub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjIwOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9ERUJVRykgKz0gbG9nLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZS0yMS1iYXRtYW4tYWR2LXkgKz0gbWFpbi5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9MjI9YmF0bWFuLWFkdi15ICs9IG1lc2gtaW50ZXJmYWNlLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToyMzpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfTUNBU1QpICs9IG11bHRpY2FzdC5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MjQ6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX01DQVNUKSArPSBtdWx0aWNhc3RfZm9ydy5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMjUtYmF0bWFuLWFkdi15ICs9IG5ldGxpbmsub1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU9Mjg9YmF0bWFuLWFkdi15ICs9IHNlbmQub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjI5OmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9UUkFDSU5HKSArPSB0cmFjZS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMzAtYmF0bWFuLWFkdi15ICs9IHRwX21ldGVyLm9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JhdF9hbGdvLmgtNi1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQkFUX0FMR09fSF9cXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfQkFUX0FMR09fSF9cXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5oLTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5oPTIxPWludCBiYXRhZHZfYWxnb19kdW1wKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uaC0yMi1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5oOjIzOiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfQkFUX0FMR09fSF8gKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uaC02LVxcbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0JBVF9JVl9PR01fSF9cXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9CQVRfSVZfT0dNX0hfXFxubmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5oLTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmg9MTM9dm9pZCBiYXRhZHZfaXZfZGVpbml0KHZvaWQpO1xcbm5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uaC0xNC1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmg6MTU6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9CQVRfSVZfT0dNX0hfICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5oLTYtXFxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0JBVF9WX0hfXFxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0JBVF9WX0hfXFxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaC05LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaC0xMS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5oOjEyOiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVlxcbm5ldC9iYXRtYW4tYWR2L2JhdF92LmgtMTMtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5oPTQwPXN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfdl9tZXNoX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JhdF92LmgtNDMtXFxubmV0L2JhdG1hbi1hZHYvYmF0X3YuaDo0NDojZW5kaWYgLyogQ09ORklHX0JBVE1BTl9BRFZfQkFUTUFOX1YgKi9cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdi5oLTQ1LVxcbm5ldC9iYXRtYW4tYWR2L2JhdF92Lmg6NDY6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9CQVRfVl9IXyAqL1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmgtNi1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0JBVF9WX0VMUF9IX1xcbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfQkFUX1ZfRUxQX0hfXFxubmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmgtOS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5oPTE5PWludCBiYXRhZHZfdl9lbHBfcGFja2V0X3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5oLTIxLVxcbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5oOjIyOiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfQkFUX1ZfRUxQX0hfICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uaC02LVxcbm5ldC9iYXRtYW4tYWR2L2JhdF92X29nbS5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQkFUX1ZfT0dNX0hfXFxubmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9CQVRfVl9PR01fSF9cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9vZ20uaC05LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmg9MjQ9aW50IGJhdGFkdl92X29nbV9wYWNrZXRfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmgtMjYtXFxubmV0L2JhdG1hbi1hZHYvYmF0X3Zfb2dtLmg6Mjc6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9CQVRfVl9PR01fSF8gKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JpdGFycmF5LmgtNi1cXG5uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQklUQVJSQVlfSF9cXG5uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfQklUQVJSQVlfSF9cXG5uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5oLTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5oPTUzPWJvb2wgYmF0YWR2X2JpdF9nZXRfcGFja2V0KHZvaWQgKnByaXYsIHVuc2lnbmVkIGxvbmcgKnNlcV9iaXRzLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYml0YXJyYXkuaC01NS1cXG5uZXQvYmF0bWFuLWFkdi9iaXRhcnJheS5oOjU2OiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfQklUQVJSQVlfSF8gKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jPTI0NjQ9aW50IGJhdGFkdl9ibGFfYmFja2JvbmVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuYy0yNTA3LVxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jOjI1MDg6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RBVFxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jLTI1MDktLyoqXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC02LVxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfQkxBX0hfXFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9CTEFfSF9cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC05LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg9Mjc9c3RhdGljIGlubGluZSBib29sIGJhdGFkdl9ibGFfaXNfbG9vcGRldGVjdF9tYWMoY29uc3QgdWludDhfdCAqbWFjKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmgtMzQtXFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg6MzU6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JMQVxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oLTM2LWJvb2wgYmF0YWR2X2JsYV9yeChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg9NTQ9dm9pZCBiYXRhZHZfYmxhX2ZyZWUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdik7XFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg6NTU6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RBVFxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oLTU2LWJvb2wgYmF0YWR2X2JsYV9jaGVja19jbGFpbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1OCAqYWRkcixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oLTU5LSNkZWZpbmUgQkFUQURWX0JMQV9DUkNfSU5JVFxcdDBcXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaDo2MDojZWxzZSAvKiBpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CTEEgKi9cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC02MS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5oPTEyND1ib29sIGJhdGFkdl9ibGFfY2hlY2tfY2xhaW0oc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdTggKmFkZHIsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC0xMjktXFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg6MTMwOiNlbmRpZiAvKiBpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CTEEgKi9cXG5uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuaC0xMzEtXFxubmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmg6MTMyOiNlbmRpZiAvKiBpZm5kZWYgX05FVF9CQVRNQU5fQURWX0JMQV9IXyAqL1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9NDQ0PXN0YXRpYyB2b2lkIGJhdGFkdl9kYXRfZW50cnlfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIF9fYmUzMiBpcCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTQ5MS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo0OTI6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNDkzLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9NTcwPXN0YXRpYyB2b2lkIGJhdGFkdl9kYmdfYXJwKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01NzQtXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NTc1OiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRyAqL1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTU3Ni1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5oLTYtXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmg6NzojaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9ESVNUUklCVVRFRF9BUlBfVEFCTEVfSF9cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0RJU1RSSUJVVEVEX0FSUF9UQUJMRV9IX1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5oLTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaC0yMC1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaDoyMTojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREFUXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmgtMjItXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaD0xNzk9c3RhdGljIGlubGluZSB2b2lkIGJhdGFkdl9kYXRfaW5jX2NvdW50ZXIoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5oLTE4My1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaDoxODQ6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0RBVCAqL1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5oLTE4NS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuaDoxODY6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9ESVNUUklCVVRFRF9BUlBfVEFCTEVfSF8gKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uaC02LVxcbm5ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0ZSQUdNRU5UQVRJT05fSF9cXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9GUkFHTUVOVEFUSU9OX0hfXFxubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5oLTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmg9Mzc9YmF0YWR2X2ZyYWdfY2hlY2tfZW50cnkoc3RydWN0IGJhdGFkdl9mcmFnX3RhYmxlX2VudHJ5ICpmcmFnc19lbnRyeSlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2ZyYWdtZW50YXRpb24uaC00NC1cXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmg6NDU6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9GUkFHTUVOVEFUSU9OX0hfICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5oLTYtXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0dBVEVXQVlfQ0xJRU5UX0hfXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0dBVEVXQVlfQ0xJRU5UX0hfXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuaC05LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuaD00Nz1zdGF0aWMgaW5saW5lIHZvaWQgYmF0YWR2X2d3X25vZGVfcHV0KHN0cnVjdCBiYXRhZHZfZ3dfbm9kZSAqZ3dfbm9kZSlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmgtNTQtXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuaDo1NTojZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0dBVEVXQVlfQ0xJRU5UX0hfICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NvbW1vbi5oLTYtXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jb21tb24uaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0dBVEVXQVlfQ09NTU9OX0hfXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jb21tb24uaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0dBVEVXQVlfQ09NTU9OX0hfXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jb21tb24uaC05LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jb21tb24uaD0yOT12b2lkIGJhdGFkdl9nd19mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpO1xcbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY29tbW9uLmgtMzAtXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jb21tb24uaDozMTojZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX0dBVEVXQVlfQ09NTU9OX0hfICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oLTYtXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX0hBUkRfSU5URVJGQUNFX0hfXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0hBUkRfSU5URVJGQUNFX0hfXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaC05LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaD0xNDQ9c3RhdGljIGlubGluZSBib29sIGJhdGFkdl9pc193aWZpKHUzMiB3aWZpX2ZsYWdzKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaC0xNDgtXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaDoxNDk6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9IQVJEX0lOVEVSRkFDRV9IXyAqL1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFzaC5oLTYtXFxubmV0L2JhdG1hbi1hZHYvaGFzaC5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfSEFTSF9IX1xcbm5ldC9iYXRtYW4tYWR2L2hhc2guaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX0hBU0hfSF9cXG5uZXQvYmF0bWFuLWFkdi9oYXNoLmgtOS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2hhc2guaD0xNDM9c3RhdGljIGlubGluZSB2b2lkICpiYXRhZHZfaGFzaF9yZW1vdmUoc3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmhhc2gsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9oYXNoLmgtMTcwLVxcbm5ldC9iYXRtYW4tYWR2L2hhc2guaDoxNzE6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9IQVNIX0hfICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC02LVxcbm5ldC9iYXRtYW4tYWR2L2xvZy5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfTE9HX0hfXFxubmV0L2JhdG1hbi1hZHYvbG9nLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9MT0dfSF9cXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC05LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbG9nLmgtMTYtXFxubmV0L2JhdG1hbi1hZHYvbG9nLmg6MTc6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHXFxubmV0L2JhdG1hbi1hZHYvbG9nLmgtMTgtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9sb2cuaD0zOD1lbnVtIGJhdGFkdl9kYmdfbGV2ZWwge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbG9nLmgtNjMtXFxubmV0L2JhdG1hbi1hZHYvbG9nLmg6NjQ6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHXFxubmV0L2JhdG1hbi1hZHYvbG9nLmgtNjUtaW50IGJhdGFkdl9kZWJ1Z19sb2coc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgY2hhciAqZm10LCAuLi4pXFxubmV0L2JhdG1hbi1hZHYvbG9nLmg9NjY9X19wcmludGYoMiwgMyk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC04My1cXHR3aGlsZSAoMClcXG5uZXQvYmF0bWFuLWFkdi9sb2cuaDo4NDojZWxzZSAvKiAhQ09ORklHX0JBVE1BTl9BRFZfREVCVUcgKi9cXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC04NS1fX3ByaW50Zig0LCA1KVxcbm5ldC9iYXRtYW4tYWR2L2xvZy5oPTg2PXN0YXRpYyBpbmxpbmUgdm9pZCBfYmF0YWR2X2RiZyhpbnQgdHlwZSBfX2Fsd2F5c191bnVzZWQsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9sb2cuaC0xNDctXFxubmV0L2JhdG1hbi1hZHYvbG9nLmg6MTQ4OiNlbmRpZiAvKiBfTkVUX0JBVE1BTl9BRFZfTE9HX0hfICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9MTg5PWludCBiYXRhZHZfbWVzaF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTIwMS1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZWd3Lmxpc3RfbG9jayk7XFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjIwMjojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1RcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMjAzLVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubWxhX2xvY2spO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTIxMy1cXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2Vndy5nYXRld2F5X2xpc3QpO1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYzoyMTQ6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX01DQVNUXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTIxNS1cXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VtY2FzdC53YW50X2FsbF91bnNub29wYWJsZXNfbGlzdCk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMjIxLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNldHQucm9hbV9saXN0KTtcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM6MjIyOiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVFxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy0yMjMtXFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZiYXRfcHJpdi1cXHUwMDNlbWNhc3QubWxhX2xpc3QpO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5oLTYtXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfTUFJTl9IX1xcbm5ldC9iYXRtYW4tYWR2L21haW4uaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX01BSU5fSF9cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmgtOS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uaD0zNzA9aW50IGJhdGFkdl90aHJvd191ZXZlbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgZW51bSBiYXRhZHZfdWV2X3R5cGUgdHlwZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uaC0zNzItXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5oOjM3MzojZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX01BSU5fSF8gKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9Nzk1PXN0YXRpYyBpbnQgYmF0YWR2X21lc2hpZl9pbml0X2xhdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODE1LVxcdFdSSVRFX09OQ0UoYmF0X3ByaXYtXFx1MDAzZWJvbmRpbmcsIDApO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODE2OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CTEFcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgxNy1cXHRXUklURV9PTkNFKGJhdF9wcml2LVxcdTAwM2VicmlkZ2VfbG9vcF9hdm9pZGFuY2UsIDEpO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODE4LSNlbmRpZlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODE5OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9EQVRcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTgyMC1cXHRXUklURV9PTkNFKGJhdF9wcml2LVxcdTAwM2VkaXN0cmlidXRlZF9hcnBfdGFibGUsIDEpO1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODIxLSNlbmRpZlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6ODIyOiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVFxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODIzLVxcdFdSSVRFX09OQ0UoYmF0X3ByaXYtXFx1MDAzZW11bHRpY2FzdF9tb2RlLCAxKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODM0LVxcdFdSSVRFX09OQ0UoYmF0X3ByaXYtXFx1MDAzZWhvcF9wZW5hbHR5LCAzMCk7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo4MzU6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy04MzYtXFx0V1JJVEVfT05DRShiYXRfcHJpdi1cXHUwMDNlbG9nX2xldmVsLCAwKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODQ2LVxcdGF0b21pY19zZXQoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2V0dC5vZ21fYXBwZW5kX2NudCwgMCk7XFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo4NDc6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JMQVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtODQ4LVxcdGF0b21pY19zZXQoXFx1MDAyNmJhdF9wcml2LVxcdTAwM2VibGEubnVtX3JlcXVlc3RzLCAwKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9OTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3Qge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy05ODItXFx0eyBcXFwidHRfcm9hbV9hZHZfcnhcXFwiIH0sXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo5ODM6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX01DQVNUXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy05ODQtXFx0eyBcXFwibWNhc3RfdHhcXFwiIH0sXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTk5NC0jZW5kaWZcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjk5NTojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREFUXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy05OTYtXFx0eyBcXFwiZGF0X2dldF90eFxcXCIgfSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmgtNi1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfTUVTSF9JTlRFUkZBQ0VfSF9cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfTUVTSF9JTlRFUkZBQ0VfSF9cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oPTM1PXN0YXRpYyBpbmxpbmUgdm9pZCBiYXRhZHZfbWVzaGlmX3ZsYW5fcHV0KHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW4pXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5oLTQyLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmg6NDM6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9NRVNIX0lOVEVSRkFDRV9IXyAqL1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmgtNi1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX01VTFRJQ0FTVF9IX1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oOjg6I2RlZmluZSBfTkVUX0JBVE1BTl9BRFZfTVVMVElDQVNUX0hfXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmgtOS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oPTE5PWVudW0gYmF0YWR2X2ZvcndfbW9kZSB7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC00MS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaDo0MjojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1RcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC00My1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oPTExNj1zdGF0aWMgaW5saW5lIGludCBiYXRhZHZfbWNhc3RfZm9yd19tY3NlbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oLTEyMi1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaDoxMjM6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX01DQVNUICovXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmgtMTI0LVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oOjEyNTojZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX01VTFRJQ0FTVF9IXyAqL1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTIzMD1zdGF0aWMgaW50IGJhdGFkdl9uZXRsaW5rX21lc2hfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqbXNnLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTI1NC1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MjU1OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CTEFcXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMjU2LVxcdGlmIChubGFfcHV0X3UxNihtc2csIEJBVEFEVl9BVFRSX0JMQV9DUkMsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMjk1LVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoyOTY6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JMQVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0yOTctXFx0aWYgKG5sYV9wdXRfdTgobXNnLCBCQVRBRFZfQVRUUl9CUklER0VfTE9PUF9BVk9JREFOQ0VfRU5BQkxFRCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0yOTktXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjMwMDojZW5kaWYgLyogQ09ORklHX0JBVE1BTl9BRFZfQkxBICovXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTMwMS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MzAyOiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9EQVRcXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMzAzLVxcdGlmIChubGFfcHV0X3U4KG1zZywgQkFUQURWX0FUVFJfRElTVFJJQlVURURfQVJQX1RBQkxFX0VOQUJMRUQsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMzA1LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzozMDY6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0RBVCAqL1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zMDctXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMzM3LVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzozMzg6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTMzOS1cXHRpZiAobmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9MT0dfTEVWRUwsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtMzQxLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzozNDI6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0RFQlVHICovXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTM0My1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MzQ0OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVFxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zNDUtXFx0aWYgKG5sYV9wdXRfdTgobXNnLCBCQVRBRFZfQVRUUl9NVUxUSUNBU1RfRk9SQ0VGTE9PRF9FTkFCTEVELFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTM1MS1cXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6MzUyOiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVCAqL1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0zNTMtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9NDM1PXN0YXRpYyBpbnQgYmF0YWR2X25ldGxpbmtfc2V0X21lc2goc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbylcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy00NjktXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjQ3MDojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfQkxBXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTQ3MS1cXHRpZiAoaW5mby1cXHUwMDNlYXR0cnNbQkFUQURWX0FUVFJfQlJJREdFX0xPT1BfQVZPSURBTkNFX0VOQUJMRURdKSB7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNDc3LVxcdH1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6NDc4OiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9CTEEgKi9cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNDc5LVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo0ODA6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RBVFxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy00ODEtXFx0aWYgKGluZm8tXFx1MDAzZWF0dHJzW0JBVEFEVl9BVFRSX0RJU1RSSUJVVEVEX0FSUF9UQUJMRV9FTkFCTEVEXSkge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTQ4Ny1cXHR9XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjQ4ODojZW5kaWYgLyogQ09ORklHX0JBVE1BTl9BRFZfREFUICovXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTQ4OS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy01NjctXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjU2ODojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREVCVUdcXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNTY5LVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tCQVRBRFZfQVRUUl9MT0dfTEVWRUxdKSB7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNTc0LVxcdH1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM6NTc1OiNlbmRpZiAvKiBDT05GSUdfQkFUTUFOX0FEVl9ERUJVRyAqL1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy01NzYtXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjU3NzojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1RcXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNTc4LVxcdGlmIChpbmZvLVxcdTAwM2VhdHRyc1tCQVRBRFZfQVRUUl9NVUxUSUNBU1RfRk9SQ0VGTE9PRF9FTkFCTEVEXSkge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTU4OC1cXHR9XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjU4OTojZW5kaWYgLyogQ09ORklHX0JBVE1BTl9BRFZfTUNBU1QgKi9cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNTkwLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTc4MT1zdGF0aWMgaW50IGJhdGFkdl9uZXRsaW5rX2hhcmRpZl9maWxsKHN0cnVjdCBza19idWZmICptc2csXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtODIyLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo4MjM6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTgyNC1cXHRpZiAobmxhX3B1dF91MzIobXNnLCBCQVRBRFZfQVRUUl9FTFBfSU5URVJWQUwsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtODMwLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo4MzE6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WICovXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTgzMi1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYz05MTI9c3RhdGljIGludCBiYXRhZHZfbmV0bGlua19zZXRfaGFyZGlmKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtOTI0LVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo5MjU6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTkyNi1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy05NDQtXFx0fVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzo5NDU6I2VuZGlmIC8qIENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WICovXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTk0Ni1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuaC02LVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX05FVExJTktfSF9cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9ORVRMSU5LX0hfXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5oLTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmg9MjY9ZXh0ZXJuIHN0cnVjdCBnZW5sX2ZhbWlseSBiYXRhZHZfbmV0bGlua19mYW1pbHk7XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5oLTI3LVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuaDoyODojZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX05FVExJTktfSF8gKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYz02NzI9YmF0YWR2X25laWdoX25vZGVfY3JlYXRlKHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGUsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMtNzAyLVxcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYzo3MDM6I2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WXFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jLTcwNC1cXHRBQ0NFU1NfUFJJVkFURShuZWlnaF9ub2RlLCBvcmlnX25vZGVfaWQpID0gb3JpZ19ub2RlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jPTk0Nz1zdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqYmF0YWR2X29yaWdfbm9kZV9uZXcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYy05ODMtXFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jOjk4NDojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1RcXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmMtOTg1LVxcdG9yaWdfbm9kZS1cXHUwMDNlbWNhc3RfZmxhZ3MgPSBCQVRBRFZfTUNBU1RfV0FOVF9OT19SVFI0O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oLTYtXFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oOjc6I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfT1JJR0lOQVRPUl9IX1xcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaDo4OiNkZWZpbmUgX05FVF9CQVRNQU5fQURWX09SSUdJTkFUT1JfSF9cXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgtOS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaD0xNjI9c3RhdGljIGlubGluZSB2b2lkIGJhdGFkdl9vcmlnX25vZGVfcHV0KHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGUpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgtMTY5LVxcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuaDoxNzA6I2VuZGlmIC8qIF9ORVRfQkFUTUFOX0FEVl9PUklHSU5BVE9SX0hfICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM9MTI2Mz1pbnQgYmF0YWR2X3JlY3ZfYmNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTM3Ny1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM6MTM3ODojaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfTUNBU1RcXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTM3OS0vKipcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYz0xMzkyPWludCBiYXRhZHZfcmVjdl9tY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xNDUzLX1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM6MTQ1NDojZW5kaWYgLyogQ09ORklHX0JBVE1BTl9BRFZfTUNBU1QgKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaC02LVxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaDo3OiNpZm5kZWYgX05FVF9CQVRNQU5fQURWX1JPVVRJTkdfSF9cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmg6ODojZGVmaW5lIF9ORVRfQkFUTUFOX0FEVl9ST1VUSU5HX0hfXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5oLTktXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmg9Mjg9aW50IGJhdGFkdl9yZWN2X2JjYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaC0yOS1cXHRcXHRcXHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcmVjdl9pZik7XFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5oOjMwOiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9NQ0FTVFxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaC0zMS1pbnQgYmF0YWR2X3JlY3ZfbWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmg9NDk9Ym9vbCBiYXRhZHZfd2luZG93X3Byb3RlY3RlZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzMzIgc2VxX251bV9kaWZmLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5oLTUyLVxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuaDo1MzojZW5kaWYgLyogX05FVF9CQVRNQU5fQURWX1JPVVRJTkdfSF8gKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYz0xMzM9aW50IGJhdGFkdl9zZW5kX3VuaWNhc3Rfc2tiKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmMtMTM1LXtcXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmM6MTM2OiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVlxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy0xMzctXFx0c3RydWN0IGJhdGFkdl9oYXJkaWZfbmVpZ2hfbm9kZSAqaGFyZGlmX25laWdoO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTE0Mi1cXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmM6MTQzOiNpZmRlZiBDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVlxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy0xNDQtXFx0aGFyZGlmX25laWdoID0gYmF0YWR2X2hhcmRpZl9uZWlnaF9nZXQobmVpZ2gtXFx1MDAzZWlmX2luY29taW5nLCBuZWlnaC1cXHUwMDNlYWRkcik7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmgtNi1cXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmg6NzojaWZuZGVmIF9ORVRfQkFUTUFOX0FEVl9TRU5EX0hfXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjMyOjA4LjQwMDg2MjM5NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4MzA5NDU3MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBMYXRlc3QgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgdGhlIGNvcmUgb2YgdGhlIHdvcmsgc2VlbXMgdG8gYmUgaW4gYG5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNgLiBJdCdzIGEgc2lnbmlmaWNhbnQgZml4LXVwIGFyb3VuZCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2l0aGluIHRoZSBCLkEuVC5NLkEuTi4gdHJhbnNsYXRpb24gdGFibGUuIFNwZWNpZmljYWxseSwgYSBgZmxhZ3NfbG9ja2Agd2FzIGludHJvZHVjZWQgd2l0aGluIGBiYXRhZHZfdHRfY29tbW9uX2VudHJ5YCB0byBndWFyZCBhY2Nlc3MgdG8gdGhlIGBmbGFnc2AgZmllbGQgYW5kIGByb2FtX2F0YC4gVGhpcyBpcyBjcnVjaWFsIGJlY2F1c2UgYGZsYWdzYCBjb250cm9scyB0aGluZ3MgbGlrZSBgQkFUQURWX1RUX0NMSUVOVF9ORVdgLCBgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HYCwgYW5kIHNvIG9uLiBDb25jdXJyZW50IGFjY2VzcyB0byB0aGVzZSBmbGFncyBpcyBhIGNsYXNzaWMgc291cmNlIG9mIHByb2JsZW1zLCBzbyB0aGlzIGxvY2sgaXMgYSBzbWFydCBtb3ZlLiBUaGVyZSdzIGFsc28gYSBidWcgZml4IGluIGhvdyB0aGUgbG9jYWwgaGFzaCB0YWJsZSBlbnRyaWVzIGFyZSByZW1vdmVkOyBpdCB3YXMgbWF0Y2hpbmcgYmFzZWQgb24gYWRkcmVzcyBhbmQgVklEIGluc3RlYWQgb2YgdGhlIGNvcnJlY3QgcG9pbnRlciBjb21wYXJpc29uLiBUaGUgY29kZSBpbiBgYmF0YWR2X3R0X2xvY2FsX3JlbW92ZWAsIGBiYXRhZHZfdHRfbG9jYWxfcHVyZ2VfcGVuZGluZ19jbGllbnRzYCwgYW5kIG90aGVycyBoYXMgYWxzbyBiZWVuIGNsZWFuZWQgdXAuXG5cblRoZW4sIG1vdmluZyBvbiB0byBgbmV0L2JhdG1hbi1hZHYvYmF0X3YuY2AsIHRoZXJlJ3MgYSBjb3JyZWN0aW9uIHRvIHRoZSBgYmF0YWR2X3ZfbmVpZ2hfaXNfc29iYCBjYWxjdWxhdGlvbi4gSXQgYXBwZWFycyB0aGUgbG9naWMgZm9yIGRldGVybWluaW5nIGlmIGEgbmVpZ2hib3IgaXMgc3VpdGFibGUgKGhhdmluZyBiZXR0ZXIgdGhyb3VnaHB1dCkgd2FzIGludmVydGVkIG9yIGZsYXdlZCBpbiBzb21lIHdheS4gRmluYWxseSwgaW4gYG5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jYCwgdGhlcmUncyBhIG1pbm9yIGNvcnJlY3Rpb24gaW4gYGJhdGFkdl9kYmdfYXJwYCB3aXRoIHRoZSBzdWJ0eXBlIG9mIHRoZSBwYWNrZXQuXG5cbkkgYWxzbyBzZWUgc2V2ZXJhbCBpbnN0YW5jZXMgb2YgYF9fYWxpZ25lZCgyKWAgYW5ub3RhdGlvbnMgb24gTUFDIGFkZHJlc3Nlcy4gVGhhdCdzIGEgZ29vZCBwcmFjdGljZSB0byBhdm9pZCB1bmFsaWduZWQgbWVtb3J5IGFjY2VzcyBpc3N1ZXMgZHVyaW5nIGNhc3Rpbmcgb3IgY29weWluZyBFdGhlcm5ldCBhZGRyZXNzZXMuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXMsIGlzIHRoaXMgY29kZSBldmVuIHJlYWNoYWJsZSBpbiBhIHRlc3RpbmcgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIHVzaW5nIGZ1enppbmc/IFRoZSBhbnN3ZXIgaXMgeWVzLiBCLkEuVC5NLkEuTi4gQWR2YW5jZWQgaXMgYSBtb2R1bGUgaW4gdGhlIExpbnV4IGtlcm5lbCB0aGF0IG9wZXJhdGVzIG92ZXIgdmlydHVhbCBpbnRlcmZhY2VzIG9yIHJhdyBuZXRsaW5rLCBhbmQgaXQgaXMgZnJlcXVlbnRseSBmdXp6ZWQsIHRodXMgcmVhY2hhYmxlLlxuXG5Ob3csIHNob3VsZCB3ZSBjb25zaWRlciBpdCB3b3J0aHkgb2YgaW50ZW5zZSBmdXp6aW5nPyBEZWZpbml0ZWx5LiBUaGlzIHBhdGNoIGFsdGVycyBleGVjdXRpb24gZmxvdywgaW5jbHVkaW5nIGNvcmUgcm91dGluZyBhbmQgdHJhbnNsYXRpb24gdGFibGUgbG9naWMuIFdlJ3ZlIGdvdCB0aGUgaW50cm9kdWN0aW9uIG9mIGNvbmN1cnJlbmN5IGxvY2tpbmcsIHBvdGVudGlhbGx5IGludmVydGluZyBvZiBsb2dpYyBpbiAgYGJhdGFkdl92X25laWdoX2lzX3NvYmAgYW5kIGEgaGFzaCByZW1vdmFsIGJ1ZyBmaXgsIGFzIHdlbGwgYXMgc2V2ZXJhbCBmaXhlcyB0byBsb2NhbCB0YWJsZSBzaXplIGNvdW50aW5nIGFuZCB0cmFuc2l0aW9uIGxvZ2ljLlxuXG5TbywgdGhlIG5leHQgc3RlcCBpcyB0byBuYWlsIGRvd24gdGhlIGVudHJ5IHBvaW50cyBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLiBUaW1lIHRvIGNoZWNrIGBuZXQvYmF0bWFuLWFkdi9LY29uZmlnYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQyODMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzI6MTUuMjMxODEwNzc2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzNDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjIENvcHlyaWdodCAoQykgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczpcXG4gICAzOlxcdCNcXG4gICA0OlxcdCMgTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaFxcbiAgIDU6XFx0XFxuICAgNjpcXHQjXFxuICAgNzpcXHQjIEIuQS5ULk0uQS5OIG1lc2hpbmcgcHJvdG9jb2xcXG4gICA4OlxcdCNcXG4gICA5OlxcdFxcbiAgMTA6XFx0Y29uZmlnIEJBVE1BTl9BRFZcXG4gIDExOlxcdFxcdHRyaXN0YXRlIFxcXCJCLkEuVC5NLkEuTi4gQWR2YW5jZWQgTWVzaGluZyBQcm90b2NvbFxcXCJcXG4gIDEyOlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgMTM6XFx0XFx0aGVscFxcbiAgMTQ6XFx0XFx0ICBCLkEuVC5NLkEuTi4gKGJldHRlciBhcHByb2FjaCB0byBtb2JpbGUgYWQtaG9jIG5ldHdvcmtpbmcpIGlzXFxuICAxNTpcXHRcXHQgIGEgcm91dGluZyBwcm90b2NvbCBmb3IgbXVsdGktaG9wIGFkLWhvYyBtZXNoIG5ldHdvcmtzLiBUaGVcXG4gIDE2OlxcdFxcdCAgbmV0d29ya3MgbWF5IGJlIHdpcmVkIG9yIHdpcmVsZXNzLiBTZWVcXG4gIDE3OlxcdFxcdCAgaHR0cHM6Ly93d3cub3Blbi1tZXNoLm9yZy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXIgc3BhY2VcXG4gIDE4OlxcdFxcdCAgdG9vbHMuXFxuICAxOTpcXHRcXG4gIDIwOlxcdGNvbmZpZyBCQVRNQU5fQURWX0JBVE1BTl9WXFxuICAyMTpcXHRcXHRib29sIFxcXCJCLkEuVC5NLkEuTi4gViBwcm90b2NvbFxcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gQkFUTUFOX0FEViBcXHUwMDI2XFx1MDAyNiAhKENGRzgwMjExPW0gXFx1MDAyNlxcdTAwMjYgQkFUTUFOX0FEVj15KVxcbiAgMjM6XFx0XFx0ZGVmYXVsdCB5XFxuICAyNDpcXHRcXHRoZWxwXFxuICAyNTpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIEIuQS5ULk0uQS5OLiBWIHByb3RvY29sLCB0aGUgc3VjY2Vzc29yXFxuICAyNjpcXHRcXHQgIG9mIHRoZSBjdXJyZW50bHkgdXNlZCBCLkEuVC5NLkEuTi4gSVYgcHJvdG9jb2wuIFRoZSBtYWluXFxuICAyNzpcXHRcXHQgIGNoYW5nZXMgaW5jbHVkZSBzcGxpdHRpbmcgb2YgdGhlIE9HTSBwcm90b2NvbCBpbnRvIGEgbmVpZ2hib3JcXG4gIDI4OlxcdFxcdCAgZGlzY292ZXJ5IHByb3RvY29sIChFY2hvIExvY2F0aW9uIFByb3RvY29sLCBFTFApIGFuZCBhIG5ldyBPR01cXG4gIDI5OlxcdFxcdCAgUHJvdG9jb2wgT0dNdjIgZm9yIGZsb29kaW5nIHByb3RvY29sIGluZm9ybWF0aW9uIHRocm91Z2ggdGhlXFxuICAzMDpcXHRcXHQgIG5ldHdvcmssIGFzIHdlbGwgYXMgYSB0aHJvdWdocHV0IGJhc2VkIG1ldHJpYy5cXG4gIDMxOlxcdFxcdCAgQi5BLlQuTS5BLk4uIFYgaXMgY3VycmVudGx5IGNvbnNpZGVyZWQgZXhwZXJpbWVudGFsIGFuZCBub3RcXG4gIDMyOlxcdFxcdCAgY29tcGF0aWJsZSB0byBCLkEuVC5NLkEuTi4gSVYgbmV0d29ya3MuXFxuICAzMzpcXHRcXG4gIDM0OlxcdGNvbmZpZyBCQVRNQU5fQURWX0JMQVxcbiAgMzU6XFx0XFx0Ym9vbCBcXFwiQnJpZGdlIExvb3AgQXZvaWRhbmNlXFxcIlxcbiAgMzY6XFx0XFx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWIFxcdTAwMjZcXHUwMDI2IElORVRcXG4gIDM3OlxcdFxcdHNlbGVjdCBDUkMxNlxcbiAgMzg6XFx0XFx0c2VsZWN0IE5FVF9DUkMzMkNcXG4gIDM5OlxcdFxcdGRlZmF1bHQgeVxcbiAgNDA6XFx0XFx0aGVscFxcbiAgNDE6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIEJMQSAoQnJpZGdlIExvb3AgQXZvaWRhbmNlKSwgYSBtZWNoYW5pc21cXG4gIDQyOlxcdFxcdCAgdG8gYXZvaWQgRXRoZXJuZXQgZnJhbWVzIGxvb3Bpbmcgd2hlbiBtZXNoIG5vZGVzIGFyZSBjb25uZWN0ZWRcXG4gIDQzOlxcdFxcdCAgdG8gYm90aCB0aGUgc2FtZSBMQU4gYW5kIHRoZSBzYW1lIG1lc2guIElmIHlvdSB3aWxsIG5ldmVyIHVzZVxcbiAgNDQ6XFx0XFx0ICBtb3JlIHRoYW4gb25lIG1lc2ggbm9kZSBpbiB0aGUgc2FtZSBMQU4sIHlvdSBjYW4gc2FmZWx5IHJlbW92ZVxcbiAgNDU6XFx0XFx0ICB0aGlzIGZlYXR1cmUgYW5kIHNhdmUgc29tZSBzcGFjZS5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIEJBVE1BTl9BRFZfREFUXFxuICA0ODpcXHRcXHRib29sIFxcXCJEaXN0cmlidXRlZCBBUlAgVGFibGVcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIEJBVE1BTl9BRFYgXFx1MDAyNlxcdTAwMjYgSU5FVFxcbiAgNTA6XFx0XFx0ZGVmYXVsdCB5XFxuICA1MTpcXHRcXHRoZWxwXFxuICA1MjpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgREFUIChEaXN0cmlidXRlZCBBUlAgVGFibGUpLCBhIERIVCBiYXNlZFxcbiAgNTM6XFx0XFx0ICBtZWNoYW5pc20gdGhhdCBpbmNyZWFzZXMgQVJQIHJlbGlhYmlsaXR5IG9uIHNwYXJzZSB3aXJlbGVzc1xcbiAgNTQ6XFx0XFx0ICBtZXNoIG5ldHdvcmtzLiBJZiB5b3UgdGhpbmsgdGhhdCB5b3VyIG5ldHdvcmsgZG9lcyBub3QgbmVlZFxcbiAgNTU6XFx0XFx0ICB0aGlzIG9wdGlvbiB5b3UgY2FuIHNhZmVseSByZW1vdmUgaXQgYW5kIHNhdmUgc29tZSBzcGFjZS5cXG4gIDU2OlxcdFxcbiAgNTc6XFx0Y29uZmlnIEJBVE1BTl9BRFZfTUNBU1RcXG4gIDU4OlxcdFxcdGJvb2wgXFxcIk11bHRpY2FzdCBvcHRpbWlzYXRpb25cXFwiXFxuICA1OTpcXHRcXHRkZXBlbmRzIG9uIEJBVE1BTl9BRFYgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiAhKEJSSURHRT1tIFxcdTAwMjZcXHUwMDI2IEJBVE1BTl9BRFY9eSlcXG4gIDYwOlxcdFxcdGRlZmF1bHQgeVxcbiAgNjE6XFx0XFx0aGVscFxcbiAgNjI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aWNhc3Qgb3B0aW1pc2F0aW9uIHdoaWNoIGFpbXMgdG9cXG4gIDYzOlxcdFxcdCAgcmVkdWNlIHRoZSBhaXIgb3ZlcmhlYWQgd2hpbGUgaW1wcm92aW5nIHRoZSByZWxpYWJpbGl0eSBvZlxcbiAgNjQ6XFx0XFx0ICBtdWx0aWNhc3QgbWVzc2FnZXMuXFxuICA2NTpcXHRcXG4gIDY2OlxcdGNvbmZpZyBCQVRNQU5fQURWX0RFQlVHXFxuICA2NzpcXHRcXHRib29sIFxcXCJCLkEuVC5NLkEuTi4gZGVidWdnaW5nXFxcIlxcbiAgNjg6XFx0XFx0ZGVwZW5kcyBvbiBCQVRNQU5fQURWXFxuICA2OTpcXHRcXHRoZWxwXFxuICA3MDpcXHRcXHQgIFRoaXMgaXMgYW4gb3B0aW9uIGZvciB1c2UgYnkgZGV2ZWxvcGVyczsgbW9zdCBwZW9wbGUgc2hvdWxkXFxuICA3MTpcXHRcXHQgIHNheSBOIGhlcmUuIFRoaXMgZW5hYmxlcyBjb21waWxhdGlvbiBvZiBzdXBwb3J0IGZvclxcbiAgNzI6XFx0XFx0ICBvdXRwdXR0aW5nIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byB0aGUgdHJhY2luZyBidWZmZXIuIFRoZSBvdXRwdXQgaXNcXG4gIDczOlxcdFxcdCAgY29udHJvbGxlZCB2aWEgdGhlIGJhdGFkdiBuZXRkZXYgc3BlY2lmaWMgbG9nX2xldmVsIHNldHRpbmcuXFxuICA3NDpcXHRcXG4gIDc1OlxcdGNvbmZpZyBCQVRNQU5fQURWX1RSQUNJTkdcXG4gIDc2OlxcdFxcdGJvb2wgXFxcIkIuQS5ULk0uQS5OLiB0cmFjaW5nIHN1cHBvcnRcXFwiXFxuICA3NzpcXHRcXHRkZXBlbmRzIG9uIEJBVE1BTl9BRFZcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gRVZFTlRfVFJBQ0lOR1xcbiAgNzk6XFx0XFx0aGVscFxcbiAgODA6XFx0XFx0ICBUaGlzIGlzIGFuIG9wdGlvbiBmb3IgdXNlIGJ5IGRldmVsb3BlcnM7IG1vc3QgcGVvcGxlIHNob3VsZFxcbiAgODE6XFx0XFx0ICBzYXkgTiBoZXJlLiBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZ2F0aGVyIHRyYWNlcyBsaWtlIHRoZSBkZWJ1Z1xcbiAgODI6XFx0XFx0ICBtZXNzYWdlcyB1c2luZyB0aGUgZ2VuZXJpYyB0cmFjaW5nIGluZnJhc3RydWN0dXJlIG9mIHRoZSBrZXJuZWwuXFxuICA4MzpcXHRcXHQgIEJBVE1BTl9BRFZfREVCVUcgbXVzdCBhbHNvIGJlIHNlbGVjdGVkIHRvIGdldCB0cmFjZSBldmVudHMgZm9yXFxuICA4NDpcXHRcXHQgIGJhdGFkdl9kYmcuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjMyOjE1LjIzMTkzNzgyNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxODU4MDQ0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKktjb25maWcgRGVwZW5kZW5jeSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5jbHVzaW9uIGFuZCBkZXBlbmRlbmNpZXMgb2YgYEJBVE1BTl9BRFZgLiBUaW1lIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBwYXJlbnQgYEtjb25maWdgIGZpbGUuIEknbSB0aGlua2luZyBJJ2xsIHRyYWNlIHRoZSBwYXRoIHRvIHNlZSB0aGUgZXhhY3QgY29udGV4dCBpbiB3aGljaCBgQkFUTUFOX0FEVmAgaXMgYnJvdWdodCBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9uLiBXaGF0IGFyZSB0aGUgZ2F0aW5nIG9wdGlvbnM/IEFyZSB0aGVyZSBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgb3Iga2VybmVsIGZlYXR1cmUgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gQXJlIHRoZXJlIGFueSBjb25mbGljdGluZyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IHByZXZlbnQgaXQgZnJvbSBiZWluZyBlbmFibGVkIGluIGNlcnRhaW4gc2NlbmFyaW9zPyBVbmRlcnN0YW5kaW5nIHRoZSBmdWxsIHBpY3R1cmUgb2YgaXRzIGRlcGVuZGVuY2llcyB3aWxsIGJlIGNydWNpYWwgZm9yIGRlYnVnZ2luZyBvciBjdXN0b21pemluZyBpdHMgYmVoYXZpb3IgbGF0ZXIgb24uIFRoaXMgaXMgd2hlcmUgdGhlIGZ1biBiZWdpbnMuIExldCdzIHNlZSB3aGF0IHRoZSBgS2NvbmZpZ2AgZmlsZXMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjgwNSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzI6MTcuNDE3NzQ1ODMxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NDAyMDA5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJCQVRNQU5fQURWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozMjoxNy41MDIxNTU1NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM4NDY3ODk5OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKk5hdmlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYSBzcGVjaWZpYyBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHJlc2lkZXMuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlIHdpdGggdGhlIExpbnV4IGtlcm5lbCdzIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBpcyB0byBzdGFydCB3aXRoIHRoZSBmb3VuZGF0aW9uYWwgYG5ldC9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUganVtcGluZy1vZmYgcG9pbnQgZm9yIGFueXRoaW5nIG5ldHdvcmstcmVsYXRlZC4gSWYgaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB0aGVyZSwgb3IgaWYgSSBzdXNwZWN0IHRoaXMgb3B0aW9uIG1pZ2h0IGJlIHBhcnQgb2YgYW4gYWRkLW9uIG9yIGEgbW9yZSBzcGVjaWFsaXplZCBwYXJ0IG9mIG5ldHdvcmtpbmcgSSdsbCBuZWVkIHRvIGdvIGRlZXBlci4gU28sIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgYG5ldC9LY29uZmlnYCBvciwgc2luY2UgaXQncyBhIHBvc3NpYmlsaXR5LCB0aGF0IEkgYW0gZGVhbGluZyB3aXRoIHNvbWV0aGluZyBpbiBiYXRtYW4tYWR2LCBJJ2xsIGdvIGZvciB0aGUgc3BlY2lmaWMgYHNvdXJjZSBcIm5ldC9iYXRtYW4tYWR2L0tjb25maWdcImAgZmlsZSBhbmQgaW52ZXN0aWdhdGUgaXQgdGhvcm91Z2hseS4gSSBhbSBwcmV0dHkgY29uZmlkZW50IEknbGwgZmluZCBteSBhbnN3ZXIgaW4gb25lIG9mIHRob3NlIHR3byBsb2NhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3MDM2LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzI6MjEuMzQ4OTQ5NDU5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTczNzc1MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYmF0bWFuLWFkdlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiXFxuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1NzEgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbm5ldC9LY29uZmlnPTI3Mj1zb3VyY2UgXFxcIm5ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzM6c291cmNlIFxcXCJuZXQvYmF0bWFuLWFkdi9LY29uZmlnXFxcIlxcbm5ldC9LY29uZmlnLTI3NC1zb3VyY2UgXFxcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXFxcIlxcbi0tXFxubmV0L01ha2VmaWxlPTU5PW9iai0kKENPTkZJR19DRVBIX0xJQilcXHRcXHQrPSBjZXBoL1xcbm5ldC9NYWtlZmlsZTo2MDpvYmotJChDT05GSUdfQkFUTUFOX0FEVilcXHQrPSBiYXRtYW4tYWR2L1xcbm5ldC9NYWtlZmlsZS02MS1vYmotJChDT05GSUdfTkZDKVxcdFxcdCs9IG5mYy9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlLTUtXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfQkFUTUFOX0FEVikgKz0gYmF0bWFuLWFkdi5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6NzpiYXRtYW4tYWR2LXkgKz0gYmF0X2FsZ28ub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjg6YmF0bWFuLWFkdi15ICs9IGJhdF9pdl9vZ20ub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjk6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WKSArPSBiYXRfdi5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTA6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0JBVE1BTl9WKSArPSBiYXRfdl9lbHAub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjExOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CQVRNQU5fVikgKz0gYmF0X3Zfb2dtLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxMjpiYXRtYW4tYWR2LXkgKz0gYml0YXJyYXkub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjEzOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9CTEEpICs9IGJyaWRnZV9sb29wX2F2b2lkYW5jZS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTQ6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX0RBVCkgKz0gZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxNTpiYXRtYW4tYWR2LXkgKz0gZnJhZ21lbnRhdGlvbi5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTY6YmF0bWFuLWFkdi15ICs9IGdhdGV3YXlfY2xpZW50Lm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToxNzpiYXRtYW4tYWR2LXkgKz0gZ2F0ZXdheV9jb21tb24ub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjE4OmJhdG1hbi1hZHYteSArPSBoYXJkLWludGVyZmFjZS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MTk6YmF0bWFuLWFkdi15ICs9IGhhc2gub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjIwOmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9ERUJVRykgKz0gbG9nLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToyMTpiYXRtYW4tYWR2LXkgKz0gbWFpbi5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MjI6YmF0bWFuLWFkdi15ICs9IG1lc2gtaW50ZXJmYWNlLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToyMzpiYXRtYW4tYWR2LSQoQ09ORklHX0JBVE1BTl9BRFZfTUNBU1QpICs9IG11bHRpY2FzdC5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MjQ6YmF0bWFuLWFkdi0kKENPTkZJR19CQVRNQU5fQURWX01DQVNUKSArPSBtdWx0aWNhc3RfZm9ydy5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MjU6YmF0bWFuLWFkdi15ICs9IG5ldGxpbmsub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjI2OmJhdG1hbi1hZHYteSArPSBvcmlnaW5hdG9yLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZToyNzpiYXRtYW4tYWR2LXkgKz0gcm91dGluZy5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6Mjg6YmF0bWFuLWFkdi15ICs9IHNlbmQub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjI5OmJhdG1hbi1hZHYtJChDT05GSUdfQkFUTUFOX0FEVl9UUkFDSU5HKSArPSB0cmFjZS5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGU6MzA6YmF0bWFuLWFkdi15ICs9IHRwX21ldGVyLm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTozMTpiYXRtYW4tYWR2LXkgKz0gdHJhbnNsYXRpb24tdGFibGUub1xcbm5ldC9iYXRtYW4tYWR2L01ha2VmaWxlOjMyOmJhdG1hbi1hZHYteSArPSB0dmx2Lm9cXG5uZXQvYmF0bWFuLWFkdi9NYWtlZmlsZTozMzpiYXRtYW4tYWR2LXkgKz0gdmVyc2lvbi5vXFxubmV0L2JhdG1hbi1hZHYvTWFrZWZpbGUtMzQtXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jPTI2PXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCBiYXRhZHZfYWxnb19saXN0O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uYy0yOC0vKipcXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jOjI5OiAqIGJhdGFkdl9hbGdvX2luaXQoKSAtIEluaXRpYWxpemUgYmF0bWFuLWFkdiBhbGdvcml0aG0gbWFuYWdlbWVudCBkYXRhXFxubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uYy0zMC0gKiAgc3RydWN0dXJlc1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uYz0xMDc9aW50IGJhdGFkdl9hbGdvX3NlbGVjdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCBjaGFyICpuYW1lKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvYmF0X2FsZ28uYy0xMjQtICpcXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jOjEyNTogKiBDaGVjayB0aGF0IHRoZSByZXF1ZXN0ZWQgYWxnb3JpdGhtIGlzIGtub3duIHRvIGJhdG1hbi1hZHYgYW5kIHRoZW4gc3RvcmVcXG5uZXQvYmF0bWFuLWFkdi9iYXRfYWxnby5jLTEyNi0gKiB0aGUgbmFtZSBhcyB0aGUgbmV3IGRlZmF1bHQgcm91dGluZyBhbGdvcml0aG0uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYz0yMzA9YmF0YWR2X3ZfZWxwX3dpZmlfbmVpZ2hfcHJvYmUoc3RydWN0IGJhdGFkdl9oYXJkaWZfbmVpZ2hfbm9kZSAqbmVpZ2gpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYy0yNDgtXFx0ICogYWxnb3JpdGhtIHNhbXBsaW5nIGludGVydmFsIChtaW5zdHJlbCkuIEluIHRoaXMgd2F5LCBpZiBub3RcXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYzoyNDk6XFx0ICogZW5vdWdoIHRyYWZmaWMgaGFzIGJlZW4gc2VudCB0byB0aGUgbmVpZ2hib3IsIGJhdG1hbi1hZHYgY2FuXFxubmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmMtMjUwLVxcdCAqIGdlbmVyYXRlIDIgcHJvYmUgcGFja2V0cyBhbmQgcHVzaCB0aGUgUkMgYWxnb3JpdGhtIHRvIHBlcmZvcm1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2JhdF92X2VscC5jPTI5MD1zdGF0aWMgdm9pZCBiYXRhZHZfdl9lbHBfcGVyaW9kaWNfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYy0zMzgtXFx0LyogVGhlIHRocm91Z2hwdXQgbWV0cmljIGlzIHVwZGF0ZWQgb24gZWFjaCBzZW50IHBhY2tldC4gVGhpcyB3YXksIGlmIGFcXG5uZXQvYmF0bWFuLWFkdi9iYXRfdl9lbHAuYzozMzk6XFx0ICogbm9kZSBpcyBkZWFkIGFuZCBubyBsb25nZXIgc2VuZHMgcGFja2V0cywgYmF0bWFuLWFkdiBpcyBzdGlsbCBhYmxlIHRvXFxubmV0L2JhdG1hbi1hZHYvYmF0X3ZfZWxwLmMtMzQwLVxcdCAqIHJlYWN0IHRpbWVseSB0byBpdHMgZGVhdGguXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz02ND1lbnVtIGJhdGFkdl9ib290aHR5cGUge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtNjktLyoqXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NzA6ICogZW51bSBiYXRhZHZfZGhjcG9wdGlvbmNvZGUgLSBESENQIG9wdGlvbiBjb2RlcyByZWxldmFudCBmb3IgYmF0bWFuLWFkdiBEQVRcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy03MS0gKi9cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz03Mj1lbnVtIGJhdGFkdl9kaGNwb3B0aW9uY29kZSB7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy04My0vKipcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo4NDogKiBlbnVtIGJhdGFkdl9kaGNwdHlwZSAtIERIQ1AgbWVzc2FnZSB0eXBlcyByZWxldmFudCBmb3IgYmF0bWFuLWFkdiBEQVRcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy04NS0gKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTEwODI9c3RhdGljIHUxNiBiYXRhZHZfYXJwX2dldF90eXBlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMTUyLSAqIEBza2I6IHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgcGFja2V0IHRvIGV4dHJhY3QgdGhlIFZJRCBmcm9tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTE1MzogKiBAaGRyX3NpemU6IHRoZSBzaXplIG9mIHRoZSBiYXRtYW4tYWR2IGhlYWRlciBlbmNhcHN1bGF0aW5nIHRoZSBwYWNrZXRcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMTU0LSAqXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYz0xODU3PXZvaWQgYmF0YWR2X2RhdF9zbm9vcF9vdXRnb2luZ19kaGNwX2FjayhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTg3OS0gKiBAc2tiOiB0aGUgcGFja2V0IHRvIHNub29wXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6MTg4MDogKiBAaGRyX3NpemU6IGhlYWRlciBzaXplLCB1cCB0byB0aGUgdGFpbCBvZiB0aGUgYmF0bWFuLWFkdiBoZWFkZXJcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xODgxLSAqXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmM9NTA1PWludCBiYXRhZHZfZnJhZ19zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jLTU1MS1cXHQgKiBsaW5lYXJpemVkIHRvIGF2b2lkIGluY29ycmVjdCBsZW5ndGggaW5mb3JtYXRpb24gYWZ0ZXIgYWxsXFxubmV0L2JhdG1hbi1hZHYvZnJhZ21lbnRhdGlvbi5jOjU1MjpcXHQgKiBiYXRtYW4tYWR2IGZyYWdtZW50cyB3ZXJlIGNyZWF0ZWQgYW5kIHN1Ym1pdHRlZCB0byB0aGVcXG5uZXQvYmF0bWFuLWFkdi9mcmFnbWVudGF0aW9uLmMtNTUzLVxcdCAqIGhhcmQtaW50ZXJmYWNlXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jPTE3OD12b2lkIGJhdGFkdl9nd19jaGVja19jbGllbnRfc3RvcChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYy0xOTMtXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYzoxOTQ6XFx0LyogaWYgYmF0bWFuLWFkdiBpcyBzd2l0Y2hpbmcgdGhlIGd3IGNsaWVudCBtb2RlIG9mZiBhbmQgYSBnYXRld2F5IHdhc1xcbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmMtMTk1LVxcdCAqIGFscmVhZHkgc2VsZWN0ZWQsIHNlbmQgYSBERUwgdWV2ZW50XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jPTUxNj1pbnQgYmF0YWR2X2d3X2R1bXAoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZ2F0ZXdheV9jbGllbnQuYy01NTMtICogQHNrYjogdGhlIHBhY2tldCB0byBjaGVja1xcbm5ldC9iYXRtYW4tYWR2L2dhdGV3YXlfY2xpZW50LmM6NTU0OiAqIEBoZWFkZXJfbGVuOiBhIHBvaW50ZXIgdG8gdGhlIGJhdG1hbi1hZHYgaGVhZGVyIHNpemVcXG5uZXQvYmF0bWFuLWFkdi9nYXRld2F5X2NsaWVudC5jLTU1NS0gKiBAY2hhZGRyOiBidWZmZXIgd2hlcmUgdGhlIGNsaWVudCBhZGRyZXNzIHdpbGwgYmUgc3RvcmVkLiBWYWxpZFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYz0xMjc9c3RhdGljIGJvb2wgYmF0YWR2X211dHVhbF9wYXJlbnRzKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYxLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy0xNTItICpcXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jOjE1MzogKiBJZiB0aGUgdXNlciBjcmVhdGVzIGFueSB2aXJ0dWFsIGRldmljZSBvbiB0b3Agb2YgYSBiYXRtYW4tYWR2IGludGVyZmFjZSwgaXRcXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTE1NC0gKiBpcyBpbXBvcnRhbnQgdG8gcHJldmVudCB0aGlzIG5ldyBpbnRlcmZhY2UgZnJvbSBiZWluZyB1c2VkIHRvIGNyZWF0ZSBhIG5ld1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy0xNTYtICogY29uZmlndXJhdGlvbikuIFRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgY2hlY2tzIGFsbCB0aGUgZmF0aGVycyBvZiB0aGVcXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jOjE1NzogKiBkZXZpY2UgcGFzc2VkIGFzIGFyZ3VtZW50IGxvb2tpbmcgZm9yIGEgYmF0bWFuLWFkdiBtZXNoIGludGVyZmFjZS5cXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTE1OC0gKlxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6MTU5OiAqIFJldHVybjogdHJ1ZSBpZiB0aGUgZGV2aWNlIGlzIGRlc2NlbmRhbnQgb2YgYSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlIChvclxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6MTYwOiAqIGlmIGl0IGlzIGEgYmF0bWFuLWFkdiBpbnRlcmZhY2UgaXRzZWxmKSwgZmFsc2Ugb3RoZXJ3aXNlXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy0xNjEtICovXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYz0xNjI9c3RhdGljIGJvb2wgYmF0YWR2X2lzX29uX2JhdG1hbl9pZmFjZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtMTY5LVxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6MTcwOlxcdC8qIGNoZWNrIGlmIHRoaXMgaXMgYSBiYXRtYW4tYWR2IG1lc2ggaW50ZXJmYWNlICovXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy0xNzEtXFx0aWYgKGJhdGFkdl9tZXNoaWZfaXNfdmFsaWQobmV0X2RldikpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTIwNS0gKiBSZWZ1c2UgbG9vcGJhY2sgZGV2aWNlcywgbm9uLUV0aGVybmV0IGRldmljZXMsIGRldmljZXMgd2l0aCBhIG5vbi1FdGhlcm5ldFxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6MjA2OiAqIGFkZHJlc3MgbGVuZ3RoIGFuZCBhbnkgZGV2aWNlIHRoYXQgaXMgYWxyZWFkeSBwYXJ0IG9mIGEgYmF0bWFuLWFkdiBtZXNoXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYy0yMDctICogaW50ZXJmYWNlIHN0YWNrLlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYz02NTM9aW50IGJhdGFkdl9oYXJkaWZfbWluX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSlcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtNjgyLVxcdC8qIHJlcG9ydCB0byB0aGUgb3RoZXIgY29tcG9uZW50cyB0aGUgbWF4aW11bSBhbW91bnQgb2YgYnl0ZXMgdGhhdFxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmM6NjgzOlxcdCAqIGJhdG1hbi1hZHYgY2FuIHNlbmQgb3ZlciB0aGUgd2lyZSAod2l0aG91dCBjb25zaWRlcmluZyB0aGUgcGF5bG9hZFxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtNjg0LVxcdCAqIG92ZXJoZWFkKS4gRm9yIGV4YW1wbGUsIHRoaXMgdmFsdWUgaXMgdXNlZCBieSBUVCB0byBjb21wdXRlIHRoZVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYz03OTQ9aW50IGJhdGFkdl9oYXJkaWZfZW5hYmxlX2ludGVyZmFjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtODY0LVxcdFxcdGJhdGFkdl9pbmZvKGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UsXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYzo4NjU6XFx0XFx0XFx0ICAgIFxcXCJUaGUgTVRVIG9mIGludGVyZmFjZSAlcyBpcyB0b28gc21hbGwgKCVpKSB0byBoYW5kbGUgdGhlIHRyYW5zcG9ydCBvZiBiYXRtYW4tYWR2IHBhY2tldHMuIFBhY2tldHMgZ29pbmcgb3ZlciB0aGlzIGludGVyZmFjZSB3aWxsIGJlIGZyYWdtZW50ZWQgb24gbGF5ZXIyIHdoaWMuLi5cXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTg2Ni1cXHRcXHRcXHQgICAgaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2Rldi1cXHUwMDNlbmFtZSwgaGFyZGlmX210dSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMtODcwLVxcdFxcdGJhdGFkdl9pbmZvKGhhcmRfaWZhY2UtXFx1MDAzZW1lc2hfaWZhY2UsXFxubmV0L2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYzo4NzE6XFx0XFx0XFx0ICAgIFxcXCJUaGUgTVRVIG9mIGludGVyZmFjZSAlcyBpcyB0b28gc21hbGwgKCVpKSB0byBoYW5kbGUgdGhlIHRyYW5zcG9ydCBvZiBiYXRtYW4tYWR2IHBhY2tldHMuIElmIHlvdSBleHBlcmllbmNlIHByb2JsZW1zIGdldHRpbmcgdHJhZmZpYyB0aHJvdWdoIHRyeSBpbmNyZWFzaW5nIHQuLi5cXG5uZXQvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jLTg3Mi1cXHRcXHRcXHQgICAgaGFyZF9pZmFjZS1cXHUwMDNlbmV0X2Rldi1cXHUwMDNlbmFtZSwgaGFyZGlmX210dSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYz04MD1zdGF0aWMgY2hhciAqYmF0YWR2X3Vldl90eXBlX3N0cltdID0ge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTg1LS8qKlxcbm5ldC9iYXRtYW4tYWR2L21haW4uYzo4NjogKiBiYXRhZHZfaW5pdCgpIC0gYmF0bWFuLWFkdiBtb2R1bGUgaW5pdCBmdW5jdGlvblxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy04Ny0gKlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jPTkzPXN0YXRpYyBpbnQgX19pbml0IGJhdGFkdl9pbml0KHZvaWQpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMTYyLS8qKlxcbm5ldC9iYXRtYW4tYWR2L21haW4uYzoxNjM6ICogYmF0YWR2X2V4aXQoKSAtIGJhdG1hbi1hZHYgbW9kdWxlIGV4aXQgZnVuY3Rpb25cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtMTY0LSAqXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9NTU0PXN0YXRpYyB2b2lkIGJhdGFkdl9yZWN2X2hhbmRsZXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTYwMy0vKipcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM6NjA0OiAqIGJhdGFkdl9yZWN2X2hhbmRsZXJfcmVnaXN0ZXIoKSAtIFJlZ2lzdGVyIGhhbmRsZXIgZm9yIGJhdG1hbi1hZHYgcGFja2V0IHR5cGVcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtNjA1LSAqIEBwYWNrZXRfdHlwZTogYmF0YWR2X3BhY2tldHR5cGUgd2hpY2ggc2hvdWxkIGJlIGhhbmRsZWRcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYz02ODc9Ym9vbCBiYXRhZHZfdmxhbl9hcF9pc29sYV9nZXQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgdW5zaWduZWQgc2hvcnQgdmlkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTcwNC0vKipcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM6NzA1OiAqIGJhdGFkdl90aHJvd191ZXZlbnQoKSAtIFNlbmQgYW4gdWV2ZW50IHdpdGggYmF0bWFuLWFkdiBzcGVjaWZpYyBlbnYgZGF0YVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy03MDYtICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmgtMTItI2RlZmluZSBCQVRBRFZfRFJJVkVSX0RFU0MgICBcXFwiQi5BLlQuTS5BLk4uIGFkdmFuY2VkXFxcIlxcbm5ldC9iYXRtYW4tYWR2L21haW4uaDoxMzojZGVmaW5lIEJBVEFEVl9EUklWRVJfREVWSUNFIFxcXCJiYXRtYW4tYWR2XFxcIlxcbm5ldC9iYXRtYW4tYWR2L21haW4uaC0xNC1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uaD0xNzA9ZW51bSBiYXRhZHZfdWV2X3R5cGUge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5oLTE5NS0jZW5kaWZcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmg6MTk2Oi8qIEFwcGVuZCAnYmF0bWFuLWFkdjogJyBiZWZvcmUga2VybmVsIG1lc3NhZ2VzICovXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5oLTE5Ny0jZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFxcXCI6IFxcXCIgZm10XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTIxMz1zdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00NDItLyoqXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzo0NDM6ICogYmF0YWR2X2ludGVyZmFjZV9yeCgpIC0gcmVjZWl2ZSBldGhlcm5ldCBmcmFtZSBvbiBsb2NhbCBiYXRtYW4tYWR2IGludGVyZmFjZVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDQ0LSAqIEBtZXNoX2lmYWNlOiBsb2NhbCBpbnRlcmZhY2Ugd2hpY2ggd2lsbCByZWNlaXZlIHRoZSBldGhlcm5ldCBmcmFtZVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDQ1LSAqIEBza2I6IGV0aGVybmV0IGZyYW1lIGZvciBAbWVzaF9pZmFjZVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NDQ2OiAqIEBoZHJfc2l6ZTogc2l6ZSBvZiBhbHJlYWR5IHBhcnNlZCBiYXRtYW4tYWR2IGhlYWRlclxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NDQ3OiAqIEBvcmlnX25vZGU6IG9yaWdpbmF0b3IgZnJvbSB3aGljaCB0aGUgYmF0bWFuLWFkdiBwYWNrZXQgd2FzIHNlbnRcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ0OC0gKlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDQ5LSAqIFNlbmRzIGFuIGV0aGVybmV0IGZyYW1lIHRvIHRoZSByZWNlaXZlIHBhdGggb2YgdGhlIGxvY2FsIEBtZXNoX2lmYWNlLlxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NDUwOiAqIHNrYi1cXHUwMDNlZGF0YSBtdXN0IHN0aWxsIHBvaW50IHRvIHRoZSBiYXRtYW4tYWR2IGhlYWRlciB3aXRoIHRoZSBzaXplIEBoZHJfc2l6ZS5cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ1MS0gKiBUaGUgY2FsbGVyIGhhcyB0byBoYXZlIHBhcnNlZCB0aGlzIGhlYWRlciBhbHJlYWR5IGFuZCBtYWRlIHN1cmUgdGhhdCBhdCBsZWFzdFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00NTQtICogVGhlIHBhY2tldCBtYXkgc3RpbGwgZ2V0IGRyb3BwZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBlbmNhcHN1bGF0ZWRcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjQ1NTogKiBldGhlcm5ldCBmcmFtZSBpcyBpbnZhbGlkIG9yIGNvbnRhaW5zIGFnYWluIGEgYmF0bWFuLWFkdiBwYWNrZXQuIEFsc29cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTQ1Ni0gKiB1bmljYXN0IHBhY2tldHMgd2lsbCBiZSBkcm9wcGVkIGRpcmVjdGx5IHdoZW4gdGhleSB3ZXJlIHNlbnQgYmV0d2VlbiB0d29cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM9NDU5PXZvaWQgYmF0YWR2X2ludGVyZmFjZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNDc1LVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NDc2OlxcdC8qIGNsZWFuIHRoZSBuZXRmaWx0ZXIgc3RhdGUgbm93IHRoYXQgdGhlIGJhdG1hbi1hZHYgaGVhZGVyIGhhcyBiZWVuXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy00NzctXFx0ICogcmVtb3ZlZFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz02NzQ9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2FkZF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTE2IHByb3RvLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy02ODAtXFx0Lyogb25seSA4MDIuMVEgdmxhbnMgYXJlIHN1cHBvcnRlZC5cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jOjY4MTpcXHQgKiBiYXRtYW4tYWR2IGRvZXMgbm90IGtub3cgaG93IHRvIGhhbmRsZSBvdGhlciB0eXBlc1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNjgyLVxcdCAqL1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz03Mjk9c3RhdGljIGludCBiYXRhZHZfaW50ZXJmYWNlX2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUxNiBwcm90byxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNzM0LVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NzM1OlxcdC8qIG9ubHkgODAyLjFRIHZsYW5zIGFyZSBzdXBwb3J0ZWQuIGJhdG1hbi1hZHYgZG9lcyBub3Qga25vdyBob3cgdG9cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTczNi1cXHQgKiBoYW5kbGUgb3RoZXIgdHlwZXNcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtNzU4LVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6NzU5Oi8qIGJhdG1hbi1hZHYgbmV0d29yayBkZXZpY2VzIGhhdmUgZGV2aWNlcyBuZXN0aW5nIGJlbG93IGl0IGFuZCBhcmUgYSBzcGVjaWFsXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy03NjAtICogXFxcInN1cGVyIGNsYXNzXFxcIiBvZiBub3JtYWwgbmV0d29yayBkZXZpY2VzOyBzcGxpdCB0aGVpciBsb2NrcyBvZmYgaW50byBhXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jPTExMzM9c3RhdGljIGludCBiYXRhZHZfbWVzaGlmX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMtMTE1NC0gKiAgbmV0bGlua1xcbm5ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmM6MTE1NTogKiBAbWVzaF9pZmFjZTogdGhlIHRvLWJlLXJlbW92ZWQgYmF0bWFuLWFkdiBpbnRlcmZhY2VcXG5uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jLTExNTYtICogQGhlYWQ6IGxpc3QgcG9pbnRlclxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYz0xMTU4PXN0YXRpYyB2b2lkIGJhdGFkdl9tZXNoaWZfZGVzdHJveV9uZXRsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMTc0LSAqXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYzoxMTc1OiAqIFJldHVybjogdHJ1ZSB3aGVuIG5ldF9kZXYgaXMgYSBiYXRtYW4tYWR2IGludGVyZmFjZSwgZmFsc2Ugb3RoZXJ3aXNlXFxubmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuYy0xMTc2LSAqL1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9NzE0PXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF9tbGFfdHRfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy03NTItICogYmVoaW5kIG91ciBsb2NhbCBicmlkZ2Ugc2VnbWVudDogU25vb3Bpbmcgc3dpdGNoZXMgd2lsbCBkaXJlY3RseVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjc1MzogKiBmb3J3YXJkIGxpc3RlbmVyIHJlcG9ydHMgdG8gdGhlIHF1ZXJpZXIsIHRoZXJlZm9yZSBiYXRtYW4tYWR2IGFuZFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTc1NC0gKiB0aGUgYnJpZGdlIHdpbGwgcG90ZW50aWFsbHkgbm90IHNlZSB0aGVzZSBsaXN0ZW5lcnMgLSB0aGUgcXVlcmllciBpc1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTE2NT1zdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9mb3J3X3J0cl9jb3VudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE4Ny0gKiBtb2RlIHRvIHVzZS4gRm9yIEJBVEFEVl9GT1JXX01DQVNUIGl0IGFsc28gZW5jYXBzdWxhdGVzIHRoZSBwYWNrZXQgd2l0aCBhXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTE4ODogKiBjb21wbGV0ZSBiYXRtYW4tYWR2IG11bHRpY2FzdCBoZWFkZXIuXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE4OS0gKlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE5My0gKlxcdGFuZCB0aGUgZW5jYXBzdWxhdGVkIG11bHRpY2FzdCBwYWNrZXQgd2l0aCBhbGwgZGVzdGluYXRpb24gYWRkcmVzc2VzXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTE5NDogKlxcdHdvdWxkIHN0aWxsIGZpdCBpbnRvIGFuIDEyODAgYnl0ZXMgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTE5NS0gKlxcdChleGNsdWRpbmcgdGhlIG91dGVyIGV0aGVybmV0IGZyYW1lKSBhbmQgd2UgY291bGQgc3VjY2Vzc2Z1bGx5IHB1c2hcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMTk2OiAqXFx0dGhlIGZ1bGwgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0IGhlYWRlci5cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMTk3OiAqXFx0QkFUQURWX0ZPUldfVUNBU1RTOiBJZiB0aGUgcGFja2V0IGNhbm5vdCBiZSBzZW50IGluIGEgYmF0bWFuLWFkdlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjExOTg6ICpcXHRtdWx0aWNhc3QgcGFja2V0IGFuZCB0aGUgYW1vdW50IG9mIGJhdG1hbi1hZHYgdW5pY2FzdCBwYWNrZXRzIG5lZWRlZFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTExOTktICpcXHRpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBjb25maWd1cmVkIG11bHRpY2FzdCBmYW5vdXQuXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xMjgwPXN0YXRpYyBpbnQgYmF0YWR2X21jYXN0X2Zvcndfc2VuZF9vcmlnKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzA3LSAqIGxpc3RlbmVyIHJlZ2lzdGVyZWQgaW4gdGhlIHRyYW5zbGF0aW9uIHRhYmxlLiBBIHRyYW5zbWlzc2lvbiBpcyBwZXJmb3JtZWRcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzA4OiAqIHZpYSBhIGJhdG1hbi1hZHYgdW5pY2FzdCBwYWNrZXQgZm9yIGVhY2ggc3VjaCBkZXN0aW5hdGlvbiBub2RlLlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzMDktICpcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEzMTQ9YmF0YWR2X21jYXN0X2ZvcndfdHQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzNTMtICogQkFUQURWX01DQVNUX1dBTlRfQUxMX0lQVjQgZmxhZyBzZXQuIEEgdHJhbnNtaXNzaW9uIGlzIHBlcmZvcm1lZCB2aWEgYVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjEzNTQ6ICogYmF0bWFuLWFkdiB1bmljYXN0IHBhY2tldCBmb3IgZWFjaCBzdWNoIGRlc3RpbmF0aW9uIG5vZGUuXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTM1NS0gKlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM9MTM2MD1iYXRhZHZfbWNhc3RfZm9yd193YW50X2FsbF9pcHY0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xMzkwLSAqIEJBVEFEVl9NQ0FTVF9XQU5UX0FMTF9JUFY2IGZsYWcgc2V0LiBBIHRyYW5zbWlzc2lvbiBpcyBwZXJmb3JtZWQgdmlhIGFcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxMzkxOiAqIGJhdG1hbi1hZHYgdW5pY2FzdCBwYWNrZXQgZm9yIGVhY2ggc3VjaCBkZXN0aW5hdGlvbiBub2RlLlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTEzOTItICpcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTEzOTc9YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGxfaXB2NihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTQyNy0gKiBCQVRBRFZfTUNBU1RfV0FOVF9BTExfSVBWNCBvciBCQVRBRFZfTUNBU1RfV0FOVF9BTExfSVBWNiBmbGFnIHNldC4gQVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE0Mjg6ICogdHJhbnNtaXNzaW9uIGlzIHBlcmZvcm1lZCB2aWEgYSBiYXRtYW4tYWR2IHVuaWNhc3QgcGFja2V0IGZvciBlYWNoIHN1Y2hcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNDI5LSAqIGRlc3RpbmF0aW9uIG5vZGUuXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xNDM1PWJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfYWxsKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNDU2LSAqIEJBVEFEVl9NQ0FTVF9XQU5UX05PX1JUUjQgZmxhZyB1bnNldC4gQSB0cmFuc21pc3Npb24gaXMgcGVyZm9ybWVkIHZpYSBhXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmM6MTQ1NzogKiBiYXRtYW4tYWR2IHVuaWNhc3QgcGFja2V0IGZvciBlYWNoIHN1Y2ggZGVzdGluYXRpb24gbm9kZS5cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNDU4LSAqXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xNDYzPWJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfYWxsX3J0cjQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE0OTMtICogQkFUQURWX01DQVNUX1dBTlRfTk9fUlRSNiBmbGFnIHVuc2V0LiBBIHRyYW5zbWlzc2lvbiBpcyBwZXJmb3JtZWQgdmlhIGFcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNDk0OiAqIGJhdG1hbi1hZHYgdW5pY2FzdCBwYWNrZXQgZm9yIGVhY2ggc3VjaCBkZXN0aW5hdGlvbiBub2RlLlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE0OTUtICpcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jPTE1MDA9YmF0YWR2X21jYXN0X2Zvcndfd2FudF9hbGxfcnRyNihzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMtMTUzMC0gKiBCQVRBRFZfTUNBU1RfV0FOVF9OT19SVFI0IG9yIEJBVEFEVl9NQ0FTVF9XQU5UX05PX1JUUjYgZmxhZyB1bnNldC4gQVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jOjE1MzE6ICogdHJhbnNtaXNzaW9uIGlzIHBlcmZvcm1lZCB2aWEgYSBiYXRtYW4tYWR2IHVuaWNhc3QgcGFja2V0IGZvciBlYWNoIHN1Y2hcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNTMyLSAqIGRlc3RpbmF0aW9uIG5vZGUuXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYz0xNTM4PWJhdGFkdl9tY2FzdF9mb3J3X3dhbnRfcnRyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYy0xNTYwLSAqIGludGVyZXN0IGluIGl0LCB0aGF0IGlzIGVpdGhlciB2aWEgdGhlIHRyYW5zbGF0aW9uIHRhYmxlIG9yIHRoZSBhY2NvcmRpbmdcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuYzoxNTYxOiAqIHdhbnQtYWxsIGZsYWdzLiBBIHRyYW5zbWlzc2lvbiBpcyBwZXJmb3JtZWQgdmlhIGEgYmF0bWFuLWFkdiB1bmljYXN0IHBhY2tldFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jLTE1NjItICogZm9yIGVhY2ggc3VjaCBkZXN0aW5hdGlvbiBub2RlLlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0Lmg9MTk9ZW51bSBiYXRhZHZfZm9yd19tb2RlIHtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC0yMC1cXHQvKipcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaDoyMTpcXHQgKiBAQkFUQURWX0ZPUldfQkNBU1Q6IGZvcndhcmQgdGhlIHBhY2tldCB0byBhbGwgbm9kZXMgdmlhIGEgYmF0bWFuLWFkdlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oLTIyLVxcdCAqICBicm9hZGNhc3QgcGFja2V0XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC0yNy1cXHQgKiBAQkFUQURWX0ZPUldfVUNBU1RTOiBmb3J3YXJkIHRoZSBwYWNrZXQgdG8gc29tZSBub2RlcyB2aWEgb25lXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0Lmg6Mjg6XFx0ICogIG9yIG1vcmUgYmF0bWFuLWFkdiB1bmljYXN0IHBhY2tldHNcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaC0yOS1cXHQgKi9cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5oLTMzLVxcdCAqIEBCQVRBRFZfRk9SV19NQ0FTVDogZm9yd2FyZCB0aGUgcGFja2V0IHRvIHNvbWUgbm9kZXMgdmlhIGFcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuaDozNDpcXHQgKiAgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmgtMzUtXFx0ICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTU4Mz1iYXRhZHZfbWNhc3RfZm9yd19wdXNoX3R2bHZzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTYwNS0gKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6NjA2OiAqIFB1c2hlcyBhIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCBoZWFkZXIgb250byB0aGUgZ2l2ZW4gc2tiIGFuZCBzZXRzXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy02MDctICogdGhlIHByb3ZpZGVkIHRvdGFsIFRWTFYgbGVuZ3RoIHZhbHVlIGluIGl0Llxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYz02MTU9YmF0YWR2X21jYXN0X2ZvcndfcHVzaF9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgc2hvcnQgdHZsdl9sZW4pXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTY0MS0gKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6NjQyOiAqIFRoaXMgc29ydHMgZGVzdGluYXRpb24gZW50cmllcyBpbnRvIGVpdGhlciB0aGUgb3JpZ2luYWwgYmF0bWFuLWFkdlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtNjQzLSAqIG11bHRpY2FzdCBwYWNrZXQgb3IgdGhlIHNrYiAoY29weSkgdGhhdCBpcyBnb2luZyB0byBiZSBzZW50IHRvIGNvbXBfbmVpZ2hcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtNjQ1LSAqXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo2NDY6ICogSW4gcHJlcGFyYXRpb24gZm9yIHRoZSBuZXh0LCB0byBiZSAodW5pY2FzdCkgdHJhbnNtaXR0ZWQgYmF0bWFuLWFkdiBtdWx0aWNhc3RcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTY0Ny0gKiBwYWNrZXQgc2tiIHRvIGJlIHNlbnQgdG8gdGhlIGdpdmVuIG5laWdoYm9yIG5vZGUsIHRyaWVzIHRvIGNvbGxlY3QgYWxsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTcxMD1zdGF0aWMgYm9vbCBiYXRhZHZfbWNhc3RfZm9yd19zaHJpbmtfZmlsbCh1OCAqc2xvdCwgdTE2IG51bV9kZXN0c19zbG90KVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy03MzYtICogYmF0YWR2X21jYXN0X2Zvcndfc2hyaW5rX3BhY2tfZGVzdHMoKSAtIHBhY2sgZGVzdGluYXRpb25zIG9mIGEgdHJhY2tlciBUVkxWXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo3Mzc6ICogQHNrYjogdGhlIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCB0byBjb21wYWN0IGRlc3RpbmF0aW9ucyBpblxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtNzM4LSAqXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTc5Mj1iYXRhZHZfbWNhc3RfZm9yd19zaHJpbmtfYWxpZ25fb2Zmc2V0KHVuc2lnbmVkIGludCBudW1fZGVzdHNfb2xkLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04MDgtICogYmF0YWR2X21jYXN0X2Zvcndfc2hyaW5rX3VwZGF0ZV9oZWFkZXJzKCkgLSB1cGRhdGUgc2hydW5rIG1jIHBhY2tldCBoZWFkZXJzXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4MDk6ICogQHNrYjogdGhlIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCB0byB1cGRhdGUgaGVhZGVycyBvZlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODEwLSAqIEBudW1fZGVzdHNfcmVkdWNlOiB0aGUgbnVtYmVyIG9mIGRlc3RpbmF0aW9ucyB0aGF0IHdlcmUgcmVtb3ZlZFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODExLSAqXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4MTI6ICogVGhpcyB1cGRhdGVzIGFueSBmaWVsZHMgb2YgYSBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQgdGhhdCBhcmUgYWZmZWN0ZWRcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTgxMy0gKiBieSB0aGUgcmVkdWNlZCBudW1iZXIgb2YgZGVzdGluYXRpb25zIGluIHRoZSBtdWx0aWNhc3QgdHJhY2tldCBUVkxWLiBJblxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04MTctICogVGhlIFRWTFYgbGVuZ3RoIGZpZWxkIG9mIHRoZSBhY2NvcmRpbmcgZ2VuZXJpYyBUVkxWIGhlYWRlci5cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjgxODogKiBUaGUgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0J3MgdG90YWwgVFZMViBsZW5ndGggZmllbGQuXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04MTktICpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjgyMDogKiBSZXR1cm46IFRoZSBvZmZzZXQgaW4gc2tiJ3MgdGFpbCBkaXJlY3Rpb24gYXQgd2hpY2ggdGhlIG5ldyBiYXRtYW4tYWR2XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04MjEtICogbXVsdGljYXN0IHBhY2tldCBoZWFkZXIgbmVlZHMgdG8gc3RhcnQuXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTgyND1iYXRhZHZfbWNhc3RfZm9yd19zaHJpbmtfdXBkYXRlX2hlYWRlcnMoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODYwLSAqIGJhdGFkdl9tY2FzdF9mb3J3X3Nocmlua19tb3ZlX2hlYWRlcnMoKSAtIG1vdmUgbXVsdGljYXN0IGhlYWRlcnMgYnkgb2Zmc2V0XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzo4NjE6ICogQHNrYjogdGhlIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldCB0byBtb3ZlIGhlYWRlcnMgZm9yXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04NjItICogQG9mZnNldDogYSBub24tbmVnYXRpdmUgb2Zmc2V0IHRvIG1vdmUgaGVhZGVycyBieSwgdG93YXJkcyB0aGUgc2tiIHRhaWxcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTg2My0gKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6ODY0OiAqIE1vdmVzIHRoZSBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQgaGVhZGVyLCBpdHMgbXVsdGljYXN0IHRyYWNrZXIgVFZMViBhbmRcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTg2NS0gKiBhbnkgVFZMVnMgaW4gYmV0d2VlbiBieSB0aGUgZ2l2ZW4gb2Zmc2V0IGluIGRpcmVjdGlvbiB0b3dhcmRzIHRoZSB0YWlsLlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYz04Njg9YmF0YWR2X21jYXN0X2Zvcndfc2hyaW5rX21vdmVfaGVhZGVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy04ODUtICogYmF0YWR2X21jYXN0X2Zvcndfc2hyaW5rX3RyYWNrZXIoKSAtIHJlbW92ZSB6ZXJvIGFkZHJlc3NlcyBpbiBhIHRyYWNrZXIgdHZsdlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6ODg2OiAqIEBza2I6IHRoZSBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQgdG8gKHBvdGVudGlhbGx5KSBzaHJpbmtcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTg4Ny0gKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODg4LSAqIFJlbW92ZXMgYWxsIGRlc3RpbmF0aW9ucyB3aXRoIGEgemVybyBNQUMgYWRkcmVzc2VzICgwMDowMDowMDowMDowMDowMCkgZnJvbVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6ODg5OiAqIHRoZSBnaXZlbiBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQncyB0cmFja2VyIFRWTFYgYW5kIHVwZGF0ZXMgaGVhZGVyc1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6ODkwOiAqIGFjY29yZGluZ2x5IHRvIG1haW50YWluIGEgdmFsaWQgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0Llxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtODkxLSAqL1xcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM9ODkyPXN0YXRpYyB2b2lkIGJhdGFkdl9tY2FzdF9mb3J3X3Nocmlua190cmFja2VyKHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTkwNS0vKipcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjkwNjogKiBiYXRhZHZfbWNhc3RfZm9yd19wYWNrZXQoKSAtIGZvcndhcmQgYSBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTkwNy0gKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjkwODogKiBAc2tiOiB0aGUgcmVjZWl2ZWQgb3IgbG9jYWxseSBnZW5lcmF0ZWQgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0XFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy05MDktICogQGxvY2FsX3htaXQ6IGluZGljYXRlcyB0aGF0IHRoZSBwYWNrZXQgd2FzIGxvY2FsbHkgZ2VuZXJhdGVkIGFuZCBub3QgcmVjZWl2ZWRcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTkxMC0gKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6OTExOiAqIFBhcnNlcyB0aGUgdHJhY2tlciBUVkxWIG9mIGEgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0IGFuZCBmb3J3YXJkcyB0aGVcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTkxMi0gKiBwYWNrZXQgYXMgaW5kaWNhdGVkIGluIHRoaXMgVFZMVi5cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM9OTI0PXN0YXRpYyBpbnQgYmF0YWR2X21jYXN0X2ZvcndfcGFja2V0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwMzAtICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYzoxMDMxOiAqIEBza2I6IHRoZSByZWNlaXZlZCBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwMzItICpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjEwMzM6ICogUGFyc2VzIHRoZSB0cmFja2VyIFRWTFYgb2YgYW4gaW5jb21pbmcgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0IGFuZFxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTAzNC0gKiBmb3J3YXJkcyB0aGUgcGFja2V0IGFzIGluZGljYXRlZCBpbiB0aGlzIFRWTFYuXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTEwNDY9aW50IGJhdGFkdl9tY2FzdF9mb3J3X3RyYWNrZXJfdHZsdl9oYW5kbGVyKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwNTUtICpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjEwNTY6ICogQ2FsY3VsYXRlcyB0aGUgdG90YWwgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0IGhlYWRlciBsZW5ndGggZm9yIGEgZ2l2ZW5cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwNTctICogbnVtYmVyIG9mIGRlc3RpbmF0aW9uIG5vZGVzIChleGNsdWRpbmcgdGhlIG91dGVyIGV0aGVybmV0IGZyYW1lKS5cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwNTgtICpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjEwNTk6ICogUmV0dXJuOiBUaGUgY2FsY3VsYXRlZCB0b3RhbCBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXQgaGVhZGVyIGxlbmd0aC5cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTEwNjAtICovXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jPTEwOTE9c3RhdGljIGludCBiYXRhZHZfbWNhc3RfZm9yd19leHBhbmRfaGVhZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMTE4LS8qKlxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM6MTExOTogKiBiYXRhZHZfbWNhc3RfZm9yd19wdXNoKCkgLSBlbmNhcHN1bGF0ZSBza2IgaW4gYSBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTExMjAtICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTExMjUtICpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjExMjY6ICogRW5jYXBzdWxhdGVzIHRoZSBnaXZlbiBtdWx0aWNhc3QgcGFja2V0IGluIGEgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0Llxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTEyNy0gKiBBIG11bHRpY2FzdCB0cmFja2VyIFRWTFYgd2l0aCBkZXN0aW5hdGlvbiBvcmlnaW5hdG9yIGFkZHJlc3NlcyBmb3IgYW55IG5vZGVcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmM9MTEzOD1ib29sIGJhdGFkdl9tY2FzdF9mb3J3X3B1c2goc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L211bHRpY2FzdF9mb3J3LmMtMTE2Ny0vKipcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjExNjg6ICogYmF0YWR2X21jYXN0X2ZvcndfbWNzZW5kKCkgLSBzZW5kIGEgc2VsZiBwcmVwYXJlZCBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTExNjktICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jLTExNzEtICpcXG5uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3RfZm9ydy5jOjExNzI6ICogVHJhbnNtaXRzIGEgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0IHRoYXQgd2FzIGxvY2FsbHkgcHJlcGFyZWQgYW5kXFxubmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0X2ZvcncuYy0xMTczLSAqIGNvbnN1bWVzL2ZyZWVzIGl0Llxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jPTUzPXN0cnVjdCBnZW5sX2ZhbWlseSBiYXRhZHZfbmV0bGlua19mYW1pbHk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmMtNTUtLyoqXFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jOjU2OiAqIGVudW0gYmF0YWR2X25ldGxpbmtfbXVsdGljYXN0X2dyb3VwcyAtIGJhdG1hbi1hZHYgZ2VuZXJpYyBuZXRsaW5rIG11bHRpY2FzdFxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy01Ny0gKiAgZ3JvdXBzXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9MTI5Nz1iYXRhZHZfZ2V0X3ZsYW5fZnJvbV9pbmZvKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0xMzE1LS8qKlxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoxMzE2OiAqIGJhdGFkdl9wcmVfZG9pdCgpIC0gUHJlcGFyZSBiYXRtYW4tYWR2IGdlbmwgZG9pdCByZXF1ZXN0XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTEzMTctICogQG9wczogcmVxdWVzdGVkIG5ldGxpbmsgb3BlcmF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9uZXRsaW5rLmM9MTMyMz1zdGF0aWMgaW50IGJhdGFkdl9wcmVfZG9pdChjb25zdCBzdHJ1Y3QgZ2VubF9zcGxpdF9vcHMgKm9wcyxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYy0xMzg0LS8qKlxcbm5ldC9iYXRtYW4tYWR2L25ldGxpbmsuYzoxMzg1OiAqIGJhdGFkdl9wb3N0X2RvaXQoKSAtIEVuZCBiYXRtYW4tYWR2IGdlbmwgZG9pdCByZXF1ZXN0XFxubmV0L2JhdG1hbi1hZHYvbmV0bGluay5jLTEzODYtICogQG9wczogcmVxdWVzdGVkIG5ldGxpbmsgb3BlcmF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmM9MTA5PWJhdGFkdl9vcmlnX25vZGVfdmxhbl9nZXQoc3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKm9yaWdfbm9kZSxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYy0xMzItLyoqXFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jOjEzMzogKiBiYXRhZHZfdmxhbl9pZF92YWxpZCgpIC0gY2hlY2sgaWYgdmxhbiBpZCBpcyBpbiB2YWxpZCBiYXRtYW4tYWR2IGVuY29kaW5nXFxubmV0L2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jLTEzNC0gKiBAdmlkOiB0aGUgVkxBTiBpZGVudGlmaWVyXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM9MTgyPWJvb2wgYmF0YWR2X2NoZWNrX21hbmFnZW1lbnRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMjEzLS8qKlxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoyMTQ6ICogYmF0YWR2X3NrYl9kZWNyZW1lbnRfdHRsKCkgLSBkZWNyZW1lbnQgdHRsIGluIGEgYmF0bWFuLWFkdiBoZWFkZXIsIGNzdW0tc2FmZVxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoyMTU6ICogQHNrYjogdGhlIHJlY2VpdmVkIHBhY2tldCB3aXRoIEBza2ItXFx1MDAzZWRhdGEgcG9pbnRpbmcgdG8gdGhlIGJhdG1hbi1hZHYgaGVhZGVyXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTIxNi0gKlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jPTEyNjM9aW50IGJhdGFkdl9yZWN2X2JjYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTEzNzktLyoqXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjEzODA6ICogYmF0YWR2X3JlY3ZfbWNhc3RfcGFja2V0KCkgLSBwcm9jZXNzIHJlY2VpdmVkIGJhdG1hbi1hZHYgbXVsdGljYXN0IHBhY2tldFxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoxMzgxOiAqIEBza2I6IHRoZSByZWNlaXZlZCBiYXRtYW4tYWR2IG11bHRpY2FzdCBwYWNrZXRcXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTM4Mi0gKiBAcmVjdl9pZjogaW50ZXJmYWNlIHRoYXQgdGhlIHNrYiBpcyByZWNlaXZlZCBvblxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xMzgzLSAqXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjEzODQ6ICogUGFyc2VzIHRoZSBnaXZlbiwgcmVjZWl2ZWQgYmF0bWFuLWFkdiBtdWx0aWNhc3QgcGFja2V0LiBEZXBlbmRpbmcgb24gdGhlXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTEzODUtICogY29udGVudHMgb2YgaXRzIFRWTFYgZm9yd2FyZHMgaXQgYW5kL29yIGRlY2Fwc3VsYXRlcyBpdCB0byBoYW5kIGl0IHRvIHRoZVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvc2VuZC5jPTI2OT1ib29sIGJhdGFkdl9zZW5kX3NrYl9wcmVwYXJlX3VuaWNhc3RfNGFkZHIoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy0zMTEtICpcXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmM6MzEyOiAqIFdyYXAgdGhlIGdpdmVuIHNrYiBpbnRvIGEgYmF0bWFuLWFkdiB1bmljYXN0IG9yIHVuaWNhc3QtNGFkZHIgaGVhZGVyXFxubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTMxMy0gKiBkZXBlbmRpbmcgb24gd2hldGhlciBCQVRBRFZfVU5JQ0FTVCBvciBCQVRBRFZfVU5JQ0FTVF80QUREUiB3YXMgc3VwcGxpZWRcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYz0zMTg9aW50IGJhdGFkdl9zZW5kX3NrYl91bmljYXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmMtMzg2LSAqIExvb2sgdXAgdGhlIHJlY2lwaWVudCBub2RlIGZvciB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpbiB0aGUgZXRoZXJuZXRcXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmM6Mzg3OiAqIGhlYWRlciB2aWEgdGhlIHRyYW5zbGF0aW9uIHRhYmxlLiBXcmFwIHRoZSBnaXZlbiBza2IgaW50byBhIGJhdG1hbi1hZHZcXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmMtMzg4LSAqIHVuaWNhc3Qgb3IgdW5pY2FzdC00YWRkciBoZWFkZXIgZGVwZW5kaW5nIG9uIHdoZXRoZXIgQkFUQURWX1VOSUNBU1Qgb3JcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYz0zOTQ9aW50IGJhdGFkdl9zZW5kX3NrYl92aWFfdHRfZ2VuZXJpYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTQyOC0gKlxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYzo0Mjk6ICogTG9vayB1cCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGdhdGV3YXkuIFdyYXAgdGhlIGdpdmVuIHNrYiBpbnRvIGEgYmF0bWFuLWFkdlxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy00MzAtICogdW5pY2FzdCBoZWFkZXIgYW5kIHNlbmQgdGhpcyBmcmFtZSB0byB0aGlzIGdhdGV3YXkgbm9kZS5cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuaD02Nj1pbnQgYmF0YWR2X3NlbmRfc2tiX3ZpYV9ndyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvc2VuZC5oLTc2LSAqIExvb2sgdXAgdGhlIHJlY2lwaWVudCBub2RlIGZvciB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBpbiB0aGUgZXRoZXJuZXRcXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmg6Nzc6ICogaGVhZGVyIHZpYSB0aGUgdHJhbnNsYXRpb24gdGFibGUuIFdyYXAgdGhlIGdpdmVuIHNrYiBpbnRvIGEgYmF0bWFuLWFkdlxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuaC03OC0gKiB1bmljYXN0IGhlYWRlci4gVGhlbiBzZW5kIHRoaXMgZnJhbWUgdG8gdGhlIGFjY29yZGluZyBkZXN0aW5hdGlvbiBub2RlLlxcbi0tXFxubmV0L2JhdG1hbi1hZHYvc2VuZC5oPTgyPXN0YXRpYyBpbmxpbmUgaW50IGJhdGFkdl9zZW5kX3NrYl92aWFfdHQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuaC05OC0gKiBMb29rIHVwIHRoZSByZWNpcGllbnQgbm9kZSBmb3IgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gdGhlIGV0aGVybmV0XFxubmV0L2JhdG1hbi1hZHYvc2VuZC5oOjk5OiAqIGhlYWRlciB2aWEgdGhlIHRyYW5zbGF0aW9uIHRhYmxlLiBXcmFwIHRoZSBnaXZlbiBza2IgaW50byBhIGJhdG1hbi1hZHZcXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmgtMTAwLSAqIHVuaWNhc3QtNGFkZHIgaGVhZGVyLiBUaGVuIHNlbmQgdGhpcyBmcmFtZSB0byB0aGUgYWNjb3JkaW5nIGRlc3RpbmF0aW9uXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jPTEwNDY9dm9pZCBiYXRhZHZfdHBfc3RhcnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmRzdCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RwX21ldGVyLmMtMTExMS1cXHQvKiBpbml0aWFsaXNlIHRoZSBDV05EIHRvIDMqTVNTIChTZWN0aW9uIDMuMSBpbiBSRkM1NjgxKS5cXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jOjExMTI6XFx0ICogRm9yIGJhdG1hbi1hZHYgdGhlIE1TUyBpcyB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCByZWNlaXZlZCBieSB0aGVcXG5uZXQvYmF0bWFuLWFkdi90cF9tZXRlci5jLTExMTMtXFx0ICogbWVzaF9pbnRlcmZhY2UsIGhlbmNlIGl0cyBNVFVcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg9MTkzPXN0cnVjdCBiYXRhZHZfd2lmaV9uZXRfZGV2aWNlX3N0YXRlIHtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMjEzLS8qKlxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MjE0OiAqIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAtIG5ldHdvcmsgZGV2aWNlIGtub3duIHRvIGJhdG1hbi1hZHZcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTIxNS0gKi9cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTIxNj1zdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2Uge1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MjE3OlxcdC8qKiBAaWZfc3RhdHVzOiBzdGF0dXMgb2YgdGhlIGludGVyZmFjZSBmb3IgYmF0bWFuLWFkdiAqL1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMjE4LVxcdGNoYXIgaWZfc3RhdHVzO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC0yMzUtXFx0ICogQGJhdG1hbl9hZHZfcHR5cGU6IHBhY2tldCB0eXBlIGRlc2NyaWJpbmcgcGFja2V0cyB0aGF0IHNob3VsZCBiZVxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MjM2OlxcdCAqIHByb2Nlc3NlZCBieSBiYXRtYW4tYWR2IGZvciB0aGlzIGludGVyZmFjZVxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMjM3LVxcdCAqL1xcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozMjoyMS41MDYzMzQ0MTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTAxOTM0NzA1NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1vZGlmaWVkIEZ1bmN0aW9ucyBpbiBiYXRtYW4tYWR2IGZvciBOb24tU3RhdGljIEVudHJpZXMqKlxuXG5Pa2F5LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IHdlcmUgdG91Y2hlZCBpbiBgbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuY2AgYW5kIGFzc29jaWF0ZWQgZmlsZXMuIFRoaXMgaXMgbGlrZWx5IHBhcnQgb2YgYSBkZWVwZXIgZGl2ZSBpbnRvIHRoZSBCYXRtYW4tYWR2IGNvZGUsIHByb2JhYmx5IHJlbGF0ZWQgdG8gc29tZSByZWNlbnQgbW9kaWZpY2F0aW9ucyBvciBhIHNwZWNpZmljIHRhc2sgSSdtIHdvcmtpbmcgb24uIExldCdzIHNlZSB3aGF0J3MgYmVlbiBjaGFuZ2VkLCBmdW5jdGlvbiBieSBmdW5jdGlvbi5cblxuUmlnaHQsIHNvIGFmdGVyIHJldmlld2luZyB0aGUgZGlmZiwgaGVyZSdzIHdoYXQgc3RhbmRzIG91dDpcblxuKiAgICoqYG5ldC9iYXRtYW4tYWR2L2JhdF9pdl9vZ20uY2AgYW5kIGBuZXQvYmF0bWFuLWFkdi9iYXRfdi5jYDoqKiBUaGVzZSBmaWxlcyBoYXZlIGBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYmAgYW5kIGBiYXRhZHZfdl9uZWlnaF9pc19zb2JgLCByZXNwZWN0aXZlbHksIGJ1dCB0aGV5IGFyZSBzdGF0aWMgZnVuY3Rpb24gZGVjbGFyYXRpb25zLCB3aGljaCBpcyBsZXNzIGludGVyZXN0aW5nIGZvciBteSBjdXJyZW50IG9iamVjdGl2ZS4gTGlrZWx5IHNvbWUgdHdlYWtzIHRvIHRoZSBhbGdvcml0aG0gb3BlcmF0aW9ucy5cbiogICAqKmBuZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuY2A6KiogYGJhdGFkdl9ibGFfaW5pdGAgaXMgYSBub24tc3RhdGljIGZ1bmN0aW9uIHdoaWNoIGlzIHdvcnRoIGZ1cnRoZXIgZXhhbWluYXRpb24uXG4qICAgKipgbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmNgOioqIFNldmVyYWwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGhlcmU6IGBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnlgLCBgYmF0YWR2X2RhdF9zbm9vcF9vdXRnb2luZ19hcnBfcmVxdWVzdGAsIGBiYXRhZHZfZGF0X3Nub29wX2luY29taW5nX2FycF9yZXF1ZXN0YCwgYW5kIGBiYXRhZHZfZGF0X3Nub29wX2luY29taW5nX2FycF9yZXBseWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVzZWQgYW5kIHRoZWlyIGltcGFjdCBvbiB0aGUgZGF0IHBhdGguXG4qICAgKipgbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY2A6KiogVGhpcyBoYXMgc29tZSBzdGF0aWMgbmV0ZGV2IG9wZXJhdGlvbnMsIGBiYXRhZHZfaW50ZXJmYWNlX3NldF9tYWNfYWRkcmAsIGFuZCBgYmF0YWR2X2ludGVyZmFjZV90eGAuIFRoZXkgbGlrZWx5IHdvbid0IGJlIHJlbGV2YW50IGZvciBteSBjdXJyZW50IG5vbi1zdGF0aWMgZnVuY3Rpb24gaW52ZXN0aWdhdGlvbi5cbiogICAqKmBuZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuY2A6KiogSGVyZSBhcmUgYSBmZXcgZnVuY3Rpb25zIHRvIGNoZWNrLCBpbmNsdWRpbmcgYGJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY0YCwgYGJhdGFkdl9tY2FzdF9tbGFfbWVzaGlmX2dldF9pcHY2YCwgYW5kIGBiYXRhZHZfbWNhc3RfbWxhX2JyaWRnZV9nZXRgLlxuKiAgICoqYG5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNgOioqIEFuZCBoZXJlJ3MgdGhlIGNvcmUuIFNldmVyYWwgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaGF2ZSBiZWVuIG1vZGlmaWVkIGhlcmU6IGBiYXRhZHZfdHRfbG9jYWxfYWRkYCwgYGJhdGFkdl90dF9sb2NhbF9kdW1wYCwgYGJhdGFkdl90dF9sb2NhbF9yZW1vdmVgLCBgYmF0YWR2X3RyYW5zdGFibGVfc2VhcmNoYCwgYGJhdGFkdl9pc19teV9jbGllbnRgLCBgYmF0YWR2X3R0X2dsb2JhbF9jbGllbnRfaXNfcm9hbWluZ2AsIGBiYXRhZHZfdHRfbG9jYWxfY2xpZW50X2lzX3JvYW1pbmdgLCBhbmQgYGJhdGFkdl90dF9nbG9iYWxfaXNfaXNvbGF0ZWRgLiBUaGVyZSdzIGFsc28gYGJhdGFkdl90dF9sb2NhbF9kdW1wX2VudHJ5YCBpbiB0aGUgbWl4LCBidXQgdGhhdCBpcyBhIHN0YXRpYyBmdW5jdGlvbi4gVGhlc2UgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHRoZSBUVC1yZWxhdGVkIG9uZXMsIGFyZSB0aGUgcHJpbWFyeSBmb2N1cyBvZiBteSBhdHRlbnRpb24uXG5cbk5vdywgbGV0J3MgYWxzbyB0YWtlIGEgbG9vayBhdCB0aGUgZGVjbGFyYXRpb25zIGluIHRoZSBgbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaGAgZmlsZSB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gSSBuZWVkIHRvIHNlZSB0aGUgY29udGV4dCBhbmQgYXJndW1lbnRzIG9mIHRob3NlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwMzYsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzI6MzEuNjk5ODA2OTczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbiAgIDI6XFx0LyogQ29weXJpZ2h0IChDKSBCLkEuVC5NLkEuTi4gY29udHJpYnV0b3JzOlxcbiAgIDM6XFx0ICpcXG4gICA0OlxcdCAqIE1hcmVrIExpbmRuZXIsIFNpbW9uIFd1bmRlcmxpY2gsIEFudG9uaW8gUXVhcnR1bGxpXFxuICAgNTpcXHQgKi9cXG4gICA2OlxcdFxcbiAgIDc6XFx0I2lmbmRlZiBfTkVUX0JBVE1BTl9BRFZfVFJBTlNMQVRJT05fVEFCTEVfSF9cXG4gICA4OlxcdCNkZWZpbmUgX05FVF9CQVRNQU5fQURWX1RSQU5TTEFUSU9OX1RBQkxFX0hfXFxuICAgOTpcXHRcXG4gIDEwOlxcdCNpbmNsdWRlIFxcXCJtYWluLmhcXFwiXFxuICAxMTpcXHRcXG4gIDEyOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rcmVmLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbmV0bGluay5oXFx1MDAzZVxcbiAgMTU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NrYnVmZi5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuICAxNzpcXHRcXG4gIDE4OlxcdGludCBiYXRhZHZfdHRfaW5pdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KTtcXG4gIDE5OlxcdGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXFxuICAyMDpcXHRcXHRcXHRcXHQgdW5zaWduZWQgc2hvcnQgdmlkLCBpbnQgaWZpbmRleCwgdTMyIG1hcmspO1xcbiAgMjE6XFx0dTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gIDIyOlxcdFxcdFxcdFxcdCAgIGNvbnN0IHU4ICphZGRyLCB1bnNpZ25lZCBzaG9ydCB2aWQsXFxuICAyMzpcXHRcXHRcXHRcXHQgICBjb25zdCBjaGFyICptZXNzYWdlLCBib29sIHJvYW1pbmcpO1xcbiAgMjQ6XFx0aW50IGJhdGFkdl90dF9sb2NhbF9kdW1wKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuICAyNTpcXHRpbnQgYmF0YWR2X3R0X2dsb2JhbF9kdW1wKHN0cnVjdCBza19idWZmICptc2csIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7XFxuICAyNjpcXHR2b2lkIGJhdGFkdl90dF9nbG9iYWxfZGVsX29yaWcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gIDI3OlxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlLFxcbiAgMjg6XFx0XFx0XFx0XFx0ICAgICAgIHMzMiBtYXRjaF92aWQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpO1xcbiAgMjk6XFx0c3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKlxcbiAgMzA6XFx0YmF0YWR2X3R0X2dsb2JhbF9oYXNoX2ZpbmQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXFxuICAzMTpcXHRcXHRcXHRcXHQgICB1bnNpZ25lZCBzaG9ydCB2aWQpO1xcbiAgMzI6XFx0dm9pZCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3JlbGVhc2Uoc3RydWN0IGtyZWYgKnJlZik7XFxuICAzMzpcXHRpbnQgYmF0YWR2X3R0X2dsb2JhbF9oYXNoX2NvdW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuICAzNDpcXHRcXHRcXHRcXHRcXHRjb25zdCB1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkKTtcXG4gIDM1OlxcdHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2goc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gIDM2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdTggKnNyYywgY29uc3QgdTggKmFkZHIsXFxuICAzNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIHNob3J0IHZpZCk7XFxuICAzODpcXHR2b2lkIGJhdGFkdl90dF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpO1xcbiAgMzk6XFx0Ym9vbCBiYXRhZHZfaXNfbXlfY2xpZW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICphZGRyLFxcbiAgNDA6XFx0XFx0XFx0XFx0IHVuc2lnbmVkIHNob3J0IHZpZCk7XFxuICA0MTpcXHRib29sIGJhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1OCAqc3JjLCB1OCAqZHN0LFxcbiAgNDI6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgc2hvcnQgdmlkKTtcXG4gIDQzOlxcdHZvaWQgYmF0YWR2X3R0X2xvY2FsX2NvbW1pdF9jaGFuZ2VzKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpO1xcbiAgNDQ6XFx0Ym9vbCBiYXRhZHZfdHRfZ2xvYmFsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuICA0NTpcXHRcXHRcXHRcXHRcXHRcXHR1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkKTtcXG4gIDQ2OlxcdGJvb2wgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuICA0NzpcXHRcXHRcXHRcXHRcXHQgICAgICAgdTggKmFkZHIsIHVuc2lnbmVkIHNob3J0IHZpZCk7XFxuICA0ODpcXHR2b2lkIGJhdGFkdl90dF9sb2NhbF9yZXNpemVfdG9fbXR1KHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKTtcXG4gIDQ5OlxcdGJvb2wgYmF0YWR2X3R0X2FkZF90ZW1wb3JhcnlfZ2xvYmFsX2VudHJ5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuICA1MDpcXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGUsXFxuICA1MTpcXHRcXHRcXHRcXHRcXHRcXHQgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHIsXFxuICA1MjpcXHRcXHRcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIHNob3J0IHZpZCk7XFxuICA1MzpcXHRib29sIGJhdGFkdl90dF9nbG9iYWxfaXNfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4gIDU0OlxcdFxcdFxcdFxcdFxcdCAgY29uc3QgdTggKmFkZHIsIHVuc2lnbmVkIHNob3J0IHZpZCk7XFxuICA1NTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzI6MzEuNjk5ODcyMzQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1NTg5OTExMjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEIuQS5ULk0uQS5OLiBBZHZhbmNlZCBDb25maWd1cmF0aW9uIGFuZCBGb2N1cyBTeW1ib2xzIGZvciBUZXN0aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBuZWVkIHRvIHZlcmlmeSB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gTG9va2luZyBhdCBgbmV0L2JhdG1hbi1hZHYvS2NvbmZpZ2AsIEkgY2FuIHNlZSB0aGUgY29yZSBkZXBlbmRlbmN5LCBgQkFUTUFOX0FEVmAsIHJlbGllcyBvbiB0aGUgYE5FVGAgc3Vic3lzdGVtLCBhcyBleHBlY3RlZC4gRnJvbSB0aGVyZSwgYEJBVE1BTl9BRFZfQkFUTUFOX1ZgIGhhcyBhIG1vcmUgbnVhbmNlZCBkZXBlbmRlbmN5LCByZXF1aXJpbmcgYEJBVE1BTl9BRFZgIGJ1dCBleGNsdWRpbmcgdGhlIGNvbWJpbmF0aW9uIG9mIGBDRkc4MDIxMWAgYXMgYSBtb2R1bGUgYW5kIGBCQVRNQU5fQURWYCBlbmFibGVkLiBgQkFUTUFOX0FEVl9CTEFgLCBgQkFUTUFOX0FEVl9EQVRgLCBhbmQgYEJBVE1BTl9BRFZfTUNBU1RgIGFsbCBkZXBlbmQgb24gYm90aCBgQkFUTUFOX0FEVmAgYW5kIGBJTkVUYC4gIGBCQVRNQU5fQURWX01DQVNUYCBhbHNvIGV4Y2x1ZGVzIHRoZSBzY2VuYXJpbyB3aGVyZSBgQlJJREdFYCBpcyBhIG1vZHVsZSBhbmQgYEJBVE1BTl9BRFZgIGlzIGVuYWJsZWQuIEZpbmFsbHksIGBCQVRNQU5fQURWX0RFQlVHYCBkZXBlbmRzIHNvbGVseSBvbiBgQkFUTUFOX0FEVmAuXG5cbkknbGwgZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlbid0IGFueSBvdGhlciBjcnVjaWFsIGNvbmZpZ3MgaW4gdGhlIGBuZXQvYmF0bWFuLWFkdi9gIGRpcmVjdG9yeSB0aGF0IEkgbmVlZCB0byBhY2NvdW50IGZvciwgdGhlbiBJJ2xsIG1vdmUgb24gdG8gY29uZmlybWluZyB0aGF0IHRoZSByZXF1aXJlZCBjb25maWdzIGFyZSBpbmRlZWQgdGhvc2UgSSd2ZSBqdXN0IHJldmlld2VkOiBgQkFUTUFOX0FEVmAsIGBCQVRNQU5fQURWX0JBVE1BTl9WYCwgYEJBVE1BTl9BRFZfQkxBYCwgYEJBVE1BTl9BRFZfREFUYCwgYW5kIGBCQVRNQU5fQURWX01DQVNUYC5cblxuTmV4dCwgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBrZXkgZm9jdXMgc3ltYm9scyDigJMgdGhlIEFQSSBlbnRyeXBvaW50cyBkaXJlY3RseSBtb2RpZmllZCBvciBhZmZlY3RlZCBieSB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gYmUgcHJlY2lzZSBoZXJlLCBmb2N1c2luZyBvbiB0aG9zZSB0aGF0IGFyZSBub3Qgc3RhdGljIG9yIGlubGluZWQuIFRoZSByZWxldmFudCBmdW5jdGlvbnMgYXBwZWFyIHRvIGJlOiBgYmF0YWR2X3R0X2xvY2FsX2FkZGAsIGBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlYCwgYGJhdGFkdl90cmFuc3RhYmxlX3NlYXJjaGAsIGBiYXRhZHZfaXNfbXlfY2xpZW50YCwgYGJhdGFkdl90dF9nbG9iYWxfY2xpZW50X2lzX3JvYW1pbmdgLCBgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nYCwgYW5kIGBiYXRhZHZfdHRfZ2xvYmFsX2lzX2lzb2xhdGVkYC4gVGhlc2UgYXJlIGxpa2VseSB3aGVyZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IGNoYW5nZXMgYXJlIGhhcHBlbmluZy5cblxuTm93LCBsZXQncyBjb25maXJtIGV2ZXJ5dGhpbmcgZm9yIHRoZSB0ZXN0IHJ1bi4gIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIGlzIHNldCB0byB0cnVlLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgYWxpZ25zIHBlcmZlY3RseSB3aXRoIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucyBJIGlkZW50aWZpZWQgZWFybGllcjogYEJBVE1BTl9BRFZgLCBgQkFUTUFOX0FEVl9CQVRNQU5fVmAsIGBCQVRNQU5fQURWX0JMQWAsIGBCQVRNQU5fQURWX0RBVGAsIGFuZCBgQkFUTUFOX0FEVl9NQ0FTVGAuIFRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0IG1hdGNoZXMgd2hhdCBJIGlzb2xhdGVkIGFzIHRoZSBjcml0aWNhbCBBUEkgZW50cnlwb2ludHMuXG5cblRoZSByZWFzb25pbmcgaXMgcHJldHR5IGNsZWFyOiBUaGlzIHBhdGNoIHNlcmllcyBpcyB0b3VjaGluZyB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIHJvdXRpbmcgYW5kIHRyYW5zbGF0aW9uIHRhYmxlIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIHNwaW5sb2NrIHN5bmNocm9uaXphdGlvbiB0byBhZGRyZXNzIGNvbmN1cnJlbmN5IHJhY2VzIG9uIGVudHJ5IGZsYWdzLCBmaXhpbmcgaGFzaCB0YWJsZSBlbnRyeSByZW1vdmFsIGNvbXBhcmlzb25zLCBjb3JyZWN0aW5nIHRoZSBuZWlnaGJvciBtZXRyaWMgdGhyb3VnaHB1dCBjb21wYXJpc29uIGxvZ2ljLCBhbmQgZW5zdXJpbmcgMi1ieXRlIGFsaWdubWVudCBmb3IgTUFDIGFkZHJlc3MgbWFuaXB1bGF0aW9uLiBUaGlzIHNvdW5kcyBsaWtlIGltcG9ydGFudCB3b3JrIHRvIGltcHJvdmUgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZS5cblxuRXZlcnl0aGluZyBzZWVtcyB0byBiZSBpbiBvcmRlci4gSSdtIHJlYWR5IHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNDQ4LCJPdXRwdXRUb2tlbnMiOjMwNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjMyOjQxLjI1ODg2NzA4MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNzAyOTEyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CQVRNQU5fVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CTEFcIixcbiAgICBcIkJBVE1BTl9BRFZfREFUXCIsXG4gICAgXCJCQVRNQU5fQURWX01DQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmF0YWR2X3R0X2xvY2FsX2FkZFwiLFxuICAgIFwiYmF0YWR2X3R0X2xvY2FsX3JlbW92ZVwiLFxuICAgIFwiYmF0YWR2X3RyYW5zdGFibGVfc2VhcmNoXCIsXG4gICAgXCJiYXRhZHZfaXNfbXlfY2xpZW50XCIsXG4gICAgXCJiYXRhZHZfdHRfZ2xvYmFsX2lzX2lzb2xhdGVkXCIsXG4gICAgXCJiYXRhZHZfdHRfZ2xvYmFsX2NsaWVudF9pc19yb2FtaW5nXCIsXG4gICAgXCJiYXRhZHZfdHRfbG9jYWxfY2xpZW50X2lzX3JvYW1pbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIGJ1ZyBmaXhlcyBpbiB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIG1lc2ggcHJvdG9jb2wgc3Vic3lzdGVtIChuZXQvYmF0bWFuLWFkdi8pLiBLZXkgY2hhbmdlcyBpbmNsdWRlIGFkZGluZyBzcGlubG9jayBwcm90ZWN0aW9uIChmbGFnc19sb2NrKSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIGFuZCBtdXRhdGluZyB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeSBmbGFncywgZml4aW5nIGV4YWN0IG9iamVjdCByZW1vdmFsIGZyb20gaGFzaCBidWNrZXRzIChiYXRhZHZfY29tcGFyZV90dF9lbnRyeSksIGNvcnJlY3RpbmcgdGhlIEIuQS5ULk0uQS5OLiBWIG5laWdoYm9yIGNvbXBhcmlzb24gY2FsY3VsYXRpb24gbG9naWMgaW4gYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKCksIGFuZCBhZGRpbmcgMi1ieXRlIGFsaWdubWVudCBhdHRyaWJ1dGVzIHRvIE1BQyBhZGRyZXNzIGJ1ZmZlcnMuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29yZSBleGVjdXRpb24gZmxvd3MgYW5kIHN0YXRlIGhhbmRsaW5nIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQkFUTUFOX0FEVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CQVRNQU5fVlwiLFxuICAgIFwiQkFUTUFOX0FEVl9CTEFcIixcbiAgICBcIkJBVE1BTl9BRFZfREFUXCIsXG4gICAgXCJCQVRNQU5fQURWX01DQVNUXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYmF0YWR2X3R0X2xvY2FsX2FkZFwiLFxuICAgIFwiYmF0YWR2X3R0X2xvY2FsX3JlbW92ZVwiLFxuICAgIFwiYmF0YWR2X3RyYW5zdGFibGVfc2VhcmNoXCIsXG4gICAgXCJiYXRhZHZfaXNfbXlfY2xpZW50XCIsXG4gICAgXCJiYXRhZHZfdHRfZ2xvYmFsX2lzX2lzb2xhdGVkXCIsXG4gICAgXCJiYXRhZHZfdHRfZ2xvYmFsX2NsaWVudF9pc19yb2FtaW5nXCIsXG4gICAgXCJiYXRhZHZfdHRfbG9jYWxfY2xpZW50X2lzX3JvYW1pbmdcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgYW5kIGJ1ZyBmaXhlcyBpbiB0aGUgQi5BLlQuTS5BLk4uIEFkdmFuY2VkIG1lc2ggcHJvdG9jb2wgc3Vic3lzdGVtIChuZXQvYmF0bWFuLWFkdi8pLiBLZXkgY2hhbmdlcyBpbmNsdWRlIGFkZGluZyBzcGlubG9jayBwcm90ZWN0aW9uIChmbGFnc19sb2NrKSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgd2hlbiByZWFkaW5nIGFuZCBtdXRhdGluZyB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeSBmbGFncywgZml4aW5nIGV4YWN0IG9iamVjdCByZW1vdmFsIGZyb20gaGFzaCBidWNrZXRzIChiYXRhZHZfY29tcGFyZV90dF9lbnRyeSksIGNvcnJlY3RpbmcgdGhlIEIuQS5ULk0uQS5OLiBWIG5laWdoYm9yIGNvbXBhcmlzb24gY2FsY3VsYXRpb24gbG9naWMgaW4gYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKCksIGFuZCBhZGRpbmcgMi1ieXRlIGFsaWdubWVudCBhdHRyaWJ1dGVzIHRvIE1BQyBhZGRyZXNzIGJ1ZmZlcnMuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgY29yZSBleGVjdXRpb24gZmxvd3MgYW5kIHN0YXRlIGhhbmRsaW5nIHRoYXQgYXJlIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjMyOjQxLjM5NTkwMzg5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI2NDk4MTEwMjMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzI6NDEuMzk2NDA5NjU4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MjI2NDk3NjAxNTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgY29uc2lzdHMgb2Ygc2V2ZXJhbCBjbGVhbnVwcyBhbmQgYnVnZml4ZXMgaW4gYmF0bWFuLWFkdjpcXG4xLiBBbGlnbm1lbnQgYW5ub3RhdGlvbnM6IEFkZHMgYF9fYWxpZ25lZCgyKWAgdG8gdmFyaW91cyBNQUMgYWRkcmVzcyBieXRlIGFycmF5cyAoYHU4IGFkZHJbRVRIX0FMRU5dYCwgYHU4IG9yaWdbRVRIX0FMRU5dYCwgZXRjLikgdG8gZW5zdXJlIDItYnl0ZSBhbGlnbm1lbnQgZm9yIG9wZXJhdGlvbnMgbGlrZSBgZXRoZXJfYWRkcl9jb3B5KClgLlxcbjIuIENvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGltcHJvdmVtZW50czogSW50cm9kdWNlcyBgZmxhZ3NfbG9ja2Agc3BpbmxvY2sgdG8gYHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5YCB0byBwcm90ZWN0IGNvbmN1cnJlbnQgcmVhZC93cml0ZSBhY2Nlc3MgdG8gdHJhbnNsYXRpb24gdGFibGUgZW50cnkgZmxhZ3MgKGBjb21tb24tXFx1MDAzZWZsYWdzYCkgYW5kIHJvYW1pbmcgdGltZXN0YW1wcyAoYHJvYW1fYXRgKS5cXG4zLiBMb2dpYyBcXHUwMDI2IG5hbWluZyBmaXhlczogRml4ZXMgbmVpZ2hib3IgY29tcGFyaXNvbiBsb2dpYyBpbiBgYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKClgIGFuZCByZW5hbWVzIHBhcmFtZXRlcnMgZm9yIGNsYXJpdHkgaW4gYGJhdGFkdl9pdl9vZ21fbmVpZ2hfaXNfc29iKClgLlxcbjQuIERlYnVnIG91dHB1dCBmaXg6IENvcnJlY3RzIGZpZWxkIGFjY2VzcyBpbiBkZWJ1ZyBwcmludGluZyBmb3IgZW5jYXBzdWxhdGVkIERBVCBwYWNrZXRzLlxcbjUuIEhhc2ggdGFibGUgbG9va3VwIGFjY3VyYWN5OiBJbnRyb2R1Y2VzIGBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSgpYCB0byBtYXRjaCBleGFjdCBwb2ludGVyIGlkZW50aXRpZXMgZHVyaW5nIGBiYXRhZHZfaGFzaF9yZW1vdmUoKWAuXFxuXFxuTm9uZSBvZiB0aGUgY2hhbmdlcyBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBtZW1vcnkgYWxsb2NhdGlvbnMsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIGxlYWsgdW5pbml0aWFsaXplZCBrZXJuZWwgbWVtb3J5IHRvIHVzZXIgc3BhY2UuIE5ldGxpbmsgZHVtcCBoYW5kbGVycyAoYGJhdGFkdl9kYXRfY2FjaGVfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeWAsIGBiYXRhZHZfdHRfZ2xvYmFsX2R1bXBfc3ViZW50cnlgKSBvbmx5IHNlcmlhbGl6ZSBmdWxseSBpbml0aWFsaXplZCBzY2FsYXJzIGFuZCBNQUMgYWRkcmVzc2VzLiBDb25jdXJyZW5jeSwgbGlmZXRpbWUsIGFuZCBib3VuZGFyeSBjaGVja3MgYXJlIGFscmVhZHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjQ3ZWEzZjlhNzY5MThhOTkyMzdjZTczMWQ3Y2Y2ZTg1Nzc1ZDAwN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDMxIDIwOjMxOjUyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jIGIvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXG5pbmRleCA1M2ZiZGJiZThmNGY3Li4zZmUwOWI0YzMwNDYzIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvYmF0X2l2X29nbS5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9iYXRfaXZfb2dtLmNcbkBAIC0yNDI0LDI1ICsyNDI0LDI2IEBAIHN0YXRpYyBpbnQgYmF0YWR2X2l2X29nbV9uZWlnaF9jbXAoc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsXG4gLyoqXG4gICogYmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2IoKSAtIGNoZWNrIGlmIG5laWdoMSBpcyBzaW1pbGFybHkgZ29vZCBvciBiZXR0ZXJcbiAgKiAgdGhhbiBuZWlnaDIgZnJvbSB0aGUgbWV0cmljIHByb3NwZWN0aXZlXG4tICogQG5laWdoMTogdGhlIGZpcnN0IG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvblxuLSAqIEBpZl9vdXRnb2luZzE6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIGZpcnN0IG5laWdoYm9yXG4tICogQG5laWdoMjogdGhlIHNlY29uZCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cbi0gKiBAaWZfb3V0Z29pbmcyOiBvdXRnb2luZyBpbnRlcmZhY2UgZm9yIHRoZSBzZWNvbmQgbmVpZ2hib3JcbisgKiBAY2FuZGlkYXRlOiB0aGUgZmlyc3QgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uXG4rICogQGlmX291dGdvaW5nX2NhbmQ6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEBjYW5kaWRhdGUgbmVpZ2hib3JcbisgKiBAcmVmZXJlbmNlOiB0aGUgc2Vjb25kIG5laWdoYm9yIG9iamVjdCBvZiB0aGUgY29tcGFyaXNvblxuKyAqIEBpZl9vdXRnb2luZ19yZWY6IG91dGdvaW5nIGludGVyZmFjZSBmb3IgdGhlIEByZWZlcmVuY2UgbmVpZ2hib3JcbiAgKlxuLSAqIFJldHVybjogdHJ1ZSBpZiB0aGUgbWV0cmljIHZpYSBuZWlnaDEgaXMgZXF1YWxseSBnb29kIG9yIGJldHRlciB0aGFuXG4tICogdGhlIG1ldHJpYyB2aWEgbmVpZ2gyLCBmYWxzZSBvdGhlcndpc2UuXG4rICogUmV0dXJuOiB0cnVlIGlmIHRoZSBtZXRyaWMgdmlhIEBjYW5kaWRhdGUgaXMgZXF1YWxseSBnb29kIG9yIGJldHRlciB0aGFuXG4rICogdGhlIG1ldHJpYyB2aWEgQHJlZmVyZW5jZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAqL1xuIHN0YXRpYyBib29sXG4tYmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsXG4tXHRcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzEsXG4tXHRcdFx0ICAgc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDIsXG4tXHRcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzIpXG4rYmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpjYW5kaWRhdGUsXG4rXHRcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLFxuK1x0XHRcdCAgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLFxuK1x0XHRcdCAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmdfcmVmKVxuIHtcbiBcdGJvb2wgcmV0O1xuIFx0aW50IGRpZmY7XG4gXG4tXHRyZXQgPSBiYXRhZHZfaXZfb2dtX25laWdoX2RpZmYobmVpZ2gxLCBpZl9vdXRnb2luZzEsIG5laWdoMixcbi1cdFx0XHRcdCAgICAgICBpZl9vdXRnb2luZzIsIFx1MDAyNmRpZmYpO1xuK1x0cmV0ID0gYmF0YWR2X2l2X29nbV9uZWlnaF9kaWZmKGNhbmRpZGF0ZSwgaWZfb3V0Z29pbmdfY2FuZCxcbitcdFx0XHRcdCAgICAgICByZWZlcmVuY2UsIGlmX291dGdvaW5nX3JlZixcbitcdFx0XHRcdCAgICAgICBcdTAwMjZkaWZmKTtcbiBcdGlmICghcmV0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYmF0X3YuYyBiL25ldC9iYXRtYW4tYWR2L2JhdF92LmNcbmluZGV4IDBjMjc0NDdjZjY4ODkuLjU5Njg4OWIzNTIyZDAgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9iYXRfdi5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9iYXRfdi5jXG5AQCAtNTE0LDQwICs1MTQsNDAgQEAgc3RhdGljIGludCBiYXRhZHZfdl9uZWlnaF9jbXAoc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsXG4gLyoqXG4gICogYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKCkgLSBjaGVjayB3aGV0aGVyIHR3byBCLkEuVC5NLkEuTi4gViBuZWlnaGJvdXJzIGhhdmVcbiAgKiAgYSBzaW1pbGFyIG9yIGJldHRlciB0aHJvdWdocHV0XG4tICogQG5laWdoMTogZmlyc3QgbmVpZ2hib3VyIHRvIGNvbXBhcmVcbi0gKiBAaWZfb3V0Z29pbmcxOiBvdXRnb2luZyBpbnRlcmZhY2UgdG8gdXNlIGZvciBAbmVpZ2gxXG4tICogQG5laWdoMjogc2Vjb25kIG5laWdoYm91ciB0byBjb21wYXJlXG4tICogQGlmX291dGdvaW5nMjogb3V0Z29pbmcgaW50ZXJmYWNlIHRvIHVzZSBmb3IgQG5laWdoMlxuKyAqIEBjYW5kaWRhdGU6IHRoZSBmaXJzdCBuZWlnaGJvciBvYmplY3Qgb2YgdGhlIGNvbXBhcmlzb25cbisgKiBAaWZfb3V0Z29pbmdfY2FuZDogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgQGNhbmRpZGF0ZSBuZWlnaGJvclxuKyAqIEByZWZlcmVuY2U6IHRoZSBzZWNvbmQgbmVpZ2hib3Igb2JqZWN0IG9mIHRoZSBjb21wYXJpc29uXG4rICogQGlmX291dGdvaW5nX3JlZjogb3V0Z29pbmcgaW50ZXJmYWNlIGZvciB0aGUgQHJlZmVyZW5jZSBuZWlnaGJvclxuICAqXG4tICogUmV0dXJuOiB0cnVlIGlmIHRoZSB0aHJvdWdocHV0IG9mIEBuZWlnaDIgaXMgYXQgbGVhc3QgMy80IG9mIHRoZVxuLSAqICBAbmVpZ2gxIHRocm91Z2hwdXRcbisgKiBSZXR1cm46IHRydWUgaWYgdGhlIHRocm91Z2hwdXQgb2YgQGNhbmRpZGF0ZSBpcyBtb3JlIHRoYW4gMy80IG9mIHRoZVxuKyAqICBAcmVmZXJlbmNlIHRocm91Z2hwdXRcbiAgKi9cbi1zdGF0aWMgYm9vbCBiYXRhZHZfdl9uZWlnaF9pc19zb2Ioc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsXG4tXHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcxLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMixcbi1cdFx0XHRcdCAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzIpXG4rc3RhdGljIGJvb2wgYmF0YWR2X3ZfbmVpZ2hfaXNfc29iKHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqY2FuZGlkYXRlLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nX2NhbmQsXG4rXHRcdFx0XHQgIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSAqcmVmZXJlbmNlLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKmlmX291dGdvaW5nX3JlZilcbiB7XG4tXHRzdHJ1Y3QgYmF0YWR2X25laWdoX2lmaW5mbyAqaWZpbmZvMTtcbi1cdHN0cnVjdCBiYXRhZHZfbmVpZ2hfaWZpbmZvICppZmluZm8yO1xuK1x0c3RydWN0IGJhdGFkdl9uZWlnaF9pZmluZm8gKmlmaW5mb19jYW5kO1xuK1x0c3RydWN0IGJhdGFkdl9uZWlnaF9pZmluZm8gKmlmaW5mb19yZWY7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuIFx0dTMyIHRocmVzaG9sZDtcbiBcbi1cdGlmaW5mbzEgPSBiYXRhZHZfbmVpZ2hfaWZpbmZvX2dldChuZWlnaDEsIGlmX291dGdvaW5nMSk7XG4tXHRpZiAoIWlmaW5mbzEpXG4rXHRpZmluZm9fY2FuZCA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KGNhbmRpZGF0ZSwgaWZfb3V0Z29pbmdfY2FuZCk7XG4rXHRpZiAoIWlmaW5mb19jYW5kKVxuIFx0XHRnb3RvIGVycl9pZmluZm8xO1xuIFxuLVx0aWZpbmZvMiA9IGJhdGFkdl9uZWlnaF9pZmluZm9fZ2V0KG5laWdoMiwgaWZfb3V0Z29pbmcyKTtcbi1cdGlmICghaWZpbmZvMilcbitcdGlmaW5mb19yZWYgPSBiYXRhZHZfbmVpZ2hfaWZpbmZvX2dldChyZWZlcmVuY2UsIGlmX291dGdvaW5nX3JlZik7XG4rXHRpZiAoIWlmaW5mb19yZWYpXG4gXHRcdGdvdG8gZXJyX2lmaW5mbzI7XG4gXG4tXHR0aHJlc2hvbGQgPSBpZmluZm8xLVx1MDAzZWJhdF92LnRocm91Z2hwdXQgLyA0O1xuLVx0dGhyZXNob2xkID0gaWZpbmZvMS1cdTAwM2ViYXRfdi50aHJvdWdocHV0IC0gdGhyZXNob2xkO1xuK1x0dGhyZXNob2xkID0gaWZpbmZvX3JlZi1cdTAwM2ViYXRfdi50aHJvdWdocHV0IC8gNDtcbitcdHRocmVzaG9sZCA9IGlmaW5mb19yZWYtXHUwMDNlYmF0X3YudGhyb3VnaHB1dCAtIHRocmVzaG9sZDtcbiBcbi1cdHJldCA9IGlmaW5mbzItXHUwMDNlYmF0X3YudGhyb3VnaHB1dCBcdTAwM2UgdGhyZXNob2xkO1xuK1x0cmV0ID0gaWZpbmZvX2NhbmQtXHUwMDNlYmF0X3YudGhyb3VnaHB1dCBcdTAwM2UgdGhyZXNob2xkO1xuIFxuLVx0YmF0YWR2X25laWdoX2lmaW5mb19wdXQoaWZpbmZvMik7XG4rXHRiYXRhZHZfbmVpZ2hfaWZpbmZvX3B1dChpZmluZm9fcmVmKTtcbiBlcnJfaWZpbmZvMjpcbi1cdGJhdGFkdl9uZWlnaF9pZmluZm9fcHV0KGlmaW5mbzEpO1xuK1x0YmF0YWR2X25laWdoX2lmaW5mb19wdXQoaWZpbmZvX2NhbmQpO1xuIGVycl9pZmluZm8xOlxuIFx0cmV0dXJuIHJldDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmMgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuY1xuaW5kZXggZjYzNWRhNGI4Y2E2NS4uYWQ2YWI0YTUwNjU4ZiAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L2JyaWRnZV9sb29wX2F2b2lkYW5jZS5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9icmlkZ2VfbG9vcF9hdm9pZGFuY2UuY1xuQEAgLTY2Myw3ICs2NjMsNyBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfYmxhX3NlbmRfcmVxdWVzdChzdHJ1Y3QgYmF0YWR2X2JsYV9iYWNrYm9uZV9ndyAqYmFja2JvbmVfZ3cpXG4gc3RhdGljIHZvaWQgYmF0YWR2X2JsYV9zZW5kX2Fubm91bmNlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfYmxhX2JhY2tib25lX2d3ICpiYWNrYm9uZV9ndylcbiB7XG4tXHR1OCBtYWNbRVRIX0FMRU5dO1xuK1x0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRfX2JlMTYgY3JjO1xuIFxuIFx0bWVtY3B5KG1hYywgYmF0YWR2X2Fubm91bmNlX21hYywgNCk7XG5AQCAtMTU4Miw3ICsxNTgyLDkgQEAgc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBiYXRhZHZfYmFja2JvbmVfaGFzaF9sb2NrX2NsYXNzX2tleTtcbiAgKi9cbiBpbnQgYmF0YWR2X2JsYV9pbml0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4ge1xuLVx0dTggY2xhaW1fZGVzdFtFVEhfQUxFTl0gPSB7MHhmZiwgMHg0MywgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMH07XG4rXHRzdGF0aWMgY29uc3QgdTggY2xhaW1fZGVzdFtFVEhfQUxFTl0gX19hbGlnbmVkKDIpID0ge1xuK1x0XHQweGZmLCAweDQzLCAweDA1LCAweDAwLCAweDAwLCAweDAwXG4rXHR9O1xuIFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmO1xuIFx0dW5zaWduZWQgbG9uZyBlbnRyeXRpbWU7XG4gXHR1MTYgY3JjO1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jIGIvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmNcbmluZGV4IDAxMWNmZGM0N2ZhYjQuLmE0YmU1YjJhODdkN2EgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmNcbkBAIC01NDgsNyArNTQ4LDcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X2RiZ19hcnAoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfREFULCBiYXRfcHJpdiwgXCIqIHR5cGU6IFVua25vd24gKCV1KSFcXG5cIixcbi1cdFx0XHRcdCAgIHVuaWNhc3RfNGFkZHJfcGFja2V0LVx1MDAzZXUucGFja2V0X3R5cGUpO1xuK1x0XHRcdFx0ICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtXHUwMDNlc3VidHlwZSk7XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIEJBVEFEVl9CQ0FTVDpcbkBAIC05NDAsNyArOTQwLDcgQEAgYmF0YWR2X2RhdF9jYWNoZV9kdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsXG4gXHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYixcbiBcdFx0XHQgICAgc3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSlcbiB7XG4tXHR1OCBtYWNbRVRIX0FMRU5dO1xuK1x0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHR1NjQgdTY0X21hYztcbiBcdGludCBtc2VjcztcbiBcdHZvaWQgKmhkcjtcbkBAIC0xMjM2LDEwICsxMjM2LDEwIEBAIGJvb2wgYmF0YWR2X2RhdF9zbm9vcF9vdXRnb2luZ19hcnBfcmVxdWVzdChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIHtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlID0gYmF0X3ByaXYtXHUwMDNlbWVzaF9pZmFjZTtcbiBcdHN0cnVjdCBiYXRhZHZfZGF0X2VudHJ5ICpkYXRfZW50cnkgPSBOVUxMO1xuK1x0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiX25ldztcbiBcdHVuc2lnbmVkIHNob3J0IHZpZDtcbiBcdGJvb2wgcmV0ID0gZmFsc2U7XG4tXHR1OCBtYWNbRVRIX0FMRU5dO1xuIFx0aW50IGhkcl9zaXplID0gMDtcbiBcdF9fYmUzMiBpcF9kc3Q7XG4gXHRfX2JlMzIgaXBfc3JjO1xuQEAgLTEzNDQsMTAgKzEzNDQsMTAgQEAgYm9vbCBiYXRhZHZfZGF0X3Nub29wX2luY29taW5nX2FycF9yZXF1ZXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHRcdCAgIHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X2RhdF9lbnRyeSAqZGF0X2VudHJ5ID0gTlVMTDtcbitcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFx0c3RydWN0IHNrX2J1ZmYgKnNrYl9uZXc7XG4gXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuLVx0dTggbWFjW0VUSF9BTEVOXTtcbiBcdF9fYmUzMiBpcF9zcmM7XG4gXHRfX2JlMzIgaXBfZHN0O1xuIFx0dTY0IHU2NF9tYWM7XG5AQCAtMTQ3NCw5ICsxNDc0LDkgQEAgYm9vbCBiYXRhZHZfZGF0X3Nub29wX2luY29taW5nX2FycF9yZXBseShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRcdFx0XHQgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9zaXplKVxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfZGF0X2VudHJ5ICpkYXRfZW50cnkgPSBOVUxMO1xuK1x0dTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRib29sIGRyb3BwZWQgPSBmYWxzZTtcbiBcdHVuc2lnbmVkIHNob3J0IHZpZDtcbi1cdHU4IG1hY1tFVEhfQUxFTl07XG4gXHRfX2JlMzIgaXBfc3JjO1xuIFx0X19iZTMyIGlwX2RzdDtcbiBcdHU2NCB1NjRfbWFjO1xuZGlmZiAtLWdpdCBhL25ldC9iYXRtYW4tYWR2L21lc2gtaW50ZXJmYWNlLmMgYi9uZXQvYmF0bWFuLWFkdi9tZXNoLWludGVyZmFjZS5jXG5pbmRleCBlMjAyMDg4Y2YxZmQ0Li42M2FmMjE5NTRjZjkwIDEwMDY0NFxuLS0tIGEvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuKysrIGIvbmV0L2JhdG1hbi1hZHYvbWVzaC1pbnRlcmZhY2UuY1xuQEAgLTE0MSw5ICsxNDEsOSBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmJhdGFkdl9pbnRlcmZhY2Vfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgaW50IGJhdGFkdl9pbnRlcmZhY2Vfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApXG4ge1xuIFx0c3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiA9IG5ldGRldl9wcml2KGRldik7XG4rXHR1OCBvbGRfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcbiBcdHN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7XG4tXHR1OCBvbGRfYWRkcltFVEhfQUxFTl07XG4gXG4gXHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci1cdTAwM2VzYV9kYXRhKSlcbiBcdFx0cmV0dXJuIC1FQUREUk5PVEFWQUlMO1xuQEAgLTIxMywxMyArMjEzLDE4IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl9pbnRlcmZhY2Vfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgYmF0YWR2X2ludGVyZmFjZV90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlKVxuIHtcbi1cdHN0YXRpYyBjb25zdCB1OCBlY3RwX2FkZHJbRVRIX0FMRU5dID0gezB4Q0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDB9O1xuLVx0c3RhdGljIGNvbnN0IHU4IHN0cF9hZGRyW0VUSF9BTEVOXSA9IHsweDAxLCAweDgwLCAweEMyLCAweDAwLCAweDAwLCAweDAwfTtcbiBcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcbiBcdGVudW0gYmF0YWR2X2RoY3BfcmVjaXBpZW50IGRoY3BfcmNwID0gQkFUQURWX0RIQ1BfTk87XG4gXHRlbnVtIGJhdGFkdl9mb3J3X21vZGUgZm9yd19tb2RlID0gQkFUQURWX0ZPUldfQkNBU1Q7XG4rXHRzdGF0aWMgY29uc3QgdTggZWN0cF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMikgPSB7XG4rXHRcdDB4Q0YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDBcbitcdH07XG4rXHRzdGF0aWMgY29uc3QgdTggc3RwX2FkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKSA9IHtcbitcdFx0MHgwMSwgMHg4MCwgMHhDMiwgMHgwMCwgMHgwMCwgMHgwMFxuK1x0fTtcbiBcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqcHJpbWFyeV9pZiA9IE5VTEw7XG4gXHRzdHJ1Y3QgYmF0YWR2X2JjYXN0X3BhY2tldCAqYmNhc3RfcGFja2V0O1xuK1x0dTggY2hhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRpbnQgbmV0d29ya19vZmZzZXQgPSBFVEhfSExFTjtcbiBcdHVuc2lnbmVkIGludCBoZWFkZXJfbGVuID0gMDtcbiBcdHVuc2lnbmVkIGxvbmcgYnJkX2RlbGF5ID0gMDtcbkBAIC0yMjksNyArMjM0LDYgQEAgc3RhdGljIG5ldGRldl90eF90IGJhdGFkdl9pbnRlcmZhY2VfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdHN0cnVjdCBldGhoZHIgKmV0aGhkcjtcbiBcdGJvb2wgZG9fYmNhc3QgPSBmYWxzZTtcbiBcdHU4ICpkc3RfaGludCA9IE5VTEw7XG4tXHR1OCBjaGFkZHJbRVRIX0FMRU5dO1xuIFx0dW5zaWduZWQgc2hvcnQgdmlkO1xuIFx0Ym9vbCBjbGllbnRfYWRkZWQ7XG4gXHRfX2JlMTYgcHJvdG87XG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvbXVsdGljYXN0LmMgYi9uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuY1xuaW5kZXggODJmZDUyN2I2MWMwMi4uMjJkZDI4ZDVlMWFiYyAxMDA2NDRcbi0tLSBhL25ldC9iYXRtYW4tYWR2L211bHRpY2FzdC5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi9tdWx0aWNhc3QuY1xuQEAgLTM2OCw5ICszNjgsOSBAQCBiYXRhZHZfbWNhc3RfbWxhX21lc2hpZl9nZXRfaXB2NChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0IHN0cnVjdCBobGlzdF9oZWFkICptY2FzdF9saXN0LFxuIFx0XHRcdFx0IHN0cnVjdCBiYXRhZHZfbWNhc3RfbWxhX2ZsYWdzICpmbGFncylcbiB7XG4rXHR1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgKm5ldztcbiBcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldjtcbi1cdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dO1xuIFx0c3RydWN0IGlwX21jX2xpc3QgKnBtYztcbiBcdGludCByZXQgPSAwO1xuIFxuQEAgLTQzNSw5ICs0MzUsOSBAQCBiYXRhZHZfbWNhc3RfbWxhX21lc2hpZl9nZXRfaXB2NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0IHN0cnVjdCBobGlzdF9oZWFkICptY2FzdF9saXN0LFxuIFx0XHRcdFx0IHN0cnVjdCBiYXRhZHZfbWNhc3RfbWxhX2ZsYWdzICpmbGFncylcbiB7XG4rXHR1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXHRzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgKm5ldztcbiBcdHN0cnVjdCBpbmV0Nl9kZXYgKmluNl9kZXY7XG4tXHR1OCBtY2FzdF9hZGRyW0VUSF9BTEVOXTtcbiBcdHN0cnVjdCBpZm1jYWRkcjYgKnBtYzY7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbkBAIC01ODcsMTAgKzU4NywxMCBAQCBzdGF0aWMgaW50IGJhdGFkdl9tY2FzdF9tbGFfYnJpZGdlX2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfbWNhc3RfbWxhX2ZsYWdzICpmbGFncylcbiB7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGJyaWRnZV9tY2FzdF9saXN0ID0gTElTVF9IRUFEX0lOSVQoYnJpZGdlX21jYXN0X2xpc3QpO1xuK1x0dTggbWNhc3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFx0dTggdHZsdl9mbGFncyA9IGZsYWdzLVx1MDAzZXR2bHZfZmxhZ3M7XG4gXHRzdHJ1Y3QgYnJfaXBfbGlzdCAqYnJfaXBfZW50cnk7XG4gXHRzdHJ1Y3QgYmF0YWR2X2h3X2FkZHIgKm5ldztcbi1cdHU4IG1jYXN0X2FkZHJbRVRIX0FMRU5dO1xuIFx0c3RydWN0IGJyX2lwX2xpc3QgKnRtcDtcbiBcdGludCByZXQ7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYyBiL25ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmNcbmluZGV4IDY4Zjc5ODUzMDMyZWQuLjQ0YThjZjg5MzgyYzYgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jXG4rKysgYi9uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jXG5AQCAtMTMsNiArMTMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J1aWxkX2J1Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NhY2hlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGVhbnVwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29udGFpbmVyX29mLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmMzMi5oXHUwMDNlXG5AQCAtOTUsNiArOTYsMjYgQEAgc3RhdGljIGJvb2wgYmF0YWR2X2NvbXBhcmVfdHQoY29uc3Qgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsIGNvbnN0IHZvaWQgKmRhdGEyKVxuIFx0cmV0dXJuICh0dDEtXHUwMDNldmlkID09IHR0Mi1cdTAwM2V2aWQpIFx1MDAyNlx1MDAyNiBiYXRhZHZfY29tcGFyZV9ldGgoZGF0YTEsIGRhdGEyKTtcbiB9XG4gXG4rLyoqXG4rICogYmF0YWR2X2NvbXBhcmVfdHRfZW50cnkoKSAtIGNoZWNrIGlmIGEgaGFzaCBub2RlIGlzIGEgc3BlY2lmaWMgVFQgZW50cnlcbisgKiBAbm9kZTogdGhlIGxpc3QgZWxlbWVudCBwb2ludGVyIG9mIHRoZSBUVCBlbnRyeSBzdG9yZWQgaW4gdGhlIGJ1Y2tldFxuKyAqIEBkYXRhMjogcG9pbnRlciB0byB0aGUgdHRfY29tbW9uX2VudHJ5IHdoaWNoIGlzIGxvb2tlZCBmb3JcbisgKlxuKyAqIFVubGlrZSBiYXRhZHZfY29tcGFyZV90dCgpLCB0aGlzIG9ubHkgbWF0Y2hlcyB0aGUgdmVyeSBvYmplY3Qgd2hpY2ggaXNcbisgKiBwYXNzZWQgYXMgQGRhdGEyIGFuZCBub3QganVzdCBhbnkgZW50cnkgZm9yIHRoZSBzYW1lIFRUIGNsaWVudC4gSXQgaXMgbWVhbnRcbisgKiBmb3IgYmF0YWR2X2hhc2hfcmVtb3ZlKCkgY2FsbGVycyB3aGljaCBtdXN0IG5vdCB1bmxpbmsgYW4gZW50cnkgdGhleSBkaWQgbm90XG4rICogbG9vayB1cCB0aGVtc2VsdmVzLlxuKyAqXG4rICogUmV0dXJuOiB0cnVlIGlmIEBub2RlIGJlbG9uZ3MgdG8gQGRhdGEyLCBmYWxzZSBvdGhlcndpc2VcbisgKi9cbitzdGF0aWMgYm9vbCBiYXRhZHZfY29tcGFyZV90dF9lbnRyeShjb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSxcbitcdFx0XHRcdCAgICBjb25zdCB2b2lkICpkYXRhMilcbit7XG4rXHRjb25zdCBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHQgPSBkYXRhMjtcbitcbitcdHJldHVybiBub2RlID09IFx1MDAyNnR0LVx1MDAzZWhhc2hfZW50cnk7XG4rfVxuK1xuIC8qKlxuICAqIGJhdGFkdl9jaG9vc2VfdHQoKSAtIHJldHVybiB0aGUgaW5kZXggb2YgdGhlIHR0IGVudHJ5IGluIHRoZSBoYXNoIHRhYmxlXG4gICogQGRhdGE6IHBvaW50ZXIgdG8gdGhlIHR0X2NvbW1vbl9lbnRyeSBvYmplY3QgdG8gbWFwXG5AQCAtMzEyLDYgKzMzMywxMCBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9tb2Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiAgKiAgZ2l2ZW4gdmlkXG4gICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXG4gICogQHZpZDogdGhlIFZMQU4gaWRlbnRpZmllclxuKyAqXG4rICogSXQgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHJlbW92aW5nIHRoZSBORVcgZmxhZyBvZiBhXG4rICogYmF0YWR2X3R0X2xvY2FsX2VudHJ5IHdoaWxlIGl0IGlzIHN0aWxsIHBhcnQgb2YgdGhlIGJhdF9wcml2LVx1MDAzZXR0LmxvY2FsX2hhc2guXG4rICogSXQgbXVzdCB0aGVyZWZvcmUgYmUgY2hlY2tlZCB1bmRlciB0aGUgc3BlY2lmaWMgbGlzdF9sb2Nrc1tpXS5cbiAgKi9cbiBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfc2l6ZV9pbmMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRcdCAgICAgdW5zaWduZWQgc2hvcnQgdmlkKVxuQEAgLTMyNCw2ICszNDksMTEgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfaW5jKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gICogIGdpdmVuIHZpZFxuICAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuICAqIEB2aWQ6IHRoZSBWTEFOIGlkZW50aWZpZXJcbisgKlxuKyAqIEl0IG11c3Qgb25seSBiZSBjYWxsZWQgYWZ0ZXIgYSBiYXRhZHZfdHRfbG9jYWxfZW50cnkgd2l0aG91dCBORVcgZmxhZ1xuKyAqIHdhcyByZW1vdmVkIGZyb20gYmF0X3ByaXYtXHUwMDNldHQubG9jYWxfaGFzaCAodW5kZXIgdGhlIHNwZWNpZmljXG4rICogbGlzdF9sb2Nrc1tpXSkgb3Igd2hlbiBpdCBpcyBlbnN1cmVkIHRoYXQgaXQgaXMgbm90IGFjY2Vzc2libGVcbisgKiBpbiB0aGlzIGxpc3QuXG4gICovXG4gc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIHNob3J0IHZpZClcbkBAIC00MTMsNiArNDQzLDIyIEBAIGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnlfcHV0KHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpvcmlnX2VudHJ5KVxuIFx0a3JlZl9wdXQoXHUwMDI2b3JpZ19lbnRyeS1cdTAwM2VyZWZjb3VudCwgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeV9yZWxlYXNlKTtcbiB9XG4gXG4rLyoqXG4rICogYmF0YWR2X3R0X2ZsYWdzX2dldCgpIC0gZ2V0IGEgc25hcHNob3Qgb2YgdGhlIGZsYWdzIG9mIGEgVFQgZW50cnlcbisgKiBAY29tbW9uOiB0dCBsb2NhbCBcdTAwMjYgdHQgZ2xvYmFsIGNvbW1vbiBkYXRhXG4rICpcbisgKiBSZXR1cm46IHRoZSBmbGFncyBvZiB0aGUgVFQgZW50cnkgYXMgb2JzZXJ2ZWQgdW5kZXIgaXRzIGZsYWdzX2xvY2suXG4rICovXG4rc3RhdGljIHUxNiBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICpjb21tb24pXG4re1xuK1x0dTE2IGZsYWdzO1xuK1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcdTAwMjZjb21tb24tXHUwMDNlZmxhZ3NfbG9jaylcbitcdFx0ZmxhZ3MgPSBjb21tb24tXHUwMDNlZmxhZ3M7XG4rXG4rXHRyZXR1cm4gZmxhZ3M7XG4rfVxuK1xuIC8qKlxuICAqIGJhdGFkdl90dF9sb2NhbF9ldmVudCgpIC0gc3RvcmUgYSBsb2NhbCBUVCBldmVudCAoQUREL0RFTClcbiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbkBAIC00MjUsMjMgKzQ3MSwyNSBAQCBzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZXZlbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uID0gXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uO1xuIFx0c3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSAqdHRfY2hhbmdlX25vZGU7XG4tXHR1OCBmbGFncyA9IGNvbW1vbi1cdTAwM2VmbGFncyB8IGV2ZW50X2ZsYWdzO1xuIFx0c3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSAqZW50cnk7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICpzYWZlO1xuIFx0Ym9vbCBkZWxfb3BfcmVxdWVzdGVkO1xuIFx0Ym9vbCBkZWxfb3BfZW50cnk7XG4gXHRzaXplX3QgY2hhbmdlcztcbitcdHU4IGZsYWdzO1xuIFxuIFx0dHRfY2hhbmdlX25vZGUgPSBrbWVtX2NhY2hlX2FsbG9jKGJhdGFkdl90dF9jaGFuZ2VfY2FjaGUsIEdGUF9BVE9NSUMpO1xuIFx0aWYgKCF0dF9jaGFuZ2Vfbm9kZSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0dHRfY2hhbmdlX25vZGUtXHUwMDNlY2hhbmdlLmZsYWdzID0gZmxhZ3M7XG4gXHRtZW1zZXQodHRfY2hhbmdlX25vZGUtXHUwMDNlY2hhbmdlLnJlc2VydmVkLCAwLFxuIFx0ICAgICAgIHNpemVvZih0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UucmVzZXJ2ZWQpKTtcbiBcdGV0aGVyX2FkZHJfY29weSh0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UuYWRkciwgY29tbW9uLVx1MDAzZWFkZHIpO1xuIFx0dHRfY2hhbmdlX25vZGUtXHUwMDNlY2hhbmdlLnZpZCA9IGh0b25zKGNvbW1vbi1cdTAwM2V2aWQpO1xuIFxuK1x0ZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KGNvbW1vbikgfCBldmVudF9mbGFncztcbitcbitcdHR0X2NoYW5nZV9ub2RlLVx1MDAzZWNoYW5nZS5mbGFncyA9IGZsYWdzO1xuIFx0ZGVsX29wX3JlcXVlc3RlZCA9IGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX0RFTDtcbiBcbiBcdC8qIGNoZWNrIGZvciBBREQrREVMLCBERUwrQURELCBBREQrQUREIG9yIERFTCtERUwgZXZlbnRzICovXG5AQCAtNTc1LDcgKzYyMyw2IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9nbG9iYWxfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsLFxuIFx0XHRcdFx0ICBjb25zdCBjaGFyICptZXNzYWdlKVxuIHtcbi1cdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9yZW1vdmVkX2VudHJ5O1xuIFx0c3RydWN0IGhsaXN0X25vZGUgKnR0X3JlbW92ZWRfbm9kZTtcbiBcbiBcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXG5AQCAtNTgzLDE4ICs2MzAsNjcgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdCAgIHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uYWRkcixcbiBcdFx0ICAgYmF0YWR2X3ByaW50X3ZpZCh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLnZpZCksIG1lc3NhZ2UpO1xuIFxuK1x0LyogcmVtb3ZlIGV4YWN0bHkgdGhpcyBvYmplY3Qgd2hlbiBzdGlsbCBwcmVzZW50IGluIGhhc2ggKi9cbiBcdHR0X3JlbW92ZWRfbm9kZSA9IGJhdGFkdl9oYXNoX3JlbW92ZShiYXRfcHJpdi1cdTAwM2V0dC5nbG9iYWxfaGFzaCxcbi1cdFx0XHRcdFx0ICAgICBiYXRhZHZfY29tcGFyZV90dCxcbitcdFx0XHRcdFx0ICAgICBiYXRhZHZfY29tcGFyZV90dF9lbnRyeSxcbiBcdFx0XHRcdFx0ICAgICBiYXRhZHZfY2hvb3NlX3R0LFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNnR0X2dsb2JhbC1cdTAwM2Vjb21tb24pO1xuIFx0aWYgKCF0dF9yZW1vdmVkX25vZGUpXG4gXHRcdHJldHVybjtcbiBcbiBcdC8qIGRyb3AgcmVmZXJlbmNlIG9mIHJlbW92ZSBoYXNoIGVudHJ5ICovXG4tXHR0dF9yZW1vdmVkX2VudHJ5ID0gaGxpc3RfZW50cnkodHRfcmVtb3ZlZF9ub2RlLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5LFxuLVx0XHRcdFx0ICAgICAgIGNvbW1vbi5oYXNoX2VudHJ5KTtcbi1cdGJhdGFkdl90dF9nbG9iYWxfZW50cnlfcHV0KHR0X3JlbW92ZWRfZW50cnkpO1xuK1x0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsKTtcbit9XG4rXG4rLyoqXG4rICogYmF0YWR2X3R0X2xvY2FsX2FkZF9yb2FtKCkgLSBoYW5kbGUgcm9hbWVkIGNsaWVudHMgZHVyaW5nIGJhdGFkdl90dF9sb2NhbF9hZGQoKVxuKyAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxuKyAqIEB0dF9nbG9iYWw6IHRoZSBnbG9iYWwgVFQgZW50cnlcbisgKiBAcm9hbWVkX2JhY2s6IHdoZXRoZXIgQHR0X2dsb2JhbCByb2FtZWQgYmFja1xuKyAqL1xuK3N0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9hZGRfcm9hbShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsLFxuK1x0XHRcdFx0ICAgICBib29sIHJvYW1lZF9iYWNrKVxuK3tcbitcdHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpvcmlnX2VudHJ5O1xuK1x0c3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7XG4rXG4rXHRpZiAoIXR0X2dsb2JhbClcbitcdFx0cmV0dXJuO1xuK1xuK1x0LyogQ2hlY2sgd2hldGhlciBpdCBpcyBhIHJvYW1pbmcsIGJ1dCBkb24ndCBkbyBhbnl0aGluZyBpZiB0aGUgcm9hbWluZ1xuK1x0ICogcHJvY2VzcyBoYXMgYWxyZWFkeSBiZWVuIGhhbmRsZWRcbitcdCAqL1xuK1x0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcdTAwMjZ0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spIHtcbitcdFx0aWYgKHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSlcbitcdFx0XHRyZXR1cm47XG4rXG4rXHRcdGlmICghcm9hbWVkX2JhY2spIHtcbitcdFx0XHQvKiBUaGUgZ2xvYmFsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgUk9BTUlORyBhbmQgaGFzIHRvIGJlXG4rXHRcdFx0ICoga2VwdCBmb3IgY29uc2lzdGVuY3kgcHVycG9zZS5cbitcdFx0XHQgKlxuK1x0XHRcdCAqIGJhdGFkdl90dF9nbG9iYWxfdG9fcHVyZ2UoKSBldmFsdWF0ZXMgcm9hbV9hdCBhcyBzb29uIGFzIGl0XG4rXHRcdFx0ICogb2JzZXJ2ZXMgQkFUQURWX1RUX0NMSUVOVF9ST0FNLCBzbyB0aGUgdGltZW91dCBoYXMgdG8gYmVcbitcdFx0XHQgKiBzdGFtcGVkIGJlZm9yZSB0aGUgZmxhZyBpcyBwdWJsaXNoZWQuIE90aGVyd2lzZSB0aGUgZW50cnkgY2FuXG4rXHRcdFx0ICogYmUgZGVsZXRlZCByaWdodCBhd2F5IGFzIFwiUm9hbWluZyB0aW1lb3V0XCIuXG4rXHRcdFx0ICovXG4rXHRcdFx0dHRfZ2xvYmFsLVx1MDAzZXJvYW1fYXQgPSBqaWZmaWVzO1xuK1x0XHRcdHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBUaGVzZSBub2RlIGFyZSBwcm9iYWJseSBnb2luZyB0byB1cGRhdGUgdGhlaXIgdHQgdGFibGUgKi9cbitcdGhlYWQgPSBcdTAwMjZ0dF9nbG9iYWwtXHUwMDNlb3JpZ19saXN0O1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG9yaWdfZW50cnksIGhlYWQsIGxpc3QpIHtcbitcdFx0YmF0YWR2X3NlbmRfcm9hbV9hZHYoYmF0X3ByaXYsIHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uYWRkcixcbitcdFx0XHRcdCAgICAgdHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi52aWQsXG4rXHRcdFx0XHQgICAgIG9yaWdfZW50cnktXHUwMDNlb3JpZ19ub2RlKTtcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuK1x0aWYgKHJvYW1lZF9iYWNrKVxuK1x0XHRiYXRhZHZfdHRfZ2xvYmFsX2ZyZWUoYmF0X3ByaXYsIHR0X2dsb2JhbCwgXCJSb2FtaW5nIGNhbmNlbGVkXCIpO1xuIH1cbiBcbiAvKipcbkBAIC02MTUsMjAgKzcxMSwxOSBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYgPSBuZXRkZXZfcHJpdihtZXNoX2lmYWNlKTtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwgPSBOVUxMO1xuLVx0c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWdfZW50cnk7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbDtcbiBcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQobWVzaF9pZmFjZSk7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqaW5fZGV2ID0gTlVMTDtcbiBcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XG4gXHRib29sIHJvYW1lZF9iYWNrID0gZmFsc2U7XG4gXHRib29sIGlpZl9pc193aWZpID0gZmFsc2U7XG4tXHRzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDtcbiBcdGludCBwYWNrZXRfc2l6ZV9tYXg7XG4gXHRib29sIHJldCA9IGZhbHNlO1xuIFx0dTggcmVtb3RlX2ZsYWdzO1xuIFx0aW50IGhhc2hfYWRkZWQ7XG4gXHRpbnQgdGFibGVfc2l6ZTtcbiBcdHUzMiBtYXRjaF9tYXJrO1xuK1x0Ym9vbCBtb2RpZmllZDtcbiBcbiBcdGlmIChpZmluZGV4ICE9IEJBVEFEVl9OVUxMX0lGSU5ERVgpXG4gXHRcdGluX2RldiA9IGRldl9nZXRfYnlfaW5kZXgobmV0LCBpZmluZGV4KTtcbkBAIC02NDYsNiArNzQxLDggQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbiBcbiBcdGlmICh0dF9sb2NhbCkge1xuIFx0XHR0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW4gPSBqaWZmaWVzO1xuK1xuK1x0XHRzcGluX2xvY2tfYmgoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuIFx0XHRpZiAodHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpIHtcbiBcdFx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxuIFx0XHRcdFx0ICAgXCJSZS1hZGRpbmcgcGVuZGluZyBjbGllbnQgJXBNICh2aWQ6ICVkKVxcblwiLFxuQEAgLTY1Niw2ICs3NTMsOCBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRcdCAqIGZsYWcgY2FuIGJlIHJlc2V0IGxpa2UgaXQgd2FzIG5ldmVyIGVucXVldWVkXG4gXHRcdFx0ICovXG4gXHRcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUEVORElORztcbitcdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4rXG4gXHRcdFx0Z290byBhZGRfZXZlbnQ7XG4gXHRcdH1cbiBcbkBAIC02NzEsNiArNzcwLDggQEAgYm9vbCBiYXRhZHZfdHRfbG9jYWxfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICptZXNoX2lmYWNlLCBjb25zdCB1OCAqYWRkcixcbiBcdFx0XHR0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2PSB+QkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFx0XHRcdHJvYW1lZF9iYWNrID0gdHJ1ZTtcbiBcdFx0fVxuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4rXG4gXHRcdGdvdG8gY2hlY2tfcm9hbWluZztcbiBcdH1cbiBcbkBAIC03MDYsMTggKzgwNywyMSBAQCBib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHQgICAodTgpYXRvbWljX3JlYWQoXHUwMDI2YmF0X3ByaXYtXHUwMDNldHQudm4pKTtcbiBcbiBcdGV0aGVyX2FkZHJfY29weSh0dF9sb2NhbC1cdTAwM2Vjb21tb24uYWRkciwgYWRkcik7XG4rXHR0dF9sb2NhbC1cdTAwM2Vjb21tb24udmlkID0gdmlkO1xuK1x0a3JlZl9pbml0KFx1MDAyNnR0X2xvY2FsLVx1MDAzZWNvbW1vbi5yZWZjb3VudCk7XG4rXHR0dF9sb2NhbC1cdTAwM2VsYXN0X3NlZW4gPSBqaWZmaWVzO1xuK1x0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmFkZGVkX2F0ID0gdHRfbG9jYWwtXHUwMDNlbGFzdF9zZWVuO1xuK1x0dHRfbG9jYWwtXHUwMDNldmxhbiA9IHZsYW47XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4rXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuIFx0LyogVGhlIGxvY2FsIGVudHJ5IGhhcyB0byBiZSBtYXJrZWQgYXMgTkVXIHRvIGF2b2lkIHRvIHNlbmQgaXQgaW5cbiBcdCAqIGEgZnVsbCB0YWJsZSByZXNwb25zZSBnb2luZyBvdXQgYmVmb3JlIHRoZSBuZXh0IHR0dm4gaW5jcmVtZW50XG4gXHQgKiAoY29uc2lzdGVuY3kgY2hlY2spXG4gXHQgKi9cbiBcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyA9IEJBVEFEVl9UVF9DTElFTlRfTkVXO1xuLVx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLnZpZCA9IHZpZDtcbiBcdGlmIChpaWZfaXNfd2lmaSlcbiBcdFx0dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfV0lGSTtcbi1cdGtyZWZfaW5pdChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuLVx0dHRfbG9jYWwtXHUwMDNlbGFzdF9zZWVuID0gamlmZmllcztcbi1cdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5hZGRlZF9hdCA9IHR0X2xvY2FsLVx1MDAzZWxhc3Rfc2Vlbjtcbi1cdHR0X2xvY2FsLVx1MDAzZXZsYW4gPSB2bGFuO1xuIFxuIFx0LyogdGhlIGJhdG1hbiBpbnRlcmZhY2UgbWFjIGFuZCBtdWx0aWNhc3QgYWRkcmVzc2VzIHNob3VsZCBuZXZlciBiZVxuIFx0ICogcHVyZ2VkXG5AQCAtNzI1LDYgKzgyOSw3IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4gXHRpZiAoYmF0YWR2X2NvbXBhcmVfZXRoKGFkZHIsIG1lc2hfaWZhY2UtXHUwMDNlZGV2X2FkZHIpIHx8XG4gXHQgICAgaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoYWRkcikpXG4gXHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0U7XG4rXHRzcGluX3VubG9ja19iaChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4gXG4gXHRrcmVmX2dldChcdTAwMjZ0dF9sb2NhbC1cdTAwM2Vjb21tb24ucmVmY291bnQpO1xuIFx0aGFzaF9hZGRlZCA9IGJhdGFkdl9oYXNoX2FkZChiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLCBiYXRhZHZfY29tcGFyZV90dCxcbkBAIC03NDEsMzEgKzg0Niw5IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4gXHRiYXRhZHZfdHRfbG9jYWxfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsLCBCQVRBRFZfTk9fRkxBR1MpO1xuIFxuIGNoZWNrX3JvYW1pbmc6XG4tXHQvKiBDaGVjayB3aGV0aGVyIGl0IGlzIGEgcm9hbWluZywgYnV0IGRvbid0IGRvIGFueXRoaW5nIGlmIHRoZSByb2FtaW5nXG4tXHQgKiBwcm9jZXNzIGhhcyBhbHJlYWR5IGJlZW4gaGFuZGxlZFxuLVx0ICovXG4tXHRpZiAodHRfZ2xvYmFsIFx1MDAyNlx1MDAyNiAhKHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkpIHtcbi1cdFx0LyogVGhlc2Ugbm9kZSBhcmUgcHJvYmFibHkgZ29pbmcgdG8gdXBkYXRlIHRoZWlyIHR0IHRhYmxlICovXG4tXHRcdGhlYWQgPSBcdTAwMjZ0dF9nbG9iYWwtXHUwMDNlb3JpZ19saXN0O1xuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShvcmlnX2VudHJ5LCBoZWFkLCBsaXN0KSB7XG4tXHRcdFx0YmF0YWR2X3NlbmRfcm9hbV9hZHYoYmF0X3ByaXYsIHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uYWRkcixcbi1cdFx0XHRcdFx0ICAgICB0dF9nbG9iYWwtXHUwMDNlY29tbW9uLnZpZCxcbi1cdFx0XHRcdFx0ICAgICBvcmlnX2VudHJ5LVx1MDAzZW9yaWdfbm9kZSk7XG4tXHRcdH1cbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHRcdGlmIChyb2FtZWRfYmFjaykge1xuLVx0XHRcdGJhdGFkdl90dF9nbG9iYWxfZnJlZShiYXRfcHJpdiwgdHRfZ2xvYmFsLFxuLVx0XHRcdFx0XHQgICAgICBcIlJvYW1pbmcgY2FuY2VsZWRcIik7XG4tXHRcdH0gZWxzZSB7XG4tXHRcdFx0LyogVGhlIGdsb2JhbCBlbnRyeSBoYXMgdG8gYmUgbWFya2VkIGFzIFJPQU1JTkcgYW5kXG4tXHRcdFx0ICogaGFzIHRvIGJlIGtlcHQgZm9yIGNvbnNpc3RlbmN5IHB1cnBvc2Vcbi1cdFx0XHQgKi9cbi1cdFx0XHR0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbi1cdFx0XHR0dF9nbG9iYWwtXHUwMDNlcm9hbV9hdCA9IGppZmZpZXM7XG4tXHRcdH1cbi1cdH1cbitcdGJhdGFkdl90dF9sb2NhbF9hZGRfcm9hbShiYXRfcHJpdiwgdHRfZ2xvYmFsLCByb2FtZWRfYmFjayk7XG4gXG4rXHRzcGluX2xvY2tfYmgoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuIFx0Lyogc3RvcmUgdGhlIGN1cnJlbnQgcmVtb3RlIGZsYWdzIGJlZm9yZSBhbHRlcmluZyB0aGVtLiBUaGlzIGhlbHBzXG4gXHQgKiB1bmRlcnN0YW5kaW5nIGlzIGZsYWdzIGFyZSBjaGFuZ2luZyBvciBub3RcbiBcdCAqL1xuQEAgLTc4NywxMCArODcwLDEzIEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqbWVzaF9pZmFjZSwgY29uc3QgdTggKmFkZHIsXG4gXHRlbHNlXG4gXHRcdHR0X2xvY2FsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX0lTT0xBO1xuIFxuK1x0bW9kaWZpZWQgPSByZW1vdGVfZmxhZ3MgXiAodHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfUkVNT1RFX01BU0spO1xuK1x0c3Bpbl91bmxvY2tfYmgoXHUwMDI2dHRfbG9jYWwtXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xuK1xuIFx0LyogaWYgYW55IFwiZHluYW1pY1wiIGZsYWcgaGFzIGJlZW4gbW9kaWZpZWQsIHJlc2VuZCBhbiBBREQgZXZlbnQgZm9yIHRoaXNcbiBcdCAqIGVudHJ5IHNvIHRoYXQgYWxsIHRoZSBub2RlcyBjYW4gZ2V0IHRoZSBuZXcgZmxhZ3NcbiBcdCAqL1xuLVx0aWYgKHJlbW90ZV9mbGFncyBeICh0dF9sb2NhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9SRU1PVEVfTUFTSykpXG4rXHRpZiAobW9kaWZpZWQpXG4gXHRcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWwsIEJBVEFEVl9OT19GTEFHUyk7XG4gXG4gXHRyZXQgPSB0cnVlO1xuQEAgLTExMTUsNiArMTIwMSw3IEBAIGJhdGFkdl90dF9sb2NhbF9kdW1wX2VudHJ5KHN0cnVjdCBza19idWZmICptc2csIHUzMiBwb3J0aWQsXG4gXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xuIFx0dW5zaWduZWQgaW50IGxhc3Rfc2Vlbl9tc2VjcztcbiBcdHZvaWQgKmhkcjtcbitcdHUxNiBmbGFncztcbiBcdHUzMiBjcmM7XG4gXG4gXHRsb2NhbCA9IGNvbnRhaW5lcl9vZihjb21tb24sIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksIGNvbW1vbik7XG5AQCAtMTEzNiwxMyArMTIyMywxNSBAQCBiYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLFxuIFxuIFx0Z2VubF9kdW1wX2NoZWNrX2NvbnNpc3RlbnQoY2IsIGhkcik7XG4gXG4rXHRmbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoY29tbW9uKTtcbitcbiBcdGlmIChubGFfcHV0KG1zZywgQkFUQURWX0FUVFJfVFRfQUREUkVTUywgRVRIX0FMRU4sIGNvbW1vbi1cdTAwM2VhZGRyKSB8fFxuIFx0ICAgIG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfVFRfQ1JDMzIsIGNyYykgfHxcbiBcdCAgICBubGFfcHV0X3UxNihtc2csIEJBVEFEVl9BVFRSX1RUX1ZJRCwgY29tbW9uLVx1MDAzZXZpZCkgfHxcbi1cdCAgICBubGFfcHV0X3UzMihtc2csIEJBVEFEVl9BVFRSX1RUX0ZMQUdTLCBjb21tb24tXHUwMDNlZmxhZ3MpKVxuK1x0ICAgIG5sYV9wdXRfdTMyKG1zZywgQkFUQURWX0FUVFJfVFRfRkxBR1MsIGZsYWdzKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAoIShjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTk9QVVJHRSkgXHUwMDI2XHUwMDI2XG4rXHRpZiAoIShmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKSBcdTAwMjZcdTAwMjZcbiBcdCAgICBubGFfcHV0X3UzMihtc2csIEJBVEFEVl9BVFRSX0xBU1RfU0VFTl9NU0VDUywgbGFzdF9zZWVuX21zZWNzKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG5AQCAtMTI0OSwyOSArMTMzOCwyMyBAQCBpbnQgYmF0YWR2X3R0X2xvY2FsX2R1bXAoc3RydWN0IHNrX2J1ZmYgKm1zZywgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKVxuIH1cbiBcbiAvKipcbi0gKiBiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoKSAtIG1hcmsgYSBsb2NhbCBUVCBlbnRyeSBhcyBwZW5kaW5nIHJlbW92YWxcbisgKiBiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmdfZXZlbnQoKSAtIHRyaWdnZXIgZXZlbnRzIGZvciBUVCBwZW5kaW5nIHJlbW92YWxcbiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbiAgKiBAdHRfbG9jYWxfZW50cnk6IGxvY2FsIFRUIGVudHJ5IHRvIG1hcmtcbiAgKiBAZmxhZ3M6IFRUIGNoYW5nZSBmbGFncyB0byBhbm5vdW5jZSB0b2dldGhlciB3aXRoIHRoZSBwZW5kaW5nIHJlbW92YWxcbiAgKiBAbWVzc2FnZTogZGVidWcgbWVzc2FnZSBkZXNjcmliaW5nIHRoZSByZWFzb24gZm9yIHRoZSBjaGFuZ2VcbiAgKlxuLSAqIFNjaGVkdWxlIHRoZSBUVCBjaGFuZ2UgYW5ub3VuY2VtZW50IGFuZCBzZXQgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HIG9uIHRoZVxuLSAqIGVudHJ5LiBUaGUgZW50cnkgaXMga2VwdCBpbiB0aGUgbG9jYWwgdGFibGUgdW50aWwgdGhlIG5leHQgVFRWTiBpbmNyZW1lbnRcbi0gKiBzbyB0aGF0IGEgY29uc2lzdGVuY3ktY2hlY2sgcmVzcG9uc2UgY2FuIHN0aWxsIGJlIGFuc3dlcmVkLlxuKyAqIFNjaGVkdWxlIHRoZSBUVCBjaGFuZ2UgYW5ub3VuY2VtZW50IGZvciB0aGUgZW50cnkuIFRoZSBlbnRyeSBpcyBrZXB0IGluIHRoZVxuKyAqIGxvY2FsIHRhYmxlIHVudGlsIHRoZSBuZXh0IFRUVk4gaW5jcmVtZW50IHNvIHRoYXQgYSBjb25zaXN0ZW5jeS1jaGVja1xuKyAqIHJlc3BvbnNlIGNhbiBzdGlsbCBiZSBhbnN3ZXJlZC5cbiAgKi9cbiBzdGF0aWMgdm9pZFxuLWJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuLVx0XHRcdCAgICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSxcbi1cdFx0XHQgICAgdTE2IGZsYWdzLCBjb25zdCBjaGFyICptZXNzYWdlKVxuK2JhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSxcbitcdFx0XHRcdCAgdTE2IGZsYWdzLCBjb25zdCBjaGFyICptZXNzYWdlKVxuIHtcbiBcdGJhdGFkdl90dF9sb2NhbF9ldmVudChiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksIGZsYWdzKTtcbiBcbi1cdC8qIFRoZSBsb2NhbCBjbGllbnQgaGFzIHRvIGJlIG1hcmtlZCBhcyBcInBlbmRpbmcgdG8gYmUgcmVtb3ZlZFwiIGJ1dCBoYXNcbi1cdCAqIHRvIGJlIGtlcHQgaW4gdGhlIHRhYmxlIGluIG9yZGVyIHRvIHNlbmQgaXQgaW4gYSBmdWxsIHRhYmxlXG4tXHQgKiByZXNwb25zZSBpc3N1ZWQgYmVmb3JlIHRoZSBuZXQgdHR2biBpbmNyZW1lbnQgKGNvbnNpc3RlbmN5IGNoZWNrKVxuLVx0ICovXG4tXHR0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HO1xuLVxuIFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbiBcdFx0ICAgXCJMb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKSBwZW5kaW5nIHRvIGJlIHJlbW92ZWQ6ICVzXFxuXCIsXG4gXHRcdCAgIHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5hZGRyLFxuQEAgLTEyOTIsMTYgKzEzNzUsMTcgQEAgdTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXG4gXHRcdFx0ICAgdW5zaWduZWQgc2hvcnQgdmlkLCBjb25zdCBjaGFyICptZXNzYWdlLFxuIFx0XHRcdCAgIGJvb2wgcm9hbWluZylcbiB7XG4tXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9yZW1vdmVkX2VudHJ5O1xuIFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSAqdHRfcmVtb3ZlZF9ub2RlO1xuIFx0dTE2IGN1cnJfZmxhZ3MgPSBCQVRBRFZfTk9fRkxBR1M7XG4rXHRib29sIHBlbmRpbmcgPSBmYWxzZTtcbiBcdHUxNiBmbGFncztcbiBcbiBcdHR0X2xvY2FsX2VudHJ5ID0gYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcbiBcdGlmICghdHRfbG9jYWxfZW50cnkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbiBcdGN1cnJfZmxhZ3MgPSB0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3M7XG4gXG4gXHRmbGFncyA9IEJBVEFEVl9UVF9DTElFTlRfREVMO1xuQEAgLTEzMTYsMjcgKzE0MDAsMzkgQEAgdTE2IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXG4gXHR9XG4gXG4gXHRpZiAoISh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfTkVXKSkge1xuLVx0XHRiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LCBmbGFncyxcbi1cdFx0XHRcdFx0ICAgIG1lc3NhZ2UpO1xuK1x0XHR0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgfD0gQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HO1xuK1x0XHRwZW5kaW5nID0gdHJ1ZTtcbitcdH1cbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcbitcbitcdGlmIChwZW5kaW5nKSB7XG4rXHRcdGJhdGFkdl90dF9sb2NhbF9zZXRfcGVuZGluZ19ldmVudChiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnksIGZsYWdzLFxuK1x0XHRcdFx0XHRcdCAgbWVzc2FnZSk7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuK1xuIFx0LyogaWYgdGhpcyBjbGllbnQgaGFzIGJlZW4gYWRkZWQgcmlnaHQgbm93LCBpdCBpcyBwb3NzaWJsZSB0b1xuIFx0ICogaW1tZWRpYXRlbHkgcHVyZ2UgaXRcbiBcdCAqL1xuIFx0YmF0YWR2X3R0X2xvY2FsX2V2ZW50KGJhdF9wcml2LCB0dF9sb2NhbF9lbnRyeSwgQkFUQURWX1RUX0NMSUVOVF9ERUwpO1xuIFxuK1x0LyogcmVtb3ZlIGV4YWN0bHkgdGhpcyBvYmplY3Qgd2hlbiBzdGlsbCBwcmVzZW50IGluIGhhc2ggKi9cbiBcdHR0X3JlbW92ZWRfbm9kZSA9IGJhdGFkdl9oYXNoX3JlbW92ZShiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoLFxuLVx0XHRcdFx0XHQgICAgIGJhdGFkdl9jb21wYXJlX3R0LFxuK1x0XHRcdFx0XHQgICAgIGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5LFxuIFx0XHRcdFx0XHQgICAgIGJhdGFkdl9jaG9vc2VfdHQsXG4gXHRcdFx0XHRcdCAgICAgXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uKTtcbiBcdGlmICghdHRfcmVtb3ZlZF9ub2RlKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdC8qIGJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldygpIG1heSBoYXZlIGNvbW1pdHRlZCB0aGUgZW50cnkgYW5kXG4rXHQgKiB0aHVzIGNvdW50ZWQgaXQgaW4gdGhlIGxvY2FsIHRhYmxlIHNpemUgc2luY2UgdGhlIEJBVEFEVl9UVF9DTElFTlRfTkVXXG4rXHQgKiBjaGVjayBhYm92ZS5cbitcdCAqL1xuK1x0aWYgKCEoYmF0YWR2X3R0X2ZsYWdzX2dldChcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24pIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpXG4rXHRcdGJhdGFkdl90dF9sb2NhbF9zaXplX2RlYyhiYXRfcHJpdiwgdHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLnZpZCk7XG4rXG4gXHQvKiBkcm9wIHJlZmVyZW5jZSBvZiByZW1vdmUgaGFzaCBlbnRyeSAqL1xuLVx0dHRfcmVtb3ZlZF9lbnRyeSA9IGhsaXN0X2VudHJ5KHR0X3JlbW92ZWRfbm9kZSxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LFxuLVx0XHRcdFx0ICAgICAgIGNvbW1vbi5oYXNoX2VudHJ5KTtcbi1cdGJhdGFkdl90dF9sb2NhbF9lbnRyeV9wdXQodHRfcmVtb3ZlZF9lbnRyeSk7XG4rXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcbiBcbiBvdXQ6XG4gXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcbkBAIC0xMzYxLDIxICsxNDU3LDM3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9saXN0KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHR0X2NvbW1vbl9lbnRyeSwgbm9kZV90bXAsIGhlYWQsXG4gXHRcdFx0XHQgIGhhc2hfZW50cnkpIHtcbitcdFx0Ym9vbCBjb250ID0gZmFsc2U7XG4rXG4gXHRcdHR0X2xvY2FsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSxcbiBcdFx0XHRcdFx0ICAgICAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSxcbiBcdFx0XHRcdFx0ICAgICAgY29tbW9uKTtcbi1cdFx0aWYgKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKVxuLVx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHQvKiBlbnRyeSBhbHJlYWR5IG1hcmtlZCBmb3IgZGVsZXRpb24gKi9cbi1cdFx0aWYgKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9QRU5ESU5HKVxuLVx0XHRcdGNvbnRpbnVlO1xuK1x0XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKSB7XG4rXHRcdFx0aWYgKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9OT1BVUkdFKSB7XG4rXHRcdFx0XHRjb250ID0gdHJ1ZTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKiBlbnRyeSBhbHJlYWR5IG1hcmtlZCBmb3IgZGVsZXRpb24gKi9cbitcdFx0XHRpZiAodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpIHtcbitcdFx0XHRcdGNvbnQgPSB0cnVlO1xuK1x0XHRcdFx0YnJlYWs7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGlmICghYmF0YWR2X2hhc190aW1lZF9vdXQodHRfbG9jYWxfZW50cnktXHUwMDNlbGFzdF9zZWVuLCB0aW1lb3V0KSkge1xuK1x0XHRcdFx0Y29udCA9IHRydWU7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHR9XG4rXG4rXHRcdFx0dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUEVORElORztcbitcdFx0fVxuIFxuLVx0XHRpZiAoIWJhdGFkdl9oYXNfdGltZWRfb3V0KHR0X2xvY2FsX2VudHJ5LVx1MDAzZWxhc3Rfc2VlbiwgdGltZW91dCkpXG4rXHRcdGlmIChjb250KVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmcoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LFxuLVx0XHRcdFx0XHQgICAgQkFUQURWX1RUX0NMSUVOVF9ERUwsIFwidGltZWQgb3V0XCIpO1xuK1x0XHRiYXRhZHZfdHRfbG9jYWxfc2V0X3BlbmRpbmdfZXZlbnQoYmF0X3ByaXYsIHR0X2xvY2FsX2VudHJ5LFxuK1x0XHRcdFx0XHRcdCAgQkFUQURWX1RUX0NMSUVOVF9ERUwsIFwidGltZWQgb3V0XCIpO1xuIFx0fVxuIH1cbiBcbkBAIC0xNTgxLDggKzE2OTMsMTAgQEAgYmF0YWR2X3R0X2dsb2JhbF9zeW5jX2ZsYWdzKHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWwpXG4gXHRcdGZsYWdzIHw9IG9yaWdfZW50cnktXHUwMDNlZmxhZ3M7XG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbi1cdGZsYWdzIHw9IHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2ICh+QkFUQURWX1RUX1NZTkNfTUFTSyk7XG4tXHR0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzID0gZmxhZ3M7XG4rXHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNnR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jaykge1xuK1x0XHRmbGFncyB8PSB0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiAofkJBVEFEVl9UVF9TWU5DX01BU0spO1xuK1x0XHR0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmZsYWdzID0gZmxhZ3M7XG4rXHR9XG4gfVxuIFxuIC8qKlxuQEAgLTE2NjQsOCArMTc3OCwxMCBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqY29tbW9uO1xuIFx0Ym9vbCByZXQgPSBmYWxzZTtcbitcdHUxNiBnbG9iYWxfZmxhZ3M7XG4gXHR1MTYgbG9jYWxfZmxhZ3M7XG4gXHRpbnQgaGFzaF9hZGRlZDtcbitcdGJvb2wgZGVsZXRlO1xuIFxuIFx0LyogaWdub3JlIGdsb2JhbCBlbnRyaWVzIGZyb20gYmFja2JvbmUgbm9kZXMgKi9cbiBcdGlmIChiYXRhZHZfYmxhX2lzX2JhY2tib25lX2d3X29yaWcoYmF0X3ByaXYsIG9yaWdfbm9kZS1cdTAwM2VvcmlnLCB2aWQpKVxuQEAgLTE2NzgsOSArMTc5NCwxMSBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0ICogZm9yIGEgcm9hbWluZyBhZHZlcnRpc2VtZW50IGluc3RlYWQgb2YgbWFudWFsbHkgbWVzc2luZyB1cCB0aGUgZ2xvYmFsXG4gXHQgKiB0YWJsZVxuIFx0ICovXG4tXHRpZiAoKGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApIFx1MDAyNlx1MDAyNiB0dF9sb2NhbF9lbnRyeSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKVxuLVx0XHRnb3RvIG91dDtcbitcdGlmICgoZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgXHUwMDI2XHUwMDI2IHR0X2xvY2FsX2VudHJ5KSB7XG4rXHRcdGxvY2FsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24pO1xuK1x0XHRpZiAoIShsb2NhbF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuIFx0aWYgKCF0dF9nbG9iYWxfZW50cnkpIHtcbiBcdFx0dHRfZ2xvYmFsX2VudHJ5ID0ga21lbV9jYWNoZV96YWxsb2MoYmF0YWR2X3RnX2NhY2hlLFxuQEAgLTE2OTEsOSArMTgwOSwxMyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRjb21tb24gPSBcdTAwMjZ0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uO1xuIFx0XHRldGhlcl9hZGRyX2NvcHkoY29tbW9uLVx1MDAzZWFkZHIsIHR0X2FkZHIpO1xuIFx0XHRjb21tb24tXHUwMDNldmlkID0gdmlkO1xuK1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjb21tb24tXHUwMDNlZmxhZ3NfbG9jayk7XG4gXG4tXHRcdGlmICghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoY29tbW9uLVx1MDAzZWFkZHIpKVxuK1x0XHRpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGNvbW1vbi1cdTAwM2VhZGRyKSkge1xuK1x0XHRcdHNwaW5fbG9ja19iaChcdTAwMjZjb21tb24tXHUwMDNlZmxhZ3NfbG9jayk7XG4gXHRcdFx0Y29tbW9uLVx1MDAzZWZsYWdzID0gZmxhZ3MgXHUwMDI2ICh+QkFUQURWX1RUX1NZTkNfTUFTSyk7XG4rXHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Y29tbW9uLVx1MDAzZWZsYWdzX2xvY2spO1xuK1x0XHR9XG4gXG4gXHRcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vyb2FtX2F0ID0gMDtcbiBcdFx0Lyogbm9kZSBtdXN0IHN0b3JlIGN1cnJlbnQgdGltZSBpbiBjYXNlIG9mIHJvYW1pbmcuIFRoaXMgaXNcbkBAIC0xNzMzLDggKzE4NTUsMTAgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICogICAgb3JpZ2luYXRvciBsaXN0IGFuZCBhZGQgdGhlIG5ldyBvbmUgb3JpZ19lbnRyeVxuIFx0XHQgKi9cbiBcdFx0aWYgKGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApIHtcbi1cdFx0XHRpZiAoIShjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkpXG4rXHRcdFx0Z2xvYmFsX2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChjb21tb24pO1xuK1x0XHRcdGlmICghKGdsb2JhbF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKSlcbiBcdFx0XHRcdGdvdG8gb3V0O1xuK1xuIFx0XHRcdGlmIChiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X2hhc19vcmlnKHR0X2dsb2JhbF9lbnRyeSxcbiBcdFx0XHRcdFx0XHRcdCAgICBvcmlnX25vZGUsIE5VTEwpKVxuIFx0XHRcdFx0Z290byBvdXRfcmVtb3ZlO1xuQEAgLTE3NDIsNiArMTg2Niw5IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0Z290byBhZGRfb3JpZ19lbnRyeTtcbiBcdFx0fVxuIFxuK1x0XHRkZWxldGUgPSBmYWxzZTtcbitcbitcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmNvbW1vbi1cdTAwM2VmbGFnc19sb2NrKTtcbiBcdFx0LyogaWYgdGhlIGNsaWVudCB3YXMgdGVtcG9yYXJ5IGFkZGVkIGJlZm9yZSByZWNlaXZpbmcgdGhlIGZpcnN0XG4gXHRcdCAqIE9HTSBhbm5vdW5jaW5nIGl0LCB3ZSBoYXZlIHRvIGNsZWFyIHRoZSBURU1QIGZsYWcuIEFsc28sXG4gXHRcdCAqIHJlbW92ZSB0aGUgcHJldmlvdXMgdGVtcG9yYXJ5IG9yaWcgbm9kZSBhbmQgcmUtYWRkIGl0XG5AQCAtMTc0OSw3ICsxODc2LDcgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICogaXMgYSBub24tdGVtcG9yYXJ5IGVudHJ5IGlzIHByZWZlcnJlZC5cbiBcdFx0ICovXG4gXHRcdGlmIChjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkge1xuLVx0XHRcdGJhdGFkdl90dF9nbG9iYWxfZGVsX29yaWdfbGlzdCh0dF9nbG9iYWxfZW50cnkpO1xuK1x0XHRcdGRlbGV0ZSA9IHRydWU7XG4gXHRcdFx0Y29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfVEVNUDtcbiBcdFx0fVxuIFxuQEAgLTE3NjgsMTAgKzE4OTUsMTQgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0ICogbmV3IG9uZS5cbiBcdFx0ICovXG4gXHRcdGlmIChjb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkge1xuLVx0XHRcdGJhdGFkdl90dF9nbG9iYWxfZGVsX29yaWdfbGlzdCh0dF9nbG9iYWxfZW50cnkpO1xuLVx0XHRcdGNvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4rXHRcdFx0ZGVsZXRlID0gdHJ1ZTtcbiBcdFx0XHR0dF9nbG9iYWxfZW50cnktXHUwMDNlcm9hbV9hdCA9IDA7XG4rXHRcdFx0Y29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbiBcdFx0fVxuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZjb21tb24tXHUwMDNlZmxhZ3NfbG9jayk7XG4rXG4rXHRcdGlmIChkZWxldGUpXG4rXHRcdFx0YmF0YWR2X3R0X2dsb2JhbF9kZWxfb3JpZ19saXN0KHR0X2dsb2JhbF9lbnRyeSk7XG4gXHR9XG4gYWRkX29yaWdfZW50cnk6XG4gXHQvKiBhZGQgdGhlIG5ldyBvcmlnX2VudHJ5IChpZiBuZWVkZWQpIG9yIHVwZGF0ZSBpdCAqL1xuQEAgLTE3OTUsNiArMTkyNiw4IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfYWRkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRsb2NhbF9mbGFncyA9IGJhdGFkdl90dF9sb2NhbF9yZW1vdmUoYmF0X3ByaXYsIHR0X2FkZHIsIHZpZCxcbiBcdFx0XHRcdFx0ICAgICBcImdsb2JhbCB0dCByZWNlaXZlZFwiLFxuIFx0XHRcdFx0XHQgICAgIGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1JPQU0pO1xuK1xuK1x0c3Bpbl9sb2NrX2JoKFx1MDAyNnR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4gXHR0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIHw9IGxvY2FsX2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1dJRkk7XG4gXG4gXHRpZiAoIShmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSlcbkBAIC0xODAyLDYgKzE5MzUsNyBAQCBzdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHQgKiByb2FtaW5nIHN0YXRlIGFueW1vcmUuXG4gXHRcdCAqL1xuIFx0XHR0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNj0gfkJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbitcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XG4gXG4gb3V0OlxuIFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsX2VudHJ5KTtcbkBAIC0xODcxLDkgKzIwMDUsOSBAQCBiYXRhZHZfdHRfZ2xvYmFsX2R1bXBfc3ViZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbiBcdFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkgKm9yaWcsXG4gXHRcdFx0ICAgICAgIGJvb2wgYmVzdClcbiB7XG4tXHR1MTYgZmxhZ3MgPSAoY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiAofkJBVEFEVl9UVF9TWU5DX01BU0spKSB8IG9yaWctXHUwMDNlZmxhZ3M7XG4gXHRzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZV92bGFuICp2bGFuO1xuIFx0dTggbGFzdF90dHZuO1xuK1x0dTE2IGZsYWdzO1xuIFx0dm9pZCAqaGRyO1xuIFx0dTMyIGNyYztcbiBcbkBAIC0xODkyLDYgKzIwMjYsNyBAQCBiYXRhZHZfdHRfZ2xvYmFsX2R1bXBfc3ViZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCwgdTMyIHNlcSxcbiBcdGlmICghaGRyKVxuIFx0XHRyZXR1cm4gLUVOT0JVRlM7XG4gXG4rXHRmbGFncyA9IChiYXRhZHZfdHRfZmxhZ3NfZ2V0KGNvbW1vbikgXHUwMDI2ICh+QkFUQURWX1RUX1NZTkNfTUFTSykpIHwgb3JpZy1cdTAwM2VmbGFncztcbiBcdGxhc3RfdHR2biA9IFJFQURfT05DRShvcmlnLVx1MDAzZW9yaWdfbm9kZS1cdTAwM2VsYXN0X3R0dm4pO1xuIFxuIFx0aWYgKG5sYV9wdXQobXNnLCBCQVRBRFZfQVRUUl9UVF9BRERSRVNTLCBFVEhfQUxFTiwgY29tbW9uLVx1MDAzZWFkZHIpIHx8XG5AQCAtMjE3OSw5ICsyMzE0LDEyIEBAIGJhdGFkdl90dF9nbG9iYWxfZGVsX3JvYW1pbmcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxhc3RfZW50cnkpIHtcbi1cdFx0LyogaXRzIHRoZSBsYXN0IG9uZSwgbWFyayBmb3Igcm9hbWluZy4gKi9cbi1cdFx0dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1JPQU07XG4tXHRcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcbitcdFx0c2NvcGVkX2d1YXJkKHNwaW5sb2NrX2JoLCBcdTAwMjZ0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spIHtcbitcdFx0XHQvKiBpdHMgdGhlIGxhc3Qgb25lLCBtYXJrIGZvciByb2FtaW5nLiAqL1xuK1x0XHRcdHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vyb2FtX2F0ID0gamlmZmllcztcbitcbitcdFx0XHR0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIHw9IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbitcdFx0fVxuIFx0fSBlbHNlIHtcbiBcdFx0LyogdGhlcmUgaXMgYW5vdGhlciBlbnRyeSwgd2UgY2FuIHNpbXBseSBkZWxldGUgdGhpc1xuIFx0XHQgKiBvbmUgYW5kIGNhbiBzdGlsbCB1c2UgdGhlIG90aGVyIG9uZS5cbkBAIC0yMzMwLDE2ICsyNDY4LDE4IEBAIHN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfdG9fcHVyZ2Uoc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbCxcbiBcdHVuc2lnbmVkIGxvbmcgdGVtcF90aW1lb3V0ID0gQkFUQURWX1RUX0NMSUVOVF9URU1QX1RJTUVPVVQ7XG4gXHRib29sIHB1cmdlID0gZmFsc2U7XG4gXG4tXHRpZiAoKHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgYmF0YWR2X2hhc190aW1lZF9vdXQodHRfZ2xvYmFsLVx1MDAzZXJvYW1fYXQsIHJvYW1fdGltZW91dCkpIHtcbi1cdFx0cHVyZ2UgPSB0cnVlO1xuLVx0XHQqbXNnID0gXCJSb2FtaW5nIHRpbWVvdXRcXG5cIjtcbi1cdH1cbitcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2dHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKSB7XG4rXHRcdGlmICgodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGJhdGFkdl9oYXNfdGltZWRfb3V0KHR0X2dsb2JhbC1cdTAwM2Vyb2FtX2F0LCByb2FtX3RpbWVvdXQpKSB7XG4rXHRcdFx0cHVyZ2UgPSB0cnVlO1xuK1x0XHRcdCptc2cgPSBcIlJvYW1pbmcgdGltZW91dFxcblwiO1xuK1x0XHR9XG4gXG4tXHRpZiAoKHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgXHUwMDI2XHUwMDI2XG4tXHQgICAgYmF0YWR2X2hhc190aW1lZF9vdXQodHRfZ2xvYmFsLVx1MDAzZWNvbW1vbi5hZGRlZF9hdCwgdGVtcF90aW1lb3V0KSkge1xuLVx0XHRwdXJnZSA9IHRydWU7XG4tXHRcdCptc2cgPSBcIlRlbXBvcmFyeSBjbGllbnQgdGltZW91dFxcblwiO1xuK1x0XHRpZiAoKHR0X2dsb2JhbC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfVEVNUCkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBiYXRhZHZfaGFzX3RpbWVkX291dCh0dF9nbG9iYWwtXHUwMDNlY29tbW9uLmFkZGVkX2F0LCB0ZW1wX3RpbWVvdXQpKSB7XG4rXHRcdFx0cHVyZ2UgPSB0cnVlO1xuK1x0XHRcdCptc2cgPSBcIlRlbXBvcmFyeSBjbGllbnQgdGltZW91dFxcblwiO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gcHVyZ2U7XG5AQCAtMjQzNyw4ICsyNTc3LDggQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2dsb2JhbF90YWJsZV9mcmVlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXG4gLyoqXG4gICogX2JhdGFkdl9pc19hcF9pc29sYXRlZCgpIC0gY2hlY2sgd2hldGhlciB0d28gY2xpZW50cyBhcmUgQVAtaXNvbGF0ZWQgZnJvbVxuICAqICBlYWNoIG90aGVyXG4tICogQHR0X2xvY2FsX2VudHJ5OiBsb2NhbCBUVCBlbnRyeSBvZiB0aGUgc2VuZGluZyBjbGllbnRcbi0gKiBAdHRfZ2xvYmFsX2VudHJ5OiBnbG9iYWwgVFQgZW50cnkgb2YgdGhlIGRlc3RpbmF0aW9uIGNsaWVudFxuKyAqIEB0dF9sb2NhbF9lbnRyeTogbG9jYWwgVFQgZW50cnkgb2Ygb25lIGxvY2FsIGNsaWVudFxuKyAqIEB0dF9nbG9iYWxfZW50cnk6IGdsb2JhbCBUVCBlbnRyeSBvZiB0aGUgcmVtb3RlIGNsaWVudFxuICAqXG4gICogUmV0dXJuOiB0cnVlIGlmIHRyYWZmaWMgYmV0d2VlbiB0aGUgdHdvIGNsaWVudHMgc2hvdWxkIGJlIGRyb3BwZWQgYmVjYXVzZVxuICAqICBlaXRoZXIgYm90aCBhcmUgV2lGaSBjbGllbnRzIG9yIGJvdGggY2FycnkgdGhlIElTT0xBVElPTiBmbGFnOyBmYWxzZVxuQEAgLTI0NDgsMTMgKzI1ODgsMTkgQEAgc3RhdGljIGJvb2xcbiBfYmF0YWR2X2lzX2FwX2lzb2xhdGVkKHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LFxuIFx0XHQgICAgICAgc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeSlcbiB7XG4tXHRpZiAodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1dJRkkgXHUwMDI2XHUwMDI2XG4tXHQgICAgdHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9XSUZJKVxuK1x0dTE2IGdsb2JhbF9mbGFncztcbitcdHUxNiBsb2NhbF9mbGFncztcbitcbitcdGdsb2JhbF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoXHUwMDI2dHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbik7XG4rXHRsb2NhbF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQoXHUwMDI2dHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uKTtcbitcbitcdGlmIChsb2NhbF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9XSUZJIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGdsb2JhbF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9XSUZJKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdC8qIGNoZWNrIGlmIHRoZSB0d28gY2xpZW50cyBhcmUgbWFya2VkIGFzIGlzb2xhdGVkICovXG4tXHRpZiAodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX0lTT0xBIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHR0X2dsb2JhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEpXG4rXHRpZiAobG9jYWxfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEEgXHUwMDI2XHUwMDI2XG4rXHQgICAgZ2xvYmFsX2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX0lTT0xBKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbiBcbiBcdHJldHVybiBmYWxzZTtcbkBAIC0yNDgzLDExICsyNjI5LDE1IEBAIHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2goc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5ID0gTlVMTDtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfb3JpZ19saXN0X2VudHJ5ICpiZXN0X2VudHJ5O1xuIFx0c3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKm9yaWdfbm9kZSA9IE5VTEw7XG4rXHR1MTYgZmxhZ3M7XG4gXG4gXHRpZiAoc3JjIFx1MDAyNlx1MDAyNiBiYXRhZHZfdmxhbl9hcF9pc29sYV9nZXQoYmF0X3ByaXYsIHZpZCkpIHtcbiBcdFx0dHRfbG9jYWxfZW50cnkgPSBiYXRhZHZfdHRfbG9jYWxfaGFzaF9maW5kKGJhdF9wcml2LCBzcmMsIHZpZCk7XG4tXHRcdGlmICghdHRfbG9jYWxfZW50cnkgfHxcbi1cdFx0ICAgICh0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykpXG4rXHRcdGlmICghdHRfbG9jYWxfZW50cnkpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdGZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcdTAwMjZ0dF9sb2NhbF9lbnRyeS1cdTAwM2Vjb21tb24pO1xuK1x0XHRpZiAoZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORylcbiBcdFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbkBAIC0yNTYyLDYgKzI3MTIsOCBAQCBzdGF0aWMgdTMyIGJhdGFkdl90dF9nbG9iYWxfY3JjKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHR0X2NvbW1vbiwgaGVhZCwgaGFzaF9lbnRyeSkge1xuK1x0XHRcdHUxNiB0dF9mbGFncztcbitcbiBcdFx0XHR0dF9nbG9iYWwgPSBjb250YWluZXJfb2YodHRfY29tbW9uLFxuIFx0XHRcdFx0XHRcdCBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSxcbiBcdFx0XHRcdFx0XHQgY29tbW9uKTtcbkBAIC0yNTcxLDE4ICsyNzIzLDIxIEBAIHN0YXRpYyB1MzIgYmF0YWR2X3R0X2dsb2JhbF9jcmMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcbiBcdFx0XHRpZiAodHRfY29tbW9uLVx1MDAzZXZpZCAhPSB2aWQpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHR0dF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQodHRfY29tbW9uKTtcbitcbiBcdFx0XHQvKiBSb2FtaW5nIGNsaWVudHMgYXJlIGluIHRoZSBnbG9iYWwgdGFibGUgZm9yXG4gXHRcdFx0ICogY29uc2lzdGVuY3kgb25seS4gVGhleSBkb24ndCBoYXZlIHRvIGJlXG4gXHRcdFx0ICogdGFrZW4gaW50byBhY2NvdW50IHdoaWxlIGNvbXB1dGluZyB0aGVcbiBcdFx0XHQgKiBnbG9iYWwgY3JjXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKHR0X2NvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKVxuK1x0XHRcdGlmICh0dF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKVxuIFx0XHRcdFx0Y29udGludWU7XG4rXG4gXHRcdFx0LyogVGVtcG9yYXJ5IGNsaWVudHMgaGF2ZSBub3QgYmVlbiBhbm5vdW5jZWQgeWV0LCBzb1xuIFx0XHRcdCAqIHRoZXkgaGF2ZSB0byBiZSBza2lwcGVkIHdoaWxlIGNvbXB1dGluZyB0aGUgZ2xvYmFsXG4gXHRcdFx0ICogY3JjXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKHR0X2NvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKVxuK1x0XHRcdGlmICh0dF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0LyogZmluZCBvdXQgaWYgdGhpcyBnbG9iYWwgZW50cnkgaXMgYW5ub3VuY2VkIGJ5IHRoaXNcbkBAIC0yNjQyLDE4ICsyNzk3LDI0IEBAIHN0YXRpYyB1MzIgYmF0YWR2X3R0X2xvY2FsX2NyYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFxuIFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dF9jb21tb24sIGhlYWQsIGhhc2hfZW50cnkpIHtcbitcdFx0XHR1MTYgdHRfZmxhZ3M7XG4rXG4gXHRcdFx0LyogY29tcHV0ZSB0aGUgQ1JDIG9ubHkgZm9yIGVudHJpZXMgYmVsb25naW5nIHRvIHRoZVxuIFx0XHRcdCAqIFZMQU4gaWRlbnRpZmllZCBieSB2aWRcbiBcdFx0XHQgKi9cbiBcdFx0XHRpZiAodHRfY29tbW9uLVx1MDAzZXZpZCAhPSB2aWQpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbitcdFx0XHR0dF9mbGFncyA9IGJhdGFkdl90dF9mbGFnc19nZXQodHRfY29tbW9uKTtcbitcbiBcdFx0XHQvKiBub3QgeWV0IGNvbW1pdHRlZCBjbGllbnRzIGhhdmUgbm90IHRvIGJlIHRha2VuIGludG9cbiBcdFx0XHQgKiBhY2NvdW50IHdoaWxlIGNvbXB1dGluZyB0aGUgQ1JDXG4gXHRcdFx0ICovXG4tXHRcdFx0aWYgKHR0X2NvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpXG4rXHRcdFx0aWYgKHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHRcdGZsYWdzID0gdHRfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9TWU5DX01BU0s7XG4rXG4gXHRcdFx0LyogdXNlIG5ldHdvcmsgb3JkZXIgdG8gcmVhZCB0aGUgVklEOiB0aGlzIGVuc3VyZXMgdGhhdFxuIFx0XHRcdCAqIGV2ZXJ5IG5vZGUgcmVhZHMgdGhlIGJ5dGVzIGluIHRoZSBzYW1lIG9yZGVyLlxuIFx0XHRcdCAqL1xuQEAgLTI2NjMsNyArMjgyNCw2IEBAIHN0YXRpYyB1MzIgYmF0YWR2X3R0X2xvY2FsX2NyYyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRcdC8qIGNvbXB1dGUgdGhlIENSQyBvbiBmbGFncyB0aGF0IGhhdmUgdG8gYmUga2VwdCBpbiBzeW5jXG4gXHRcdFx0ICogYW1vbmcgbm9kZXNcbiBcdFx0XHQgKi9cbi1cdFx0XHRmbGFncyA9IHR0X2NvbW1vbi1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX1NZTkNfTUFTSztcbiBcdFx0XHRjcmNfdG1wID0gY3JjMzJjKGNyY190bXAsIFx1MDAyNmZsYWdzLCBzaXplb2YoZmxhZ3MpKTtcbiBcbiBcdFx0XHRjcmMgXj0gY3JjMzJjKGNyY190bXAsIHR0X2NvbW1vbi1cdTAwM2VhZGRyLCBFVEhfQUxFTik7XG5AQCAtMjgyMSwxNyArMjk4MSwxOSBAQCBiYXRhZHZfdHRfcmVxX25vZGVfbmV3KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gICpcbiAgKiBSZXR1cm46IHRydWUgaWYgdGhlIGVudHJ5IGlzIGEgdmFsaWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgKi9cbi1zdGF0aWMgYm9vbCBiYXRhZHZfdHRfbG9jYWxfdmFsaWQoY29uc3Qgdm9pZCAqZW50cnlfcHRyLFxuK3N0YXRpYyBib29sIGJhdGFkdl90dF9sb2NhbF92YWxpZCh2b2lkICplbnRyeV9wdHIsXG4gXHRcdFx0XHQgIGNvbnN0IHZvaWQgKmRhdGFfcHRyLFxuIFx0XHRcdFx0ICB1OCAqZmxhZ3MpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeSA9IGVudHJ5X3B0cjtcbitcdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnkgPSBlbnRyeV9wdHI7XG4rXHR1MTYgdHRfZmxhZ3M7XG4gXG4tXHRpZiAodHRfY29tbW9uX2VudHJ5LVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVylcbitcdHR0X2ZsYWdzID0gYmF0YWR2X3R0X2ZsYWdzX2dldCh0dF9jb21tb25fZW50cnkpO1xuK1x0aWYgKHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVylcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0aWYgKGZsYWdzKVxuLVx0XHQqZmxhZ3MgPSB0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3M7XG4rXHRcdCpmbGFncyA9IHR0X2ZsYWdzO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuQEAgLTI4NDgsMTYgKzMwMTAsMTggQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2xvY2FsX3ZhbGlkKGNvbnN0IHZvaWQgKmVudHJ5X3B0cixcbiAgKlxuICAqIFJldHVybjogdHJ1ZSBpZiB0aGUgZW50cnkgaXMgYSB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAqL1xuLXN0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfdmFsaWQoY29uc3Qgdm9pZCAqZW50cnlfcHRyLFxuK3N0YXRpYyBib29sIGJhdGFkdl90dF9nbG9iYWxfdmFsaWQodm9pZCAqZW50cnlfcHRyLFxuIFx0XHRcdFx0ICAgY29uc3Qgdm9pZCAqZGF0YV9wdHIsXG4gXHRcdFx0XHQgICB1OCAqZmxhZ3MpXG4ge1xuLVx0Y29uc3Qgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeSA9IGVudHJ5X3B0cjtcbi1cdGNvbnN0IHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7XG4rXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5ID0gZW50cnlfcHRyO1xuIFx0Y29uc3Qgc3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKm9yaWdfbm9kZSA9IGRhdGFfcHRyO1xuK1x0c3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbF9lbnRyeTtcbitcdHUxNiB0dF9mbGFncztcbiBcbi1cdGlmICh0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSB8fFxuLVx0ICAgIHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9URU1QKVxuK1x0dHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KHR0X2NvbW1vbl9lbnRyeSk7XG4rXHRpZiAodHRfZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTSB8fFxuK1x0ICAgIHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1RFTVApXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbiBcdHR0X2dsb2JhbF9lbnRyeSA9IGNvbnRhaW5lcl9vZih0dF9jb21tb25fZW50cnksXG5AQCAtMjg4Niw3ICszMDUwLDcgQEAgc3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF92YWxpZChjb25zdCB2b2lkICplbnRyeV9wdHIsXG4gc3RhdGljIHUxNiBiYXRhZHZfdHRfdHZsdl9nZW5lcmF0ZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmhhc2gsXG4gXHRcdFx0XHQgICB2b2lkICp0dmx2X2J1ZmYsIHUxNiB0dF9sZW4sXG4tXHRcdFx0XHQgICBib29sICgqdmFsaWRfY2IpKGNvbnN0IHZvaWQgKixcbitcdFx0XHRcdCAgIGJvb2wgKCp2YWxpZF9jYikodm9pZCAqLFxuIFx0XHRcdFx0XHRcdCAgICBjb25zdCB2b2lkICosXG4gXHRcdFx0XHRcdFx0ICAgIHU4ICpmbGFncyksXG4gXHRcdFx0XHQgICB2b2lkICpjYl9kYXRhKVxuQEAgLTM1MTEsMTkgKzM2NzUsMjEgQEAgYm9vbCBiYXRhZHZfaXNfbXlfY2xpZW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICphZGRyLFxuIFx0XHRcdCB1bnNpZ25lZCBzaG9ydCB2aWQpXG4ge1xuIFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7XG4tXHRib29sIHJldCA9IGZhbHNlO1xuK1x0dTE2IHR0X2ZsYWdzO1xuK1x0Ym9vbCByZXQ7XG4gXG4gXHR0dF9sb2NhbF9lbnRyeSA9IGJhdGFkdl90dF9sb2NhbF9oYXNoX2ZpbmQoYmF0X3ByaXYsIGFkZHIsIHZpZCk7XG4gXHRpZiAoIXR0X2xvY2FsX2VudHJ5KVxuLVx0XHRnb3RvIG91dDtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0dHRfZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbik7XG4rXG4gXHQvKiBDaGVjayBpZiB0aGUgY2xpZW50IGhhcyBiZWVuIGxvZ2ljYWxseSBkZWxldGVkIChidXQgaXMga2VwdCBmb3JcbiBcdCAqIGNvbnNpc3RlbmN5IHB1cnBvc2UpXG4gXHQgKi9cbi1cdGlmICgodHRfbG9jYWxfZW50cnktXHUwMDNlY29tbW9uLmZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpIHx8XG4tXHQgICAgKHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSlcbi1cdFx0Z290byBvdXQ7XG4tXHRyZXQgPSB0cnVlO1xuLW91dDpcbitcdHJldCA9ICEoKHR0X2ZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX1BFTkRJTkcpIHx8XG4rXHRcdCh0dF9mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNKSk7XG4rXG4gXHRiYXRhZHZfdHRfbG9jYWxfZW50cnlfcHV0KHR0X2xvY2FsX2VudHJ5KTtcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTM3ODIsMTYgKzM5NDgsMTMgQEAgdm9pZCBiYXRhZHZfdHRfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxuIH1cbiBcbiAvKipcbi0gKiBiYXRhZHZfdHRfbG9jYWxfc2V0X2ZsYWdzKCkgLSBzZXQgb3IgdW5zZXQgdGhlIHNwZWNpZmllZCBmbGFncyBvbiB0aGUgbG9jYWxcbi0gKiAgdGFibGUgYW5kIHBvc3NpYmx5IGNvdW50IHRoZW0gaW4gdGhlIFRUIHNpemVcbisgKiBiYXRhZHZfdHRfbG9jYWxfdHJhbnNpdGlvbl9uZXcoKSAtIHVuc2V0IHRoZSBORVcgZmxhZyBvbiB0aGUgbG9jYWxcbisgKiAgdGFibGUgYW5kIGNvdW50IHRoZW0gaW4gdGhlIFRUIHNpemVcbiAgKiBAYmF0X3ByaXY6IHRoZSBiYXQgcHJpdiB3aXRoIGFsbCB0aGUgbWVzaCBpbnRlcmZhY2UgaW5mb3JtYXRpb25cbi0gKiBAZmxhZ3M6IHRoZSBmbGFnIHRvIHN3aXRjaFxuLSAqIEBlbmFibGU6IHdoZXRoZXIgdG8gc2V0IG9yIHVuc2V0IHRoZSBmbGFnXG4tICogQGNvdW50OiB3aGV0aGVyIHRvIGluY3JlYXNlIHRoZSBUVCBzaXplIGJ5IHRoZSBudW1iZXIgb2YgY2hhbmdlZCBlbnRyaWVzXG4gICovXG4tc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1MTYgZmxhZ3MsXG4tXHRcdFx0XHQgICAgICBib29sIGVuYWJsZSwgYm9vbCBjb3VudClcbitzdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfdHJhbnNpdGlvbl9uZXcoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbiB7XG4rXHRzcGlubG9ja190ICpsaXN0X2xvY2s7IC8qIHByb3RlY3RzIHdyaXRlIGFjY2VzcyB0byB0aGUgaGFzaCBsaXN0cyAqL1xuIFx0c3RydWN0IGJhdGFkdl9oYXNodGFibGUgKmhhc2ggPSBiYXRfcHJpdi1cdTAwM2V0dC5sb2NhbF9oYXNoO1xuIFx0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeTtcbiBcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkO1xuQEAgLTM4MDIsMjcgKzM5NjUsMjggQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1MTYgZmxhZ3MsXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBoYXNoLVx1MDAzZXNpemU7IGkrKykge1xuIFx0XHRoZWFkID0gXHUwMDI2aGFzaC1cdTAwM2V0YWJsZVtpXTtcbitcdFx0bGlzdF9sb2NrID0gXHUwMDI2aGFzaC1cdTAwM2VsaXN0X2xvY2tzW2ldO1xuIFxuLVx0XHRyY3VfcmVhZF9sb2NrKCk7XG4tXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh0dF9jb21tb25fZW50cnksXG4tXHRcdFx0XHRcdCBoZWFkLCBoYXNoX2VudHJ5KSB7XG4tXHRcdFx0aWYgKGVuYWJsZSkge1xuLVx0XHRcdFx0aWYgKCh0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3MgXHUwMDI2IGZsYWdzKSA9PSBmbGFncylcbi1cdFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0XHR0dF9jb21tb25fZW50cnktXHUwMDNlZmxhZ3MgfD0gZmxhZ3M7XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdGlmICghKHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjYgZmxhZ3MpKVxuLVx0XHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRcdHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjY9IH5mbGFncztcbitcdFx0c3Bpbl9sb2NrX2JoKGxpc3RfbG9jayk7XG4rXHRcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHR0X2NvbW1vbl9lbnRyeSwgaGVhZCwgaGFzaF9lbnRyeSkge1xuK1x0XHRcdGJvb2wgY29udCA9IGZhbHNlO1xuK1xuK1x0XHRcdHNjb3BlZF9ndWFyZChzcGlubG9ja19iaCwgXHUwMDI2dHRfY29tbW9uX2VudHJ5LVx1MDAzZWZsYWdzX2xvY2spIHtcbitcdFx0XHRcdGlmICghKHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ORVcpKSB7XG4rXHRcdFx0XHRcdGNvbnQgPSB0cnVlO1xuK1x0XHRcdFx0XHRicmVhaztcbitcdFx0XHRcdH1cbitcbitcdFx0XHRcdHR0X2NvbW1vbl9lbnRyeS1cdTAwM2VmbGFncyBcdTAwMjY9IH5CQVRBRFZfVFRfQ0xJRU5UX05FVztcbiBcdFx0XHR9XG4gXG4tXHRcdFx0aWYgKCFjb3VudClcbitcdFx0XHRpZiAoY29udClcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRcdGJhdGFkdl90dF9sb2NhbF9zaXplX2luYyhiYXRfcHJpdixcbiBcdFx0XHRcdFx0XHQgdHRfY29tbW9uX2VudHJ5LVx1MDAzZXZpZCk7XG4gXHRcdH1cbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKGxpc3RfbG9jayk7XG4gXHR9XG4gfVxuIFxuQEAgLTM4NTQsMTYgKzQwMTgsMzEgQEAgc3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3B1cmdlX3BlbmRpbmdfY2xpZW50cyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxuIFx0XHRzcGluX2xvY2tfYmgobGlzdF9sb2NrKTtcbiBcdFx0aGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0dF9jb21tb24sIG5vZGVfdG1wLCBoZWFkLFxuIFx0XHRcdFx0XHQgIGhhc2hfZW50cnkpIHtcbi1cdFx0XHRpZiAoISh0dF9jb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykpXG4tXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHRib29sIGNvbnQgPSBmYWxzZTtcbiBcbi1cdFx0XHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfVFQsIGJhdF9wcml2LFxuLVx0XHRcdFx0ICAgXCJEZWxldGluZyBsb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKTogcGVuZGluZ1xcblwiLFxuLVx0XHRcdFx0ICAgdHRfY29tbW9uLVx1MDAzZWFkZHIsXG4tXHRcdFx0XHQgICBiYXRhZHZfcHJpbnRfdmlkKHR0X2NvbW1vbi1cdTAwM2V2aWQpKTtcbitcdFx0XHRzY29wZWRfZ3VhcmQoc3BpbmxvY2tfYmgsIFx1MDAyNnR0X2NvbW1vbi1cdTAwM2VmbGFnc19sb2NrKSB7XG4rXHRcdFx0XHRpZiAoISh0dF9jb21tb24tXHUwMDNlZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUEVORElORykpIHtcbitcdFx0XHRcdFx0Y29udCA9IHRydWU7XG4rXHRcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdFx0fVxuK1xuK1x0XHRcdFx0YmF0YWR2X2RiZyhCQVRBRFZfREJHX1RULCBiYXRfcHJpdixcbitcdFx0XHRcdFx0ICAgXCJEZWxldGluZyBsb2NhbCB0dCBlbnRyeSAoJXBNLCB2aWQ6ICVkKTogcGVuZGluZ1xcblwiLFxuK1x0XHRcdFx0XHQgICB0dF9jb21tb24tXHUwMDNlYWRkcixcbitcdFx0XHRcdFx0ICAgYmF0YWR2X3ByaW50X3ZpZCh0dF9jb21tb24tXHUwMDNldmlkKSk7XG4rXG4rXHRcdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNnR0X2NvbW1vbi1cdTAwM2VoYXNoX2VudHJ5KTtcbitcbitcdFx0XHRcdC8qIEFuIGVudHJ5IHdoaWNoIHN0aWxsIGNhcnJpZXMgQkFUQURWX1RUX0NMSUVOVF9ORVcgd2FzXG4rXHRcdFx0XHQgKiBuZXZlciBjb3VudGVkIGFuZCBtdXN0IG5vdCBiZSB1bmNvdW50ZWQgaGVyZS5cbitcdFx0XHRcdCAqL1xuK1x0XHRcdFx0aWYgKCEodHRfY29tbW9uLVx1MDAzZWZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX05FVykpXG4rXHRcdFx0XHRcdGJhdGFkdl90dF9sb2NhbF9zaXplX2RlYyhiYXRfcHJpdiwgdHRfY29tbW9uLVx1MDAzZXZpZCk7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGlmIChjb250KVxuK1x0XHRcdFx0Y29udGludWU7XG4gXG4tXHRcdFx0YmF0YWR2X3R0X2xvY2FsX3NpemVfZGVjKGJhdF9wcml2LCB0dF9jb21tb24tXHUwMDNldmlkKTtcbi1cdFx0XHRobGlzdF9kZWxfcmN1KFx1MDAyNnR0X2NvbW1vbi1cdTAwM2VoYXNoX2VudHJ5KTtcbiBcdFx0XHR0dF9sb2NhbCA9IGNvbnRhaW5lcl9vZih0dF9jb21tb24sXG4gXHRcdFx0XHRcdFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSxcbiBcdFx0XHRcdFx0XHRjb21tb24pO1xuQEAgLTM4OTEsNyArNDA3MCw3IEBAIHN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9jb21taXRfY2hhbmdlc19ub2xvY2soc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0YmF0YWR2X3R0X2xvY2FsX3NldF9mbGFncyhiYXRfcHJpdiwgQkFUQURWX1RUX0NMSUVOVF9ORVcsIGZhbHNlLCB0cnVlKTtcbitcdGJhdGFkdl90dF9sb2NhbF90cmFuc2l0aW9uX25ldyhiYXRfcHJpdik7XG4gXG4gXHRiYXRhZHZfdHRfbG9jYWxfcHVyZ2VfcGVuZGluZ19jbGllbnRzKGJhdF9wcml2KTtcbiBcdGJhdGFkdl90dF9sb2NhbF91cGRhdGVfY3JjKGJhdF9wcml2KTtcbkBAIC00MDYxLDE1ICs0MjQwLDE2IEBAIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9jbGllbnRfaXNfcm9hbWluZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxuIFx0XHRcdFx0XHR1OCAqYWRkciwgdW5zaWduZWQgc2hvcnQgdmlkKVxuIHtcbiBcdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7XG4tXHRib29sIHJldCA9IGZhbHNlO1xuK1x0Ym9vbCByZXQ7XG4gXG4gXHR0dF9nbG9iYWxfZW50cnkgPSBiYXRhZHZfdHRfZ2xvYmFsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcbiBcdGlmICghdHRfZ2xvYmFsX2VudHJ5KVxuLVx0XHRnb3RvIG91dDtcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0ID0gYmF0YWR2X3R0X2ZsYWdzX2dldChcdTAwMjZ0dF9nbG9iYWxfZW50cnktXHUwMDNlY29tbW9uKSBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFxuLVx0cmV0ID0gdHRfZ2xvYmFsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFx0YmF0YWR2X3R0X2dsb2JhbF9lbnRyeV9wdXQodHRfZ2xvYmFsX2VudHJ5KTtcbi1vdXQ6XG4rXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC00MDg3LDE1ICs0MjY3LDE2IEBAIGJvb2wgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRcdFx0XHQgICAgICAgdTggKmFkZHIsIHVuc2lnbmVkIHNob3J0IHZpZClcbiB7XG4gXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcbi1cdGJvb2wgcmV0ID0gZmFsc2U7XG4rXHRib29sIHJldDtcbiBcbiBcdHR0X2xvY2FsX2VudHJ5ID0gYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChiYXRfcHJpdiwgYWRkciwgdmlkKTtcbiBcdGlmICghdHRfbG9jYWxfZW50cnkpXG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRyZXQgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbikgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfUk9BTTtcbiBcbi1cdHJldCA9IHR0X2xvY2FsX2VudHJ5LVx1MDAzZWNvbW1vbi5mbGFncyBcdTAwMjYgQkFUQURWX1RUX0NMSUVOVF9ST0FNO1xuIFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbF9lbnRyeSk7XG4tb3V0OlxuK1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNDQwNCw3ICs0NTg1LDcgQEAgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2lzX2lzb2xhdGVkKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXG4gXHRpZiAoIXR0KVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXQgPSB0dC1cdTAwM2Vjb21tb24uZmxhZ3MgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEE7XG4rXHRyZXQgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KFx1MDAyNnR0LVx1MDAzZWNvbW1vbikgXHUwMDI2IEJBVEFEVl9UVF9DTElFTlRfSVNPTEE7XG4gXG4gXHRiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5X3B1dCh0dCk7XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2JhdG1hbi1hZHYvdHlwZXMuaCBiL25ldC9iYXRtYW4tYWR2L3R5cGVzLmhcbmluZGV4IDliZGM1YTNlNzk5ZTIuLjY3ODcyOTI3Y2ZiNTAgMTAwNjQ0XG4tLS0gYS9uZXQvYmF0bWFuLWFkdi90eXBlcy5oXG4rKysgYi9uZXQvYmF0bWFuLWFkdi90eXBlcy5oXG5AQCAtNDEwLDcgKzQxMCw3IEBAIHN0cnVjdCBiYXRhZHZfb3JpZ19iYXRfaXYge1xuICAqL1xuIHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlIHtcbiBcdC8qKiBAb3JpZzogb3JpZ2luYXRvciBldGhlcm5ldCBhZGRyZXNzICovXG4tXHR1OCBvcmlnW0VUSF9BTEVOXTtcbitcdHU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAaWZpbmZvX2xpc3Q6IGxpc3QgZm9yIHJvdXRlcnMgcGVyIG91dGdvaW5nIGludGVyZmFjZSAqL1xuIFx0c3RydWN0IGhsaXN0X2hlYWQgaWZpbmZvX2xpc3Q7XG5AQCAtNjM0LDEyICs2MzQsMTIgQEAgc3RydWN0IGJhdGFkdl9oYXJkaWZfbmVpZ2hfbm9kZSB7XG4gXHRzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0O1xuIFxuIFx0LyoqIEBhZGRyOiB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIG5laWdoYm9yaW5nIGludGVyZmFjZSAqL1xuLVx0dTggYWRkcltFVEhfQUxFTl07XG4rXHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKipcbiBcdCAqIEBvcmlnOiB0aGUgYWRkcmVzcyBvZiB0aGUgb3JpZ2luYXRvciB0aGlzIG5laWdoYm9yIG5vZGUgYmVsb25ncyB0b1xuIFx0ICovXG4tXHR1OCBvcmlnW0VUSF9BTEVOXTtcbitcdHU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAaWZfaW5jb21pbmc6IHBvaW50ZXIgdG8gaW5jb21pbmcgaGFyZC1pbnRlcmZhY2UgKi9cbiBcdHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfaW5jb21pbmc7XG5AQCAtNjc3LDcgKzY3Nyw3IEBAIHN0cnVjdCBiYXRhZHZfbmVpZ2hfbm9kZSB7XG4gI2VuZGlmXG4gXG4gXHQvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgbmVpZ2hib3JpbmcgaW50ZXJmYWNlICovXG4tXHR1OCBhZGRyW0VUSF9BTEVOXTtcbitcdHU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAaWZpbmZvX2xpc3Q6IGxpc3QgZm9yIHJvdXRpbmcgbWV0cmljcyBwZXIgb3V0Z29pbmcgaW50ZXJmYWNlICovXG4gXHRzdHJ1Y3QgaGxpc3RfaGVhZCBpZmluZm9fbGlzdDtcbkBAIC03NzcsNyArNzc3LDcgQEAgc3RydWN0IGJhdGFkdl9uZWlnaF9pZmluZm8ge1xuICAqL1xuIHN0cnVjdCBiYXRhZHZfYmNhc3RfZHVwbGlzdF9lbnRyeSB7XG4gXHQvKiogQG9yaWc6IG1hYyBhZGRyZXNzIG9mIG9yaWcgbm9kZSBvcmlnaW5hdGluZyB0aGUgYnJvYWRjYXN0ICovXG4tXHR1OCBvcmlnW0VUSF9BTEVOXTtcbitcdHU4IG9yaWdbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAY3JjOiBjcmMzMiBjaGVja3N1bSBvZiBicm9hZGNhc3QgcGF5bG9hZCAqL1xuIFx0dTMyIGNyYztcbkBAIC0xMDg1LDcgKzEwODUsNyBAQCBzdHJ1Y3QgYmF0YWR2X3ByaXZfYmxhIHtcbiBcdHN0cnVjdCBiYXRhZHZfaGFzaHRhYmxlICpiYWNrYm9uZV9oYXNoO1xuIFxuIFx0LyoqIEBsb29wZGV0ZWN0X2FkZHI6IE1BQyBhZGRyZXNzIHVzZWQgZm9yIG93biBsb29wZGV0ZWN0aW9uIGZyYW1lcyAqL1xuLVx0dTggbG9vcGRldGVjdF9hZGRyW0VUSF9BTEVOXTtcbitcdHU4IGxvb3BkZXRlY3RfYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqXG4gXHQgKiBAbG9vcGRldGVjdF9sYXN0dGltZTogdGltZSB3aGVuIHRoZSBsb29wZGV0ZWN0aW9uIGZyYW1lcyB3ZXJlIHNlbnRcbkBAIC0xMzUyLDcgKzEzNTIsNyBAQCBzdHJ1Y3QgYmF0YWR2X3RwX3ZhcnNfY29tbW9uIHtcbiBcdHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXY7XG4gXG4gXHQvKiogQG90aGVyX2VuZDogbWFjIGFkZHJlc3Mgb2YgcmVtb3RlICovXG4tXHR1OCBvdGhlcl9lbmRbRVRIX0FMRU5dO1xuK1x0dTggb3RoZXJfZW5kW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKiogQHNlc3Npb246IFRQIHNlc3Npb24gaWRlbnRpZmllciAqL1xuIFx0dTggc2Vzc2lvblsyXTtcbkBAIC0xNzY1LDcgKzE3NjUsNyBAQCBzdHJ1Y3QgYmF0YWR2X2JsYV9iYWNrYm9uZV9ndyB7XG4gXHQgKiBAb3JpZzogb3JpZ2luYXRvciBhZGRyZXNzIG9mIGJhY2tib25lIG5vZGUgKG1hYyBhZGRyZXNzIG9mIHByaW1hcnlcbiBcdCAqICBpZmFjZSlcbiBcdCAqL1xuLVx0dTggb3JpZ1tFVEhfQUxFTl07XG4rXHR1OCBvcmlnW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XG4gXG4gXHQvKiogQHZpZDogdmxhbiBpZCB0aGlzIGdhdGV3YXkgd2FzIGRldGVjdGVkIG9uICovXG4gXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XG5AQCAtMTgxMCw3ICsxODEwLDcgQEAgc3RydWN0IGJhdGFkdl9ibGFfYmFja2JvbmVfZ3cge1xuICAqL1xuIHN0cnVjdCBiYXRhZHZfYmxhX2NsYWltIHtcbiBcdC8qKiBAYWRkcjogbWFjIGFkZHJlc3Mgb2YgY2xhaW1lZCBub24tbWVzaCBjbGllbnQgKi9cbi1cdHU4IGFkZHJbRVRIX0FMRU5dO1xuK1x0dTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xuIFxuIFx0LyoqIEB2aWQ6IHZsYW4gaWQgdGhpcyBjbGllbnQgd2FzIGRldGVjdGVkIG9uICovXG4gXHR1bnNpZ25lZCBzaG9ydCB2aWQ7XG5AQCAtMTg0MCw3ICsxODQwLDcgQEAgc3RydWN0IGJhdGFkdl9ibGFfY2xhaW0ge1xuICAqL1xuIHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5IHtcbiBcdC8qKiBAYWRkcjogbWFjIGFkZHJlc3Mgb2Ygbm9uLW1lc2ggY2xpZW50ICovXG4tXHR1OCBhZGRyW0VUSF9BTEVOXTtcbitcdHU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAdmlkOiBWTEFOIGlkZW50aWZpZXIgKi9cbiBcdHVuc2lnbmVkIHNob3J0IHZpZDtcbkBAIC0xODUxLDEyICsxODUxLDIxIEBAIHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5IHtcbiBcdCAqL1xuIFx0c3RydWN0IGhsaXN0X25vZGUgaGFzaF9lbnRyeTtcbiBcbi1cdC8qKiBAZmxhZ3M6IHZhcmlvdXMgc3RhdGUgaGFuZGxpbmcgZmxhZ3MgKHNlZSBiYXRhZHZfdHRfY2xpZW50X2ZsYWdzKSAqL1xuK1x0LyoqXG4rXHQgKiBAZmxhZ3M6IHZhcmlvdXMgc3RhdGUgaGFuZGxpbmcgZmxhZ3MgKHNlZSBiYXRhZHZfdHRfY2xpZW50X2ZsYWdzKSxcbitcdCAqIHByb3RlY3RlZCBieSBAZmxhZ3NfbG9ja1xuK1x0ICovXG4gXHR1MTYgZmxhZ3M7XG4gXG4gXHQvKiogQGFkZGVkX2F0OiB0aW1lc3RhbXAgdXNlZCBmb3IgcHVyZ2luZyBzdGFsZSB0dCBjb21tb24gZW50cmllcyAqL1xuIFx0dW5zaWduZWQgbG9uZyBhZGRlZF9hdDtcbiBcbitcdC8qKlxuK1x0ICogQGZsYWdzX2xvY2s6IHByb3RlY3QgbW9kaWZpY2F0aW9ucyBvZiBAZmxhZ3MgYW5kXG4rXHQgKiAgQGJhdGFkdl90dF9nbG9iYWxfZW50cnkucm9hbV9hdFxuK1x0ICovXG4rXHRzcGlubG9ja190IGZsYWdzX2xvY2s7XG4rXG4gXHQvKiogQHJlZmNvdW50OiBudW1iZXIgb2YgY29udGV4dHMgdGhlIG9iamVjdCBpcyB1c2VkICovXG4gXHRzdHJ1Y3Qga3JlZiByZWZjb3VudDtcbiBcbkBAIC0xOTQyLDcgKzE5NTEsNyBAQCBzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlIHtcbiBcdC8qKlxuIFx0ICogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hdG9yIHRoaXMgcmVxdWVzdCB3YXMgc2VudCB0b1xuIFx0ICovXG4tXHR1OCBhZGRyW0VUSF9BTEVOXTtcbitcdHU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAaXNzdWVkX2F0OiB0aW1lc3RhbXAgdXNlZCBmb3IgcHVyZ2luZyBzdGFsZSB0dCByZXF1ZXN0cyAqL1xuIFx0dW5zaWduZWQgbG9uZyBpc3N1ZWRfYXQ7XG5AQCAtMTk1OSw3ICsxOTY4LDcgQEAgc3RydWN0IGJhdGFkdl90dF9yZXFfbm9kZSB7XG4gICovXG4gc3RydWN0IGJhdGFkdl90dF9yb2FtX25vZGUge1xuIFx0LyoqIEBhZGRyOiBtYWMgYWRkcmVzcyBvZiB0aGUgY2xpZW50IGluIHRoZSByb2FtaW5nIHBoYXNlICovXG4tXHR1OCBhZGRyW0VUSF9BTEVOXTtcbitcdHU4IGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiBcbiBcdC8qKiBAdmlkOiBWTEFOIGlkZW50aWZpZXIgKi9cbiBcdHUxNiB2aWQ7XG5AQCAtMjA4NywxNCArMjA5NiwxNCBAQCBzdHJ1Y3QgYmF0YWR2X2FsZ29fbmVpZ2hfb3BzIHtcbiBcdFx0ICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzIpO1xuIFxuIFx0LyoqXG4tXHQgKiBAaXNfc2ltaWxhcl9vcl9iZXR0ZXI6IGNoZWNrIGlmIG5laWdoMSBpcyBlcXVhbGx5IHNpbWlsYXIgb3IgYmV0dGVyXG4tXHQgKiAgdGhhbiBuZWlnaDIgZm9yIHRoZWlyIHJlc3BlY3RpdmUgb3V0Z29pbmcgaW50ZXJmYWNlIGZyb20gdGhlIG1ldHJpY1xuK1x0ICogQGlzX3NpbWlsYXJfb3JfYmV0dGVyOiBjaGVjayBpZiBAY2FuZGlkYXRlIGlzIGVxdWFsbHkgc2ltaWxhciBvciBiZXR0ZXJcbitcdCAqICB0aGFuIEByZWZlcmVuY2UgZm9yIHRoZWlyIHJlc3BlY3RpdmUgb3V0Z29pbmcgaW50ZXJmYWNlIGZyb20gdGhlIG1ldHJpY1xuIFx0ICogIHByb3NwZWN0aXZlXG4gXHQgKi9cbi1cdGJvb2wgKCppc19zaW1pbGFyX29yX2JldHRlcikoc3RydWN0IGJhdGFkdl9uZWlnaF9ub2RlICpuZWlnaDEsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBiYXRhZHZfaGFyZF9pZmFjZSAqaWZfb3V0Z29pbmcxLFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKm5laWdoMixcbi1cdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZzIpO1xuK1x0Ym9vbCAoKmlzX3NpbWlsYXJfb3JfYmV0dGVyKShzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKmNhbmRpZGF0ZSxcbitcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19jYW5kLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgYmF0YWR2X25laWdoX25vZGUgKnJlZmVyZW5jZSxcbitcdFx0XHRcdCAgICAgc3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICppZl9vdXRnb2luZ19yZWYpO1xuIFxuIFx0LyoqIEBkdW1wOiBkdW1wIG5laWdoYm9ycyB0byBhIG5ldGxpbmsgc29ja2V0IChvcHRpb25hbCkgKi9cbiBcdHZvaWQgKCpkdW1wKShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXG5AQCAtMjIwNCw3ICsyMjEzLDcgQEAgc3RydWN0IGJhdGFkdl9od19hZGRyIHtcbiBcdHN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7XG4gXG4gXHQvKiogQGFkZHI6IHRoZSBNQUMgYWRkcmVzcyBvZiB0aGlzIGxpc3QgZW50cnkgKi9cbi1cdHVuc2lnbmVkIGNoYXIgYWRkcltFVEhfQUxFTl07XG4rXHR1bnNpZ25lZCBjaGFyIGFkZHJbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcbiB9O1xuIFxuIC8qKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzI6NDEuMzk2NDEwOTI4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2MDY2NTk5Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEZ1enppbmcgU2Vzc2lvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgd2FycmFudHMgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGVyZSBhcmUgYW55IHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgZWl0aGVyIGludHJvZHVjZWQgb3IgZXhwb3NlZCBieSB0aGUgY2hhbmdlcy4gTGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG5GaXJzdCwgSSBzZWUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMgaW1wYWN0ZWQsIGFuZCBpdCBsb29rcyBsaWtlIGEgY29tYmluYXRpb24gb2YgcGFyYW1ldGVyIHJlbmFtZXMsIG1pbm9yIGxvZ2ljIGZpeGVzLCBhbmQgc29tZSBkYXRhIHN0cnVjdHVyZSBtb2RpZmljYXRpb25zLiBUaGUgYWxpZ25tZW50IGNoYW5nZXMgdXNpbmcgYF9fYWxpZ25lZCgyKWAgaW1tZWRpYXRlbHkgY2F0Y2ggbXkgZXllLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIEV0aGVybmV0IGFkZHJlc3Nlcy4gSSBrbm93IHRob3NlIGFsaWdubWVudCBwcmFnbWFzIGFyZSBpbXBvcnRhbnQgdG8gY29uc2lkZXIuXG5cblNwZWNpZmljYWxseSwgdGhlIGFsaWdubWVudCBjaGFuZ2VzIGFyZSBhZGRlZCB0byBzZXZlcmFsIHN0cnVjdHVyZXMgaW4gYHR5cGVzLmhgIGFuZCBzb21lIGxvY2FsIGFycmF5cy4gSSBuZWVkIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZXNlIGFsaWdubWVudCBjaGFuZ2VzIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgYWZmZWN0ZWQgc3RydWN0dXJlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGRvZXNuJ3QgaW50cm9kdWNlIHBhZGRpbmcgaXNzdWVzIG9yIHVuZXhwZWN0ZWQgc3RydWN0IGxheW91dCBjaGFuZ2VzIHRoYXQgY291bGQgbGVhZCB0byByZWFkLWJlZm9yZS13cml0ZSBpc3N1ZXMuIEZvciBleGFtcGxlOlxuXG4qICAgSSBzZWUgYSBidW5jaCBvZiBgdTggYWRkcltFVEhfQUxFTl0gX19hbGlnbmVkKDIpYCBpbiBgdHlwZXMuaGAuIGBFVEhfQUxFTmAgaXMgNiBieXRlcy4gNiBieXRlcyBhbGlnbmVkIHRvIDIgYnl0ZXMgaXMgcGVyZmVjdGx5IHZhbGlkLCBzbyB0aGF0J3Mgbm90IGF1dG9tYXRpY2FsbHkgYSBwcm9ibGVtLiBCdXQgSSBuZWVkIHRvIGxvb2sgYXQgKmhvdyogdGhlc2UgZmllbGRzIGFyZSB1c2VkLCB3aGVyZSB0aGV5IGFyZSBhbGxvY2F0ZWQsIGFuZCBpZiB0aGUgYWxpZ25tZW50IGNoYW5nZXMgY291bGQgaW50ZXJhY3Qgd2l0aCB0aGUgY29tcGlsZXIncyBzdHJ1Y3R1cmUgbGF5b3V0IGRlY2lzaW9ucy5cbiogICBJIHNlZSBhIG5ldyBzcGlubG9jaywgYGZsYWdzX2xvY2tgLCBiZWluZyBhZGRlZCB0byBgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnlgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIGFuZCBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgaXQncyBpbml0aWFsaXplZCBhbmQgaG93IGl0J3MgdXNlZC4gQXJlIHRoZXJlIHJhY2UgY29uZGl0aW9ucyBiZWluZyBhZGRyZXNzZWQgaGVyZSwgYW5kIGlmIHNvLCBob3c/IExldCdzIGNoZWNrIHdoZXJlIHRoZSBzcGlubG9jayBpcyBpbml0aWFsaXplZC4gSSBzZWUgYHNwaW5fbG9ja19pbml0KClgIGNhbGxzIGluIGBiYXRhZHZfdHRfbG9jYWxfYWRkKClgIGFuZCBgYmF0YWR2X3R0X2dsb2JhbF9hZGQoKWAuIFRoYXQgbG9va3Mgc3RhbmRhcmQuIEFyZSB0aGVyZSBvdGhlciBwbGFjZXMgd2hlcmUgYGJhdGFkdl90dF9jb21tb25fZW50cnlgIGlzIGluaXRpYWxpemVkIG9yIGFsbG9jYXRlZD8gSSdsbCBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGBiYXRhZHZfdGdfY2FjaGVgIGFuZCBgYmF0YWR2X3RsX2NhY2hlYCBvciBgdHRfY29tbW9uYC4gVGhpcyBpcyB0aGUgbW9zdCBsaWtlbHkgbG9jYXRpb24gZm9yIGEgcHJvYmxlbS5cblxuVGhlIHRyYW5zbGF0aW9uIHRhYmxlIGNoYW5nZXMgd2l0aCB0aGUgc3BpbmxvY2tzIGlzIHRoZSBtb3N0IGludGVyZXN0aW5nIHBhcnQgb2YgdGhpcyBwYXRjaCBzZXJpZXMgZnJvbSBhIEtNU0FOIHBlcnNwZWN0aXZlLiBSYWNlIGNvbmRpdGlvbnMgaW4gdGhlIHJvYW1pbmcgYW5kIHB1cmdpbmcgbG9naWMgYXJlIGxpa2VseSB0YXJnZXRzIGZvciB0aGlzIHR5cGUgb2YgY2hlY2suIFRoZSBgYmF0YWR2X2NvbXBhcmVfdHRfZW50cnlgIGFuZCB0aGUgcmVmYWN0b3Jpbmcgb2YgZHVtcGluZyBmdW5jdGlvbnMgdG8gc25hcHNob3QgdGhlIGZsYWdzIHdpdGggYGJhdGFkdl90dF9mbGFnc19nZXQoY29tbW9uKWAgbWlnaHQgYmUgaGVscGZ1bC4gQnV0IEkgbmVlZCB0byBiZSBzdXJlIHRoZSBsb2NrIGlzIGJlaW5nIGhlbGQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYWNjZXNzZXMuIFRoaXMgaXMgd2hlcmUgSSdsbCBuZWVkIHRvIGZvY3VzIG15IGF0dGVudGlvbi4gSXQgbG9va3MgbGlrZSBpdCBhZGRyZXNzZXMgcmFjZSBjb25kaXRpb25zIHNvIGl0IG1pZ2h0IGJlIHdvcnRod2hpbGUuXG5cbk15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBhbGlnbm1lbnQgY2hhbmdlcyBhcmUgdW5saWtlbHkgdG8gYmUgYSAqZGlyZWN0KiBzb3VyY2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcHJvYmxlbXMsIGJ1dCB0aGV5IGNvdWxkIGluZGlyZWN0bHkgZXhwb3NlIGV4aXN0aW5nIGlzc3Vlcy4gVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYXJlYSBvZiBjb25jZXJuIGlzIHRoZSBzcGlubG9jayBpbnRyb2R1Y3Rpb24gYW5kIHRoZSByZWZhY3RvcmluZyBhcm91bmQgdGhlIHRyYW5zbGF0aW9uIHRhYmxlLCBhbmQgSSB3aWxsIGZvY3VzIG9uIHRoYXQgYXJlYS4gSSBtaWdodCBuZWVkIGEgZGVkaWNhdGVkIHNlc3Npb24gdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2MjAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzI6NTcuNDYzMDE2NDUxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjM2NDA0Njg3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImttZW1fY2FjaGVfYWxsb2MuKmJhdGFkdl90W2dsXV9jYWNoZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTcwOT1ib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03ODgtXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo3ODk6XFx0dHRfbG9jYWwgPSBrbWVtX2NhY2hlX2FsbG9jKGJhdGFkdl90bF9jYWNoZSwgR0ZQX0FUT01JQyk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03OTAtXFx0aWYgKCF0dF9sb2NhbClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzM6MDAuMDk5NDMyNjA5WiIsIlNlcSI6MTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjExNTQ0OTI3NDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIENhY2hlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBvcHRpbWl6aW5nIHRoaXMgcGFydGljdWxhciBhc3BlY3QuIFdlJ3ZlIGdvdCBvdXIgdXN1YWwgc3VzcGVjdHMsIGJ1dCBJJ20gZmVlbGluZyB0aGF0IG5hZ2dpbmcgc2Vuc2UgdGhhdCB3ZSBtaWdodCBiZSBtaXNzaW5nIGEgY3JpdGljYWwgcGllY2Ugb2YgdGhlIHB1enpsZS4gV2UgY2FuJ3QganVzdCBzdG9wIGF0IHRoZSBvYnZpb3VzIGVudHJ5IHBvaW50cy4gVG8gdHJ1bHkgZ2V0IGEgY29tcHJlaGVuc2l2ZSB1bmRlcnN0YW5kaW5nIGFuZCBwb3RlbnRpYWwgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIEkgcmVhbGx5IG5lZWQgdG8gY2hlY2sgYGJhdGFkdl90Z19jYWNoZWAgYXMgd2VsbC4gSXQncyB0b28gaW1wb3J0YW50IHRvIHNraXAsIGFuZCBpdCBjb3VsZCBob2xkIHRoZSBrZXkgdG8gYSBtYWpvciBicmVha3Rocm91Z2ggaW4gb3B0aW1pemluZyB0aGlzIGFyZWEuIEl0J3MgYSBrZXkgcGllY2UgYW5kIEknZCBiZSByZW1pc3MgaWYgSSBkaWRuJ3QgdmVyaWZ5IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDc1NiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjMzOjExLjY0NDM2NDIxNVoiLCJTZXEiOjIwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzM5NTkzMjY1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJiYXRhZHZfdGdfY2FjaGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz01Nz1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmJhdGFkdl90bF9jYWNoZSBfX3JlYWRfbW9zdGx5O1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NTg6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpiYXRhZHZfdGdfY2FjaGUgX19yZWFkX21vc3RseTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTU5LXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYmF0YWR2X3R0X29yaWdfY2FjaGUgX19yZWFkX21vc3RseTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTc3Mj1zdGF0aWMgYm9vbCBiYXRhZHZfdHRfZ2xvYmFsX2FkZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xODAzLVxcdGlmICghdHRfZ2xvYmFsX2VudHJ5KSB7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxODA0OlxcdFxcdHR0X2dsb2JhbF9lbnRyeSA9IGttZW1fY2FjaGVfemFsbG9jKGJhdGFkdl90Z19jYWNoZSxcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE4MDUtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIEdGUF9BVE9NSUMpO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz00NjAwPWludCBfX2luaXQgYmF0YWR2X3R0X2NhY2hlX2luaXQodm9pZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDYxMy1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ2MTQ6XFx0YmF0YWR2X3RnX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoXFxcImJhdGFkdl90Z19jYWNoZVxcXCIsIHRnX3NpemUsIDAsXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjE1LVxcdFxcdFxcdFxcdFxcdCAgICBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDYxNjpcXHRpZiAoIWJhdGFkdl90Z19jYWNoZSlcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQ2MTctXFx0XFx0Z290byBlcnJfdHRfdGxfZGVzdHJveTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDY1NC1lcnJfdHRfdGdfZGVzdHJveTpcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ2NTU6XFx0a21lbV9jYWNoZV9kZXN0cm95KGJhdGFkdl90Z19jYWNoZSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0NjU2OlxcdGJhdGFkdl90Z19jYWNoZSA9IE5VTEw7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjU3LWVycl90dF90bF9kZXN0cm95Olxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz00NjY3PXZvaWQgYmF0YWR2X3R0X2NhY2hlX2Rlc3Ryb3kodm9pZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDY2OS1cXHRrbWVtX2NhY2hlX2Rlc3Ryb3koYmF0YWR2X3RsX2NhY2hlKTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ2NzA6XFx0a21lbV9jYWNoZV9kZXN0cm95KGJhdGFkdl90Z19jYWNoZSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjcxLVxcdGttZW1fY2FjaGVfZGVzdHJveShiYXRhZHZfdHRfb3JpZ19jYWNoZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjMzOjE1LjA0MDMwNjgyMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMzgyMDAyNDc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzLCB0YXJnZXRpbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBiYXRhZHZfdHRfbG9jYWxfYWRkKClgKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEJBVE1BTiBBZHZhbmNlZCBoYW5kbGVzIGxvY2FsIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJpZXMuIExldCdzIHN0YXJ0IHdpdGggYGJhdGFkdl90dF9sb2NhbF9hZGQoKWAgYXJvdW5kIGxpbmUgNzg5IGluIGB0cmFuc2xhdGlvbi10YWJsZS5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29yZSBsb2dpYyBmb3IgYWRkaW5nIG5ldyBsb2NhbCBlbnRyaWVzIHRoZXJlLCBwcm9iYWJseSBpbnZvbHZpbmcgaGFzaCB0YWJsZSBsb29rdXBzIG9yIGluc2VydGlvbnMsIG1heWJlIHNvbWUgYWdpbmcgY29uc2lkZXJhdGlvbnMuIEhvcGVmdWxseSwgdGhlcmUncyBhIHF1aWNrIGFuZCBkaXJ0eSB3YXkgdG8gaWRlbnRpZnkgdGhlIGV4YWN0IGRhdGEgc3RydWN0dXJlcyBhbmQgbG9ja2luZyBwcmltaXRpdmVzIHVzZWQuIExldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCEgSSdtIGN1cmlvdXMgaWYgdGhleSB1c2VkIGFuIFJDVSB0byBvcHRpbWlzZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTY1MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjMzOjM4Ljg2MDMzNTEyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NjAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc4NSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc4NTpcXHRcXHRcXHRcXHRcXHRcXHQgdGFibGVfc2l6ZSwgcGFja2V0X3NpemVfbWF4LCBhZGRyKTtcXG4gNzg2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbiA3ODc6XFx0XFx0fVxcbiA3ODg6XFx0XFxuIDc4OTpcXHRcXHR0dF9sb2NhbCA9IGttZW1fY2FjaGVfYWxsb2MoYmF0YWR2X3RsX2NhY2hlLCBHRlBfQVRPTUlDKTtcXG4gNzkwOlxcdFxcdGlmICghdHRfbG9jYWwpXFxuIDc5MTpcXHRcXHRcXHRnb3RvIG91dDtcXG4gNzkyOlxcdFxcbiA3OTM6XFx0XFx0LyogaW5jcmVhc2UgdGhlIHJlZmNvdW50ZXIgb2YgdGhlIHJlbGF0ZWQgdmxhbiAqL1xcbiA3OTQ6XFx0XFx0dmxhbiA9IGJhdGFkdl9tZXNoaWZfdmxhbl9nZXQoYmF0X3ByaXYsIHZpZCk7XFxuIDc5NTpcXHRcXHRpZiAoIXZsYW4pIHtcXG4gNzk2OlxcdFxcdFxcdG5ldF9yYXRlbGltaXRlZF9mdW5jdGlvbihiYXRhZHZfaW5mbywgbWVzaF9pZmFjZSxcXG4gNzk3OlxcdFxcdFxcdFxcdFxcdFxcdCBcXFwiYWRkaW5nIFRUIGxvY2FsIGVudHJ5ICVwTSB0byBub24tZXhpc3RlbnQgVkxBTiAlZFxcXFxuXFxcIixcXG4gNzk4OlxcdFxcdFxcdFxcdFxcdFxcdCBhZGRyLCBiYXRhZHZfcHJpbnRfdmlkKHZpZCkpO1xcbiA3OTk6XFx0XFx0XFx0a21lbV9jYWNoZV9mcmVlKGJhdGFkdl90bF9jYWNoZSwgdHRfbG9jYWwpO1xcbiA4MDA6XFx0XFx0XFx0dHRfbG9jYWwgPSBOVUxMO1xcbiA4MDE6XFx0XFx0XFx0Z290byBvdXQ7XFxuIDgwMjpcXHRcXHR9XFxuIDgwMzpcXHRcXG4gODA0OlxcdFxcdGJhdGFkdl9kYmcoQkFUQURWX0RCR19UVCwgYmF0X3ByaXYsXFxuIDgwNTpcXHRcXHRcXHQgICBcXFwiQ3JlYXRpbmcgbmV3IGxvY2FsIHR0IGVudHJ5OiAlcE0gKHZpZDogJWQsIHR0dm46ICVkKVxcXFxuXFxcIixcXG4gODA2OlxcdFxcdFxcdCAgIGFkZHIsIGJhdGFkdl9wcmludF92aWQodmlkKSxcXG4gODA3OlxcdFxcdFxcdCAgICh1OClhdG9taWNfcmVhZChcXHUwMDI2YmF0X3ByaXYtXFx1MDAzZXR0LnZuKSk7XFxuIDgwODpcXHRcXG4gODA5OlxcdFxcdGV0aGVyX2FkZHJfY29weSh0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmFkZHIsIGFkZHIpO1xcbiA4MTA6XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi52aWQgPSB2aWQ7XFxuIDgxMTpcXHRcXHRrcmVmX2luaXQoXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24ucmVmY291bnQpO1xcbiA4MTI6XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWxhc3Rfc2VlbiA9IGppZmZpZXM7XFxuIDgxMzpcXHRcXHR0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmFkZGVkX2F0ID0gdHRfbG9jYWwtXFx1MDAzZWxhc3Rfc2VlbjtcXG4gODE0OlxcdFxcdHR0X2xvY2FsLVxcdTAwM2V2bGFuID0gdmxhbjtcXG4gODE1OlxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLmZsYWdzX2xvY2spO1xcbiA4MTY6XFx0XFxuIDgxNzpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24uZmxhZ3NfbG9jayk7XFxuIDgxODpcXHRcXHQvKiBUaGUgbG9jYWwgZW50cnkgaGFzIHRvIGJlIG1hcmtlZCBhcyBORVcgdG8gYXZvaWQgdG8gc2VuZCBpdCBpblxcbiA4MTk6XFx0XFx0ICogYSBmdWxsIHRhYmxlIHJlc3BvbnNlIGdvaW5nIG91dCBiZWZvcmUgdGhlIG5leHQgdHR2biBpbmNyZW1lbnRcXG4gODIwOlxcdFxcdCAqIChjb25zaXN0ZW5jeSBjaGVjaylcXG4gODIxOlxcdFxcdCAqL1xcbiA4MjI6XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyA9IEJBVEFEVl9UVF9DTElFTlRfTkVXO1xcbiA4MjM6XFx0XFx0aWYgKGlpZl9pc193aWZpKVxcbiA4MjQ6XFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX1dJRkk7XFxuIDgyNTpcXHRcXG4gODI2OlxcdFxcdC8qIHRoZSBiYXRtYW4gaW50ZXJmYWNlIG1hYyBhbmQgbXVsdGljYXN0IGFkZHJlc3NlcyBzaG91bGQgbmV2ZXIgYmVcXG4gODI3OlxcdFxcdCAqIHB1cmdlZFxcbiA4Mjg6XFx0XFx0ICovXFxuIDgyOTpcXHRcXHRpZiAoYmF0YWR2X2NvbXBhcmVfZXRoKGFkZHIsIG1lc2hfaWZhY2UtXFx1MDAzZWRldl9hZGRyKSB8fFxcbiA4MzA6XFx0XFx0ICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGFkZHIpKVxcbiA4MzE6XFx0XFx0XFx0dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFncyB8PSBCQVRBRFZfVFRfQ0xJRU5UX05PUFVSR0U7XFxuIDgzMjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5mbGFnc19sb2NrKTtcXG4gODMzOlxcdFxcbiA4MzQ6XFx0XFx0a3JlZl9nZXQoXFx1MDAyNnR0X2xvY2FsLVxcdTAwM2Vjb21tb24ucmVmY291bnQpO1xcbiA4MzU6XFx0XFx0aGFzaF9hZGRlZCA9IGJhdGFkdl9oYXNoX2FkZChiYXRfcHJpdi1cXHUwMDNldHQubG9jYWxfaGFzaCwgYmF0YWR2X2NvbXBhcmVfdHQsXFxuIDgzNjpcXHRcXHRcXHRcXHRcXHQgICAgIGJhdGFkdl9jaG9vc2VfdHQsIFxcdTAwMjZ0dF9sb2NhbC1cXHUwMDNlY29tbW9uLFxcbiA4Mzc6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dHRfbG9jYWwtXFx1MDAzZWNvbW1vbi5oYXNoX2VudHJ5KTtcXG4gODM4OlxcdFxcbiA4Mzk6XFx0XFx0aWYgKHVubGlrZWx5KGhhc2hfYWRkZWQgIT0gMCkpIHtcXG4gODQwOlxcdFxcdFxcdC8qIHJlbW92ZSB0aGUgcmVmZXJlbmNlIGZvciB0aGUgaGFzaCAqL1xcbiA4NDE6XFx0XFx0XFx0YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dCh0dF9sb2NhbCk7XFxuIDg0MjpcXHRcXHRcXHRnb3RvIG91dDtcXG4gODQzOlxcdFxcdH1cXG4gODQ0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozMzozOC44NjA1ODM3NFoiLCJTZXEiOjIzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTYzMDU1NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQmF0YWR2IFRUIExvY2FsIEVudHJ5IFN0cnVjdHVyZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgYGJhdGFkdl90dF9sb2NhbF9lbnRyeWAgYW5kIGBiYXRhZHZfdHRfY29tbW9uX2VudHJ5YCBzdHJ1Y3R1cmVzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkndmUgZ290IGEgY29tcGxldGUgcGljdHVyZSBvZiBpbml0aWFsaXphdGlvbiBpbiB0aGUgbG9jYWwgdGFibGUuIFNvLCBydW5uaW5nIGRvd24gdGhlIGZpZWxkcywgSSBzZWUgYGFkZHJgLCBgdmlkYCwgYHJlZmNvdW50YCwgYGxhc3Rfc2VlbmAsIGBhZGRlZF9hdGAsIGB2bGFuYCwgYGZsYWdzX2xvY2tgLCBhbmQgYGZsYWdzYCBhcmUgYWxsIGhhbmRsZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBUaGUgYGhhc2hfZW50cnlgIGlzIGNsZWFybHkgdGFrZW4gY2FyZSBvZiBlaXRoZXIgYnkgYGJhdGFkdl9oYXNoX2FkZGAgb3IgdGhlIHN0YW5kYXJkIGhsaXN0IGZ1bmN0aW9uYWxpdHksIHdoaWNoIG1ha2VzIHNlbnNlLiBcblxuSSB0aGluayB0aGF0IGNvdmVycyB0aGUgbWFpbiBpbml0aWFsaXphdGlvbiBwb2ludHMsIGJ1dCBJIHdhbnQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLiBUaW1lIHRvIGRvdWJsZS1jaGVjayBhZ2FpbnN0IHRoZSBkZWZpbml0aXZlIHNvdXJjZS4gSSdsbCBvcGVuIHVwIGB0eXBlcy5oYCBhbmQgZ2l2ZSBgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeWAgYW5vdGhlciwgY2xvc2VyIGxvb2suIEp1c3Qgd2FudCB0byBydWxlIG91dCBhbnl0aGluZyBJIG1pZ2h0IGJlIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTMzLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzM6NDEuODIzNjQyOTkzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDA0NTcxODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0xNDk9YmF0YWR2X3R0X2hhc2hfZmluZChzdHJ1Y3QgYmF0YWR2X2hhc2h0YWJsZSAqaGFzaCwgY29uc3QgdTggKmFkZHIsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE5NC0gKi9cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjE5NTpzdGF0aWMgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xOTYtYmF0YWR2X3R0X2xvY2FsX2hhc2hfZmluZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCBjb25zdCB1OCAqYWRkcixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTk4LXtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjE5OTpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSA9IE5VTEw7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yMDAtXFx0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKnR0X2NvbW1vbl9lbnRyeTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjA1LVxcdFxcdHR0X2xvY2FsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSxcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIwNjpcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5LFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjA3LVxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbW1vbik7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTI0MT1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZW50cnlfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqcmVmKVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjQyLXtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjI0MzpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTI0NC1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjI0NTpcXHR0dF9sb2NhbF9lbnRyeSA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yNDYtXFx0XFx0XFx0XFx0ICAgICAgY29tbW9uLnJlZmNvdW50KTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjU4PXN0YXRpYyB2b2lkXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyNTk6YmF0YWR2X3R0X2xvY2FsX2VudHJ5X3B1dChzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeSlcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTI2MC17XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTQ2OD1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZXZlbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ2OTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5LFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDcwLVxcdFxcdFxcdFxcdCAgdTggZXZlbnRfZmxhZ3MpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTcwOT1ib29sIGJhdGFkdl90dF9sb2NhbF9hZGQoc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfaWZhY2UsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03MTMtXFx0c3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgKnR0X2dsb2JhbCA9IE5VTEw7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo3MTQ6XFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWw7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy03MTUtXFx0c3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChtZXNoX2lmYWNlKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTE5NT1iYXRhZHZfdHRfbG9jYWxfZHVtcF9lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqbXNnLCB1MzIgcG9ydGlkLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMTk5LXtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEyMDA6XFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqbG9jYWw7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMjAxLVxcdHN0cnVjdCBiYXRhZHZfbWVzaGlmX3ZsYW4gKnZsYW47XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyMDYtXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMjA3OlxcdGxvY2FsID0gY29udGFpbmVyX29mKGNvbW1vbiwgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSwgY29tbW9uKTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEyMDgtXFx0bGFzdF9zZWVuX21zZWNzID0gamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gbG9jYWwtXFx1MDAzZWxhc3Rfc2Vlbik7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTEzNTI9YmF0YWR2X3R0X2xvY2FsX3NldF9wZW5kaW5nX2V2ZW50KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMzUzOlxcdFxcdFxcdFxcdCAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnksXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMzU0LVxcdFxcdFxcdFxcdCAgdTE2IGZsYWdzLCBjb25zdCBjaGFyICptZXNzYWdlKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0xMzc0PXUxNiBiYXRhZHZfdHRfbG9jYWxfcmVtb3ZlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMzc3LXtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEzNzg6XFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMzc5LVxcdHN0cnVjdCBobGlzdF9ub2RlICp0dF9yZW1vdmVkX25vZGU7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTE0NTA9c3RhdGljIHZvaWQgYmF0YWR2X3R0X2xvY2FsX3B1cmdlX2xpc3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTQ1NC1cXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5O1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTQ1NTpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE0NTYtXFx0c3RydWN0IGhsaXN0X25vZGUgKm5vZGVfdG1wO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xNDYyLVxcdFxcdHR0X2xvY2FsX2VudHJ5ID0gY29udGFpbmVyX29mKHR0X2NvbW1vbl9lbnRyeSxcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjE0NjM6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSxcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE0NjQtXFx0XFx0XFx0XFx0XFx0ICAgICAgY29tbW9uKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTUyNT1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfdGFibGVfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xNTI4LVxcdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICp0dF9jb21tb25fZW50cnk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNTI5OlxcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTUzMC1cXHRzdHJ1Y3QgYmF0YWR2X2hhc2h0YWJsZSAqaGFzaDtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTU0OC1cXHRcXHRcXHR0dF9sb2NhbCA9IGNvbnRhaW5lcl9vZih0dF9jb21tb25fZW50cnksXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNTQ5OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnksXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xNTUwLVxcdFxcdFxcdFxcdFxcdFxcdGNvbW1vbik7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTE3NzI9c3RhdGljIGJvb2wgYmF0YWR2X3R0X2dsb2JhbF9hZGQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTc3Ny1cXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5O1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTc3ODpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTE3NzktXFx0c3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnkgKmNvbW1vbjtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MjM0Mj1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfZ2xvYmFsX2RlbChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yMzQ2LXtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjIzNDc6XFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqbG9jYWxfZW50cnkgPSBOVUxMO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjM0OC1cXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yNTg3PXN0YXRpYyBib29sXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoyNTg4Ol9iYXRhZHZfaXNfYXBfaXNvbGF0ZWQoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnksXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0yNTg5LVxcdFxcdCAgICAgICBzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5KVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0yNjIzPXN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpiYXRhZHZfdHJhbnN0YWJsZV9zZWFyY2goc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjYyOC1cXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSAqdHRfZ2xvYmFsX2VudHJ5ID0gTlVMTDtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjI2Mjk6XFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAqdHRfbG9jYWxfZW50cnkgPSBOVUxMO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMjYzMC1cXHRzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSAqYmVzdF9lbnRyeTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzY3ND1ib29sIGJhdGFkdl9pc19teV9jbGllbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdiwgY29uc3QgdTggKmFkZHIsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM2NzYte1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzY3NzpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM2NzgtXFx0dTE2IHR0X2ZsYWdzO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz00MDAxPXN0YXRpYyB2b2lkIGJhdGFkdl90dF9sb2NhbF9wdXJnZV9wZW5kaW5nX2NsaWVudHMoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDAwNS1cXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDAwNjpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbDtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQwMDctXFx0c3RydWN0IGhsaXN0X25vZGUgKm5vZGVfdG1wO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00MDQ2LVxcdFxcdFxcdHR0X2xvY2FsID0gY29udGFpbmVyX29mKHR0X2NvbW1vbixcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQwNDc6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSxcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQwNDgtXFx0XFx0XFx0XFx0XFx0XFx0Y29tbW9uKTtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9NDExMD1ib29sIGJhdGFkdl9pc19hcF9pc29sYXRlZChzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LCB1OCAqc3JjLCB1OCAqZHN0LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00MTEzLVxcdHN0cnVjdCBiYXRhZHZfdHRfZ2xvYmFsX2VudHJ5ICp0dF9nbG9iYWxfZW50cnk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0MTE0OlxcdHN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkgKnR0X2xvY2FsX2VudHJ5O1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDExNS1cXHRzdHJ1Y3QgYmF0YWR2X21lc2hpZl92bGFuICp2bGFuO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz00MjY2PWJvb2wgYmF0YWR2X3R0X2xvY2FsX2NsaWVudF9pc19yb2FtaW5nKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQyNjgte1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDI2OTpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5ICp0dF9sb2NhbF9lbnRyeTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQyNzAtXFx0Ym9vbCByZXQ7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTQ2MDA9aW50IF9faW5pdCBiYXRhZHZfdHRfY2FjaGVfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjA2LVxcdHNpemVfdCB0dF9yZXFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlKTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ2MDc6XFx0c2l6ZV90IHRsX3NpemUgPSBzaXplb2Yoc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00NjA4LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaD0xODQxPXN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5IHtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTg3Ni0vKipcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oOjE4Nzc6ICogc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAtIHRyYW5zbGF0aW9uIHRhYmxlIGxvY2FsIGVudHJ5IGRhdGFcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTE4NzgtICovXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxODc5OnN0cnVjdCBiYXRhZHZfdHRfbG9jYWxfZW50cnkge1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTg4MC1cXHQvKiogQGNvbW1vbjogZ2VuZXJhbCB0cmFuc2xhdGlvbiB0YWJsZSBkYXRhICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjMzOjQ0LjIyODIyMjAxNVoiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MzY1NDgwNTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipEaXZpbmcgaW50byB0aGUgQmF0YWR2IENvZGViYXNlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEknbSBnb2luZyB0byBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBzdHJ1Y3QgYmF0YWR2X3R0X2xvY2FsX2VudHJ5YC4gSSBrbm93IGl0J3MgZGVmaW5lZCBpbiBgdHlwZXMuaGAsIHNvIHRoYXQncyB3aGVyZSBJJ2xsIGJlZ2luLiBUaGlzIHN0cnVjdCBpcyBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGJhdGFkdiAoQi5BLlQuTS5BLk4uIGFkdmFuY2VkKSBwcm90b2NvbCBtYW5hZ2VzIGl0cyBsb2NhbCB0b3BvbG9neSB0YWJsZXMsIHNvIGdldHRpbmcgYSBzb2xpZCBncmFzcCBvbiBpdHMgc3RydWN0dXJlIGlzIGdvaW5nIHRvIGJlIGtleSB0byB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nIG9yIGVuaGFuY2luZy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGRldmVsb3BlcnMgaGF2ZSBkZWZpbmVkIGluIHRoZXJlLCB3aGF0IGZpZWxkcyB0aGV5IGNob3NlIGFuZCB0aGVpciByZWFzb25pbmcuIExldCdzIHN0YXJ0IHdpdGggYSBsb3ctbGV2ZWwgbG9vaywgYW5kIHRoZW4gSSBjYW4gY29ubmVjdCB0aGUgZGF0YSB0byB0aGUgb3ZlcmFsbCBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiFcblxuXG4iLCJJbnB1dFRva2VucyI6MzA1ODMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozMzo1MS41OTM3MDQ2MzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3R5cGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTg3NSxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTg3NTpcXHRcXG4xODc2OlxcdC8qKlxcbjE4Nzc6XFx0ICogc3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSAtIHRyYW5zbGF0aW9uIHRhYmxlIGxvY2FsIGVudHJ5IGRhdGFcXG4xODc4OlxcdCAqL1xcbjE4Nzk6XFx0c3RydWN0IGJhdGFkdl90dF9sb2NhbF9lbnRyeSB7XFxuMTg4MDpcXHRcXHQvKiogQGNvbW1vbjogZ2VuZXJhbCB0cmFuc2xhdGlvbiB0YWJsZSBkYXRhICovXFxuMTg4MTpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSBjb21tb247XFxuMTg4MjpcXHRcXG4xODgzOlxcdFxcdC8qKiBAbGFzdF9zZWVuOiB0aW1lc3RhbXAgdXNlZCBmb3IgcHVyZ2luZyBzdGFsZSB0dCBsb2NhbCBlbnRyaWVzICovXFxuMTg4NDpcXHRcXHR1bnNpZ25lZCBsb25nIGxhc3Rfc2VlbjtcXG4xODg1OlxcdFxcbjE4ODY6XFx0XFx0LyoqIEB2bGFuOiBtZXNoLWludGVyZmFjZSB2bGFuIG9mIHRoZSBlbnRyeSAqL1xcbjE4ODc6XFx0XFx0c3RydWN0IGJhdGFkdl9tZXNoaWZfdmxhbiAqdmxhbjtcXG4xODg4OlxcdH07XFxuMTg4OTpcXHRcXG4xODkwOlxcdC8qKlxcbjE4OTE6XFx0ICogc3RydWN0IGJhdGFkdl90dF9nbG9iYWxfZW50cnkgLSB0cmFuc2xhdGlvbiB0YWJsZSBnbG9iYWwgZW50cnkgZGF0YVxcbjE4OTI6XFx0ICovXFxuMTg5MzpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2dsb2JhbF9lbnRyeSB7XFxuMTg5NDpcXHRcXHQvKiogQGNvbW1vbjogZ2VuZXJhbCB0cmFuc2xhdGlvbiB0YWJsZSBkYXRhICovXFxuMTg5NTpcXHRcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSBjb21tb247XFxuMTg5NjpcXHRcXG4xODk3OlxcdFxcdC8qKiBAb3JpZ19saXN0OiBsaXN0IG9mIG9yaWcgbm9kZXMgYW5ub3VuY2luZyB0aGlzIG5vbi1tZXNoIGNsaWVudCAqL1xcbjE4OTg6XFx0XFx0c3RydWN0IGhsaXN0X2hlYWQgb3JpZ19saXN0O1xcbjE4OTk6XFx0XFxuMTkwMDpcXHRcXHQvKiogQG9yaWdfbGlzdF9jb3VudDogbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBvcmlnX2xpc3QgKi9cXG4xOTAxOlxcdFxcdGF0b21pY190IG9yaWdfbGlzdF9jb3VudDtcXG4xOTAyOlxcdFxcbjE5MDM6XFx0XFx0LyoqIEBsaXN0X2xvY2s6IGxvY2sgcHJvdGVjdGluZyBvcmlnX2xpc3QgKi9cXG4xOTA0OlxcdFxcdHNwaW5sb2NrX3QgbGlzdF9sb2NrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozMzo1MS41OTM4MTM2NzdaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzUzOTU1OTM0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQYXRjaDogQSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZXNlIGNoYW5nZXMgbWV0aG9kaWNhbGx5LiBGaXJzdCwgYGJhdGFkdl9pdl9vZ21fbmVpZ2hfaXNfc29iYDogc2VlbXMgbGlrZSBpdCdzIGp1c3QgYSBzaW1wbGUgcGFyYW1ldGVyIHJlbmFtZSwgbm90aGluZyB0byByYWlzZSBhbiBleWVicm93IGFib3V0IHRoZXJlLiBNb3Zpbmcgb24sIGBiYXRhZHZfdl9uZWlnaF9pc19zb2JgIGlzIGEgYml0IG1vcmUgaW52b2x2ZWQuIEFoLCBhIHBhcmFtZXRlciByZW5hbWUgKmFuZCogc29tZSBsb2dpYyBjb3JyZWN0aW9uLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRocm91Z2hwdXQgY29tcGFyaXNvbi4gSW50ZXJlc3RpbmcuIExldCBtZSBicmVhayB0aGlzIGRvd24uLi4gaXQgbG9va3MgbGlrZSB0aGV5J3JlIGNhbGN1bGF0aW5nIGEgdGhyZXNob2xkIGFzIG9uZS1mb3VydGggb2YgdGhlIHJlZmVyZW5jZSBpbnRlcmZhY2UncyB0aHJvdWdocHV0IGFuZCB0aGVuIHN1YnRyYWN0aW5nIGl0IGZyb20gdGhlIHRvdGFsLiBUaGUgZmluYWwgY29tcGFyaXNvbiwgYGNhbmRpZGF0ZSBcdTAwM2UgMy80ICogcmVmZXJlbmNlYCwgc2hvdWxkIG1ha2Ugc2Vuc2UuIEFuZCwgaW1wb3J0YW50bHksIG5vIG1lbW9yeSBhbGxvY2F0aW9uIG9yIHVuaW5pdGlhbGl6ZWQgcmVhZHMsIHdoaWNoIGlzIGFsd2F5cyBnb29kIHRvIHNlZS4gVGhlIGNvZGUgaXMgZmFpcmx5IGNvbmNpc2UgYW5kIGVmZmljaWVudCBpbiBpdHMgYXBwcm9hY2guXG5cbk5vdywgbGV0J3Mgc2hpZnQgZ2VhcnMgdG8gdGhlIGBicmlkZ2VfbG9vcF9hdm9pZGFuY2UuY2AgbW9kaWZpY2F0aW9ucy4gSSBzZWUgYSBgdTggbWFjW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7YCBkZWNsYXJhdGlvbiBpbiBgYmF0YWR2X2JsYV9zZW5kX2Fubm91bmNlYCBhbmQgYSBgc3RhdGljIGNvbnN0IHU4IGNsYWltX2Rlc3RbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKSA9IHsgLi4uIH07YCBpbiBgYmF0YWR2X2JsYV9pbml0YC4gTG9va3MgbGlrZSBhIHBvdGVudGlhbCBjaGFuZ2UgdG8gTUFDIGFkZHJlc3MgaGFuZGxpbmcsIHNvIGxldCdzIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYGJhdGFkdl9ibGFfc2VuZF9hbm5vdW5jZWAgZnVuY3Rpb24sIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA2NjMuIFRoYXQncyB3aGVyZSB0aGUgaGVhcnQgb2YgdGhlIGJyaWRnZSBsb29wIGF2b2lkYW5jZSBsb2dpYyB3aWxsIGJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTI2NywiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM0OjI2Ljk4OTQwOTU4MloiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk3MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2JhdG1hbi1hZHYvYnJpZGdlX2xvb3BfYXZvaWRhbmNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjYwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjYwOlxcdCAqIEBiYXRfcHJpdjogdGhlIGJhdCBwcml2IHdpdGggYWxsIHRoZSBtZXNoIGludGVyZmFjZSBpbmZvcm1hdGlvblxcbiA2NjE6XFx0ICogQGJhY2tib25lX2d3OiBvdXIgYmFja2JvbmUgZ2F0ZXdheSB3aGljaCBzaG91bGQgYmUgYW5ub3VuY2VkXFxuIDY2MjpcXHQgKi9cXG4gNjYzOlxcdHN0YXRpYyB2b2lkIGJhdGFkdl9ibGFfc2VuZF9hbm5vdW5jZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbiA2NjQ6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgYmF0YWR2X2JsYV9iYWNrYm9uZV9ndyAqYmFja2JvbmVfZ3cpXFxuIDY2NTpcXHR7XFxuIDY2NjpcXHRcXHR1OCBtYWNbRVRIX0FMRU5dIF9fYWxpZ25lZCgyKTtcXG4gNjY3OlxcdFxcdF9fYmUxNiBjcmM7XFxuIDY2ODpcXHRcXG4gNjY5OlxcdFxcdG1lbWNweShtYWMsIGJhdGFkdl9hbm5vdW5jZV9tYWMsIDQpO1xcbiA2NzA6XFx0XFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZiYWNrYm9uZV9ndy1cXHUwMDNlY3JjX2xvY2spO1xcbiA2NzE6XFx0XFx0Y3JjID0gaHRvbnMoYmFja2JvbmVfZ3ctXFx1MDAzZWNyYyk7XFxuIDY3MjpcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2YmFja2JvbmVfZ3ctXFx1MDAzZWNyY19sb2NrKTtcXG4gNjczOlxcdFxcdG1lbWNweShcXHUwMDI2bWFjWzRdLCBcXHUwMDI2Y3JjLCAyKTtcXG4gNjc0OlxcdFxcbiA2NzU6XFx0XFx0YmF0YWR2X2JsYV9zZW5kX2NsYWltKGJhdF9wcml2LCBtYWMsIGJhY2tib25lX2d3LVxcdTAwM2V2aWQsXFxuIDY3NjpcXHRcXHRcXHRcXHQgICAgICBCQVRBRFZfQ0xBSU1fVFlQRV9BTk5PVU5DRSk7XFxuIDY3NzpcXHR9XFxuIDY3ODpcXHRcXG4gNjc5OlxcdC8qKlxcbiA2ODA6XFx0ICogYmF0YWR2X2JsYV9hZGRfY2xhaW0oKSAtIEFkZHMgYSBjbGFpbSBpbiB0aGUgY2xhaW0gaGFzaFxcbiA2ODE6XFx0ICogQGJhdF9wcml2OiB0aGUgYmF0IHByaXYgd2l0aCBhbGwgdGhlIG1lc2ggaW50ZXJmYWNlIGluZm9ybWF0aW9uXFxuIDY4MjpcXHQgKiBAbWFjOiB0aGUgbWFjIGFkZHJlc3Mgb2YgdGhlIGNsYWltXFxuIDY4MzpcXHQgKiBAdmlkOiB0aGUgVkxBTiBJRCBvZiB0aGUgZnJhbWVcXG4gNjg0OlxcdCAqIEBiYWNrYm9uZV9ndzogdGhlIGJhY2tib25lIGdhdGV3YXkgd2hpY2ggY2xhaW1zIGl0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM0OjI2Ljk4OTUzMDY3MloiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2OTUzNjQyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFDIEFkZHJlc3MgYW5kIFBvdGVudGlhbCBCdWcqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gdGhpcyBgbWFjYCB2YXJpYWJsZS4gSXQgbG9va3MgbGlrZSB0aGUgZnVsbCA2IGJ5dGVzIGFyZSBiZWluZyB3cml0dGVuLCB3aGljaCBpcyBnb29kLiBXZSdyZSBnZXR0aW5nIHRoZSBjb21wbGV0ZSBNQUMgYWRkcmVzcywgZm91ciBieXRlcyBwbHVzIHR3byBieXRlcy4gTm93LCBJJ20gbW92aW5nIG9uIHRvIHRoaXMgYGRpc3RyaWJ1dGVkLWFycC10YWJsZS5jYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBjaGVja2luZyBvdXQgYGJhdGFkdl9kYmdfYXJwYC4gQWgsIGhlcmUncyBhIHBvdGVudGlhbCBhcmVhIHRvIGludmVzdGlnYXRlOiBpdCBzZWVtcyBsaWtlIHdlJ3JlIHVzaW5nIGB1bmljYXN0XzRhZGRyX3BhY2tldC1cdTAwM2VzdWJ0eXBlYCBpbnN0ZWFkIG9mIGB1bmljYXN0XzRhZGRyX3BhY2tldC1cdTAwM2V1LnBhY2tldF90eXBlYC4gVGhhdCBzZWVtcyBvZGQsIHNvIEkgbmVlZCB0byB2ZXJpZnkgd2hhdCB0aGUgY29ycmVjdCBmaWVsZCBpcy4gSSdsbCBuZWVkIHRvIGdvIGFuZCBhbmFseXplIHRoZSBgYmF0YWR2X3VuaWNhc3RfNGFkZHJfcGFja2V0YCBzdHJ1Y3R1cmUgdG8gdW5kZXJzdGFuZCB3aGF0IGVhY2ggZmllbGQgcmVwcmVzZW50cyBhbmQgbWFrZSBzdXJlIHRoaXMgaXMgdGhlIHJpZ2h0IGZpZWxkIHRvIGJlIHVzaW5nLiBUaGlzIG1pZ2h0IGJlIGEgYnVnIHdhaXRpbmcgdG8gaGFwcGVuLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByaWdodCBkYXRhIGlzIGJlaW5nIGFjY2Vzc2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjM0MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzQ6MzMuOTQzMTc0NzgxWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDM5NDQyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bmljYXN0XzRhZGRyX3BhY2tldFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvYmF0bWFuLWFkdi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9NTAyPXN0YXRpYyB2b2lkIGJhdGFkdl9kYmdfYXJwKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01MDQte1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjUwNTpcXHRzdHJ1Y3QgYmF0YWR2X3VuaWNhc3RfNGFkZHJfcGFja2V0ICp1bmljYXN0XzRhZGRyX3BhY2tldDtcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01MDYtXFx0c3RydWN0IGJhdGFkdl9iY2FzdF9wYWNrZXQgKmJjYXN0X3BrdDtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTUyMy1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo1MjQ6XFx0dW5pY2FzdF80YWRkcl9wYWNrZXQgPSAoc3RydWN0IGJhdGFkdl91bmljYXN0XzRhZGRyX3BhY2tldCAqKXNrYi1cXHUwMDNlZGF0YTtcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01MjUtXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NTI2OlxcdHN3aXRjaCAodW5pY2FzdF80YWRkcl9wYWNrZXQtXFx1MDAzZXUucGFja2V0X3R5cGUpIHtcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01MjctXFx0Y2FzZSBCQVRBRFZfVU5JQ0FTVDpcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTUzMy1cXHRcXHRcXHQgICBcXFwiKiBlbmNhcHN1bGF0ZWQgd2l0aGluIGEgVU5JQ0FTVF80QUREUiBwYWNrZXQgKHNyYzogJXBNKVxcXFxuXFxcIixcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo1MzQ6XFx0XFx0XFx0ICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtXFx1MDAzZXNyYyk7XFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NTM1OlxcdFxcdHN3aXRjaCAodW5pY2FzdF80YWRkcl9wYWNrZXQtXFx1MDAzZXN1YnR5cGUpIHtcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01MzYtXFx0XFx0Y2FzZSBCQVRBRFZfUF9EQVRfREhUX1BVVDpcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTU1MC1cXHRcXHRcXHRiYXRhZHZfZGJnKEJBVEFEVl9EQkdfREFULCBiYXRfcHJpdiwgXFxcIiogdHlwZTogVW5rbm93biAoJXUpIVxcXFxuXFxcIixcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo1NTE6XFx0XFx0XFx0XFx0ICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtXFx1MDAzZXN1YnR5cGUpO1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTU1Mi1cXHRcXHR9XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01NTQtXFx0Y2FzZSBCQVRBRFZfQkNBU1Q6XFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6NTU1OlxcdFxcdGJjYXN0X3BrdCA9IChzdHJ1Y3QgYmF0YWR2X2JjYXN0X3BhY2tldCAqKXVuaWNhc3RfNGFkZHJfcGFja2V0O1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTU1Ni1cXHRcXHRvcmlnX2FkZHIgPSBiY2FzdF9wa3QtXFx1MDAzZW9yaWc7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy01NjMtXFx0XFx0XFx0ICAgXFxcIiogZW5jYXBzdWxhdGVkIHdpdGhpbiBhbiB1bmtub3duIHBhY2tldCB0eXBlICgweCV4KVxcXFxuXFxcIixcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzo1NjQ6XFx0XFx0XFx0ICAgdW5pY2FzdF80YWRkcl9wYWNrZXQtXFx1MDAzZXUucGFja2V0X3R5cGUpO1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTU2NS1cXHR9XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9MzcwPWludCBiYXRhZHZfbWF4X2hlYWRlcl9sZW4odm9pZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy0zNzYtXFx0aGVhZGVyX2xlbiA9IG1heF90KGludCwgaGVhZGVyX2xlbixcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM6Mzc3OlxcdFxcdFxcdCAgIHNpemVvZihzdHJ1Y3QgYmF0YWR2X3VuaWNhc3RfNGFkZHJfcGFja2V0KSk7XFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTM3OC1cXHRoZWFkZXJfbGVuID0gbWF4X3QoaW50LCBoZWFkZXJfbGVuLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jPTU1ND1zdGF0aWMgdm9pZCBiYXRhZHZfcmVjdl9oYW5kbGVyX2luaXQodm9pZClcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L21haW4uYy01NzAtXFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYmF0YWR2X3VuaWNhc3RfcGFja2V0KSAhPSAxMCk7XFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jOjU3MTpcXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBiYXRhZHZfdW5pY2FzdF80YWRkcl9wYWNrZXQpICE9IDE4KTtcXG5uZXQvYmF0bWFuLWFkdi9tYWluLmMtNTcyLVxcdEJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IGJhdGFkdl9mcmFnX3BhY2tldCkgIT0gMjApO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jPTc0MD1zdGF0aWMgaW50IGJhdGFkdl9yb3V0ZV91bmljYXN0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTc3Ni1cXHRjYXNlIEJBVEFEVl9VTklDQVNUXzRBRERSOlxcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzo3Nzc6XFx0XFx0aGRyX2xlbiA9IHNpemVvZihzdHJ1Y3QgYmF0YWR2X3VuaWNhc3RfNGFkZHJfcGFja2V0KTtcXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtNzc4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jPTEwMzk9aW50IGJhdGFkdl9yZWN2X3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTA0Mi1cXHRzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2ID0gbmV0ZGV2X3ByaXYocmVjdl9pZi1cXHUwMDNlbWVzaF9pZmFjZSk7XFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjEwNDM6XFx0c3RydWN0IGJhdGFkdl91bmljYXN0XzRhZGRyX3BhY2tldCAqdW5pY2FzdF80YWRkcl9wYWNrZXQ7XFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTEwNDQtXFx0c3RydWN0IGJhdGFkdl91bmljYXN0X3BhY2tldCAqdW5pY2FzdF9wYWNrZXQ7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmMtMTA1OS1cXHRpZiAoaXM0YWRkcilcXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM6MTA2MDpcXHRcXHRoZHJfc2l6ZSA9IHNpemVvZigqdW5pY2FzdF80YWRkcl9wYWNrZXQpO1xcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xMDYxLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTEwOTItXFx0XFx0aWYgKGlzNGFkZHIpIHtcXG5uZXQvYmF0bWFuLWFkdi9yb3V0aW5nLmM6MTA5MzpcXHRcXHRcXHR1bmljYXN0XzRhZGRyX3BhY2tldCA9XFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjEwOTQ6XFx0XFx0XFx0XFx0KHN0cnVjdCBiYXRhZHZfdW5pY2FzdF80YWRkcl9wYWNrZXQgKilza2ItXFx1MDAzZWRhdGE7XFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jOjEwOTU6XFx0XFx0XFx0c3VidHlwZSA9IHVuaWNhc3RfNGFkZHJfcGFja2V0LVxcdTAwM2VzdWJ0eXBlO1xcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYy0xMDk2LVxcdFxcdFxcdGJhdGFkdl9kYXRfaW5jX2NvdW50ZXIoYmF0X3ByaXYsIHN1YnR5cGUpO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTExMDQtXFx0XFx0XFx0aWYgKHN1YnR5cGUgPT0gQkFUQURWX1BfREFUQSkge1xcbm5ldC9iYXRtYW4tYWR2L3JvdXRpbmcuYzoxMTA1OlxcdFxcdFxcdFxcdG9yaWdfYWRkciA9IHVuaWNhc3RfNGFkZHJfcGFja2V0LVxcdTAwM2VzcmM7XFxubmV0L2JhdG1hbi1hZHYvcm91dGluZy5jLTExMDYtXFx0XFx0XFx0XFx0b3JpZ19ub2RlID0gYmF0YWR2X29yaWdfaGFzaF9maW5kKGJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvc2VuZC5jPTI2OT1ib29sIGJhdGFkdl9zZW5kX3NrYl9wcmVwYXJlX3VuaWNhc3RfNGFkZHIoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy0yNzMte1xcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYzoyNzQ6XFx0c3RydWN0IGJhdGFkdl91bmljYXN0XzRhZGRyX3BhY2tldCAqdWNfNGFkZHJfcGFja2V0O1xcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy0yNzUtXFx0c3RydWN0IGJhdGFkdl9oYXJkX2lmYWNlICpwcmltYXJ5X2lmO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvc2VuZC5jLTI4OS1cXG5uZXQvYmF0bWFuLWFkdi9zZW5kLmM6MjkwOlxcdHVjXzRhZGRyX3BhY2tldCA9IChzdHJ1Y3QgYmF0YWR2X3VuaWNhc3RfNGFkZHJfcGFja2V0ICopc2tiLVxcdTAwM2VkYXRhO1xcbm5ldC9iYXRtYW4tYWR2L3NlbmQuYy0yOTEtXFx0dWNfNGFkZHJfcGFja2V0LVxcdTAwM2V1LnBhY2tldF90eXBlID0gQkFUQURWX1VOSUNBU1RfNEFERFI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM0OjMzLjk4NzU3MjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5NjUyNzkwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgQmF0YWR2IERBVCBDYWNoZSBEdW1wKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IGBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnlgIGluIHRoZSBgZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmNgIGZpbGUuIFNwZWNpZmljYWxseSwgSSBzZWUgYSBkZWNsYXJhdGlvbiBmb3IgYHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO2AuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IHRoZSByZWFsIHRhc2sgaGVyZSBpcyB0byBkaWcgaW50byB3aGF0IGBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnlgIGlzIGFjdHVhbGx5ICpkb2luZyouIExldCdzIGdvIHRocm91Z2ggdGhpcyBmdW5jdGlvbiBkZWZpbml0aW9uIHdpdGggYSBmaW5lIHRvb3RoIGNvbWIuIEkgd2FudCB0byBzZWUgaG93IGl0J3MgaW1wbGVtZW50ZWQgYW5kIGhvdyBpdCBpcyBiZWhhdmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ1MzgsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozNDozNy45ODQxMDM0MjZaIiwiU2VxIjozMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkzOCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkzODpcXHRzdGF0aWMgaW50XFxuIDkzOTpcXHRiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcXG4gOTQwOlxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IsXFxuIDk0MTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGJhdGFkdl9kYXRfZW50cnkgKmRhdF9lbnRyeSlcXG4gOTQyOlxcdHtcXG4gOTQzOlxcdFxcdHU4IG1hY1tFVEhfQUxFTl0gX19hbGlnbmVkKDIpO1xcbiA5NDQ6XFx0XFx0dTY0IHU2NF9tYWM7XFxuIDk0NTpcXHRcXHRpbnQgbXNlY3M7XFxuIDk0NjpcXHRcXHR2b2lkICpoZHI7XFxuIDk0NzpcXHRcXG4gOTQ4OlxcdFxcdGhkciA9IGdlbmxtc2dfcHV0KG1zZywgcG9ydGlkLCBjYi1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ19zZXEsXFxuIDk0OTpcXHRcXHRcXHRcXHQgIFxcdTAwMjZiYXRhZHZfbmV0bGlua19mYW1pbHksIE5MTV9GX01VTFRJLFxcbiA5NTA6XFx0XFx0XFx0XFx0ICBCQVRBRFZfQ01EX0dFVF9EQVRfQ0FDSEUpO1xcbiA5NTE6XFx0XFx0aWYgKCFoZHIpXFxuIDk1MjpcXHRcXHRcXHRyZXR1cm4gLUVOT0JVRlM7XFxuIDk1MzpcXHRcXG4gOTU0OlxcdFxcdGdlbmxfZHVtcF9jaGVja19jb25zaXN0ZW50KGNiLCBoZHIpO1xcbiA5NTU6XFx0XFxuIDk1NjpcXHRcXHRtc2VjcyA9IGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGRhdF9lbnRyeS1cXHUwMDNlbGFzdF91cGRhdGUpO1xcbiA5NTc6XFx0XFx0dTY0X21hYyA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNmRhdF9lbnRyeS1cXHUwMDNlbWFjX2FkZHIpO1xcbiA5NTg6XFx0XFx0dTY0X3RvX2V0aGVyX2FkZHIodTY0X21hYywgbWFjKTtcXG4gOTU5OlxcdFxcbiA5NjA6XFx0XFx0aWYgKG5sYV9wdXRfaW5fYWRkcihtc2csIEJBVEFEVl9BVFRSX0RBVF9DQUNIRV9JUDRBRERSRVNTLFxcbiA5NjE6XFx0XFx0XFx0XFx0ICAgIGRhdF9lbnRyeS1cXHUwMDNlaXApIHx8XFxuIDk2MjpcXHRcXHQgICAgbmxhX3B1dChtc2csIEJBVEFEVl9BVFRSX0RBVF9DQUNIRV9IV0FERFJFU1MsIEVUSF9BTEVOLCBtYWMpIHx8XFxuIDk2MzpcXHRcXHQgICAgbmxhX3B1dF91MTYobXNnLCBCQVRBRFZfQVRUUl9EQVRfQ0FDSEVfVklELCBkYXRfZW50cnktXFx1MDAzZXZpZCkgfHxcXG4gOTY0OlxcdFxcdCAgICBubGFfcHV0X3UzMihtc2csIEJBVEFEVl9BVFRSX0xBU1RfU0VFTl9NU0VDUywgbXNlY3MpKSB7XFxuIDk2NTpcXHRcXHRcXHRnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7XFxuIDk2NjpcXHRcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbiA5Njc6XFx0XFx0fVxcbiA5Njg6XFx0XFxuIDk2OTpcXHRcXHRnZW5sbXNnX2VuZChtc2csIGhkcik7XFxuIDk3MDpcXHRcXHRyZXR1cm4gMDtcXG4gOTcxOlxcdH1cXG4gOTcyOlxcdFxcbiA5NzM6XFx0LyoqXFxuIDk3NDpcXHQgKiBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfYnVja2V0KCkgLSBkdW1wIG9uZSBidWNrZXQgb2YgdGhlIERBVCBjYWNoZSB0YWJsZSB0b1xcbiA5NzU6XFx0ICogIGEgbmV0bGluayBzb2NrZXRcXG4gOTc2OlxcdCAqIEBtc2c6IGJ1ZmZlciBmb3IgdGhlIG1lc3NhZ2VcXG4gOTc3OlxcdCAqIEBwb3J0aWQ6IG5ldGxpbmsgcG9ydFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozNDozNy45ODQyMTQ4MDZaIiwiU2VxIjozMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5MjcyNTY2MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgQWxpZ25tZW50IGluIGB1NjRfdG9fZXRoZXJfYWRkcmAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB1NjRfdG9fZXRoZXJfYWRkcmAgZnVuY3Rpb24gYW5kIGl0IHNlZW1zIHRvIGJlIGNvcHlpbmcgNiBieXRlcyB0byBgbWFjYCB1c2luZyBzb21ldGhpbmcgbGlrZSBgcHV0X3VuYWxpZ25lZGAuIFRoZSBpbW1lZGlhdGUgZmxhZyBoZXJlIGlzIHRoYXQgdGhlc2UgdHlwZXMgb2Ygb3BlcmF0aW9ucyBjYW4gb2Z0ZW4gZGVwZW5kIG9uIG1lbW9yeSBhbGlnbm1lbnQsIGFuZCBzcGVjaWZpY2FsbHksIHRoZSB1c2Ugb2YgYHB1dF91bmFsaWduZWRgIChvciBlcXVpdmFsZW50KSByYWlzZXMgYSByZWQgZmxhZyBpbiBteSBtaW5kLiBUaGUgY29kZSdzIHVzaW5nIGFuIG9wZXJhdGlvbiB0aGF0IGFudGljaXBhdGVzIDItYnl0ZSBhbGlnbm1lbnQuXG5cblNvLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgaGVhZGVycyBhbmQgZ2V0IGEgY2xlYXJlciBwaWN0dXJlIG9mIGB1NjRfdG9fZXRoZXJfYWRkcmAgaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBgX19hbGlnbmVkKDIpYCBhdHRyaWJ1dGUgd2FzIGFkZGVkIGFjcm9zcyB0aGVzZSBmaWxlcy4gSSBzdXNwZWN0IGl0J3MgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGUgbWVtb3J5IGFsaWdubWVudCByZXF1aXJlbWVudHMgb2YgdGhlIGBwdXRfdW5hbGlnbmVkYCBmdW5jdGlvbiBvciB3aGF0ZXZlciBlcXVpdmFsZW50IGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgdG8gd3JpdGUgdGhlIE1BQyBhZGRyZXNzLiBJJ20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgaXMgZXNzZW50aWFsIG9yIGEgcHJlY2F1dGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0ODYsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM1OjAwLjkxMTQ3MzM4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjUxNTYzNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInU2NF90b19ldGhlcl9hZGRyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9tYWluLmM9NTM3PXN0YXRpYyBpbnQgZXJkbWFfaWJfZGV2aWNlX2FkZChzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9tYWluLmMtNTg4LVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9tYWluLmM6NTg5OlxcdHU2NF90b19ldGhlcl9hZGRyKG1hYywgZGV2LVxcdTAwM2VhdHRycy5wZWVyX2FkZHIpO1xcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9lcmRtYS9lcmRtYV9tYWluLmMtNTkwLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTMzMj1zdGF0aWMgaW5saW5lIHZvaWQgYjUzX2FybF90b19lbnRyeShzdHJ1Y3QgYjUzX2FybF9lbnRyeSAqZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTMzOS1cXHRlbnQtXFx1MDAzZWlzX3N0YXRpYyA9ICEhKGZ3ZF9lbnRyeSBcXHUwMDI2IEFSTFRCTF9TVEFUSUMpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDozNDA6XFx0dTY0X3RvX2V0aGVyX2FkZHIobWFjX3ZpZCwgZW50LVxcdTAwM2VtYWMpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0zNDEtXFx0ZW50LVxcdTAwM2V2aWQgPSBtYWNfdmlkIFxcdTAwM2VcXHUwMDNlIEFSTFRCTF9WSURfUztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaD0zNDQ9c3RhdGljIGlubGluZSB2b2lkIGI1M19hcmxfdG9fZW50cnlfMjUoc3RydWN0IGI1M19hcmxfZW50cnkgKmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0zNTAtXFx0ZW50LVxcdTAwM2Vpc19zdGF0aWMgPSAhIShtYWNfdmlkIFxcdTAwMjYgQVJMVEJMX1NUQVRJQ18yNSk7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oOjM1MTpcXHR1NjRfdG9fZXRoZXJfYWRkcihtYWNfdmlkLCBlbnQtXFx1MDAzZW1hYyk7XFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTM1Mi1cXHRlbnQtXFx1MDAzZXBvcnQgPSAobWFjX3ZpZCBcXHUwMDI2IEFSTFRCTF9EQVRBX1BPUlRfSURfTUFTS18yNSkgXFx1MDAzZVxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaD0zNTk9c3RhdGljIGlubGluZSB2b2lkIGI1M19hcmxfdG9fZW50cnlfODkoc3RydWN0IGI1M19hcmxfZW50cnkgKmVudCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0zNjYtXFx0ZW50LVxcdTAwM2Vpc19zdGF0aWMgPSAhIShmd2RfZW50cnkgXFx1MDAyNiBBUkxUQkxfU1RBVElDXzg5KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2Lmg6MzY3OlxcdHU2NF90b19ldGhlcl9hZGRyKG1hY192aWQsIGVudC1cXHUwMDNlbWFjKTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMzY4LVxcdGVudC1cXHUwMDNldmlkID0gbWFjX3ZpZCBcXHUwMDNlXFx1MDAzZSBBUkxUQkxfVklEX1M7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2Lmg9NDE3PXN0YXRpYyBpbmxpbmUgdm9pZCBiNTNfYXJsX3NlYXJjaF90b19lbnRyeV8yNShzdHJ1Y3QgYjUzX2FybF9lbnRyeSAqZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTQyMy1cXHRlbnQtXFx1MDAzZWlzX3N0YXRpYyA9ICEhKG1hY192aWQgXFx1MDAyNiBBUkxUQkxfU1RBVElDXzI1KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2Lmg6NDI0OlxcdHU2NF90b19ldGhlcl9hZGRyKG1hY192aWQsIGVudC1cXHUwMDNlbWFjKTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtNDI1LVxcdGVudC1cXHUwMDNldmlkID0gKG1hY192aWQgXFx1MDAyNiBBUkxfU1JDSF9SU0xUX1ZJRF9NQVNLXzI1KSBcXHUwMDNlXFx1MDAzZVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTQzNT1zdGF0aWMgaW5saW5lIHZvaWQgYjUzX2FybF9zZWFyY2hfdG9fZW50cnlfNjN4eChzdHJ1Y3QgYjUzX2FybF9lbnRyeSAqZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTQzOC1cXHRtZW1zZXQoZW50LCAwLCBzaXplb2YoKmVudCkpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDo0Mzk6XFx0dTY0X3RvX2V0aGVyX2FkZHIobWFjX3ZpZCwgZW50LVxcdTAwM2VtYWMpO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC00NDAtXFx0ZW50LVxcdTAwM2V2aWQgPSBtYWNfdmlkIFxcdTAwM2VcXHUwMDNlIEFSTFRCTF9WSURfUztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jPTE4Mzc9c3RhdGljIGludCBzamExMTA1X2ZkYl9kdW1wKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0xODY3LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjE4Njg6XFx0XFx0dTY0X3RvX2V0aGVyX2FkZHIobDJfbG9va3VwLm1hY2FkZHIsIG1hY2FkZHIpO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTE4NjktXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0xODg2PXN0YXRpYyB2b2lkIHNqYTExMDVfZmFzdF9hZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTE5MjMtXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MTkyNDpcXHRcXHR1NjRfdG9fZXRoZXJfYWRkcihsMl9sb29rdXAubWFjYWRkciwgbWFjYWRkcik7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmMtMTkyNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Z1bmdpYmxlL2Z1bmV0aC9mdW5ldGhfbWFpbi5jPTk1Mz1zdGF0aWMgaW50IGZ1bl9nZXRfcG9ydF9hdHRyaWJ1dGVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX21haW4uYy05NzQtXFx0XFx0Y2FzZSBGVU5fQURNSU5fUE9SVF9LRVlfTUFDQUREUjpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX21haW4uYzo5NzU6XFx0XFx0XFx0dTY0X3RvX2V0aGVyX2FkZHIoZGF0YVtpXSwgbWFjKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mdW5naWJsZS9mdW5ldGgvZnVuZXRoX21haW4uYy05NzYtXFx0XFx0XFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihtYWMpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfaHcuYz02Mj1zdGF0aWMgaW50IGhiZ19od19kZXZfc3BlY3NfaW5pdChzdHJ1Y3QgaGJnX3ByaXYgKnByaXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfaHcuYy04Mi1cXHRtYWNfYWRkciA9IGhiZ19yZWdfcmVhZDY0KHByaXYsIEhCR19SRUdfTUFDX0FERFJfQUREUik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpYm1jZ2UvaGJnX2h3LmM6ODM6XFx0dTY0X3RvX2V0aGVyX2FkZHIobWFjX2FkZHIsICh1OCAqKXNwZWNzLVxcdTAwM2VtYWNfYWRkci5zYV9kYXRhKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlibWNnZS9oYmdfaHcuYy04NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jPTQzND1pbnQgY2d4X2xtYWNfYWRkcl9kZWwodTggY2d4X2lkLCB1OCBsbWFjX2lkLCB1OCBpbmRleClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTQ2My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9jZ3guYzo0NjQ6XFx0dTY0X3RvX2V0aGVyX2FkZHIoY2ZnLCBtYWMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL2NneC5jLTQ2NS1cXHRpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIobWFjKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jPTc5MD1zdGF0aWMgdm9pZCBydnVfc2V0dXBfcGZ2Zl9tYWNhZGRyZXNzKHN0cnVjdCBydnUgKnJ2dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTgwOC1cXHRcXHRcXHRpZiAoKm1hYylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYzo4MDk6XFx0XFx0XFx0XFx0dTY0X3RvX2V0aGVyX2FkZHIoKm1hYywgcGZ2Zi1cXHUwMDNlbWFjX2FkZHIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dS5jLTgxMC1cXHRcXHRcXHRlbHNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy04MjQtXFx0XFx0XFx0XFx0aWYgKCptYWMpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1LmM6ODI1OlxcdFxcdFxcdFxcdFxcdHU2NF90b19ldGhlcl9hZGRyKCptYWMsIHBmdmYtXFx1MDAzZW1hY19hZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnUuYy04MjYtXFx0XFx0XFx0XFx0ZWxzZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYz04NzU9c3RhdGljIGludCBydnVfZGJnX3J2dV9md2RhdGFfZGlzcGxheShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtOTEwLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBQRl9NQUNOVU1fTUFYOyBpKyspIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jOjkxMTpcXHRcXHR1NjRfdG9fZXRoZXJfYWRkcihmd2RhdGEtXFx1MDAzZXBmX21hY3NbaV0sIG1hYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy05MTItXFx0XFx0aWYgKCFpc196ZXJvX2V0aGVyX2FkZHIobWFjKSkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy05MjQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFZGX01BQ05VTV9NQVg7IGkrKykge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmM6OTI1OlxcdFxcdHU2NF90b19ldGhlcl9hZGRyKGZ3ZGF0YS1cXHUwMDNldmZfbWFjc1tpXSwgbWFjKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jLTkyNi1cXHRcXHRpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihtYWMpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9hZi9ydnVfZGVidWdmcy5jPTI5NjE9c3RhdGljIGludCBjZ3hfcHJpbnRfZG1hY19mbHQoc3RydWN0IHNlcV9maWxlICpzLCBpbnQgbG1hY19pZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL2FmL3J2dV9kZWJ1Z2ZzLmMtMzAwMC1cXHRcXHRcXHRtYWMgPSBGSUVMRF9HRVQoQ0dYX1JYX0RNQUNfQURSX01BU0ssIGNmZyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYzozMDAxOlxcdFxcdFxcdHU2NF90b19ldGhlcl9hZGRyKG1hYywgZG1hYyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvYWYvcnZ1X2RlYnVnZnMuYy0zMDAyLVxcdFxcdFxcdHNlcV9wcmludGYocywgXFxcIiU3ZCAgICAgJXBNXFxcXG5cXFwiLCBpbmRleCwgZG1hYyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2NtZC5jPTMxNjE9aW50IG1seDRfc2V0X3ZmX3Nwb29mY2hrKHN0cnVjdCBtbHg0X2RldiAqZGV2LCBpbnQgcG9ydCwgaW50IHZmLCBib29sIHNldHRpbmcpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2NtZC5jLTMxNzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9jbWQuYzozMTc5OlxcdHU2NF90b19ldGhlcl9hZGRyKHNfaW5mby1cXHUwMDNlbWFjLCBtYWMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvY21kLmMtMzE4MC1cXHRpZiAoc2V0dGluZyBcXHUwMDI2XFx1MDAyNiAhaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jPTUzMz1zdGF0aWMgdm9pZCBtbHg0X2VuX3U2NF90b19tYWMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTY0IHNyY19tYWMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jLTUzNi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jOjUzNzpcXHR1NjRfdG9fZXRoZXJfYWRkcihzcmNfbWFjLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L2VuX25ldGRldi5jLTUzOC1cXHRldGhfaHdfYWRkcl9zZXQoZGV2LCBhZGRyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tYWluLmM9NjY9c3RhdGljIHZvaWQgbWx4YmZfZ2lnZV9pbml0aWFsX21hYyhzdHJ1Y3QgbWx4YmZfZ2lnZSAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seGJmX2dpZ2UvbWx4YmZfZ2lnZV9tYWluLmMtNzMtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bG9jYWxfbWFjKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jOjc0OlxcdHU2NF90b19ldGhlcl9hZGRyKGxvY2FsX21hYywgbWFjKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhiZl9naWdlL21seGJmX2dpZ2VfbWFpbi5jLTc1LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL3RuNDAuYz0xNTMyPXN0YXRpYyB2b2lkIHRuNDBfbWFjX2luaXQoc3RydWN0IHRuNDBfcHJpdiAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS90bjQwLmMtMTU0MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvdG40MC5jOjE1NDE6XFx0dTY0X3RvX2V0aGVyX2FkZHIodmFsLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvdG40MC5jLTE1NDItXFx0ZXRoX2h3X2FkZHJfc2V0KHByaXYtXFx1MDAzZW5kZXYsIGFkZHIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYz05NDg9aW50IG13aWZpZXhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBtd2lmaWV4X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTk3NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjk3NjpcXHR1NjRfdG9fZXRoZXJfYWRkcihtYWNfYWRkciwgcHJpdi1cXHUwMDNlY3Vycl9hZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jLTk3Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbXdpZmlleC9tYWluLmMtOTgyLVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL213aWZpZXgvbWFpbi5jOjk4MzpcXHRcXHR1NjRfdG9fZXRoZXJfYWRkcihvbGRfbWFjX2FkZHIsIHByaXYtXFx1MDAzZWN1cnJfYWRkcik7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9td2lmaWV4L21haW4uYy05ODQtXFx0XFx0bXdpZmlleF9kYmcocHJpdi1cXHUwMDNlYWRhcHRlciwgRVJST1IsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmM9OTIzPWludCBueHB3aWZpX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3Qgbnhwd2lmaV9wcml2YXRlICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbnhwL254cHdpZmkvbWFpbi5jLTk0Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmM6OTQ4OlxcdHU2NF90b19ldGhlcl9hZGRyKG1hY19hZGRyLCBwcml2LVxcdTAwM2VjdXJyX2FkZHIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL254cC9ueHB3aWZpL21haW4uYy05NDktXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMtOTU0LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmM6OTU1OlxcdFxcdHU2NF90b19ldGhlcl9hZGRyKG9sZF9tYWNfYWRkciwgcHJpdi1cXHUwMDNlY3Vycl9hZGRyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9ueHAvbnhwd2lmaS9tYWluLmMtOTU2LVxcdFxcdG54cHdpZmlfZGJnKHByaXYtXFx1MDAzZWFkYXB0ZXIsIEVSUk9SLFxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTQ2ND1zdGF0aWMgaW5saW5lIHU2NCBldGhlcl9hZGRyX3RvX3U2NChjb25zdCB1OCAqYWRkcilcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC00NzUtLyoqXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjQ3NjogKiB1NjRfdG9fZXRoZXJfYWRkciAtIENvbnZlcnQgYSB1NjQgdG8gYW4gRXRoZXJuZXQgYWRkcmVzcy5cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNDc3LSAqIEB1OiB1NjQgdG8gY29udmVydCB0byBhbiBFdGhlcm5ldCBNQUMgYWRkcmVzc1xcbi0tXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTQ3OS0gKi9cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NDgwOnN0YXRpYyBpbmxpbmUgdm9pZCB1NjRfdG9fZXRoZXJfYWRkcih1NjQgdSwgdTggKmFkZHIpXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTQ4MS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg9NDk1PXN0YXRpYyBpbmxpbmUgdm9pZCBldGhfYWRkcl9kZWModTggKmFkZHIpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNDk5LVxcdHUtLTtcXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NTAwOlxcdHU2NF90b19ldGhlcl9hZGRyKHUsIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC01MDEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oPTUwNz1zdGF0aWMgaW5saW5lIHZvaWQgZXRoX2FkZHJfaW5jKHU4ICphZGRyKVxcbi0tXFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTUxMS1cXHR1Kys7XFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oOjUxMjpcXHR1NjRfdG9fZXRoZXJfYWRkcih1LCBhZGRyKTtcXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNTEzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaD01MjE9c3RhdGljIGlubGluZSB2b2lkIGV0aF9hZGRyX2FkZCh1OCAqYWRkciwgbG9uZyBvZmZzZXQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtNTI1LVxcdHUgKz0gb2Zmc2V0O1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDo1MjY6XFx0dTY0X3RvX2V0aGVyX2FkZHIodSwgYWRkcik7XFxuaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oLTUyNy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg9NjA0PXN0YXRpYyBpbmxpbmUgdm9pZCBldGhfaHdfYWRkcl9nZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmJhc2VfYWRkcixcXG4tLVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC02MTAtXFx0dSArPSBpZDtcXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmg6NjExOlxcdHU2NF90b19ldGhlcl9hZGRyKHUsIGFkZHIpO1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC02MTItXFx0ZXRoX2h3X2FkZHJfc2V0KGRldiwgYWRkcik7XFxuLS1cXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oPTgyOTE9c3RhdGljIGlubGluZSB2b2lkIGNmZzgwMjExX2dlbl9uZXdfYnNzaWQoY29uc3QgdTggKmJzc2lkLCB1OCBtYXhfYnNzaWQsXFxuLS1cXG5pbmNsdWRlL25ldC9jZmc4MDIxMS5oLTgzMDEtXFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaDo4MzAyOlxcdHU2NF90b19ldGhlcl9hZGRyKG5ld19ic3NpZF91NjQsIG5ld19ic3NpZCk7XFxuaW5jbHVkZS9uZXQvY2ZnODAyMTEuaC04MzAzLX1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jPTkzOT1iYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnkoc3RydWN0IHNrX2J1ZmYgKm1zZywgdTMyIHBvcnRpZCxcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTk1Ny1cXHR1NjRfbWFjID0gYXRvbWljNjRfcmVhZChcXHUwMDI2ZGF0X2VudHJ5LVxcdTAwM2VtYWNfYWRkcik7XFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM6OTU4OlxcdHU2NF90b19ldGhlcl9hZGRyKHU2NF9tYWMsIG1hYyk7XFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtOTU5LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9MTIzND1ib29sIGJhdGFkdl9kYXRfc25vb3Bfb3V0Z29pbmdfYXJwX3JlcXVlc3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTEyNzYtXFx0XFx0dTY0X21hYyA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNmRhdF9lbnRyeS1cXHUwMDNlbWFjX2FkZHIpO1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjEyNzc6XFx0XFx0dTY0X3RvX2V0aGVyX2FkZHIodTY0X21hYywgbWFjKTtcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMjc4LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9MTM0Mz1ib29sIGJhdGFkdl9kYXRfc25vb3BfaW5jb21pbmdfYXJwX3JlcXVlc3Qoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jLTEzODMtXFx0dTY0X21hYyA9IGF0b21pYzY0X3JlYWQoXFx1MDAyNmRhdF9lbnRyeS1cXHUwMDNlbWFjX2FkZHIpO1xcbm5ldC9iYXRtYW4tYWR2L2Rpc3RyaWJ1dGVkLWFycC10YWJsZS5jOjEzODQ6XFx0dTY0X3RvX2V0aGVyX2FkZHIodTY0X21hYywgbWFjKTtcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xMzg1LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmM9MTQ3Mz1ib29sIGJhdGFkdl9kYXRfc25vb3BfaW5jb21pbmdfYXJwX3JlcGx5KHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYy0xNTE1LVxcdFxcdHU2NF9tYWMgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZkYXRfZW50cnktXFx1MDAzZW1hY19hZGRyKTtcXG5uZXQvYmF0bWFuLWFkdi9kaXN0cmlidXRlZC1hcnAtdGFibGUuYzoxNTE2OlxcdFxcdHU2NF90b19ldGhlcl9hZGRyKHU2NF9tYWMsIG1hYyk7XFxubmV0L2JhdG1hbi1hZHYvZGlzdHJpYnV0ZWQtYXJwLXRhYmxlLmMtMTUxNy1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2xpYi5zaD0xMDkyPWV0aGVyX2FkZHJfdG9fdTY0KClcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2xpYi5zaC0xMTA5LVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2xpYi5zaDoxMTEwOnU2NF90b19ldGhlcl9hZGRyKClcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9saWIuc2gtMTExMS17XFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvZm9yd2FyZGluZy9saWIuc2g9MjI5Nj1oYXNfdW5pY2FzdF9mbHQoKVxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvbGliLnNoLTIzMDQtXFx0aXAgbGluayBhZGQgbGluayAkZGV2IG5hbWUgbWFjdmxhbi10bXAgdHlwZSBtYWN2bGFuIG1vZGUgcHJpdmF0ZVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9mb3J3YXJkaW5nL2xpYi5zaDoyMzA1OlxcdGlwIGxpbmsgc2V0IG1hY3ZsYW4tdG1wIGFkZHJlc3MgJCh1NjRfdG9fZXRoZXJfYWRkciAkKCh0bXAgKyAxKSkpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L2ZvcndhcmRpbmcvbGliLnNoLTIzMDYtXFx0aXAgbGluayBzZXQgbWFjdmxhbi10bXAgdXBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzU6MDIuNTYzMDQxNDg0WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1NDA0OTY3MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgbmV0d29ya2luZyBrZXJuZWwgZXhwZXJ0OlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgdTY0X3RvX2V0aGVyX2FkZHJgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgdTY0X3RvX2V0aGVyX2FkZHJgIGluIGBpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmhgLiBJJ20gZ3Vlc3NpbmcgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgY29udmVydGluZyBhIDY0LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGludG8gYW4gRXRoZXJuZXQgTUFDIGFkZHJlc3MgZm9ybWF0LCBsaWtlbHkgcmVwcmVzZW50ZWQgYXMgYSBgc3RydWN0IGV0aGVyX2FkZHJgIG9yIGEgYHU4WzZdYC4gR2l2ZW4gdGhhdCBpdCdzIGluIGEgaGVhZGVyIGZpbGUsIGl0J3MgcHJvYmFibHkgYW4gaW5saW5lIGZ1bmN0aW9uIG9yIGEgbWFjcm8uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBjb252ZXJzaW9uIOKAkyB3aGV0aGVyIGl0J3Mgc2ltcGx5IGEgYml0d2lzZSBvcGVyYXRpb24sIGEgc2hpZnQsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggdG8gZGVhbCB3aXRoIGVuZGlhbm5lc3Mgb3IgcG90ZW50aWFsIHZhbGlkYXRpb24uIE15IG1haW4gY29uY2VybiBpcyBob3cgZWZmaWNpZW50IGFuZCBzYWZlIHRoaXMgaXMuIEFyZSB0aGVyZSBhbnkgZWRnZSBjYXNlcz8gRG9lcyBpdCBwZXJmb3JtIGFueSBlcnJvciBjaGVja2luZyBvbiB0aGUgaW5wdXQgYHU2NGA/IEknZCBleHBlY3QgaXQgdG8gaGFuZGxlIHRoZSBieXRlIG9yZGVyIGNvcnJlY3RseSB3aGVuIGNvbnN0cnVjdGluZyB0aGUgTUFDIGFkZHJlc3Mgc2luY2UgdGhlc2UgdmFsdWVzIGFyZSBhbHdheXMgcmVwcmVzZW50ZWQgaW4gbmV0d29yayBieXRlIG9yZGVyIHdoaWNoIGlzIGJpZy1lbmRpYW4sIHdoZXJlYXMgdGhlIGtlcm5lbCBjb3VsZCBiZSBydW5uaW5nIG9uIGVpdGhlciBhIGJpZyBvciBsaXR0bGUgZW5kaWFuIGFyY2hpdGVjdHVyZS4gSSB3YW50IHRvIGNoZWNrIGZvciBhbnkgcG90ZW50aWFsIG92ZXJmbG93IHNpdHVhdGlvbnMgdGhhdCBjb3VsZCBsZWFkIHRvIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy4gTGV0J3Mgc2VlIGhvdyBpdCdzIGFjdHVhbGx5IGltcGxlbWVudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTM2MCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM1OjA1LjEwMzU0MTcxM1oiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MDM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNDc1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDc1OlxcdC8qKlxcbiA0NzY6XFx0ICogdTY0X3RvX2V0aGVyX2FkZHIgLSBDb252ZXJ0IGEgdTY0IHRvIGFuIEV0aGVybmV0IGFkZHJlc3MuXFxuIDQ3NzpcXHQgKiBAdTogdTY0IHRvIGNvbnZlcnQgdG8gYW4gRXRoZXJuZXQgTUFDIGFkZHJlc3NcXG4gNDc4OlxcdCAqIEBhZGRyOiBQb2ludGVyIHRvIGEgc2l4LWJ5dGUgYXJyYXkgdG8gY29udGFpbiB0aGUgRXRoZXJuZXQgYWRkcmVzc1xcbiA0Nzk6XFx0ICovXFxuIDQ4MDpcXHRzdGF0aWMgaW5saW5lIHZvaWQgdTY0X3RvX2V0aGVyX2FkZHIodTY0IHUsIHU4ICphZGRyKVxcbiA0ODE6XFx0e1xcbiA0ODI6XFx0XFx0aW50IGk7XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdGZvciAoaSA9IEVUSF9BTEVOIC0gMTsgaSBcXHUwMDNlPSAwOyBpLS0pIHtcXG4gNDg1OlxcdFxcdFxcdGFkZHJbaV0gPSB1IFxcdTAwMjYgMHhmZjtcXG4gNDg2OlxcdFxcdFxcdHUgPSB1IFxcdTAwM2VcXHUwMDNlIDg7XFxuIDQ4NzpcXHRcXHR9XFxuIDQ4ODpcXHR9XFxuIDQ4OTpcXHRcXG4gNDkwOlxcdC8qKlxcbiA0OTE6XFx0ICogZXRoX2FkZHJfZGVjIC0gRGVjcmVtZW50IHRoZSBnaXZlbiBNQUMgYWRkcmVzc1xcbiA0OTI6XFx0ICpcXG4gNDkzOlxcdCAqIEBhZGRyOiBQb2ludGVyIHRvIGEgc2l4LWJ5dGUgYXJyYXkgY29udGFpbmluZyBFdGhlcm5ldCBhZGRyZXNzIHRvIGRlY3JlbWVudFxcbiA0OTQ6XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM1OjA1LjEwMzYxMzI1M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDM0NjM5NDYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEV0aGVyIEFkZHJlc3MgQ29weSBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBldGhlcl9hZGRyX2NvcHlgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uc3RyYWludHMuIEFjY29yZGluZyB0byB0aGUgaGVhZGVyIGZpbGUsIHNwZWNpZmljYWxseSBgaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oYCwgdGhlIGZ1bmN0aW9uIGV4cGVjdHMgdGhlIHNvdXJjZSBwb2ludGVyIChgc3JjYCkgYW5kIHRoZSBkZXN0aW5hdGlvbiBwb2ludGVyIChgZHN0YCkgdG8gYmUgYWxpZ25lZCB0byBgdTE2YC4gSXQgdXNlcyB0aGF0IGFsaWdubWVudCB0byBhY2Nlc3MgYHUxNmAgdW5pdHMuIEdvdCBpdC4gU28sIGFsaWdubWVudCBpcyBrZXkgaGVyZSB0byBhdm9pZCBwb3RlbnRpYWwgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXNzdWVzLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaW4gYGluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaGAgYXJvdW5kIGBldGhlcl9hZGRyX2NvcHlgIHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBvciBwZXJoYXBzIHRvIHNlZSBpZiB0aGVyZSBpcyBhbnl0aGluZyBJIGNhbiBsZXZlcmFnZSBmb3IgbXkgdXNlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMDE0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozNToyNS40NTAwMTAxMThaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTU3MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0YXRpYyBpbmxpbmUgdm9pZCBldGhlcl9hZGRyX2NvcHlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9ldGhlcmRldmljZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaD0yOTA9c3RhdGljIGlubGluZSB1MzIgZXRoX2h3X2FkZHJfY3JjKHN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGEpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V0aGVyZGV2aWNlLmgtMzAxLSAqL1xcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaDozMDI6c3RhdGljIGlubGluZSB2b2lkIGV0aGVyX2FkZHJfY29weSh1OCAqZHN0LCBjb25zdCB1OCAqc3JjKVxcbmluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaC0zMDMte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozNToyNS40OTY1NzAzMDdaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2NjA0OTg5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBldGhlcl9hZGRyX2NvcHlgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbiBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBldGhlcl9hZGRyX2NvcHlgIGZ1bmN0aW9uLiBJIHdhbnQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgY29udGV4dCB3aGVyZSBpdCBpcyBiZWluZyB1c2VkLiBJIGtub3cgdGhpcyBpcyBhIHByZXR0eSBiYXNpYyBmdW5jdGlvbiwgcHJvYmFibHkganVzdCBjb3B5aW5nIHRoZSBNQUMgYWRkcmVzcywgYnV0IEkgd2FudCB0byBlbnN1cmUgdGhhdCBJIHJlbWVtYmVyIGFsbCBkZXRhaWxzIHRvIHZlcmlmeSB0aGF0IGl0J3MgZG9pbmcgcHJlY2lzZWx5IHdoYXQgaXQgbmVlZHMgdG8gZG8sIHdpdGhvdXQgYW55IG92ZXJoZWFkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBvYnZpb3VzIGdvdGNoYXMgbGlrZSBwb3RlbnRpYWwgYWxpZ25tZW50IGlzc3Vlcywgb3ZlcmxhcCwgb3Igd2hldGhlciBpdCdzIG9wdGltaXplZCBpbiB0aGUgY29tbW9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSB1bmRlcmx5aW5nIGNvbXBpbGVyIG9yIGFyY2hpdGVjdHVyZS4gSSB3aWxsIGV2YWx1YXRlIHRoZSBmdW5jdGlvbidzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBzaXplIG9mIHRoZSBNQUMgYWRkcmVzcyB0byBlbnN1cmUgaXQgbWF0Y2hlcyBhbnkgbmV0d29yayBpbnRlcmZhY2UgY29udHJvbGxlciByZXF1aXJlbWVudHMgSSBtaWdodCBiZSBkZXNpZ25pbmcvZGVidWdnaW5nLiBJcyBpdCBhIHN0cmFpZ2h0IG1lbW9yeSBjb3B5LCBvciBhcmUgdGhlcmUgYW55IGJpdC1sZXZlbCBtYW5pcHVsYXRpb25zIGludm9sdmVkPyBBbnkgbm9uLW9idmlvdXMgb3B0aW1pemF0aW9ucyB0aGF0IGFyZSB1c2VkPyBJdCdzIGFsd2F5cyB3b3J0aCByZXZpc2l0aW5nIHRoZSBmdW5kYW1lbnRhbHMsIGVzcGVjaWFsbHkgd2l0aCBzb21ldGhpbmcgdGhpcyBsb3ctbGV2ZWwuIEknbGwgYWxzbyBiZSB3YXRjaGluZyBvdXQgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIHRoZSBmdW5jdGlvbiBpc24ndCB0aHJlYWQtc2FmZSwgb3IgaWYgdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYnVmZmVycyBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgY29ycmVjdGx5IGFsaWduZWQuIEkgd2lsbCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBjb3B5IGlzIGNvcnJlY3RseSBoYW5kbGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBlcnJvciBjb25kaXRpb25zIGFyZSBjb3JyZWN0bHkgaGFuZGxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0MjIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozNTozNy4xNTcwNzIwOTFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvZXRoZXJkZXZpY2UuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTU6XFx0LyoqXFxuIDI5NjpcXHQgKiBldGhlcl9hZGRyX2NvcHkgLSBDb3B5IGFuIEV0aGVybmV0IGFkZHJlc3NcXG4gMjk3OlxcdCAqIEBkc3Q6IFBvaW50ZXIgdG8gYSBzaXgtYnl0ZSBhcnJheSBFdGhlcm5ldCBhZGRyZXNzIGRlc3RpbmF0aW9uXFxuIDI5ODpcXHQgKiBAc3JjOiBQb2ludGVyIHRvIGEgc2l4LWJ5dGUgYXJyYXkgRXRoZXJuZXQgYWRkcmVzcyBzb3VyY2VcXG4gMjk5OlxcdCAqXFxuIDMwMDpcXHQgKiBQbGVhc2Ugbm90ZTogZHN0IFxcdTAwMjYgc3JjIG11c3QgYm90aCBiZSBhbGlnbmVkIHRvIHUxNi5cXG4gMzAxOlxcdCAqL1xcbiAzMDI6XFx0c3RhdGljIGlubGluZSB2b2lkIGV0aGVyX2FkZHJfY29weSh1OCAqZHN0LCBjb25zdCB1OCAqc3JjKVxcbiAzMDM6XFx0e1xcbiAzMDQ6XFx0I2lmIGRlZmluZWQoQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MpXFxuIDMwNTpcXHRcXHQqKHUzMiAqKWRzdCA9ICooY29uc3QgdTMyICopc3JjO1xcbiAzMDY6XFx0XFx0Kih1MTYgKikoZHN0ICsgNCkgPSAqKGNvbnN0IHUxNiAqKShzcmMgKyA0KTtcXG4gMzA3OlxcdCNlbHNlXFxuIDMwODpcXHRcXHR1MTYgKmEgPSAodTE2ICopZHN0O1xcbiAzMDk6XFx0XFx0Y29uc3QgdTE2ICpiID0gKGNvbnN0IHUxNiAqKXNyYztcXG4gMzEwOlxcdFxcbiAzMTE6XFx0XFx0YVswXSA9IGJbMF07XFxuIDMxMjpcXHRcXHRhWzFdID0gYlsxXTtcXG4gMzEzOlxcdFxcdGFbMl0gPSBiWzJdO1xcbiAzMTQ6XFx0I2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM1OjM3LjE1NzE3ODAzMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNDMxMjA5MjU4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBBbGlnbm1lbnQgSXNzdWVzIGluIGJhdG1hbi1hZHYqKlxuXG5Pa2F5LCBzbyB0aGUgYGV0aGVyX2FkZHJfY29weWAgZnVuY3Rpb24gaGFzIHRoaXMgcmVxdWlyZW1lbnQgdGhhdCBib3RoIHRoZSBkZXN0aW5hdGlvbiAoYGRzdGApIGFuZCBzb3VyY2UgKGBzcmNgKSBtZW1vcnkgYWRkcmVzc2VzIG5lZWQgdG8gYmUgYWxpZ25lZCB0byBhIGB1MTZgIGJvdW5kYXJ5LiBUaGlzIHdob2xlIHNsZXcgb2YgY2hhbmdlcyBpbiBgYmF0bWFuLWFkdmAgYXJlIGFkZHJlc3NpbmcgcG90ZW50aWFsbHkgdW5hbGlnbmVkIG1lbW9yeSBhY2Nlc3NlcywgZXNwZWNpYWxseSBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlIHVuYWxpZ25lZCBhY2Nlc3MgaXNuJ3QgaGFuZGxlZCBlZmZpY2llbnRseS4gVGhlIGludHJvZHVjdGlvbiBvZiBgX19hbGlnbmVkKDIpYCB0byBgdTggbWFjW0VUSF9BTEVOXWAgYXJyYXlzIGlzIHRoZSB0ZWxsLiBJIGtub3cgS0FTQU4gYW5kIFVCU0FOIHdpbGwgY2F0Y2ggdW5hbGlnbmVkIGFjY2VzcyBvciBib3VuZGFyeSB2aW9sYXRpb25zLCBidXQgYWxpZ25tZW50IGl0c2VsZiBkb2Vzbid0IG1lYW4gdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLiBXZSBuZWVkIHRvIGJlIGNhcmVmdWwuXG5cbkxldCdzIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUsIHN0YXJ0aW5nIHdpdGggYHRyYW5zbGF0aW9uLXRhYmxlLmNgLiBJJ2xsIGZvY3VzIG9uIHRoZSBjaGFuZ2VzIGluIHRoZSBgYmF0YWR2X3R0X2xvY2FsX2V2ZW50YCBmdW5jdGlvbi5cblxuYGBgY1xuXHR0dF9jaGFuZ2Vfbm9kZSA9IGttZW1fY2FjaGVfYWxsb2MoYmF0YWR2X3R0X2NoYW5nZV9jYWNoZSwgR0ZQX0FUT01JQyk7XG5cdGlmICghdHRfY2hhbmdlX25vZGUpXG5cdFx0cmV0dXJuO1xuXG5cdG1lbXNldCh0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UucmVzZXJ2ZWQsIDAsXG5cdCAgICAgICBzaXplb2YodHRfY2hhbmdlX25vZGUtXHUwMDNlY2hhbmdlLnJlc2VydmVkKSk7XG5cdGV0aGVyX2FkZHJfY29weSh0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UuYWRkciwgY29tbW9uLVx1MDAzZWFkZHIpO1xuXHR0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UudmlkID0gaHRvbnMoY29tbW9uLVx1MDAzZXZpZCk7XG5cblx0ZmxhZ3MgPSBiYXRhZHZfdHRfZmxhZ3NfZ2V0KGNvbW1vbikgfCBldmVudF9mbGFncztcblxuXHR0dF9jaGFuZ2Vfbm9kZS1cdTAwM2VjaGFuZ2UuZmxhZ3MgPSBmbGFncztcblx0ZGVsX29wX3JlcXVlc3RlZCA9IGZsYWdzIFx1MDAyNiBCQVRBRFZfVFRfQ0xJRU5UX0RFTDtcbmBgYFxuXG5Mb29raW5nIGF0IHRoaXMsIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgdHRfY2hhbmdlX25vZGUtXHUwMDNlY2hhbmdlYCwgSSBzZWUgYSBmZXcga2V5IGluaXRpYWxpemF0aW9ucy4gVGhlIGBmbGFnc2AgZmllbGQgaXMgYXNzaWduZWQgYSB2YWx1ZS4gVGhlIGByZXNlcnZlZGAgZmllbGQgaXMgc3BlY2lmaWNhbGx5IHplcm9lZCBvdXQgd2l0aCBgbWVtc2V0YC4gVGhlIGBhZGRyYCBmaWVsZCBpcyBjb3BpZWQgdXNpbmcgYGV0aGVyX2FkZHJfY29weWAsIHdoaWNoIGlzIGdvb2QgYmVjYXVzZSB3ZSBleHBlY3QgdGhhdCB0byBoYW5kbGUgdGhlIGFsaWdubWVudCBjb3JyZWN0bHkuIFRoZSBgdmlkYCBmaWVsZCBpcyBpbml0aWFsaXplZCB3aXRoIGBodG9uc2AuIEp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJ2xsIGRvdWJsZS1jaGVjayB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGVgIGl0c2VsZiB0byBtYWtlIGNlcnRhaW4gdGhhdCBhbGwgbWVtYmVycyB3aXRoaW4gdGhlIGVtYmVkZGVkIGBjaGFuZ2VgIHN0cnVjdCBhcmUsIGluIGZhY3QsIGdldHRpbmcgYXBwcm9wcmlhdGVseSBpbml0aWFsaXplZC4gQWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMTEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzU6NTEuNDY5Mjc0OTYyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjA0MDkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9iYXRtYW4tYWR2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTQ2OD1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfbG9jYWxfZXZlbnQoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDcyLVxcdHN0cnVjdCBiYXRhZHZfdHRfY29tbW9uX2VudHJ5ICpjb21tb24gPSBcXHUwMDI2dHRfbG9jYWxfZW50cnktXFx1MDAzZWNvbW1vbjtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ3MzpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICp0dF9jaGFuZ2Vfbm9kZTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ3NDpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICplbnRyeTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjQ3NTpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICpzYWZlO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDc2LVxcdGJvb2wgZGVsX29wX3JlcXVlc3RlZDtcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MTA5Nj1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfdHZsdl9jb250YWluZXJfdXBkYXRlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEwOTgtXFx0c3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSAqdHRfY2hhbmdlO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTA5OTpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICplbnRyeTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTExMDAtXFx0c3RydWN0IGJhdGFkdl90dmx2X3R0X2RhdGEgKnR0X2RhdGE7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMTAxOlxcdHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKnNhZmU7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMTAyLVxcdGludCB0dF9kaWZmX2VudHJpZXNfY291bnQgPSAwO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0xNTkxPXN0YXRpYyB2b2lkIGJhdGFkdl90dF9jaGFuZ2VzX2xpc3RfZnJlZShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2KVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTU5Mi17XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxNTkzOlxcdHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKmVudHJ5O1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTU5NDpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlICpzYWZlO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTU5NS1cXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9NDYwMD1pbnQgX19pbml0IGJhdGFkdl90dF9jYWNoZV9pbml0KHZvaWQpXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQ2MDItXFx0c2l6ZV90IHR0X29yaWdfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R0X29yaWdfbGlzdF9lbnRyeSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0NjAzOlxcdHNpemVfdCB0dF9jaGFuZ2Vfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlKTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQ2MDQtXFx0c2l6ZV90IHR0X3JvYW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R0X3JvYW1fbm9kZSk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTE5MTM9c3RydWN0IGJhdGFkdl90dF9vcmlnX2xpc3RfZW50cnkge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC0xOTM2LS8qKlxcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTkzNzogKiBzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlIC0gc3RydWN0dXJlIGZvciB0dCBjaGFuZ2VzIG9jY3VycmVkXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaC0xOTM4LSAqL1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmg6MTkzOTpzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlIHtcXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTE5NDAtXFx0LyoqIEBsaXN0OiBsaXN0IG5vZGUgZm9yIFxcdTAwMjZiYXRhZHZfcHJpdl90dC5jaGFuZ2VzX2xpc3QgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMzFUMjA6MzU6NTEuNTE1MzI0MTgyWiIsIlNlcSI6NDMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYyODIxNDY4MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgdHlwZXMuaGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gemVybyBpbiBvbiBzb21ldGhpbmcgc3BlY2lmaWMsIGFuZCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayBgdHlwZXMuaGAuIEknbSB0aGlua2luZywgbGlrZWx5IHRoZSBpc3N1ZSBJJ20gY2hhc2luZyBpcyB3aXRoaW4gdGhlIGRlZmluaXRpb25zIG9yIGRlY2xhcmF0aW9ucyByZWxhdGVkIHRvIHRoZSBkYXRhIHN0cnVjdHVyZXMgaW52b2x2ZWQuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgYXQgbGluZXMgMTkzNSB0aHJvdWdoIDE5NTAuIFRoYXQgcmFuZ2UgdXN1YWxseSBjb3ZlcnMgYSBwYXJ0aWN1bGFyIGdyb3VwaW5nIG9yIHJlbGF0ZWQgZGVmaW5pdGlvbnMsIGFuZCBpcyBsaWtlbHkgd2hlcmUgSSdsbCBmaW5kIHdoYXQgSSdtIGxvb2tpbmcgZm9yLiBUaGlzIHNob3VsZCBwcm92aWRlIHNvbWUgc29saWQgbGVhZHMuIExldCdzIHNlZSB3aGF0J3MgdGhlcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MzEsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozNTo1Ny43OTc0NzMxNDFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9iYXRtYW4tYWR2L3R5cGVzLmhcIixcbiAgXCJGaXJzdExpbmVcIjogMTkzNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTkzNTpcXHRcXG4xOTM2OlxcdC8qKlxcbjE5Mzc6XFx0ICogc3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSAtIHN0cnVjdHVyZSBmb3IgdHQgY2hhbmdlcyBvY2N1cnJlZFxcbjE5Mzg6XFx0ICovXFxuMTkzOTpcXHRzdHJ1Y3QgYmF0YWR2X3R0X2NoYW5nZV9ub2RlIHtcXG4xOTQwOlxcdFxcdC8qKiBAbGlzdDogbGlzdCBub2RlIGZvciBcXHUwMDI2YmF0YWR2X3ByaXZfdHQuY2hhbmdlc19saXN0ICovXFxuMTk0MTpcXHRcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuMTk0MjpcXHRcXG4xOTQzOlxcdFxcdC8qKiBAY2hhbmdlOiBob2xkcyB0aGUgYWN0dWFsIHRyYW5zbGF0aW9uIHRhYmxlIGRpZmYgZGF0YSAqL1xcbjE5NDQ6XFx0XFx0c3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSBjaGFuZ2U7XFxuMTk0NTpcXHR9O1xcbjE5NDY6XFx0XFxuMTk0NzpcXHQvKipcXG4xOTQ4OlxcdCAqIHN0cnVjdCBiYXRhZHZfdHRfcmVxX25vZGUgLSBkYXRhIHRvIGtlZXAgdHJhY2sgb2YgdGhlIHR0IHJlcXVlc3RzIGluIGZsaWdodFxcbjE5NDk6XFx0ICovXFxuMTk1MDpcXHRzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlIHtcXG4xOTUxOlxcdFxcdC8qKlxcbjE5NTI6XFx0XFx0ICogQGFkZHI6IG1hYyBhZGRyZXNzIG9mIHRoZSBvcmlnaW5hdG9yIHRoaXMgcmVxdWVzdCB3YXMgc2VudCB0b1xcbjE5NTM6XFx0XFx0ICovXFxuMTk1NDpcXHRcXHR1OCBhZGRyW0VUSF9BTEVOXSBfX2FsaWduZWQoMik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM1OjU3Ljc5NzU4NDA3MVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1Mjk4OTk5MTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3MsIGZvY3VzaW5nIG9uIGBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlYDpcblxuKipEaXZpbmcgaW50byB0aGUgYGJhdGFkdl90dmx2X3R0X2NoYW5nZWAgU3RydWN0dXJlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2VgLiBJbW1lZGlhdGVseSwgSSdtIHRoaW5raW5nIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgYmF0YWR2IGZyYW1ld29yay4gSXQncyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gbWFuYWdpbmcgYW5kIHNpZ25hbGluZyBjaGFuZ2VzIHdpdGhpbiB0aGUgVHVubmVsaW5nIFZMQU4tYXdhcmUgTGluayBTdGF0ZSBUYWJsZSBWZWN0b3IgKFRWTFYpIG1lY2hhbmlzbSwgZ2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb25zIGFyZTpcblxuKiAgIFdoYXQgc3BlY2lmaWMgcGFyYW1ldGVycyBkb2VzIGl0IGVuY29tcGFzcz9cbiogICBXaGF0IHRyaWdnZXJzIHRoZSBjcmVhdGlvbiBvciBtb2RpZmljYXRpb24gb2YgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3Q/IElzIGl0IGEgY2hhbmdlIGluIG5ldHdvcmsgdG9wb2xvZ3ksIGFuIHVwZGF0ZSBpbiBWTEFOIGNvbmZpZ3VyYXRpb24sIG9yIHBlcmhhcHMgYSB0aW1lci1iYXNlZCBjaGVjaz9cbiogICBIb3cgaXMgdGhpcyBzdHJ1Y3R1cmUgdXNlZCBpbiByZWxhdGlvbiB0byBvdGhlciBiYXRhZHYgZGF0YSBzdHJ1Y3R1cmVzLCBzdWNoIGFzIHRoZSBUVkxWIHRhYmxlIGl0c2VsZiwgYW5kIHdoaWNoIGZ1bmN0aW9ucyBsZXZlcmFnZSBpdD9cbiogICBJcyB0aGlzIHN0cnVjdHVyZSBzcGVjaWZpYyB0byBhIGNlcnRhaW4gYmF0YWR2IHZlcnNpb24gb3IgaXMgaXQgbW9yZSBnZW5lcmljP1xuKiAgIERvZXMgaXQgcmVsYXRlIHRvIHNlY3VyaXR5IGFzcGVjdHMgb2YgdGhlIGJhdGFkdiBmcmFtZXdvcms/XG5cbkkgZXhwZWN0IHRvIHNlZSBtZW1iZXJzIHRoYXQgZGVzY3JpYmUgdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlIChlLmcuLCBhZGQsIGRlbGV0ZSwgbW9kaWZ5KSwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbGV2YW50IFRWTFYgZW50cnkgb3IgZW50cmllcywgdGltZXN0YW1wcywgYW5kIGxpa2VseSBzb21lIHNvcnQgb2YgY29udGV4dCB0aGF0IGFsbG93cyB0aGUgZnJhbWV3b3JrIHRvIGhhbmRsZSB0aGUgdXBkYXRlIGdyYWNlZnVsbHksIHBvc3NpYmx5IGluY2x1ZGluZyBmbGFncyB0byBoYW5kbGUgcmFjZXMvY29uY3VycmVuY3kuIEl0J3MgbGlrZWx5IHRoYXQgYSBsaW5rZWQgbGlzdCBvciBzaW1pbGFyIG1lY2hhbmlzbSBpcyBpbnZvbHZlZCBmb3IgcXVldWluZyBvciBwcm9jZXNzaW5nIHRoZXNlIGNoYW5nZSBldmVudHMuIFRoZSBkZXRhaWxzIGhlcmUgYXJlIGdvaW5nIHRvIGJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBsYXRlbmN5IGFuZCByb2J1c3RuZXNzIG9mIGJhdGFkdidzIGhhbmRsaW5nIG9mIFRWTFYgdXBkYXRlcy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIHN0cnVjdHVyZSdzIGRhdGEgbWVtYmVycyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwIHRvIHZhcmlvdXMgYmF0YWR2IGZ1bmN0aW9ucywgcGFydGljdWxhcmx5IHRob3NlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmF0YWR2IFRWTFYgc3ViLW1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDU0MjQsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM2OjAzLjA5NjU4NTY0NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MTA3NTMxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvdWFwaS9saW51eC9iYXRhZHZfcGFja2V0Lmg9NjIzPXN0cnVjdCBiYXRhZHZfdHZsdl90dF9kYXRhIHtcXG4tLVxcbmluY2x1ZGUvdWFwaS9saW51eC9iYXRhZHZfcGFja2V0LmgtNjMwLS8qKlxcbmluY2x1ZGUvdWFwaS9saW51eC9iYXRhZHZfcGFja2V0Lmg6NjMxOiAqIHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgLSB0cmFuc2xhdGlvbiB0YWJsZSBkaWZmIGRhdGFcXG5pbmNsdWRlL3VhcGkvbGludXgvYmF0YWR2X3BhY2tldC5oLTYzMi0gKiBAZmxhZ3M6IHN0YXR1cyBpbmRpY2F0b3JzIGNvbmNlcm5pbmcgdGhlIG5vbi1tZXNoIGNsaWVudCAoc2VlXFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgvYmF0YWR2X3BhY2tldC5oLTYzNy0gKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvYmF0YWR2X3BhY2tldC5oOjYzODpzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlIHtcXG5pbmNsdWRlL3VhcGkvbGludXgvYmF0YWR2X3BhY2tldC5oLTYzOS1cXHRfX3U4ICAgZmxhZ3M7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi9tYWluLmM9NTU0PXN0YXRpYyB2b2lkIGJhdGFkdl9yZWN2X2hhbmRsZXJfaW5pdCh2b2lkKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTU3OC1cXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBiYXRhZHZfdHZsdl90dF92bGFuX2RhdGEpICE9IDgpO1xcbm5ldC9iYXRtYW4tYWR2L21haW4uYzo1Nzk6XFx0QlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlKSAhPSAxMik7XFxubmV0L2JhdG1hbi1hZHYvbWFpbi5jLTU4MC1cXHRCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBiYXRhZHZfdHZsdl9yb2FtX2FkdikgIT0gOCk7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTU0NT1zdGF0aWMgaW50IGJhdGFkdl90dF9sZW4oaW50IGNoYW5nZXNfbnVtKVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNTQ2LXtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjU0NzpcXHRyZXR1cm4gY2hhbmdlc19udW0gKiBzaXplb2Yoc3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy01NDgtfVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz05MDg9YmF0YWR2X3R0X3ByZXBhcmVfdHZsdl9nbG9iYWxfZGF0YShzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtOTA5LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBiYXRhZHZfdHZsdl90dF9kYXRhICoqdHRfZGF0YSxcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjkxMDpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICoqdHRfY2hhbmdlLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtOTExLVxcdFxcdFxcdFxcdCAgIHMzMiAqdHRfbGVuKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy05ODEtXFx0dHRfY2hhbmdlX3B0ciA9ICh1OCAqKSp0dF9kYXRhICsgY2hhbmdlX29mZnNldDtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjk4MjpcXHQqdHRfY2hhbmdlID0gKHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKil0dF9jaGFuZ2VfcHRyO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtOTgzLVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0xMDA5PWJhdGFkdl90dF9wcmVwYXJlX3R2bHZfbG9jYWxfZGF0YShzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTAxMC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfdHZsdl90dF9kYXRhICoqdHRfZGF0YSxcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjEwMTE6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICoqdHRfY2hhbmdlLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMTAxMi1cXHRcXHRcXHRcXHQgIHMzMiAqdHRfbGVuKVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMDgyLVxcdHR0X2NoYW5nZV9wdHIgPSAodTggKikqdHRfZGF0YSArIGNoYW5nZV9vZmZzZXQ7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzoxMDgzOlxcdCp0dF9jaGFuZ2UgPSAoc3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSAqKXR0X2NoYW5nZV9wdHI7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMDg0LVxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0xMDk2PXN0YXRpYyB2b2lkIGJhdGFkdl90dF90dmx2X2NvbnRhaW5lcl91cGRhdGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdilcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTEwOTcte1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MTA5ODpcXHRzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICp0dF9jaGFuZ2U7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMDk5LVxcdHN0cnVjdCBiYXRhZHZfdHRfY2hhbmdlX25vZGUgKmVudHJ5O1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMTQzLVxcdFxcdFxcdCAgICAgICBcXHUwMDI2ZW50cnktXFx1MDAzZWNoYW5nZSxcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjExNDQ6XFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlKSk7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0xMTQ1LVxcdFxcdFxcdHR0X2RpZmZfZW50cmllc19jb3VudCsrO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zMDUwPXN0YXRpYyB1MTYgYmF0YWR2X3R0X3R2bHZfZ2VuZXJhdGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzA1OC1cXHRzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeSAqdHRfY29tbW9uX2VudHJ5O1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzA1OTpcXHRzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICp0dF9jaGFuZ2U7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zMDYwLVxcdHN0cnVjdCBobGlzdF9oZWFkICpoZWFkO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zMjk3PXN0YXRpYyBib29sIGJhdGFkdl9zZW5kX290aGVyX3R0X3Jlc3BvbnNlKHN0cnVjdCBiYXRhZHZfcHJpdiAqYmF0X3ByaXYsXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTMzMDMtXFx0c3RydWN0IGJhdGFkdl9vcmlnX25vZGUgKnJlcV9kc3Rfb3JpZ19ub2RlO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzMwNDpcXHRzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICp0dF9jaGFuZ2U7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zMzA1LVxcdGJvb2wgcmV0ID0gZmFsc2U7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTM0Mjg9c3RhdGljIGJvb2wgYmF0YWR2X3NlbmRfbXlfdHRfcmVzcG9uc2Uoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzQzMy1cXHRzdHJ1Y3QgYmF0YWR2X2hhcmRfaWZhY2UgKnByaW1hcnlfaWYgPSBOVUxMO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzQzNDpcXHRzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICp0dF9jaGFuZ2U7XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNDM1LVxcdHN0cnVjdCBiYXRhZHZfb3JpZ19ub2RlICpvcmlnX25vZGU7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTM1Njk9c3RhdGljIHZvaWQgX2JhdGFkdl90dF91cGRhdGVfY2hhbmdlcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzU3MC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzU3MTpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICp0dF9jaGFuZ2UsXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNTcyLVxcdFxcdFxcdFxcdCAgICAgIHUxNiB0dF9udW1fY2hhbmdlcywgdTggdHR2bilcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM9MzYxND1zdGF0aWMgdm9pZCBiYXRhZHZfdHRfZmlsbF9ndGFibGUoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM2MTU6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICp0dF9jaGFuZ2UsXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNjE2LVxcdFxcdFxcdFxcdCAgdTggdHR2biwgdTggKnJlc3Bfc3JjLFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNjUzPXN0YXRpYyB2b2lkIGJhdGFkdl90dF91cGRhdGVfY2hhbmdlcyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNjU1LVxcdFxcdFxcdFxcdCAgICAgdTE2IHR0X251bV9jaGFuZ2VzLCB1OCB0dHZuLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzY1NjpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKnR0X2NoYW5nZSlcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTM2NTcte1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz0zNzA0PXN0YXRpYyB2b2lkIGJhdGFkdl9oYW5kbGVfdHRfcmVzcG9uc2Uoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzcwOC1cXHRzdHJ1Y3QgYmF0YWR2X29yaWdfbm9kZSAqb3JpZ19ub2RlID0gTlVMTDtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jOjM3MDk6XFx0c3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSAqdHRfY2hhbmdlO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzcxMC1cXHRzdHJ1Y3QgYmF0YWR2X3R0X3JlcV9ub2RlICpub2RlO1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy0zNzI2LVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6MzcyNzpcXHR0dF9jaGFuZ2UgPSAoc3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSAqKXR2bHZfcHRyO1xcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtMzcyOC1cXHRpZiAodHRfZGF0YS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBCQVRBRFZfVFRfRlVMTF9UQUJMRSkge1xcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYz00MTU1PXN0YXRpYyB2b2lkIGJhdGFkdl90dF91cGRhdGVfb3JpZyhzdHJ1Y3QgYmF0YWR2X3ByaXYgKmJhdF9wcml2LFxcbi0tXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYy00MTU3LVxcdFxcdFxcdFxcdCAgY29uc3Qgdm9pZCAqdHRfYnVmZiwgdTE2IHR0X251bV92bGFuLFxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmM6NDE1ODpcXHRcXHRcXHRcXHQgIHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKnR0X2NoYW5nZSxcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQxNTktXFx0XFx0XFx0XFx0ICB1MTYgdHRfbnVtX2NoYW5nZXMsIHU4IHR0dm4pXFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jPTQzNjc9c3RhdGljIHZvaWQgYmF0YWR2X3R0X3R2bHZfb2dtX2hhbmRsZXJfdjEoc3RydWN0IGJhdGFkdl9wcml2ICpiYXRfcHJpdixcXG4tLVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDM3MS17XFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0MzcyOlxcdHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgKnR0X2NoYW5nZTtcXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQzNzMtXFx0c3RydWN0IGJhdGFkdl90dmx2X3R0X2RhdGEgKnR0X2RhdGE7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jLTQzODctXFxubmV0L2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYzo0Mzg4OlxcdHR0X2NoYW5nZSA9IChzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlICopKCh2b2lkICopdHRfZGF0YVxcbm5ldC9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMtNDM4OS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICsgdHRfZGF0YV9zeik7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oPTE5Mzk9c3RydWN0IGJhdGFkdl90dF9jaGFuZ2Vfbm9kZSB7XFxuLS1cXG5uZXQvYmF0bWFuLWFkdi90eXBlcy5oLTE5NDMtXFx0LyoqIEBjaGFuZ2U6IGhvbGRzIHRoZSBhY3R1YWwgdHJhbnNsYXRpb24gdGFibGUgZGlmZiBkYXRhICovXFxubmV0L2JhdG1hbi1hZHYvdHlwZXMuaDoxOTQ0OlxcdHN0cnVjdCBiYXRhZHZfdHZsdl90dF9jaGFuZ2UgY2hhbmdlO1xcbm5ldC9iYXRtYW4tYWR2L3R5cGVzLmgtMTk0NS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozNjowNC42NTc2NjU1MDFaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY5ODA1MjQyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byB0aGUgYGJhdGFkdl90dmx2X3R0X2NoYW5nZWAgU3RydWN0dXJlKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQncyBnZXQgYSBoYW5kbGUgb24gdGhlIGBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHdoYXQgdGhpcyBzcGVjaWZpYyBzdHJ1Y3R1cmUgZW5jYXBzdWxhdGVzIHdpdGhpbiB0aGUgQmF0bWFuZCBjb2RlYmFzZS4gSXQncyBiZWVuIGEgd2hpbGUgc2luY2UgSSBsYXN0IGxvb2tlZCBkZWVwbHkgaW50byB0aGUgaW5uZXIgd29ya2luZ3Mgb2YgdGhlIFRUIChUb3BvbG9neSBUYWJsZSkgbWFuYWdlbWVudCwgc28gdGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgc3RydWN0dXJlIHRvIGFuYWx5emUgc29tZSByZWxhdGVkIGNoYW5nZSBldmVudHMsIHNvIEknbGwgZGlnIGludG8gaXRzIGRlZmluaXRpb24sIHNlZSB0aGUgc3BlY2lmaWMgZmllbGRzLCBhbmQgd2hhdCB0aG9zZSBmaWVsZHMgc2lnbmlmeS4gSXQncyB0aGUgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgbWVjaGFuaWNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODU5OSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTMxVDIwOjM2OjEwLjM1NTcyMDQyMVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDgzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L2JhdGFkdl9wYWNrZXQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA2MzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2MzA6XFx0LyoqXFxuIDYzMTpcXHQgKiBzdHJ1Y3QgYmF0YWR2X3R2bHZfdHRfY2hhbmdlIC0gdHJhbnNsYXRpb24gdGFibGUgZGlmZiBkYXRhXFxuIDYzMjpcXHQgKiBAZmxhZ3M6IHN0YXR1cyBpbmRpY2F0b3JzIGNvbmNlcm5pbmcgdGhlIG5vbi1tZXNoIGNsaWVudCAoc2VlXFxuIDYzMzpcXHQgKiAgYmF0YWR2X3R0X2NsaWVudF9mbGFncylcXG4gNjM0OlxcdCAqIEByZXNlcnZlZDogcmVzZXJ2ZWQgZmllbGQgLSB1c2VmdWwgZm9yIGFsaWdubWVudCBwdXJwb3NlcyBvbmx5XFxuIDYzNTpcXHQgKiBAYWRkcjogbWFjIGFkZHJlc3Mgb2Ygbm9uLW1lc2ggY2xpZW50IHRoYXQgdHJpZ2dlcmVkIHRoaXMgdHQgY2hhbmdlXFxuIDYzNjpcXHQgKiBAdmlkOiBWTEFOIGlkZW50aWZpZXJcXG4gNjM3OlxcdCAqL1xcbiA2Mzg6XFx0c3RydWN0IGJhdGFkdl90dmx2X3R0X2NoYW5nZSB7XFxuIDYzOTpcXHRcXHRfX3U4ICAgZmxhZ3M7XFxuIDY0MDpcXHRcXHRfX3U4ICAgcmVzZXJ2ZWRbM107XFxuIDY0MTpcXHRcXHRfX3U4ICAgYWRkcltFVEhfQUxFTl07XFxuIDY0MjpcXHRcXHRfX2JlMTYgdmlkO1xcbiA2NDM6XFx0fTtcXG4gNjQ0OlxcdFxcbiA2NDU6XFx0LyoqXFxuIDY0NjpcXHQgKiBzdHJ1Y3QgYmF0YWR2X3R2bHZfcm9hbV9hZHYgLSByb2FtaW5nIGFkdmVydGlzZW1lbnRcXG4gNjQ3OlxcdCAqIEBjbGllbnQ6IG1hYyBhZGRyZXNzIG9mIHJvYW1pbmcgY2xpZW50XFxuIDY0ODpcXHQgKiBAdmlkOiBWTEFOIGlkZW50aWZpZXJcXG4gNjQ5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozNjoxMC4zNTU4MzIwODFaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTc1MzgxNTkyNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gQXNzZXNzbWVudDogQSBUaG9yb3VnaCBSZXZpZXcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIGNvbmZpcm1lZCB0aGF0IGFsbCAxMiBieXRlcyBvZiB0aGUgYGJhdGFkdl90dmx2X3R0X2NoYW5nZWAgc3RydWN0IGFyZSBhY2NvdW50ZWQgZm9yLCB3aXRoIGFsbCBmaWVsZHMgaW5pdGlhbGl6ZWQgb3IgY29waWVkIGFwcHJvcHJpYXRlbHkg4oCTIGZsYWdzLCByZXNlcnZlZCBieXRlcyAobWVtc2V0IHRvIDApLCB0aGUgTUFDIGFkZHJlc3MgKHVzaW5nIGBldGhlcl9hZGRyX2NvcHlgKSwgYW5kIHRoZSBgdmlkYCAodXNpbmcgYGh0b25zYCkuIEkgdGhlbiBjaGVja2VkIHRoZSBuZXRsaW5rIGR1bXAgZnVuY3Rpb25zIGluIGB0cmFuc2xhdGlvbi10YWJsZS5jYC4gQm90aCBgYmF0YWR2X3R0X2xvY2FsX2R1bXBfZW50cnlgIGFuZCBgYmF0YWR2X3R0X2dsb2JhbF9kdW1wX3N1YmVudHJ5YCBleHBsaWNpdGx5IGluaXRpYWxpemUgYWxsIG5ldGxpbmsgYXR0cmlidXRlcyB3aXRoIHNjYWxhciB2YWx1ZXMgb3IgaW5pdGlhbGl6ZWQgTUFDIGFkZHJlc3MgYnl0ZXMuXG5cbk5leHQsIEkgbG9va2VkIGF0IGBiYXRhZHZfY29tcGFyZV90dF9lbnRyeWAgYW5kIGBiYXRhZHZfaGFzaF9yZW1vdmVgLiBgYmF0YWR2X2hhc2hfcmVtb3ZlYCB1c2VzIGBiYXRhZHZfY29tcGFyZV90dF9lbnRyeWAgdG8gZW5zdXJlIHRoZSBjb3JyZWN0IGVudHJ5IGlzIHJlbW92ZWQgYmFzZWQgb24gcG9pbnRlciBpZGVudGl0eSwgZWZmZWN0aXZlbHkgYWRkcmVzc2luZyBhIGxvY2tpbmcgYW5kIGxpZmV0aW1lIGNvbmNlcm4uXG5cbk5vdywgbGV0J3MgY29tcGFyZSBhbGwgdGhpcyBhZ2FpbnN0IHRoZSBLTVNBTiBjcml0ZXJpYS4gTXkgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBwYXRjaCBwcmltYXJpbHkgbW9kaWZpZXMgb3IgaW50cm9kdWNlczpcbjEuIEFkZGluZyBgX19hbGlnbmVkKDIpYCBhdHRyaWJ1dGVzIHRvIE1BQyBhZGRyZXNzIGFycmF5cyBhbmQgc3RydWN0IGZpZWxkcyBmb3IgcHJvcGVyIGFsaWdubWVudC5cbjIuIEFkZGluZyBhbmQgdXNpbmcgcGVyLWVudHJ5IHNwaW5sb2NrIHRvIHByb3RlY3QgYGNvbW1vbi1cdTAwM2VmbGFnc2AgYW5kIGByb2FtX2F0YC5cbjMuIENvcnJlY3RpbmcgZnVuY3Rpb24gcGFyYW1ldGVyIG5hbWVzIGFuZCBsb2dpY2FsIGNvbXBhcmlzb25zLlxuNC4gQ29ycmVjdGluZyBhIGRlYnVnIHByaW50IHN0YXRlbWVudC5cbjUuIEltcHJvdmluZyBoYXNoIHJlbW92YWwgbWF0Y2hpbmcuXG5cbk5vbmUgb2YgdGhlc2UgY2hhbmdlcyB0b3VjaCBvbiB0aGUgS01TQU4gY29uY2VybnMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBiZWluZyBzZW50IHRvIHVzZXJzcGFjZSwgbm8gY29uZGl0aW9uYWwgbG9naWMgZGVwZW5kaW5nIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLCBubyBuZXcgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcywgYW5kIG5vIGJvdW5kcyBjaGVja3Mgb3IgbG9naWMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBieXRlcy5cblxuSSBjYXJlZnVsbHkgdmVyaWZpZWQgdGhhdCB0aGUgbmV0bGluayBkdW1wcyBhcmUgc2FmZSwgc2VyaWFsaXppbmcgb25seSBmdWxseSBpbml0aWFsaXplZCB2YWx1ZXMgYW5kIE1BQyBhZGRyZXNzZXMuIFRoZSByZWxldmFudCBzdHJ1Y3R1cmVzIGFuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLiBTdGFuZGFyZCBzYW5pdGl6ZXJzIGxpa2UgS0FTQU4gYW5kIExPQ0tERVAgYXJlIGFscmVhZHkgaW4gcGxhY2UgdG8gaGFuZGxlIGNvbmN1cnJlbmN5LCBtZW1vcnkgc2FmZXR5LCBhbmQgbGlmZXRpbWUgaXNzdWVzLlxuXG5UaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBzaG91bGQgZGVmaW5pdGVseSBiZSBzZXQgdG8gYGZhbHNlYC4gSSBhbSBub3cgcHJlcGFyaW5nIHRoZSBmaW5hbCByZXNwb25zZSBhbmQgd2lsbCBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MTE2LCJPdXRwdXRUb2tlbnMiOjM3MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0zMVQyMDozNjoyNy44OTM5OTQwN1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGNvbnNpc3RzIG9mIHNldmVyYWwgY2xlYW51cHMgYW5kIGJ1Z2ZpeGVzIGluIGJhdG1hbi1hZHY6XFxuMS4gQWxpZ25tZW50IGFubm90YXRpb25zOiBBZGRzIGBfX2FsaWduZWQoMilgIHRvIHZhcmlvdXMgTUFDIGFkZHJlc3MgYnl0ZSBhcnJheXMgKGB1OCBhZGRyW0VUSF9BTEVOXWAsIGB1OCBvcmlnW0VUSF9BTEVOXWAsIGV0Yy4pIHRvIGVuc3VyZSAyLWJ5dGUgYWxpZ25tZW50IGZvciBvcGVyYXRpb25zIGxpa2UgYGV0aGVyX2FkZHJfY29weSgpYC5cXG4yLiBDb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpbXByb3ZlbWVudHM6IEludHJvZHVjZXMgYGZsYWdzX2xvY2tgIHNwaW5sb2NrIHRvIGBzdHJ1Y3QgYmF0YWR2X3R0X2NvbW1vbl9lbnRyeWAgdG8gcHJvdGVjdCBjb25jdXJyZW50IHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRyYW5zbGF0aW9uIHRhYmxlIGVudHJ5IGZsYWdzIChgY29tbW9uLVxcdTAwM2VmbGFnc2ApIGFuZCByb2FtaW5nIHRpbWVzdGFtcHMgKGByb2FtX2F0YCkuXFxuMy4gTG9naWMgXFx1MDAyNiBuYW1pbmcgZml4ZXM6IEZpeGVzIG5laWdoYm9yIGNvbXBhcmlzb24gbG9naWMgaW4gYGJhdGFkdl92X25laWdoX2lzX3NvYigpYCBhbmQgcmVuYW1lcyBwYXJhbWV0ZXJzIGZvciBjbGFyaXR5IGluIGBiYXRhZHZfaXZfb2dtX25laWdoX2lzX3NvYigpYC5cXG40LiBEZWJ1ZyBvdXRwdXQgZml4OiBDb3JyZWN0cyBmaWVsZCBhY2Nlc3MgaW4gZGVidWcgcHJpbnRpbmcgZm9yIGVuY2Fwc3VsYXRlZCBEQVQgcGFja2V0cy5cXG41LiBIYXNoIHRhYmxlIGxvb2t1cCBhY2N1cmFjeTogSW50cm9kdWNlcyBgYmF0YWR2X2NvbXBhcmVfdHRfZW50cnkoKWAgdG8gbWF0Y2ggZXhhY3QgcG9pbnRlciBpZGVudGl0aWVzIGR1cmluZyBgYmF0YWR2X2hhc2hfcmVtb3ZlKClgLlxcblxcbk5vbmUgb2YgdGhlIGNoYW5nZXMgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFsbG9jYXRpb25zLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciBsZWFrIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSB0byB1c2VyIHNwYWNlLiBOZXRsaW5rIGR1bXAgaGFuZGxlcnMgKGBiYXRhZHZfZGF0X2NhY2hlX2R1bXBfZW50cnlgLCBgYmF0YWR2X3R0X2xvY2FsX2R1bXBfZW50cnlgLCBgYmF0YWR2X3R0X2dsb2JhbF9kdW1wX3N1YmVudHJ5YCkgb25seSBzZXJpYWxpemUgZnVsbHkgaW5pdGlhbGl6ZWQgc2NhbGFycyBhbmQgTUFDIGFkZHJlc3Nlcy4gQ29uY3VycmVuY3ksIGxpZmV0aW1lLCBhbmQgYm91bmRhcnkgY2hlY2tzIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBjb25zaXN0cyBvZiBzZXZlcmFsIGNsZWFudXBzIGFuZCBidWdmaXhlcyBpbiBiYXRtYW4tYWR2OlxcbjEuIEFsaWdubWVudCBhbm5vdGF0aW9uczogQWRkcyBgX19hbGlnbmVkKDIpYCB0byB2YXJpb3VzIE1BQyBhZGRyZXNzIGJ5dGUgYXJyYXlzIChgdTggYWRkcltFVEhfQUxFTl1gLCBgdTggb3JpZ1tFVEhfQUxFTl1gLCBldGMuKSB0byBlbnN1cmUgMi1ieXRlIGFsaWdubWVudCBmb3Igb3BlcmF0aW9ucyBsaWtlIGBldGhlcl9hZGRyX2NvcHkoKWAuXFxuMi4gQ29uY3VycmVuY3kgYW5kIGxvY2tpbmcgaW1wcm92ZW1lbnRzOiBJbnRyb2R1Y2VzIGBmbGFnc19sb2NrYCBzcGlubG9jayB0byBgc3RydWN0IGJhdGFkdl90dF9jb21tb25fZW50cnlgIHRvIHByb3RlY3QgY29uY3VycmVudCByZWFkL3dyaXRlIGFjY2VzcyB0byB0cmFuc2xhdGlvbiB0YWJsZSBlbnRyeSBmbGFncyAoYGNvbW1vbi1cXHUwMDNlZmxhZ3NgKSBhbmQgcm9hbWluZyB0aW1lc3RhbXBzIChgcm9hbV9hdGApLlxcbjMuIExvZ2ljIFxcdTAwMjYgbmFtaW5nIGZpeGVzOiBGaXhlcyBuZWlnaGJvciBjb21wYXJpc29uIGxvZ2ljIGluIGBiYXRhZHZfdl9uZWlnaF9pc19zb2IoKWAgYW5kIHJlbmFtZXMgcGFyYW1ldGVycyBmb3IgY2xhcml0eSBpbiBgYmF0YWR2X2l2X29nbV9uZWlnaF9pc19zb2IoKWAuXFxuNC4gRGVidWcgb3V0cHV0IGZpeDogQ29ycmVjdHMgZmllbGQgYWNjZXNzIGluIGRlYnVnIHByaW50aW5nIGZvciBlbmNhcHN1bGF0ZWQgREFUIHBhY2tldHMuXFxuNS4gSGFzaCB0YWJsZSBsb29rdXAgYWNjdXJhY3k6IEludHJvZHVjZXMgYGJhdGFkdl9jb21wYXJlX3R0X2VudHJ5KClgIHRvIG1hdGNoIGV4YWN0IHBvaW50ZXIgaWRlbnRpdGllcyBkdXJpbmcgYGJhdGFkdl9oYXNoX3JlbW92ZSgpYC5cXG5cXG5Ob25lIG9mIHRoZSBjaGFuZ2VzIGludHJvZHVjZSB1bmluaXRpYWxpemVkIG1lbW9yeSBhbGxvY2F0aW9ucywgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgbGVhayB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkgdG8gdXNlciBzcGFjZS4gTmV0bGluayBkdW1wIGhhbmRsZXJzIChgYmF0YWR2X2RhdF9jYWNoZV9kdW1wX2VudHJ5YCwgYGJhdGFkdl90dF9sb2NhbF9kdW1wX2VudHJ5YCwgYGJhdGFkdl90dF9nbG9iYWxfZHVtcF9zdWJlbnRyeWApIG9ubHkgc2VyaWFsaXplIGZ1bGx5IGluaXRpYWxpemVkIHNjYWxhcnMgYW5kIE1BQyBhZGRyZXNzZXMuIENvbmN1cnJlbmN5LCBsaWZldGltZSwgYW5kIGJvdW5kYXJ5IGNoZWNrcyBhcmUgYWxyZWFkeSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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,}